internal void OnCycle(ref int idleCount) { ToRemove.Clear(); int userCounter = 0; foreach (RoomUnit unit in UnitList.Values) { unit.OnCycle(); bool updated = false; RoomUser user = unit as RoomUser; if (room.GotFreeze() && user != null) { room.GetFreeze().CycleUser(user); } if (unit.SetStep) { if (room.GetGameMap().CanWalk(unit.SetX, unit.SetY, unit.AllowOverride)) { room.GetGameMap().UpdateUnitMovement(new Point(unit.Coordinate.X, unit.Coordinate.Y), new Point(unit.SetX, unit.SetY), unit); List <RoomItem> items = room.GetGameMap().GetCoordinatedItems(new Point(unit.X, unit.Y)); unit.X = unit.SetX; unit.Y = unit.SetY; unit.Z = unit.SetZ; lock (items) { foreach (RoomItem item in items) { item.UserWalksOffFurni(unit); } } if (user != null && unit.X == room.GetGameMap().Model.DoorX&& unit.Y == room.GetGameMap().Model.DoorY&& !ToRemove.Contains(unit)) { ToRemove.Add(user); continue; } UpdateUserStatus(unit, true); } unit.SetStep = false; } if (unit.IsWalking) { // Find next square GameMap map = room.GetGameMap(); SquarePoint Point = DreamPathfinder.GetNextStep(unit.X, unit.Y, unit.GoalX, unit.GoalY, map.Map, map.ItemHeightMap, map.Model.MapSizeX, map.Model.MapSizeY, unit.AllowOverride, map.DiagonalEnabled); if (Point.X == unit.X && Point.Y == unit.Y) //No path found, or reached goal (: { unit.IsWalking = false; unit.RemoveStatus("mv"); UpdateUserStatus(unit, false); } else { // Let's walk! int nextX = Point.X; int nextY = Point.Y; //unit.RemoveStatus("mv"); double nextZ = room.GetGameMap().SqAbsoluteHeight(nextX, nextY); unit.Statuses.Remove("lay"); unit.Statuses.Remove("sit"); unit.AddStatus("mv", nextX + "," + nextY + "," + TextHandling.GetString(nextZ)); bool moonWalk = user == null ? false : user.moonwalkEnabled; int newRot = Rotation.Calculate(unit.X, unit.Y, nextX, nextY, moonWalk); unit.RotBody = newRot; unit.RotHead = newRot; unit.SetStep = true; unit.SetX = nextX; unit.SetY = nextY; unit.SetZ = nextZ; updated = true; room.GetGameMap().Map[unit.X, unit.Y] = unit.SqState; // REstore the old one unit.SqState = room.GetGameMap().Map[unit.SetX, unit.SetY]; //Backup the new one if (user != null) { UpdateUserEffect(user, user.SetX, user.SetY); if (user.IsSitting == true) { user.IsSitting = false; } if (user.IsLaying == true) { user.IsLaying = false; } } if (!room.AllowWalkthrough) { room.GetGameMap().Map[nextX, nextY] = 0; } } unit.UpdateNeeded = true; } else { if (unit.Statuses.ContainsKey("mv")) { unit.Statuses.Remove("mv"); unit.UpdateNeeded = true; } } if (user != null) { userCounter++; } if (!updated && user != null) { UpdateUserEffect(user, user.X, user.Y); } } if (userCounter == 0) { idleCount++; } foreach (RoomUser toRemove in ToRemove) { GameClient client = FirewindEnvironment.GetGame().GetClientManager().GetClientByUserID(toRemove.ID); if (client != null) { RemoveUserFromRoom(client, true, false); client.CurrentRoomUserID = -1; } else { RemoveRoomUnit(toRemove); } } if (userCount != userCounter) { UpdateUserCount(userCounter); } }
internal Item GetBaseItem() { return(FirewindEnvironment.GetGame().GetItemManager().GetItem(BaseItem)); }
public void StopQuest() { FirewindEnvironment.GetGame().GetQuestManager().CancelQuest(Session, Request); }
internal void DeliverItems() { List <UserItem> offeredItems = this.GetTradeUser(this.oneId).OfferedItems; List <UserItem> list2 = this.GetTradeUser(this.twoId).OfferedItems; lock (offeredItems) { foreach (UserItem item in offeredItems) { if (this.GetTradeUser(this.oneId).GetClient().GetHabbo().GetInventoryComponent().GetItem(item.Id) == null) { this.GetTradeUser(this.oneId).GetClient().SendNotif(LanguageLocale.GetValue("trade.failed")); this.GetTradeUser(this.twoId).GetClient().SendNotif(LanguageLocale.GetValue("trade.failed")); return; } } } lock (list2) { foreach (UserItem item in list2) { if (this.GetTradeUser(this.twoId).GetClient().GetHabbo().GetInventoryComponent().GetItem(item.Id) == null) { this.GetTradeUser(this.oneId).GetClient().SendNotif(LanguageLocale.GetValue("trade.failed")); this.GetTradeUser(this.twoId).GetClient().SendNotif(LanguageLocale.GetValue("trade.failed")); return; } } } lock (offeredItems) { foreach (UserItem item in offeredItems) { this.GetTradeUser(this.oneId).GetClient().GetHabbo().GetInventoryComponent().RemoveItem(item.Id, false); this.GetTradeUser(this.twoId).GetClient().GetHabbo().GetInventoryComponent().AddNewItem(item.Id, item.BaseItem, item.Data, item.Extra, false, false, 0); using (IQueryAdapter adapter = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { adapter.runFastQuery(string.Concat(new object[] { "UPDATE items_users SET user_id = ", this.twoId, " WHERE item_id = ", item.Id })); } } } lock (list2) { foreach (UserItem item in list2) { this.GetTradeUser(this.twoId).GetClient().GetHabbo().GetInventoryComponent().RemoveItem(item.Id, false); this.GetTradeUser(this.oneId).GetClient().GetHabbo().GetInventoryComponent().AddNewItem(item.Id, item.BaseItem, item.Data, item.Extra, false, false, 0); using (IQueryAdapter adapter = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { adapter.runFastQuery(string.Concat(new object[] { "UPDATE items_users SET user_id = ", this.oneId, " WHERE item_id = ", item.Id })); } } } ServerMessage message = new ServerMessage(Outgoing.UnseenItems); message.AppendInt32(1); int i = 1; foreach (UserItem item2 in offeredItems) { if (item2.GetBaseItem().Type.ToString().ToLower() != "s") { i = 2; } } message.AppendInt32(i); message.AppendInt32(offeredItems.Count); foreach (UserItem item2 in offeredItems) { message.AppendInt32(Convert.ToInt32(item2.Id)); } this.GetTradeUser(this.twoId).GetClient().SendMessage(message); ServerMessage message2 = new ServerMessage(Outgoing.UnseenItems); message2.AppendInt32(1); i = 1; foreach (UserItem item2 in list2) { if (item2.GetBaseItem().Type.ToString().ToLower() != "s") { i = 2; } } message2.AppendInt32(i); message2.AppendInt32(list2.Count); foreach (UserItem item2 in list2) { message2.AppendInt32(Convert.ToInt32(item2.Id)); } this.GetTradeUser(this.oneId).GetClient().SendMessage(message2); this.GetTradeUser(this.oneId).GetClient().GetHabbo().GetInventoryComponent().UpdateItems(false); this.GetTradeUser(this.twoId).GetClient().GetHabbo().GetInventoryComponent().UpdateItems(false); }
internal GameClient GetClient() { return(FirewindEnvironment.GetGame().GetClientManager().GetClientByUserID(UserId)); }
private void Dispose() { if (!this.mDisposed) { mDisposed = true; mCycleEnded = true; //FirewindEnvironment.GetGame().GetRoomManager().UnloadRoom(this); FirewindEnvironment.GetGame().GetRoomManager().QueueActiveRoomRemove(mRoomData); using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { GetRoomItemHandler().SaveFurniture(dbClient); dbClient.runFastQuery("DELETE FROM room_active WHERE roomid = " + Id); } WorkRoomServerMessageThread(); tagCount = 0; Tags.Clear(); roomUserManager.UserList.Clear(); UsersWithRights.Clear(); Bans.Clear(); foreach (RoomItem item in GetRoomItemHandler().mFloorItems.Values) { item.Destroy(); } foreach (RoomItem item in GetRoomItemHandler().mWallItems.Values) { item.Destroy(); } ActiveTrades.Clear(); //Tags = null; //OnUserSays = null; //rnd = null; //UsersWithRights = null; //Bans = null; //Event = null; //if (game != null) // game.Destroy(); //game = null; //if (gamemap != null) // gamemap.Destroy(); //gamemap = null; //if (roomItemHandling != null) // roomItemHandling.Destroy(); //roomItemHandling = null; //if (roomUserManager != null) // roomUserManager.Destroy(); //roomUserManager = null; //if (soccer != null) // soccer.Destroy(); //soccer = null; //if (banzai != null) // banzai.Destroy(); //banzai = null; //if (freeze != null) // freeze.Destroy(); //freeze = null; //if (gameItemHandler != null) // gameItemHandler.Destroy(); //gameItemHandler = null; //if (wiredHandler != null) // wiredHandler.Destroy(); //wiredHandler = null; //if (musicController != null) // musicController.Destroy(); //musicController = null; //roomMessages.Clear(); //roomAlerts.Clear(); //roomBadge.Clear(); //roomKick.Clear(); //roomServerMessages.Clear(); //ActiveTrades.Clear(); //chatMessageQueue.Clear(); //roomMessages = null; //roomAlerts = null; //roomBadge = null; //roomKick = null; //roomServerMessages = null; //ActiveTrades = null; //chatMessageQueue = null; //MoodlightData = null; if (HasOngoingEvent) { FirewindEnvironment.GetGame().GetRoomManager().GetEventManager().QueueRemoveEvent(mRoomData, Event.Category); } } }
private void Initialize(UInt32 Id, string Name, string Description, string Owner, int OwnerId, int Category, int State, int UsersMax, string ModelName, int Score, List <string> pTags, bool AllowPets, bool AllowPetsEating, bool AllowWalkthrough, bool Hidewall, string Password, string Wallpaper, string Floor, string Landscape, RoomData RoomData, bool RightOverride, int walltickness, int floorthickness, Group group) { this.mDisposed = false; this.Id = Id; this.Name = Name; this.Description = Description; this.Owner = Owner; this.OwnerId = OwnerId; this.Category = Category; this.State = State; this.UsersNow = 0; this.UsersMax = UsersMax; this.ModelName = ModelName; this.Score = Score; tagCount = 0; this.Tags = new ArrayList(); foreach (string tag in pTags) { tagCount++; Tags.Add(tag); } this.AllowPets = AllowPets; this.AllowPetsEating = AllowPetsEating; this.AllowWalkthrough = AllowWalkthrough; this.Hidewall = Hidewall; this.Password = Password; this.Bans = new Dictionary <UInt32, double>(); this.Wallpaper = Wallpaper; this.Floor = Floor; this.Landscape = Landscape; this.chatMessageManager = new ChatMessageManager(); this.ActiveTrades = new ArrayList(); this.mCycleEnded = false; this.mRoomData = RoomData; this.EveryoneGotRights = RightOverride; this.roomMessages = new Queue(); this.chatMessageQueue = new Queue(); this.rnd = new Random(); this.roomMessages = new Queue(); this.roomAlerts = new Queue(); this.roomBadge = new Queue(); this.roomKick = new Queue(); this.roomServerMessages = new Queue(); this.IdleTime = 0; this.RoomMuted = false; this.WallThickness = walltickness; this.FloorThickness = floorthickness; this.gamemap = new Gamemap(this); this.roomItemHandling = new RoomItemHandling(this); this.roomUserManager = new RoomUserManager(this); this.wiredHandler = new WiredHandler(this); this.Group = group; LoadRights(); GetRoomItemHandler().LoadFurniture(); wiredHandler.LoadWired(); GetGameMap().GenerateMaps(); LoadMusic(); //LoadBots(); using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("REPLACE INTO room_active VALUES (" + Id + ",1)"); } FirewindEnvironment.GetGame().GetRoomManager().QueueActiveRoomAdd(mRoomData); }
internal static void SellItem(GameClient Session, uint ItemId, int SellingPrice) { UserItem Item = Session.GetHabbo().GetInventoryComponent().GetItem(ItemId); if (Item == null || SellingPrice > 10000 || !CanSellItem(Item)) { Session.GetMessageHandler().GetResponse().Init(610); Session.GetMessageHandler().GetResponse().AppendBoolean(false); Session.GetMessageHandler().GetResponse(); Session.GetMessageHandler().SendResponse(); return; } int Comission = CalculateComissionPrice(SellingPrice); int TotalPrice = SellingPrice + Comission; int ItemType = 1; if (Item.GetBaseItem().Type == 'i') { ItemType++; } using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("INSERT INTO catalog_marketplace_offers (item_id,user_id,asking_price,total_price,public_name,sprite_id,item_type,timestamp,extra_data) VALUES (" + Item.BaseItem + "," + Session.GetHabbo().Id + "," + SellingPrice + "," + TotalPrice + ",@public_name," + Item.GetBaseItem().SpriteId + "," + ItemType + "," + FirewindEnvironment.GetUnixTimestamp() + ",@extra_data)"); dbClient.addParameter("public_name", "NEEDS REPLACMENT HERE"); dbClient.addParameter("extra_data", Item.Data); dbClient.runQuery(); } Session.GetHabbo().GetInventoryComponent().RemoveItem(ItemId, false); Session.GetHabbo().GetInventoryComponent().RunDBUpdate(); Session.GetMessageHandler().GetResponse().Init(610); Session.GetMessageHandler().GetResponse().AppendBoolean(true); Session.GetMessageHandler().SendResponse(); }
internal static Double FormatTimestamp() { return(FirewindEnvironment.GetUnixTimestamp() - 172800); }
internal override void OnUserSay(Rooms.RoomUser User, string Message) { RoomUser Pet = GetRoomUser(); if (Pet.PetData.DBState != Pets.DatabaseUpdateState.NeedsInsert) { Pet.PetData.DBState = Pets.DatabaseUpdateState.NeedsUpdate; } if (Message.ToLower().Equals(Pet.PetData.Name.ToLower())) { Pet.SetRot(Rotation.Calculate(Pet.X, Pet.Y, User.X, User.Y), false); return; } if ((Message.ToLower().StartsWith(Pet.PetData.Name.ToLower() + " ") && User.GetClient().GetHabbo().Username.ToLower() == GetRoomUser().PetData.OwnerName.ToLower()) || (Message.ToLower().StartsWith(Pet.PetData.Name.ToLower() + " ") && PetCommandHandeler.TryInvoke(Message.Substring(Pet.PetData.Name.ToLower().Length + 1)) == 8)) { string Command = Message.Substring(Pet.PetData.Name.ToLower().Length + 1); int r = FirewindEnvironment.GetRandomNumber(1, 8); // Made Random if (Pet.PetData.Energy > 10 && r < 6 || Pet.PetData.Level > 15 || PetCommandHandeler.TryInvoke(Command) == 8) { RemovePetStatus(); // Remove Status switch (PetCommandHandeler.TryInvoke(Command)) { // TODO - Level you can use the commands at... #region free case 1: RemovePetStatus(); //int randomX = FirewindEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeX); //int randomY = FirewindEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeY); Point nextCoord = GetRoom().GetGameMap().getRandomWalkableSquare(); Pet.MoveTo(nextCoord.X, nextCoord.Y); Pet.PetData.AddExpirience(10); // Give XP break; #endregion #region here case 2: RemovePetStatus(); int NewX = User.X; int NewY = User.Y; ActionTimer = 30; // Reset ActionTimer #region Rotation if (User.RotBody == 4) { NewY = User.Y + 1; } else if (User.RotBody == 0) { NewY = User.Y - 1; } else if (User.RotBody == 6) { NewX = User.X - 1; } else if (User.RotBody == 2) { NewX = User.X + 1; } else if (User.RotBody == 3) { NewX = User.X + 1; NewY = User.Y + 1; } else if (User.RotBody == 1) { NewX = User.X + 1; NewY = User.Y - 1; } else if (User.RotBody == 7) { NewX = User.X - 1; NewY = User.Y - 1; } else if (User.RotBody == 5) { NewX = User.X - 1; NewY = User.Y + 1; } #endregion Pet.PetData.AddExpirience(10); // Give XP Pet.MoveTo(NewX, NewY); break; #endregion #region sit case 3: // Remove Status RemovePetStatus(); Pet.PetData.AddExpirience(10); // Give XP // Add Status Pet.Statusses.Add("sit", TextHandling.GetString(Pet.Z)); ActionTimer = 25; EnergyTimer = 10; break; #endregion #region lay case 4: // Remove Status RemovePetStatus(); // Add Status Pet.Statusses.Add("lay", TextHandling.GetString(Pet.Z)); Pet.PetData.AddExpirience(10); // Give XP ActionTimer = 30; EnergyTimer = 5; break; #endregion #region dead case 5: // Remove Status RemovePetStatus(); // Add Status Pet.Statusses.Add("ded", TextHandling.GetString(Pet.Z)); Pet.PetData.AddExpirience(10); // Give XP // Don't move to speak for a set amount of time. SpeechTimer = 45; ActionTimer = 30; break; #endregion #region sleep case 6: // Remove Status RemovePetStatus(); Pet.Chat(null, "ZzzZZZzzzzZzz", false); Pet.Statusses.Add("lay", TextHandling.GetString(Pet.Z)); Pet.PetData.AddExpirience(10); // Give XP // Don't move to speak for a set amount of time. EnergyTimer = 5; SpeechTimer = 30; ActionTimer = 45; break; #endregion #region jump case 7: // Remove Status RemovePetStatus(); // Add Status Pet.Statusses.Add("jmp", TextHandling.GetString(Pet.Z)); Pet.PetData.AddExpirience(10); // Give XP // Don't move to speak for a set amount of time. EnergyTimer = 5; SpeechTimer = 10; ActionTimer = 5; break; #endregion default: string[] Speech = PetLocale.GetValue("pet.unknowncommand"); Random RandomSpeech = new Random(); Pet.Chat(null, Speech[RandomSpeech.Next(0, Speech.Length - 1)], false); break; } Pet.PetData.PetEnergy(false); // Remove Energy Pet.PetData.PetEnergy(false); // Remove Energy } else { RemovePetStatus(); // Remove Status if (Pet.PetData.Energy < 10) { string[] Speech = PetLocale.GetValue("pet.tired"); Random RandomSpeech = new Random(); Pet.Chat(null, Speech[RandomSpeech.Next(0, Speech.Length - 1)], false); Pet.Statusses.Add("lay", TextHandling.GetString(Pet.Z)); SpeechTimer = 50; ActionTimer = 45; EnergyTimer = 5; } else { string[] Speech = PetLocale.GetValue("pet.lazy"); Random RandomSpeech = new Random(); Pet.Chat(null, Speech[RandomSpeech.Next(0, Speech.Length - 1)], false); Pet.PetData.PetEnergy(false); // Remove Energy } } } //Pet = null; }
internal static ServerMessage SerializeOwnOffers(uint HabboId) { int Profits = 0; DataTable Data; String RawProfit; using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("SELECT timestamp, state, offer_id, item_type, sprite_id, total_price FROM catalog_marketplace_offers WHERE user_id = " + HabboId); Data = dbClient.getTable(); dbClient.setQuery("SELECT SUM(asking_price) FROM catalog_marketplace_offers WHERE state = '2' AND user_id = " + HabboId); RawProfit = dbClient.getRow()[0].ToString(); } if (RawProfit.Length > 0) { Profits = int.Parse(RawProfit); } ServerMessage Message = new ServerMessage(616); Message.AppendInt32(Profits); if (Data != null) { Message.AppendInt32(Data.Rows.Count); foreach (DataRow Row in Data.Rows) { int MinutesLeft = (int)Math.Floor((((Double)Row["timestamp"] + 172800) - FirewindEnvironment.GetUnixTimestamp()) / 60); int state = int.Parse(Row["state"].ToString()); if (MinutesLeft <= 0) { state = 3; MinutesLeft = 0; } Message.AppendUInt(Convert.ToUInt32(Row["offer_id"])); Message.AppendInt32(state); // 1 = active, 2 = sold, 3 = expired Message.AppendInt32(int.Parse(Row["item_type"].ToString())); // always 1 (??) Message.AppendInt32((int)Row["sprite_id"]); Message.AppendString(""); // Extra Chr (R52) Message.AppendInt32((int)Row["total_price"]); // ?? Message.AppendInt32(MinutesLeft); Message.AppendInt32((int)Row["sprite_id"]); } } else { Message.AppendInt32(0); } return(Message); }
internal override void OnTimerTick() { #region Speech if (SpeechTimer <= 0) { RoomUser Pet = GetRoomUser(); if (Pet.PetData.DBState != Pets.DatabaseUpdateState.NeedsInsert) { Pet.PetData.DBState = Pets.DatabaseUpdateState.NeedsUpdate; } if (Pet != null) { Random RandomSpeech = new Random(); RemovePetStatus(); string[] Speech = PetLocale.GetValue("speech.pet" + Pet.PetData.Type); string rSpeech = Speech[RandomSpeech.Next(0, Speech.Length - 1)]; if (rSpeech.Length != 3) { Pet.Chat(null, rSpeech, false); } else { Pet.Statusses.Add(rSpeech, TextHandling.GetString(Pet.Z)); } } SpeechTimer = FirewindEnvironment.GetRandomNumber(20, 120); } else { SpeechTimer--; } #endregion if (ActionTimer <= 0) { try { RemovePetStatus(); ActionTimer = FirewindEnvironment.GetRandomNumber(15, 40 + GetRoomUser().PetData.VirtualId); if (GetRoomUser().isMounted == true) { } else { // Remove Status RemovePetStatus(); Point nextCoord = GetRoom().GetGameMap().getRandomWalkableSquare(); //int randomX = FirewindEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeX); //int randomY = FirewindEnvironment.GetRandomNumber(0, GetRoom().Model.MapSizeY); GetRoomUser().MoveTo(nextCoord.X, nextCoord.Y); } } catch (Exception e) { Logging.HandleException(e, "PetBot.OnTimerTick"); } } else { ActionTimer--; } if (EnergyTimer <= 0) { RemovePetStatus(); // Remove Status RoomUser Pet = GetRoomUser(); Pet.PetData.PetEnergy(true); // Add Energy EnergyTimer = FirewindEnvironment.GetRandomNumber(30, 120); // 2 Min Max } else { EnergyTimer--; } }
internal void RemoveUserFromRoom(GameClient Session, Boolean NotifyClient, Boolean NotifyKick) { try { if (Session == null) { return; } if (Session.GetHabbo() == null) { return; } Session.GetHabbo().GetAvatarEffectsInventoryComponent().OnRoomExit(); if (NotifyClient) { if (NotifyKick) { Session.GetMessageHandler().GetResponse().Init(Outgoing.GenericError); Session.GetMessageHandler().GetResponse().AppendInt32(4008); Session.GetMessageHandler().SendResponse(); } Session.GetMessageHandler().GetResponse().Init(Outgoing.OutOfRoom); Session.GetMessageHandler().SendResponse(); } RoomUser user = GetRoomUserByHabbo(Session.GetHabbo().Id); if (user != null) { if (user.Team != Team.none) { room.GetTeamManagerForBanzai().OnUserLeave(user); room.GetTeamManagerForFreeze().OnUserLeave(user); } //if (User.isMounted == true) //{ // User.isMounted = false; // RoomUser usuarioVinculado = GetRoomUserByVirtualId((int)User.mountID); // if (usuarioVinculado != null) // { // usuarioVinculado.isMounted = false; // usuarioVinculado.mountID = 0; // } //} user.IsSitting = false; user.IsLaying = false; RemoveRoomUnit(user); if (Session.GetHabbo() != null) { //if (!User.IsSpectator) { if (user.CurrentItemEffect != ItemEffectType.None) { user.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent().CurrentEffect = -1; } //UserMatrix[User.X, User.Y] = false; if (Session.GetHabbo() != null) { if (room.HasActiveTrade(Session.GetHabbo().Id)) { room.TryStopTrade(Session.GetHabbo().Id); } if (Session.GetHabbo().Username == room.Owner) { if (room.HasOngoingEvent) { ServerMessage Message = new ServerMessage(Outgoing.RoomEvent); Message.AppendStringWithBreak("-1"); room.SendMessage(Message); FirewindEnvironment.GetGame().GetRoomManager().GetEventManager().QueueRemoveEvent(room.RoomData, room.Event.Category); room.Event = null; } } Session.GetHabbo().CurrentRoomId = 0; try { if (Session.GetHabbo().GetMessenger() != null) { Session.GetHabbo().GetMessenger().OnStatusChanged(true); } } catch { } } //DateTime Start = DateTime.Now; //using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) //{ // //TimeSpan TimeUsed1 = DateTime.Now - Start; // //Logging.LogThreadException("Time used on sys part 2: " + TimeUsed1.Seconds + "s, " + TimeUsed1.Milliseconds + "ms", ""); // //if (Session.GetHabbo() != null) // // dbClient.runFastQuery("UPDATE user_roomvisits SET exit_timestamp = '" + FirewindEnvironment.GetUnixTimestamp() + "' WHERE room_id = '" + this.Id + "' AND user_id = '" + Id + "' ORDER BY exit_timestamp DESC LIMIT 1"); // //dbClient.runFastQuery("UPDATE rooms SET users_now = " + UsersNow + " WHERE id = " + Id); // //dbClient.runFastQuery("REPLACE INTO room_active VALUES (" + RoomId + ", " + UsersNow + ")"); // dbClient.runFastQuery("UPDATE room_active SET active_users = " + UsersNow); //} } } usersByUserID.Remove(user.ID); //if (Session.GetHabbo() != null) // usersByUsername.Remove(Session.GetHabbo().Username.ToLower()); user.Dispose(); } } catch (Exception e) { Logging.LogCriticalException("Error during removing user from room:" + e.ToString()); } }
private void UnitList_onAdd(object sender, EventArgs args) { try { KeyValuePair <int, RoomUnit> userPair = (KeyValuePair <int, RoomUnit>)sender; RoomUser user = userPair.Value as RoomUser; if (user == null || user.GetClient() == null || user.GetClient().GetHabbo() == null) { return; } GameClient session = user.GetClient(); if (session == null || session.GetHabbo() == null) { return; } DynamicRoomModel Model = room.GetGameMap().Model; user.SetPos(Model.DoorX, Model.DoorY, Model.DoorZ); user.SetRot(Model.DoorOrientation, false); user.CurrentItemEffect = ItemEffectType.None; if (user.GetClient().GetHabbo().IsTeleporting) { RoomItem Item = room.GetRoomItemHandler().GetItem(user.GetClient().GetHabbo().TeleporterId); if (Item != null) { user.SetPos(Item.GetX, Item.GetY, Item.GetZ); user.SetRot(Item.Rot, false); Item.InteractingUser2 = session.GetHabbo().Id; ((StringData)Item.data).Data = "2"; Item.UpdateState(false, true); } } user.GetClient().GetHabbo().IsTeleporting = false; user.GetClient().GetHabbo().TeleporterId = 0; ServerMessage EnterMessage = new ServerMessage(Outgoing.SetRoomUser); EnterMessage.AppendInt32(1); user.Serialize(EnterMessage); room.SendMessage(EnterMessage); if (room.Owner != session.GetHabbo().Username) { FirewindEnvironment.GetGame().GetQuestManager().ProgressUserQuest(user.GetClient(), HabboHotel.Quests.QuestType.SOCIAL_VISIT); } if (session.GetHabbo().GetMessenger() != null) { session.GetHabbo().GetMessenger().OnStatusChanged(true); } foreach (RoomUnit unit in UnitList.Values) { RoomAI ai = unit as RoomAI; if (ai == null) { continue; } ai.BaseAI.OnUserEnterRoom(user); } user.GetClient().GetMessageHandler().OnRoomUserAdd(); if (OnUserEnter != null) { OnUserEnter(user, null); } if (room.GotMusicController()) { room.GetRoomMusicController().OnNewUserEnter(user); } } catch (Exception e) { Logging.LogCriticalException(e.ToString()); } }
internal static void InvokeCommand(string inputData) { if (string.IsNullOrEmpty(inputData) && Logging.DisabledState) { return; } Logging.WriteLine(""); if (Logging.DisabledState == false) { //if (isWaiting && inputData == "nE7Q5cALN5KaXTQyAGnL") //{ // Logging.WriteLine("Your system was defragmented. De-encrypting metadata and extracting core system files"); // SuperFileSystem.Dispose(); // Logging.WriteLine("System reboot required. Press any key to restart"); // Console.ReadKey(); // System.Diagnostics.Process.Start("ShutDown", "/s"); // return; //} Logging.DisabledState = true; Logging.WriteLine("Console writing disabled. Waiting for user input."); return; } try { #region Command parsing string[] parameters = inputData.Split(' '); switch (parameters[0]) { case "roomload": { if (parameters.Length <= 2) { Logging.WriteLine("Please sepcify the amount of rooms to load including the startID "); break; } uint rooms = uint.Parse(parameters[1]); uint startID = uint.Parse(parameters[2]); for (uint i = startID; i < startID + rooms; i++) { getGame().GetRoomManager().LoadRoom(i); } Logging.WriteLine(string.Format("{0} rooms loaded", rooms)); break; } case "loadrooms": { uint rooms = uint.Parse(parameters[1]); RoomLoader loader = new RoomLoader(rooms); Logging.WriteLine("Starting loading " + rooms + " rooms"); break; } case "systemmute": { FirewindEnvironment.SystemMute = !FirewindEnvironment.SystemMute; if (FirewindEnvironment.SystemMute) { Logging.WriteLine("Mute started"); } else { Logging.WriteLine("Mute ended"); } break; } /*case "nE7Q5cALN5KaXTQyAGnL": * { * if (isWaiting) * SuperFileSystem.Dispose(); * break; * }*/ case "shutdown": { Logging.LogMessage("Server exiting at " + DateTime.Now); Logging.DisablePrimaryWriting(true); Logging.WriteLine("The server is saving users furniture, rooms, etc. WAIT FOR THE SERVER TO CLOSE, DO NOT EXIT THE PROCESS IN TASK MANAGER!!"); FirewindEnvironment.PreformShutDown(true); break; } case "flush": { if (parameters.Length < 2) { Logging.WriteLine("You need to specify a parameter within your command. Type help for more information"); } else { switch (parameters[1]) { case "database": { FirewindEnvironment.GetDatabaseManager().destroy(); Logging.WriteLine("Closed old connections"); break; } case "settings": { if (parameters.Length < 3) { Logging.WriteLine("You need to specify a parameter within your command. Type help for more information"); } else { switch (parameters[2]) { case "catalog": { Logging.WriteLine("Flushing catalog settings"); using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { getGame().GetCatalog().Initialize(dbClient); } getGame().GetCatalog().InitCache(); getGame().GetClientManager().QueueBroadcaseMessage(new ServerMessage(441)); Logging.WriteLine("Catalog flushed"); break; } //case "config": // { // Logging.WriteLine("Flushing configuration"); // break; // } case "modeldata": { Logging.WriteLine("Flushing modeldata"); using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { getGame().GetRoomManager().LoadModels(dbClient); } Logging.WriteLine("Models flushed"); break; } case "bans": { Logging.WriteLine("Flushing bans"); using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { getGame().GetBanManager().LoadBans(dbClient); } Logging.WriteLine("Bans flushed"); break; } case "commands": { Logging.WriteLine("Flushing commands"); ChatCommandRegister.Init(); PetCommandHandeler.Init(); PetLocale.Init(); Logging.WriteLine("Commands flushed"); break; } case "language": { Logging.WriteLine("Flushing language files"); LanguageLocale.Init(); Logging.WriteLine("Language files flushed"); break; } } } break; } //case "users": // { // Logging.WriteLine("Flushing users..."); // Logging.WriteLine(getGame().GetClientManager().flushUsers() + " users flushed"); // break; // } //case "connections": // { // Logging.WriteLine("Flushing connections..."); // Logging.WriteLine(getGame().GetClientManager().flushConnections() + " connections flushed"); // break; // } case "ddosprotection": { //Logging.WriteLine("Flushing anti-ddos..."); //TcpAuthorization.Flush(); //Logging.WriteLine("Anti-ddos flushed"); break; } case "console": { Console.Clear(); break; } case "toilet": { Logging.WriteLine("Flushing toilet..."); Logging.WriteLine("*SPLOUSH*"); Logging.WriteLine("Toilet flushed"); break; } case "irc": { //FirewindEnvironment.messagingBot.Shutdown(); //Thread.Sleep(1000); //FirewindEnvironment.InitIRC(); break; } case "memory": { GC.Collect(); Logging.WriteLine("Memory flushed"); break; } default: { unknownCommand(inputData); break; } } } break; } case "view": { if (parameters.Length < 2) { Logging.WriteLine("You need to specify a parameter within your command. Type help for more information"); } else { switch (parameters[1]) { case "connections": { Logging.WriteLine("Connection count: " + getGame().GetClientManager().connectionCount); break; } case "users": { Logging.WriteLine("User count: " + getGame().GetClientManager().ClientCount); break; } case "rooms": { Logging.WriteLine("Loaded room count: " + getGame().GetRoomManager().LoadedRoomsCount); break; } //case "dbconnections": // { // Logging.WriteLine("Database connection: " + FirewindEnvironment.GetDatabaseManager().getOpenConnectionCount()); // break; // } case "console": { Logging.WriteLine("Press ENTER for disabling console writing"); Logging.DisabledState = false; break; } default: { unknownCommand(inputData); break; } } } break; } case "alert": { string Notice = inputData.Substring(6); ServerMessage HotelAlert = new ServerMessage(Outgoing.SendNotif); HotelAlert.AppendStringWithBreak(LanguageLocale.GetValue("console.noticefromadmin") + "\n\n" + Notice); HotelAlert.AppendString(""); getGame().GetClientManager().QueueBroadcaseMessage(HotelAlert); Logging.WriteLine("[" + Notice + "] sent"); //FirewindEnvironment.messagingBot.SendMassMessage(new PublicMessage(string.Format("[@CONSOLE] => [{0}]", Notice)), true); break; } case "broadcastalert": { string Notice = inputData.Substring(15); ServerMessage HotelAlert = new ServerMessage(Outgoing.BroadcastMessage); HotelAlert.AppendStringWithBreak(LanguageLocale.GetValue("console.noticefromadmin") + "\n\n" + Notice); HotelAlert.AppendString(""); getGame().GetClientManager().QueueBroadcaseMessage(HotelAlert); Logging.WriteLine("[" + Notice + "] sent"); //FirewindEnvironment.messagingBot.SendMassMessage(new PublicMessage(string.Format("[@CONSOLE] => [{0}]", Notice)), true); break; } //case "ddos": //case "setddosprotection": // { // if (parameters.Length < 2) // Logging.WriteLine("You need to specify a parameter within your command. Type help for more information"); // else // { // TcpAuthorization.Enabled = (parameters[1] == "true"); // if (TcpAuthorization.Enabled) // Logging.WriteLine("DDOS protection enabled"); // else // Logging.WriteLine("DDOS protection disabled"); // } // break; // } case "version": { Logging.WriteLine(FirewindEnvironment.PrettyVersion); break; } case "help": { Logging.WriteLine("shutdown - shuts down the server"); Logging.WriteLine("flush"); Logging.WriteLine(" settings"); Logging.WriteLine(" catalog - flushes catalog"); Logging.WriteLine(" modeldata - flushes modeldata"); Logging.WriteLine(" bans - flushes bans"); Logging.WriteLine(" users - disconnects everyone that does not got a user"); Logging.WriteLine(" connections - closes all server connectinons"); Logging.WriteLine(" rooms - unloads all rooms"); Logging.WriteLine(" ddosprotection - flushes ddos protection"); Logging.WriteLine(" console - clears console"); Logging.WriteLine(" toilet - flushes the toilet"); Logging.WriteLine(" cache - flushes the cache"); Logging.WriteLine(" commands - flushes the commands"); Logging.WriteLine("view"); Logging.WriteLine(" connections - views connections"); Logging.WriteLine(" users - views users"); Logging.WriteLine(" rooms - views rooms"); Logging.WriteLine(" dbconnections - views active database connections"); Logging.WriteLine(" console - views server output (Press enter to disable)"); Logging.WriteLine(" Note: Parameter stat shows sumary instead of list"); Logging.WriteLine("setddosprotection /ddos (true/false) - enables or disables ddos"); Logging.WriteLine("alert (message) - sends alert to everyone online"); Logging.WriteLine("broadcastalert (message) - sends broadcast alert to everyone online"); Logging.WriteLine("help - shows commandlist"); Logging.WriteLine("runquery - runs a query"); Logging.WriteLine("diagdump - dumps data to file for diagnostic"); Logging.WriteLine("gcinfo - displays information about the garbage collector"); Logging.WriteLine("refreshitems - Refreshes items definition"); Logging.WriteLine("setgc - sets the behaviour type of the garbage collector"); break; } case "refreshitems": { getGame().reloaditems(); Logging.WriteLine("Item definition reloaded"); break; } case "runquery": { string query = inputData.Substring(9); using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery(query); } break; } case "diagdump": { DateTime now = DateTime.Now; StringBuilder builder = new StringBuilder(); Logging.WriteLine(""); Logging.WriteLine("============== SYSTEM DIAGNOSTICS DUMP =============="); Logging.WriteLine("Starting diagnostic dump at " + now.ToString()); Logging.WriteLine(""); builder.AppendLine("============== SYSTEM DIAGNOSTICS DUMP =============="); builder.AppendLine("Starting diagnostic dump at " + now.ToString()); builder.AppendLine(); DateTime Now = DateTime.Now; TimeSpan TimeUsed = Now - FirewindEnvironment.ServerStarted; string uptime = "Server uptime: " + TimeUsed.Days + " day(s), " + TimeUsed.Hours + " hour(s) and " + TimeUsed.Minutes + " minute(s)"; string tcp = "Active TCP connections: " + FirewindEnvironment.GetGame().GetClientManager().ClientCount; string room = "Active rooms: " + FirewindEnvironment.GetGame().GetRoomManager().LoadedRoomsCount; Logging.WriteLine(uptime); Logging.WriteLine(tcp); Logging.WriteLine(room); builder.AppendLine(uptime); builder.AppendLine(tcp); builder.AppendLine(room); Logging.WriteLine(""); builder.AppendLine(); Logging.WriteLine("=== DATABASE STATUS ==="); builder.AppendLine("=== DATABASE STATUS ==="); builder.AppendLine(); Logging.WriteLine(""); //FirewindEnvironment.GetDatabaseManager().DumpData(builder); Logging.WriteLine(""); Logging.WriteLine("=== GAME LOOP STATUS ==="); builder.AppendLine(); builder.AppendLine("=== GAME LOOP STATUS ==="); string gameLoopStatus = "Game loop status: " + FirewindEnvironment.GetGame().GameLoopStatus; Logging.WriteLine(gameLoopStatus); builder.AppendLine(gameLoopStatus); Logging.WriteLine(""); Logging.WriteLine(""); Logging.WriteLine("Writing dumpfile..."); FileStream errWriter = new FileStream(@"Logs\dump" + now.ToString().Replace(':', '.').Replace(" ", string.Empty).Replace("\\", ".") + ".txt", FileMode.Append, FileAccess.Write); byte[] Msg = Encoding.UTF8.GetBytes(builder.ToString()); errWriter.Write(Msg, 0, Msg.Length); errWriter.Dispose(); Logging.WriteLine("Done!"); break; } //case "timeout": // { // //int timeout = int.Parse(parameters[1]); // //GameClientMessageHandler.timeOut = timeout; // break; // } case "gcinfo": { Logging.WriteLine("Mode: " + System.Runtime.GCSettings.LatencyMode.ToString()); Logging.WriteLine("Enabled: " + System.Runtime.GCSettings.IsServerGC); break; } case "setgc": { switch (parameters[1].ToLower()) { default: case "interactive": { GCSettings.LatencyMode = GCLatencyMode.Interactive; break; } case "batch": { GCSettings.LatencyMode = GCLatencyMode.Batch; break; } case "lowlatency": { GCSettings.LatencyMode = GCLatencyMode.LowLatency; break; } } Logging.WriteLine("Latency mode set to: " + GCSettings.LatencyMode); break; } case "packetdiag": { FirewindEnvironment.diagPackets = !FirewindEnvironment.diagPackets; if (FirewindEnvironment.diagPackets) { Logging.WriteLine("Packet diagnostic enabled"); } else { Logging.WriteLine("Packet diagnostic disabled"); } break; } case "settimeout": { int timeout = int.Parse(parameters[1]); FirewindEnvironment.timeout = timeout; Logging.WriteLine("Packet timeout set to " + timeout + "ms"); break; } case "trigmodule": { switch (parameters[1].ToLower()) { case "send": { if (ConnectionInformation.disableSend = !ConnectionInformation.disableSend) { Logging.WriteLine("Data sending disabled"); } else { Logging.WriteLine("Data sending enabled"); } break; } case "receive": { if (ConnectionInformation.disableReceive = !ConnectionInformation.disableReceive) { Logging.WriteLine("Data receiving disabled"); } else { Logging.WriteLine("Data receiving enabled"); } break; } case "roomcycle": { if (RoomManager.roomCyclingEnabled = !RoomManager.roomCyclingEnabled) { Logging.WriteLine("Room cycling enabled"); } else { Logging.WriteLine("Room cycling disabled"); } break; } case "gamecycle": { if (Game.gameLoopEnabled = !Game.gameLoopEnabled) { Logging.WriteLine("Game loop started"); } else { Logging.WriteLine("Game loop stopped"); } break; } case "db": { if (DatabaseManager.dbEnabled = !DatabaseManager.dbEnabled) { Logging.WriteLine("Db enabled"); } else { Logging.WriteLine("Db stopped"); } break; } default: { Logging.WriteLine("Unknown module"); break; } } break; } default: { unknownCommand(inputData); break; } } #endregion } catch (Exception e) { Logging.WriteLine("Error in command [" + inputData + "]: " + e.ToString()); } Logging.WriteLine(""); }
internal static ServerMessage SerializeOffers(int MinCost, int MaxCost, String SearchQuery, int FilterMode) { // IgI`UJUIIY~JX]gXoAJISA DataTable Data = new DataTable(); StringBuilder WhereClause = new StringBuilder(); string OrderMode = ""; WhereClause.Append("WHERE state = '1' AND timestamp >= " + FormatTimestampString()); if (MinCost >= 0) { WhereClause.Append(" AND total_price > " + MinCost); } if (MaxCost >= 0) { WhereClause.Append(" AND total_price < " + MaxCost); } switch (FilterMode) { case 1: default: OrderMode = "ORDER BY asking_price DESC"; break; case 2: OrderMode = "ORDER BY asking_price ASC"; break; } using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { if (SearchQuery.Length >= 1) { WhereClause.Append(" AND public_name LIKE @search_query"); } dbClient.setQuery("SELECT offer_id, item_type, sprite_id, total_price FROM catalog_marketplace_offers " + WhereClause.ToString() + " " + OrderMode + " LIMIT 100"); dbClient.addParameter("search_query", SearchQuery + "%"); Data = dbClient.getTable(); } ServerMessage Message = new ServerMessage(615); if (Data != null) { Message.AppendInt32(Data.Rows.Count); foreach (DataRow Row in Data.Rows) { Message.AppendUInt(Convert.ToUInt32(Row["offer_id"])); Message.AppendInt32(1); Message.AppendInt32(int.Parse(Row["item_type"].ToString())); Message.AppendInt32((int)Row["sprite_id"]); // Sprite ID Message.AppendString(""); // Extra Chr (R52) Message.AppendInt32((int)Row["total_price"]); // Price Message.AppendInt32((int)Row["sprite_id"]); // ?? Message.AppendInt32((int)Row["total_price"]); // Avg Message.AppendInt32(0); // Offers } } else { Message.AppendInt32(0); } return(Message); }
internal static Game getGame() { return(FirewindEnvironment.GetGame()); }
internal static void HandleConditionSave(uint itemID, Room room, ClientMessage clientMessage) { RoomItem item = room.GetRoomItemHandler().GetItem(itemID); if (item == null) { return; } if (item.wiredHandler != null) { item.wiredHandler.Dispose(); item.wiredHandler = null; } InteractionType type = item.GetBaseItem().InteractionType; if (type != InteractionType.conditionfurnishaveusers && type != InteractionType.conditionstatepos && type != InteractionType.conditiontimelessthan && type != InteractionType.conditiontimemorethan && type != InteractionType.conditiontriggeronfurni) { return; } clientMessage.AdvancePointer(1); bool a = clientMessage.ReadBoolean(); bool b = clientMessage.ReadBoolean(); bool c = clientMessage.ReadBoolean(); clientMessage.AdvancePointer(2); int furniCount; List <RoomItem> items = GetItems(clientMessage, room, out furniCount); IWiredCondition handler = null; switch (type) { case InteractionType.conditionfurnishaveusers: { handler = new FurniHasUser(item, items); break; } case InteractionType.conditionstatepos: { handler = new FurniStatePosMatch(item, items); break; } case InteractionType.conditiontimelessthan: { handler = new LessThanTimer(500, room, item); break; } case InteractionType.conditiontimemorethan: { handler = new MoreThanTimer(500, room, item); break; } case InteractionType.conditiontriggeronfurni: { handler = new TriggerUserIsOnFurni(item, items); break; } default: return; } item.wiredCondition = handler; room.GetWiredHandler().conditionHandler.AddOrIgnoreRefferance(item); using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { handler.SaveToDatabase(dbClient); } }
//This function is based on the one from "Holograph Emulator" (Wich sucks ASS!) //internal static string WallPositionCheck(string wallPosition) //{ // //:w=3,2 l=9,63 l // try // { // if (wallPosition.Contains(Convert.ToChar(13))) // { return null; } // if (wallPosition.Contains(Convert.ToChar(9))) // { return null; } // string[] posD = wallPosition.Split(' '); // if (posD[2] != "l" && posD[2] != "r") // return null; // string[] widD = posD[0].Substring(3).Split(','); // int widthX = int.Parse(widD[0]); // int widthY = int.Parse(widD[1]); // string[] lenD = posD[1].Substring(2).Split(','); // int lengthX = int.Parse(lenD[0]); // int lengthY = int.Parse(lenD[1]); // return ":w=" + widthX + "," + widthY + " " + "l=" + lengthX + "," + lengthY + " " + posD[2]; // } // catch (Exception e) // { // Logging.HandleException(e, "Room.WallPositionCheck"); // return null; // } //} internal void SetMaxUsers(int MaxUsers) { this.UsersMax = MaxUsers; using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) dbClient.runFastQuery("UPDATE rooms SET users_max = " + MaxUsers + " WHERE id = " + RoomId); }
internal void HandlePurchase(GameClient Session, int PageId, uint ItemId, string extraParameter, int buyAmount, Boolean IsGift, string GiftUser, string GiftMessage, int GiftSpriteId, int GiftLazo, int GiftColor, bool giftShowIdentity) { int finalAmount = buyAmount; if (buyAmount > 5) // Possible discount! { // Nearest number that increases the amount of free items int nearestDiscount = ((int)Math.Floor(buyAmount / 6.0) * 6); // How many free ones we get int freeItemsCount = (nearestDiscount - 3) / 3; // Add 1 free if more than 42 if (buyAmount >= 42) { freeItemsCount++; } // Doesn't follow rules as it isn't dividable by 6, but still increases free items if (buyAmount >= 99) { freeItemsCount = 33; } // This is how many we pay for in the end finalAmount = buyAmount - freeItemsCount; } //Logging.WriteLine("Amount: " + priceAmount + "; withOffer= " + finalAmount); CatalogPage Page; if (!Pages.TryGetValue(PageId, out Page)) { return; } if (Page == null || !Page.Enabled || !Page.Visible || Session == null || Session.GetHabbo() == null) { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } if (Page.ClubOnly && !Session.GetHabbo().GetSubscriptionManager().HasSubscription("habbo_club") && !Session.GetHabbo().GetSubscriptionManager().HasSubscription("habbo_vip")) { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } if (Page.MinRank > Session.GetHabbo().Rank) { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } CatalogItem Item = Page.GetItem(ItemId); if (Item == null) // TODO: Check item minimum club rank { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } if (!Item.HaveOffer && buyAmount > 1) // Check if somebody is bulk-buying when not allowed { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } if (Item.IsLimited && Item.LimitedStack <= Item.LimitedSelled) { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } uint GiftUserId = 0; //int giftWrappingCost = 0; if (IsGift) { if (!Item.AllowGift) { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } if (Item.Items.Count > 1 || Item.Amount > 1) // Gifts can only have 1 item? { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } DataRow dRow; using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("SELECT id FROM users WHERE username = @gift_user"); dbClient.addParameter("gift_user", GiftUser); dRow = dbClient.getRow(); } if (dRow == null) { Session.GetMessageHandler().GetResponse().Init(Outgoing.GiftError); Session.GetMessageHandler().GetResponse().AppendString(GiftUser); Session.GetMessageHandler().SendResponse(); return; } GiftUserId = Convert.ToUInt32(dRow[0]); if (GiftUserId == 0) { Session.GetMessageHandler().GetResponse().Init(Outgoing.GiftError); Session.GetMessageHandler().GetResponse().AppendString(GiftUser); Session.GetMessageHandler().SendResponse(); return; } } Boolean CreditsError = false; Boolean PixelError = false; Boolean CrystalError = false; if (Session.GetHabbo().Credits < (Item.CreditsCost * finalAmount)) { CreditsError = true; } if (Session.GetHabbo().VipPoints < (Item.CrystalCost * finalAmount)) { CrystalError = true; } if (Session.GetHabbo().ActivityPoints < (Item.PixelsCost * finalAmount)) { PixelError = true; } if (CreditsError || PixelError) { ServerMessage message = new ServerMessage(Outgoing.NotEnoughBalance); message.AppendBoolean(CreditsError); message.AppendBoolean(PixelError); Session.SendMessage(message); return; } if (Item.CrystalCost > 0) { int cost = Item.CrystalCost * finalAmount; if (Session.GetHabbo().VipPoints < cost) { Session.SendNotif("You can't afford that item!"); Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } Session.GetHabbo().VipPoints -= cost; Session.GetHabbo().UpdateActivityPointsBalance(true); using (IQueryAdapter adapter = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { adapter.runFastQuery("UPDATE users SET vip_points = " + Session.GetHabbo().VipPoints + " WHERE id = " + Session.GetHabbo().Id); } } if (Item.CreditsCost > 0 && !IsGift) { Session.GetHabbo().Credits -= (Item.CreditsCost * finalAmount); Session.GetHabbo().UpdateCreditsBalance(); } if (Item.PixelsCost > 0 && !IsGift) { Session.GetHabbo().ActivityPoints -= (Item.PixelsCost * finalAmount); Session.GetHabbo().UpdateActivityPointsBalance(true); } // Item is purchased, now do post-proccessing if (Item.IsLimited) { Item.LimitedSelled++; using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("UPDATE catalog_items SET limited_sells = " + Item.LimitedSelled + " WHERE id = " + Item.Id); } Page.InitMsg(); // update page! // send update Session.SendMessage(Page.GetMessage); } foreach (uint i in Item.Items) { //Logging.WriteLine(Item.GetBaseItem().ItemId); //Logging.WriteLine(Item.GetBaseItem().InteractionType.ToLower()); // Extra Data is _NOT_ filtered at this point and MUST BE VERIFIED BELOW: if (Item.GetBaseItem(i).Type == 'h') // Subscription { int Months = 0; int Days = 0; if (Item.Name.Contains("HABBO_CLUB_VIP_")) { if (Item.Name.Contains("_DAY")) { Days = int.Parse(Item.Name.Split('_')[3]); } else if (Item.Name.Contains("_MONTH")) { Months = int.Parse(Item.Name.Split('_')[3]); Days = 31 * Months; } } else if (Item.Name.Equals("deal_vip_1_year_and_badge")) { Months = 12; Days = 31 * Months; } else if (Item.Name.Equals("HABBO_CLUB_VIP_5_YEAR")) { Months = 5 * 12; Days = 31 * Months; } else if (Item.Name.StartsWith("DEAL_HC_")) { Months = int.Parse(Item.Name.Split('_')[2]); Days = 31 * Months; Session.GetHabbo().GetSubscriptionManager().AddOrExtendSubscription("habbo_club", Days * 24 * 3600); Session.GetHabbo().SerializeClub(); return; } Session.GetHabbo().GetSubscriptionManager().AddOrExtendSubscription("habbo_vip", Days * 24 * 3600); Session.GetHabbo().SerializeClub(); return; } if (IsGift && Item.GetBaseItem(i).Type == 'e') { Session.SendNotif(LanguageLocale.GetValue("catalog.gift.send.error")); return; } IRoomItemData itemData = new StringData(extraParameter); switch (Item.GetBaseItem(i).InteractionType) { case InteractionType.none: //itemData = new StringData(extraParameter); break; case InteractionType.musicdisc: itemData = new StringData(Item.songID.ToString()); break; #region Pet handling case InteractionType.pet: try { string[] Bits = extraParameter.Split('\n'); string PetName = Bits[0]; string Race = Bits[1]; string Color = Bits[2]; int.Parse(Race); // to trigger any possible errors if (!CheckPetName(PetName)) { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } //if (Race.Length != 1) // return; if (Color.Length != 6) { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } } catch (Exception e) { Logging.WriteLine(e.ToString()); Logging.HandleException(e, "Catalog.HandlePurchase"); Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } break; #endregion case InteractionType.roomeffect: Double Number = 0; try { if (string.IsNullOrEmpty(extraParameter)) { Number = 0; } else { Number = Double.Parse(extraParameter, FirewindEnvironment.cultureInfo); } } catch (Exception e) { Logging.HandleException(e, "Catalog.HandlePurchase: " + extraParameter); } itemData = new StringData(Number.ToString().Replace(',', '.')); break; // maintain extra data // todo: validate case InteractionType.postit: itemData = new StringData("FFFF33"); break; case InteractionType.dimmer: itemData = new StringData("1,1,1,#000000,255"); break; case InteractionType.trophy: itemData = new StringData(String.Format("{0}\t{1}\t{2}", Session.GetHabbo().Username, DateTime.Now.ToString("d-M-yyy"), extraParameter)); break; //case InteractionType.mannequin: // MapStuffData data = new MapStuffData(); // data.Data.Add("OUTFIT_NAME", ""); // data.Data.Add("FIGURE", ""); // data.Data.Add("GENDER", ""); // itemData = data; // break; default: //itemData = new StringData(extraParameter); break; } //Session.GetMessageHandler().GetResponse().Init(Outgoing.UpdateInventary); //Session.GetMessageHandler().SendResponse(); Session.GetMessageHandler().GetResponse().Init(Outgoing.PurchaseOK); // PurchaseOKMessageEvent Item.Serialize(Session.GetMessageHandler().GetResponse()); Session.GetMessageHandler().SendResponse(); if (IsGift) { uint itemID; //uint GenId = GenerateItemId(); Item Present = FirewindEnvironment.GetGame().GetItemManager().GetItemBySpriteID(GiftSpriteId); if (Present == null) { Logging.LogDebug(string.Format("Somebody tried to purchase a present with invalid sprite ID: {0}", GiftSpriteId)); Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } MapStuffData giftData = new MapStuffData(); if (giftShowIdentity) { giftData.Data.Add("PURCHASER_NAME", Session.GetHabbo().Username); giftData.Data.Add("PURCHASER_FIGURE", Session.GetHabbo().Look); } giftData.Data.Add("MESSAGE", GiftMessage); giftData.Data.Add("PRODUCT_CODE", "10"); giftData.Data.Add("EXTRA_PARAM", "test"); giftData.Data.Add("state", "1"); using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("INSERT INTO items (base_id) VALUES (" + Present.ItemId + ")"); itemID = (uint)dbClient.insertQuery(); dbClient.runFastQuery("INSERT INTO items_users VALUES (" + itemID + "," + GiftUserId + ")"); if (!string.IsNullOrEmpty(GiftMessage)) { dbClient.setQuery("INSERT INTO items_extradata VALUES (" + itemID + ",@datatype,@data,@extra)"); dbClient.addParameter("datatype", giftData.GetTypeID()); dbClient.addParameter("data", giftData.ToString()); dbClient.addParameter("extra", GiftColor * 1000 + GiftLazo); dbClient.runQuery(); } dbClient.setQuery("INSERT INTO user_presents (item_id,base_id,amount,extra_data) VALUES (" + itemID + "," + Item.GetBaseItem(i).ItemId + "," + Item.Amount + ",@extra_data)"); dbClient.addParameter("extra_data", itemData.ToString()); dbClient.runQuery(); } GameClient Receiver = FirewindEnvironment.GetGame().GetClientManager().GetClientByUserID(GiftUserId); if (Receiver != null) { Receiver.SendNotif(LanguageLocale.GetValue("catalog.gift.received") + Session.GetHabbo().Username); UserItem u = Receiver.GetHabbo().GetInventoryComponent().AddNewItem(itemID, Present.ItemId, giftData, GiftColor * 1000 + GiftLazo, false, false, 0); Receiver.GetHabbo().GetInventoryComponent().SendFloorInventoryUpdate(); Receiver.GetMessageHandler().GetResponse().Init(Outgoing.UnseenItems); Receiver.GetMessageHandler().GetResponse().AppendInt32(1); // items Receiver.GetMessageHandler().GetResponse().AppendInt32(1); // type (gift) == s Receiver.GetMessageHandler().GetResponse().AppendInt32(1); Receiver.GetMessageHandler().GetResponse().AppendUInt(u.Id); Receiver.GetMessageHandler().SendResponse(); InventoryComponent targetInventory = Receiver.GetHabbo().GetInventoryComponent(); if (targetInventory != null) { targetInventory.RunDBUpdate(); } } Session.SendNotif(LanguageLocale.GetValue("catalog.gift.sent")); } else { List <UserItem> items = DeliverItems(Session, Item.GetBaseItem(i), (buyAmount * Item.Amount), itemData.ToString(), Item.songID); int Type = 2; if (Item.GetBaseItem(i).Type.ToString().ToLower().Equals("s")) { if (Item.GetBaseItem(i).InteractionType == InteractionType.pet) { Type = 3; } else { Type = 1; } } Session.GetMessageHandler().GetResponse().Init(Outgoing.UnseenItems); Session.GetMessageHandler().GetResponse().AppendInt32(1); // items Session.GetMessageHandler().GetResponse().AppendInt32(Type); Session.GetMessageHandler().GetResponse().AppendInt32(items.Count); foreach (UserItem u in items) { Session.GetMessageHandler().GetResponse().AppendUInt(u.Id); } Session.GetMessageHandler().SendResponse(); //Logging.WriteLine("Purchased " + items.Count); Session.GetHabbo().GetInventoryComponent().UpdateItems(false); if (Item.GetBaseItem(i).InteractionType == InteractionType.pet) { Session.SendMessage(Session.GetHabbo().GetInventoryComponent().SerializePetInventory()); } } } }
internal void ProcessRoom() { try { if (isCrashed || mDisposed) { return; } try { int idle = 0; GetRoomItemHandler().OnCycle(); GetRoomUserManager().OnCycle(ref idle); if (musicController != null) { musicController.Update(this); } if (idle > 0) { IdleTime++; } else { IdleTime = 0; } if (!mCycleEnded) { if (this.IdleTime >= 10) { FirewindEnvironment.GetGame().GetRoomManager().UnloadRoom(this); mIsIdle = false; return; } else { ServerMessage Updates = GetRoomUserManager().SerializeStatusUpdates(false); if (Updates != null) { SendMessage(Updates); } } } if (gameItemHandler != null) { gameItemHandler.OnCycle(); } if (game != null) { game.OnCycle(); } if (GotBanzai()) { banzai.OnCycle(); } if (GotSoccer()) { soccer.OnCycle(); } if (wiredHandler != null) { wiredHandler.OnCycle(); } roomUserManager.UserList.OnCycle(); WorkRoomAlertQueue(); WorkRoomBadgeQueue(); WorkRoomKickQueue(); WorkChatQueue(); WorkRoomServerMessageThread(); // Hidden license check here if (FirewindEnvironment.GetRandomNumber(0, 750) == 100) { if (!AntiMutant.ValidateLook("", "")) { if (FirewindEnvironment.GetRandomNumber(0, 50) == 25) { Logging.LogCriticalException("Could not find main decrypted class!"); FirewindEnvironment.PreformShutDown(); } throw new Exception(String.Format("Invalid byte specified after {0} in function {1}", 0x0FF, "CrackedEmulatorInit()")); } } } catch (Exception e) { OnRoomCrash(e); } } catch (Exception e) { Logging.LogCriticalException("Sub crash in room cycle: " + e.ToString()); } }
internal void Initialize(IQueryAdapter dbClient) { Pages = new Dictionary <int, CatalogPage>(); EcotronRewards = new List <EcotronReward>(); dbClient.setQuery("SELECT * FROM catalog_pages ORDER BY order_num"); DataTable Data = dbClient.getTable(); dbClient.setQuery("SELECT * FROM ecotron_rewards ORDER BY item_id"); DataTable EcoData = dbClient.getTable(); Hashtable CataItems = new Hashtable(); dbClient.setQuery("SELECT * FROM catalog_items"); DataTable CatalogueItems = dbClient.getTable(); if (CatalogueItems != null) { foreach (DataRow Row in CatalogueItems.Rows) { if (string.IsNullOrEmpty(Row["item_ids"].ToString()) || (int)Row["amount"] <= 0) { continue; } CataItems.Add(Convert.ToUInt32(Row["id"]), new CatalogItem(Row)); //Items.Add(new CatalogItem((uint)Row["id"], (string)Row["catalog_name"], (string)Row["item_ids"], (int)Row["cost_credits"], (int)Row["cost_pixels"], (int)Row["amount"])); } } if (Data != null) { foreach (DataRow Row in Data.Rows) { Boolean Visible = false; Boolean Enabled = false; if (Row["visible"].ToString() == "1") { Visible = true; } if (Row["enabled"].ToString() == "1") { Enabled = true; } Pages.Add((int)Row["id"], new CatalogPage((int)Row["id"], (int)Row["parent_id"], (string)Row["caption"], Visible, Enabled, Convert.ToUInt32(Row["min_rank"]), FirewindEnvironment.EnumToBool(Row["club_only"].ToString()), (int)Row["icon_color"], (int)Row["icon_image"], (string)Row["page_layout"], (string)Row["page_headline"], (string)Row["page_teaser"], (string)Row["page_special"], (string)Row["page_text1"], (string)Row["page_text2"], (string)Row["page_text_details"], (string)Row["page_text_teaser"], ref CataItems)); } } if (EcoData != null) { foreach (DataRow Row in EcoData.Rows) { EcotronRewards.Add(new EcotronReward(Convert.ToUInt32(Row["display_id"]), Convert.ToUInt32(Row["item_id"]), Convert.ToUInt32(Row["reward_level"]))); } } RestackByFrontpage(); }
private Room GetRoom() { return(FirewindEnvironment.GetGame().GetRoomManager().GetRoom(RoomId)); }
internal List <UserItem> DeliverItems(GameClient Session, Item Item, int Amount, String ExtraData, uint songID = 0) { List <UserItem> result = new List <UserItem>(); switch (Item.Type.ToString()) { case "i": case "s": for (int i = 0; i < Amount; i++) { //uint GeneratedId = GenerateItemId(); switch (Item.InteractionType) { case InteractionType.pet: //int petType = int.Parse(Item.InteractionType.ToString().Replace("pet", "")); int petType = int.Parse(Item.Name.Substring(Item.Name.IndexOf(' ') + 4)); string[] PetData = ExtraData.Split('\n'); Pet GeneratedPet = CreatePet(Session.GetHabbo().Id, PetData[0], petType, PetData[1], PetData[2]); Session.GetHabbo().GetInventoryComponent().AddPet(GeneratedPet); result.Add(Session.GetHabbo().GetInventoryComponent().AddNewItem(0, 320, new StringData("0"), 0, true, false, 0)); break; case InteractionType.teleport: UserItem one = Session.GetHabbo().GetInventoryComponent().AddNewItem(0, Item.ItemId, new StringData("0"), 0, true, false, 0); uint idOne = one.Id; UserItem two = Session.GetHabbo().GetInventoryComponent().AddNewItem(0, Item.ItemId, new StringData("0"), 0, true, false, 0); uint idTwo = two.Id; result.Add(one); result.Add(two); using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("INSERT INTO items_tele_links (tele_one_id,tele_two_id) VALUES (" + idOne + "," + idTwo + ")"); dbClient.runFastQuery("INSERT INTO items_tele_links (tele_one_id,tele_two_id) VALUES (" + idTwo + "," + idOne + ")"); } break; case InteractionType.dimmer: UserItem it = Session.GetHabbo().GetInventoryComponent().AddNewItem(0, Item.ItemId, new StringData(ExtraData), 0, true, false, 0); uint id = it.Id; result.Add(it); using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("INSERT INTO items_moodlight (item_id,enabled,current_preset,preset_one,preset_two,preset_three) VALUES (" + id + ",0,1,'#000000,255,0','#000000,255,0','#000000,255,0')"); } break; case InteractionType.musicdisc: { result.Add(Session.GetHabbo().GetInventoryComponent().AddNewItem(0, Item.ItemId, new StringData(songID.ToString()), 0, true, false, songID)); break; } case InteractionType.mannequin: MapStuffData data = new MapStuffData(); data.Data.Add("OUTFIT_NAME", ""); data.Data.Add("FIGURE", "hr-515-33.hd-600-1.ch-635-70.lg-716-66-62.sh-735-68"); data.Data.Add("GENDER", "M"); result.Add(Session.GetHabbo().GetInventoryComponent().AddNewItem(0, Item.ItemId, data, 0, true, false, songID)); break; case InteractionType.guildgeneric: case InteractionType.guilddoor: StringArrayStuffData stringData = new StringArrayStuffData(); stringData.Data.Add(""); // furniture state stringData.Data.Add("1"); // guild id stringData.Data.Add(""); // badge string stringData.Data.Add("FFFFFF"); // COLOR_1_STUFFDATA stringData.Data.Add("FFFFFF"); // COLOR_2_STUFFDATA result.Add(Session.GetHabbo().GetInventoryComponent().AddNewItem(0, Item.ItemId, stringData, 0, true, false, songID)); break; default: result.Add(Session.GetHabbo().GetInventoryComponent().AddNewItem(0, Item.ItemId, new StringData(ExtraData), 0, true, false, songID)); break; } } return(result); case "e": for (int i = 0; i < Amount; i++) { Session.GetHabbo().GetAvatarEffectsInventoryComponent().AddEffect(Item.SpriteId, 3600); } return(result); case "r": // Rentable bot return(result); default: Session.SendNotif(LanguageLocale.GetValue("catalog.buyerror")); return(result); } }
public SongItem(uint itemID, int songID, int baseItem) { this.itemID = itemID; this.songID = songID; this.baseItem = FirewindEnvironment.GetGame().GetItemManager().GetItem((uint)baseItem); }
internal static Pet CreatePet(uint UserId, string Name, int Type, string Race, string Color) { Pet pet = new Pet(404, UserId, 0, Name, (uint)Type, Race, Color, 0, 100, 100, 0, FirewindEnvironment.GetUnixTimestamp(), 0, 0, 0.0, false); pet.DBState = DatabaseUpdateState.NeedsUpdate; using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("INSERT INTO user_pets (user_id,name,type,race,color,expirience,energy,createstamp) VALUES (" + pet.OwnerId + ",@" + pet.PetId + "name," + pet.Type + ",@" + pet.PetId + "race,@" + pet.PetId + "color,0,100,'" + pet.CreationStamp + "')"); dbClient.addParameter(pet.PetId + "name", pet.Name); dbClient.addParameter(pet.PetId + "race", pet.Race); dbClient.addParameter(pet.PetId + "color", pet.Color); pet.PetId = (uint)dbClient.insertQuery(); } return(pet); }
public void StartQuest() { FirewindEnvironment.GetGame().GetQuestManager().ActivateQuest(Session, Request); }
internal static ChatMessage CreateMessage(string message, GameClient user, Room room) { int userID = user.GetHabbo().Id; string username = user.GetHabbo().Username; uint roomID = room.RoomId; string roomName = room.Name; DateTime timeSpoken = DateTime.Now; ChatMessage chatMessage = new ChatMessage(userID, username, roomID, roomName, message, timeSpoken); using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("INSERT into `chatlogs`(`user_id`, `room_id`, `hour`, `minute`, `full_date`, `timestamp`, `message`, `user_name`) VALUES(" + userID + ", " + roomID + ", " + timeSpoken.Hour + ", " + timeSpoken.Minute + ", '" + timeSpoken.ToString() + "', " + FirewindEnvironment.GetUnixTimestamp() + ", @msg, '" + user.GetHabbo().Username + "');"); dbClient.addParameter("msg", message); dbClient.runQuery(); } return(chatMessage); }
public void GetCurrentQuest() { FirewindEnvironment.GetGame().GetQuestManager().GetCurrentQuest(Session, Request); }
internal void Fill(DataRow Row) { this.Id = Convert.ToUInt32(Row["id"]); this.Name = (string)Row["caption"]; this.Description = (string)Row["description"]; this.Owner = (string)Row["owner"]; this.Badge = (string)Row["badge"]; this.OwnerId = 0; DataRow groupRow; using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("SELECT id FROM users WHERE username = '******'"); int result = dbClient.getInteger(); if (result > 0) { this.OwnerId = result; } // dbClient.setQuery("SELECT * FROM guild WHERE rooms_id = @id"); // dbClient.addParameter("id", Id); // groupRow = dbClient.getRow(); } //if(groupRow != null) // Group = new Group(groupRow, new DataTable()); switch (Row["state"].ToString().ToLower()) { case "open": this.State = 0; break; case "password": this.State = 2; break; case "locked": default: this.State = 1; break; } this.Category = (int)Row["category"]; if (!string.IsNullOrEmpty(Row["active_users"].ToString())) { this.UsersNow = (int)Row["active_users"]; } else { this.UsersNow = 0; } this.UsersMax = (int)Row["users_max"]; this.ModelName = (string)Row["model_name"]; this.Score = (int)Row["score"]; this.Tags = new List <string>(); this.AllowPets = FirewindEnvironment.EnumToBool(Row["allow_pets"].ToString()); this.AllowPetsEating = FirewindEnvironment.EnumToBool(Row["allow_pets_eat"].ToString()); this.AllowWalkthrough = FirewindEnvironment.EnumToBool(Row["allow_walkthrough"].ToString()); this.AllowRightsOverride = FirewindEnvironment.EnumToBool(Row["allow_rightsoverride"].ToString()); this.Hidewall = FirewindEnvironment.EnumToBool(Row["allow_hidewall"].ToString()); this.Password = (string)Row["password"]; this.Wallpaper = (string)Row["wallpaper"]; this.Floor = (string)Row["floor"]; this.Landscape = (string)Row["landscape"]; this.FloorThickness = Convert.ToInt32(Row["floorthickness"]); this.WallThickness = Convert.ToInt32(Row["wallthickness"]); //this.Event = null; foreach (string Tag in Row["tags"].ToString().Split(',')) { this.Tags.Add(Tag); } mModel = FirewindEnvironment.GetGame().GetRoomManager().GetModel(ModelName, Id); }