internal void LoadFurniture() { //this.Items.Clear(); this.mFloorItems.Clear(); this.mWallItems.Clear(); DataTable Data; using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("CALL getroomitems(@roomid)"); dbClient.addParameter("roomid", room.RoomId); Data = dbClient.getTable(); uint itemID; decimal x; decimal y; sbyte n; uint baseID; int dataType; string extradata; WallCoordinate wallCoord; int extra; foreach (DataRow dRow in Data.Rows) { itemID = Convert.ToUInt32(dRow[0]); x = Convert.ToDecimal(dRow[1]); y = Convert.ToDecimal(dRow[2]); n = Convert.ToSByte(dRow[3]); baseID = Convert.ToUInt32(dRow[4]); IRoomItemData data; if (DBNull.Value.Equals(dRow[5])) { data = new StringData(""); extra = 0; } else { dataType = Convert.ToInt32(dRow[5]); extradata = (string)dRow[6]; extra = Convert.ToInt32(dRow[7]); switch (dataType) { case 0: data = new StringData(extradata); break; case 1: data = new MapStuffData(); break; case 2: data = new StringArrayStuffData(); break; case 3: data = new StringIntData(); break; default: data = new StringData(extradata); break; } try { data.Parse(extradata); } catch { Logging.LogException(string.Format("Error in furni data! Item ID: \"{0}\" and data: \"{1}\"", itemID, extradata.Replace(Convert.ToChar(1).ToString(), "[1]"))); dbClient.runFastQuery(string.Format("DELETE FROM items_extradata WHERE item_id = {0}", itemID)); } } if (FirewindEnvironment.GetGame().GetItemManager().GetItem(baseID).Type == 'i') // Is wallitem { wallCoord = new WallCoordinate((double)x, (double)y, n); RoomItem item = new RoomItem(itemID, room.RoomId, baseID, data, extra, wallCoord, room); if (!mWallItems.ContainsKey(itemID)) { mWallItems.Inner.Add(itemID, item); } } else //Is flooritem { int coordX, coordY; TextHandling.Split((double)x, out coordX, out coordY); RoomItem item = new RoomItem(itemID, room.RoomId, baseID, data, extra, coordX, coordY, (double)y, n, room); if (!mFloorItems.ContainsKey(itemID)) { mFloorItems.Inner.Add(itemID, item); } } } foreach (RoomItem Item in mFloorItems.Values) { if (Item.IsRoller) { mGotRollers = true; } else if (Item.GetBaseItem().InteractionType == Firewind.HabboHotel.Items.InteractionType.dimmer) { if (room.MoodlightData == null) { room.MoodlightData = new MoodlightData(Item.Id); } } else if (WiredUtillity.TypeIsWired(Item.GetBaseItem().InteractionType)) { WiredLoader.LoadWiredItem(Item, room, dbClient); room.GetWiredHandler().AddWire(Item, Item.Coordinate, Item.Rot, Item.GetBaseItem().InteractionType); } } } }
internal static UserData GetUserData(string sessionTicket, string ip, out byte errorCode) { DataRow dUserInfo; DataTable dAchievements; DataTable dFavouriteRooms; DataTable dIgnores; DataTable dTags; DataTable dSubscriptions; DataTable dBadges; DataTable dInventory; DataTable dEffects; DataTable dFriends; DataTable dRequests; DataTable dRooms; DataTable dPets; DataTable dQuests; //DataTable dSongs; DataTable dGroups = null; UInt32 userID; using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { if (FirewindEnvironment.useSSO) { dbClient.setQuery("SELECT * " + "FROM users " + "WHERE auth_ticket = @sso "); } else { dbClient.setQuery("SELECT * " + "FROM users " + "WHERE auth_ticket = @sso "); } dbClient.addParameter("sso", sessionTicket); //dbClient.addParameter("ipaddress", ip); dUserInfo = dbClient.getRow(); if (dUserInfo == null) { errorCode = 1; return null; //Logging.LogException("No user found. Debug data: [" + sessionTicket + "], [" + ip + "]"); //throw new UserDataNotFoundException(string.Format("No user found with ip {0} and sso {1}. Use SSO: {2} ", ip, sessionTicket, FirewindEnvironment.useSSO.ToString())); } userID = Convert.ToUInt32(dUserInfo["id"]); if (FirewindEnvironment.GetGame().GetClientManager().GetClientByUserID(userID) != null) { errorCode = 2; return null; } string creditsTimestamp = (string)dUserInfo["lastdailycredits"]; string todayTimestamp = DateTime.Today.ToString("MM/dd"); if (creditsTimestamp != todayTimestamp) { dbClient.runFastQuery("UPDATE users SET credits = credits + 3000, daily_respect_points = 3, lastdailycredits = '" + todayTimestamp + "' WHERE id = " + userID); dUserInfo["credits"] = (int)dUserInfo["credits"] + 3000; } dbClient.setQuery("SELECT * FROM user_achievement WHERE userid = " + userID); dAchievements = dbClient.getTable(); dbClient.setQuery("SELECT room_id FROM user_favorites WHERE user_id = " + userID); dFavouriteRooms = dbClient.getTable(); dbClient.setQuery("SELECT ignore_id FROM user_ignores WHERE user_id = " + userID); dIgnores = dbClient.getTable(); dbClient.setQuery("SELECT tag FROM user_tags WHERE user_id = " + userID); dTags = dbClient.getTable(); dbClient.setQuery("SELECT * FROM user_subscriptions WHERE user_id = " + userID); dSubscriptions = dbClient.getTable(); dbClient.setQuery("SELECT * FROM user_badges WHERE user_id = " + userID); dBadges = dbClient.getTable(); dbClient.setQuery("CALL getuseritems(" + userID + ")"); dInventory = dbClient.getTable(); dbClient.setQuery("SELECT * FROM user_effects WHERE user_id = " + userID); dEffects = dbClient.getTable(); dbClient.setQuery("SELECT users.id,users.username,users.motto,users.look,users.last_online " + "FROM users " + "JOIN messenger_friendships " + "ON users.id = messenger_friendships.sender " + "WHERE messenger_friendships.receiver = " + userID + " " + "UNION ALL " + "SELECT users.id,users.username,users.motto,users.look,users.last_online " + "FROM users " + "JOIN messenger_friendships " + "ON users.id = messenger_friendships.receiver " + "WHERE messenger_friendships.sender = " + userID); dFriends = dbClient.getTable(); dbClient.setQuery("SELECT messenger_requests.sender,messenger_requests.receiver,users.username " + "FROM users " + "JOIN messenger_requests " + "ON users.id = messenger_requests.sender " + "WHERE messenger_requests.receiver = " + userID); dRequests = dbClient.getTable(); dbClient.setQuery("SELECT rooms.*, room_active.active_users FROM rooms LEFT JOIN room_active ON (room_active.roomid = rooms.id) WHERE owner = @name"); dbClient.addParameter("name", (string)dUserInfo["username"]); dRooms = dbClient.getTable(); dbClient.setQuery("SELECT * FROM user_pets WHERE user_id = " + userID + " AND room_id = 0"); dPets = dbClient.getTable(); dbClient.setQuery("SELECT * FROM user_quests WHERE user_id = " + userID + ""); dQuests = dbClient.getTable(); //dbClient.setQuery("SELECT item_id, song_id FROM user_items_songs WHERE user_id = " + userID); //dSongs = dbClient.getTable(); /* dbClient.setQuery("UPDATE users SET ip_last = @ip WHERE id = " + userID + " LIMIT 1; " + "UPDATE user_info SET login_timestamp = '" + FirewindEnvironment.GetUnixTimestamp() + "' WHERE user_id = " + userID + " LIMIT 1; " + "REPLACE INTO user_online VALUES (" + userID + "); " + "DELETE FROM user_tickets WHERE userid = " + userID + ";");*/ dbClient.setQuery("UPDATE users SET ip_last = @ip WHERE id = " + userID + "; " + "UPDATE user_info SET login_timestamp = '" + FirewindEnvironment.GetUnixTimestamp() + "' WHERE user_id = " + userID + " ; " + ""); dbClient.addParameter("ip", ip); dbClient.runQuery(); dbClient.runFastQuery("REPLACE INTO user_online VALUES (" + userID + ")"); } Dictionary<string, UserAchievement> achievements = new Dictionary<string, UserAchievement>(); string achievementGroup; int achievementLevel; int achievementProgress; foreach (DataRow dRow in dAchievements.Rows) { achievementGroup = (string)dRow["group"]; achievementLevel = (int)dRow["level"]; achievementProgress = (int)dRow["progress"]; UserAchievement achievement = new UserAchievement(achievementGroup, achievementLevel, achievementProgress); achievements.Add(achievementGroup, achievement); } List<uint> favouritedRooms = new List<uint>(); uint favoritedRoomID; foreach (DataRow dRow in dFavouriteRooms.Rows) { favoritedRoomID = Convert.ToUInt32(dRow["room_id"]); favouritedRooms.Add(favoritedRoomID); } List<uint> ignores = new List<uint>(); uint ignoredUserID; foreach (DataRow dRow in dIgnores.Rows) { ignoredUserID = Convert.ToUInt32(dRow["ignore_id"]); ignores.Add(ignoredUserID); } List<string> tags = new List<string>(); string tag; foreach (DataRow dRow in dTags.Rows) { tag = (string)dRow["tag"]; tags.Add(tag); } Dictionary<string, Subscription> subscriptions = new Dictionary<string, Subscription>(); string subscriptionID; int expireTimestamp; foreach (DataRow dRow in dSubscriptions.Rows) { subscriptionID = (string)dRow["subscription_id"]; expireTimestamp = (int)dRow["timestamp_expire"]; subscriptions.Add(subscriptionID, new Subscription(subscriptionID, expireTimestamp)); } List<Badge> badges = new List<Badge>(); string badgeID; int slotID; foreach (DataRow dRow in dBadges.Rows) { badgeID = (string)dRow["badge_id"]; slotID = (int)dRow["badge_slot"]; badges.Add(new Badge(badgeID, slotID)); } List<UserItem> inventory = new List<UserItem>(); uint itemID; uint baseItem; int dataType; string extradata; int extra; foreach (DataRow Row in dInventory.Rows) { itemID = Convert.ToUInt32(Row[0]); baseItem = Convert.ToUInt32(Row[1]); IRoomItemData data; if (DBNull.Value.Equals(Row[2])) { data = new StringData(""); extra = 0; } else { dataType = Convert.ToInt32(Row[2]); extradata = (string)Row[3]; extra = Convert.ToInt32(Row[4]); switch (dataType) { case 0: data = new StringData(extradata); break; case 1: data = new MapStuffData(); break; case 2: data = new StringArrayStuffData(); break; case 3: data = new StringIntData(); break; default: data = new StringData(extradata); break; } try { data.Parse(extradata); } catch { Logging.LogException(string.Format("Error in furni data! Item ID: \"{0}\" and data: \"{1}\"", itemID, extradata.Replace(Convert.ToChar(1).ToString(), "[1]"))); } } inventory.Add(new UserItem(itemID, baseItem, data, extra)); } List<AvatarEffect> effects = new List<AvatarEffect>(); int effectID; int duration; bool isActivated; double activatedTimeStamp; foreach (DataRow dRow in dEffects.Rows) { effectID = (int)dRow["effect_id"]; duration = (int)dRow["total_duration"]; isActivated = Convert.ToInt32(dRow["is_activated"]) == 1; activatedTimeStamp = (double)dRow["activated_stamp"]; effects.Add(new AvatarEffect(effectID, duration, isActivated, activatedTimeStamp)); } Dictionary<uint, MessengerBuddy> friends = new Dictionary<uint, MessengerBuddy>(); string username = (string)dUserInfo["username"]; UInt32 friendID; string friendName; string friendLook; string friendMotto; string friendLastOnline; foreach (DataRow dRow in dFriends.Rows) { friendID = Convert.ToUInt32(dRow["id"]); friendName = (string)dRow["username"]; friendLook = (string)dRow["look"]; friendMotto = (string)dRow["motto"]; friendLastOnline = Convert.ToString(dRow["last_online"]); if (friendID == userID) continue; if (!friends.ContainsKey(friendID)) friends.Add(friendID, new MessengerBuddy(friendID, friendName, friendLook, friendMotto, friendLastOnline)); } Dictionary<uint, MessengerRequest> requests = new Dictionary<uint, MessengerRequest>(); uint receiverID; uint senderID; string requestUsername; foreach (DataRow dRow in dRequests.Rows) { receiverID = Convert.ToUInt32(dRow["sender"]); senderID = Convert.ToUInt32(dRow["receiver"]); requestUsername = (string)dRow["username"]; if (receiverID != userID) { if (!requests.ContainsKey(receiverID)) requests.Add(receiverID, new MessengerRequest(userID, receiverID, requestUsername)); } else { if (!requests.ContainsKey(senderID)) requests.Add(senderID, new MessengerRequest(userID, senderID, requestUsername)); } } List<RoomData> rooms = new List<RoomData>(); uint roomID; foreach (DataRow dRow in dRooms.Rows) { roomID = Convert.ToUInt32(dRow["id"]); rooms.Add(FirewindEnvironment.GetGame().GetRoomManager().FetchRoomData(roomID, dRow)); } Dictionary<uint, Pet> pets = new Dictionary<uint, Pet>(); Pet pet; foreach (DataRow dRow in dPets.Rows) { pet = Catalog.GeneratePetFromRow(dRow); pets.Add(pet.PetId, pet); } Dictionary<uint, int> quests = new Dictionary<uint, int>(); uint questId; int progress; foreach (DataRow dRow in dQuests.Rows) { questId = Convert.ToUInt32(dRow["quest_id"]); progress = (int)dRow["progress"]; quests.Add(questId, progress); } Hashtable songs = new Hashtable(); //uint songItemID; //uint songID; //foreach (DataRow dRow in dSongs.Rows) //{ // songItemID = (uint)dRow[0]; // songID = (uint)dRow[1]; // SongItem song = new SongItem(songItemID, songID); // songs.Add(songItemID, song); //} Habbo user = HabboFactory.GenerateHabbo(dUserInfo, dGroups); dUserInfo = null; dAchievements = null; dFavouriteRooms = null; dIgnores = null; dTags = null; dSubscriptions = null; dBadges = null; dInventory = null; dEffects = null; dFriends = null; dRequests = null; dRooms = null; dPets = null; errorCode = 0; return new UserData(userID, achievements, favouritedRooms, ignores, tags, subscriptions, badges, inventory, effects, friends, requests, rooms, pets, quests, songs, user); }
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; } }
internal void LoadInventory() { floorItems.Clear(); wallItems.Clear(); DataTable Data; using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("CALL getuseritems(@userid)"); dbClient.addParameter("userid", (int)UserId); Data = dbClient.getTable(); //dbClient.setQuery("SELECT item_id, song_id FROM user_items_songs WHERE user_id = " + UserId); //dSongs = dbClient.getTable(); } uint id; uint baseitem; int dataType; string extradata; int extra; foreach (DataRow Row in Data.Rows) { id = Convert.ToUInt32(Row[0]); baseitem = Convert.ToUInt32(Row[1]); IRoomItemData data; if (DBNull.Value.Equals(Row[2])) { data = new StringData(""); extra = 0; } else { dataType = Convert.ToInt32(Row[2]); extradata = (string)Row[3]; extra = Convert.ToInt32(Row[4]); switch (dataType) { case 0: data = new StringData(extradata); break; case 1: data = new MapStuffData(); break; case 2: data = new StringArrayStuffData(); break; case 3: data = new StringIntData(); break; default: data = new StringData(extradata); break; } try { data.Parse(extradata); } catch { Logging.LogException(string.Format("Error in furni data! Item ID: \"{0}\" and data: \"{1}\"", id, extradata.Replace(Convert.ToChar(1).ToString(), "[1]"))); } } UserItem item = new UserItem(id, baseitem, data, extra); if (item.GetBaseItem().InteractionType == InteractionType.musicdisc) discs.Add(id, item); if (item.isWallItem) wallItems.Add(id, item); else floorItems.Add(id, item); } discs.Clear(); //uint songItemID; //uint songID; //foreach (DataRow dRow in dSongs.Rows) //{ // songItemID = (uint)dRow[0]; // songID = (uint)dRow[1]; // SongItem song = new SongItem(songItemID, songID); // songs.Add(songItemID, song); //} this.InventoryPets.Clear(); DataTable Data2; using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { //dbClient.addParameter("userid", UserId); dbClient.setQuery("SELECT id, user_id, room_id, name, type, race, color, expirience, energy, nutrition, respect, createstamp, x, y, z, have_saddle FROM user_pets WHERE user_id = " + UserId + " AND room_id = 0"); Data2 = dbClient.getTable(); } if (Data2 != null) { foreach (DataRow Row in Data2.Rows) { Pet newPet = Catalog.GeneratePetFromRow(Row); InventoryPets.Add(newPet.PetId, newPet); } } }
internal void LoadFurniture() { //this.Items.Clear(); this.mFloorItems.Clear(); this.mWallItems.Clear(); DataTable Data; using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("CALL getroomitems(@roomid)"); dbClient.addParameter("roomid", room.RoomId); Data = dbClient.getTable(); uint itemID; decimal x; decimal y; sbyte n; uint baseID; int dataType; string extradata; WallCoordinate wallCoord; int extra; foreach (DataRow dRow in Data.Rows) { itemID = Convert.ToUInt32(dRow[0]); x = Convert.ToDecimal(dRow[1]); y = Convert.ToDecimal(dRow[2]); n = Convert.ToSByte(dRow[3]); baseID = Convert.ToUInt32(dRow[4]); IRoomItemData data; if (DBNull.Value.Equals(dRow[5])) { data = new StringData(""); extra = 0; } else { dataType = Convert.ToInt32(dRow[5]); extradata = (string)dRow[6]; extra = Convert.ToInt32(dRow[7]); switch (dataType) { case 0: data = new StringData(extradata); break; case 1: data = new MapStuffData(); break; case 2: data = new StringArrayStuffData(); break; case 3: data = new StringIntData(); break; default: data = new StringData(extradata); break; } try { data.Parse(extradata); } catch { Logging.LogException(string.Format("Error in furni data! Item ID: \"{0}\" and data: \"{1}\"", itemID, extradata.Replace(Convert.ToChar(1).ToString(), "[1]"))); dbClient.runFastQuery(string.Format("DELETE FROM items_extradata WHERE item_id = {0}", itemID)); } } if (FirewindEnvironment.GetGame().GetItemManager().GetItem(baseID).Type == 'i') // Is wallitem { wallCoord = new WallCoordinate((double)x, (double)y, n); RoomItem item = new RoomItem(itemID, room.RoomId, baseID, data, extra, wallCoord, room); if (!mWallItems.ContainsKey(itemID)) mWallItems.Inner.Add(itemID, item); } else //Is flooritem { int coordX, coordY; TextHandling.Split((double)x, out coordX, out coordY); RoomItem item = new RoomItem(itemID, room.RoomId, baseID, data, extra, coordX, coordY, (double)y, n, room); if (!mFloorItems.ContainsKey(itemID)) mFloorItems.Inner.Add(itemID, item); } } foreach (RoomItem Item in mFloorItems.Values) { if (Item.IsRoller) mGotRollers = true; else if (Item.GetBaseItem().InteractionType == Firewind.HabboHotel.Items.InteractionType.dimmer) { if (room.MoodlightData == null) room.MoodlightData = new MoodlightData(Item.Id); } else if (WiredUtillity.TypeIsWired(Item.GetBaseItem().InteractionType)) { WiredLoader.LoadWiredItem(Item, room, dbClient); room.GetWiredHandler().AddWire(Item, Item.Coordinate, Item.Rot, Item.GetBaseItem().InteractionType); } } } }