public bool AssignHero(List <int> heroTeam) { if (heroTeam.Count > 3 || heroTeam.Count == 0) { return(false); } PlayerHeroLogic ph = new PlayerHeroLogic(); ph.SetUser(m_UserId); foreach (int heroId in heroTeam) { if (!ph.SetHero(heroId).DataCheck()) { return(false); } } for (int i = 0; i < GameConsts.Hero.MaxHeroTeamCount; i++) { if (i + 1 > heroTeam.Count) { m_Team.Team[i] = 0; } else { m_Team.Team[i] = heroTeam[i]; } } PlayerLogic p = new PlayerLogic(); p.SetUser(m_UserId); p.RefreshMight(); return(true); }
public void RefreshMight() { int oldMight = m_Hero.Might; var atkData = CacheSet.MightLevelParamTable.GetData(m_Hero.HeroLv); float physicalA_Atk = atkData.PhysicalAttack * atkData.PhysicalAttack / (atkData.PhysicalAttack + m_Hero.PhysicalDefense); float magicalA_Atk = atkData.MagicAttack * atkData.MagicAttack / (atkData.MagicAttack + m_Hero.MagicDefense); //attack relate might float basePhysicalAtk = m_Hero.PhysicalAttack * m_Hero.PhysicalAttack / (m_Hero.PhysicalAttack + atkData.PhysicalDefense * (1 - m_Hero.OppPhysicalDfsReduceRate)); float baseMagicAtk = m_Hero.MagicAttack * m_Hero.MagicAttack / (m_Hero.MagicAttack + atkData.MagicDefense * (1 - m_Hero.OppMagicDfsReduceRate)); float baseAtk = basePhysicalAtk + baseMagicAtk; float cooldownAtk = baseAtk * m_Hero.ReducedSkillCoolDownRate * 1000; float waitingAtk = baseAtk * m_Hero.ReduceSwitchHeroCoolDownRate * 1000; float criticalAtk = baseAtk * m_Hero.CriticalHitRate * m_Hero.CriticalHitProb * 10000; float physicalReflectAtk = physicalA_Atk * m_Hero.PhysicalAtkReflectRate * 100; float magicalReflectAtk = magicalA_Atk * m_Hero.MagicAtkReflectRate * 100; float skillAtk = 50; // for (int i = 0; i < m_Hero.SkillLevels.Count; i++) // { // DTSkillLevelUp skillData = CacheSet.SkillLevelUpTable.GetData(h => (h.HeroType == m_Hero.HeroType && h.SkillIndex == i && h.SkillLevel == m_Hero.SkillLevels[i])); // skillAtk += 10;//skillData.MightParam; // } float atkMight = baseAtk + cooldownAtk + waitingAtk + criticalAtk + physicalReflectAtk + magicalReflectAtk + m_Hero.AdditionalDamage + skillAtk; //HP related might float baseHP = m_Hero.MaxHP; float defenseHP = (m_Hero.PhysicalDefense + m_Hero.MagicDefense) * 6; float antiCriticalHitHP = (physicalA_Atk + magicalA_Atk) * (1 - m_Hero.AntiCriticalHitProb); float RecoverHP = m_Hero.RecoverHP * 0.1f; float damageReduceHP = (m_Hero.PhysicalDefense + m_Hero.MagicDefense) * (1 - m_Hero.DamageReductionRate); float physicalAbsorbHP = basePhysicalAtk * m_Hero.PhysicalAtkHPAbsorbRate * 100; float magicalAbsorbHP = baseMagicAtk * m_Hero.MagicAtkHPAbsorbRate * 100; float hpMight = baseHP + defenseHP - antiCriticalHitHP + RecoverHP - damageReduceHP + physicalAbsorbHP + magicalAbsorbHP; int might = Mathf.RoundToInt(atkMight * hpMight / (atkMight + hpMight)); m_Hero.Might = might; // TraceLog.WriteError("Calculating user:{0}->hero:{1} might:\nMaxHP => {2}\nPhysicalAttack => {3}\nMagicalAttack => {4}\nPhysicalDefense => {5}\nMagicalDefense=>{6}\n" + // "OppPhysicalDfsReduceRate => {7}\nOppMagicDfsReduceRate => {8}\nPhysicalAtkHPAbsorbRate => {9}\nMagicAtkHPAbsorbRate => {10}\nPhysicalAtkReflectRate => {11}\n" + // "MagicAtkReflectRate => {12}\nDamageReductionRate => {13}\nReducedSkillCoolDownRate => {14}\nReduceSwitchHeroCoolDownRate => {15}\nCriticalHitProb => {16}\n" + // "CriticalHitRate => {17}\nAntiCriticalHitProb => {18}\nAdditionalDamage => {19}\nRecoverHP => {20}\nBaseAtk => {21}\nAtkMight => {22}\nHPMight => {23}", m_UserId, m_HeroId, m_Hero.MaxHP, m_Hero.PhysicalAttack, m_Hero.MagicAttack, // m_Hero.PhysicalDefense, m_Hero.MagicDefense, m_Hero.OppPhysicalDfsReduceRate, m_Hero.OppMagicDfsReduceRate, m_Hero.PhysicalAtkHPAbsorbRate, m_Hero.MagicAtkHPAbsorbRate, // m_Hero.PhysicalAtkReflectRate, m_Hero.MagicAtkReflectRate, m_Hero.DamageReductionRate, m_Hero.ReducedSkillCoolDownRate, m_Hero.ReduceSwitchHeroCoolDownRate, // m_Hero.CriticalHitProb, m_Hero.CriticalHitRate, m_Hero.AntiCriticalHitProb, m_Hero.AdditionalDamage, m_Hero.RecoverHP, baseAtk, atkMight, hpMight); PlayerAchievementLogic.GetInstance(m_UserId).UpdateAchievement(AchievementType.HeroMight, m_Hero.Might); AnnouncementLogic.PushHeroMightAnnouncement(m_UserId, oldMight, might, m_Hero.HeroType); PlayerLogic p = new PlayerLogic(); p.SetUser(m_UserId); p.RefreshMight(); }