| | |
| | | // 1·移动到距离阵容位置n码的距离(如2号位,5号位)释放(即战场中央此类) |
| | | public virtual void Cast() |
| | | { |
| | | EventBroadcast.Instance.Broadcast<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, battleField.guid, skillConfig, caster.teamHero); |
| | | |
| | | BattleDebug.LogError(GetType().Name + " Skill Cast Start"); |
| | | // 高亮所有本次技能相关的目标 |
| | | HighLightAllTargets(); |
| | |
| | | continue; |
| | | } |
| | | |
| | | // 伤害分布 (万分比) |
| | | int[] damageDivide = skillConfig.DamageDivide[_hitIndex]; |
| | | |
| | | long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx); |
| | | |
| | | // 保证所有分配项加起来等于totalDamage,避免因整除导致的误差 |
| | | List<long> damageList = BattleUtility.DivideDamageToList(damageDivide, totalDamage); |
| | | |
| | | OnHitEachTarget(target, totalDamage, damageList, ref hurt); |
| | | OnHitEachTarget(_hitIndex, target, hurt); |
| | | } |
| | | |
| | | HandleDead(); |
| | | } |
| | | |
| | | |
| | | protected virtual void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt) |
| | | { |
| | | // 伤害分布 (万分比) |
| | | int[] damageDivide = skillConfig.DamageDivide[_hitIndex]; |
| | | |
| | | long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx); |
| | | |
| | | // 保证所有分配项加起来等于totalDamage,避免因整除导致的误差 |
| | | List<long> damageList = BattleUtility.DivideDamageToList(damageDivide, totalDamage); |
| | | // public uint ObjID; |
| | | // public uint AttackTypes; // 飘血类型汇总,支持多种类型并存,如无视防御且暴击同时被格挡,二进制或运算最终值;0-失败;1-普通;2-回血;5-格挡;6-无视防御;7-暴击;9-闪避 |
| | | // public uint HurtHP; // 飘血值,求余亿部分 |
| | | // public uint HurtHPEx; // 飘血值,整除亿部分 |
| | | // public uint CurHP; // 更新剩余血量,求余亿部分 |
| | | // public uint CurHPEx; // 更新剩余血量,整除亿部分 |
| | | // public uint SuckHP; // 本次伤害转化的吸血量 |
| | | // public uint BounceHP; // 本次伤害反弹的伤害量 |
| | | |
| | | |
| | | // TODO YYL AttackTypes 要表现成什么样呢? 支持多种类型并存,如无视防御且暴击同时被格挡,二进制或运算最终值;0-失败;1-普通;2-回血;5-格挡;6-无视防御;7-暴击;9-闪避 |
| | | target.Hurt(damageList, totalDamage, hurt.AttackTypes); |
| | | |
| | | // TODO YYL 这里是要做统一计算后再hurt跟suckhp还是怎样 |
| | | // caster.SuckHp(hurt.SuckHP);// 吸血 |
| | | // caster.HurtByReflect(hurt.BounceHP);// 反弹伤害 |
| | | } |
| | | |
| | | |
| | | protected void HandleDead() |
| | | { |
| | |
| | | |
| | | |
| | | |
| | | protected virtual void OnHitEachTarget(BattleObject target, long totalDamage, List<long> damageList, ref HB427_tagSCUseSkill.tagSCUseSkillHurt hurt) |
| | | { |
| | | target.Hurt(damageList, totalDamage, hurt.AttackTypes); |
| | | |
| | | } |
| | | |
| | | protected void CheckAfterDeadhPack() |
| | | { |
| | | List<int> removeIndexList = new List<int>(); |
| | |
| | | { |
| | | return false; |
| | | } |
| | | else |
| | | { |
| | | OnSkillFinished(); |
| | | skillEffect = null; |
| | | } |
| | | } |
| | | |
| | | return isFinished; |
| | |
| | | |
| | | public void OnSkillFinished() |
| | | { |
| | | if (skillEffect != null) |
| | | { |
| | | if (!skillEffect.IsFinished()) |
| | | { |
| | | return; |
| | | } |
| | | } |
| | | |
| | | BattleDebug.LogError(GetType().Name + " Skill Finished"); |
| | | while (packList.Count > 0) |
| | | { |