Browse Source

【需求】MMO-22439:山海残卷权重改成属性

meijun 3 years ago
parent
commit
c3cb7c54d3

BIN
Library/Debug/UnityEngine.dll


+ 27 - 3
XmdsCommon/Plugin/XmdsProperties.cs

@@ -1612,6 +1612,10 @@ namespace XmdsCommon.Plugin
 		public int monsterDef;				// 猎妖防
 		public int monsterAtkPer;           // 猎妖攻百分比
 		public int monsterDefPer;			// 猎妖防百分比
+
+        //内部属性, CardWeight
+        public int[] cardWeight = new int[(int)CardType.Max+1];
+
 		public int MaxMonsterAttack { get { return CUtils.CastInt(monsterAtk * (1 + monsterAtkPer * 0.0001f)); } }
 		public int MaxMonsterDef { get { return CUtils.CastInt(monsterDef * (1 + monsterDefPer * 0.0001f)); } }
 
@@ -1719,6 +1723,11 @@ namespace XmdsCommon.Plugin
 			ret.monsterAtkPer = this.monsterAtkPer;
 			ret.monsterDefPer = this.monsterDefPer;
 
+            for(int i = 0; i < cardWeight.Length; i++)
+            {
+                ret.cardWeight[i] = this.cardWeight[i];
+            }
+
 			return ret;
         }
 
@@ -1804,7 +1813,12 @@ namespace XmdsCommon.Plugin
 			this.monsterDef += prop.monsterDef;
 			this.monsterAtkPer += prop.monsterAtkPer;
 			this.monsterDefPer += prop.monsterDefPer;
-		}
+
+            for (int i = 0; i < cardWeight.Length; i++)
+            {
+                this.cardWeight[i] += prop.cardWeight[i];
+            }
+        }
 
         public void WriteExternal(IOutputStream output)
         {
@@ -1879,7 +1893,12 @@ namespace XmdsCommon.Plugin
 			output.PutS32(this.monsterDef);
 			output.PutS32(this.monsterAtkPer);
 			output.PutS32(this.monsterDefPer);
-		}
+
+            //for (int i = 0; i < cardWeight.Length; i++)
+            //{
+            //    output.PutS32(this.cardWeight[i]);
+            //}
+        }
 
         public void ReadExternal(IInputStream input)
         {
@@ -1954,7 +1973,12 @@ namespace XmdsCommon.Plugin
 			this.monsterDef = input.GetS32();
 			this.monsterAtkPer = input.GetS32();
 			this.monsterDefPer = input.GetS32();
-		}
+
+            //for (int i = 0; i < cardWeight.Length; i++)
+            //{
+            //    this.cardWeight[i] = input.GetS32();
+            //}
+        }
 	}
 
     #endregion

+ 3 - 0
XmdsCommonServer/Plugin/Base/JSGXmdsComInterface.cs

@@ -22,6 +22,9 @@ namespace XmdsCommon.JSGModule.Interface
 		void OnHitDamage(XmdsVirtual attacker, AttackSource source, int damage, DamageType damageType);                 // 收到攻击
 		void Dispose();
 
+		/** 重载卡牌权重信息 */
+		void ReloadCardSkillWeight();
+
 		//技能数据变更
 		void OnSkillDataChange(GameSkill info);
 		void OnInitOver(GameSkill gs, IJSGCardSkill cardSkill);

+ 2 - 0
XmdsCommonServer/Plugin/CardSkill/Base/JSGCardModuleBase.cs

@@ -71,6 +71,8 @@ namespace XmdsCommonServer.Plugin.CardSkill
 		public virtual void OnInitOver(GameSkill info, IJSGCardSkill cardSkill) { }
 		public virtual void TriggerSkillLoadStrength(CardSkillData skillData, int sameNums) { }
 
+		public virtual void ReloadCardSkillWeight() { }
+
 		public void Dispose()
 		{
 			this.mClearCardTime = CommonLang.CUtils.localTimeMS + XmdsConfig.Instance.CARD_OUTBATTLE_VALID_TIME;

+ 2 - 0
XmdsCommonServer/Plugin/CardSkill/Def/JSGOtherCardModule.cs

@@ -32,6 +32,8 @@ namespace XmdsCommonSkill.Plugin.CardSkill
 			//throw new NotImplementedException();
 		}
 
+		public void ReloadCardSkillWeight() { }
+
 		NextCardStrengthenInfo IJSCardSkillModule.AddNextStrengthInfo(CardType type, CardStrengthenType strenghType, int value1, int value2, int validTime, int validTimes, byte needSames, DamageType dmgType, CardLayerRule layerRules)
 		{
 			return null;

+ 14 - 1
XmdsCommonServer/Plugin/CardSkill/PlayerCardSkill/JSGCardInterface.cs

@@ -203,7 +203,7 @@ namespace XmdsCommonSkill.Plugin.CardSkill
 		public CardType type;
 		public int skillId;
 		public short skilLv;
-		public int weight;
+		private int weight;
 		public DamageType dmgType = DamageType.None;			//技能是否有伤害
 
 		public CardSkillData(int skillId, CardType type)
@@ -211,6 +211,19 @@ namespace XmdsCommonSkill.Plugin.CardSkill
 			this.skillId = skillId;
 			this.type = type;
 		}
+
+		public void setWeight(XmdsVirtual unit)
+        {
+			if(this.type < CardType.Max)
+            {
+				this.weight = unit.MirrorProp.cardWeight[(int)this.type];
+            }
+        }
+
+		public int GetWeight()
+        {
+			return this.weight;
+        }
 	}
 
 	//触发卡牌技能延时数据

+ 8 - 2
XmdsCommonServer/Plugin/CardSkill/PlayerCardSkill/JSGCardRateModule.cs

@@ -128,7 +128,7 @@ namespace CommonAI.ZoneServer.JSGModule
 		{
 			if (data.isPrecent)
 			{
-				return CUtils.CastInt(data.value * XmdsUnitProp.PER * playerCardSkill[(int)cardType].weight);
+				return CUtils.CastInt(data.value * XmdsUnitProp.PER * playerCardSkill[(int)cardType].GetWeight());
 			}
 
 			return data.value;
@@ -153,7 +153,7 @@ namespace CommonAI.ZoneServer.JSGModule
 		{
 			for (int i = 0; i <= (int)CardType.Max; i++)
 			{
-				this.cardWeight[i] = cardSkill[i].weight;
+				this.cardWeight[i] = cardSkill[i].GetWeight();
 				this.weightFlag[i] = false;
 				this.doubleRate[i] = 0;
 			}
@@ -200,6 +200,12 @@ namespace CommonAI.ZoneServer.JSGModule
 				totalWeight += this.cardWeight[i];
 			}
 
+			if(totalWeight <= 0)
+            {
+				log.Warn("概率出问题了!");
+				return new GenCardData((CardType)(GlobalData.gRandom.Next() % ((int)CardType.Max)), 1);
+			}
+
 			int randValue = GlobalData.gRandom.Next() % totalWeight;
 			for (int i = 0; i < (int)CardType.Max; i++)
 			{

+ 35 - 16
XmdsCommonServer/Plugin/CardSkill/PlayerCardSkill/JSGPlayerCardModule.cs

@@ -63,9 +63,7 @@ namespace XmdsCommonSkill.Plugin.CardSkill
 				log.Error("XmdsPlayerCardSkill init 四象系统技能数量错误 : " + owner.mUnit.Parent.GetSceneID() + ", " + owner.mUnit.PlayerUUID + ", " + prop.ServerData.CardSkills.UnitSkills.Count);
 				return false;
 			}
-
-			int totalWeight = 0;
-			String extInfo = "";
+			
 			for (int i = 0; i <= (int)CardType.Max; i++)
 			{
 				GameSkill gs = prop.ServerData.CardSkills.UnitSkills[i];
@@ -73,16 +71,12 @@ namespace XmdsCommonSkill.Plugin.CardSkill
 				if(!this.InitSkillData(mPlayerCardSkill[i], gs))
 				{
 					return false;
-				}
-
-				totalWeight += gs.TalentSkillLevel1;
-				extInfo = extInfo + ", " + gs.TalentSkillLevel1;
+				}				
 			}
 
-			String uniqueInfo = owner.mUnit.IsPlayer ? owner.mUnit.PlayerUUID : (owner.mUnit.Parent.GetSceneID() + "_" + owner.mInfo.ID);
-			log.Info("初始化卡牌:" + uniqueInfo + ", 总权重:" + totalWeight + ", " + extInfo);
-			this.mIsFuncOpen = totalWeight > 0;
+			this.ReloadCardSkillWeight();
 			this.ReSet(true, notifyClient);
+			String uniqueInfo = mOwner.mUnit.IsPlayer ? mOwner.mUnit.PlayerUUID : (mOwner.mUnit.Parent.GetSceneID() + "_" + mOwner.mInfo.ID);
 			mCardRateModule.initUniqueInfo(uniqueInfo);
 			return true;
 		}
@@ -121,7 +115,11 @@ namespace XmdsCommonSkill.Plugin.CardSkill
 			}
 
 			cardSkillData.skilLv = (short)gs.SkillLevel;
-			cardSkillData.weight = gs.TalentSkillLevel1;
+			//if(cardSkillData.type < CardType.Max)
+			//{
+			//	cardSkillData.setWeight(this.mOwner);
+			//}
+			
 			return true;
 		}
 
@@ -227,12 +225,33 @@ namespace XmdsCommonSkill.Plugin.CardSkill
 				if(data != null && data.skillId == info.SkillID)
 				{
 					data.skilLv = (short)info.SkillLevel;
-					data.weight = info.TalentSkillLevel1;
 					break;
 				}
 			}
 		}
 
+		public override void ReloadCardSkillWeight()
+        {
+			int totalWeight = 0;
+			String extInfo = "";
+			for (int i = 0; i < (int)CardType.Max; i++)
+			{
+				CardSkillData data = mPlayerCardSkill[i];
+				if (data != null)
+				{
+					totalWeight += this.mOwner.MirrorProp.cardWeight[i];
+					data.setWeight(this.mOwner);
+
+					extInfo = extInfo + ", " + this.mOwner.MirrorProp.cardWeight[i];
+				}
+			}
+
+			String uniqueInfo = mOwner.mUnit.IsPlayer ? mOwner.mUnit.PlayerUUID : (mOwner.mUnit.Parent.GetSceneID() + "_" + mOwner.mInfo.ID);
+			log.Info("卡牌权重信息:" + uniqueInfo + ", 总权重:" + totalWeight + ", " + extInfo);
+			this.mIsFuncOpen = totalWeight > 0;
+		}
+
+
 		public override void OnInitOver(GameSkill info, IJSGCardSkill cardSkill)
 		{
 			for (int i = 0; i < mPlayerCardSkill.Length; i++)
@@ -241,10 +260,10 @@ namespace XmdsCommonSkill.Plugin.CardSkill
 				if (data != null && data.skillId/100000 == info.SkillID/100000)
 				{					
 					this.InitSkillData(mPlayerCardSkill[i], info, cardSkill);
-					if(info.TalentSkillLevel1 > 0 && !this.mIsFuncOpen)
-					{
-						this.mIsFuncOpen = true;
-					}
+					//if(info.TalentSkillLevel1 > 0 && !this.mIsFuncOpen)
+					//{
+					//	this.mIsFuncOpen = true;
+					//}
 					break;
 				}
 			}

+ 1 - 0
XmdsCommonServer/Plugin/XmdsVirtual/XmdsVirtual.Message.cs

@@ -88,6 +88,7 @@ namespace XmdsCommonServer.Plugin
                 InitBaseData(mProp.ServerData.Prop);
                 //刷新属性.
                 UnitPropRefresh(MirrorProp);
+                this.mCardModule.ReloadCardSkillWeight();
                 SyncBattlePropsFields(PlayerBattlePropChangeEventB2C.MASK_ALL);
             }
             else

+ 7 - 1
XmdsServerCS/XmdsServerEdgeJS/XmdsPlayerUtil.cs

@@ -360,7 +360,13 @@ namespace XmdsServerEdgeJS
 				prop.monsterAtkPer = (input.MonsterAtkPer != null) ? (int)input.MonsterAtkPer : 0;
 				prop.monsterDefPer = (input.MonsterDefPer != null) ? (int)input.MonsterDefPer : 0;
 
-				return prop;
+                //卡牌权重属性
+                prop.cardWeight[(int)CardType.QingLong] = input.SHCQingLong != null ? (int)input.SHCQingLong : 0;
+                prop.cardWeight[(int)CardType.ZhuQue] = input.SHCZhuQue != null ? (int)input.SHCZhuQue : 0;
+                prop.cardWeight[(int)CardType.BaiHu] = input.SHCBaiHu != null ? (int)input.SHCBaiHu : 0;
+                prop.cardWeight[(int)CardType.XuanWu] = input.SHCXuanWu != null ? (int)input.SHCXuanWu : 0;
+
+                return prop;
             }
             catch (Exception err)
             {