From 5370f13b2b90881029bcb6a465a87df5e7aaabe7 Mon Sep 17 00:00:00 2001 From: Filip Maj Date: Sat, 24 Sep 2016 14:17:31 -0400 Subject: [PATCH] Fixed login not working, was due to packets that got queued not flushing. !!!Need to find solution!!! Added a optimization: Actors with 0 battle args are now concidered "static" and will not send their position updates. Removed some debug print statements. --- FFXIVClassic Map Server/PacketProcessor.cs | 9 ++++----- FFXIVClassic Map Server/actors/chara/Character.cs | 2 ++ FFXIVClassic Map Server/actors/chara/npc/Npc.cs | 6 +++++- FFXIVClassic Map Server/dataobjects/Session.cs | 4 ++++ .../DataObjects/ClientConnection.cs | 4 +--- FFXIVClassic World Server/PacketProcessor.cs | 2 -- FFXIVClassic World Server/Program.cs | 2 +- FFXIVClassic World Server/Server.cs | 4 +++- 8 files changed, 20 insertions(+), 13 deletions(-) diff --git a/FFXIVClassic Map Server/PacketProcessor.cs b/FFXIVClassic Map Server/PacketProcessor.cs index 88ae4b18..edb76410 100644 --- a/FFXIVClassic Map Server/PacketProcessor.cs +++ b/FFXIVClassic Map Server/PacketProcessor.cs @@ -31,12 +31,9 @@ namespace FFXIVClassic_Map_Server } public void ProcessPacket(ZoneConnection client, SubPacket subpacket) - { - + { Session session = mServer.GetSession(subpacket.header.targetId); - - subpacket.DebugPrintSubPacket(); - + //Normal Game Opcode switch (subpacket.gameMessage.opcode) { @@ -57,6 +54,8 @@ namespace FFXIVClassic_Map_Server client.QueuePacket(_0x2Packet.BuildPacket(session.id), true, false); Server.GetWorldManager().DoLogin(session.GetActor()); + + client.FlushQueuedSendPackets(); break; //Chat Received diff --git a/FFXIVClassic Map Server/actors/chara/Character.cs b/FFXIVClassic Map Server/actors/chara/Character.cs index 41b8932a..03a95331 100644 --- a/FFXIVClassic Map Server/actors/chara/Character.cs +++ b/FFXIVClassic Map Server/actors/chara/Character.cs @@ -36,6 +36,8 @@ namespace FFXIVClassic_Map_Server.Actors public const int L_INDEXFINGER = 26; public const int UNKNOWN = 27; + public bool isStatic = false; + public uint modelId; public uint[] appearanceIds = new uint[28]; diff --git a/FFXIVClassic Map Server/actors/chara/npc/Npc.cs b/FFXIVClassic Map Server/actors/chara/npc/Npc.cs index 5702a35c..c371f40a 100644 --- a/FFXIVClassic Map Server/actors/chara/npc/Npc.cs +++ b/FFXIVClassic Map Server/actors/chara/npc/Npc.cs @@ -87,13 +87,17 @@ namespace FFXIVClassic_Map_Server.Actors List lParams; Player player = Server.GetWorldManager().GetPCInWorld(playerActorId); - lParams = DoActorInit(player); + lParams = DoActorInit(player); + + if (lParams != null && lParams.Count >= 3 && lParams[2].typeID == 0 && (int)lParams[2].value == 0) + isStatic = true; if (lParams == null) { string classPathFake = "/Chara/Npc/Populace/PopulaceStandard"; string classNameFake = "PopulaceStandard"; lParams = LuaUtils.CreateLuaParamList(classPathFake, false, false, false, false, false, 0xF47F6, false, false, 0, 0); + isStatic = true; //ActorInstantiatePacket.BuildPacket(actorId, playerActorId, actorName, classNameFake, lParams).DebugPrintSubPacket(); return ActorInstantiatePacket.BuildPacket(actorId, playerActorId, actorName, classNameFake, lParams); } diff --git a/FFXIVClassic Map Server/dataobjects/Session.cs b/FFXIVClassic Map Server/dataobjects/Session.cs index 19b6f3f5..0dd8a88c 100644 --- a/FFXIVClassic Map Server/dataobjects/Session.cs +++ b/FFXIVClassic Map Server/dataobjects/Session.cs @@ -104,6 +104,10 @@ namespace FFXIVClassic_Map_Server.dataobjects if (actorInstanceList.Contains(actor)) { + //Don't send for static characters (npcs) + if (actor is Character && ((Character)actor).isStatic) + continue; + GetActor().QueuePacket(actor.CreatePositionUpdatePacket(playerActor.actorId)); } else diff --git a/FFXIVClassic World Server/DataObjects/ClientConnection.cs b/FFXIVClassic World Server/DataObjects/ClientConnection.cs index 78f5aec2..282dd52f 100644 --- a/FFXIVClassic World Server/DataObjects/ClientConnection.cs +++ b/FFXIVClassic World Server/DataObjects/ClientConnection.cs @@ -36,9 +36,7 @@ namespace FFXIVClassic_World_Server while (SendPacketQueue.Count > 0) { BasePacket packet = SendPacketQueue.Take(); - - packet.DebugPrintPacket(); - + byte[] packetBytes = packet.GetPacketBytes(); try diff --git a/FFXIVClassic World Server/PacketProcessor.cs b/FFXIVClassic World Server/PacketProcessor.cs index a851f2f4..3909cf02 100644 --- a/FFXIVClassic World Server/PacketProcessor.cs +++ b/FFXIVClassic World Server/PacketProcessor.cs @@ -41,8 +41,6 @@ namespace FFXIVClassic_World_Server List subPackets = packet.GetSubpackets(); foreach (SubPacket subpacket in subPackets) { - subpacket.DebugPrintSubPacket(); - //Initial Connect Packet, Create session if (subpacket.header.type == 0x01) { diff --git a/FFXIVClassic World Server/Program.cs b/FFXIVClassic World Server/Program.cs index b894d6f1..931a51c8 100644 --- a/FFXIVClassic World Server/Program.cs +++ b/FFXIVClassic World Server/Program.cs @@ -24,7 +24,7 @@ namespace FFXIVClassic_World_Server if (System.Diagnostics.Debugger.IsAttached) { - System.Threading.Thread.Sleep(5000); + System.Threading.Thread.Sleep(15000); } #endif diff --git a/FFXIVClassic World Server/Server.cs b/FFXIVClassic World Server/Server.cs index 305bea44..c286c6aa 100644 --- a/FFXIVClassic World Server/Server.cs +++ b/FFXIVClassic World Server/Server.cs @@ -136,14 +136,16 @@ namespace FFXIVClassic_World_Server public void OnReceiveSubPacketFromZone(ZoneServer zoneServer, SubPacket subpacket) { - subpacket.DebugPrintSubPacket(); + //subpacket.DebugPrintSubPacket(); uint sessionId = subpacket.header.targetId; if (mZoneSessionList.ContainsKey(sessionId)) { ClientConnection conn = mZoneSessionList[sessionId].clientConnection; conn.QueuePacket(subpacket, true, false); + conn.FlushQueuedSendPackets(); } + } public WorldManager GetWorldManager()