Beispiel #1
0
 public static bool Valid(Client.GameClient client)
 {
     if (!client.Socket.Alive || client.Entity == null || client == null)
     {
         client.Disconnect();
         return(false);
     }
     return(true);
 }
Beispiel #2
0
        public static void GameServer_OnClientReceive(byte[] buffer2, int length, ClientWrapper wrapper)
        {
            byte[] buffer = new byte[length];
            Buffer.BlockCopy(buffer2, 0, buffer, 0, length);
            if (wrapper.Connector == null)
            {
                wrapper.Disconnect();
                return;
            }
            Client.GameClient gameClient = wrapper.Connector as Client.GameClient;
            #region Split
            {
                var str = Game.PacketHandler.BytesToString(buffer);
                if (str.Contains("F2 F1"))
                {
                    var split = str.Split(new string[] { " F2 F1 " }, StringSplitOptions.RemoveEmptyEntries);
                    for (int i = 0; i < split.Length; i++)
                    {
                        byte[] buf = new byte[split[i].Length + 1];

                        buf[buf.Length - 1] = 0xF2;
                        if (i == 0)
                        {
                            Buffer.BlockCopy(Game.PacketHandler.StringToBytes(split[i]), 0, buf, 0, Game.PacketHandler.StringToBytes(split[i]).Length);
                        }
                        else
                        {
                            Buffer.BlockCopy(Game.PacketHandler.StringToBytes(split[i]), 0, buf, 1, Game.PacketHandler.StringToBytes(split[i]).Length);
                            byte[] buf2 = new byte[buf.Length + 1];
                            Buffer.BlockCopy(buf, 0, buf2, 1, buf.Length);
                            buf[0] = 0xF1;
                        }
                        var packet2 = new GamePackets.Packet(buffer);
                        packet2.Deserialize(buffer);
                        if (CapturePackets)
                        {
                            Console.WriteLine("Captured a packet from Client (GAME Server) Length: " + buffer.Length + " Type: (" + buffer[3] + "-" + buffer[4] + "-" + buffer[5] + ")");
                        }
                        Game.PacketHandler.Process(gameClient, packet2);
                    }
                    return;
                }
            }
            #endregion
            var packet = new GamePackets.Packet(buffer);
            packet.Deserialize(buffer);
            if (CapturePackets)
            {
                Console.WriteLine("Captured a packet from Client (GAME Server) Length: " + buffer.Length + " Type: (" + buffer[3] + "-" + buffer[4] + "-" + buffer[5] + ")");
            }
            Game.PacketHandler.Process(gameClient, packet);
        }
Beispiel #3
0
 public bool Register(Client.GameClient client)
 {
     if (client.TimerSubscriptions == null)
     {
         client.TimerSyncRoot      = new object();
         client.TimerSubscriptions = new IDisposable[]
         {
             Subscribe(Characters, client)
         };
         return(true);
     }
     return(false);
 }
Beispiel #4
0
 public void Unregister(Client.GameClient client)
 {
     if (client.TimerSubscriptions == null)
     {
         return;
     }
     lock (client.TimerSyncRoot)
     {
         if (client.TimerSubscriptions != null)
         {
             foreach (var timer in client.TimerSubscriptions)
             {
                 timer.Dispose();
             }
             client.TimerSubscriptions = null;
         }
     }
 }
Beispiel #5
0
        private void CharactersCallback(Client.GameClient client, int time)
        {
            if (!Valid(client))
            {
                return;
            }
            Time32 Now = new Time32(time);

            #region Announce
            if (Now >= client.Entity.Announce.AddSeconds(Constants.delayBetweenShowAnnounce) && client.Account.Server != null)
            {
                Game.PacketHandler.Announce(client, Constants.ServerAnnounce);
                client.Entity.Announce = Time32.Now;
            }
            #endregion
            #region Fever
            if (Now >= client.Entity.FeverTime.AddMinutes(1) && client.Account.Server != null)
            {
                //If the player is playing the Fever will increase 3% every 1 min but if he only logged and on the lobby it will increase 1% every 1 min
                //I'm leaving it 1% 'till i code the PVP
                byte oldVal = client.Entity.FPercent;
                client.Entity.FPercent++;
                client.Entity.FeverTime = Time32.Now;
                if (oldVal < 33 && client.Entity.FPercent >= 33)
                {
                    client.Entity.MP += 10;
                    Game.PacketHandler.SendFeverReward(client, 10, 1);
                }
                if (oldVal < 66 && client.Entity.FPercent >= 66)
                {
                    client.Entity.MP += 10;
                    Game.PacketHandler.SendFeverReward(client, 10, 2);
                }
            }
            #endregion
        }
Beispiel #6
0
 public static void GameServer_OnClientConnect(ClientWrapper obj)
 {
     Client.GameClient client = new Client.GameClient(obj);
     obj.Connector = client;
 }