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(); } } } }
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); } }
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; } } }
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(); } } }
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); } }
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; } } }
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(); }
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); }
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(); } }
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; } } }
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; } }
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")); } }
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(); }