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();
                }
            }
Beispiel #2
0
 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();
     }
 }
Beispiel #3
0
            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();
                    }
                }
            }
Beispiel #4
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);
     }
 }
Beispiel #5
0
        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);
     }
 }
Beispiel #7
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;
        }
        }
    }
Beispiel #8
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();
         }
     }
 }
Beispiel #9
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();
                }
            }
        }
    }
Beispiel #10
0
 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();
         }
Beispiel #11
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);
     }
 }
Beispiel #12
0
 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);
     }
 }
Beispiel #14
0
 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();
     }
 }
Beispiel #15
0
 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);
 }
Beispiel #16
0
    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;
    }
Beispiel #17
0
 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();
     }
 }
Beispiel #18
0
 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();
     }
 }
Beispiel #19
0
        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();
            }
        }
Beispiel #20
0
 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);
 }
Beispiel #21
0
 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();
 }
Beispiel #22
0
 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);
     }
 }
Beispiel #23
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();
    }
            public void Broadcast(Packets.PacketClass p)
            {
                if (p is null)
                {
                    throw new ArgumentNullException(nameof(p));
                }

                BroadcastTeam1(p);
                BroadcastTeam2(p);
            }
Beispiel #25
0
 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);
     }
 }
Beispiel #26
0
 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);
     }
 }
Beispiel #27
0
    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;
        }
    }
Beispiel #28
0
 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);
     }
 }
Beispiel #29
0
 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();
         }
     }
 }
Beispiel #30
0
    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);
    }