1
Fork 0
mirror of https://bitbucket.org/Ioncannon/project-meteor-server.git synced 2025-04-21 04:07:48 +00:00
This commit is contained in:
Filip Maj 2017-06-19 22:24:45 -04:00
commit 0c8642d6ab
5 changed files with 34 additions and 6 deletions

View file

@ -56,9 +56,12 @@ namespace FFXIVClassic_Map_Server
//World Server - Session Begin //World Server - Session Begin
case 0x1000: case 0x1000:
subpacket.DebugPrintSubPacket(); subpacket.DebugPrintSubPacket();
SessionBeginPacket beginSessionPacket = new SessionBeginPacket(subpacket.data);
session = mServer.AddSession(subpacket.header.targetId); session = mServer.AddSession(subpacket.header.targetId);
if (session.GetActor().destinationZone != 0) if (beginSessionPacket.isLogin)
Server.GetWorldManager().DoZoneIn(session.GetActor(), false, session.GetActor().destinationSpawnType); Server.GetWorldManager().DoZoneIn(session.GetActor(), false, session.GetActor().destinationSpawnType);
Program.Log.Info("{0} has been added to the session list.", session.GetActor().customDisplayName); Program.Log.Info("{0} has been added to the session list.", session.GetActor().customDisplayName);

View file

@ -9,11 +9,25 @@ namespace FFXIVClassic_Map_Server.packets.WorldPackets.Receive
{ {
class SessionBeginPacket class SessionBeginPacket
{ {
public bool isLogin;
public bool invalidPacket = false; public bool invalidPacket = false;
public SessionBeginPacket(byte[] data) public SessionBeginPacket(byte[] data)
{ {
using (MemoryStream mem = new MemoryStream(data))
{
using (BinaryReader binReader = new BinaryReader(mem))
{
try
{
isLogin = binReader.ReadByte() != 0;
}
catch (Exception)
{
invalidPacket = true;
}
}
}
} }
} }
} }

View file

@ -150,9 +150,9 @@ namespace FFXIVClassic_World_Server.DataObjects
} }
} }
public void SendSessionStart(Session session) public void SendSessionStart(Session session, bool isLogin = false)
{ {
SendPacket(SessionBeginPacket.BuildPacket(session)); SendPacket(SessionBeginPacket.BuildPacket(session, isLogin));
} }
public void SendSessionEnd(Session session) public void SendSessionEnd(Session session)

View file

@ -56,7 +56,7 @@ namespace FFXIVClassic_World_Server
mServer.AddSession(client, Session.Channel.ZONE, hello.sessionId); mServer.AddSession(client, Session.Channel.ZONE, hello.sessionId);
Session session = mServer.GetSession(hello.sessionId); Session session = mServer.GetSession(hello.sessionId);
session.routing1 = mServer.GetWorldManager().GetZoneServer(session.currentZoneId); session.routing1 = mServer.GetWorldManager().GetZoneServer(session.currentZoneId);
session.routing1.SendSessionStart(session); session.routing1.SendSessionStart(session, true);
} }
else if (packet.header.connectionType == BasePacket.TYPE_CHAT) else if (packet.header.connectionType == BasePacket.TYPE_CHAT)
mServer.AddSession(client, Session.Channel.CHAT, hello.sessionId); mServer.AddSession(client, Session.Channel.CHAT, hello.sessionId);

View file

@ -14,10 +14,21 @@ namespace FFXIVClassic_World_Server.Packets.WorldPackets.Send
public const ushort OPCODE = 0x1000; public const ushort OPCODE = 0x1000;
public const uint PACKET_SIZE = 0x24; public const uint PACKET_SIZE = 0x24;
public static SubPacket BuildPacket(Session session) public static SubPacket BuildPacket(Session session, bool isLogin)
{ {
byte[] data = new byte[PACKET_SIZE - 0x20]; byte[] data = new byte[PACKET_SIZE - 0x20];
if (isLogin)
{
using (MemoryStream mem = new MemoryStream(data))
{
using (BinaryWriter binWriter = new BinaryWriter(mem))
{
binWriter.Write((Byte)1);
}
}
}
return new SubPacket(true, OPCODE, 0, session.sessionId, data); return new SubPacket(true, OPCODE, 0, session.sessionId, data);
} }
} }