/// <summary> /// 普通攻击 /// </summary> public void NpcSkillAttack(RoleView targetValue, NpcSkillAttackEvent data, Action execOK) { RoleView target = targetValue; NpcSkillAttackEvent evData = data; oldSortingOrder = swfClip.sortingOrder; actActions[AnimNames.Attack] = execOK; oldPos = gameObject.transform.position; if (evData.bMoveToTarget) { swfClip.sortingOrder = AppConst.BattleTempSortingOrder; var newPos = (Vector3)target.NpcData.position; if (newPos.x > gameObject.transform.position.x) { newPos.x -= 0.7f; } else { newPos.x += 0.7f; } gameObject.transform.DOMove(newPos, 0.2f).OnComplete(delegate() { NpcSkillAttackInternal(target, evData); }); } else { NpcSkillAttackInternal(target, evData); } }
private void NpcSkillAttackInternal(RoleView target, NpcSkillAttackEvent evData) { var skillKey = evData.bUseSkill ? AnimNames.Skill : AnimNames.Attack; SkillData skillData = null; roleData.skills.TryGetValue(skillKey, out skillData); if (skillData != null) { var targetFrameAction = new FrameActionData(); //被击者 targetFrameAction.currHp = evData.currHp; targetFrameAction.maxHp = evData.maxHp; targetFrameAction.amount = evData.amount; targetFrameAction.bPlaySound = evData.bPlaySound; targetFrameAction.type = FrameActionType.Passive; targetFrameAction.skillParams = skillData.skillParams; target.OnTakeDamage(targetFrameAction); var myFrameAction = new FrameActionData(); //攻击者 myFrameAction.type = FrameActionType.Active; myFrameAction.skillParams = skillData.skillParams; myFrameAction.bPlaySound = evData.bPlaySound; myFrameAction.target = target; myFrameAction.animClipName = evData.bUseSkill ? AnimNames.Skill : AnimNames.Attack; timerMgr.AddFrameActions(skillData.frameDatas, myFrameAction, OnFrameAction); } else { GLogger.Red("!!!NpcSkillAttackInternal:>>" + evData.attackerid + " " + evData.defenderid + " " + evData.bUseSkill); } }
/// <summary> /// 技能攻击 /// </summary> public void NpcSkillAttack(NPCData attacker, NPCData defender, bool useSkill, Action <object> callback) { bool isMoveToTarget = false; if (LogicConst.BattleType == BattleType.TurnBase) { isMoveToTarget = attacker.jobType == JobType.Warrior; } var attackEvent = new NpcSkillAttackEvent(); attackEvent.attackerid = attacker.npcid; attackEvent.defenderid = defender.npcid; attackEvent.bMoveToTarget = isMoveToTarget; attackEvent.bPlaySound = LogicConst.BattleType == BattleType.TurnBase; attackEvent.bUseSkill = useSkill; attackEvent.currHp = defender.hp; attackEvent.maxHp = defender.hpMax; attackEvent.amount = LogicUtil.Random(-100, 0); attackEvent.callback = callback; var evData = new GameEventData(GameEventType.Battle, attackEvent); evMappingMgr.Add(evData); Messenger.Broadcast <GameEventData>(EventNames.EvNpcSkillAttack, evData); }