public void RefreshHero(Hero _hero) { X_GUID _guid = new X_GUID(); _guid.GUID_value = _hero.key; ObjectCard obj = FindHero(_guid); if (obj != null) { obj.GetHeroData().Init(_hero, true); obj.UpdateAttributeValue(); } else { ObjectCard pHero = new ObjectCard(); pHero.GetHeroData().Init(_hero); pHero.UpdateItemEffectValue(); pHero.UpdateTeamEffectValue(); pHero.UpdateTrainEffectValue(); AddIHero(pHero); newHeroList.Add(_guid); AssetLoader.Inst.DynamicLoadHeroCardRes(_hero.heroid); } GameEventDispatcher.Inst.dispatchEvent(GameEventID.Net_RefreshHero, _hero.key); }
/// <summary> /// 属性类型 是否显示 ///1 生命值 1 ///2 物攻值 1 ///3 物防值 1 ///4 法攻值 1 ///5 法防值 1 ///6 命中值 1 ///7 闪避值 ///8 暴击值 ///9 韧性值 ///10 速度值 ///11 恢复值 ///12 命中率*1000 ///13 闪避率*1000 ///14 暴击率*1000 ///15 韧性率*1000 ///16 暴击伤害率*1000 ///17 物伤加成率*1000 ///18 物伤减免率*1000 ///19 法伤加成率*1000 ///20 法伤减免率*1000 ///21 附加伤害值 ///22 绝对减伤值 ///23 普攻吸血*1000 ///24 减少技能CD*1000 ///25 初始加成怒气*1000 ///26 攻击额外怒气*1000 ///27 受击额外怒气*1000 ///101 生命率*1000 ///102 物攻率*1000 ///103 物防率*1000 ///104 法攻率*1000 ///105 法防率*1000 /// </summary> /// <param name="data"></param> /// <returns></returns> public static Dictionary <int, Pair> CompareAttriDic(ObjectCard _ObjectCard, List <X_GUID> items = null) { Dictionary <int, int> curDic = new Dictionary <int, int>(); Dictionary <int, int> afterDic = new Dictionary <int, int>(); HeroData curHd = _ObjectCard.GetHeroData(); ObjectCard beforC = new ObjectCard(); HeroData beforCHd = beforC.GetHeroData(); beforCHd.Copy(curHd); beforC.UpdateAttributeValue(); curDic.Add(1, (int)beforC.GetMaxHP()); //生命值; curDic.Add(2, beforC.GetPhysicalAttack()); //物理攻击力; curDic.Add(4, beforC.GetMagicAttack()); //法术攻击力 curDic.Add(3, beforC.GetPhysicalDefence()); //物理防御力 curDic.Add(5, beforC.GetMagicDefence()); //法术防御力; curDic.Add(6, beforC.GetHit()); //命中; curDic.Add(7, beforC.GetDodge()); //闪避; curDic.Add(8, beforC.GetCritical()); //暴击; curDic.Add(16, (int)beforC.GetCriticalRate()); //暴击率; curDic.Add(9, beforC.GetTenacity()); //韧性; curDic.Add(10, beforC.GetSpeed()); //速度; curDic.Add(11, (int)beforC.GetHpRecover()); //生命恢复力; curDic.Add(25, (int)beforC.GetInitPowerAddition()); //初始怒气; curDic.Add(17, (int)beforC.GetPhysicalHurtAddPermil()); //物理伤害加成率; curDic.Add(19, (int)beforC.GetMagicHurtAddPermil()); //法伤加成率; curDic.Add(21, beforC.GetExtraHurt()); //伤害附加值; curDic.Add(18, (int)beforC.GetPhysicalHurtReducePermil()); //物伤减免率; curDic.Add(20, (int)beforC.GetMagicHurtReducePermil()); //法伤减免率; curDic.Add(22, (int)beforC.GetReduceHurtPoint()); //伤害减免值; ObjectCard tmpCard = new ObjectCard(); HeroData tmpHD = tmpCard.GetHeroData(); tmpHD.Copy(curHd); // 全部符文(当前属性是装备符文后的-没有符文的)属性加成与符文更换(符文更改后的减去-符文更改前的); bool isInverse = true; if (items != null) { isInverse = false; //如果选择的更换符文已经装备在其身上,那么相当于换位置或者卸载--所以需要去除重复值; List <X_GUID> tmpItems = new List <X_GUID>(); foreach (X_GUID x in items) { X_GUID i = new X_GUID(); i.Copy(x); tmpItems.Add(i); } int idx = -1; if (GetItemsListRepeatFirstIdx(tmpItems, ref idx)) { tmpItems[idx].CleanUp(); } tmpHD.SetEquipItems(tmpItems); tmpCard.UpdateItemEffectValue(); } tmpCard.UpdateSpellEffectValue(); tmpCard.UpdateTeamEffectValue(); afterDic.Add(1, (int)tmpCard.GetMaxHP()); //生命值; afterDic.Add(2, tmpCard.GetPhysicalAttack()); //物理攻击力; afterDic.Add(3, tmpCard.GetPhysicalDefence()); //物理防御力; afterDic.Add(4, tmpCard.GetMagicAttack()); //法术攻击力; afterDic.Add(5, tmpCard.GetMagicDefence()); //法术防御力; afterDic.Add(6, tmpCard.GetHit()); //命中; afterDic.Add(7, tmpCard.GetDodge()); //闪避; afterDic.Add(8, tmpCard.GetCritical()); //暴击; afterDic.Add(16, (int)tmpCard.GetCriticalRate()); //暴击率; afterDic.Add(9, tmpCard.GetTenacity()); //韧性; afterDic.Add(10, tmpCard.GetSpeed()); //速度; afterDic.Add(11, (int)tmpCard.GetHpRecover()); //生命恢复力; afterDic.Add(25, (int)tmpCard.GetInitPowerAddition()); //初始怒气; afterDic.Add(17, (int)tmpCard.GetPhysicalHurtAddPermil()); //物理伤害加成率; afterDic.Add(19, (int)tmpCard.GetMagicHurtAddPermil()); //法伤加成率; afterDic.Add(21, tmpCard.GetExtraHurt()); //伤害附加值; afterDic.Add(18, (int)tmpCard.GetPhysicalHurtReducePermil()); //物伤减免率; afterDic.Add(20, (int)tmpCard.GetMagicHurtReducePermil()); //法伤减免率; afterDic.Add(22, tmpCard.GetReduceHurtPoint()); //伤害减免值; if (isInverse) { return(GetDifference(afterDic, curDic)); } else { return(GetDifference(curDic, afterDic)); } }