Esempio n. 1
0
    public void On_CMSG_SET_TRADE_ITEM(ref Packets.PacketClass packet, ref WS_Network.ClientClass client)
    {
        packet.GetInt16();
        var myBag = packet.GetInt8();

        if (myBag == byte.MaxValue)
        {
            myBag = 0;
        }
        var slot = packet.GetInt8();

        if (slot > 6)
        {
            return;
        }
        var mySlot = packet.GetInt8();

        WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_SET_TRADE_ITEM [slot={2} myBag={3} mySlot={4}]", client.IP, client.Port, slot, myBag, mySlot);
        checked
        {
            if (client.Character.tradeInfo != null)
            {
                if (client.Character.tradeInfo.Trader == client.Character)
                {
                    client.Character.tradeInfo.TraderSlots[slot] = (myBag << 8) + mySlot;
                    client.Character.tradeInfo.SendTradeUpdateToTarget();
                }
                else
                {
                    client.Character.tradeInfo.TargetSlots[slot] = (myBag << 8) + mySlot;
                    client.Character.tradeInfo.SendTradeUpdateToTrader();
                }
            }
        }
    }
Esempio n. 2
0
 public void On_CMSG_AUTOSTORE_LOOT_ITEM(ref Packets.PacketClass packet, ref WS_Network.ClientClass client)
 {
     if (checked (packet.Data.Length - 1) < 6)
     {
         return;
     }
     try
     {
         packet.GetInt16();
         byte slot = packet.GetInt8();
         WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_AUTOSTORE_LOOT_ITEM [slot={2}]", client.IP, client.Port, slot);
         if (LootTable.ContainsKey(client.Character.lootGUID))
         {
             LootTable[client.Character.lootGUID].GetLoot(ref client, slot);
             return;
         }
         Packets.PacketClass response = new(Opcodes.SMSG_INVENTORY_CHANGE_FAILURE);
         response.AddInt8(49);
         response.AddUInt64(0uL);
         response.AddUInt64(0uL);
         response.AddInt8(0);
         client.Send(ref response);
         response.Dispose();
     }
     catch (Exception e)
     {
         WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "Error looting item.{0}", Environment.NewLine + e);
     }
 }
Esempio n. 3
0
    public static void On_SMSG_AUTH_RESPONSE(ref Packets.PacketClass Packet)
    {
        Console.WriteLine("[{0}][World] Received Auth Response.", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss"));
        var ErrorCode = Packet.GetInt8();

        switch (ErrorCode)
        {
        case 0xC:
        {
            Console.WriteLine("[{0}][World] Auth succeeded.", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss"));
            Packets.PacketClass Response = new(OPCODES.CMSG_CHAR_ENUM);
            Worldserver.Send(Response);
            Response.Dispose();
            break;
        }

        case 0x15:
        {
            Console.WriteLine("[{0}][World] Auth Challenge failed.", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss"));
            Worldserver.Disconnect();
            break;
        }

        default:
        {
            Console.WriteLine("[{0}][World] Unknown Auth Response error [{1}].", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss"), ErrorCode);
            Worldserver.Disconnect();
            break;
        }
        }
    }
Esempio n. 4
0
 public void On_CMSG_PETITION_SIGN(ref Packets.PacketClass packet, ref WS_Network.ClientClass client)
 {
     checked
     {
         if (packet.Data.Length - 1 < 14)
         {
             return;
         }
         packet.GetInt16();
         ulong itemGuid = packet.GetUInt64();
         int   Unk      = packet.GetInt8();
         WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_PETITION_SIGN [GUID={2:X} Unk={3}]", client.IP, client.Port, itemGuid, Unk);
         DataTable MySQLQuery = new();
         WorldServiceLocator._WorldServer.CharacterDatabase.Query("SELECT petition_signedMembers, petition_owner FROM petitions WHERE petition_itemGuid = " + Conversions.ToString(itemGuid - WorldServiceLocator._Global_Constants.GUID_ITEM) + ";", ref MySQLQuery);
         if (MySQLQuery.Rows.Count != 0)
         {
             WorldServiceLocator._WorldServer.CharacterDatabase.Update(Conversions.ToString(Operators.ConcatenateObject(Operators.ConcatenateObject(Operators.ConcatenateObject(Operators.ConcatenateObject(Operators.ConcatenateObject(Operators.ConcatenateObject("UPDATE petitions SET petition_signedMembers = petition_signedMembers + 1, petition_signedMember", Operators.AddObject(MySQLQuery.Rows[0]["petition_signedMembers"], 1)), " = "), client.Character.GUID), " WHERE petition_itemGuid = "), itemGuid - WorldServiceLocator._Global_Constants.GUID_ITEM), ";")));
             Packets.PacketClass response = new(Opcodes.SMSG_PETITION_SIGN_RESULTS);
             response.AddUInt64(itemGuid);
             response.AddUInt64(client.Character.GUID);
             response.AddInt32(0);
             client.SendMultiplyPackets(ref response);
             if (WorldServiceLocator._WorldServer.CHARACTERs.ContainsKey(MySQLQuery.Rows[0].As <ulong>("petition_owner")))
             {
                 WorldServiceLocator._WorldServer.CHARACTERs[MySQLQuery.Rows[0].As <ulong>("petition_owner")].client.SendMultiplyPackets(ref response);
             }
             response.Dispose();
         }
     }
 }
Esempio n. 5
0
 public void On_CMSG_STANDSTATECHANGE(ref Packets.PacketClass packet, ref WS_Network.ClientClass client)
 {
     if (checked (packet.Data.Length - 1) >= 6)
     {
         packet.GetInt16();
         var StandState = packet.GetInt8();
         if (StandState == 0)
         {
             client.Character.RemoveAurasByInterruptFlag(262144);
         }
         client.Character.StandState = StandState;
         client.Character.SetUpdateFlag(138, client.Character.cBytes1);
         client.Character.SendCharacterUpdate();
         Packets.PacketClass packetACK = new(Opcodes.SMSG_STANDSTATE_CHANGE_ACK);
         try
         {
             packetACK.AddInt8(StandState);
             client.Send(ref packetACK);
         }
         finally
         {
             packetACK.Dispose();
         }
         WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_STANDSTATECHANGE [{2}]", client.IP, client.Port, client.Character.StandState);
     }
 }
Esempio n. 6
0
    public static void On_SMSG_MESSAGECHAT(ref Packets.PacketClass Packet)
    {
        ChatMsg   msgType     = (ChatMsg)Packet.GetInt8();
        LANGUAGES msgLanguage = (LANGUAGES)Packet.GetInt32();

        switch (msgType)
        {
        case ChatMsg.CHAT_MSG_WHISPER:
        {
            var SenderGuid = (ulong)Packet.GetInt64();
            var ByteCount  = Packet.GetInt32();
            var Message    = Packet.GetString();
            var ChatFlag   = Packet.GetInt8();
            Console.WriteLine("Answer: " + Message);
            break;
        }
        }
    }
Esempio n. 7
0
    public void On_CMSG_SET_ACTIONBAR_TOGGLES(ref Packets.PacketClass packet, ref WS_Network.ClientClass client)
    {
        packet.GetInt16();
        var ActionBar = packet.GetInt8();

        WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_SET_ACTIONBAR_TOGGLES [{2:X}]", client.IP, client.Port, ActionBar);
        client.Character.cPlayerFieldBytes = (client.Character.cPlayerFieldBytes & -983041) | (byte)(ActionBar << (0x10 & 7));
        client.Character.SetUpdateFlag(1222, client.Character.cPlayerFieldBytes);
        client.Character.SendCharacterUpdate();
    }
Esempio n. 8
0
    public void On_CMSG_SET_ACTION_BUTTON(ref Packets.PacketClass packet, ref WS_Network.ClientClass client)
    {
        if (checked (packet.Data.Length - 1) < 10)
        {
            return;
        }
        packet.GetInt16();
        var button     = packet.GetInt8();
        var action     = packet.GetUInt16();
        var actionMisc = packet.GetInt8();
        var actionType = packet.GetInt8();

        if (action == 0)
        {
            WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] MSG_SET_ACTION_BUTTON [Remove action from button {2}]", client.IP, client.Port, button);
            client.Character.ActionButtons.Remove(button);
        }
        else
        {
            switch (actionType)
            {
            case 64:
                WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_SET_ACTION_BUTTON [Added Macro {2} into button {3}]", client.IP, client.Port, action, button);
                break;

            case 128:
                WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_SET_ACTION_BUTTON [Added Item {2} into button {3}]", client.IP, client.Port, action, button);
                break;

            default:
                WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_SET_ACTION_BUTTON [Added Action {2}:{4}:{5} into button {3}]", client.IP, client.Port, action, button, actionType, actionMisc);
                break;
            }
        }
        client.Character.ActionButtons[button] = new WS_PlayerHelper.TActionButton(action, actionType, actionMisc);
    }
Esempio n. 9
0
    public void On_CMSG_CLEAR_TRADE_ITEM(ref Packets.PacketClass packet, ref WS_Network.ClientClass client)
    {
        packet.GetInt16();
        var slot = packet.GetInt8();

        WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_CLEAR_TRADE_ITEM [slot={2}]", client.IP, client.Port, slot);
        if (client.Character.tradeInfo.Trader == client.Character)
        {
            client.Character.tradeInfo.TraderSlots[slot] = -1;
            client.Character.tradeInfo.SendTradeUpdateToTarget();
        }
        else
        {
            client.Character.tradeInfo.TargetSlots[slot] = -1;
            client.Character.tradeInfo.SendTradeUpdateToTrader();
        }
    }
Esempio n. 10
0
    public static void On_SMSG_WARDEN_DATA(ref Packets.PacketClass Packet)
    {
        // START Warden Decryption
        var b = new byte[(Packet.Data.Length - 4)];

        Buffer.BlockCopy(Packet.Data, 4, b, 0, b.Length);
        RC4.Crypt(ref b, Maiev.KeyIn);
        Buffer.BlockCopy(b, 0, Packet.Data, 4, b.Length);
        // END

        var WardenData = new byte[(Packet.Data.Length - 4)];

        Buffer.BlockCopy(Packet.Data, 4, WardenData, 0, WardenData.Length);
        MaievOpcode Opcode = (MaievOpcode)Packet.GetInt8();

        Console.ForegroundColor = ConsoleColor.Cyan;
        Console.WriteLine("SMSG_WARDEN_DATA [{0}]", Opcode);
        Console.ForegroundColor = ConsoleColor.White;
        switch (Opcode)
        {
        case MaievOpcode.MAIEV_MODULE_INFORMATION:
        {
            var Name = Packet.GetByteArray(16);
            var Key  = Packet.GetByteArray(16);
            var Size = Packet.GetUInt32();
            Maiev.ModuleName = BitConverter.ToString(Name).Replace("-", "");
            Maiev.ModuleKey  = Key;
            ModuleLength     = (int)Size;
            Maiev.ModuleData = Array.Empty <byte>();
            if (File.Exists(@"modules\" + Maiev.ModuleName + ".mod") == false)
            {
                Console.WriteLine("[{0}][WARDEN] Module is missing.", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss"));
                Packets.PacketClass response = new(OPCODES.CMSG_WARDEN_DATA);
                response.AddInt8((byte)MaievResponse.MAIEV_RESPONSE_FAILED_OR_MISSING);
                SendWardenPacket(ref response);
                response.Dispose();
            }
            else
            {
                Console.WriteLine("[{0}][WARDEN] Module is initiated.", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss"));
                Maiev.ModuleData = File.ReadAllBytes(@"modules\" + Maiev.ModuleName + ".mod");
                if (Maiev.LoadModule(Maiev.ModuleName, ref Maiev.ModuleData, Maiev.ModuleKey))
                {
                    Console.WriteLine("[{0}][WARDEN] Successfully loaded the module.", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss"));
                    Packets.PacketClass response = new(OPCODES.CMSG_WARDEN_DATA);
                    response.AddInt8((byte)MaievResponse.MAIEV_RESPONSE_SUCCESS);
                    SendWardenPacket(ref response);
                    response.Dispose();
                }
                else
                {
                    Packets.PacketClass response = new(OPCODES.CMSG_WARDEN_DATA);
                    response.AddInt8((byte)MaievResponse.MAIEV_RESPONSE_FAILED_OR_MISSING);
                    SendWardenPacket(ref response);
                    response.Dispose();
                }
            }

            break;
        }

        case MaievOpcode.MAIEV_MODULE_TRANSFER:
        {
            var Size = Packet.GetUInt16();
            var Data = Packet.GetByteArray(Size);
            Maiev.ModuleData = Realmserver.Concat(Maiev.ModuleData, Data);
            ModuleLength    -= Size;
            if (ModuleLength <= 0)
            {
                Console.WriteLine("[{0}][WARDEN] Module is fully transfered.", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss"));
                if (Directory.Exists("modules") == false)
                {
                    Directory.CreateDirectory("modules");
                }

                File.WriteAllBytes(@"modules\" + Maiev.ModuleName + ".mod", Maiev.ModuleData);
                if (Maiev.LoadModule(Maiev.ModuleName, ref Maiev.ModuleData, Maiev.ModuleKey))
                {
                    Console.WriteLine("[{0}][WARDEN] Successfully loaded the module.", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss"));
                    Packets.PacketClass response = new(OPCODES.CMSG_WARDEN_DATA);
                    response.AddInt8((byte)MaievResponse.MAIEV_RESPONSE_SUCCESS);
                    SendWardenPacket(ref response);
                    response.Dispose();
                }
            }
            else
            {
                Console.WriteLine("[{0}][WARDEN] Module transfer. Bytes left: {1}", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss"), ModuleLength);
            }

            break;
        }

        case MaievOpcode.MAIEV_MODULE_RUN:
        {
            Console.WriteLine("[{0}][WARDEN] Requesting a scan.", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss"));

            // TODO: Encrypt?
            Maiev.ReadKeys2();
            RC4.Crypt(ref WardenData, Maiev.ModKeyIn);
            var HandledBytes = Maiev.HandlePacket(WardenData);
            if (HandledBytes <= 0)
            {
                return;
            }

            var thePacket = Maiev.ReadPacket();
            if (thePacket.Length == 0)
            {
                return;
            }

            RC4.Crypt(ref WardenData, Maiev.ModKeyOut);

            // TODO: Decrypt?

            Packets.DumpPacket(thePacket);
            Packets.PacketClass response = new(OPCODES.CMSG_WARDEN_DATA);
            response.AddByteArray(thePacket);
            SendWardenPacket(ref response);
            response.Dispose();
            break;
        }

        case MaievOpcode.MAIEV_MODULE_UNK:
        {
            // TODO: Encrypt?
            Maiev.ReadKeys2();
            RC4.Crypt(ref WardenData, Maiev.ModKeyIn);
            var HandledBytes = Maiev.HandlePacket(WardenData);
            if (HandledBytes <= 0)
            {
                return;
            }

            var thePacket = Maiev.ReadPacket();
            if (thePacket.Length == 0)
            {
                return;
            }

            RC4.Crypt(ref WardenData, Maiev.ModKeyOut);
            // TODO: Decrypt?

            Packets.DumpPacket(thePacket);
            Packets.PacketClass response = new(OPCODES.CMSG_WARDEN_DATA);
            response.AddByteArray(thePacket);
            SendWardenPacket(ref response);
            response.Dispose();
            break;
        }

        case MaievOpcode.MAIEV_MODULE_SEED:
        {
            Maiev.GenerateNewRC4Keys(Realmserver.SS_Hash);
            var HandledBytes = Maiev.HandlePacket(WardenData);
            if (HandledBytes <= 0)
            {
                return;
            }

            var thePacket = Maiev.ReadPacket();
            Maiev.ModKeyIn  = new byte[258];
            Maiev.ModKeyOut = new byte[258];
            Packets.PacketClass response = new(OPCODES.CMSG_WARDEN_DATA);
            response.AddByteArray(thePacket);
            SendWardenPacket(ref response);
            response.Dispose();
            Maiev.ReadKeys();
            break;
        }

        default:
        {
            Console.WriteLine("[{0}][WARDEN] Unhandled Opcode [{1}] 0x{2:X}", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss"), Opcode, Conversions.ToInteger(Opcode));
            break;
        }
        }
    }
Esempio n. 11
0
        public void On_CMSG_WARDEN_DATA(ref Packets.PacketClass packet, ref WS_Network.ClientClass client)
        {
            byte[] b = new byte[checked (packet.Data.Length - 6 - 1 + 1)];
            Buffer.BlockCopy(packet.Data, 6, b, 0, b.Length);
            RC4.Crypt(ref b, client.Character.WardenData.KeyOut);
            Buffer.BlockCopy(b, 0, packet.Data, 6, b.Length);
            packet.GetInt16();
            MaievResponse Response = (MaievResponse)packet.GetInt8();

            WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_WARDEN_DATA [{2}]", client.IP, client.Port, Response);
            if (!client.Character.WardenData.Ready)
            {
                return;
            }
            switch (Response)
            {
            case MaievResponse.MAIEV_RESPONSE_FAILED_OR_MISSING:
                MaievSendTransfer(ref client.Character);
                break;

            case MaievResponse.MAIEV_RESPONSE_SUCCESS:
                MaievSendSeed(ref client.Character);
                break;

            case MaievResponse.MAIEV_RESPONSE_RESULT:
                MaievResult(ref client.Character, ref packet);
                break;

            case MaievResponse.MAIEV_RESPONSE_HASH:
            {
                byte[] hash = new byte[20];
                Buffer.BlockCopy(packet.Data, packet.Offset, hash, 0, 20);
                WorldServiceLocator._WS_Warden.Maiev.GenerateNewRC4Keys(client.Character.WardenData.K);
                byte[] PacketData = new byte[17]
                {
                    5,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0
                };
                Buffer.BlockCopy(client.Character.WardenData.Seed, 0, PacketData, 1, 16);
                int HandledBytes = WorldServiceLocator._WS_Warden.Maiev.HandlePacket(PacketData);
                if (HandledBytes <= 0)
                {
                    WorldServiceLocator._WorldServer.Log.WriteLine(LogType.CRITICAL, "[WARDEN] Failed to handle 0x05 packet.");
                    break;
                }
                byte[] thePacket = WorldServiceLocator._WS_Warden.Maiev.ReadPacket();
                byte[] ourHash   = new byte[20];
                Array.Copy(thePacket, 1, ourHash, 0, ourHash.Length);
                WorldServiceLocator._WS_Warden.Maiev.ReadXorByte(ref client.Character);
                WorldServiceLocator._WS_Warden.Maiev.ReadKeys(ref client.Character);
                WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] XorByte: {0}", client.Character.WardenData.xorByte);
                bool HashCorrect = true;
                int  i           = 0;
                do
                {
                    if (hash[i] != ourHash[i])
                    {
                        HashCorrect = false;
                        break;
                    }
                    i = checked (i + 1);
                }while (i <= 19);
                if (!HashCorrect)
                {
                    WorldServiceLocator._WorldServer.Log.WriteLine(LogType.CRITICAL, "[WARDEN] Hashes in packet 0x05 didn't match. Cheater?");
                }
                break;
            }

            case (MaievResponse)3:
                break;

            default:
                break;
            }
        }
Esempio n. 12
0
    public static void On_SMSG_CHAR_ENUM(ref Packets.PacketClass Packet)
    {
        Console.WriteLine("[{0}][World] Received Character List.", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss"));
        var NumChars = Packet.GetInt8();

        if (NumChars > 0)
        {
            for (byte i = 1, loopTo = NumChars; i <= loopTo; i++)
            {
                var GUID        = Packet.GetUInt64();
                var Name        = Packet.GetString();
                var Race        = Packet.GetInt8();
                var Classe      = Packet.GetInt8();
                var Gender      = Packet.GetInt8();
                var Skin        = Packet.GetInt8();
                var Face        = Packet.GetInt8();
                var HairStyle   = Packet.GetInt8();
                var HairColor   = Packet.GetInt8();
                var FacialHair  = Packet.GetInt8();
                var Level       = Packet.GetInt8();
                var Zone        = Packet.GetInt32();
                var Map         = Packet.GetInt32();
                var PosX        = Packet.GetFloat();
                var PosY        = Packet.GetFloat();
                var PosZ        = Packet.GetFloat();
                var GuildID     = Packet.GetUInt32();
                var PlayerState = Packet.GetUInt32();
                var RestState   = Packet.GetInt8();
                var PetInfoID   = Packet.GetUInt32();
                var PetLevel    = Packet.GetUInt32();
                var PetFamilyID = Packet.GetUInt32();
                Console.WriteLine("[{0}][World] Logging in with character [{1}].", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss"), Name);
                Worldserver.CharacterGUID = GUID;
                Packets.PacketClass Response = new(OPCODES.CMSG_PLAYER_LOGIN);
                Response.AddUInt64(GUID);
                Worldserver.Send(Response);
                Response.Dispose();
                break;

                // Skip the equipment
                Packet.Offset += 20 * 9;
            }
        }
        else
        {
            Console.WriteLine("[{0}][World] No characters found.", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss"));
        }
    }
Esempio n. 13
0
 public void On_CMSG_PETITION_BUY(ref Packets.PacketClass packet, ref WS_Network.ClientClass client)
 {
     checked
     {
         if (packet.Data.Length - 1 < 26)
         {
             return;
         }
         packet.GetInt16();
         ulong GUID = packet.GetUInt64();
         packet.GetInt64();
         packet.GetInt32();
         string Name = packet.GetString();
         if (packet.Data.Length - 1 < 26 + Name.Length + 40 + 2 + 1 + 4 + 4)
         {
             return;
         }
         packet.GetInt64();
         packet.GetInt64();
         packet.GetInt64();
         packet.GetInt64();
         packet.GetInt64();
         packet.GetInt16();
         packet.GetInt8();
         int Index = packet.GetInt32();
         packet.GetInt32();
         if (!WorldServiceLocator._WorldServer.WORLD_CREATUREs.ContainsKey(GUID) || (WorldServiceLocator._WorldServer.WORLD_CREATUREs[GUID].CreatureInfo.cNpcFlags & 0x200) == 0)
         {
             return;
         }
         WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_PETITION_BUY [GuildName={2}]", client.IP, client.Port, Name);
         if ((ulong)client.Character.GuildID != 0)
         {
             return;
         }
         int       CharterID    = WorldServiceLocator._Global_Constants.PETITION_GUILD;
         int       CharterPrice = WorldServiceLocator._Global_Constants.PETITION_GUILD_PRICE;
         DataTable q            = new();
         WorldServiceLocator._WorldServer.CharacterDatabase.Query($"SELECT guild_id FROM guilds WHERE guild_name = '{Name}'", ref q);
         if (q.Rows.Count > 0)
         {
             SendGuildResult(ref client, GuildCommand.GUILD_CREATE_S, GuildError.GUILD_NAME_EXISTS, Name);
         }
         q.Clear();
         if (!WorldServiceLocator._Functions.ValidateGuildName(Name))
         {
             SendGuildResult(ref client, GuildCommand.GUILD_CREATE_S, GuildError.GUILD_NAME_INVALID, Name);
         }
         if (!WorldServiceLocator._WorldServer.ITEMDatabase.ContainsKey(CharterID))
         {
             Packets.PacketClass response2 = new(Opcodes.SMSG_BUY_FAILED);
             response2.AddUInt64(GUID);
             response2.AddInt32(CharterID);
             response2.AddInt8(0);
             client.Send(ref response2);
             response2.Dispose();
             return;
         }
         if (client.Character.Copper < CharterPrice)
         {
             Packets.PacketClass response = new(Opcodes.SMSG_BUY_FAILED);
             response.AddUInt64(GUID);
             response.AddInt32(CharterID);
             response.AddInt8(2);
             client.Send(ref response);
             response.Dispose();
             return;
         }
         ref uint copper = ref client.Character.Copper;
         copper = (uint)(copper - CharterPrice);
         client.Character.SetUpdateFlag(1176, client.Character.Copper);
         client.Character.SendCharacterUpdate(toNear: false);
         ItemObject tmpItem = new(CharterID, client.Character.GUID)
         {
             StackCount = 1
         };
         tmpItem.AddEnchantment((int)(tmpItem.GUID - WorldServiceLocator._Global_Constants.GUID_ITEM), 0);
         if (client.Character.ItemADD(ref tmpItem))
         {
             WorldServiceLocator._WorldServer.CharacterDatabase.Update(string.Format("INSERT INTO petitions (petition_id, petition_itemGuid, petition_owner, petition_name, petition_type, petition_signedMembers) VALUES ({0}, {0}, {1}, '{2}', {3}, 0);", tmpItem.GUID - WorldServiceLocator._Global_Constants.GUID_ITEM, client.Character.GUID - WorldServiceLocator._Global_Constants.GUID_PLAYER, Name, 9));
         }
         else
         {
             tmpItem.Delete();
         }
     }
 }
            public void HandleResponse(ref Packets.PacketClass p)
            {
                foreach (CheatCheck Check in Checks)
                {
                    switch (Check.Type)
                    {
                    case CheckTypes.MEM_CHECK:
                    {
                        byte   result = p.GetInt8();
                        byte[] bytes  = p.GetByteArray();
                        WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] [{0}] Result={1} Bytes=0x{2}", Check.Type, result, BitConverter.ToString(bytes).Replace("-", ""));
                        break;
                    }

                    case CheckTypes.PAGE_CHECK_A_B:
                    {
                        byte result2 = p.GetInt8();
                        WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] [{0}] Result={1}", Check.Type, result2);
                        break;
                    }

                    case CheckTypes.MPQ_CHECK:
                    {
                        byte   result3 = p.GetInt8();
                        byte[] hash    = p.GetByteArray();
                        WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] [{0}] Result={1} Hash=0x{2}", Check.Type, result3, BitConverter.ToString(hash).Replace("-", ""));
                        break;
                    }

                    case CheckTypes.LUA_STR_CHECK:
                    {
                        byte   unk  = p.GetInt8();
                        string data = p.GetString2();
                        WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] [{0}] Result={1} Data={2}", Check.Type, unk, data);
                        break;
                    }

                    case CheckTypes.DRIVER_CHECK:
                    {
                        byte result4 = p.GetInt8();
                        WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] [{0}] Result={1}", Check.Type, result4);
                        break;
                    }

                    case CheckTypes.TIMING_CHECK:
                    {
                        byte result5 = p.GetInt8();
                        int  time    = p.GetInt32();
                        WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] [{0}] Result={1} Time={2}", Check.Type, result5, time);
                        break;
                    }

                    case CheckTypes.PROC_CHECK:
                    {
                        byte result6 = p.GetInt8();
                        WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] [{0}] Result={1}", Check.Type, result6);
                        break;
                    }

                    case CheckTypes.MODULE_CHECK:
                        WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[WARDEN] [{0}]", Check.Type);
                        break;
                    }
                }
                Reset();
            }