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; } }
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!"); } }
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()); } }
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; } }