Beispiel #1
0
        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);
        }