Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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();
        }