private void HandleTauntAction(NpcInfo npc, CharacterInfo target, long deltaTime) { if (npc.GetSkillStateInfo().IsSkillActivated()) { return; } NpcAiStateInfo info = npc.GetAiStateInfo(); AiData_Npc_ActionDrive data = GetAiData(npc); if (null != data && null != target) { Vector3 targetPos = target.GetMovementStateInfo().GetPosition3D(); AiActionInfo aiActionInfo = data.ActiveAction; if (null != aiActionInfo) { npc.GetMovementStateInfo().IsMoving = false; npc.IsTaunt = true; TrySeeTarget(npc, target); } if ((!IsAiActionSatify(npc, target, aiActionInfo) && aiActionInfo.Config.CanInterrupt) || aiActionInfo.IsTimeOut(TimeUtility.GetServerMilliseconds())) { npc.IsTaunt = false; data.ActiveAction = null; aiActionInfo.LastStartTime = TimeUtility.GetServerMilliseconds(); } } }
public void Tick() { if (0 == m_LastTickTime) { m_LastTickTime = TimeUtility.GetServerMilliseconds(); } else { long delta = TimeUtility.GetServerMilliseconds() - m_LastTickTime; m_LastTickTime = TimeUtility.GetServerMilliseconds(); if (null != m_NpcMgr) { for (LinkedListNode <NpcInfo> linkNode = m_NpcMgr.Npcs.FirstValue; null != linkNode; linkNode = linkNode.Next) { NpcInfo npc = linkNode.Value; TickNpc(npc, delta); } } if (null != m_UserMgr) { for (LinkedListNode <UserInfo> linkNode = m_UserMgr.Users.FirstValue; null != linkNode; linkNode = linkNode.Next) { UserInfo user = linkNode.Value; TickUser(user, delta); } } } }
private void HandleRunAction(NpcInfo npc, CharacterInfo target, long deltaTime) { if (npc.GetSkillStateInfo().IsSkillActivated()) { return; } NpcAiStateInfo info = npc.GetAiStateInfo(); AiData_Npc_ActionDrive data = GetAiData(npc); if (null != data && null != target) { Vector3 targetPos = target.GetMovementStateInfo().GetPosition3D(); AiActionInfo aiActionInfo = data.ActiveAction; if (null != aiActionInfo) { info.Time += deltaTime; if (info.Time > m_IntervalTime) { info.Time = 0; NotifyNpcRun(npc); AiLogicUtility.PathToTargetWithoutObstacle(npc, data.FoundPath, targetPos, m_IntervalTime, true, this); } } if ((!IsAiActionSatify(npc, target, aiActionInfo) && aiActionInfo.Config.CanInterrupt) || aiActionInfo.IsTimeOut(TimeUtility.GetServerMilliseconds())) { data.ActiveAction = null; aiActionInfo.LastStartTime = TimeUtility.GetServerMilliseconds(); } } }
protected override void UpdateIdle() { if ((int)AiStateId.Idle == m_Npc.GetAiStateInfo().CurState&& !m_Npc.IsSimulateMove) { if (!GetOwner().IsDead() && m_CharacterAnimationInfo.IsIdle()) { if (m_IdleState == IdleState.kNotIdle) { PlayAnimation(Animation_Type.AT_Stand); m_IdleState = IdleState.kBegin; m_BeginIdleTime = TimeUtility.GetServerMilliseconds(); m_IdleInterval = CrossEngineHelper.Random.Next(3000, 7000); } else if (m_IdleState == IdleState.kBegin) { if (TimeUtility.GetServerMilliseconds() - m_BeginIdleTime > m_IdleInterval) { PlayAnimation(GetNextIdleAnim()); PlayQueuedAnimation(Animation_Type.AT_IdelStand); m_BeginIdleTime = TimeUtility.GetServerMilliseconds(); m_IdleInterval = CrossEngineHelper.Random.Next(3000, 7000); } } else { m_IdleState = IdleState.kNotIdle; } } } else { base.UpdateIdle(); } }
public void Set(string timeoutKey, T callback, Action onTimeout) { long startTime = TimeUtility.GetServerMilliseconds(); TimeoutInfo info = new TimeoutInfo(callback, startTime, onTimeout); m_TimeoutInfoDict.AddOrUpdate(timeoutKey, info, info); }
public void OnGfxSetObjLifeTime(int id, long life_remaint_time) { NpcInfo npcinfo = WorldSystem.Instance.GetCharacterById(id) as NpcInfo; if (npcinfo == null) { return; } npcinfo.LifeEndTime = TimeUtility.GetServerMilliseconds() + life_remaint_time; }
protected void UpdateStoryAnim() { if (!m_IsStoryAnimationPlaying) { return; } if (TimeUtility.GetServerMilliseconds() >= m_StoryAnimStopTime) { m_IsStoryAnimationPlaying = false; } }
public void Tick() { if (0 == m_LastTickTime) { m_LastTickTime = TimeUtility.GetServerMilliseconds(); LogSystem.Debug("MovementSystem LastTickTime:{0}", m_LastTickTime); } else { long delta = TimeUtility.GetServerMilliseconds() - m_LastTickTime; m_LastTickTime = TimeUtility.GetServerMilliseconds(); if (delta > 1000) { delta = 1000; } if (null != m_NpcMgr) { for (LinkedListNode <NpcInfo> node = m_NpcMgr.Npcs.FirstValue; null != node; node = node.Next) { NpcInfo npc = node.Value; if (null != npc) { MoveNpc(npc, delta); /* * npc.TransformShape(); * if (null != npc.SceneContext.SightManager) { * npc.SceneContext.SightManager.UpdateObject(npc); * } */ } } } if (null != m_UserMgr) { for (LinkedListNode <UserInfo> node = m_UserMgr.Users.FirstValue; null != node; node = node.Next) { UserInfo user = node.Value; if (null != user) { MoveUser(user, delta); /* * user.TransformShape(); * if (null != user.SceneContext.SightManager) { * user.SceneContext.SightManager.UpdateObject(user); * } */ } } } } }
public virtual void Tick(CharacterInfo obj, int impactId) { ImpactInfo impactInfo = obj.GetSkillStateInfo().GetImpactInfoById(impactId); if (null != impactInfo && impactInfo.m_IsActivated) { long curTime = TimeUtility.GetServerMilliseconds(); if (curTime > impactInfo.m_StartTime + impactInfo.m_ImpactDuration) { impactInfo.m_IsActivated = false; } } }
public override void OnEvent(NpcInfo npc, int eventId, CharacterInfo target, long deltaTime) { AiData_Npc_ActionDrive data = GetAiData(npc); if (null != data) { NormalForceStopHandler(npc); switch (eventId) { case (int)AiEventEnum.CONTROL_TIME_OVERFLOW: if (data.MaxControlEventActions.Count > 0) { data.ActionStack.Clear(); } int plusActionCount = data.MaxControlEventPlusActions.Count; if (plusActionCount > 0) { data.ActionStack.Push(data.MaxControlEventPlusActions[CrossEngineHelper.Random.Next(plusActionCount)]); } for (int i = data.MaxControlEventActions.Count - 1; i >= 0; --i) { if (data.MaxControlEventActions[i].IsSatifyCD(TimeUtility.GetServerMilliseconds()) && data.MaxControlEventActions[i].IsLuckyEnough()) { data.ActionStack.Push(data.MaxControlEventActions[i]); } } break; case (int)AiEventEnum.GET_UP: if (data.GetUpEventActions.Count > 0) { data.ActionStack.Clear(); } for (int i = data.GetUpEventActions.Count - 1; i >= 0; --i) { if (data.GetUpEventActions[i].IsSatifyCD(TimeUtility.GetServerMilliseconds()) && data.GetUpEventActions[i].IsLuckyEnough()) { data.ActionStack.Push(data.GetUpEventActions[i]); } } break; } if (data.ActionStack.Count > 0) { data.ActiveAction = data.ActionStack.Pop(); } ExecAiAction(npc, target, deltaTime); } }
private void NormalActionStartHandler(NpcInfo npc, CharacterInfo target) { NpcAiStateInfo info = npc.GetAiStateInfo(); AiData_Npc_ActionDrive data = GetAiData(npc); if (null != data && null != target) { AiActionInfo aiActionInfo = data.ActiveAction; if (null != aiActionInfo) { //aiActionInfo.LastStartTime = TimeUtility.GetServerMilliseconds(); aiActionInfo.StartTime = TimeUtility.GetServerMilliseconds(); } } }
private bool IsAiActionSatifyWithOutProbability(NpcInfo npc, CharacterInfo target, AiActionInfo aiActionInfo) { Vector3 targetPos = target.GetMovementStateInfo().GetPosition3D(); Vector3 srcPos = npc.GetMovementStateInfo().GetPosition3D(); float dist = Geometry.Distance(srcPos, targetPos); if (aiActionInfo.IsSatifyCD(TimeUtility.GetServerMilliseconds()) && aiActionInfo.IsSatifyDis(dist) && aiActionInfo.IsSatisfySelfHp(npc.Hp, npc.GetActualProperty().HpMax) && aiActionInfo.IsSatisfyTargetHp(target.Hp, target.GetActualProperty().HpMax) && aiActionInfo.IsSatifyUser(npc)) { return(true); } return(false); }
public override void Tick(CharacterInfo character, int impactId) { ImpactInfo impactInfo = character.GetSkillStateInfo().GetImpactInfoById(impactId); if (null != impactInfo) { if (impactInfo.m_IsActivated) { if (TimeUtility.GetServerMilliseconds() > impactInfo.m_StartTime + impactInfo.m_ImpactDuration) { StopImpact(character, impactId); } } } ; }
public void StartChallenge(ArenaTargetInfo target, int sign) { IsBattleStarted = true; IsBeginFight = false; ChallengeTarget = target; IsEntityCreated = false; TargetInfo = null; BattleStartTime = TimeUtility.GetServerMilliseconds(); LastBattleServerTime = DateTime.Now.AddMilliseconds(BaseConfig.BattleCd); IsChallengeOver = false; LeftFightCount -= 1; IsChallengeSuccess = false; CurCameraTargetPartner = -1; LastChallengeResult = null; Sign = sign - (int)target.Guid; }
protected virtual void UpdateIdle() { if (!GetOwner().IsDead() && m_CharacterAnimationInfo.IsIdle()) { if (m_IdleState == IdleState.kNotIdle) { Animation_Type at = m_IsCombatState ? Animation_Type.AT_CombatStand : Animation_Type.AT_Stand; string name = GetAnimationNameByType(at); if (!string.IsNullOrEmpty(name)) { float fadetime = 0.5f; if (GetOwner() != null && GetOwner().GetSkillStateInfo() != null) { fadetime = GetOwner().GetSkillStateInfo().CrossToStandTime; GetOwner().ResetCross2StandRunTime(); } GfxSystem.CrossFadeAnimation(m_Actor, name, fadetime); } m_BeginIdleTime = TimeUtility.GetServerMilliseconds(); m_IdleState = IdleState.kReady; m_IdleInterval = CrossEngineHelper.Random.Next(1, 3) * 1000; } else if (m_IdleState == IdleState.kReady) { if (TimeUtility.GetServerMilliseconds() - m_BeginIdleTime > m_IdleInterval) { Animation_Type at = m_IsCombatState ? Animation_Type.AT_CombatStand : Animation_Type.AT_Stand; string name = GetAnimationNameByType(at); if (!string.IsNullOrEmpty(name)) { float fadetime = 0.5f; if (GetOwner() != null && GetOwner().GetSkillStateInfo() != null) { fadetime = GetOwner().GetSkillStateInfo().CrossToStandTime; } GfxSystem.CrossFadeAnimation(m_Actor, name, fadetime); } m_BeginIdleTime = TimeUtility.GetServerMilliseconds(); } } } else { m_IdleState = IdleState.kNotIdle; } }
public void UpdateTarget(NpcInfo npc) { if (npc.GetAIEnable()) { NpcAiStateInfo npcAi = npc.GetAiStateInfo(); long curTime = TimeUtility.GetServerMilliseconds(); if (npcAi.Target > 0) { if (curTime > npcAi.LastChangeTargetTime + m_ChangeTargetCD && curTime > npc.GetCombatStatisticInfo().LastHitTime + m_MaxChaseTime) { npcAi.Target = 0; NotifyNpcTargetChange(npc); npcAi.LastChangeTargetTime = curTime; LogSystem.Debug("Npc {0} changed target", npc.GetId()); } } } }
internal void PlayStoryAnimation(Animation_Type type, long remain_time, bool isQueued) { m_IsStoryAnimationPlaying = true; m_IdleState = IdleState.kNotIdle; m_StoryAnimName = GetAnimationNameByType(type); if (remain_time > 0) { m_StoryAnimStopTime = TimeUtility.GetServerMilliseconds() + remain_time; } if (isQueued) { PlayQueuedAnimation(type, 1.0f); } else { PlayAnimation(type, 1.0f); } }
private void NormalForceStopHandler(NpcInfo npc) { NpcAiStateInfo info = npc.GetAiStateInfo(); AiData_Npc_ActionDrive data = GetAiData(npc); if (null != data) { npc.GetMovementStateInfo().IsMoving = false; npc.IsTaunt = false; NotifyNpcRun(npc); AiActionInfo aiActionInfo = data.ActiveAction; if (null != aiActionInfo) { data.ActiveAction = null; aiActionInfo.LastStartTime = TimeUtility.GetServerMilliseconds(); } } }
private void NpcSkill(NpcInfo npc, int skillId) { if (null != npc) { if (npc.SkillController != null) { SkillInfo skillInfo = npc.GetSkillStateInfo().GetSkillInfoById(skillId); if (null != skillInfo) { long curTime = TimeUtility.GetServerMilliseconds(); if (!skillInfo.IsInCd(curTime / 1000.0f)) { npc.SkillController.ForceStartSkill(skillId); skillInfo.BeginCD(); } } } } }
public void Tick() { long curTime = TimeUtility.GetServerMilliseconds(); List <string> deleteKeys = new List <string>(); foreach (KeyValuePair <string, long> kv in m_OperationTimeDict) { if (curTime - kv.Value > OperationIntervalMs) { deleteKeys.Add(kv.Key); } } long startTime; foreach (string key in deleteKeys) { m_OperationTimeDict.TryRemove(key, out startTime); } }
private void HandleSelfImpactAction(NpcInfo npc, CharacterInfo target, long deltaTime) { if (npc.GetSkillStateInfo().IsSkillActivated()) { return; } NpcAiStateInfo info = npc.GetAiStateInfo(); AiData_Npc_ActionDrive data = GetAiData(npc); if (null != data && null != target) { Vector3 targetPos = target.GetMovementStateInfo().GetPosition3D(); AiActionInfo aiActionInfo = data.ActiveAction; if (null != aiActionInfo && !String.IsNullOrEmpty(aiActionInfo.Config.ActionParam)) { NotifyNpcAddImpact(npc, int.Parse(aiActionInfo.Config.ActionParam)); } data.ActiveAction = null; aiActionInfo.LastStartTime = TimeUtility.GetServerMilliseconds(); } }
public NpcInfo AddNpc(int id, Data_Unit unit) { NpcInfo npc = NewNpcInfo(id); npc.SceneContext = m_SceneContext; npc.LoadData(unit); npc.IsBorning = true; npc.SetAIEnable(false); npc.SetStateFlag(Operate_Type.OT_AddBit, CharacterState_Type.CST_Invincible); npc.BornTime = TimeUtility.GetServerMilliseconds(); m_Npcs.AddLast(npc.GetId(), npc); if (null != m_SceneContext && null != m_SceneContext.SpatialSystem) { m_SceneContext.SpatialSystem.AddObj(npc.SpaceObject); } if (null != m_SceneContext && null != m_SceneContext.SightManager) { m_SceneContext.SightManager.AddObject(npc); } return(npc); }
public void Tick() { if (0 == m_LastTickTime) { m_LastTickTime = TimeUtility.GetServerMilliseconds(); } else { long delta = TimeUtility.GetServerMilliseconds() - m_LastTickTime; m_LastTickTime = TimeUtility.GetServerMilliseconds(); for (LinkedListNode <SceneLogicInfo> node = m_SceneLogicInfoMgr.SceneLogicInfos.FirstValue; null != node; node = node.Next) { SceneLogicInfo info = node.Value; if (null != info) { ISceneLogic logic = SceneLogicManager.Instance.GetSceneLogic(info.LogicId); if (null != logic) { logic.Execute(info, delta); } if (info.IsLogicFinished) { m_SceneLogicInfos.Add(info); } } } for (int i = 0; i < m_SceneLogicInfos.Count; i++) { m_SceneLogicInfoMgr.RemoveSceneLogicInfo(m_SceneLogicInfos[i].GetId()); } /* * foreach (SceneLogicInfo info in m_SceneLogicInfos) { * m_SceneLogicInfoMgr.RemoveSceneLogicInfo(info.GetId()); * }*/ m_SceneLogicInfos.Clear(); m_SceneLogicInfoMgr.ExecuteDelayAdd(); } }
public void Tick() { long curTime = TimeUtility.GetServerMilliseconds(); List <string> deleteKeys = new List <string>(); foreach (KeyValuePair <string, TimeoutInfo> kv in m_TimeoutInfoDict) { if (kv.Value != null && curTime - kv.Value.StartTime > DefaultTimeoutMS) { if (kv.Value.OnTimeout != null) { kv.Value.OnTimeout(); } deleteKeys.Add(kv.Key); } } TimeoutInfo info = null; foreach (string key in deleteKeys) { m_TimeoutInfoDict.TryRemove(key, out info); } }
private void HandleFleeAction(NpcInfo npc, CharacterInfo target, long deltaTime) { if (npc.GetSkillStateInfo().IsSkillActivated()) { return; } NpcAiStateInfo info = npc.GetAiStateInfo(); AiData_Npc_ActionDrive data = GetAiData(npc); if (null != data && null != target) { Vector3 targetPos = Vector3.Zero; AiActionInfo aiActionInfo = data.ActiveAction; if (null != aiActionInfo) { float anglePlus = 0.0f; float.TryParse(aiActionInfo.Config.ActionParam, out anglePlus); if (GetEscapeTargetPos(npc, target, 3.0f, anglePlus, ref targetPos)) { info.Time += deltaTime; if (info.Time > m_IntervalTime) { info.Time = 0; NotifyNpcRun(npc); AiLogicUtility.PathToTargetWithoutObstacle(npc, data.FoundPath, targetPos, m_IntervalTime, true, this); } } } if ((!IsAiActionSatify(npc, target, aiActionInfo) && aiActionInfo.Config.CanInterrupt) || aiActionInfo.IsTimeOut(TimeUtility.GetServerMilliseconds())) { data.ActiveAction = null; npc.GetMovementStateInfo().IsMoving = false; NotifyNpcMove(npc); aiActionInfo.LastStartTime = TimeUtility.GetServerMilliseconds(); } } }
public void Tick(CharacterInfo obj) { List <ImpactInfo> impactInfos = obj.GetSkillStateInfo().GetAllImpact(); int ct = impactInfos.Count; for (int i = ct - 1; i >= 0; --i) { ImpactInfo info = impactInfos[i]; IImpactLogic logic = ImpactLogicManager.Instance.GetImpactLogic(info.ConfigData.ImpactLogicId); if (info.m_IsActivated) { if (null != logic) { logic.Tick(obj, info.m_ImpactId); } } else { logic.OnInterrupted(obj, info.m_ImpactId); obj.GetSkillStateInfo().RemoveImpact(info.m_ImpactId); } } obj.GetSkillStateInfo().CleanupImpactInfoForCheck(TimeUtility.GetServerMilliseconds(), 5000);//用于校验的impact比正常时间晚5秒清除 }
public void AlwaysClientTick() { if (0 == m_AlwaysClientLastTickTime) { m_AlwaysClientLastTickTime = TimeUtility.GetServerMilliseconds(); } else { long delta = TimeUtility.GetServerMilliseconds() - m_AlwaysClientLastTickTime; m_AlwaysClientLastTickTime = TimeUtility.GetServerMilliseconds(); if (null != m_NpcMgr) { for (LinkedListNode <NpcInfo> linkNode = m_NpcMgr.Npcs.FirstValue; null != linkNode; linkNode = linkNode.Next) { NpcInfo npc = linkNode.Value; INpcStateLogic logic = AiLogicManager.Instance.GetAlwaysClientNpcStateLogic(npc.GetAiStateInfo().AiLogic); if (null != logic) { logic.Execute(npc, m_AiCommandDispatcher, delta); } } } if (null != m_UserMgr) { for (LinkedListNode <UserInfo> linkNode = m_UserMgr.Users.FirstValue; null != linkNode; linkNode = linkNode.Next) { UserInfo user = linkNode.Value; IUserStateLogic logic = AiLogicManager.Instance.GetAlwaysClientUserStateLogic(user.GetAiStateInfo().AiLogic); if (null != logic) { logic.Execute(user, m_AiCommandDispatcher, delta); } } } } }
private int GetCanCastSkillId(UserInfo user, float dis) { if (null == user) { return(-1); } List <int> skillsCanCast = new List <int>(); int start = (int)SkillCategory.kAttack; int end = (int)SkillCategory.kSkillD; for (int i = start; i <= end; i++) { SkillNode node = user.SkillController.GetHead((SkillCategory)i); if (null != node) { SkillInfo skillInfo = user.GetSkillStateInfo().GetSkillInfoById(node.SkillId); if (null != skillInfo) { if (skillInfo.ConfigData.SkillRangeMax >= dis && skillInfo.ConfigData.SkillRangeMin <= dis) { if (!skillInfo.IsInCd(TimeUtility.GetServerMilliseconds())) { skillsCanCast.Add(i); } } } } } int count = skillsCanCast.Count; if (count > 0) { return(skillsCanCast[CrossEngineHelper.Random.Next(count)]); } return(-1); }
protected void UpdateState() { if (GetOwner().IsDead()) { return; } long now = TimeUtility.GetServerMilliseconds(); if (IsInCombatState()) { m_LastLeaveCombatTime = now; m_IsCombat2IdleChanging = false; m_IsCombatState = true; } else if (m_IsCombatState) { if (GetOwner().GetMovementStateInfo().IsMoving) { m_LastLeaveCombatTime = now; m_IsCombat2IdleChanging = false; } } if (GetOwner().GetId() == WorldSystem.Instance.GetPlayerSelf().GetId()) { if (m_LastLeaveCombatTime + GetOwner().Combat2IdleTime *GetOwner().Combat2IdleCoefficient * 1000 <= now && !m_IsCombat2IdleChanging) { GetOwner().SkillController.PushSkill(SkillCategory.kCombat2Idle, Vector3.Zero); m_IsCombat2IdleChanging = true; GetOwner().ResetCombat2IdleCoefficient(); } } if (m_IsCombatState && !m_IsWeaponMoved) { EnterCombatState(); } }
private void HandleStandAction(NpcInfo npc, CharacterInfo target, long delatTime) { if (npc.GetSkillStateInfo().IsSkillActivated()) { return; } NpcAiStateInfo info = npc.GetAiStateInfo(); AiData_Npc_ActionDrive data = GetAiData(npc); if (null != data && null != target) { npc.GetMovementStateInfo().IsMoving = false; NotifyNpcMove(npc); AiActionInfo aiActionInfo = data.ActiveAction; if (null != aiActionInfo) { if ((!IsAiActionSatify(npc, target, aiActionInfo) && aiActionInfo.Config.CanInterrupt) || aiActionInfo.IsTimeOut(TimeUtility.GetServerMilliseconds())) { data.ActiveAction = null; aiActionInfo.LastStartTime = TimeUtility.GetServerMilliseconds(); } } } }