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);
}
}