Пример #1
0
        private static void SendPlayersOnChannel(Client.GameClient client)
        {
            client.Send(StringToBytes("F1 00 00 01 22 00 F2"));
            System.IO.MemoryStream memory = new System.IO.MemoryStream();
            System.IO.BinaryWriter writer = new System.IO.BinaryWriter(memory);
            var players = Kernel.GamePool.Values.Where(i => i.Entity != null && i.Entity.Channel == client.Entity.Channel).ToArray();

            writer.Write((ushort)players.Length);
            for (int i = 0; i < players.Length; i++)
            {
                var player = players[i].Entity;
                writer.Write(player.Rank);
                memory.Position += 4;
                writer.Write(2835);
                writer.Write(player.UID);
                writer.Write(Encoding.ASCII.GetBytes(client.Entity.Clan));
                writer.Write(new byte[34 - client.Entity.Clan.Length]);
                writer.Write(Encoding.ASCII.GetBytes(client.Entity.Name));
                writer.Write(new byte[13 - client.Entity.Name.Length]);
                writer.Write(ulong.MaxValue);
                memory.Position += 40;
                writer.Write((byte)Constants.packetEndsWith);
                writer.Write((byte)Constants.packetStartsWith);
                memory.Position += 2;
                writer.Write((byte)1);
                writer.Write((ushort)39);
            }
            memory.Position = 0;
            byte[] answer = new byte[memory.Length];
            memory.Read(answer, 0, answer.Length);
            writer.Close();
            memory.Close();
            client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_GetPlayersOnChannel, answer, 0x6F));
        }
Пример #2
0
 public static bool LoadEntity(Client.GameClient client)
 {
     using (var cmd = new MySqlCommand(MySqlCommandType.SELECT).Select("characters").Where("UID", client.Account.EntityID))
         using (var reader = new MySqlReader(cmd))
         {
             if (reader.Read())
             {
                 try
                 {
                     client.Entity               = new Entity();
                     client.Entity.Owner         = client;
                     client.Entity.UID           = reader.ReadUInt32("UID");
                     client.Entity.Experience    = reader.ReadUInt32("Experience");
                     client.Entity.Clan          = reader.ReadString("Clan");
                     client.Entity.Name          = reader.ReadString("Name");
                     client.Entity.Deserion      = reader.ReadUInt32("Deserion");
                     client.Entity.GeneradeKills = reader.ReadUInt32("GeneradeKills");
                     client.Entity.GP            = reader.ReadUInt32("GP");
                     client.Entity.ZP            = reader.ReadUInt32("ZP");
                     client.Entity.MP            = reader.ReadUInt32("MP");
                     client.Entity.VIP           = reader.ReadBoolean("VIP");
                     client.Entity.HeadshotKills = reader.ReadUInt32("HeadshotKills");
                     client.Entity.KnifeKills    = reader.ReadUInt32("KnifeKills");
                     client.Entity.TeamKills     = reader.ReadUInt32("TeamKills");
                     client.Entity.Settings      = reader.ReadBlob("Settings");
                     client.Entity.Battles       = new System.Collections.Generic.List <Battle>();
                     byte[] Battles = reader.ReadBlob("Battles");
                     if (Battles.Length > 0)
                     {
                         using (var stream = new System.IO.MemoryStream(Battles))
                             using (var rdr = new System.IO.BinaryReader(stream))
                             {
                                 int count = rdr.ReadInt32();
                                 for (int i = 0; i < count; i++)
                                 {
                                     Battle battle = new Battle
                                     {
                                         GameMode = (Enums.GameMode)rdr.ReadByte(),
                                         Won      = rdr.ReadBoolean(),
                                         Kills    = rdr.ReadUInt16(),
                                         Deaths   = rdr.ReadUInt16()
                                     };
                                     client.Entity.Battles.Add(battle);
                                 }
                             }
                     }
                     return(true);
                 }
                 catch (Exception e)
                 {
                     Console.WriteLine(e);
                     return(false);
                 }
             }
             else
             {
                 return(false);
             }
         }
 }
Пример #3
0
        private static void BackFromRoom(Client.GameClient client)
        {
            bool Remove       = false;
            var  roomToRemove = new Room();

            foreach (var Room in Kernel.Rooms)
            {
                if (Room.Players.ContainsKey(client.Entity.UID))
                {
                    Room.Players.Remove(client.Entity.UID);
                    if (Room.Players.Count == 0)
                    {
                        Remove       = true;
                        roomToRemove = Room;
                        RemoveRoomFromLobby(Room);
                    }
                    else
                    {
                        //Move The Host to another player and send to other players in the room that the host changed and the old host leaved
                        Room.Host = Room.Players.Values.FirstOrDefault();
                    }
                }
            }
            if (Remove)
            {
                Kernel.Rooms.Remove(roomToRemove);
            }
            client.Entity.Lobby = true;
            client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_BackFromRoom, new byte[4]));
        }
Пример #4
0
 private static void SendFeverStatus(Client.GameClient client)
 {
     System.IO.MemoryStream memory = new System.IO.MemoryStream();
     System.IO.BinaryWriter writer = new System.IO.BinaryWriter(memory);
     if (!client.Entity.FeverTimeActivated)
     {
         writer.Write((ushort)0);
         writer.Write((ushort)0);
         writer.Write((uint)client.Entity.FPercent);
         writer.Write((ushort)client.Entity.FeverProgress); //May be the number of progresses passed
         writer.Write((ushort)100);                         //Max percent
     }
     else
     {
         writer.Write((ushort)3);
         writer.Write((ushort)0);
         writer.Write((uint)((client.Entity.FeverActivated.AddMinutes(client.Entity.FeverDuration) - Time32.Now).AllMinutes())); //Remaining Minutes
         writer.Write((ushort)client.Entity.FeverProgress);                                                                      //May be the number of progresses passed
         writer.Write((ushort)100);                                                                                              //Max percent
     }
     memory.Position = 0;
     byte[] answer = new byte[memory.Length];
     memory.Read(answer, 0, answer.Length);
     writer.Close();
     memory.Close();
     client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_FeverUpdate, answer));
     //      if (!client.Entity.FeverInfoSended) SendFeverInfo(client);
 }
Пример #5
0
 private static void SendCompleteLogin(Client.GameClient client)
 {
     client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_GameServer, new byte[4] {
         1, 0, 0, 0
     }));
     client.Entity.FullyLoaded = true;
 }
Пример #6
0
        private static void SendPlayerStats(Client.GameClient Observed, Client.GameClient Observer)
        {
            byte[] buffer = new byte[1048];
            Writer.Write(Observed.Entity.Name, 6 - 6, buffer);
            Writer.Write(Observed.Entity.Clan, 19 - 6, buffer);
            Writer.Write(Observed.Entity.Rank, 54 - 6, buffer);
            Writer.Write(Observed.Entity.Wins, 70 - 6, buffer);
            Writer.Write(Observed.Entity.Loses, 74 - 6, buffer);
            Writer.Write(Observed.Entity.TotalKills, 78 - 6, buffer);
            Writer.Write(Observed.Entity.TotalDeaths, 82 - 6, buffer);
            Writer.Write(Observed.Entity.HeadshotKills, 86 - 6, buffer);
            Writer.Write(Observed.Entity.GeneradeKills, 90 - 6, buffer);
            Writer.Write(Observed.Entity.KnifeKills, 94 - 6, buffer);
            Writer.Write(Observed.Entity.Honor, 102 - 6, buffer);
            Writer.Write(Observed.Entity.Deserion, 106 - 6, buffer);
            Writer.Write(Observed.Entity.TeamKills, 110 - 6, buffer);
            int Offset = 114 - 6;

            byte[] GameModes = new byte[16] {
                0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
            };
            for (byte i = 0; i < GameModes.Length; i++)
            {
                var battles = Observed.Entity.Battles.Where(x => x.GameMode == (Enums.GameMode)i);
                if (battles.Count() < 1)
                {
                    Offset += 16; continue;
                }
                Writer.Write(battles.Where(q => q.Won).Count(), Offset, buffer); Offset  += 4;
                Writer.Write(battles.Where(q => !q.Won).Count(), Offset, buffer); Offset += 4;
                Writer.Write(battles.Sum(w => w.Kills), Offset, buffer); Offset          += 4;
                Writer.Write(battles.Sum(w => w.Deaths), Offset, buffer); Offset         += 4;
            }
            Observer.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_GetPlayerStat, buffer));
        }
Пример #7
0
        private static void SendChannelRooms(Client.GameClient client)
        {
            var Rooms = Kernel.Rooms.Where(i => i.Channel == client.Entity.Channel && i.Server == client.Account.Server).ToArray();

            System.IO.MemoryStream memory = new System.IO.MemoryStream();
            System.IO.BinaryWriter writer = new System.IO.BinaryWriter(memory);
            memory.Position += 4;
            writer.Write((ushort)(Constants.RoomsPerChannel - Rooms.Length));
            writer.Write((ushort)Rooms.Length);
            writer.Write((byte)0);
            for (int i = 0; i < Rooms.Length; i++)
            {
                var Room = Rooms[i];
                writer.Write((ushort)(Room.Number - 1));
                writer.Write((byte)(Room.Password == "" ? 1 : 0));
                writer.Write((byte)(1));
                writer.Write((ushort)Room.gameMode);
                writer.Write((byte)0);
                writer.Write((ushort)0);
                writer.Write(Room.NoFlash_Smoke);
                writer.Write((byte)1);
                writer.Write((byte)0);
                writer.Write((byte)0);
                writer.Write((uint)Room.objectiveType);
                writer.Write((uint)Room.maxObjectiveCount);
                writer.Write((ushort)0);//May be Elite Mode
                writer.Write((ushort)Room.MapID);
                writer.Write((ushort)Room.numberOfPlayers);
                writer.Write((ushort)Room.maxNumberOfPlayers);
                writer.Write((ushort)Room.observersCount);
                writer.Write((byte)0);
                writer.Write((uint)Room.Status);
                writer.Write(Encoding.ASCII.GetBytes(Room.Host.Entity.Clan));
                writer.Write(new byte[34 - Room.Host.Entity.Clan.Length]);
                writer.Write(Encoding.ASCII.GetBytes(Room.Host.Entity.Name));
                writer.Write(new byte[13 - Room.Host.Entity.Name.Length]);
                writer.Write(3u);
                writer.Write((ushort)0x1E);
                memory.Position += 4;
                writer.Write(Encoding.ASCII.GetBytes(Room.Name));
                writer.Write(new byte[80 - Room.Name.Length]);
                writer.Write((byte)1);//if you put 0 will show X icon instead of lock with password icon and if put 1 the icon will hide
                writer.Write((ushort)(Room.botCount));
                writer.Write((byte)(0));
                memory.Position += 4;
                writer.Write((byte)0);
                writer.Write((ushort)(0));
                writer.Write((ushort)(Room.VIP ? 1 : 0));
                memory.Position += 6;
                writer.Write(byte.MaxValue);
                writer.Write((ushort)1);
                writer.Write((uint)ushort.MaxValue);
            }
            memory.Position = 0;
            byte[] answer = new byte[memory.Length];
            memory.Read(answer, 0, answer.Length);
            writer.Close();
            memory.Close();
            client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_GetRooms, answer));
        }
Пример #8
0
        static void GameServer_OnClientReceive(byte[] buffer, int length, ClientWrapper obj)
        {
            if (obj.Connector == null)
            {
                obj.Disconnect();
                return;
            }

            Client.GameClient Client = obj.Connector as Client.GameClient;

            if (Client.Exchange)
            {
                Client.Exchange = false;
                Client.Action   = 1;
                var    crypto    = new Network.Cryptography.GameCryptography(System.Text.Encoding.Default.GetBytes(Constants.GameCryptographyKey));
                byte[] otherData = new byte[length];
                Array.Copy(buffer, otherData, length);
                crypto.Decrypt(otherData, length);

                bool extra = false;
                int  pos   = 0;
                if (BitConverter.ToInt32(otherData, length - 140) == 128)//no extra packet
                {
                    pos = length - 140;
                    Client.Cryptography.Decrypt(buffer, length);
                }
                else if (BitConverter.ToInt32(otherData, length - 176) == 128)//extra packet
                {
                    pos   = length - 176;
                    extra = true;
                    Client.Cryptography.Decrypt(buffer, length - 36);
                }
                int len = BitConverter.ToInt32(buffer, pos); pos += 4;
                if (len != 128)
                {
                    Client.Disconnect();
                    return;
                }
                byte[] pubKey = new byte[128];
                for (int x = 0; x < len; x++, pos++)
                {
                    pubKey[x] = buffer[pos];
                }

                string PubKey = System.Text.Encoding.Default.GetString(pubKey);
                Client.Cryptography = Client.DHKeyExchange.HandleClientKeyPacket(PubKey, Client.Cryptography);

                if (extra)
                {
                    byte[] data = new byte[36];
                    Buffer.BlockCopy(buffer, length - 36, data, 0, 36);
                    processData(data, 36, Client);
                }
            }
            else
            {
                processData(buffer, length, Client);
            }
        }
Пример #9
0
 public static bool SaveEntity(Client.GameClient c)
 {
     using (var conn = Program.MySqlConnection)
     {
         conn.Open();
         return(SaveEntity(c, conn));
     }
 }
Пример #10
0
 private static void ChangeSettings(Client.GameClient client, GamePackets.Packet packet)
 {
     if (client.Entity != null)
     {
         client.Entity.Settings = new byte[packet.buffer.Length - 7];
         Buffer.BlockCopy(packet.buffer, 6, client.Entity.Settings, 0, packet.buffer.Length - 7);
     }
     client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_ChangeSettings, new byte[4]));
 }
Пример #11
0
        private static void JoinToRoom(Client.GameClient client, GamePackets.Packet packet)
        {
            ushort Number   = BitConverter.ToUInt16(packet.buffer, 6);
            string Password = Encoding.ASCII.GetString(packet.buffer, 8, 10).Replace(Encoding.ASCII.GetString(new byte[] { 0x0 }), "");
            var    Room     = Kernel.Rooms.Where(i => i.Server == client.Account.Server && i.Channel == client.Entity.Channel && i.Number == (Number - 1)).FirstOrDefault();

            if (Room == null || client.Account.Server == null || client.Entity.Channel == 0)
            {
                return;
            }
            System.IO.MemoryStream memory = new System.IO.MemoryStream();
            System.IO.BinaryWriter writer = new System.IO.BinaryWriter(memory);

            if (Room.numberOfPlayers < Room.maxNumberOfPlayers)
            {
                if (Room.Password == Password)
                {
                    Room.Players.Add(client.Entity.UID, client);
                    writer.Write((uint)Enums.RoomAnswer.Success);
                    writer.Write(Number);
                    writer.Write(Room.maxNumberOfPlayers);
                    writer.Write(Room.MapID);
                    writer.Write(1u);
                    writer.Write((uint)Room.gameMode);
                    writer.Write((byte)0);
                    writer.Write((byte)1);
                    writer.Write((ushort)0);
                    writer.Write((uint)Room.objectiveType);
                    writer.Write((uint)Room.maxObjectiveCount);
                    writer.Write(0u);
                    writer.Write((uint)((uint)(Room.Status) - 1));
                }
                else
                {
                    writer.Write((uint)Enums.RoomAnswer.WrongPassword);
                    writer.Write(Number);
                }
            }
            else
            {
                writer.Write((uint)Enums.RoomAnswer.Full);
                writer.Write(Number);
            }
            memory.Position = 0;
            byte[] answer = new byte[memory.Length];
            memory.Read(answer, 0, answer.Length);
            writer.Close();
            memory.Close();
            var answerPacket = new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_JoinRoom, answer);

            client.Send(answerPacket);
        }
Пример #12
0
        private static void SendChannelJoin(Client.GameClient client, byte channelnum)
        {
            bool Full = Kernel.GamePool.Values.Where(i => i.Entity != null && i.Entity.Channel == (ushort)(channelnum + 1)).Count() >= 300;

            byte[] buffer = new byte[8];
            buffer[0] = (byte)(Full ? 2 : 0);
            Writer.Write(channelnum, 4, buffer);
            if (!Full)
            {
                client.Entity.Channel = (ushort)(channelnum + 1);
            }
            client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_ChannelJoin, buffer));
        }
Пример #13
0
 private static void SendNewGUID(Client.GameClient client)
 {
     byte[] buffer = new byte[208];
     Writer.Write(45138, 14 - 6, buffer);
     Writer.Write("pY20", 16 - 6, buffer);
     Writer.Write(44431, 22 - 6, buffer);
     Writer.Write("lY", 24 - 6, buffer);
     Writer.Write(DateTime.Now.ToString("yyyymmddhhmmss"), 26 - 6, buffer);
     Writer.Write(client.Account.Rank, 94 - 6, buffer);
     Writer.Write(client.Account.TotalKills, 98 - 6, buffer);
     Writer.Write(client.Account.TotalDeaths, 102 - 6, buffer);
     //client.Account.Identifer = Kernel.RandomString(32);
     Writer.Write(client.Account.Identifer, 106 - 6, buffer);
     client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_ServerTime, buffer));
 }
Пример #14
0
 private static void processData(byte[] buffer, int length, Client.GameClient Client)
 {
     Client.Cryptography.Decrypt(buffer, length);
     Client.Queue.Enqueue(buffer, length);
     if (Client.Queue.CurrentLength > 1224)
     {
         Console.WriteLine("[ Disconnect ] Reason : The Packet Size Is Too Big. " + Client.Queue.CurrentLength);
         Client.Disconnect();
         return;
     }
     while (Client.Queue.CanDequeue())
     {
         byte[] data = Client.Queue.Dequeue();
         Network.PacketHandler.HandlePacket(data, Client);
     }
 }
Пример #15
0
 private static void SendMyPlayerData(Client.GameClient client)
 {
     System.IO.MemoryStream memory = new System.IO.MemoryStream();
     System.IO.BinaryWriter writer = new System.IO.BinaryWriter(memory);
     writer.Write((byte)0);
     writer.Write((uint)0);
     writer.Write(Encoding.Default.GetBytes(client.Entity.UID.ToString()));
     writer.Write(new byte[21 - Encoding.Default.GetBytes(client.Entity.UID.ToString()).Length]);
     writer.Write((ushort)1);
     writer.Write((uint)0);
     writer.Write((uint)client.Entity.Honor);
     writer.Write(client.Entity.GP);
     writer.Write(uint.MaxValue);
     writer.Write(client.Entity.Experience);
     writer.Write((ulong)client.Entity.Rank);
     writer.Write((uint)client.Entity.EXPPercent);
     writer.Write(client.Entity.NeedEXP);
     writer.Write(client.Entity.Wins);
     writer.Write(client.Entity.Loses);
     writer.Write(client.Entity.TotalKills);
     writer.Write(client.Entity.TotalDeaths);
     writer.Write(client.Entity.HeadshotKills);
     writer.Write(client.Entity.TeamKills);
     writer.Write(client.Entity.Deserion);
     writer.Write(0u);
     writer.Write((uint)15);
     writer.Write((uint)15);
     memory.Position += 28;
     writer.Write(client.Entity.UID);
     writer.Write(Encoding.Default.GetBytes(client.Entity.Name));
     writer.Write(new byte[14 - Encoding.Default.GetBytes(client.Entity.Name).Length]);
     writer.Write((ushort)2);
     writer.Write(Encoding.Default.GetBytes(client.Account.Identifer));
     memory.Position += 17;
     writer.Write((ushort)16);
     writer.Write((ushort)6);
     writer.Write(0u);
     writer.Write(Encoding.Default.GetBytes(client.Entity.Name));
     writer.Write(new byte[20 - Encoding.Default.GetBytes(client.Entity.Name).Length]);
     writer.Write(client.Entity.Settings);
     memory.Position = 0;
     byte[] answer = new byte[memory.Length];
     memory.Read(answer, 0, answer.Length);
     writer.Close();
     memory.Close();
     client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_PlayerData, answer));
 }
Пример #16
0
 public static void Announce(Client.GameClient client, string text)
 {
     System.IO.MemoryStream memory = new System.IO.MemoryStream();
     System.IO.BinaryWriter writer = new System.IO.BinaryWriter(memory);
     writer.Write((ushort)2);
     writer.Write(ushort.MaxValue);
     writer.Write((ushort)1);
     writer.Write((ushort)text.Length);
     writer.Write(text);
     writer.Write((byte)0);
     memory.Position = 0;
     byte[] answer = new byte[memory.Length];
     memory.Read(answer, 0, answer.Length);
     writer.Close();
     memory.Close();
     client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_Announce, answer));
 }
Пример #17
0
        private static void SendMileage(Client.GameClient client)
        {
            System.IO.MemoryStream memory = new System.IO.MemoryStream();
            System.IO.BinaryWriter writer = new System.IO.BinaryWriter(memory);
            writer.Write((byte)0);
            writer.Write(client.Entity.MP);
            writer.Write((byte)7);
            TimeSpan span = new DateTime(DateTime.Now.Month == 12 ? DateTime.Now.Year + 1 : DateTime.Now.Year, DateTime.Now.Month == 12 ? 1 : DateTime.Now.Month + 1, 1) - DateTime.Now;

            writer.Write((int)span.TotalSeconds);
            memory.Position = 0;
            byte[] answer = new byte[memory.Length];
            memory.Read(answer, 0, answer.Length);
            writer.Close();
            memory.Close();
            client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_Mileage, answer));
        }
Пример #18
0
 public static void SendFeverReward(Client.GameClient client, uint Amount, ushort Section)
 {
     System.IO.MemoryStream memory = new System.IO.MemoryStream();
     System.IO.BinaryWriter writer = new System.IO.BinaryWriter(memory);
     writer.Write((ulong)1);
     writer.Write((uint)4);
     writer.Write((ulong)0);
     writer.Write(Amount);
     memory.Position += 14;
     writer.Write(Section);
     writer.Write((ulong)client.Entity.FPercent);
     memory.Position = 0;
     byte[] answer = new byte[memory.Length];
     memory.Read(answer, 0, answer.Length);
     writer.Close();
     memory.Close();
     client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_FeverReward, answer));
     //   if (!client.Entity.FeverInfoSended) SendFeverInfo(client);
 }
Пример #19
0
        private static void SendChannels(Client.GameClient client)
        {
            System.IO.MemoryStream memory = new System.IO.MemoryStream();
            System.IO.BinaryWriter writer = new System.IO.BinaryWriter(memory);

            for (ushort i = 1; i <= Constants.ChannelsCount; i++)
            {
                writer.Write((ushort)(i - 1));
                writer.Write(Constants.ChannelsCapacity);
                writer.Write((ushort)Kernel.GamePool.Values.Where(e => e.Entity.Channel == i).Count());//Current Number of Players on the Channel
                memory.Position += 14;
            }
            memory.Position = 0;
            byte[] answer = new byte[memory.Length];
            memory.Read(answer, 0, answer.Length);
            writer.Close();
            memory.Close();
            client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_GetChannels, answer));
        }
Пример #20
0
 private static void SendStorageItems(Client.GameClient client)
 {
     foreach (var type in Enum.GetValues(typeof(Enums.ItemsModel)).Cast <Enums.ItemsModel>())
     {
         System.IO.MemoryStream memory = new System.IO.MemoryStream();
         System.IO.BinaryWriter writer = new System.IO.BinaryWriter(memory);
         var items = client.Entity.Storage.Where(i => i.Type == type);
         writer.Write((int)type);
         writer.Write(items.Count());
         foreach (var item in items)
         {
             if (item.ShopID != "000000000")
             {
                 writer.Write(item.ShopID);
             }
             else
             {
                 writer.Write(new byte[9]);
             }
             writer.BaseStream.Position += 1;
             writer.Write(item.StorageID);
             writer.BaseStream.Position += 8;
             writer.Write(Kernel.Random.Next(300000000, 800000000));//May be the UID
             writer.BaseStream.Position += 4;
             writer.Write(789432);
             writer.Write((ushort)(0x1F /*item.ExpireDays*/));
             writer.Write((ushort)(0x17 /*item.ExpireHours*/));
             writer.Write((uint)0x3B);
             writer.Write(item.Health);
             writer.Write(item.RepairPrice);
             writer.Write(item.Health);
             writer.BaseStream.Position += 18;
         }
         memory.Position = 0;
         byte[] buffer = new byte[memory.Length];
         memory.Read(buffer, 0, buffer.Length);
         writer.Close();
         memory.Close();
         client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_StorageItems, buffer));
     }
 }
Пример #21
0
 private static void UpdateWaitingList(Client.GameClient client, bool Remove = false)
 {
     System.IO.MemoryStream memory = new System.IO.MemoryStream();
     System.IO.BinaryWriter writer = new System.IO.BinaryWriter(memory);
     writer.Write(Remove ? 1 : 0);
     writer.Write(client.Entity.Rank);
     memory.Position += 12;
     writer.Write(Encoding.ASCII.GetBytes(client.Entity.Clan));
     writer.Write(new byte[34 - client.Entity.Clan.Length]);
     writer.Write(Encoding.ASCII.GetBytes(client.Entity.Name));
     writer.Write(new byte[13 - client.Entity.Name.Length]);
     memory.Position = 0;
     byte[] answer = new byte[memory.Length];
     memory.Read(answer, 0, answer.Length);
     writer.Close();
     memory.Close();
     foreach (var player in Kernel.GamePool.Values.Where(i => i.Entity != null && i.Account.Server == client.Account.Server && i.Entity.Channel == client.Entity.Channel && i.Entity.Lobby))
     {
         client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_UpdateWaitingList, answer, 0x74));
     }
 }
Пример #22
0
 private static void SendExitInfo(Client.GameClient client)
 {
     System.IO.MemoryStream memory = new System.IO.MemoryStream();
     System.IO.BinaryWriter writer = new System.IO.BinaryWriter(memory);
     writer.Write(1000); //XPGained
     writer.Write(1000); //GPGained
     writer.Write(client.Entity.TotalKills);
     writer.Write(client.Entity.TotalDeaths);
     writer.Write(client.Entity.TotalBattles);
     writer.Write(client.Entity.Wins);
     writer.Write(client.Entity.Loses);
     writer.Write(client.Entity.Experience);
     writer.Write(client.Entity.GP);
     writer.Write(1);//RoundesNeedToPlayToPromote
     writer.Write(client.Entity.Rank + 1);
     memory.Position = 0;
     byte[] answer = new byte[memory.Length];
     memory.Read(answer, 0, answer.Length);
     writer.Close();
     memory.Close();
     client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_ExitGameInfo, answer));
 }
Пример #23
0
        private static void CreateRoom(Client.GameClient client, GamePackets.Packet packet)
        {
            if (client.Account.Server == null || client.Entity.Channel == 0)
            {
                return;
            }
            Room room = new Room()
            {
                Host    = client,
                Players = new Dictionary <uint, Client.GameClient>()
                {
                    { client.Entity.UID, client }
                },
                Channel            = client.Entity.Channel,
                Status             = Enums.RoomStatus.Waiting,
                maxNumberOfPlayers = packet.buffer[28],
                observersCount     = packet.buffer[30],
                Server             = client.Account.Server,
                VIP               = client.Entity.VIP,
                objectiveType     = (Enums.RoomObjType)packet.buffer[42],
                maxObjectiveCount = packet.buffer[46],
                NoFlash_Smoke     = packet.buffer[39] == 0 ? false : true,
                Name              = Encoding.ASCII.GetString(packet.buffer, 53, 80).Replace(Encoding.ASCII.GetString(new byte[] { 0x0 }), ""),
                Password          = Encoding.ASCII.GetString(packet.buffer, 6, 10).Replace(Encoding.ASCII.GetString(new byte[] { 0x0 }), ""),
                MapID             = BitConverter.ToUInt16(packet.buffer, 32),
                gameMode          = (Enums.GameMode)packet.buffer[34]
            };

            room.Number = GetRoomNumber(room);
            Kernel.Rooms.Add(room);
            byte[] buffer = new byte[268];
            buffer[0]   = 0x9C;
            buffer[1]   = 0xFF;
            buffer[2]   = 0xFF;
            buffer[3]   = 0xFF;
            buffer[266] = 0x90;
            client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_CreateRoom, buffer));
            AddRoomInLobby(room);
        }
Пример #24
0
 private static void AutoJoinRoom(Client.GameClient client)
 {
     for (int s = 0; s < Program.Servers.ToArray().Length; s++)
     {
         for (int c = 0; c < 10; c++)
         {
             var Rooms = Kernel.Rooms.Where(i => i.Server == Program.Servers.ToArray()[s] && i.Channel == (ushort)(c + 1) && !i.hasPassword && i.numberOfPlayers < i.Players.Count).FirstOrDefault();
             if (Rooms != null)
             {
                 byte[] buffer = new byte[24];
                 Writer.Write(0xE0, 11 - 6, buffer);
                 Writer.Write(s, 14 - 6, buffer);
                 Writer.Write(c, 16 - 6, buffer);
                 Writer.Write(Rooms.Number - 1, 18 - 6, buffer);
                 Writer.Write(2, 22 - 6, buffer);
                 Writer.Write(0x91, 26 - 6, buffer);
                 Writer.Write(0x54, 29 - 6, buffer);
                 client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_AutoJoin, buffer));
             }
         }
     }
 }
Пример #25
0
 public static bool SaveEntity(Client.GameClient c, MySql.Data.MySqlClient.MySqlConnection conn)
 {
     try
     {
         if (c == null)
         {
             return(false);
         }
         var e = c.Entity;
         if (e == null)
         {
             return(false);
         }
         #region Battles
         if (e.Battles != null)
         {
             System.IO.MemoryStream stream = new System.IO.MemoryStream();
             System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
             writer.Write(e.Battles.Count);
             foreach (var battle in e.Battles)
             {
                 writer.Write((byte)battle.GameMode);
                 writer.Write(battle.Won);
                 writer.Write(battle.Kills);
                 writer.Write(battle.Deaths);
             }
             string SQL     = "UPDATE `characters` SET Battles=@battles where UID = " + e.UID + " ;";
             byte[] rawData = stream.ToArray();
             using (var con = Program.MySqlConnection)
             {
                 con.Open();
                 using (var cmd = new MySql.Data.MySqlClient.MySqlCommand())
                 {
                     cmd.Connection  = con;
                     cmd.CommandText = SQL;
                     cmd.Parameters.AddWithValue("@battles", rawData);
                     cmd.ExecuteNonQuery();
                 }
             }
         }
         #endregion
         #region Settings
         {
             string SQL = "UPDATE `characters` SET Settings=@settings where UID = " + e.UID + " ;";
             using (var con = Program.MySqlConnection)
             {
                 con.Open();
                 using (var cmd = new MySql.Data.MySqlClient.MySqlCommand())
                 {
                     cmd.Connection  = con;
                     cmd.CommandText = SQL;
                     cmd.Parameters.AddWithValue("@settings", e.Settings);
                     cmd.ExecuteNonQuery();
                 }
             }
         }
         #endregion
         using (var cmd = new MySqlCommand(MySqlCommandType.UPDATE).Update("characters"))
         {
             cmd.Set("Experience", e.Experience);
             cmd.Set("Name", e.Name);
             cmd.Set("Clan", e.Clan);
             cmd.Set("HeadshotKills", e.HeadshotKills);
             cmd.Set("GeneradeKills", e.GeneradeKills);
             cmd.Set("KnifeKills", e.KnifeKills);
             cmd.Set("TeamKills", e.TeamKills);
             cmd.Set("VIP", e.VIP);
             cmd.Set("Deserion", e.Deserion);
             cmd.Set("GP", e.GP);
             cmd.Set("ZP", e.ZP);
             cmd.Set("MP", e.MP);
             cmd.Where("UID", e.UID);
             cmd.Execute();
         }
         return(true);
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
         return(false);
     }
 }
Пример #26
0
 private static void SendHeartBeat(Client.GameClient client, UInt32 id)
 {
     client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_HeartBeat, BitConverter.GetBytes(id)));
 }
Пример #27
0
 private static void SendZP(Client.GameClient client)
 {
     byte[] buffer = new byte[4];
     Writer.Write(client.Entity.ZP, 0, buffer);
     client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_GetZP, buffer));
 }
Пример #28
0
 private static void AutoJoinOptions(Client.GameClient client, GamePackets.Packet packet)
 {
     if (packet.buffer[22] != 1)//If not searching on the current channel
     {
         for (int s = 0; s < Program.Servers.ToArray().Length; s++)
         {
             for (int c = 0; c < 10; c++)
             {
                 var Rooms = Kernel.Rooms.Where(i => i.Server == Program.Servers.ToArray()[s] && (i.Channel == (ushort)(c + 1)) && !i.hasPassword && i.numberOfPlayers < i.Players.Count).ToArray();
                 Rooms = Rooms.Where(i => i.gameMode == (Enums.GameMode)BitConverter.ToUInt32(packet.buffer, 6)).ToArray();
                 if (BitConverter.ToUInt16(packet.buffer, 10) != ushort.MaxValue)
                 {
                     Rooms = Rooms.Where(i => i.MapID == BitConverter.ToUInt16(packet.buffer, 10)).ToArray();
                 }
                 Rooms = Rooms.Where(i => i.maxNumberOfPlayers >= packet.buffer[12]).ToArray();
                 if (packet.buffer[13] == 1)
                 {
                     Rooms = Rooms.Where(i => i.Status == Enums.RoomStatus.inGame).ToArray();
                 }
                 if (packet.buffer[13] == 2)
                 {
                     Rooms = Rooms.Where(i => i.Status == Enums.RoomStatus.Waiting).ToArray();
                 }
                 if (Rooms.FirstOrDefault() != null)
                 {
                     byte[] buffer = new byte[24];
                     Writer.Write(0xE0, 11 - 6, buffer);
                     Writer.Write(s, 14 - 6, buffer);
                     Writer.Write(c, 16 - 6, buffer);
                     Writer.Write(Rooms.FirstOrDefault().Number - 1, 18 - 6, buffer);
                     Writer.Write(2, 22 - 6, buffer);
                     Writer.Write(0x91, 26 - 6, buffer);
                     Writer.Write(0x54, 29 - 6, buffer);
                     client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_AutoJoin, buffer));
                 }
             }
         }
     }
     else
     {
         var Rooms = Kernel.Rooms.Where(i => i.Server == client.Account.Server && i.Channel == client.Entity.Channel && !i.hasPassword && i.numberOfPlayers < i.Players.Count).ToArray();
         Rooms = Rooms.Where(i => i.gameMode == (Enums.GameMode)BitConverter.ToUInt32(packet.buffer, 6)).ToArray();
         if (BitConverter.ToUInt16(packet.buffer, 10) != ushort.MaxValue)
         {
             Rooms = Rooms.Where(i => i.MapID == BitConverter.ToUInt16(packet.buffer, 10)).ToArray();
         }
         Rooms = Rooms.Where(i => i.maxNumberOfPlayers >= packet.buffer[12]).ToArray();
         if (packet.buffer[13] == 1)
         {
             Rooms = Rooms.Where(i => i.Status == Enums.RoomStatus.inGame).ToArray();
         }
         if (packet.buffer[13] == 2)
         {
             Rooms = Rooms.Where(i => i.Status == Enums.RoomStatus.Waiting).ToArray();
         }
         if (Rooms.FirstOrDefault() != null)
         {
             byte[] buffer = new byte[24];
             Writer.Write(0xE0, 11 - 6, buffer);
             Writer.Write(Array.IndexOf(Program.Servers.ToArray(), client.Account.Server), 14 - 6, buffer);
             Writer.Write(client.Entity.Channel - 1, 16 - 6, buffer);
             Writer.Write(Rooms.FirstOrDefault().Number - 1, 18 - 6, buffer);
             Writer.Write(2, 22 - 6, buffer);
             Writer.Write(0x91, 26 - 6, buffer);
             Writer.Write(0x54, 29 - 6, buffer);
             client.Send(new GamePackets.Packet(GamePackets.Packet.PacketType.S2C_AutoJoin, buffer));
         }
     }
 }
Пример #29
0
 private static void AddToWaitingList(Client.GameClient client)
 {
 }
Пример #30
0
        public static void SendFeverInfo(Client.GameClient client)
        {
            client.Send(StringToBytes("F1 DC 00 01 A9 07 00 00 00 00 9B 00 00 00 28 00 00 00 34 00 00 00 68 00 00 00 1E 00 00 00 1E 00 00 00 0A 00 00 00 1E 00 00 00 01 00 00 00 9B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F2"));

            client.Entity.FeverInfoSended = true;
        }