예제 #1
0
 public override void run()
 {
     try
     {
         Account player = this._client._player;
         Room    room   = player == null ? (Room)null : player._room;
         if (room == null || room._leader != player._slotId || (room._state != RoomState.Ready || room.changingSlots))
         {
             return;
         }
         Monitor.Enter((object)room._slots);
         room.changingSlots = true;
         foreach (int oldSlotId in room.RED_TEAM)
         {
             int newSlotId = oldSlotId + 1;
             if (oldSlotId == room._leader)
             {
                 room._leader = newSlotId;
             }
             else if (newSlotId == room._leader)
             {
                 room._leader = oldSlotId;
             }
             room.SwitchSlots(this.changeList, newSlotId, oldSlotId, true);
         }
         if (this.changeList.Count > 0)
         {
             using (ROOM_CHANGE_SLOTS_PAK roomChangeSlotsPak = new ROOM_CHANGE_SLOTS_PAK(this.changeList, room._leader, 2))
             {
                 byte[] completeBytes = roomChangeSlotsPak.GetCompleteBytes("ROOM_CHANGE_TEAM_REC");
                 foreach (Account allPlayer in room.getAllPlayers())
                 {
                     allPlayer._slotId = AllUtils.getNewSlotId(allPlayer._slotId);
                     Logger.LogProblems("[ROOM_CHANGE_TEAM_REC] Jogador '" + (object)allPlayer.player_id + "' '" + allPlayer.player_name + "'; NewSlot: " + (object)allPlayer._slotId, "errorC");
                     allPlayer.SendCompletePacket(completeBytes);
                 }
             }
         }
         room.changingSlots = false;
         Monitor.Exit((object)room._slots);
     }
     catch (Exception ex)
     {
         Logger.info("ROOM_CHANGE_TEAM_REC: " + ex.ToString());
     }
 }
 public override void run()
 {
     try
     {
         Account p = _client._player;
         Room    r = p == null ? null : p._room;
         if (r != null && r._leader == p._slotId && r._state == RoomState.Ready && !r.changingSlots)
         {
             Monitor.Enter(r._slots);
             r.changingSlots = true;
             foreach (int slotIdx in r.RED_TEAM)
             {
                 int NewId = (slotIdx + 1);
                 if (slotIdx == r._leader)
                 {
                     r._leader = NewId;
                 }
                 else if (NewId == r._leader)
                 {
                     r._leader = slotIdx;
                 }
                 r.SwitchSlots(changeList, NewId, slotIdx, true);
             }
             if (changeList.Count > 0)
             {
                 using (ROOM_CHANGE_SLOTS_PAK packet = new ROOM_CHANGE_SLOTS_PAK(changeList, r._leader, 2))
                 {
                     byte[] data = packet.GetCompleteBytes();
                     foreach (Account ac in r.getAllPlayers())
                     {
                         ac._slotId = AllUtils.getNewSlotId(ac._slotId);
                         //Logger.LogProblems("[ROOM_CHANGE_TEAM_REC] Jogador '" + ac.player_id + "' '" + ac.player_name + "'; NewSlot: " + ac._slotId, "errorC");
                         ac.SendCompletePacket(data);
                     }
                 }
             }
             r.changingSlots = false;
             Monitor.Exit(r._slots);
         }
     }
     catch (Exception ex)
     {
         SaveLog.fatal(ex.ToString());
         Printf.b_danger("[ROOM_CHANGE_TEAM_REC.run] Erro fatal!");
     }
 }