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); } }
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); } }