| | |
| | | |
| | | protected List<HB405_tagMCAddExp> expPackList = new List<HB405_tagMCAddExp>(); |
| | | |
| | | protected bool moveFinished = false; |
| | | |
| | | public SkillBase(BattleObject _caster, SkillConfig _skillCfg, HB427_tagSCUseSkill vNetData, List<GameNetPackBasic> _packList, BattleField _battleField = null) |
| | | { |
| | | caster = _caster; |
| | |
| | | tagUseSkillAttack = vNetData; |
| | | battleField = _battleField; |
| | | packList = _packList; |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | |
| | | { |
| | | EventBroadcast.Instance.Broadcast<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, battleField.guid, skillConfig, caster.teamHero); |
| | | |
| | | BattleDebug.LogError(GetType().Name + " Skill Cast Start"); |
| | | // 高亮所有本次技能相关的目标 |
| | | HighLightAllTargets(); |
| | | |
| | | // 距离配成负数要转身 TurnBack |
| | | BattleDebug.LogError(GetType().Name + " Skill CastMode : " + skillConfig.castMode); |
| | | switch (skillConfig.castMode) |
| | | { |
| | | case SkillCastMode.Self: |
| | |
| | | // DashToTarget(() => BackToOrigin(OnSkillFinished)); |
| | | // break; |
| | | default: |
| | | BattleDebug.LogError("暂时不支持其他的方式释放 有需求请联系策划 技能id:" + skillConfig.SkillID + " cast position " + skillConfig.CastPosition); |
| | | Debug.LogError("暂时不支持其他的方式释放 有需求请联系策划 技能id:" + skillConfig.SkillID + " cast position " + skillConfig.CastPosition); |
| | | OnSkillFinished(); |
| | | break; |
| | | } |
| | | |
| | | } |
| | | |
| | | protected void MoveToTarget(RectTransform target, Vector2 offset, float duration, Action onComplete = null) |
| | | { |
| | | BattleDebug.LogError("Move to target , target is " + target.name); |
| | | // 原地释放 |
| | | if (skillConfig.CastDistance >= 9999) |
| | | { |
| | |
| | | // 目标是敌方主目标 |
| | | if (tagUseSkillAttack.HurtCount <= 0) |
| | | { |
| | | BattleDebug.LogError("技能攻击包没有目标 HurtCount <= 0"); |
| | | Debug.LogError("技能攻击包没有目标 HurtCount <= 0"); |
| | | OnSkillFinished(); |
| | | return; |
| | | } |
| | |
| | | BattleObject mainTarget = battleField.battleObjMgr.GetBattleObject((int)mainHurt.ObjID); |
| | | if (mainTarget == null) |
| | | { |
| | | BattleDebug.LogError("目标为空 mainTarget == null ObjID : " + mainHurt.ObjID); |
| | | Debug.LogError("目标为空 mainTarget == null ObjID : " + mainHurt.ObjID); |
| | | OnSkillFinished(); |
| | | return; |
| | | } |
| | |
| | | |
| | | protected virtual void OnAllAttackMoveFinished() |
| | | { |
| | | |
| | | moveFinished = true; |
| | | } |
| | | |
| | | protected void CastToAllies() |
| | |
| | | } |
| | | |
| | | // 技能开始 |
| | | public virtual void OnSkillStart() |
| | | public void OnSkillStart() |
| | | { |
| | | skillEffect = SkillEffectFactory.CreateSkillEffect( |
| | | caster, |
| | |
| | | { |
| | | skillEffect.Play(OnHitTargets); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | // 技能前摇帧结束 |
| | |
| | | /// <param name="times"></param> |
| | | public virtual void OnMiddleFrameStart(int times) |
| | | { |
| | | skillEffect.OnMiddleFrameStart(times); |
| | | if (skillEffect != null) |
| | | { |
| | | skillEffect.OnMiddleFrameStart(times); |
| | | } |
| | | } |
| | | |
| | | public virtual void OnMiddleFrameEnd(int times, int hitIndex) |
| | | { |
| | | skillEffect.OnMiddleFrameEnd(times, hitIndex); |
| | | if (skillEffect != null) |
| | | { |
| | | skillEffect.OnMiddleFrameEnd(times, hitIndex); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID); |
| | | if (target == null) |
| | | { |
| | | BattleDebug.LogError("目标为空 target == null ObjId : " + hurt.ObjID); |
| | | Debug.LogError("目标为空 target == null ObjId : " + hurt.ObjID); |
| | | continue; |
| | | } |
| | | |
| | | OnHitEachTarget(_hitIndex, target, hurt); |
| | | } |
| | | |
| | | HandleDead(); |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | // TODO YYL AttackTypes 要表现成什么样呢? 支持多种类型并存,如无视防御且暴击同时被格挡,二进制或运算最终值;0-失败;1-普通;2-回血;5-格挡;6-无视防御;7-暴击;9-闪避 |
| | | target.Hurt(damageList, totalDamage, hurt.AttackTypes); |
| | | target.Hurt(damageList, totalDamage, hurt, skillConfig); |
| | | |
| | | // TODO YYL 这里是要做统一计算后再hurt跟suckhp还是怎样 |
| | | // caster.SuckHp(hurt.SuckHP);// 吸血 |
| | | // caster.HurtByReflect(hurt.BounceHP);// 反弹伤害 |
| | | caster.SuckHp(hurt.SuckHP, skillConfig);// 吸血 |
| | | caster.HurtByReflect(hurt.BounceHP, skillConfig);// 反弹伤害 |
| | | } |
| | | |
| | | |
| | |
| | | // 处理掉落包 提前distribute之后 PackManager才有掉落物 所以不跟assignexp一样distribute |
| | | foreach (var _dropPack in dropPackList) |
| | | { |
| | | BattleDebug.LogError("distribute pack " + _dropPack.GetType().Name); |
| | | PackageRegedit.Distribute(_dropPack); |
| | | packList.Remove(_dropPack); |
| | | } |
| | |
| | | packList.Remove(deadPack); |
| | | } |
| | | deadPackList.Clear(); |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | return isFinished; |
| | | return isFinished && moveFinished; |
| | | } |
| | | |
| | | public virtual void ForceFinished() |
| | |
| | | } |
| | | } |
| | | |
| | | BattleDebug.LogError(GetType().Name + " Skill Finished"); |
| | | while (packList.Count > 0) |
| | | { |
| | | var pack = packList[0]; |
| | |
| | | var combinePack = pack as CustomHB426CombinePack; |
| | | if (combinePack.startTag.Tag.StartsWith("Skill_")) |
| | | { |
| | | BattleDebug.LogError("other skill casting " + combinePack.startTag.Tag); |
| | | otherSkillAction = combinePack.CreateSkillAction(); |
| | | return; |
| | | } |
| | | } |
| | | BattleDebug.LogError("distribute pack " + pack.GetType().Name); |
| | | PackageRegedit.Distribute(pack); |
| | | } |
| | | |