private void KillAll(int key_code, int what) { UserInfo playerself = WorldSystem.Instance.GetPlayerSelf(); if (null == playerself) { return; } /// if ((int)Keyboard.Event.Up == what) { for (LinkedListNode <UserInfo> linkNode = WorldSystem.Instance.UserManager.Users.FirstValue; null != linkNode; linkNode = linkNode.Next) { UserInfo info = linkNode.Value; if (info.GetId() != playerself.GetId()) { info.SetHp(Operate_Type.OT_Absolute, 0); } } for (LinkedListNode <NpcInfo> linkNode = WorldSystem.Instance.NpcManager.Npcs.FirstValue; null != linkNode; linkNode = linkNode.Next) { NpcInfo info = linkNode.Value; info.SetHp(Operate_Type.OT_Absolute, 0); } } }
public UserInfo AddUser(int id, int resId) { UserInfo user = NewUserInfo(id); user.LoadData(resId); m_Users.AddLast(user.GetId(), user); return(user); }
private void OnDropoutPlayEffect(UserInfo user, NpcInfo npc, string effect, string path, int dropType, int dropNum) { CharacterView view = EntityManager.Instance.GetCharacterViewById(user.GetId()); if (null != view) { if (!String.IsNullOrEmpty(effect)) { GfxSystem.CreateAndAttachGameObject(effect, view.Actor, path, 1.0f); } GfxSystem.PlaySound(view.Actor, "Sound/Scene/UI_UP_PickupMoney", user.GetMovementStateInfo().GetFaceDir()); } Network.NetworkSystem.Instance.SyncPickUpNpc(npc); }
public void FightingScoreChangeCB(float score, int id) { UserInfo user = GetPlayerSelfInfo(); if (null != user && id == user.GetId() && !Geometry.IsSameFloat(FightingScore, score)) { if (WorldSystem.Instance.IsPureClientScene()) { GfxSystem.PublishGfxEvent("ge_fightscore_change", "lobby", FightingScore, score);//通知ui做效果 } FightingScore = score; Network.LobbyNetworkSystem.Instance.UpdateFightingScore(score); } }
private void UpdateMoveState(UserInfo playerself, Vector3 targetpos, float towards) { CharacterView view = EntityManager.Instance.GetUserViewById(playerself.GetId()); if (view != null && view.ObjectInfo.IsGfxMoveControl && Geometry.IsSamePoint(Vector3.Zero, targetpos)) { //LogSystem.Debug("UpdateMoveState IsGfxMoveControl : {0} , targetpos : {1}", view.ObjectInfo.IsGfxMoveControl, targetpos.ToString()); return; } PlayerMovement.Motion m = Geometry.IsSamePoint(Vector3.Zero, targetpos) ? PlayerMovement.Motion.Stop : PlayerMovement.Motion.Moving; pm_.JoyStickMotionChanged = pm_.JoyStickMotionStatus != m || !Geometry.IsSameFloat(m_lastDir, towards); pm_.JoyStickMotionStatus = m; pm_.MoveDir = towards; if (Geometry.IsSamePoint(Vector3.Zero, targetpos)) { pm_.JoyStickMotionStatus = PlayerMovement.Motion.Stop; m_IsJoystickControl = false; } else { m_IsJoystickControl = true; } }
private void CreatePlayerSelfParters() { RoleInfo roleself = LobbyClient.Instance.CurrentRole; if (null == roleself) { return; } roleself.PartnerStateInfo.ActivePartnerHpPercent = 1.0f; UserInfo playerself = WorldSystem.Instance.GetPlayerSelf(); roleself.ArenaStateInfo.CreatedPartners.Clear(); foreach (int partnerid in roleself.ArenaStateInfo.FightPartners) { PartnerInfo partner = roleself.PartnerStateInfo.GetPartnerInfoById(partnerid); NpcInfo partner_npc = CreateParterner(playerself, partner); if (partner_npc != null) { roleself.ArenaStateInfo.CreatedPartners.Add(partner.Id, partner_npc); } } SyncGfxUserInfo(playerself.GetId()); }
internal void Create(UserInfo user) { Init(); if (null != user) { m_User = user; ObjectInfo.UnitId = m_User.GetUnitId(); ObjectInfo.CampId = m_User.GetCampId(); ObjectInfo.LinkId = m_User.GetLinkId(); MovementStateInfo msi = m_User.GetMovementStateInfo(); Vector3 pos = msi.GetPosition3D(); float dir = msi.GetFaceDir(); CreateActor(m_User.GetId(), m_User.GetModel(), pos, dir, m_User.Scale); user.ActorId = Actor; UpdateXSoulEquip(); InitAnimationSets(); ObjectInfo.IsPlayer = true; if (user.GetId() == WorldSystem.Instance.PlayerSelfId) { GfxSystem.MarkPlayerSelf(Actor); } } }
public void Execute(UserInfo user, AiCommandDispatcher aiCmdDispatcher, long deltaTime) { if (user.GetAIEnable()) { UserAiStateInfo userAi = user.GetAiStateInfo(); if (userAi.CommandQueue.Count <= 0) { int curState = userAi.CurState; if (curState > (int)AiStateId.Invalid && curState < (int)AiStateId.MaxNum) { UserAiStateHandler handler; if (m_Handlers.TryGetValue(curState, out handler)) { if (null != handler) { handler(user, aiCmdDispatcher, deltaTime); } } else { LogSystem.Error("Illegal ai state: " + curState + " user:" + user.GetId()); } } else { OnStateLogicInit(user, aiCmdDispatcher, deltaTime); ChangeToState(user, (int)AiStateId.Idle); } } ExecuteCommandQueue(user, deltaTime); } }
private void OnUserSkill(UserInfo user, int skillId) { //user.SkillController.PushSkill(SkillCategory.kAttack, ScriptRuntime.Vector3.Zero); GfxSystem.PublishGfxEvent("Ai_InputSkillCmd", "Input", user.GetId()); }
private void OnUserStartAttack(UserInfo user, float x, float y, float z) { GfxSystem.PublishGfxEvent("Ai_InputAttackCmd", "Input", user.GetId(), x, y, z); }
private void TouchHandle(int what, GestureArgs e) { try { UserInfo playerself = WorldSystem.Instance.GetPlayerSelf(); if (null == playerself || null == e) { return; } CharacterView view = EntityManager.Instance.GetUserViewById(playerself.GetId()); if (null != playerself.SkillController && playerself.SkillController.GetSkillControlMode() != SkillControlMode.kTouch) { return; } if ((int)TouchEvent.Cesture == what) { string ename = e.name; if (GestureEvent.OnSingleTap.ToString() == ename) { if (EnableMoveInput) { if (WorldSystem.Instance.IsPureClientScene() || WorldSystem.Instance.IsPveScene()) { if (e.selectedObjID < 0) { playerself.SkillController.AddBreakSkillTask(); if (InputType.Touch == e.inputType) { FindPath(new Vector3(e.airWelGamePosX, e.airWelGamePosY, e.airWelGamePosZ)); } else if (InputType.Joystick == e.inputType) { UpdateMoveState(playerself, new Vector3(e.airWelGamePosX, e.airWelGamePosY, e.airWelGamePosZ), e.towards); } UpdateTowards(playerself, e.towards); } else { Combat(playerself, e.selectedObjID, e.attackRange); } m_lastSelectObjId = e.selectedObjID; /// // GfxSystem.PublishGfxEvent("Op_InputEffect", "Input", GestureEvent.OnSingleTap, e.airWelGamePosX, e.airWelGamePosY, e.airWelGamePosZ, e.selectedObjID < 0 ? false : true, true); } else if (WorldSystem.Instance.IsPvpScene() || WorldSystem.Instance.IsMultiPveScene()) { if (e.selectedObjID < 0) { if (InputType.Touch == e.inputType) { NetworkSystem.Instance.SyncPlayerMoveToPos(new Vector3(e.airWelGamePosX, e.airWelGamePosY, e.airWelGamePosZ)); } else if (InputType.Joystick == e.inputType) { UpdateMoveState(playerself, new Vector3(e.airWelGamePosX, e.airWelGamePosY, e.airWelGamePosZ), e.towards); playerself.SkillController.AddBreakSkillTask(); } } else { NetworkSystem.Instance.SyncPlayerMoveToAttack(e.selectedObjID, e.attackRange); } } } } else if (GestureEvent.OnFingerMove.ToString() == ename) { if (EnableMoveInput) { if (view.ObjectInfo.IsGfxMoveControl && !view.ObjectInfo.IsGfxRotateControl) { UpdateTowards(playerself, e.towards); } } } else if (GestureEvent.OnSkillStart.ToString() == ename) { if (null != playerself) { UserAiStateInfo info = playerself.GetAiStateInfo(); if ((int)AiStateId.Move == info.CurState) { StopFindPath(playerself, info); } } } else if (GestureEvent.OnEasyGesture.ToString() == ename) { Vector3 targetpos = new Vector3(e.startGamePosX, e.startGamePosY, e.startGamePosZ); if (Vector3.Zero != targetpos) { PushSkill(playerself, targetpos, e.attackRange); } } } } catch (Exception ex) { LogicSystem.LogFromGfx("[Error]:Exception:{0}\n{1}", ex.Message, ex.StackTrace); } }
private void SummonPartner(int key_code, int what) { RoleInfo roleself = LobbyClient.Instance.CurrentRole; if (null == roleself) { return; } UserInfo playerself = WorldSystem.Instance.GetPlayerSelf(); if (null == playerself) { return; } /// if ((int)Keyboard.Event.Up == what) { // summonpartner PartnerInfo partnerInfo = roleself.PartnerStateInfo.GetActivePartner(); if (null != partnerInfo) { Data_Unit data = new Data_Unit(); data.m_Id = -1; data.m_LinkId = partnerInfo.LinkId; data.m_CampId = playerself.GetCampId(); data.m_Pos = playerself.GetMovementStateInfo().GetPosition3D(); data.m_RotAngle = 0; data.m_AiLogic = partnerInfo.GetAiLogic(); data.m_AiParam[0] = ""; data.m_AiParam[1] = ""; data.m_AiParam[2] = partnerInfo.GetAiParam().ToString(); data.m_IsEnable = true; NpcInfo npc = WorldSystem.Instance.NpcManager.AddNpc(data); if (null != npc) { AppendAttributeConfig aac = AppendAttributeConfigProvider.Instance.GetDataById(partnerInfo.GetAppendAttrConfigId()); float inheritAttackAttrPercent = partnerInfo.GetInheritAttackAttrPercent(); float inheritDefenceAttrPercent = partnerInfo.GetInheritDefenceAttrPercent(); if (null != aac) { // attack npc.GetBaseProperty().SetAttackBase(Operate_Type.OT_Absolute, (int)(playerself.GetActualProperty().AttackBase *inheritAttackAttrPercent)); npc.GetBaseProperty().SetFireDamage(Operate_Type.OT_Absolute, playerself.GetActualProperty().FireDamage *inheritAttackAttrPercent); npc.GetBaseProperty().SetIceDamage(Operate_Type.OT_Absolute, playerself.GetActualProperty().IceDamage *inheritAttackAttrPercent); npc.GetBaseProperty().SetPoisonDamage(Operate_Type.OT_Absolute, playerself.GetActualProperty().PoisonDamage *inheritAttackAttrPercent); // defence npc.GetBaseProperty().SetHpMax(Operate_Type.OT_Absolute, (int)(playerself.GetActualProperty().HpMax *inheritDefenceAttrPercent)); npc.GetBaseProperty().SetEnergyMax(Operate_Type.OT_Absolute, (int)(playerself.GetActualProperty().EnergyMax *inheritDefenceAttrPercent)); npc.GetBaseProperty().SetADefenceBase(Operate_Type.OT_Absolute, (int)(playerself.GetActualProperty().ADefenceBase *inheritDefenceAttrPercent)); npc.GetBaseProperty().SetMDefenceBase(Operate_Type.OT_Absolute, (int)(playerself.GetActualProperty().MDefenceBase *inheritDefenceAttrPercent)); npc.GetBaseProperty().SetFireERD(Operate_Type.OT_Absolute, playerself.GetActualProperty().FireERD *inheritDefenceAttrPercent); npc.GetBaseProperty().SetIceERD(Operate_Type.OT_Absolute, playerself.GetActualProperty().IceERD *inheritDefenceAttrPercent); npc.GetBaseProperty().SetPoisonERD(Operate_Type.OT_Absolute, playerself.GetActualProperty().PoisonERD *inheritDefenceAttrPercent); // reset hp & energy npc.SetHp(Operate_Type.OT_Absolute, npc.GetActualProperty().HpMax); npc.SetEnergy(Operate_Type.OT_Absolute, npc.GetActualProperty().EnergyMax); } npc.SetAIEnable(true); npc.GetSkillStateInfo().RemoveAllSkill(); npc.BornTime = TimeUtility.GetServerMilliseconds(); List <int> skillList = partnerInfo.GetSkillList(); if (null != skillList) { for (int i = 0; i < skillList.Count; ++i) { SkillInfo skillInfo = new SkillInfo(skillList[i]); npc.GetSkillStateInfo().AddSkill(skillInfo); } } npc.SkillController = new SwordManSkillController(npc, GfxModule.Skill.GfxSkillSystem.Instance); npc.OwnerId = playerself.GetId(); playerself.PartnerId = npc.GetId(); EntityManager.Instance.CreateNpcView(npc.GetId()); if (partnerInfo.BornSkill > 0) { SkillInfo skillInfo = new SkillInfo(partnerInfo.BornSkill); npc.GetSkillStateInfo().AddSkill(skillInfo); npc.SkillController.ForceStartSkill(partnerInfo.BornSkill); } CharacterView view = EntityManager.Instance.GetCharacterViewById(npc.GetId()); if (null != view) { GfxSystem.SetLayer(view.Actor, "PhysicObj"); } } } } }
private UserInfo CreateArenaTarget(ArenaTargetInfo target) { if (target == null) { return(null); } int image_res_id = target.HeroId; UserInfo image_player = m_UserMgr.AddUser(image_res_id); if (null != image_player) { image_player.SceneContext = m_SceneContext; int campid = NetworkSystem.Instance.CampId == (int)CampIdEnum.Blue ? (int)CampIdEnum.Red : (int)CampIdEnum.Blue; image_player.SetCampId(campid); Data_Unit unit = m_CurScene.StaticData.ExtractData(DataMap_Type.DT_Unit, GlobalVariables.GetUnitIdByCampId(campid)) as Data_Unit; if (null != unit) { image_player.GetAiStateInfo().AiLogic = unit.m_AiLogic; image_player.SetAIEnable(true); image_player.GetMovementStateInfo().SetPosition(unit.m_Pos); image_player.GetMovementStateInfo().SetFaceDir(unit.m_RotAngle); } image_player.SetLevel(target.Level); image_player.SetNickName(target.Nickname); image_player.SkillController = new SwordManSkillController(image_player, GfxModule.Skill.GfxSkillSystem.Instance); if (null != m_SpatialSystem) { m_SpatialSystem.AddObj(image_player.SpaceObject); } /// skills if (null != target.Skills) { image_player.GetSkillStateInfo().RemoveAllSkill(); int skill_ct = target.Skills.Count; for (int i = 0; i < skill_ct; i++) { SkillInfo info = target.Skills[i]; if (null != info) { SkillCategory cur_skill_pos = SkillCategory.kNone; if (info.Postions.Presets[0] == SlotPosition.SP_A) { cur_skill_pos = SkillCategory.kSkillA; } else if (info.Postions.Presets[0] == SlotPosition.SP_B) { cur_skill_pos = SkillCategory.kSkillB; } else if (info.Postions.Presets[0] == SlotPosition.SP_C) { cur_skill_pos = SkillCategory.kSkillC; } else if (info.Postions.Presets[0] == SlotPosition.SP_D) { cur_skill_pos = SkillCategory.kSkillD; } info.Category = cur_skill_pos; image_player.GetSkillStateInfo().AddSkill(info); WorldSystem.Instance.AddSubSkill(image_player, info.SkillId, cur_skill_pos, info.SkillLevel); } } } Data_PlayerConfig playerData = PlayerConfigProvider.Instance.GetPlayerConfigById(image_player.GetLinkId()); if (null != playerData && null != playerData.m_FixedSkillList && playerData.m_FixedSkillList.Count > 0) { foreach (int skill_id in playerData.m_FixedSkillList) { SkillInfo info = new SkillInfo(skill_id, 1); image_player.GetSkillStateInfo().AddSkill(info); } } image_player.ResetSkill(); /// equips if (null != target.Equips) { int equip_ct = target.Equips.Length; for (int i = 0; i < equip_ct; i++) { ItemDataInfo image_equip = target.Equips[i]; if (null != image_equip) { image_player.GetEquipmentStateInfo().ResetEquipmentData(i); image_equip.ItemConfig = ItemConfigProvider.Instance.GetDataById(image_equip.ItemId); if (null != image_equip.ItemConfig) { image_player.GetEquipmentStateInfo().SetEquipmentData(i, image_equip); } } } } /// if (null != target.Legacys) { int legacy_ct = target.Legacys.Length; for (int i = 0; i < legacy_ct; i++) { ItemDataInfo image_legacy = target.Legacys[i]; if (null != image_legacy && image_legacy.IsUnlock) { image_player.GetLegacyStateInfo().ResetLegacyData(i); image_legacy.ItemConfig = ItemConfigProvider.Instance.GetDataById(image_legacy.ItemId); if (null != image_legacy.ItemConfig) { image_player.GetLegacyStateInfo().SetLegacyData(i, image_legacy); } } } image_player.GetLegacyStateInfo().UpdateLegacyComplexAttr(); } foreach (ArenaXSoulInfo x in target.XSoulInfo) { ItemDataInfo item = new ItemDataInfo(); item.ItemId = x.ItemId; item.Level = x.Level; item.Experience = x.Experience; item.UpdateLevelByExperience(); ItemConfig config = ItemConfigProvider.Instance.GetDataById(item.ItemId); if (config == null) { continue; } item.ItemConfig = config; XSoulPartInfo part = new XSoulPartInfo((XSoulPart)config.m_WearParts, item); part.ShowModelLevel = x.ModelLevel; image_player.GetXSoulInfo().SetXSoulPartData((XSoulPart)config.m_WearParts, part); } image_player.SetPartnerInfo(target.ActivePartner); SetArenaCharacterCoefficient(image_player); UserAttrCalculator.Calc(image_player); image_player.SetHp(Operate_Type.OT_Absolute, image_player.GetActualProperty().HpMax); image_player.SetRage(Operate_Type.OT_Absolute, 0); image_player.SetEnergy(Operate_Type.OT_Absolute, image_player.GetActualProperty().EnergyMax); target.CreatedPartners.Clear(); int total_hp = image_player.GetActualProperty().HpMax; //LogSystem.Error("---challenge target hp=" + image_player.GetActualProperty().HpMax); foreach (PartnerInfo partner in target.FightPartners) { NpcInfo partner_npc = CreateParterner(image_player, partner); if (partner_npc != null) { target.CreatedPartners.Add(partner.Id, partner_npc); //LogSystem.Error("---parnter {0} hp={1}", partner.Id, partner_npc.GetBaseProperty().HpMax); total_hp += partner_npc.GetBaseProperty().HpMax; } } //LogSystem.Error("-----challenge target total hp=" + total_hp); EntityManager.Instance.CreateUserView(image_player.GetId()); UserView image_view = EntityManager.Instance.GetUserViewById(image_player.GetId()); image_view.UpdateEquipment(); image_view.UpdateXSoulEquip(); } SyncGfxUserInfo(image_player.GetId()); return(image_player); }
private void IdleHandler(NpcInfo npc, AiCommandDispatcher aiCmdDispatcher, long deltaTime) { NpcAiStateInfo info = npc.GetAiStateInfo(); info.Time += deltaTime; if (info.Time > m_IntervalTime) { info.Time = 0; DropOutInfo dropInfo = npc.GetAiStateInfo().AiDatas.GetData <DropOutInfo>(); if (null != dropInfo) { if (npc.IsBorning) { Vector3 curPos = npc.GetMovementStateInfo().GetPosition3D(); if (dropInfo.BornTarget == Vector3.Zero) { double tempAngle = CrossEngineHelper.Random.NextFloat() * Math.PI; float length = CrossEngineHelper.Random.NextFloat() * 3.0f; dropInfo.BornTarget = curPos + new Vector3((float)Math.Cos(tempAngle), 0, (float)Math.Sin(tempAngle)) * length; dropInfo.BornAngle = (float)tempAngle; } //npc.GetMovementStateInfo().SetMoveDir(dropInfo.BornAngle); //npc.GetMovementStateInfo().IsMoving = true; //NotifyNpcWalk(npc); return; } else { if (!dropInfo.IsBornOver) { npc.GetMovementStateInfo().IsMoving = false; NotifyNpcMove(npc); } } } UserInfo target = null; target = AiLogicUtility.GetNearstTargetHelper(npc, CharacterRelation.RELATION_FRIEND, AiTargetType.USER) as UserInfo; if (null != target && !npc.NeedDelete) { Vector3 srcPos = npc.GetMovementStateInfo().GetPosition3D(); Vector3 targetPos = target.GetMovementStateInfo().GetPosition3D(); float dis = Geometry.Distance(srcPos, targetPos); float angle = Geometry.GetYAngle(new Vector2(srcPos.X, srcPos.Z), new Vector2(targetPos.X, targetPos.Z)); if (dis <= m_AttractRange && dis > m_PickUpRange) { // 吸取 float move = npc.GetActualProperty().MoveSpeed *m_IntervalTime / 1000; npc.GetMovementStateInfo().SetMoveDir(angle); //npc.GetMovementStateInfo().PositionY = targetPos.Y + (1 - dis / m_AttractRange) * m_Height; //npc.GetMovementStateInfo().SetPosition2D(srcPos.X + move * (float)Math.Cos(angle), srcPos.Z + move * (float)Math.Sin(angle)); npc.GetMovementStateInfo().IsMoving = true; NotifyNpcRun(npc); } else if (dis <= m_PickUpRange) { npc.GetMovementStateInfo().IsMoving = false; NotifyNpcMove(npc); string path = ""; if (null != dropInfo) { switch (dropInfo.DropType) { case DropOutType.GOLD: target.Money += dropInfo.Value; target.UserManager.FireGainMoneyEvent(target.GetId(), dropInfo.Value); path = "ef_head"; break; case DropOutType.HP: int addHp = (int)(target.GetActualProperty().HpMax *dropInfo.Value / 100.0f); if (target.GetActualProperty().HpMax > addHp + target.Hp) { target.SetHp(Operate_Type.OT_Relative, addHp); } else { target.SetHp(Operate_Type.OT_Absolute, target.GetActualProperty().HpMax); } target.UserManager.FireDamageEvent(target.GetId(), -1, false, false, addHp, 0); path = "Bone_Root"; break; case DropOutType.MP: int addEnergy = (int)(target.GetActualProperty().EnergyMax *dropInfo.Value / 100.0f); if (target.GetActualProperty().EnergyMax > addEnergy + target.Energy) { target.SetEnergy(Operate_Type.OT_Relative, addEnergy); } else { target.SetEnergy(Operate_Type.OT_Absolute, target.GetActualProperty().EnergyMax); } target.UserManager.FireDamageEvent(target.GetId(), -1, false, false, 0, addEnergy); path = "Bone_Root"; break; case DropOutType.MULT_GOLD: target.Money += dropInfo.Value; target.UserManager.FireGainMoneyEvent(target.GetId(), dropInfo.Value); path = "ef_head"; break; } if (null != OnDropoutPlayEffect) { OnDropoutPlayEffect(target, npc, dropInfo.Particle, path, (int)dropInfo.DropType, dropInfo.Value); } } npc.NeedDelete = true; } } } }
private void IdleHandler(NpcInfo npc, AiCommandDispatcher aiCmdDispatcher, long deltaTime) { if (npc.GetSkillStateInfo().IsSkillActivated()) { return; } if (npc.IsDead()) { return; } if (npc.IsUnderControl()) { // 被动进入战斗 } NpcAiStateInfo info = npc.GetAiStateInfo(); AiData_Npc_ActionDrive data = GetAiData(npc); info.Time += deltaTime; if (info.Time > 100) { CharacterInfo target = AiLogicUtility.GetRandomTargetHelper(npc, CharacterRelation.RELATION_ENEMY, AiTargetType.ALL); if (null != target) { info.Target = target.GetId(); NotifyNpcTargetChange(npc); npc.GetMovementStateInfo().IsMoving = false; NotifyNpcMove(npc); info.Time = 0; ChangeToState(npc, (int)AiStateId.Pursuit); } else { if ((int)NpcTypeEnum.Partner == npc.NpcType) { CharacterInfo owner = npc.SceneContext.GetCharacterInfoById(npc.OwnerId); if (null != owner) { Vector3 targetPos = owner.GetMovementStateInfo().GetPosition3D(); Vector3 srcPos = npc.GetMovementStateInfo().GetPosition3D(); if (Geometry.DistanceSquare(targetPos, srcPos) > 16) { AiLogicUtility.PathToTargetWithoutObstacle(npc, data.FoundPath, targetPos, info.Time, true, this); } else { npc.GetMovementStateInfo().IsMoving = false; NotifyNpcMove(npc); } } else { UserInfo master = AiLogicUtility.GetRandomTargetHelper(npc, CharacterRelation.RELATION_FRIEND, AiTargetType.USER) as UserInfo; if (null != master) { npc.OwnerId = master.GetId(); } } } else { if (null != GetAiPatrolData(npc)) { npc.GetMovementStateInfo().IsMoving = false; ChangeToState(npc, (int)AiStateId.Patrol); } } } info.Time = 0; } }