public override void Execute(GameClient Client, byte *pPacket) { AuthMessage *Message = (AuthMessage *)pPacket; uint Token = Message->AccountID | 0xAABB; Token = Message->AccountID << 8 | Message->AccountID; Token = Token ^ 0x4321; Token = Token << 8 | Token; if (Token == Message->LoginToken) { Client.UID = Message->AccountID; Client.GenerateKeys(Message->LoginToken, Message->AccountID); if (Database.GetCharacterData(Client)) { Chat *Response = PacketHelper.CreateChat("SYSTEM", "ALLUSERS", "ANSWER_OK"); Response->ChatType = ChatType.LoginInformation; Response->ID = Message->AccountID; Client.Send(Response, Response->Size); Memory.Free(Response); CharacterInformation *Information = PacketHelper.CreateInformation(Client); Client.Send(Information, Information->Size); Memory.Free(Information); EntityManager.Add(Client); Client.Status = LoginStatus.Complete; } else { Chat *Response = PacketHelper.CreateChat("SYSTEM", "ALLUSERS", "NEW_ROLE"); Response->ChatType = ChatType.LoginInformation; Response->ID = Message->AccountID; Client.Send(Response, Response->Size); Memory.Free(Response); } } else { Client.Disconnect(); } }
public static CharacterInformation *CreateInformation(GameClient Client) { byte[] Payload = StringPayload(Client.Entity.Name, Client.Entity.Spouse); int Size = 66 + Payload.Length; CharacterInformation *Packet = (CharacterInformation *)Memory.Alloc(Size); Packet->Size = (ushort)Size; Packet->Type = 0x3EE; Packet->ID = Client.Entity.UID; Packet->Model = Client.Entity.Model; Packet->HairStyle = Client.Entity.HairStyle; Packet->Gold = Client.Entity.Money; Packet->Experience = Client.Entity.Experience; Packet->StatPoints = Client.Entity.StatusPoints.Free; Packet->Strength = Client.Entity.StatusPoints.Strength; Packet->Dexterity = Client.Entity.StatusPoints.Dexterity; Packet->Vitality = Client.Entity.StatusPoints.Vitality; Packet->Spirit = Client.Entity.StatusPoints.Spirit; Packet->HitPoints = Client.Entity.HitPoints; Packet->ManaPoints = Client.Entity.ManaPoints; Packet->PKPoints = Client.Entity.PKPoints; Packet->Level = Client.Entity.Level; Packet->Class = Client.Entity.Class; Packet->Reborn = Client.Entity.Reborn; Packet->DisplayName = true; Packet->NameCount = 2; fixed(byte *pPayload = Payload) { Memory.Copy(pPayload, Packet->Names, Payload.Length); } return(Packet); }