diff --git a/FFXIVClassic Map Server/actors/Actor.cs b/FFXIVClassic Map Server/actors/Actor.cs index 7f179230..9f09d162 100644 --- a/FFXIVClassic Map Server/actors/Actor.cs +++ b/FFXIVClassic Map Server/actors/Actor.cs @@ -149,11 +149,39 @@ namespace FFXIVClassic_Map_Server.Actors //spawnPacket.DebugPrintSubPacket(); return spawnPacket; - } + } - public SubPacket CreatePositionUpdatePacket(uint playerActorId) + public SubPacket CreatePositionUpdatePacket(bool forceUpdate = false) { - return MoveActorToPositionPacket.BuildPacket(actorId, playerActorId, positionX, positionY, positionZ, rotation, moveState); + int updateMs = 300; + var diffTime = (DateTime.Now - lastMoveUpdate); + + if (this.target != null) + { + updateMs = 150; + } + + if (forceUpdate || (hasMoved && ((this is Player) || diffTime.Milliseconds >= updateMs))) + { + hasMoved = (this.positionUpdates != null && this.positionUpdates.Count > 0); + if (hasMoved) + { + var pos = positionUpdates[0]; + + if (this is Character) + ((Character)this).OnPath(pos); + + positionX = pos.X; + positionY = pos.Y; + positionZ = pos.Z; + //Program.Server.GetInstance().mLuaEngine.OnPath(actor, position, positionUpdates) + + positionUpdates.RemoveAt(0); + } + lastMoveUpdate = DateTime.Now; + return MoveActorToPositionPacket.BuildPacket(actorId, positionX, positionY, positionZ, rotation, moveState); + } + return null; } public SubPacket CreateStatePacket() diff --git a/FFXIVClassic Map Server/actors/area/Area.cs b/FFXIVClassic Map Server/actors/area/Area.cs index 6cc437ba..1e28b0d5 100644 --- a/FFXIVClassic Map Server/actors/area/Area.cs +++ b/FFXIVClassic Map Server/actors/area/Area.cs @@ -376,38 +376,23 @@ namespace FFXIVClassic_Map_Server.Actors } } - // todo: for zones override this to seach contentareas (assuming flag is passed) -<<<<<<< HEAD - public virtual List GetAllActors() - { - lock (mActorList) - { - List actorList = new List(mActorList.Count); - foreach (var actor in mActorList.Values) - { - actorList.Add(actor); - } -======= + // todo: for zones override this to seach contentareas (assuming flag is passed) public virtual List GetAllActors() where T : Actor { lock (mActorList) { List actorList = new List(mActorList.Count); - actorList.AddRange(mActorList.Values.OfType()); ->>>>>>> 84d5eee1fcc284d252b7953a70aebed60b195ee8 + actorList.AddRange(mActorList.Values.OfType()); return actorList; } } - -<<<<<<< HEAD -======= + public virtual List GetAllActors() { return GetAllActors(); } - ->>>>>>> 84d5eee1fcc284d252b7953a70aebed60b195ee8 + public void BroadcastPacketsAroundActor(Actor actor, List packets) { foreach (SubPacket packet in packets)