public static void DeleteRoom(SqlDatabaseClient MySqlClient, uint RoomId) { MySqlClient.SetParameter("id", RoomId); MySqlClient.ExecuteNonQuery("DELETE FROM rooms WHERE id = @id LIMIT 1"); MySqlClient.SetParameter("id", RoomId); MySqlClient.ExecuteNonQuery("DELETE FROM navigator_frontpage WHERE room_id = @id"); RoomInfoLoader.RemoveFromCache(RoomId); Navigator.ReloadOfficialItems(MySqlClient); }
private static void GetRoomInfo(Session Session, ClientMessage Message) { RoomInfo Info = RoomInfoLoader.GetRoomInfo(Message.PopWiredUInt32()); if (Info == null) { return; } bool Bool1 = Message.PopWiredBoolean(); // true when entering a room, otherwise always false bool Bool2 = Message.PopWiredBoolean(); // true when requesting info before entering (stalking etc), otherwise always false?? Session.SendData(RoomInfoComposer.Compose(Info, Bool1, Bool2)); }
private static void GetPublicRoomData(Session Session, ClientMessage Message) { uint RoomId = Message.PopWiredUInt32(); RoomInfo Info = RoomInfoLoader.GetRoomInfo(RoomId); if (Info == null) { return; } ServerMessage PubRoomData = new ServerMessage(OpcodesOut.ROOM_PUBLIC_MODELDATA); PubRoomData.AppendUInt32(27); // Unknown. PubRoomData.AppendStringWithBreak(Info.SWFs); PubRoomData.AppendUInt32(Info.Id); Session.SendData(PubRoomData); }
public static RoomInstance TryCreateRoomInstance(uint InstanceId, uint RoomId) { RoomInfo Info = RoomInfoLoader.GetRoomInfo(RoomId); if (Info == null) { return(null); } RoomModel Model = Info.TryGetModel(); if (Model == null) { return(null); } return(new RoomInstance(InstanceId, Info, Model)); }
public static void PrepareRoom(Session Session, uint RoomId, string Password = "", bool BypassAuthentication = false) { // Remove user from any previous room RoomManager.RemoveUserFromRoom(Session, false); // Try to retrieve room information RoomInfo Info = RoomInfoLoader.GetRoomInfo(RoomId); // Room not found, send kick notif and stop if (Info == null) { Session.SendData(RoomKickedComposer.Compose()); return; } // Try to retrieve room model information RoomModel Model = Info.TryGetModel(); // Model information not found, send kick notif and stop if (Model == null) { Session.SendData(RoomKickedComposer.Compose()); return; } // Load room instance into the server memory if needed if (!RoomManager.InstanceIsLoadedForRoom(Info.Id)) { RoomManager.TryLoadRoomInstance(Info.Id); } // Attempt to retrieve the instance from the server memory RoomInstance Instance = RoomManager.GetInstanceByRoomId(Info.Id); // If the instance was not created or is unavailable, send kick notif and stop if (Instance == null) { Session.SendData(RoomKickedComposer.Compose()); return; } // Check if the room capacity has been reached if (Info.CurrentUsers >= Info.MaxUsers && !Session.HasRight("enter_full_rooms")) { Session.SendData(RoomJoinErrorComposer.Compose(1)); Session.SendData(RoomKickedComposer.Compose()); return; } // Check if the user has been banned from this room if (Instance.IsUserBanned(Session.CharacterId)) { Session.SendData(RoomJoinErrorComposer.Compose(4)); Session.SendData(RoomKickedComposer.Compose()); return; } // Mark room as loading and check for initial authorization Session.AbsoluteRoomId = Info.Id; Session.RoomAuthed = (BypassAuthentication || Info.OwnerId == Session.CharacterId || Session.HasRight("enter_locked_rooms")); Session.RoomJoined = false; // Send confirmation that the initial checks have been passed (if this is a flat) if (Info.Type == RoomType.Flat) { Session.SendData(RoomOpenFlatComposer.Compose()); } // Try to accomplish authorization (if not already initially authorized by character rights) if (!Session.RoomAuthed) { // Check for valid password, if needed if (Info.AccessType == RoomAccessType.PasswordProtected) { if (Info.Password != Password) { Session.SendData(GenericErrorComposer.Compose(-100002)); RoomManager.RemoveUserFromRoom(Session); return; } } // Send doorbell, if any users are in this room. else if (Info.AccessType == RoomAccessType.Locked) { if (Instance.HumanActorCount > 0) { Session.SendData(RoomDoorbellComposer.Compose()); Instance.BroadcastMessage(RoomDoorbellComposer.Compose(Session.CharacterInfo.Username), true); return; } else { Session.SendData(RoomDoorbellNoResponseComposer.Compose()); RoomManager.RemoveUserFromRoom(Session); return; } } } // If all these stages have been passed, mark auth as OK and continue loading Session.RoomAuthed = true; EnterRoom(Session, Instance); }