public override void run() { try { Account player = this._client._player; if (player == null) { return; } Room room = player._room; Channel ch; SLOT slot; if (room == null || room.getLeader() == null || (!room.getChannel(out ch) || !room.getSlot(player._slotId,out slot))) { return; } if (slot._equip == null) { this._client.SendPacket((SendPacket) new BATTLE_READY_ERROR_PAK(2147487915U)); } else { bool isBotMode = room.isBotMode(); slot.specGM = this.erro == 1 && player.IsGM(); player.DebugPing = false; if (ConfigGS.EnableTournamentRules && this.ClassicModeCheck(player,room)) { return; } if (room._leader == player._slotId) { if (room._state != RoomState.Ready && room._state != RoomState.CountDown) { return; } int TotalEnemys = 0; int redPlayers = 0; int bluePlayers = 0; this.GetReadyPlayers(room,ref redPlayers,ref bluePlayers,ref TotalEnemys); if (ConfigGS.isTestMode && ConfigGS.udpType == SERVER_UDP_STATE.RELAY) { TotalEnemys = 1; } if (room.stage4v4 == (byte)1 && (redPlayers >= 4 || bluePlayers >= 4)) { this._client.SendPacket((SendPacket) new BATTLE_4VS4_ERROR_PAK()); } else { if (this.ClanMatchCheck(room,ch._type,TotalEnemys)) { return; } if (isBotMode || room.room_type == (byte)10 || TotalEnemys > 0 && !isBotMode) { room.changeSlotState(slot,SLOT_STATE.READY,false); if (room._state != RoomState.CountDown) { this.TryBalanceTeams(room,isBotMode); } if (room.thisModeHaveCD()) { if (room._state == RoomState.Ready) { room._state = RoomState.CountDown; room.updateRoomInfo(); room.StartCountDown(); } else if (room._state == RoomState.CountDown) { room.changeSlotState(room._leader,SLOT_STATE.NORMAL,false); room.StopCountDown(CountDownEnum.StopByHost,true); } } else { room.StartBattle(false); } room.updateSlotsInfo(); } else { if (TotalEnemys != 0 || isBotMode) { return; } this._client.SendPacket((SendPacket) new BATTLE_READY_ERROR_PAK(2147487753U)); } } } else if (room._slots[room._leader].state >= SLOT_STATE.LOAD) { if (slot.state != SLOT_STATE.NORMAL) { return; } if (room.autobalans == 1 && !isBotMode) { AllUtils.TryBalancePlayer(room,player,true,ref slot); } room.changeSlotState(slot,SLOT_STATE.LOAD,true); slot.SetMissionsClone(player._mission); this._client.SendPacket((SendPacket) new BATTLE_READYBATTLE_PAK(room)); this._client.SendPacket((SendPacket) new BATTLE_READY_ERROR_PAK((uint)slot.state)); using (BATTLE_READYBATTLE2_PAK battleReadybattlE2Pak = new BATTLE_READYBATTLE2_PAK(slot,player._titles)) room.SendPacketToPlayers((SendPacket)battleReadybattlE2Pak,SLOT_STATE.READY,1,slot._id); } else if (slot.state == SLOT_STATE.NORMAL) { room.changeSlotState(slot,SLOT_STATE.READY,true); if (room._state != RoomState.CountDown) { return; } this.TryBalanceTeams(room,isBotMode); } else { if (slot.state != SLOT_STATE.READY) { return; } room.changeSlotState(slot,SLOT_STATE.NORMAL,false); if (room._state == RoomState.CountDown && room.getPlayingPlayers(room._leader % 2 == 0 ? 1 : 0,SLOT_STATE.READY,0) == 0) { room.changeSlotState(room._leader,SLOT_STATE.NORMAL,false); room.StopCountDown(CountDownEnum.StopByPlayer,true); } room.updateSlotsInfo(); } } } catch (Exception ex) { Logger.info("BATTLE_READYBATTLE_REC: " + ex.ToString()); } }
public override void run() { try { Account player = _client._player; if (player == null) { return; } Room room = player._room; Channel ch; SLOT slot; if (room == null || room.getLeader() == null || !room.getChannel(out ch) || !room.getSlot(player._slotId,out slot)) { return; } if (slot._equip == null) {//STBL_IDX_EP_ROOM_ERROR_READY_WEAPON_EQUIP _client.SendPacket(new BATTLE_READY_ERROR_PAK(0x800010AB)); return; } bool isBotMode = room.isBotMode(); if (erro == 1 && player.IsGM()) { slot.specGM = true; } else { slot.specGM = false; } if (ConfigGS.EnableClassicRules && ClassicModeCheck(player,room)) { return; } if (room._leader == player._slotId) { if (room._state != RoomState.Ready && room._state != RoomState.CountDown) { return; } int TotalEnemys = 0,redPlayers = 0,bluePlayers = 0; GetReadyPlayers(room,ref redPlayers,ref bluePlayers,ref TotalEnemys); if (ConfigGS.isTestMode && ConfigGS.udpType == SERVER_UDP_STATE.RELAY) { TotalEnemys = 1; } if (room.stage4v4 == 1 && (redPlayers >= 4 || bluePlayers >= 4)) { _client.SendPacket(new BATTLE_4VS4_ERROR_PAK()); return; } if (ClanMatchCheck(room,ch._type,TotalEnemys)) { return; } if (isBotMode || room.room_type == 10 || TotalEnemys > 0 && !isBotMode) { room.changeSlotState(slot,SLOT_STATE.READY,false); if ((int)room._state != 1) { TryBalanceTeams(room,isBotMode); } if (room.thisModeHaveCD()) { if ((int)room._state == 0) { room._state = RoomState.CountDown; room.updateRoomInfo(); room.StartCountDown(); } else if ((int)room._state == 1) { room.changeSlotState(room._leader,SLOT_STATE.NORMAL,false); room.StopCountDown(CountDownEnum.StopByHost); } } else { room.StartBattle(false); } room.updateSlotsInfo(); } else if (TotalEnemys == 0 && !isBotMode) { _client.SendPacket(new BATTLE_READY_ERROR_PAK(0x80001009)); } } else if ((int)room._slots[room._leader].state >= 9) { if (slot.state == SLOT_STATE.NORMAL) { if (room.autobalans == 1 && !isBotMode) { AllUtils.TryBalancePlayer(room,player,true,ref slot); } room.changeSlotState(slot,SLOT_STATE.LOAD,true); slot.SetMissionsClone(player._mission); _client.SendPacket(new BATTLE_READYBATTLE_PAK(room)); _client.SendPacket(new BATTLE_READY_ERROR_PAK((uint)slot.state)); using (BATTLE_READYBATTLE2_PAK packet = new BATTLE_READYBATTLE2_PAK(slot,player._titles)) room.SendPacketToPlayers(packet,SLOT_STATE.READY,1,slot._id); } } else if ((int)slot.state == 7) { room.changeSlotState(slot,SLOT_STATE.READY,true); if ((int)room._state == 1) { TryBalanceTeams(room,isBotMode); } } else if ((int)slot.state == 8) { room.changeSlotState(slot,SLOT_STATE.NORMAL,false); if ((int)room._state == 1 && room.getPlayingPlayers(room._leader % 2 == 0 ? 1 : 0,SLOT_STATE.READY,0) == 0) { room.changeSlotState(room._leader,SLOT_STATE.NORMAL,false); room.StopCountDown(CountDownEnum.StopByPlayer); } room.updateSlotsInfo(); } } catch (Exception ex) { SaveLog.fatal(ex.ToString()); Printf.b_danger("[BATTLE_READYBATTLE_REC.run] Erro fatal!"); } }