internal static void DoSkillCommandState(EntityInfo entity, long deltaTime, AbstractAiStateLogic logic, int skillId) { if (entity.GetMovementStateInfo().IsMoving) { logic.NotifyAiStopPursue(entity); } if (skillId > 0) { AiStateInfo aiInfo = entity.GetAiStateInfo(); SkillInfo skillInfo = entity.GetSkillStateInfo().GetSkillInfoById(skillId); if (null != skillInfo) { if (aiInfo.Target <= 0) { EntityInfo info; if (skillInfo.ConfigData.targetType == (int)SkillTargetType.Enemy || skillInfo.ConfigData.targetType == (int)SkillTargetType.RandEnemy) { info = GetNearstTargetHelper(entity, CharacterRelation.RELATION_ENEMY); } else { info = GetNearstTargetHelper(entity, CharacterRelation.RELATION_FRIEND); } if (null != info) { aiInfo.Target = info.GetId(); } } if (aiInfo.Target > 0) { logic.NotifyAiSkill(entity, skillId); } } } else if (!entity.GetSkillStateInfo().IsSkillActivated()) { logic.AiSendStoryMessage(entity, "npc_skill_finish:" + entity.GetUnitId(), entity.GetId()); logic.AiSendStoryMessage(entity, "obj_skill_finish", entity.GetId()); logic.ChangeToState(entity, (int)AiStateId.Idle); } }
internal static void DoSkillCommandState(EntityInfo entity, long deltaTime, AbstractAiStateLogic logic, int skillId) { if (entity.GetMovementStateInfo().IsMoving) { logic.NotifyAiStopPursue(entity); } if (skillId > 0) { AiStateInfo aiInfo = entity.GetAiStateInfo(); SkillInfo skillInfo = entity.GetSkillStateInfo().GetSkillInfoById(skillId); if (null != skillInfo) { if (aiInfo.Target <= 0) { EntityInfo info; if (skillInfo.ConfigData.targetType == (int)SkillTargetType.Enemy || skillInfo.ConfigData.targetType == (int)SkillTargetType.RandEnemy) { info = GetNearstTargetHelper(entity, CharacterRelation.RELATION_ENEMY); } else { info = GetNearstTargetHelper(entity, CharacterRelation.RELATION_FRIEND); } if (null != info) { aiInfo.Target = info.GetId(); } } if (aiInfo.Target > 0) { logic.NotifyAiSkill(entity, skillId); } } } else if(!entity.GetSkillStateInfo().IsSkillActivated()) { logic.AiSendStoryMessage(entity, "npc_skill_finish:" + entity.GetUnitId(), entity.GetId()); logic.AiSendStoryMessage(entity, "obj_skill_finish", entity.GetId()); logic.ChangeToState(entity, (int)AiStateId.Idle); } }