Example #1
0
        private void TryBalanceTeams(Room room, bool isBotMode)
        {
            if (room.autobalans != 1 || isBotMode)
            {
                return;
            }
            int TeamIdx = AllUtils.getBalanceTeamIdx(room, false, -1);

            if (TeamIdx == -1)
            {
                return;
            }
            int[] teamArray = TeamIdx == 1 ? room.RED_TEAM : room.BLUE_TEAM;
            SLOT  LastSlot  = null;

            for (int i = teamArray.Length - 1; i >= 0; i--)
            {
                SLOT slot = room._slots[teamArray[i]];
                if ((int)slot.state == 8 && room._leader != slot._id)
                {
                    LastSlot = slot;
                    break;
                }
            }
            Account player;

            if (LastSlot != null && room.getPlayerBySlot(LastSlot,out player))
            {
                AllUtils.TryBalancePlayer(room,player,false,ref LastSlot);
            }
        }
Example #2
0
        private void TryBalanceTeams(Room room, bool isBotMode)
        {
            if (room.autobalans != 1 | isBotMode)
            {
                return;
            }
            int[] numArray1;
            switch (AllUtils.getBalanceTeamIdx(room, false, -1))
            {
            case -1:
                return;

            case 1:
                numArray1 = room.RED_TEAM;
                break;

            default:
                numArray1 = room.BLUE_TEAM;
                break;
            }
            int[] numArray2 = numArray1;
            SLOT  mySlot    = (SLOT)null;

            for (int index = numArray2.Length - 1; index >= 0; --index)
            {
                SLOT slot = room._slots[numArray2[index]];
                if (slot.state == SLOT_STATE.READY && room._leader != slot._id)
                {
                    mySlot = slot;
                    break;
                }
            }
            Account player;

            if (mySlot == null || !room.getPlayerBySlot(mySlot,out player))
            {
                return;
            }
            AllUtils.TryBalancePlayer(room,player,false,ref mySlot);
        }
Example #3
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());
     }
 }
Example #4
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!");
     }
 }