public override void run()
        {
            try
            {
                Account player = _client._player;
                Room    room   = player == null ? null : player._room;
                if (teamIdx < 2 && room != null && (player.LastSlotChange == new DateTime() ||
                                                    (DateTime.Now - player.LastSlotChange).TotalSeconds >= 1.5) &&
                    !room.changingSlots)
                {
                    SLOT slot = room.getSlot(player._slotId);
                    if (slot != null && teamIdx != slot._team && slot.state == SLOT_STATE.NORMAL)
                    {
                        player.LastSlotChange = DateTime.Now;
                        Monitor.Enter(room._slots);
                        room.changingSlots = true;

                        List <SLOT_CHANGE> changeList = new List <SLOT_CHANGE>();
                        room.SwitchNewSlot(changeList,player,slot,teamIdx);
                        if (changeList.Count > 0)
                        {
                            using (ROOM_CHANGE_SLOTS_PAK packet = new ROOM_CHANGE_SLOTS_PAK(changeList,room._leader,0))
                                room.SendPacketToPlayers(packet);
                        }
                        room.changingSlots = false;
                        Monitor.Exit(room._slots);
                    }
                }
            }
            catch (Exception ex)
            {
                SaveLog.fatal(ex.ToString());
                Printf.b_danger("[ROOM_CHANGE_SLOT_REC.run] Erro fatal!");
            }
        }
Ejemplo n.º 2
0
 public override void run()
 {
     try
     {
         Account player = this._client._player;
         Room    room   = player == null ? (Room)null : player._room;
         if (this.teamIdx >= 2 || room == null || !(player.LastSlotChange == new DateTime()) && (DateTime.Now - player.LastSlotChange).TotalSeconds < 1.5 || room.changingSlots)
         {
             return;
         }
         SLOT slot = room.getSlot(player._slotId);
         if (slot == null || this.teamIdx == slot._team || slot.state != SLOT_STATE.NORMAL)
         {
             return;
         }
         player.LastSlotChange = DateTime.Now;
         Monitor.Enter((object)room._slots);
         room.changingSlots = true;
         List <SLOT_CHANGE> slots = new List <SLOT_CHANGE>();
         room.SwitchNewSlot(slots,player,slot,this.teamIdx);
         if (slots.Count > 0)
         {
             using (ROOM_CHANGE_SLOTS_PAK roomChangeSlotsPak = new ROOM_CHANGE_SLOTS_PAK(slots,room._leader,0))
                 room.SendPacketToPlayers((SendPacket)roomChangeSlotsPak);
         }
         room.changingSlots = false;
         Monitor.Exit((object)room._slots);
     }
     catch (Exception ex)
     {
         Logger.warning("[ROOM_CHANGE_SLOT_REC] " + ex.ToString());
     }
 }
Ejemplo n.º 3
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!");
     }
 }