Beispiel #1
0
 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());
     }
 }
Beispiel #2
0
 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!");
     }
 }