private void SyncPlayerPings(Account p, Room room, SLOT slot,bool isBotMode)
        {
            /*
             * if (p.DebugPing && (DateTime.Now - p.LastPingDebug).TotalSeconds >= 5)
             * {
             *  p.LastPingDebug = DateTime.Now;
             *  p.SendPacket(new AUTH_RECV_WHISPER_PAK("Latency", Latency + "ms (" + Ping + " bar)", true));
             * }
             */


            if (isBotMode)
            {
                return;
            }
            slot.latency = Latency;
            slot.ping    = Ping;

            if (slot.latency >= ConfigGS.maxBattleLatency)
            {
                slot.failLatencyTimes++;
            }
            else
            {
                slot.failLatencyTimes = 0;
            }

            if (slot.failLatencyTimes < ConfigGS.maxRepeatLatency)
            {
                if ((double)(DateTime.Now - room.LastPingSync).TotalSeconds < 7)
                {
                    return;
                }
                if (Latency < 5000 && Ping > 1) // Ping Fake
                {
                    slot.ping = 5;              // 5 barras
                }
                byte[] pings = new byte[16];
                for (int i = 0; i < 16; i++)
                {
                    pings[i] = (byte)room._slots[i].ping;
                }
                using (BATTLE_SENDPING_PAK packet = new BATTLE_SENDPING_PAK(pings))
                    room.SendPacketToPlayers(packet,SLOT_STATE.BATTLE,0);
                room.LastPingSync = DateTime.Now;
            }
            else
            {
                SaveLog.info("Player desconectado devido a latencia");
                SaveLog.warning("Player '" + p.player_name + "' (Id: " + slot._playerId + ") desconectado devido a latencia (" + slot.latency + "/" + ConfigGS.maxBattleLatency + "ms)");
                _client.Close(500);
                return;
            }
        }
Example #2
0
        public override void run()
        {
            try
            {
                Account player = _client._player;
                if (player == null)
                {
                    return;
                }
                Room room = player._room;
                if (room != null && room._slots[player._slotId].state >= SLOT_STATE.BATTLE_READY)
                {
                    if ((int)room._state == 5)
                    {
                        room._ping = slots[room._leader];
                    }
                    using (BATTLE_SENDPING_PAK packet = new BATTLE_SENDPING_PAK(slots))
                    {
                        List <Account> players = room.getAllPlayers(SLOT_STATE.READY, 1);
                        if (players.Count == 0)
                        {
                            return;
                        }

                        byte[] data = packet.GetCompleteBytes();
                        foreach (Account pR in players)
                        {
                            if ((int)room._slots[pR._slotId].state >= 12)
                            {
                                pR.SendCompletePacket(data);
                            }
                            else
                            {
                                ++ReadyPlayersCount;
                            }
                        }
                    }
                    if (ReadyPlayersCount == 0)
                    {
                        room.SpawnReadyPlayers();
                    }
                }
            }
            catch (Exception ex)
            {
                SaveLog.fatal(ex.ToString());
                Printf.b_danger("[BATTLE_SENDPING_REC.run] Erro fatal!");
            }
        }
Example #3
0
 public override void run()
 {
     try
     {
         Account player = this._client._player;
         if (player == null)
         {
             return;
         }
         Room room = player._room;
         if (room == null || room._slots[player._slotId].state < SLOT_STATE.BATTLE_READY)
         {
             return;
         }
         if (room._state == RoomState.Battle)
         {
             room._ping = (int)this.slots[room._leader];
         }
         using (BATTLE_SENDPING_PAK battleSendpingPak = new BATTLE_SENDPING_PAK(this.slots))
         {
             List <Account> allPlayers = room.getAllPlayers(SLOT_STATE.READY, 1);
             if (allPlayers.Count == 0)
             {
                 return;
             }
             byte[] completeBytes = battleSendpingPak.GetCompleteBytes("BATTLE_SENDPING_REC");
             foreach (Account account in allPlayers)
             {
                 if (room._slots[account._slotId].state >= SLOT_STATE.BATTLE_READY)
                 {
                     account.SendCompletePacket(completeBytes);
                 }
                 else
                 {
                     ++this.ReadyPlayersCount;
                 }
             }
         }
         if (this.ReadyPlayersCount != 0)
         {
             return;
         }
         room.SpawnReadyPlayers();
     }
     catch (Exception ex)
     {
         Logger.warning("[BATTLE_SENDPING_REC] " + ex.ToString());
     }
 }
Example #4
0
 private void SyncPlayerPings(Account p, Room room, SLOT slot,bool isBotMode)
 {
     if (isBotMode)
     {
         return;
     }
     slot.latency = this.Latency;
     slot.ping    = this.Ping;
     if (slot.latency >= ConfigGS.maxBattleLatency)
     {
         ++slot.failLatencyTimes;
     }
     else
     {
         slot.failLatencyTimes = 0;
     }
     if (p.DebugPing && (DateTime.Now - p.LastPingDebug).TotalSeconds >= 5.0)
     {
         p.LastPingDebug = DateTime.Now;
         p.SendPacket((SendPacket) new AUTH_RECV_WHISPER_PAK("Latency",this.Latency.ToString() + "ms (" + (object)this.Ping + " bar)",true));
     }
     if (slot.failLatencyTimes >= ConfigGS.maxRepeatLatency)
     {
         Logger.error("[" + DateTime.Now.ToString("MM/dd HH:mm:ss") + "] Player '" + p.player_name + "' (Id: " + (object)slot._playerId + ") kicked due to high latency. (" + (object)slot.latency + "/" + (object)ConfigGS.maxBattleLatency + "ms)");
         this._client.Close(500,false);
     }
     else
     {
         if ((DateTime.Now - room.LastPingSync).TotalSeconds < 7.0)
         {
             return;
         }
         byte[] slots = new byte[16];
         for (int index = 0; index < 16; ++index)
         {
             slots[index] = (byte)room._slots[index].ping;
         }
         using (BATTLE_SENDPING_PAK battleSendpingPak = new BATTLE_SENDPING_PAK(slots))
             room.SendPacketToPlayers((SendPacket)battleSendpingPak,SLOT_STATE.BATTLE,0);
         room.LastPingSync = DateTime.Now;
     }
 }