少年修仙传客户端代码仓库
client_Hale
2019-04-23 812f98f4f2d12a4778296fc18fbb4fd2ff7811af
6517 【前端】【2.0】战斗公式参数修改
5个文件已修改
276 ■■■■■ 已修改文件
Core/GameEngine/Model/Player/Character/PlayerExtersionData.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Player/PlayerDatas.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/Skill/AttackHandler.cs 255 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/EnumHelper.cs 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/UIHelper.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/GameEngine/Model/Player/Character/PlayerExtersionData.cs
@@ -44,8 +44,9 @@
    public int SuperHitReduce;     // 暴击抗性 146,
    public int LuckyHitRateReduce;  // 会心一击抗性 147,
    public int skillAtkRateReduce; //技能减伤 148,
    public int DamagePer;           //增加伤害 149
    public int DamagePVP;           //增加伤害 149
    public int SpeedValue;//移动速度 150
    public int DamagePVE;           //增加伤害 151
    public int IgnoreDefRate;   //无视防御 135
    public int IgnoreDefRateReduce;//无视防御抗性 153
    public int DamChanceDef; //抵御 154
Core/GameEngine/Model/Player/PlayerDatas.cs
@@ -688,8 +688,8 @@
            case PlayerDataType.SkillAtkRate:
                extersion.SkillAtkRate = (int)value;
                break;
            case PlayerDataType.Damageper:
                extersion.DamagePer = (int)value;
            case PlayerDataType.DamagePVP:
                extersion.DamagePVP = (int)value;
                break;
            case PlayerDataType.HPRestorePer:
                extersion.HPRestorePer = (int)value;
@@ -704,7 +704,7 @@
                    hero.CalculateMoveSpeed((ushort)extersion.SpeedValue);
                }
                break;
            case PlayerDataType.LuckPer:
            case PlayerDataType.DamagePVE:
                break;
            case PlayerDataType.PetDamPer:
                extersion.PetDamPer = (int)value;
Fight/Actor/Skill/AttackHandler.cs
@@ -340,23 +340,30 @@
        int _aDamagePer = 0;// 伤害加成            万分率
        //int _aDamagePerPVP = 0;// PVP伤害加成            万分率
        int _aFinalHurt = 0;// 最终伤害加成        固定值
        int _aIceAtkSuperHit = 1;// 真实伤害暴击倍值    倍值, 默认1
        //int _aIceAtkSuperHit = 1;// 真实伤害暴击倍值    倍值, 默认1
        int _aOnlyFinalHurt = 0;
        int _aFinalHurtPer = 0;
        int _aDamagePVE = 0;
        int _superHit = 0;
        int _luckyHit = 0;
        int _aNPCHurtAddPer = 0;
        int _aRealmLv = 0;
        int _suppressLV = 0;
        float _suppressLV_0 = 0;
        //int _dLuckyHitReduce = 0;// 会心一击伤害减少    万分率, 默认0, 会心一击时有值
        //int _dSuperHitReduce = 0;// 暴击伤害减少        万分率, 默认0, 暴击时有值
        int _dDamChanceDef = 0;// 抵御伤害比例        万分率, 默认0, 只在格挡成功才有值, 格挡成功率默认20%
        int _dDef = 0;// 防御值                固定值
        int _dIceDef = 1;// 真实伤害防御        固定值
        //int _dIgnoreDefRateReduce = 0;// 无视防御比率抗性    万分率
        //int _dSkillAtkRateReduce = 0;// 技能伤害减少        万分率
        int _dDamReduce = 0;// 伤害减少            万分率
        int _dIgnoreDefRateReduce = 0;// 无视防御比率抗性    万分率
        int _dSkillAtkRateReduce = 0;// 技能伤害减少        万分率
        //int _dDamagePerPVPReduce = 0;// PVP伤害减少            万分率
        int _dFinalHurtReduce = 0;// 最终伤害减少        固定值
        int _dRealmLv = 0;
        int _suppressValueRealmRate = 1;
        float _suppressFightPower = 0;
        float _suppressValueFP_0 = 0;
        #region 伤害替换
@@ -427,10 +434,16 @@
            _missRate = _npcBase.NpcConfig.MissRate;
            _dDef = _npcBase.NpcConfig.Def;
            _dRealmLv = _npcBase.NpcConfig.Realm;
            _dIceDef = _npcBase.NpcConfig.IceDef;
        }
        else if (target.ActorType == GameObjType.gotPlayer)
        {
            _missRate = PlayerDatas.Instance.extersion.Miss;
            _dIgnoreDefRateReduce = PlayerDatas.Instance.extersion.IgnoreDefRateReduce;
            _dRealmLv = PlayerDatas.Instance.baseData.realmLevel;
            _dIceDef = PlayerDatas.Instance.extersion.realDEF;
            _dDef = PlayerDatas.Instance.extersion.DEF;
        }
        // -------------- 指定攻击方属性 --------------
@@ -450,7 +463,7 @@
            _aMinAtk = (int)(PlayerDatas.Instance.extersion.MINATK * _rate);
            _aIgnoreDefRate = PlayerDatas.Instance.extersion.IgnoreDefRate;
            _aSkillAtkRate = PlayerDatas.Instance.extersion.SkillAtkRate;
            _aDamagePer = PlayerDatas.Instance.extersion.DamagePer;
            _aDamagePer = PlayerDatas.Instance.extersion.DamagePVP;
            _aFinalHurt = (int)(PlayerDatas.Instance.extersion.FinalHurt);
            _aIceAtk = (int)(PlayerDatas.Instance.extersion.realATK * _rate);
            _aOnlyFinalHurt = PlayerDatas.Instance.extersion.OnlyFinalHurt;
@@ -458,6 +471,8 @@
            _superHit = PlayerDatas.Instance.extersion.SuperHit;
            _aNPCHurtAddPer = PlayerDatas.Instance.extersion.NpcHurtAddPer;
            _aFinalHurtPer = PlayerDatas.Instance.extersion.FunalHurtPer;
            _aDamagePVE = PlayerDatas.Instance.extersion.DamagePVE;
            _aRealmLv = PlayerDatas.Instance.baseData.realmLevel;
        }
        else if (attacker.ActorType == GameObjType.gotNPC)
        {
@@ -466,14 +481,46 @@
            {
                return;
            }
            var _config = _npcBase.NpcConfig;
            _hitRate = _npcBase.NpcConfig.Hit;
            _hitRate = _config.Hit;
            _isCrit = IsCrit(_npcBase.NpcConfig.SuperHiteRate);
            _isCrit = IsCrit(_config.SuperHiteRate);
            _aMaxAtk = _npcBase.NpcConfig.MaxAtk;
            _aMinAtk = _npcBase.NpcConfig.MinAtk;
            _aMaxAtk = _config.MaxAtk;
            _aMinAtk = _config.MinAtk;
            _aRealmLv = _config.Realm;
            _aIceAtk = _config.IceAtk;
            if (target.ActorType == GameObjType.gotPlayer)
            {
                _suppressLV = Mathf.Max(0, _config.NPCLV - PlayerDatas.Instance.baseData.LV);
                _suppressFightPower = Mathf.Max(0, _config.ThunderDef - PlayerDatas.Instance.baseData.FightPoint);
                /* 等级压制
                    (min(max(suppressLV-10,0),10)*0.02
                    +min(max(suppressLV-20,0),10)*0.03
                    +min(max(suppressLV-30,0),10)*0.05
                    +min(max(suppressLV-40,0),10)*1
                    +min(max(suppressLV-50,0),50)*0.1)
                 */
                _suppressLV_0 = Mathf.Min(Mathf.Max(_suppressLV - 10, 0), 10) * .02f
                              + Mathf.Min(Mathf.Max(_suppressLV - 20, 0), 10) * .03f
                              + Mathf.Min(Mathf.Max(_suppressLV - 30, 0), 10) * .05f
                              + Mathf.Min(Mathf.Max(_suppressLV - 40, 0), 10)
                              + Mathf.Min(Mathf.Max(_suppressLV - 50, 0), 10) * .1f;
                /* 战力压制
                    min(max(suppressFightPower*1.0/suppressNPCFightPower-0,0),0.05)*5
                   +min(max(suppressFightPower*1.0/suppressNPCFightPower-0.05,0),0.15)*8
                   +min(max(suppressFightPower*1.0/suppressNPCFightPower-0.2,0),1)*10
                 */
                _suppressValueFP_0 = Mathf.Min(Mathf.Max(_suppressFightPower * 1f / _config.ThunderDef, 0), .05f) * 5
                                   + Mathf.Min(Mathf.Max(_suppressFightPower * 1f / _config.ThunderDef - .05f, 0), .15f) * 8
                                   + Mathf.Min(Mathf.Max(_suppressFightPower * 1f / _config.ThunderDef - .2f, 0), 1f) * 10;
            }
        }
        _isMiss = IsMiss(_hitRate, _missRate);
        _isCrit = IsCrit(_aSuperHitRate);
@@ -566,172 +613,50 @@
        }
        // -------------- 公式计算 --------------
        float _value1;
        float _value2;
        float _value3;
        // PVE
        if (attacker.ActorType == GameObjType.gotPlayer
         && (target.ActorType == GameObjType.gotNPC || target is GA_PVPClientPlayer))
        {
            //"PVE_1"    :"int(max((((max((aMaxAtk if isLuckyHit else (aMinAtk + (aMaxAtk - aMinAtk)*rand))
            //            -dDef*max(1-aIgnoreDefRate/10000.0,0),1))*(1+(aLuckyHit/10000.0 if isLuckyHit else 0))
            //            +(aSuperHit if isSuperHit else 0)+ max(aIceAtkSuperHit*aIceAtk - dIceDef, 0))
            //            *(atkSkillPer+(aZhuxianHurtPer/10000.0 if isZhuxianHit else 0)+aSkillAtkRate/10000.0)
            //            *(1+aDamagePer/10000.0)+max(aFinalHurt+aOnlyFinalHurt-dFinalHurtReduce, 0)
            //            +atkSkillValue)*(1+dBeHurtPer/10000.0)*max(1+aFinalHurtPer/10000.0,1)
            //            +aNPCHurtAddPer/10000.0*(aMinAtk+aMaxAtk)/2.0,(aMinAtk+aMaxAtk)/2*0.05 + (aMinAtk+aMaxAtk)/2*0.1*rand))"
            /* "PVE_1"    :"int(SuppressValueRealmRate/10000*
                          max((((
                              max((aMaxAtk if isLuckyHit else (aMinAtk + (aMaxAtk - aMinAtk)*rand))-dDef*(1-max(aIgnoreDefRate-dIgnoreDefRateReduce,0)/10000.0),0)
                          +(max(aLuckyHit,0) if  isLuckyHit else 0)
                          +(max(aSuperHit,0) if isSuperHit else 0)
                          +max(aIceAtk-dIceDef,0))
                          *max((atkSkillPer
                              +(aZhuxianHurtPer/10000.0 if  isZhuxianHit else 0)
                              +(aSkillAtkRate-dSkillAtkRateReduce)/10000.0)
                              +aNPCHurtAddPer/10000.0-(min(dDamChanceDef,8000)/10000.0),0.5))
                              +aFinalHurt-dFinalHurtReduce+atkSkillValue+aDamagePVE)
                              *max((1+aFinalHurtPer/10000.0)*(1-dFinalHurtReducePer/10000.0),0.2),(aMaxAtk+aMinAtk)/2*0.05+(aMaxAtk+aMinAtk)/2*0.1*rand))"
            */
            float _random = Random.Range(0f, 1f);
            _value1 = _aMinAtk + (_aMaxAtk - _aMinAtk) * _random;
            hurtValue = (uint)(_suppressValueRealmRate * (Mathf.Max((((Mathf.Max((_isLucky ? _aMaxAtk : _aMinAtk + (_aMaxAtk - _aMinAtk) * Random.Range(0f, 1f)) - _dDef * (1 - Mathf.Max(_aIgnoreDefRate - _dIgnoreDefRateReduce, 0)) * Constants.F_DELTA, 0)
                             + (_isLucky ? Mathf.Max(_aLuckyHit, 0) : 0)
                             + (_isCrit ? Mathf.Max(_aSuperHit, 0) : 0)
                             + Mathf.Max(_aIceAtk - _dIceDef, 0))
                             * Mathf.Max((_aAtkSkillPer
                                        + (_isZhuxianHit ? _aZhuxianHurtPer * Constants.F_DELTA : 0)
                                        + (_aSkillAtkRate - _dSkillAtkRateReduce) * Constants.F_DELTA)
                                        + _aNPCHurtAddPer * Constants.F_DELTA - Mathf.Min(_dDamChanceDef, 8000) * Constants.F_DELTA, .5f))
                                        + _aFinalHurt - _dFinalHurtReduce + _atkSkillValue + _aDamagePVE)
                                        * Mathf.Max((1 + _aFinalHurtPer * Constants.F_DELTA) * (1 - _dFinalHurtReduce * Constants.F_DELTA), .2f), (_aMaxAtk + _aMinAtk) * .5f * .05f + (_aMaxAtk + _aMinAtk) * .5f * .1f * Random.Range(0, 1))));
#if UNITY_EDITOR
            if (RuntimeLogUtility.s_HurtValueLog)
            {
                Debug.LogFormat("_aMinAtk + (_aMaxAtk - _aMinAtk) * _random = {0}", _value1);
            }
#endif
            _value2 = _dDef * Mathf.Max(1 - _aIgnoreDefRate * Constants.F_DELTA, 1);
#if UNITY_EDITOR
            if (RuntimeLogUtility.s_HurtValueLog)
            {
                Debug.LogFormat("_dDef * Mathf.Max(1 - _aIgnoreDefRate * Constants.F_DELTA, 1) = {0}", _value2);
            }
#endif
            _value3 = _isLucky ? _aMaxAtk : _value1;
#if UNITY_EDITOR
            if (RuntimeLogUtility.s_HurtValueLog)
            {
                Debug.LogFormat("_isLucky ? _aMaxAtk : _value1 = {0}", _value3);
            }
#endif
            _value3 = _value3 - _value2;
#if UNITY_EDITOR
            if (RuntimeLogUtility.s_HurtValueLog)
            {
                Debug.LogFormat("_value3 - _value2 = {0}", _value3);
            }
#endif
            _value3 = Mathf.Max(_value3, 1);
#if UNITY_EDITOR
            if (RuntimeLogUtility.s_HurtValueLog)
            {
                Debug.LogFormat("Mathf.Max(_value3, 1) = {0}", _value3);
            }
#endif
            _value1 = 1 + (_isLucky ? _aLuckyHit * Constants.F_DELTA : 0);
#if UNITY_EDITOR
            if (RuntimeLogUtility.s_HurtValueLog)
            {
                Debug.LogFormat("1 + (_isLucky ? _aLuckyHit * Constants.F_DELTA : 0) = {0}", _value1);
            }
#endif
            _value3 *= _value1;
#if UNITY_EDITOR
            if (RuntimeLogUtility.s_HurtValueLog)
            {
                Debug.LogFormat("_value3 *= _value1 = {0}", _value3);
            }
#endif
            _value3 += _aSuperHit;
#if UNITY_EDITOR
            if (RuntimeLogUtility.s_HurtValueLog)
            {
                Debug.LogFormat("_value3 += _aSuperHit = {0}", _value3);
            }
#endif
            _value3 += Mathf.Max(_aIceAtkSuperHit * _aIceAtk - _dIceDef, 0);
#if UNITY_EDITOR
            if (RuntimeLogUtility.s_HurtValueLog)
            {
                Debug.LogFormat("_value3 += Mathf.Max(_aIceAtkSuperHit * _aIceAtk - _dIceDef, 0) = {0}", _value3);
            }
#endif
            _value1 = (_aAtkSkillPer + (_isZhuxianHit ? _aZhuxianHurtPer * Constants.F_DELTA : 0) + _aSkillAtkRate * Constants.F_DELTA) * (1 + _aDamagePer * Constants.F_DELTA);
#if UNITY_EDITOR
            if (RuntimeLogUtility.s_HurtValueLog)
            {
                Debug.LogFormat("(_aAtkSkillPer + _aSkillAtkRate * Constants.F_DELTA) * (1 + _aDamagePer * Constants.F_DELTA) = {0}", _value1);
            }
#endif
            _value3 *= _value1;
#if UNITY_EDITOR
            if (RuntimeLogUtility.s_HurtValueLog)
            {
                Debug.LogFormat("_value3 *= _value1", _value3);
            }
#endif
            _value3 += _aFinalHurt + _aOnlyFinalHurt + _atkSkillValue;
#if UNITY_EDITOR
            if (RuntimeLogUtility.s_HurtValueLog)
            {
                Debug.LogFormat("_value3 += _aFinalHurt + _aOnlyFinalHurt + _atkSkillValue  = {0}", _value3);
            }
#endif
            _value2 = Mathf.Max(1 + _aFinalHurtPer * Constants.F_DELTA, 1);
            _value3 *= _value2;
            _value2 = _aNPCHurtAddPer * Constants.F_DELTA * (_aMinAtk + _aMaxAtk) * .5f;
            _value3 += _value2;
            //(aMinAtk+aMaxAtk)/2*0.05 + (aMinAtk+aMaxAtk)/2*0.1*rand)
            _random = Random.Range(0f, 1f);
            _value1 = (_aMinAtk + _aMaxAtk) * .5f * .05f + (_aMinAtk + _aMaxAtk) * .5f * .1f * _random;
#if UNITY_EDITOR
            if (RuntimeLogUtility.s_HurtValueLog)
            {
                Debug.LogFormat("(_aMinAtk + _aMaxAtk) * .5f * .3f + (_aMinAtk + _aMaxAtk) * .5f * .2f * _random  = {0}", _value3);
            }
#endif
            hurtValue = (uint)Mathf.Max(_value3, _value1);
#if UNITY_EDITOR
            if (RuntimeLogUtility.s_HurtValueLog)
            {
                Debug.LogFormat("(uint)Mathf.Max(_value3, _value1) = {0}", _value3);
            }
#endif
        }
        // EVP
        else if ((attacker.ActorType == GameObjType.gotNPC
              && target.ActorType == GameObjType.gotPlayer) || attacker is GA_PVPClientPlayer)
        {
            // "EVP_1"    :"max((max((aMinAtk+aMaxAtk)/2.0-dDef,0)+max(aIceAtk - dIceDef, 0))*(atkSkillPer+aSkillAtkRate/10000.0)*(1-min(dDamReduce,8000)/10000.0)*(1-min(dDamChanceDef,8000)/10000.0)+max(aFinalHurt-dFinalHurtReduce, 0)+atkSkillValue,1)"
            _value1 = Mathf.Max((_aMaxAtk + _aMinAtk) * .5f - _dDef, 0);
            _value2 = Mathf.Max(_aIceAtk - _dIceDef, 0);
            _value1 += _value2;
            _value2 = (1 - Mathf.Min(_dDamReduce, 8000) * Constants.F_DELTA);
            _value3 = (1 - Mathf.Min(_dDamChanceDef, 8000) * Constants.F_DELTA);
            _value1 = _value1 * _value2 * (_aAtkSkillPer + _aSkillAtkRate * Constants.F_DELTA) * _value3;
            _value2 = Mathf.Max(_aFinalHurt - _dFinalHurtReduce, 0);
            _value1 += _value2;
            _value3 = 1 + 4 * Random.Range(0f, 1f);
            hurtValue = (uint)Mathf.Max(_value1, _value3);
            /* int(max(((max((aMinAtk+aMaxAtk)/2.0*(1+suppressValueLV)-dDef,0)
                        +max(aIceAtk - dIceDef, 0))
                        *max(atkSkillPer+aSkillAtkRate/10000.0-min(dDamChanceDef,8000)/10000.0,0.5)
                        +aFinalHurt-dFinalHurtReduce+atkSkillValue)
                        *max((1+aFinalHurtPer/10000.0)*(1-dFinalHurtReducePer/10000.0),0.2)*(1+suppressValueFP),aMaxAtk*0.05+rand*aMaxAtk*0.05)) */
            hurtValue = (uint)((Mathf.Max(((Mathf.Max((_aMinAtk + _aMaxAtk) * .5f * (1 + _suppressLV_0) - _dDef, 0)
                              + Mathf.Max(_aIceAtk - _dIceDef, 0))
                              * Mathf.Max(_atkSkillValue + _aSkillAtkRate * Constants.F_DELTA - Mathf.Min(_dDamChanceDef, 8000) * Constants.F_DELTA, .5f)
                              + _aFinalHurt - _dFinalHurtReduce + _atkSkillValue)
                              * Mathf.Max((1 + _aFinalHurtPer * Constants.F_DELTA) * (1 - _dFinalHurtReduce * Constants.F_DELTA), .2f) * (1 + _suppressValueFP_0), _aMaxAtk * .05f + Random.Range(0f, 1f) * _aMaxAtk * .05f)));
        }
        if (_isZhuxianHit)
Utility/EnumHelper.cs
@@ -507,9 +507,9 @@
    SuperHitReduce = 146,                ///<暴击抗性                   146
    LuckyHitRateReduce = 147,                ///<会心一击抗性                   147
    SkillAtkRateReduce = 148,               ///技能减伤
    Damageper = 149,                      ///<增加伤害                   149
    DamagePVP = 149,                      ///<增加伤害                   149
    SpeedValue = 150,                  ///<移动速度                 150
    LuckPer = 151,                  ///暂时没用                 151
    DamagePVE = 151,                  ///暂时没用                 151
    PetDamPer = 152,                  ///<灵兽增加伤害                 152
    IgnoreDefRateReduce = 153,                  ///<无视防御抗性        153
    DamChanceDef = 154,                  ///<抵御        154
@@ -565,9 +565,9 @@
    CDBPlayerRefresh_NormalHurtPer = 207,// # 属性普通攻击增伤:普通攻击附加的固定值伤害 
    CDBPlayerRefresh_FabaoHurt = 208,//  # 属性法宝技能增伤:法宝技能攻击附加的固定值伤害  
    CDBPlayerRefresh_FabaoHurtPer = 209,//   # 属性法宝技能加成:法宝技能攻击附加的伤害百分比 
    CDBPlayerRefresh_SuperHitRateReduce=210,//暴击抗性
    CDBPlayerRefresh_LuckyHitReduce=211,//会心一击伤害固定值减免
    CDBPlayerRefresh_FinalHurtReducePer=212,//最终伤害百分比减少
    CDBPlayerRefresh_SuperHitRateReduce = 210,//暴击抗性
    CDBPlayerRefresh_LuckyHitReduce = 211,//会心一击伤害固定值减免
    CDBPlayerRefresh_FinalHurtReducePer = 212,//最终伤害百分比减少
};
/** 背包类型码定义 */
Utility/UIHelper.cs
@@ -187,7 +187,7 @@
            case PropertyType.SkillHurt:
                return PlayerDatas.Instance.extersion.SkillAtkRate;
            case PropertyType.PVPAddHurt:
                return PlayerDatas.Instance.extersion.DamagePer;
                return PlayerDatas.Instance.extersion.DamagePVP;
            case PropertyType.PVPReduceHurt:
                return PlayerDatas.Instance.extersion.damageReduceRate;
            case PropertyType.LifeReply: