예제 #1
0
 public override void RunImplement()
 {
     try
     {
         Account player = client.SessionPlayer;
         Room    room   = player != null ? player.room : null;
         if (room != null && room.slots[player.slotId].state >= SlotStateEnum.BATTLE_READY)
         {
             if (room.state == RoomStateEnum.Battle)
             {
                 room.ping = PingSlots[room.leaderSlot];
             }
             using (BATTLE_SENDPING_PAK packet = new BATTLE_SENDPING_PAK(PingSlots))
             {
                 List <Account> players = room.GetAllPlayers(SlotStateEnum.READY, 1);
                 if (players.Count == 0)
                 {
                     return;
                 }
                 byte[] data = packet.GetCompleteBytes("BATTLE_SENDPING_REQ");
                 for (int i = 0; i < players.Count; i++)
                 {
                     Account pR = players[i];
                     if (room.slots[pR.slotId].state >= SlotStateEnum.BATTLE_READY)
                     {
                         pR.SendCompletePacket(data);
                     }
                     else
                     {
                         ReadyPlayersCount++;
                     }
                 }
             }
             if (ReadyPlayersCount == 0)
             {
                 room.SpawnReadyPlayers();
             }
         }
     }
     catch (Exception ex)
     {
         PacketLog(ex);
     }
 }
예제 #2
0
 public override void RunImplement()
 {
     try
     {
         Account player = client.SessionPlayer;
         Room    room   = player != null ? player.room : null;
         if (room == null)
         {
             return;
         }
         bool isBotMode = room.IsBotMode();
         Slot slot      = room.GetSlot(player.slotId);
         if (slot == null || slot.state != SlotStateEnum.BATTLE)
         {
             return;
         }
         if (HackType != 0)
         {
             Logger.Analyze($" [BATTLE_TIMERSYNC_REQ] [ANALYZE] HackValue: {HackValue} HackType(int): {HackType} HackType(Enum): {(HackTypeEnum)HackType} Nickname: {player.nickname} Login: {player.login} Ip: {client.GetIPAddress()} PlayerId: {player.playerId}");
             player.Close(0, true);
             return;
         }
         int BattleTimeLeft = room.GetInBattleTimeLeft();
         if ((BattleTimeLeft - TimeRemaining) > 2 && TimeRemaining < 0x80000000)
         {
             Logger.Analyze($" [TIMERSYNC] Jogador desconectado por uso de programas ilegais. BattleTimeLeft/TimeRemaining: {BattleTimeLeft}/{TimeRemaining} Nickname: {player.nickname} PlayerId: {player.playerId}");
             player.Close(0, true);
             return;
         }
         if (!isBotMode)
         {
             slot.ping    = Ping;
             slot.latency = Latency;
             if (slot.latency >= Settings.MaxBattleLatency)
             {
                 slot.failLatencyTimes++;
             }
             else
             {
                 slot.failLatencyTimes = 0;
             }
             if (slot.failLatencyTimes >= Settings.MaxRepeatLatency)
             {
                 Logger.Warning($" [ROOM] Player: {player.nickname}/{player.playerId} kicked due to high latency. ({slot.latency}/{Settings.MaxBattleLatency}ms)");
                 client.Close(500);
                 return;
             }
             else
             {
                 DateTime now = DateTime.Now;
                 if ((now - room.lastPingSync).TotalSeconds >= Settings.PingUpdateTimeSeconds)
                 {
                     byte[] pings = new byte[16];
                     for (int i = 0; i < 16; i++)
                     {
                         pings[i] = room.slots[i].ping;
                     }
                     using (BATTLE_SENDPING_PAK packet = new BATTLE_SENDPING_PAK(pings))
                     {
                         room.SendPacketToPlayers(packet, SlotStateEnum.BATTLE, 0);
                     }
                     Logger.InfoPing($" [TIMERSYNC] Nickname: {player.nickname} TimeRemaining: {TimeRemaining} BattleTimeLeft: {BattleTimeLeft} Ping ({Ping} bar) Latency ({Latency} ms) HackType: {HackType} Hack: {HackValue}");
                     room.lastPingSync = now;
                 }
             }
         }
         room.timeRoom     = TimeRemaining;
         slot.lastTimeRoom = TimeRemaining;
         if (room.timeRoom > 0x80000000 && BattleTimeLeft <= 1 && !room.swapRound && CompareRounds(room, Round) && room.state == RoomStateEnum.Battle)
         {
             EndRound(room, isBotMode);
         }
     }
     catch (Exception ex)
     {
         PacketLog(ex);
     }
 }