internal static void TryRedeemVoucher(GameClient Session, string Code) { if (!IsValidCode(Code)) { ServerMessage Error = new ServerMessage(213); Error.AppendRawInt32(1); Session.SendMessage(Error); return; } int Value = GetVoucherValue(Code); TryDeleteVoucher(Code); Session.GetHabbo().Credits += Value; Session.GetHabbo().UpdateCreditsBalance(); Session.SendMessage(new ServerMessage(212)); }
internal void HandleRowchase(GameClient Session, int PageId, uint ItemId, string ExtraData, Boolean IsGift, string GiftUser, string GiftMessage) { CatalogPage Page; if (!Pages.TryGetValue(PageId, out Page)) return; if (Page == null || Page.ComingSoon || !Page.Enabled || !Page.Visible || Session == null || Session.GetHabbo() == null) { return; } if (Page.ClubOnly && !Session.GetHabbo().GetSubscriptionManager().HasSubscription("habbo_club")) { return; } if (Page.MinRank > Session.GetHabbo().Rank) { return; } CatalogItem Item = Page.GetItem(ItemId); if (Item == null) { return; } uint GiftUserId = 0; if (IsGift) { if (!Item.GetBaseItem().AllowGift) { return; } DataRow dRow; using (IQueryAdapter dbClient = PiciEnvironment.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(76); Session.GetMessageHandler().GetResponse().AppendBoolean(true); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(GiftUser); Session.GetMessageHandler().SendResponse(); return; } GiftUserId = Convert.ToUInt32(dRow[0]); if (GiftUserId == 0) { Session.GetMessageHandler().GetResponse().Init(76); Session.GetMessageHandler().GetResponse().AppendBoolean(true); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(GiftUser); Session.GetMessageHandler().SendResponse(); return; } } Boolean CreditsError = false; Boolean PixelError = false; if (Session.GetHabbo().Credits < Item.CreditsCost) { CreditsError = true; } if (Session.GetHabbo().ActivityPoints < Item.PixelsCost) { PixelError = true; } if (CreditsError || PixelError) { Session.GetMessageHandler().GetResponse().Init(68); Session.GetMessageHandler().GetResponse().AppendBoolean(CreditsError); Session.GetMessageHandler().GetResponse().AppendBoolean(PixelError); Session.GetMessageHandler().SendResponse(); return; } if (IsGift && Item.GetBaseItem().Type == 'e') { Session.SendNotif(LanguageLocale.GetValue("catalog.gift.send.error")); return; } if (Item.CrystalCost > 0) { int userCrystals = 0; using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("SELECT crystals FROM users WHERE id = " + Session.GetHabbo().Id); userCrystals = dbClient.getInteger(); } if (Item.CrystalCost > userCrystals) { Session.SendNotif(LanguageLocale.GetValue("catalog.crystalerror") + Item.CrystalCost); return; } userCrystals = userCrystals - Item.CrystalCost; Session.GetMessageHandler().GetResponse().Init(MessageComposerIds.ActivityPointsMessageComposer); Session.GetMessageHandler().GetResponse().AppendInt32(2); Session.GetMessageHandler().GetResponse().AppendInt32(4); Session.GetMessageHandler().GetResponse().AppendInt32(userCrystals); Session.GetMessageHandler().SendResponse(); using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("UPDATE users SET crystals = " + userCrystals + " WHERE id = " + Session.GetHabbo().Id); } Session.SendNotif(LanguageLocale.GetValue("catalog.crystalsbought") + userCrystals); } if (Item.Name.Contains("HABBO_CLUB")) { #region Purchase Club! // PAYmQHABBO_CLUB_BASIC_1_MONTHSCHHISGZvGSBSE[mQHABBO_CLUB_VIP_1_MONTHQFHIISGZvGSBSEXnQHABBO_CLUB_VIP_3_MONTHSPOHIKQW[vGIPFZmQHABBO_CLUB_BASIC_3_MONTHSQKHHKQW[vGIPF int TypeOfClub = 0; Subscription Sub; if (Session.GetHabbo().GetSubscriptionManager().HasSubscription("habbo_vip")) Sub = Session.GetHabbo().GetSubscriptionManager().GetSubscription("habbo_vip"); else if (Session.GetHabbo().GetSubscriptionManager().HasSubscription("habbo_club")) Sub = Session.GetHabbo().GetSubscriptionManager().GetSubscription("habbo_club"); else Sub = null; if (Item.Name == "HABBO_CLUB_BASIC_1_MONTH") { TypeOfClub = 1; } else if (Item.Name.Contains("HABBO_CLUB_BASIC_3")) { TypeOfClub = 2; } else if (Item.Name == "HABBO_CLUB_VIP_1_MONTH") { TypeOfClub = 3; } else if (Item.Name.Contains("HABBO_CLUB_VIP_3")) { TypeOfClub = 4; } else if (Item.Name == "HABBO_CLUB_UPGRADE_1") { TypeOfClub = 5; } else if (Item.Name == "HABBO_CLUB_UPGRADE_3") { TypeOfClub = 6; } if (TypeOfClub == 1) { Session.GetHabbo().GetSubscriptionManager().AddOrExtendSubscription("habbo_club", (60 * 60 * 24 * 31)); ServerMessage FuseRight = new ServerMessage(2); FuseRight.AppendInt32(1); Session.SendMessage(FuseRight); Session.GetMessageHandler().GetSubscriptionData(); } else if (TypeOfClub == 2) { Session.GetHabbo().GetSubscriptionManager().AddOrExtendSubscription("habbo_club", (60 * 60 * 24 * 31 * 3)); ServerMessage FuseRight = new ServerMessage(2); FuseRight.AppendInt32(1); Session.SendMessage(FuseRight); Session.GetMessageHandler().GetSubscriptionData(); } else if (TypeOfClub == 3) { Session.GetHabbo().GetSubscriptionManager().AddOrExtendSubscription("habbo_vip", (60 * 60 * 24 * 31)); ServerMessage FuseRight = new ServerMessage(2); FuseRight.AppendInt32(2); Session.SendMessage(FuseRight); Session.GetMessageHandler().GetSubscriptionData(); } else if (TypeOfClub == 4) { Session.GetHabbo().GetSubscriptionManager().AddOrExtendSubscription("habbo_vip", (60 * 60 * 24 * 31 * 3)); ServerMessage FuseRight = new ServerMessage(2); FuseRight.AppendInt32(2); Session.SendMessage(FuseRight); Session.GetMessageHandler().GetSubscriptionData(); } else if (TypeOfClub == 5) { Session.GetHabbo().GetSubscriptionManager().AddOrExtendSubscription("habbo_vip", (60 * 60 * 24 * 31)); ServerMessage FuseRight = new ServerMessage(2); FuseRight.AppendInt32(2); Session.SendMessage(FuseRight); Session.GetMessageHandler().GetSubscriptionData(); } else if (TypeOfClub == 6) { Session.GetHabbo().GetSubscriptionManager().AddOrExtendSubscription("habbo_vip", (60 * 60 * 24 * 31 * 3)); ServerMessage FuseRight = new ServerMessage(2); FuseRight.AppendInt32(2); Session.SendMessage(FuseRight); Session.GetMessageHandler().GetSubscriptionData(); } bool CreditsFail = false; bool PixelsFail = false; if (Session.GetHabbo().Credits < Item.CreditsCost) { CreditsFail = true; } if (CreditsFail || PixelsFail) { ServerMessage Failed = new ServerMessage(68); Failed.AppendBoolean(CreditsFail); Failed.AppendBoolean(PixelsFail); Session.SendMessage(Failed); return; } if (Item.CreditsCost > 0) { Session.GetHabbo().Credits -= Item.CreditsCost; Session.GetHabbo().UpdateCreditsBalance(); } ServerMessage PurchaseClub = new ServerMessage(67); //AC[mQHABBO_CLUB_VIP_1_MONTH{2}QFHHH{1} PurchaseClub.AppendUInt(Item.Id); PurchaseClub.AppendStringWithBreak(Item.Name); PurchaseClub.AppendInt32(Item.CreditsCost); PurchaseClub.AppendBoolean(true); PurchaseClub.AppendBoolean(false); PurchaseClub.AppendBoolean(false); Session.SendMessage(PurchaseClub); #endregion return; } if (Item.OudeCredits > 0) { int oudeCredits = 0; using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("SELECT belcredits FROM users WHERE id = " + Session.GetHabbo().Id); oudeCredits = dbClient.getInteger(); } if (Item.OudeCredits > oudeCredits) { Session.SendNotif(LanguageLocale.GetValue("catalog.oudebelcreditserror") + Item.OudeCredits); return; } oudeCredits = oudeCredits - Item.OudeCredits; using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("UPDATE users SET belcredits = " + oudeCredits + " WHERE id = " + Session.GetHabbo().Id); } Session.SendNotif(LanguageLocale.GetValue("catalog.oudebelcreditsok") + oudeCredits); } //Console.WriteLine(Item.GetBaseItem().ItemId); //Console.WriteLine(Item.GetBaseItem().InteractionType.ToLower()); // Extra Data is _NOT_ filtered at this point and MUST BE VERIFIED BELOW: switch (Item.GetBaseItem().InteractionType) { case InteractionType.none: ExtraData = ""; break; case InteractionType.musicdisc: ExtraData = Item.songID.ToString(); break; #region Pet handling case InteractionType.pet0: case InteractionType.pet1: case InteractionType.pet2: case InteractionType.pet3: case InteractionType.pet4: case InteractionType.pet5: case InteractionType.pet6: case InteractionType.pet7: case InteractionType.pet8: case InteractionType.pet9: case InteractionType.pet10: case InteractionType.pet11: case InteractionType.pet12: case InteractionType.pet14: case InteractionType.pet15: try { //uint count = 0; //using (IQueryAdapter dbClient = ButterflyEnvironment.GetDatabaseManager().getQueryreactor()) //{ // dbClient.setQuery("SELECT COUNT(*) FROM user_pets WHERE user_id = " + Session.GetHabbo().Id); // count = uint.Parse(dbClient.getString()); //} //if (count > 5) //{ // Session.SendNotif(LanguageLocale.GetValue("catalog.pets.maxpets")); // return; //} string[] Bits = ExtraData.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)) return; if (Race.Length != 1) return; if (Color.Length != 6) return; } catch (Exception e) { //Logging.WriteLine(e.ToString()); Logging.HandleException(e, "Catalog.HandleRowchase"); return; } break; #endregion case InteractionType.roomeffect: Double Number = 0; try { if (string.IsNullOrEmpty(ExtraData)) Number = 0; else Number = Double.Parse(ExtraData, PiciEnvironment.cultureInfo); } catch (Exception e) { Logging.HandleException(e, "Catalog.HandleRowchase: " + ExtraData); } ExtraData = Number.ToString().Replace(',', '.'); break; // maintain extra data // todo: validate case InteractionType.postit: ExtraData = "FFFF33"; break; case InteractionType.dimmer: ExtraData = "1,1,1,#000000,255"; break; case InteractionType.trophy: ExtraData = Session.GetHabbo().Username + Convert.ToChar(9) + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year + Convert.ToChar(9) + PiciEnvironment.FilterInjectionChars(ExtraData, true); break; default: ExtraData = ""; break; } if (Item.CreditsCost > 0) { Session.GetHabbo().Credits -= Item.CreditsCost; Session.GetHabbo().UpdateCreditsBalance(); } if (Item.PixelsCost > 0) { Session.GetHabbo().ActivityPoints -= Item.PixelsCost; Session.GetHabbo().UpdateActivityPointsBalance(true); } Session.GetMessageHandler().GetResponse().Init(101); Session.GetMessageHandler().SendResponse(); Session.GetMessageHandler().GetResponse().Init(67); Session.GetMessageHandler().GetResponse().AppendUInt(Item.GetBaseItem().ItemId); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(Item.GetBaseItem().Name); Session.GetMessageHandler().GetResponse().AppendInt32(Item.CreditsCost); Session.GetMessageHandler().GetResponse().AppendInt32(Item.PixelsCost); Session.GetMessageHandler().GetResponse().AppendInt32(0); Session.GetMessageHandler().GetResponse().AppendInt32(1); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(Item.GetBaseItem().Type.ToString().ToLower()); Session.GetMessageHandler().GetResponse().AppendInt32(Item.GetBaseItem().SpriteId); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(""); Session.GetMessageHandler().GetResponse().AppendInt32(1); Session.GetMessageHandler().GetResponse().AppendInt32(0); Session.GetMessageHandler().SendResponse(); if (IsGift) { uint itemID; //uint GenId = GenerateItemId(); Item Present = GeneratePresent(); using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { if (dbClient.dbType == DatabaseType.MSSQL) dbClient.setQuery("INSERT INTO items (base_id) OUTPUT INSERTED.* VALUES (" + Present.ItemId + ")"); else 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 + ",@data)"); dbClient.addParameter("data", GiftMessage); dbClient.runQuery(); } dbClient.setQuery("INSERT INTO user_presents (item_id,base_id,amount,extra_data) VALUES (" + itemID + "," + Item.GetBaseItem().ItemId + "," + Item.Amount + ",@extra_data)"); dbClient.addParameter("gift_message", "!" + GiftMessage); dbClient.addParameter("extra_data", ExtraData); dbClient.runQuery(); } GameClient Receiver = PiciEnvironment.GetGame().GetClientManager().GetClientByUserID(GiftUserId); if (Receiver != null) { Receiver.SendNotif(LanguageLocale.GetValue("catalog.gift.received") + Session.GetHabbo().Username); Receiver.GetHabbo().GetInventoryComponent().AddNewItem(itemID, Present.ItemId, ExtraData, false, false, 0); Receiver.GetHabbo().GetInventoryComponent().SendFloorInventoryUpdate(); InventoryComponent targetInventory = Receiver.GetHabbo().GetInventoryComponent(); if (targetInventory != null) targetInventory.RunDBUpdate(); } Session.SendNotif(LanguageLocale.GetValue("catalog.gift.sent")); } else { DeliverItems(Session, Item.GetBaseItem(), Item.Amount, ExtraData, Item.songID); } }
internal override void OnTrigger(GameClient Session, RoomItem Item, int Request, bool UserHasRights) { if (Session == null || Item == null) return; if (!UserHasRights) return; switch (Item.GetBaseItem().InteractionType) { #region Triggers case InteractionType.triggerwalkonfurni: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.triggergamestart: { ServerMessage message = new ServerMessage(650); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.triggerroomenter: { ServerMessage message = new ServerMessage(650); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(7); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.triggergameend: { ServerMessage message = new ServerMessage(650); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.triggertimer: { ServerMessage message = new ServerMessage(650); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(true); message.AppendBoolean(true); message.AppendBoolean(true); message.AppendInt32(3); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.triggerwalkofffurni: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.triggeronusersay: { ServerMessage message = new ServerMessage(650); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); Session.SendMessage(message); break; } case InteractionType.triggerscoreachieved: { ServerMessage message = new ServerMessage(650); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(true); message.AppendInt32(100); message.AppendBoolean(false); message.AppendInt32(10); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.triggerrepeater: { ServerMessage message = new ServerMessage(650); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(true); message.AppendInt32(10); message.AppendBoolean(false); message.AppendInt32(6); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.triggerstatechanged: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } #endregion #region Effects case InteractionType.actionposreset: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(true); message.AppendUInt(Item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); Session.SendMessage(message); break; } case InteractionType.actiongivescore: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendInt32(2); message.AppendInt32(5); message.AppendBoolean(true); message.AppendBoolean(false); message.AppendInt32(6); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.actionresettimer: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(true); message.AppendUInt(Item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); Session.SendMessage(message); break; } case InteractionType.actiontogglestate: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.actionshowmessage: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(7); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.actionteleportto: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.actionmoverotate: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendInt32(2); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(4); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } #endregion #region Add-ons case InteractionType.specialrandom: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.specialunseen: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } #endregion #region Conditions case InteractionType.conditiontimelessthan: case InteractionType.conditiontimemorethan: { ServerMessage message = new ServerMessage(652); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(true); message.AppendUInt(Item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); //message.AppendBoolean(false); //message.AppendBoolean(false); //message.AppendInt32(7); //message.AppendBoolean(false); //message.AppendBoolean(false); Session.SendMessage(message); break; } case InteractionType.conditionfurnishaveusers: { ServerMessage message = new ServerMessage(652); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(true); message.AppendBoolean(false); message.AppendBoolean(false); Session.SendMessage(message); break; } case InteractionType.conditionstatepos: { ServerMessage message = new ServerMessage(652); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(true); message.AppendBoolean(false); message.AppendBoolean(false); Session.SendMessage(message); break; } case InteractionType.conditiontriggeronfurni: { ServerMessage message = new ServerMessage(652); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); Session.SendMessage(message); break; } //Unknown: //2 radio + 5 selct #endregion } }
private static void AddToPlaylist(GameClient Session, ClientMessage Message) { Room Instance = Session.GetHabbo().CurrentRoom; if (Instance == null || !Instance.CheckRights(Session, true) || !Instance.GotMusicController() || Instance.GetRoomMusicController().PlaylistSize >= Instance.GetRoomMusicController().PlaylistCapacity) { return; } UserItem DiskUserItem = Session.GetHabbo().GetInventoryComponent().GetItem(Message.PopWiredUInt()); if (DiskUserItem == null || DiskUserItem.GetBaseItem().InteractionType != InteractionType.musicdisc) { return; } SongItem item = new SongItem(DiskUserItem); int NewOrder = Instance.GetRoomMusicController().AddDisk(item); if (NewOrder < 0) { return; } Session.GetHabbo().GetInventoryComponent().RemoveItem(item.itemID, true); Session.SendMessage(JukeboxComposer.Compose(Instance.GetRoomMusicController().PlaylistCapacity, Instance.GetRoomMusicController().Playlist.Values.ToList())); }
internal void SerializeOpenTickets(GameClient Session) { foreach (SupportTicket Ticket in Tickets) { if (Ticket.Status != TicketStatus.OPEN && Ticket.Status != TicketStatus.PICKED) { continue; } Session.SendMessage(Ticket.Serialize()); } }
private static void GetSongData(GameClient Session, ClientMessage Message) { int Amount = Message.PopWiredInt32(); List<SongData> Songs = new List<SongData>(); for (int i = 0; i < Amount; i++) { SongData Song = GetSong(Message.PopWiredUInt()); if (Song == null) continue; Songs.Add(Song); } Session.SendMessage(JukeboxComposer.Compose(Songs)); }
private static void RemoveFromPlaylist(GameClient Session, ClientMessage Message) { Room Instance = Session.GetHabbo().CurrentRoom; if (Instance == null || !Instance.GotMusicController() || !Instance.CheckRights(Session, true)) { return; } SongItem TakenItem = Instance.GetRoomMusicController().RemoveDisk(Message.PopWiredInt32()); // playlist will skip to the next item automatically if it has to if (TakenItem == null) { return; } Session.GetHabbo().GetInventoryComponent().AddNewItem(TakenItem.itemID, TakenItem.baseItem.ItemId, TakenItem.songID.ToString(), true, true); Session.SendMessage(JukeboxComposer.Compose(Session)); Session.SendMessage(JukeboxComposer.Compose(Instance.GetRoomMusicController().PlaylistCapacity, Instance.GetRoomMusicController().Playlist.Values.ToList())); }
private static void GetDisks(GameClient Session, ClientMessage Message) { Session.SendMessage(JukeboxComposer.Compose(Session)); }
private static void GetPlaylist(GameClient Session, ClientMessage Message) { Room Instance = Session.GetHabbo().CurrentRoom; if (Instance == null || !Instance.CheckRights(Session, true)) { return; } Session.SendMessage(JukeboxComposer.Compose(Instance.GetRoomMusicController().PlaylistCapacity, Instance.GetRoomMusicController().Playlist.Values.ToList())); }
internal void ActivateQuest(GameClient Session, ClientMessage Message) { Quest Quest = GetQuest(Message.PopWiredUInt()); if (Quest == null) { return; } using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { if (dbClient.dbType == Pici.Storage.Database.DatabaseType.MySQL) dbClient.runFastQuery("REPLACE INTO user_quests VALUES (" + Session.GetHabbo().Id + ", " + Quest.Id + ", 0)"); else dbClient.runFastQuery("IF NOT EXISTS (SELECT user_id FROM user_quests WHERE user_id = " + Session.GetHabbo().Id + " AND quest_id = " + Quest.Id + ") " + "INSERT INTO user_quests VALUES (" + Session.GetHabbo().Id + ", " + Quest.Id + ", 0)"); dbClient.runFastQuery("UPDATE users SET currentquestid = " + Quest.Id + " WHERE id = " + Session.GetHabbo().Id); } Session.GetHabbo().CurrentQuestId = Quest.Id; GetList(Session, null); Session.SendMessage(QuestStartedComposer.Compose(Session, Quest)); }
internal void CancelQuest(GameClient Session, ClientMessage Message) { Quest Quest = GetQuest(Session.GetHabbo().CurrentQuestId); if (Quest == null) { return; } using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("DELETE FROM user_quests WHERE user_id = " + Session.GetHabbo().Id + " AND quest_id = " + Quest.Id); } Session.SendMessage(QuestAbortedComposer.Compose()); GetList(Session, null); }
internal void ProgressUserQuest(GameClient Session, QuestType QuestType, uint EventData = 0) { if (Session == null || Session.GetHabbo() == null || Session.GetHabbo().CurrentQuestId <= 0) { return; } Quest UserQuest = GetQuest(Session.GetHabbo().CurrentQuestId); if (UserQuest == null || UserQuest.GoalType != QuestType) { return; } int CurrentProgress = Session.GetHabbo().GetQuestProgress(UserQuest.Id); int NewProgress = CurrentProgress; bool PassQuest = false; switch (QuestType) { default: NewProgress++; if (NewProgress >= UserQuest.GoalData) { PassQuest = true; } break; case QuestType.EXPLORE_FIND_ITEM: if (EventData != UserQuest.GoalData) return; NewProgress = (int)UserQuest.GoalData; PassQuest = true; break; } using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("UPDATE user_quests SET progress = " + NewProgress + " WHERE user_id = " + Session.GetHabbo().Id + " AND quest_id = " + UserQuest.Id); if (PassQuest) { dbClient.runFastQuery("UPDATE users SET currentquestid = 0 WHERE id = " + Session.GetHabbo().Id); //Quest NextQuest = GetNextQuestInSeries(UserQuest.Category, UserQuest.Number + 1); //if (NextQuest != null) // dbClient.runFastQuery("INSERT INTO user_quests (user_id, quest_id, progress) VALUES (" + Session.GetHabbo().Id + ", " + NextQuest.Id + ", 0)"); } } Session.GetHabbo().quests[Session.GetHabbo().CurrentQuestId] = NewProgress; Session.SendMessage(QuestStartedComposer.Compose(Session, UserQuest)); if (PassQuest) { Session.GetHabbo().CurrentQuestId = 0; Session.GetHabbo().LastCompleted = UserQuest.Id; Session.SendMessage(QuestCompletedComposer.Compose(Session, UserQuest)); Session.GetHabbo().ActivityPoints += UserQuest.Reward; Session.GetHabbo().UpdateActivityPointsBalance(false); GetList(Session, null); } }
internal void GetList(GameClient Session, ClientMessage Message) { Session.SendMessage(QuestListComposer.Compose(Session, quests.Values.ToList(), (Message != null))); }
internal void GetCurrentQuest(GameClient Session, ClientMessage Message) { if (!Session.GetHabbo().InRoom) { return; } Quest UserQuest = GetQuest(Session.GetHabbo().LastCompleted); Quest NextQuest = GetNextQuestInSeries(UserQuest.Category, UserQuest.Number + 1); if (NextQuest == null) { return; } using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { if (dbClient.dbType == Pici.Storage.Database.DatabaseType.MySQL) dbClient.runFastQuery("REPLACE INTO user_quests VALUES (" + Session.GetHabbo().Id + ", " + NextQuest.Id + ", 0)"); else dbClient.runFastQuery("IF NOT EXISTS (SELECT user_id FROM user_quests WHERE user_id = " + Session.GetHabbo().Id + " AND quest_id = " + NextQuest.Id + ") " + "INSERT INTO user_quests VALUES (" + Session.GetHabbo().Id + ", " + NextQuest.Id + ", 0)"); dbClient.runFastQuery("UPDATE users SET currentquestid = " + NextQuest.Id + " WHERE id = " + Session.GetHabbo().Id); } Session.GetHabbo().CurrentQuestId = NextQuest.Id; GetList(Session, null); Session.SendMessage(QuestStartedComposer.Compose(Session, NextQuest)); //Session.SendMessage(QuestStartedComposer.Compose(Session, NextQuest)); }
internal bool ProgressUserAchievement(GameClient Session, string AchievementGroup, int ProgressAmount) { if (!Achievements.ContainsKey(AchievementGroup)) { return false; } Achievement AchievementData = null; AchievementData = Achievements[AchievementGroup]; UserAchievement UserData = Session.GetHabbo().GetAchievementData(AchievementGroup); if (UserData == null) { UserData = new UserAchievement(AchievementGroup, 0, 0); Session.GetHabbo().Achievements.Add(AchievementGroup, UserData); } int TotalLevels = AchievementData.Levels.Count; if (UserData != null && UserData.Level == TotalLevels) { return false; // done, no more. } int TargetLevel = (UserData != null ? UserData.Level + 1 : 1); if (TargetLevel > TotalLevels) { TargetLevel = TotalLevels; } AchievementLevel TargetLevelData = AchievementData.Levels[TargetLevel]; int NewProgress = (UserData != null ? UserData.Progress + ProgressAmount : ProgressAmount); int NewLevel = (UserData != null ? UserData.Level : 0); int NewTarget = NewLevel + 1; if (NewTarget > TotalLevels) { NewTarget = TotalLevels; } if (NewProgress >= TargetLevelData.Requirement) { NewLevel++; NewTarget++; int ProgressRemainder = NewProgress - TargetLevelData.Requirement; NewProgress = 0; Session.GetHabbo().GetBadgeComponent().GiveBadge(AchievementGroup + TargetLevel, true); if (NewTarget > TotalLevels) { NewTarget = TotalLevels; } Session.GetHabbo().ActivityPoints += TargetLevelData.RewardPixels; Session.GetHabbo().UpdateActivityPointsBalance(false); Session.SendMessage(AchievementUnlockedComposer.Compose(AchievementData, TargetLevel, TargetLevelData.RewardPoints, TargetLevelData.RewardPixels)); using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { if (dbClient.dbType == Pici.Storage.Database.DatabaseType.MySQL) dbClient.setQuery("REPLACE INTO user_achievement VALUES (" + Session.GetHabbo().Id + ", @group, " + NewLevel + ", " + NewProgress + ")"); else { dbClient.setQuery("IF EXISTS (SELECT userid FROM user_achievement WHERE userid = " + Session.GetHabbo().Id + " AND group = @group) " + " UPDATE user_achievement SET level = " + NewLevel + ", progress = " + NewProgress + " WHERE userid = " + Session.GetHabbo().Id + " AND group = @group " + "ELSE" + " INSERT INTO user_achievement VALUES (" + Session.GetHabbo().Id + ",@group," + NewLevel + "," + NewProgress + ")"); } dbClient.addParameter("group", AchievementGroup); dbClient.runQuery(); } UserData.Level = NewLevel; UserData.Progress = NewProgress; Session.GetHabbo().AchievementPoints += TargetLevelData.RewardPoints; Session.GetHabbo().ActivityPoints += TargetLevelData.RewardPixels; Session.GetHabbo().UpdateActivityPointsBalance(false); Session.SendMessage(AchievementScoreUpdateComposer.Compose(Session.GetHabbo().AchievementPoints)); AchievementLevel NewLevelData = AchievementData.Levels[NewTarget]; Session.SendMessage(AchievementProgressComposer.Compose(AchievementData, NewTarget, NewLevelData, TotalLevels, Session.GetHabbo().GetAchievementData(AchievementGroup))); return true; } else { UserData.Level = NewLevel; UserData.Progress = NewProgress; using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { if (dbClient.dbType == Pici.Storage.Database.DatabaseType.MySQL) dbClient.setQuery("REPLACE INTO user_achievement VALUES (" + Session.GetHabbo().Id + ", @group, " + NewLevel + ", " + NewProgress + ")"); else { dbClient.setQuery("IF EXISTS (SELECT userid FROM user_achievement WHERE userid = " + Session.GetHabbo().Id + " AND group = @group) " + " UPDATE user_achievement SET level = " + NewLevel + ", progress = " + NewProgress + " WHERE userid = " + Session.GetHabbo().Id + " AND group = @group " + "ELSE" + " INSERT INTO user_achievement VALUES (" + Session.GetHabbo().Id + ",@group," + NewLevel + "," + NewProgress + ")"); } dbClient.addParameter("group", AchievementGroup); dbClient.runQuery(); } Session.SendMessage(AchievementProgressComposer.Compose(AchievementData, TargetLevel, TargetLevelData, TotalLevels, Session.GetHabbo().GetAchievementData(AchievementGroup))); } return false; }
internal void GetList(GameClient Session, ClientMessage Message) { Session.SendMessage(AchievementListComposer.Compose(Session, Achievements.Values.ToList())); }