| | |
| | | public static void HandlerAttackTarget(GActorFight attacker,
|
| | | GActorFight target,
|
| | | int hurtValue,
|
| | | int realHurtValue,
|
| | | byte attackType,
|
| | | int skillID,
|
| | | int soConfigID,
|
| | |
| | |
|
| | | if (CheckPull(attacker, target, soConfig.bodyControlId))
|
| | | {
|
| | | target.StartBeatBack(attacker.ServerInstID, soConfig.bodyControlId, MathUtility.ForwardXZ(target.Pos, attacker.Pos), (HurtAttackType)attackType);
|
| | | float _extDis = 0;
|
| | | SkillHelper.EffectValue _effectValue;
|
| | | if (_skill.skillInfo.effectValue.TryGetValue(4015, out _effectValue))
|
| | | {
|
| | | _extDis += _effectValue.value1 * .5f;
|
| | | }
|
| | | target.StartBeatBack(attacker.ServerInstID, soConfig.bodyControlId, MathUtility.ForwardXZ(target.Pos, attacker.Pos), (HurtAttackType)attackType, _extDis);
|
| | | }
|
| | | }
|
| | |
|
| | |
| | |
|
| | | if (_doReduceHp)
|
| | | {
|
| | | target.ActorInfo.ReduceHp((uint)hurtValue);
|
| | | target.ActorInfo.ReduceHp((uint)realHurtValue);
|
| | | }
|
| | |
|
| | | if (target.ServerInstID == PlayerDatas.Instance.baseData.PlayerID)
|
| | |
| | | bool _isZhuxianHit = false;
|
| | |
|
| | | SkillHelper.EffectValue _effectValue;
|
| | | SkillHelper.SkillInfo _skillInfo;
|
| | |
|
| | | float _aAtkSkillPer = 0;
|
| | | int _atkSkillValue = 0;
|
| | |
| | | }
|
| | |
|
| | | #region 4094,4507 增加暴击概率
|
| | | if (skill.skillInfo.effectValue.TryGetValue(4094, out _effectValue))
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4094, out _effectValue, out _skillInfo))
|
| | | {
|
| | | bool _vaild = true;
|
| | | if (_effectValue.value2 != 0)
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | if (skill.skillInfo.effectValue.TryGetValue(4507, out _effectValue))
|
| | | if (StatusMgr.Instance.TryGetSkillEffectValue(attacker.ServerInstID, 4507, out _effectValue))
|
| | | {
|
| | | bool _vaild = true;
|
| | | if (_effectValue.value2 == 1)
|
| | |
| | | }
|
| | | if (_vaild)
|
| | | {
|
| | | if (_vaild)
|
| | | {
|
| | | _aSuperHitRate += _effectValue.value1;
|
| | | }
|
| | | _aSuperHitRate += _effectValue.value1;
|
| | | }
|
| | | }
|
| | |
|
| | | if (StatusMgr.Instance.TryGetSkillEffectValue(attacker.ServerInstID, 4526, out _effectValue))
|
| | | {
|
| | | bool _vaild = true;
|
| | | if (_effectValue.value2 == 1)
|
| | | {
|
| | | if (attacker.SelectTarget == null
|
| | | || attacker.SelectTarget.ServerInstID != target.ServerInstID)
|
| | | {
|
| | | _vaild = false;
|
| | | }
|
| | | }
|
| | | if (_effectValue.value3 == 1)
|
| | | {
|
| | | if (skill.skillInfo.config.FuncType != (int)E_SkillFuncType.NormalAttack
|
| | | && skill.skillInfo.config.FuncType != (int)E_SkillFuncType.FaBaoActiveSkill)
|
| | | {
|
| | | _vaild = false;
|
| | | }
|
| | | }
|
| | | if (_vaild)
|
| | | {
|
| | | _aZhuXianHitRate += _effectValue.value1;
|
| | | }
|
| | | }
|
| | |
|
| | | #endregion
|
| | |
|
| | | _isMiss = IsMiss(_hitRate, _missRate);
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4083, out _effectValue))
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4075, out _effectValue, out _skillInfo))
|
| | | {
|
| | | float _val = (PlayerDatas.Instance.extersion.battleValEx1 - 10000) * _effectValue.value1;
|
| | | _superHitAdd += _val;
|
| | | }
|
| | |
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4083, out _effectValue, out _skillInfo))
|
| | | {
|
| | | bool _vaild = true;
|
| | | if (_effectValue.value2 == 1)
|
| | |
| | | || skill.skillInfo.config.HurtType == 0)
|
| | | {
|
| | | // 处理本身的技能
|
| | | CalculateSkillEffect(attacker, target, skill.skillInfo, ref _aDamagePer, ref _aAtkSkillPer, ref _atkSkillValue, ref _aIceAtk, ref _aFinalHurt, ref _superHitAdd, _isCrit);
|
| | | CalculateSkillEffect(attacker, target, skill.skillInfo, ref _aDamagePer, ref _aAtkSkillPer, ref _atkSkillValue, ref _aIceAtk, ref _aFinalHurt, ref _superHitAdd, ref _aDamagePVE, _isCrit);
|
| | |
|
| | | // 处理sp技能
|
| | | List<SkillHelper.SkillInfo> _spSkillList = SkillHelper.Instance.GetSpSkill(skill.id);
|
| | |
| | | {
|
| | | for (int i = 0; i < _spSkillList.Count; ++i)
|
| | | {
|
| | | CalculateSkillEffect(attacker, target, _spSkillList[i], ref _aDamagePer, ref _aAtkSkillPer, ref _atkSkillValue, ref _aIceAtk, ref _aFinalHurt, ref _superHitAdd, _isCrit);
|
| | | CalculateSkillEffect(attacker, target, _spSkillList[i], ref _aDamagePer, ref _aAtkSkillPer, ref _atkSkillValue, ref _aIceAtk, ref _aFinalHurt, ref _superHitAdd, ref _aDamagePVE, _isCrit);
|
| | | }
|
| | | }
|
| | | }
|
| | |
| | | }
|
| | |
|
| | | SkillHelper.EffectValue _effectValue;
|
| | | if (_hero.SkillMgr.TryGetPassiveEffectValue(4081, out _effectValue))
|
| | | SkillHelper.SkillInfo _skillInfo;
|
| | | if (_hero.SkillMgr.TryGetPassiveEffectValue(4081, out _effectValue, out _skillInfo))
|
| | | {
|
| | | if (_effectValue.value2 == 1)
|
| | | {
|
| | |
| | | return actor.ActorInfo.RealHp * 1f / actor.ActorInfo.RealMaxHp;
|
| | | }
|
| | |
|
| | | private static void CalculateSkillEffect(GActorFight attacker, GActorFight target, SkillHelper.SkillInfo skillInfo,
|
| | | private static void CalculateSkillEffect(GActorFight attacker,
|
| | | GActorFight target,
|
| | | SkillHelper.SkillInfo skillInfo,
|
| | | ref int _aDamagePer,
|
| | | ref float _aAtkSkillPer,
|
| | | ref int _atkSkillValue,
|
| | | ref int _aIceAtk,
|
| | | ref int _aFinalHurt,
|
| | | ref float _aSuperHitAdd,
|
| | | ref int _aDamagePVE,
|
| | | bool _isCrit)
|
| | | {
|
| | | SkillHelper.EffectValue _effectValue;
|
| | | SkillHelper.SkillInfo _skillInfo;
|
| | | #region 伤害增加
|
| | |
|
| | | if (skillInfo.effectValue.TryGetValue(1062, out _effectValue))
|
| | |
| | |
|
| | | if (attacker is GA_Hero)
|
| | | {
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4086, out _effectValue))
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4102, out _effectValue, out _skillInfo))
|
| | | {
|
| | | int _val = _effectValue.value1;
|
| | | int _needCount = _effectValue.value2;
|
| | | bool _valid = true;
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4092, out _effectValue, out _skillInfo))
|
| | | {
|
| | | if (_effectValue.value2 == 0)
|
| | | {
|
| | | if (PlayerDatas.Instance.baseData.yinjiCount != _needCount)
|
| | | {
|
| | | _valid = false;
|
| | | }
|
| | | }
|
| | | else if (_effectValue.value2 == 1)
|
| | | {
|
| | | if (PlayerDatas.Instance.baseData.yinjiCount == 0
|
| | | || PlayerDatas.Instance.baseData.yinjiCount < _effectValue.value1)
|
| | | {
|
| | | _valid = false;
|
| | | }
|
| | | }
|
| | | }
|
| | | if (_valid)
|
| | | {
|
| | | if (PlayerDatas.Instance.baseData.yinjiCount > _needCount)
|
| | | {
|
| | | _aDamagePVE += _val;
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4086, out _effectValue, out _skillInfo))
|
| | | {
|
| | | bool _vaild = true;
|
| | | if (_effectValue.value3 == 1)
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4087, out _effectValue))
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4087, out _effectValue, out _skillInfo))
|
| | | {
|
| | | if (PlayerDatas.Instance.baseData.yinjiCount > _effectValue.value2)
|
| | | {
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4088, out _effectValue))
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4088, out _effectValue, out _skillInfo))
|
| | | {
|
| | | int _per = _effectValue.value1;
|
| | | int _needCount = _effectValue.value2;
|
| | | bool _valid = true;
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4092, out _effectValue))
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4092, out _effectValue, out _skillInfo))
|
| | | {
|
| | | if (_effectValue.value2 == 0)
|
| | | {
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4015, out _effectValue))
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4015, out _effectValue, out _skillInfo))
|
| | | {
|
| | | if (target.ActorInfo.status4012.ContainsKey((byte)_effectValue.value2))
|
| | | {
|
| | |
| | | if (StatusMgr.Instance.IsBurning(target.ServerInstID, _selfSID))
|
| | | {
|
| | | _aAtkSkillPer += _effectValue.value1;
|
| | |
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4538, out _effectValue, out _skillInfo))
|
| | | {
|
| | | _aDamagePVE += _effectValue.value1;
|
| | | }
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4002, out _effectValue, out _skillInfo))
|
| | | {
|
| | | _aDamagePVE += _effectValue.value1;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4098, out _effectValue))
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4098, out _effectValue, out _skillInfo))
|
| | | {
|
| | | var _skillInfo = SkillHelper.Instance.Get(_effectValue.value2);
|
| | | if (_skillInfo != null)
|
| | | var _skillInfo1 = SkillHelper.Instance.Get(_effectValue.value2);
|
| | | if (_skillInfo1 != null)
|
| | | {
|
| | | SkillHelper.EffectValue _tmpEffectValue;
|
| | | if (_skillInfo.effectValue.TryGetValue(4012, out _tmpEffectValue))
|
| | | if (_skillInfo1.effectValue.TryGetValue(4012, out _tmpEffectValue))
|
| | | {
|
| | | if (target.ActorInfo.status4012.ContainsKey((byte)_tmpEffectValue.value1))
|
| | | {
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4096, out _effectValue))
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4096, out _effectValue, out _skillInfo))
|
| | | {
|
| | | if (StatusMgr.Instance.IsExist(target.ServerInstID, _effectValue.value3))
|
| | | {
|
| | |
| | | }
|
| | |
|
| | | // 4005 概率增加攻击(技能)伤害万分率
|
| | | if (skillInfo.effectValue.TryGetValue(4005, out _effectValue))
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4005, out _effectValue, out _skillInfo))
|
| | | {
|
| | | if (Random.Range(0, 10000) < _effectValue.value2)
|
| | | {
|
| | |
| | | }
|
| | |
|
| | | // 4035 增加技能伤害万分率
|
| | | if (skillInfo.effectValue.TryGetValue(4035, out _effectValue))
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4035, out _effectValue, out _skillInfo))
|
| | | {
|
| | | bool _isValid = true;
|
| | | var _mapConfig = MapConfig.Get(PlayerDatas.Instance.baseData.MapID);
|
| | |
| | | }
|
| | |
|
| | | // 4011 暴击时增加技能伤害
|
| | | if (skillInfo.effectValue.TryGetValue(4011, out _effectValue))
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4011, out _effectValue, out _skillInfo))
|
| | | {
|
| | | if (_isCrit)
|
| | | {
|
| | |
| | | }
|
| | |
|
| | | // 4015 目标处于XX状态提高技能伤害
|
| | | if (skillInfo.effectValue.TryGetValue(4015, out _effectValue))
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4015, out _effectValue, out _skillInfo))
|
| | | {
|
| | | if (target.ActorInfo.GetStatusCount((byte)_effectValue.value2, attacker.ServerInstID) > 0)
|
| | | {
|
| | |
| | | }
|
| | |
|
| | | // 4025 攻击附加真实伤害
|
| | | if (skillInfo.effectValue.TryGetValue(4025, out _effectValue))
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4025, out _effectValue, out _skillInfo))
|
| | | {
|
| | | _aIceAtk += _effectValue.value1;
|
| | |
|
| | |
| | | #region 暴击伤害增加
|
| | |
|
| | | // 4007 暴击时增加暴击值, 增加暴击值万分率, 虚要判断自己身上是否有配置的buff
|
| | | if (skillInfo.effectValue.TryGetValue(4007, out _effectValue))
|
| | | if (attacker.SkillMgr.TryGetPassiveEffectValue(4007, out _effectValue, out _skillInfo))
|
| | | {
|
| | | bool _condition = true;
|
| | |
|