| | |
| | | int _missRate = 0;
|
| | |
|
| | | int _aSuperHitRate = 0;
|
| | | int _aLuckyHitRage = 0;
|
| | | int _aLuckyHitRate = 0;
|
| | | int _aZhuXianHitRate = 0;
|
| | |
|
| | | bool _isMiss = false;
|
| | | bool _isCrit = false;
|
| | | bool _isLucky = false;
|
| | | bool _isZhuxianHit = false;
|
| | |
|
| | | SkillHelper.EffectValue _effectValue;
|
| | |
|
| | | float _aAtkSkillPer = 0;
|
| | | int _atkSkillValue = 0;
|
| | | int _aZhuxianHurtPer = 0;
|
| | | int _aLuckyHit = 0;// 会心一击伤害加成 万分率, 默认0, 会心一击时有值
|
| | | float _aSuperHit = 0;// 暴击伤害 固定值, 默认0, 暴击时有值
|
| | | int _aMinAtk = 1;// 最小攻击 固定值
|
| | |
| | |
|
| | | _missRate = _npcBase.NpcConfig.MissRate;
|
| | | _dDef = _npcBase.NpcConfig.Def;
|
| | |
|
| | | }
|
| | | else if (target.ActorType == GameObjType.gotPlayer)
|
| | | {
|
| | |
| | | {
|
| | | _hitRate = PlayerDatas.Instance.extersion.HIT;
|
| | | _aSuperHitRate = PlayerDatas.Instance.extersion.SuperHitRate;
|
| | | _aLuckyHitRage = PlayerDatas.Instance.extersion.luckHitRate;
|
| | | _aLuckyHitRate = PlayerDatas.Instance.extersion.luckHitRate;
|
| | | _aZhuxianHurtPer = PlayerDatas.Instance.extersion.zhuxianHurtPer;
|
| | | _aZhuXianHitRate = PlayerDatas.Instance.extersion.zhuxianRate;
|
| | | _aMaxAtk = PlayerDatas.Instance.extersion.MAXATK;
|
| | | _aMinAtk = PlayerDatas.Instance.extersion.MINATK;
|
| | | _aIgnoreDefRate = PlayerDatas.Instance.extersion.IgnoreDefRate;
|
| | |
| | |
|
| | | _isMiss = IsMiss(_hitRate, _missRate);
|
| | | _isCrit = IsCrit(_aSuperHitRate);
|
| | | _isLucky = IsLucky(_aLuckyHitRage);
|
| | | _isLucky = IsLucky(_aLuckyHitRate);
|
| | | _isZhuxianHit = IsZhuXianHit(_aZhuXianHitRate);
|
| | |
|
| | | // 4014 必定触发 按位配置 1为必命中,2为必暴击,4为必会心一击
|
| | | if (skill.skillInfo.effectValue.TryGetValue(4014, out _effectValue))
|
| | |
| | | _aLuckyHit = _isLucky ? _luckyHit : 0;
|
| | | _aSuperHit = _isCrit ? _superHit : 0;
|
| | |
|
| | |
|
| | | // 4051 当发生会心伤害时, 增加会心一击伤害
|
| | | if (_isLucky
|
| | | && skill.skillInfo.effectValue.TryGetValue(4051, out _effectValue))
|
| | |
| | | if (attacker.ActorType == GameObjType.gotPlayer
|
| | | && target.ActorType == GameObjType.gotNPC)
|
| | | {
|
| | | //"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+aSkillAtkRate/10000.0)*(1+aDamagePer/10000.0)+max(aFinalHurt+aOnlyFinalHurt-dFinalHurtReduce, 0)+atkSkillValue)*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(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))"
|
| | |
|
| | | float _random = Random.Range(0f, 1f);
|
| | | _value1 = _aMinAtk + (_aMaxAtk - _aMinAtk) * _random;
|
| | |
| | | }
|
| | | #endif
|
| | |
|
| | | _value1 = (_aAtkSkillPer + _aSkillAtkRate * Constants.F_DELTA) * (1 + _aDamagePer * Constants.F_DELTA);
|
| | | _value1 = (_aAtkSkillPer + (_isZhuxianHit ? _aZhuxianHurtPer * Constants.F_DELTA : 0) + _aSkillAtkRate * Constants.F_DELTA) * (1 + _aDamagePer * Constants.F_DELTA);
|
| | |
|
| | | #if UNITY_EDITOR
|
| | | if (RuntimeLogUtility.s_HurtValueLog)
|
| | |
| | | return Random.Range(0, 10000) < luckHitRate;
|
| | | }
|
| | |
|
| | | private static bool IsZhuXianHit(int zxHitRate)
|
| | | {
|
| | | return Random.Range(0, 10000) < zxHitRate;
|
| | | }
|
| | |
|
| | | private static float HpPer(GActor actor)
|
| | | {
|
| | | return actor.ActorInfo.RealHp * 1f / actor.ActorInfo.RealMaxHp;
|