public void ClientPacket(uint id, byte[] data) { if (data == null) { throw new ApplicationException("Packet doesn't contain data!"); } try { if (WorldServiceLocator._WorldServer.CLIENTs.TryGetValue(id, out ClientClass _client)) { Packets.PacketClass p = new Packets.PacketClass(ref data); _client?.PushPacket(p); } else { WorldServiceLocator._WorldServer.Log.WriteLine(LogType.WARNING, "Client ID doesn't contain a key!: {0}", ToString()); } } catch (Exception ex2) { ProjectData.SetProjectError(ex2); Exception ex = ex2; WorldServiceLocator._WorldServer.Log.WriteLine(LogType.FAILED, "Error on Client OnPacket: {0}", ex.ToString()); ProjectData.ClearProjectError(); } }
public void SendPetitionActivate(ref WS_PlayerData.CharacterObject objCharacter, ulong cGUID) { if (WorldServiceLocator._WorldServer.WORLD_CREATUREs.ContainsKey(cGUID)) { byte Count = 3; if (((uint)WorldServiceLocator._WorldServer.WORLD_CREATUREs[cGUID].CreatureInfo.cNpcFlags & 4u) != 0) { Count = 1; } Packets.PacketClass packet = new Packets.PacketClass(Opcodes.SMSG_PETITION_SHOWLIST); packet.AddUInt64(cGUID); packet.AddInt8(1); if (Count == 1) { packet.AddInt32(1); packet.AddInt32(WorldServiceLocator._Global_Constants.PETITION_GUILD); packet.AddInt32(16161); packet.AddInt32(WorldServiceLocator._Global_Constants.PETITION_GUILD_PRICE); packet.AddInt32(0); packet.AddInt32(9); } objCharacter.client.Send(ref packet); packet.Dispose(); } }
public void SendMultiplyPackets(ref Packets.PacketClass packet) { lock (this) { try { if (packet.OpCode == Opcodes.SMSG_UPDATE_OBJECT) { packet.CompressUpdatePacket(); } packet.UpdateLength(); byte[] data = (byte[])packet.Data.Clone(); if (WorldServiceLocator._WorldServer.ClsWorldServer.Cluster != null) { WorldServiceLocator._WorldServer.ClsWorldServer.Cluster.ClientSend(Index, data); } } catch (Exception ex) { SetError(ex, $"Connection from [{IP}:{Port}] cause error {ex.Message}{Environment.NewLine}", LogType.CRITICAL); if (DEBUG_CONNECTION) { return; } WorldServiceLocator._WorldServer.ClsWorldServer.Cluster = null; Delete(); } } }
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); } }
private void SendTaxiStatus(ref WS_PlayerData.CharacterObject objCharacter, ulong cGuid) { if (!WorldServiceLocator._WorldServer.WORLD_CREATUREs.ContainsKey(cGuid)) { return; } int currentTaxi = WorldServiceLocator._WS_DBCDatabase.GetNearestTaxi(WorldServiceLocator._WorldServer.WORLD_CREATUREs[cGuid].positionX, WorldServiceLocator._WorldServer.WORLD_CREATUREs[cGuid].positionY, checked ((int)WorldServiceLocator._WorldServer.WORLD_CREATUREs[cGuid].MapID)); Packets.PacketClass SMSG_TAXINODE_STATUS = new Packets.PacketClass(Opcodes.SMSG_TAXINODE_STATUS); try { SMSG_TAXINODE_STATUS.AddUInt64(cGuid); if (!objCharacter.TaxiZones[currentTaxi]) { SMSG_TAXINODE_STATUS.AddInt8(0); } else { SMSG_TAXINODE_STATUS.AddInt8(1); } objCharacter.client.Send(ref SMSG_TAXINODE_STATUS); } finally { SMSG_TAXINODE_STATUS.Dispose(); } }
public void Broadcast(ref Packets.PacketClass packet) { foreach (var objCharacter in Rolls) { objCharacter.client.SendMultiplyPackets(ref packet); } }
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_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_LOOT_MONEY(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_LOOT_MONEY", client.IP, client.Port); if (!LootTable.ContainsKey(client.Character.lootGUID)) { return; } checked { if (client.Character.IsInGroup) { List <WS_Base.BaseUnit> members = WorldServiceLocator._WS_Spells.GetPartyMembersAroundMe(ref client.Character, 100f); LootTable[client.Character.lootGUID].Money = 0; Packets.PacketClass sharePcket = new(Opcodes.SMSG_LOOT_MONEY_NOTIFY); int copper2 = (LootTable[client.Character.lootGUID].Money / members.Count) + 1; sharePcket.AddInt32(copper2); foreach (WS_PlayerData.CharacterObject character in members) { character.client.SendMultiplyPackets(ref sharePcket); ref uint copper3 = ref character.Copper; copper3 = (uint)(copper3 + copper2); character.SetUpdateFlag(1176, character.Copper); character.SaveCharacter(); } client.SendMultiplyPackets(ref sharePcket); ref uint copper4 = ref client.Character.Copper; copper4 = (uint)(copper4 + copper2); sharePcket.Dispose(); }
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 void On_CMSG_CANCEL_TRADE(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { if (client == null || client.Character == null) { return; } WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_CANCEL_TRADE", client.IP, client.Port); if (client.Character.tradeInfo == null) { return; } Packets.PacketClass response = new(Opcodes.SMSG_TRADE_STATUS); try { response.AddInt32(3); if (client.Character.tradeInfo.Target != null) { client.Character.tradeInfo.Target.client.SendMultiplyPackets(ref response); } if (client.Character.tradeInfo.Trader != null) { client.Character.tradeInfo.Trader.client.SendMultiplyPackets(ref response); } } finally { response.Dispose(); } client.Character.tradeInfo.Dispose(); }
public void Broadcast(ref Packets.PacketClass packet) { foreach (WS_PlayerData.CharacterObject objCharacter in Rolls) { objCharacter.client.SendMultiplyPackets(ref packet); } }
public void DoTrade(ref WS_PlayerData.CharacterObject Who) { Packets.PacketClass response = new Packets.PacketClass(Opcodes.SMSG_TRADE_STATUS); try { response.AddInt32(4); if (Trader == Who) { Target.client.SendMultiplyPackets(ref response); TraderAccept = true; } else { Trader.client.SendMultiplyPackets(ref response); TargetAccept = true; } } finally { response.Dispose(); } if (TargetAccept && TraderAccept) { DoTrade(); } }
public void MaievSendSeed(ref WS_PlayerData.CharacterObject objCharacter) { Packets.PacketClass r = new Packets.PacketClass(Opcodes.SMSG_WARDEN_DATA); r.AddInt8(5); r.AddByteArray(objCharacter.WardenData.Seed); WorldServiceLocator._WS_Warden.SendWardenPacket(ref objCharacter, ref r); }
public static void On_SMSG_AUTH_CHALLENGE(ref Packets.PacketClass Packet) { Console.WriteLine("[{0}][World] Received Auth Challenge.", Strings.Format(DateAndTime.TimeOfDay, "HH:mm:ss")); WS_WardenClient.InitWarden(); Worldserver.ServerSeed = Packet.GetUInt32(); var temp = Encoding.ASCII.GetBytes(Realmserver.Account.ToCharArray()); temp = Realmserver.Concat(temp, BitConverter.GetBytes(0)); temp = Realmserver.Concat(temp, BitConverter.GetBytes(Worldserver.ClientSeed)); temp = Realmserver.Concat(temp, BitConverter.GetBytes(Worldserver.ServerSeed)); temp = Realmserver.Concat(temp, Realmserver.SS_Hash); SHA1Managed algorithm1 = new(); var ShaDigest = algorithm1.ComputeHash(temp); Worldserver.Decoding = true; VBMath.Randomize(); Worldserver.ClientSeed = (uint)(uint.MaxValue * VBMath.Rnd()); Packets.PacketClass Response = new(OPCODES.CMSG_AUTH_SESSION); Response.AddInt32(Realmserver.Revision); Response.AddInt32(0); // SessionID? Response.AddString(Realmserver.Account.ToUpper()); Response.AddUInt32(Worldserver.ClientSeed); Response.AddByteArray(ShaDigest); Response.AddInt32(0); // Addon size Worldserver.Send(Response); Response.Dispose(); Worldserver.Encoding = true; }
public void SendFactions(ref WS_Network.ClientClass client, ref WS_PlayerData.CharacterObject Character) { Packets.PacketClass packet = new Packets.PacketClass(Opcodes.SMSG_INITIALIZE_FACTIONS); try { packet.AddInt32(64); byte i = 0; do { checked { if (Character.Reputation != null) { packet.AddInt8((byte)Character.Reputation[i].Flags); } packet.AddInt32(Character.Reputation[i].Value); i = (byte)unchecked ((uint)(i + 1)); } }while (i <= 63u); client.Send(ref packet); } finally { packet.Dispose(); } }
public void SendActionButtons(ref WS_Network.ClientClass client, ref WS_PlayerData.CharacterObject Character) { Packets.PacketClass packet = new Packets.PacketClass(Opcodes.SMSG_ACTION_BUTTONS); try { byte i = 0; do { checked { if (Character.ActionButtons.ContainsKey(i)) { packet.AddUInt16((ushort)Character.ActionButtons[i].Action); packet.AddInt8(Character.ActionButtons[i].ActionType); packet.AddInt8(Character.ActionButtons[i].ActionMisc); } else { packet.AddInt32(0); } i = (byte)unchecked ((uint)(i + 1)); } }while (i <= 119u); client.Send(ref packet); } finally { packet.Dispose(); } }
public void On_CMSG_LOGOUT_CANCEL(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { try { WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_LOGOUT_CANCEL", client.IP, client.Port); if (client != null && client.Character != null && client.Character.LogoutTimer != null) { client.Character.LogoutTimer?.Dispose(); client.Character.LogoutTimer = null; Packets.UpdateClass UpdateData = new Packets.UpdateClass(WorldServiceLocator._Global_Constants.FIELD_MASK_SIZE_PLAYER); Packets.PacketClass SMSG_UPDATE_OBJECT = new Packets.PacketClass(Opcodes.SMSG_UPDATE_OBJECT); try { SMSG_UPDATE_OBJECT.AddInt32(1); SMSG_UPDATE_OBJECT.AddInt8(0); client.Character.cUnitFlags &= -262145; UpdateData.SetUpdateFlag(46, client.Character.cUnitFlags); client.Character.StandState = 0; UpdateData.SetUpdateFlag(138, client.Character.cBytes1); WS_PlayerData.CharacterObject updateObject = client.Character; UpdateData.AddToPacket(ref SMSG_UPDATE_OBJECT, ObjectUpdateType.UPDATETYPE_VALUES, ref updateObject); client.Send(ref SMSG_UPDATE_OBJECT); } finally { SMSG_UPDATE_OBJECT.Dispose(); } Packets.PacketClass packetACK = new Packets.PacketClass(Opcodes.SMSG_STANDSTATE_CHANGE_ACK); try { packetACK.AddInt8(0); client.Send(ref packetACK); } finally { packetACK.Dispose(); } Packets.PacketClass SMSG_LOGOUT_CANCEL_ACK = new Packets.PacketClass(Opcodes.SMSG_LOGOUT_CANCEL_ACK); try { client.Send(ref SMSG_LOGOUT_CANCEL_ACK); } finally { SMSG_LOGOUT_CANCEL_ACK.Dispose(); } WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] SMSG_LOGOUT_CANCEL_ACK", client.IP, client.Port); client.Character.SetMoveUnroot(); } } catch (Exception ex) { ProjectData.SetProjectError(ex); Exception e = ex; WorldServiceLocator._WorldServer.Log.WriteLine(LogType.CRITICAL, "Error while trying to cancel logout.{0}", Environment.NewLine + e); ProjectData.ClearProjectError(); } }
public void SendWardenPacket(ref WS_PlayerData.CharacterObject objCharacter, ref Packets.PacketClass Packet) { byte[] b = new byte[checked (Packet.Data.Length - 4 - 1 + 1)]; Buffer.BlockCopy(Packet.Data, 4, b, 0, b.Length); WS_Handlers_Warden.RC4.Crypt(ref b, objCharacter.WardenData.KeyIn); Buffer.BlockCopy(b, 0, Packet.Data, 4, b.Length); objCharacter.client.Send(ref Packet); }
public void SendRelease(ref WS_Network.ClientClass client) { Packets.PacketClass responseRelease = new Packets.PacketClass(Opcodes.SMSG_LOOT_RELEASE_RESPONSE); responseRelease.AddUInt64(GUID); responseRelease.AddInt8(1); client.Send(ref responseRelease); responseRelease.Dispose(); }
public void OnWorldPacket(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { WorldServiceLocator._WorldServer.Log.WriteLine(LogType.WARNING, "[{0}:{1}] {2} [Redirected Packet]", client.IP, client.Port, packet.OpCode); if (client.Character == null || !client.Character.FullyLoggedIn) { WorldServiceLocator._WorldServer.Log.WriteLine(LogType.WARNING, "[{0}:{1}] Unknown Opcode 0x{2:X} [{2}], DataLen={4}", client.IP, client.Port, packet.OpCode, Environment.NewLine, packet.Length); WorldServiceLocator._Packets.DumpPacket(packet.Data, client); } }
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 Broadcast(Packets.PacketClass p) { if (p is null) { throw new ArgumentNullException(nameof(p)); } BroadcastTeam1(p); BroadcastTeam2(p); }
public void On_CMSG_TURN_IN_PETITION(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { if (checked (packet.Data.Length - 1) >= 13) { packet.GetInt16(); ulong itemGuid = packet.GetUInt64(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_TURN_IN_PETITION [GUID={2:X}]", client.IP, client.Port, itemGuid); client.Character.ItemREMOVE(itemGuid, Destroy: true, Update: true); } }
public void On_MSG_TABARDVENDOR_ACTIVATE(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { if (checked (packet.Data.Length - 1) >= 13) { packet.GetInt16(); ulong GUID = packet.GetUInt64(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] MSG_TABARDVENDOR_ACTIVATE [GUID={2}]", client.IP, client.Port, GUID); SendTabardActivate(ref client.Character, GUID); } }
public static void On_SMSG_PONG(ref Packets.PacketClass Packet) { var SequenceID = Packet.GetUInt32(); var Latency = Worldserver.timeGetTime() - Worldserver.PingSent; if (SequenceID == Worldserver.CurrentPing && Latency >= 0) { Worldserver.CurrentLatency = Latency; } }
public void On_CMSG_PETITION_SHOWLIST(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { if (checked (packet.Data.Length - 1) >= 13) { packet.GetInt16(); ulong GUID = packet.GetUInt64(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_PETITION_SHOWLIST [GUID={2:X}]", client.IP, client.Port, GUID); SendPetitionActivate(ref client.Character, GUID); } }
public void On_CMSG_PETITION_QUERY(ref Packets.PacketClass packet, ref WS_Network.ClientClass client) { checked { if (packet.Data.Length - 1 < 17) { return; } packet.GetInt16(); int PetitionGUID = packet.GetInt32(); ulong itemGuid = packet.GetUInt64(); WorldServiceLocator._WorldServer.Log.WriteLine(LogType.DEBUG, "[{0}:{1}] CMSG_PETITION_QUERY [pGUID={3} iGUID={2:X}]", client.IP, client.Port, itemGuid, PetitionGUID); DataTable MySQLQuery = new(); WorldServiceLocator._WorldServer.CharacterDatabase.Query("SELECT * FROM petitions WHERE petition_itemGuid = " + Conversions.ToString(itemGuid - WorldServiceLocator._Global_Constants.GUID_ITEM) + ";", ref MySQLQuery); if (MySQLQuery.Rows.Count != 0) { Packets.PacketClass response = new(Opcodes.SMSG_PETITION_QUERY_RESPONSE); response.AddInt32(MySQLQuery.Rows[0].As <int>("petition_id")); response.AddUInt64(MySQLQuery.Rows[0].As <ulong>("petition_owner")); response.AddString(MySQLQuery.Rows[0].As <string>("petition_name")); response.AddInt8(0); if (MySQLQuery.Rows[0].As <byte>("petition_type") == 9) { response.AddInt32(9); response.AddInt32(9); response.AddInt32(0); } else { response.AddInt32(MySQLQuery.Rows[0].As <byte>("petition_type") - 1); response.AddInt32(MySQLQuery.Rows[0].As <byte>("petition_type") - 1); response.AddInt32(MySQLQuery.Rows[0].As <byte>("petition_type")); } response.AddInt32(0); response.AddInt32(0); response.AddInt32(0); response.AddInt32(0); response.AddInt16(0); response.AddInt32(0); response.AddInt32(0); response.AddInt32(0); response.AddInt32(0); if (MySQLQuery.Rows[0].As <byte>("petition_type") == 9) { response.AddInt32(0); } else { response.AddInt32(1); } client.Send(ref response); response.Dispose(); } } }
public static void SendWardenPacket(ref Packets.PacketClass Packet) { // START Warden Encryption var b = new byte[(Packet.Data.Length - 6)]; Buffer.BlockCopy(Packet.Data, 6, b, 0, b.Length); RC4.Crypt(ref b, Maiev.KeyOut); Buffer.BlockCopy(b, 0, Packet.Data, 6, b.Length); // END Worldserver.Send(Packet); }