public override void Handle(virtualUser User) { if (User.Rank > 2) { int EnterRoom = Convert.ToInt32(getNextBlock()); int roomID = Convert.ToInt32(getNextBlock()); if (EnterRoom == 1) // 1 == Join, 2 == Leave, 3 == UpdateGameData [30017] { virtualRoom Room = RoomManager.getRoom(User.Channel, roomID); if (Room != null) { if (User.isSpectating == true) { return; } if (Room.addSpectator(User)) { User.send(new PACKET_SPECTATE_ROOM(User, Room)); User.send(new PACKET_ROOM_UDP(User, Room.Players)); foreach (virtualUser RoomUser in Room.Players) { if (RoomUser.Equals(User) == false && RoomUser.isSpectating == false) { RoomUser.send(new PACKET_ROOM_UDP_SPECTATE(User)); } } } else { StringBuilder SpectatorList = new StringBuilder(); int Count = 0; foreach (virtualUser Spectator in Room.Spectators) { SpectatorList.Append(Spectator.Nickname); Count++; } SpectatorList.ToString().Remove(SpectatorList.ToString().Length - 1, 1); User.send(new PACKET_CHAT("SPECTATE", PACKET_CHAT.ChatType.Room_ToAll, "SPECTATE >> There is no slot empty for this room!", 999, User.Nickname)); } } } else { User.Room.removeSpectator(User); } } else { User.disconnect(); } }
public override void Handle(ReBornWarRock_PServer.GameServer.Virtual_Objects.User.virtualUser User) { try { if (User.Room != null) { return; } int RoomID = Convert.ToInt32(getNextBlock()); string Password = getNextBlock(); int Side = Convert.ToInt32(getBlock(2));//FreeWar > 0 Derb/ 1 NIU/ 2 Random virtualRoom Room = RoomManager.getRoom(User.Channel, RoomID); if (Room != null) { bool LevelLimit = true; switch (Room.LevelLimit) { case 0: { LevelLimit = false; break; } case 1: { if (LevelCalculator.getLevelforExp(User.Exp) <= 4) { LevelLimit = false; } break; } case 2: { if (LevelCalculator.getLevelforExp(User.Exp) > 5) { LevelLimit = false; } break; } case 3: { if (LevelCalculator.getLevelforExp(User.Exp) > 13) { LevelLimit = false; } break; } case 4: { if (LevelCalculator.getLevelforExp(User.Exp) > 23) { LevelLimit = false; } break; } case 5: { if (LevelCalculator.getLevelforExp(User.Exp) > 33) { LevelLimit = false; } break; } } bool canJoinPing = false; switch (Room.Ping) { case 0: if (User.Ping < 150) { canJoinPing = true; } else { canJoinPing = false; } break; case 1: if (User.Ping < 250) { canJoinPing = true; } else { canJoinPing = false; } break; case 2: canJoinPing = true; break; } if ((Room.Players.Count >= Room.MaxPlayers || Room.RoomType == 1 && (User.ClanRank == -1 || User.ClanRank == 9) || (Room.RoomType == 1 && (Room.getSideCount(0) > 0 && Room.getSideCount(1) > 0 && Room.isMyClan(User) == false)) || Room.RoomType == 1 && User.ClanID == -1 || canJoinPing == false && User.Rank < 2 || Room.UserLimit || Room.isJoinAble() == false || User.pingOK == false) && User.Rank < 2) { User.send(new PACKET_JOIN_ROOM(PACKET_JOIN_ROOM.ErrorCodes.GenericError)); } else if (Password != "NULL" && (Password != Room.Password)) { User.send(new PACKET_JOIN_ROOM(PACKET_JOIN_ROOM.ErrorCodes.InvalidPassword)); } else if (LevelLimit == true) { User.send(new PACKET_JOIN_ROOM(PACKET_JOIN_ROOM.ErrorCodes.BadLevel)); } else if (User.Premium == 0 && Room.PremiumOnly == 1) { User.send(new PACKET_JOIN_ROOM(PACKET_JOIN_ROOM.ErrorCodes.OnlyPremium)); } else { if (User.Room != null) { return; } if (Room.joinUser(User, Side) == true) { ArrayList tempPlayers = new ArrayList(); User.isReady = false; User.isSpawned = false; User.BackedToRoom = false; User.Health = 0; foreach (virtualUser RoomUser in Room.Players) { if (RoomUser.Equals(User) == false) { tempPlayers.Add(RoomUser); } } User.send(new PACKET_ROOM_UDP(User, tempPlayers)); foreach (virtualUser tempSpectator in Room.Spectators) { User.send(new PACKET_ROOM_UDP_SPECTATE(tempSpectator)); } // User.send(new PACKET_JOIN_ROOM(User, Room)); tempPlayers.Clear(); tempPlayers.Add(User); foreach (virtualUser RoomUser in Room.Players) { RoomUser.send(new PACKET_ROOM_UDP(RoomUser, tempPlayers)); } foreach (virtualUser SpectatorUser in Room.Spectators) { SpectatorUser.send(new PACKET_ROOM_UDP(SpectatorUser, tempPlayers)); } /* Send out changed Room Data */ foreach (virtualUser _User in UserManager.getUsersInChannel(Room.Channel, false)) { if (_User.Page == Math.Floor(Convert.ToDecimal(Room.ID / 14))) { _User.send(new PACKET_ROOMLIST_UPDATE(Room)); } } } else { User.send(new PACKET_JOIN_ROOM(PACKET_JOIN_ROOM.ErrorCodes.GenericError)); } } } else { User.send(new PACKET_JOIN_ROOM(PACKET_JOIN_ROOM.ErrorCodes.GenericError)); } } catch { User.send(new PACKET_JOIN_ROOM(PACKET_JOIN_ROOM.ErrorCodes.GenericError)); } }
public override void Handle(ReBornWarRock_PServer.GameServer.Virtual_Objects.User.virtualUser User) { try { ArrayList Rooms = RoomManager.getRoomsInChannel(User.Channel, new Random().Next(0, RoomManager.RoomToPageCount(User.Channel))); foreach (virtualRoom Room in Rooms) { if (User.Room != null) { return; } if (Room.Players.Count >= Room.MaxPlayers) { return; } if (Room.EnablePassword == 1) { return; } if (Room.UserLimit == true) { return; } if (Room.LevelLimit > 0) { return; } if (Room.RoomType == 1) { return; } int Side = Convert.ToInt32(getBlock(2)); if (Room.joinUser(User, Side) == true) { ArrayList tempPlayers = new ArrayList(); User.isReady = false; User.isSpawned = false; User.Health = 0; User.BackedToRoom = false; foreach (virtualUser RoomUser in Room.Players) { if (RoomUser.Equals(User) == false) { tempPlayers.Add(RoomUser); } } User.send(new PACKET_ROOM_UDP(User, tempPlayers)); foreach (virtualUser tempSpectator in Room.Spectators) { User.send(new PACKET_ROOM_UDP_SPECTATE(tempSpectator)); } User.send(new PACKET_JOIN_ROOM(User, Room)); tempPlayers.Clear(); tempPlayers.Add(User); foreach (virtualUser RoomUser in Room.Players) { RoomUser.send(new PACKET_ROOM_UDP(RoomUser, tempPlayers)); } foreach (virtualUser SpectatorUser in Room.Spectators) { SpectatorUser.send(new PACKET_ROOM_UDP(SpectatorUser, tempPlayers)); } /* Send out changed Room Data */ foreach (virtualUser _User in UserManager.getUsersInChannel(Room.Channel, false)) { if (_User.Page == Math.Floor(Convert.ToDecimal(Room.ID / 14))) { _User.send(new PACKET_ROOMLIST_UPDATE(Room)); } } return; } } } catch (Exception ex) { Log.AppendError("Error at QuickJoin: " + ex.Message); } }