Um dos desenvolvedores do Azure Emulador postou ontem alguns fixe's importantes para quem utiliza o Azure Emulador com a Build 190, como sempre eu Peeta, trago a vocês aqui da Criando Habbos.net
(!) Importante, para adicionar esses fixe's você deve abrir a source do Azure Emulador, procurar o diretório indicado, apagar o que tiver lá dentro e colar lá o código que estiver aqui...
Fix para o CatalogPacket.cs (\Azure\Azure.Emulator\HabboHotel\Catalogs\CatalogPacket.cs)
using Azure.HabboHotel.GameClients;
using Azure.HabboHotel.Items;
using Azure.Messages;
using Azure.Messages.Parsers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.UI.WebControls.Expressions;
namespace Azure.HabboHotel.Catalogs
{
/// <summary>
/// Class CatalogPacket.
/// </summary>
internal static class CatalogPacket
{
/// <summary>
/// Composes the index.
/// </summary>
/// <param name="rank">The rank.</param>
/// <param name="type">The type.</param>
/// <returns>ServerMessage.</returns>
internal static ServerMessage ComposeIndex(uint rank, string type)
{
IEnumerable<CatalogPage> pages =
Azure.GetGame().GetCatalog().Categories.Values.OfType<CatalogPage>().ToList();
var sortedPages = pages.Where(x => x.ParentId == -2 && x.MinRank <= rank).OrderBy(x => x.OrderNum);
if (type == "NORMAL")
sortedPages = pages.Where(x => x.ParentId == -1 && x.MinRank <= rank).OrderBy(x => x.OrderNum);
var message = new ServerMessage(LibraryParser.OutgoingRequest("CatalogueIndexMessageComposer"));
message.AppendBool(true);
message.AppendInteger(0);
message.AppendInteger(-1);
message.AppendString("root");
message.AppendString(string.Empty);
message.AppendInteger(0);
message.AppendInteger(sortedPages.Count());
foreach (var cat in sortedPages)
{
message.AppendBool(cat.Visible);
message.AppendInteger(cat.IconImage);
message.AppendInteger(cat.PageId);
message.AppendString(cat.CodeName);
message.AppendString(cat.Caption);
message.AppendInteger(cat.FlatOffers.Count);
foreach (int i in cat.FlatOffers.Keys)
message.AppendInteger(i);
var sortedSubPages =
pages.Where(x => x.ParentId == cat.PageId && x.MinRank <= rank).OrderBy(x => x.OrderNum);
message.AppendInteger(sortedSubPages.Count());
foreach (var subCat in sortedSubPages)
{
message.AppendBool(subCat.Visible);
message.AppendInteger(subCat.IconImage);
message.AppendInteger(subCat.PageId);
message.AppendString(subCat.CodeName);
message.AppendString(subCat.Caption);
message.AppendInteger(subCat.FlatOffers.Count);
foreach (int i2 in subCat.FlatOffers.Keys)
message.AppendInteger(i2);
message.AppendInteger(0);
}
}
message.AppendBool(false);
message.AppendString(type);
return message;
}
/// <summary>
/// Composes the page.
/// </summary>
/// <param name="page">The page.</param>
/// <returns>ServerMessage.</returns>
internal static ServerMessage ComposePage(CatalogPage page)
{
var message = new ServerMessage(LibraryParser.OutgoingRequest("CataloguePageMessageComposer"));
message.AppendInteger(page.PageId);
switch (page.Layout)
{
case "frontpage":
message.AppendString("NORMAL");
message.AppendString("frontpage4");
message.AppendInteger(2);
message.AppendString(page.LayoutHeadline);
message.AppendString(page.LayoutTeaser);
message.AppendInteger(2);
message.AppendString(page.Text1);
message.AppendString(page.Text2);
message.AppendInteger(0);
message.AppendInteger(-1);
message.AppendBool(false);
break;
case "roomads":
message.AppendString("NORMAL");
message.AppendString("roomads");
message.AppendInteger(2);
message.AppendString("events_header");
message.AppendString("");
message.AppendInteger(2);
message.AppendString(page.Text1);
message.AppendString("");
break;
case "builders_club_frontpage_normal":
message.AppendString("NORMAL");
message.AppendString("builders_club_frontpage");
message.AppendInteger(0);
message.AppendInteger(1);
message.AppendString(page.LayoutHeadline);
message.AppendInteger(3);
message.AppendInteger(8554);
message.AppendString("builders_club_1_month");
message.AppendString("");
message.AppendInteger(2560000);
message.AppendInteger(2560000);
message.AppendInteger(1024);
message.AppendInteger(0);
message.AppendInteger(0);
message.AppendBool(false);
message.AppendInteger(8606);
message.AppendString("builders_club_14_days");
message.AppendString("");
message.AppendInteger(2560000);
message.AppendInteger(2560000);
message.AppendInteger(1024);
message.AppendInteger(0);
message.AppendInteger(0);
message.AppendBool(false);
message.AppendInteger(8710);
message.AppendString("builders_club_31_days");
message.AppendString("");
message.AppendInteger(2560000);
message.AppendInteger(2560000);
message.AppendInteger(1024);
message.AppendInteger(0);
message.AppendInteger(0);
message.AppendBool(false);
break;
case "bots":
message.AppendString("NORMAL");
message.AppendString("bots");
message.AppendInteger(2);
message.AppendString(page.LayoutHeadline);
message.AppendString(page.LayoutTeaser);
message.AppendInteger(3);
message.AppendString(page.Text1);
message.AppendString(page.Text2);
message.AppendString(page.TextDetails);
break;
case "badge_display":
message.AppendString("NORMAL");
message.AppendString("badge_display");
message.AppendInteger(2);
message.AppendString(page.LayoutHeadline);
message.AppendString(page.LayoutTeaser);
message.AppendInteger(3);
message.AppendString(page.Text1);
message.AppendString(page.Text2);
message.AppendString(page.TextDetails);
break;
case "info_loyalty":
case "info_duckets":
message.AppendString("NORMAL");
message.AppendString(page.Layout);
message.AppendInteger(1);
message.AppendString(page.LayoutHeadline);
message.AppendInteger(1);
message.AppendString(page.Text1);
break;
case "sold_ltd_items":
message.AppendString("NORMAL");
message.AppendString("sold_ltd_items");
message.AppendInteger(2);
message.AppendString(page.LayoutHeadline);
message.AppendString(page.LayoutTeaser);
message.AppendInteger(3);
message.AppendString(page.Text1);
message.AppendString(page.Text2);
message.AppendString(page.TextDetails);
break;
case "recycler_info":
message.AppendString("NORMAL");
message.AppendString(page.Layout);
message.AppendInteger(2);
message.AppendString(page.LayoutHeadline);
message.AppendString(page.LayoutTeaser);
message.AppendInteger(3);
message.AppendString(page.Text1);
message.AppendString(page.Text2);
message.AppendString(page.TextDetails);
break;
case "recycler_prizes":
message.AppendString("NORMAL");
message.AppendString("recycler_prizes");
message.AppendInteger(1);
message.AppendString("catalog_recycler_headline3");
message.AppendInteger(1);
message.AppendString(page.Text1);
break;
case "spaces_new":
case "spaces":
message.AppendString("NORMAL");
message.AppendString("spaces_new");
message.AppendInteger(1);
message.AppendString(page.LayoutHeadline);
message.AppendInteger(1);
message.AppendString(page.Text1);
break;
case "recycler":
message.AppendString("NORMAL");
message.AppendString("recycler");
message.AppendInteger(2);
message.AppendString(page.LayoutHeadline);
message.AppendString(page.LayoutTeaser);
message.AppendInteger(1);
message.AppendString(page.Text1);
break;
case "trophies":
message.AppendString("NORMAL");
message.AppendString("trophies");
message.AppendInteger(1);
message.AppendString(page.LayoutHeadline);
message.AppendInteger(2);
message.AppendString(page.Text1);
message.AppendString(page.TextDetails);
break;
case "pets":
case "pets2":
case "pets3":
message.AppendString("NORMAL");
message.AppendString(page.Layout);
message.AppendInteger(2);
message.AppendString(page.LayoutHeadline);
message.AppendString(page.LayoutTeaser);
message.AppendInteger(4);
message.AppendString(page.Text1);
message.AppendString(page.Text2);
message.AppendString(page.TextDetails);
message.AppendString(page.TextTeaser);
break;
case "soundmachine":
message.AppendString("NORMAL");
message.AppendString(page.Layout);
message.AppendInteger(2);
message.AppendString(page.LayoutHeadline);
message.AppendString(page.LayoutTeaser);
message.AppendInteger(2);
message.AppendString(page.Text1);
message.AppendString(page.TextDetails);
break;
case "vip_buy":
message.AppendString("NORMAL");
message.AppendString(page.Layout);
message.AppendInteger(2);
message.AppendString(page.LayoutHeadline);
message.AppendString(page.LayoutTeaser);
message.AppendInteger(0);
break;
case "guild_custom_furni":
message.AppendString("NORMAL");
message.AppendString("guild_custom_furni");
message.AppendInteger(3);
message.AppendString(page.LayoutHeadline);
message.AppendString("");
message.AppendString("");
message.AppendInteger(3);
message.AppendString(page.Text1);
message.AppendString(page.TextDetails);
message.AppendString(page.Text2);
break;
case "guild_frontpage":
message.AppendString("NORMAL");
message.AppendString("guild_frontpage");
message.AppendInteger(2);
message.AppendString(page.LayoutHeadline);
message.AppendString(page.LayoutTeaser);
message.AppendInteger(3);
message.AppendString(page.Text1);
message.AppendString(page.TextDetails);
message.AppendString(page.Text2);
break;
case "guild_forum":
message.AppendString("NORMAL");
message.AppendString("guild_forum");
message.AppendInteger(0);
message.AppendInteger(2);
message.AppendString(page.Text1);
message.AppendString(page.Text2);
break;
case "club_gifts":
message.AppendString("NORMAL");
message.AppendString("club_gifts");
message.AppendInteger(1);
message.AppendString(page.LayoutHeadline);
message.AppendInteger(1);
message.AppendString(page.Text1);
break;
case "default_3x3":
message.AppendString("NORMAL");
message.AppendString(page.Layout);
message.AppendInteger(3);
message.AppendString(page.LayoutHeadline);
message.AppendString(page.LayoutTeaser);
message.AppendString(page.LayoutSpecial);
message.AppendInteger(3);
message.AppendString(page.Text1);
message.AppendString(page.TextDetails);
message.AppendString(page.TextTeaser);
break;
default:
message.AppendString("NORMAL");
message.AppendString(page.Layout);
message.AppendInteger(3);
message.AppendString(page.LayoutHeadline);
message.AppendString(page.LayoutTeaser);
message.AppendString(page.LayoutSpecial);
message.AppendInteger(3);
message.AppendString(page.Text1);
message.AppendString(page.TextDetails);
message.AppendString(page.TextTeaser);
break;
case "builders_3x3":
message.AppendString("BUILDERS_CLUB");
message.AppendString("default_3x3");
message.AppendInteger(3);
message.AppendString(page.LayoutHeadline);
message.AppendString(page.LayoutTeaser);
message.AppendString(page.LayoutSpecial);
message.AppendInteger(3);
message.AppendString(page.Text1);
message.AppendString(page.TextDetails.Replace("[10]", Convert.ToChar(10).ToString())
.Replace("[13]", Convert.ToChar(13).ToString()));
message.AppendString(page.TextTeaser.Replace("[10]", Convert.ToChar(10).ToString())
.Replace("[13]", Convert.ToChar(13).ToString()));
break;
case "builders_3x3_color":
message.AppendString("BUILDERS_CLUB");
message.AppendString("default_3x3_color_grouping");
message.AppendInteger(3);
message.AppendString(page.LayoutHeadline);
message.AppendString(page.LayoutTeaser);
message.AppendString(page.LayoutSpecial);
message.AppendInteger(3);
message.AppendString(page.Text1);
message.AppendString(page.TextDetails.Replace("[10]", Convert.ToChar(10).ToString())
.Replace("[13]", Convert.ToChar(13).ToString()));
message.AppendString(page.TextTeaser.Replace("[10]", Convert.ToChar(10).ToString())
.Replace("[13]", Convert.ToChar(13).ToString()));
break;
case "builders_club_frontpage":
message.AppendString("BUILDERS_CLUB");
message.AppendString("builders_club_frontpage");
message.AppendInteger(0);
message.AppendInteger(1);
message.AppendString(page.LayoutHeadline);
message.AppendInteger(3);
message.AppendInteger(8554);
message.AppendString("builders_club_1_month");
message.AppendString("");
message.AppendInteger(2560000);
message.AppendInteger(2560000);
message.AppendInteger(1024);
message.AppendInteger(0);
message.AppendInteger(0);
message.AppendBool(false);
message.AppendInteger(8606);
message.AppendString("builders_club_14_days");
message.AppendString("");
message.AppendInteger(2560000);
message.AppendInteger(2560000);
message.AppendInteger(1024);
message.AppendInteger(0);
message.AppendInteger(0);
message.AppendBool(false);
message.AppendInteger(8710);
message.AppendString("builders_club_31_days");
message.AppendString("");
message.AppendInteger(2560000);
message.AppendInteger(2560000);
message.AppendInteger(1024);
message.AppendInteger(0);
message.AppendInteger(0);
message.AppendBool(false);
break;
case "builders_club_addons":
message.AppendString("BUILDERS_CLUB");
message.AppendString("builders_club_addons");
message.AppendInteger(0);
message.AppendInteger(1);
message.AppendString(page.LayoutHeadline);
break;
case "builders_club_addons_normal":
message.AppendString("NORMAL");
message.AppendString("builders_club_addons");
message.AppendInteger(0);
message.AppendInteger(1);
message.AppendString(page.LayoutHeadline);
break;
}
if (page.Layout.StartsWith("frontpage") || page.Layout == "vip_buy" || page.Layout == "recycler")
{
message.AppendInteger(0);
}
else
{
message.AppendInteger(page.Items.Count);
foreach (CatalogItem item in page.Items.Values)
{
ComposeItem(item, message);
}
}
message.AppendInteger(-1);
message.AppendBool(false);
return message;
}
/// <summary>
/// Composes the club purchase page.
/// </summary>
/// <param name="session">The session.</param>
/// <param name="windowId">The window identifier.</param>
/// <returns>ServerMessage.</returns>
internal static ServerMessage ComposeClubPurchasePage(GameClient session, int windowId)
{
var message = new ServerMessage(LibraryParser.OutgoingRequest("CatalogueClubPageMessageComposer"));
var habboClubItems = Azure.GetGame().GetCatalog().HabboClubItems;
message.AppendInteger(habboClubItems.Count);
foreach (var item in habboClubItems)
{
message.AppendInteger(item.Id);
message.AppendString(item.Name);
message.AppendBool(false);
message.AppendInteger(item.CreditsCost);
message.AppendInteger(item.DucketsCost);
message.AppendInteger(0);
message.AppendBool(true);
var fuckingArray = item.Name.Split('_');
double dayTime = 31;
if (item.Name.Contains("DAY"))
dayTime = int.Parse(fuckingArray[3]);
else if (item.Name.Contains("MONTH"))
{
var monthTime = int.Parse(fuckingArray[3]);
dayTime = monthTime * 31;
}
else if (item.Name.Contains("YEAR"))
{
var yearTimeOmg = int.Parse(fuckingArray[3]);
dayTime = yearTimeOmg * 31 * 12;
}
var newExpiryDate = DateTime.Now.AddDays(dayTime);
if (session.GetHabbo().GetSubscriptionManager().HasSubscription)
newExpiryDate =
Azure.UnixToDateTime(session.GetHabbo().GetSubscriptionManager().GetSubscription().ExpireTime)
.AddDays(dayTime);
message.AppendInteger((int)dayTime / 31);
message.AppendInteger((int)dayTime);
message.AppendBool(false);
message.AppendInteger((int)dayTime);
message.AppendInteger(newExpiryDate.Year);
message.AppendInteger(newExpiryDate.Month);
message.AppendInteger(newExpiryDate.Day);
}
message.AppendInteger(windowId);
return message;
}
internal static ServerMessage PurchaseOk(CatalogItem itemCatalog, Dictionary<Item, uint> items,
int clubLevel = 1)
{
return PurchaseOk(itemCatalog.Id, itemCatalog.Name, itemCatalog.CreditsCost, items, clubLevel,
itemCatalog.BelCreditsCost,
itemCatalog.DucketsCost, itemCatalog.IsLimited, itemCatalog.LimitedStack, itemCatalog.LimitedSelled);
}
/// <summary>
/// Purchases the ok.
/// </summary>
/// <returns>ServerMessage.</returns>
internal static ServerMessage PurchaseOk(uint itemId, string itemName, uint creditsCost,
Dictionary<Item, uint> items = null, int clubLevel = 1,
uint belsCost = 0,
uint activityPointsCost = 0, bool isLimited = false,
int limitedStack = 0,
int limitedSelled = 0)
{
var message = new ServerMessage(LibraryParser.OutgoingRequest("PurchaseOKMessageComposer"));
message.AppendInteger(itemId);
message.AppendString(itemName);
message.AppendBool(false); //isRentable
message.AppendInteger(creditsCost);
message.AppendInteger(belsCost);
message.AppendInteger(activityPointsCost);
message.AppendBool(true); //isGiftVisible
message.AppendInteger(items == null ? 0 : items.Count);
if (items != null)
{
foreach (var itemDic in items)
{
var item = itemDic.Key;
message.AppendString(item.Type.ToString());
if (item.Type == 'b')
{
message.AppendString(item.PublicName);
continue;
}
message.AppendInteger(item.SpriteId);
message.AppendString(item.PublicName);
message.AppendInteger(itemDic.Value); //productCount
message.AppendBool(isLimited);
if (!isLimited) continue;
message.AppendInteger(limitedStack);
message.AppendInteger(limitedSelled);
}
}
message.AppendInteger(clubLevel); //clubLevel
message.AppendBool(false); //window.visible?
return message;
}
/// <summary>
/// Composes the item.
/// </summary>
/// <param name="item">The item.</param>
/// <param name="message">The message.</param>
internal static void ComposeItem(CatalogItem item, ServerMessage message)
{
message.AppendInteger(item.Id);
message.AppendString(item.Name, true);
message.AppendBool(false);
message.AppendInteger(item.CreditsCost);
if (item.BelCreditsCost > 0)
{
message.AppendInteger(item.BelCreditsCost);
message.AppendInteger(105);
}
else if (item.LoyaltyCost > 0)
{
message.AppendInteger(item.LoyaltyCost);
message.AppendInteger(105);
}
else
{
message.AppendInteger(item.DucketsCost);
message.AppendInteger(0);
}
message.AppendBool(item.GetFirstBaseItem().AllowGift);
switch (item.Name)
{
case "g0 group_product":
message.AppendInteger(0);
break;
case "room_ad_plus_badge":
message.AppendInteger(1);
message.AppendString("b");
message.AppendString("RADZZ");
break;
default:
if (item.Name.StartsWith("builders_club_addon_") || item.Name.StartsWith("builders_club_time_"))
{
message.AppendInteger(0);
}
else if (item.Badge == "")
{
message.AppendInteger(item.Items.Count);
}
else
{
message.AppendInteger(item.Items.Count + 1);
message.AppendString("b");
message.AppendString(item.Badge);
}
break;
}
foreach (var baseItem in item.Items.Keys)
{
if (item.Name == "g0 group_product" || item.Name.StartsWith("builders_club_addon_") || item.Name.StartsWith("builders_club_time_"))
{
break;
}
else if (item.Name == "room_ad_plus_badge")
{
message.AppendString("");
message.AppendInteger(0);
}
else
{
message.AppendString(baseItem.Type.ToString());
message.AppendInteger(baseItem.SpriteId);
if (item.Name.Contains("wallpaper_single") || item.Name.Contains("floor_single") || item.Name.Contains("landscape_single"))
{
var array = item.Name.Split('_');
message.AppendString(array[2]);
}
else if (item.Name.StartsWith("bot_") || baseItem.InteractionType == Interaction.MusicDisc || item.GetFirstBaseItem().Name == "poster")
{
message.AppendString(item.ExtraData);
}
else if (item.Name.StartsWith("poster_"))
{
var array2 = item.Name.Split('_');
message.AppendString(array2[1]);
}
else if (item.Name.StartsWith("poster "))
{
var array3 = item.Name.Split(' ');
message.AppendString(array3[1]);
}
else if (item.SongId > 0u && baseItem.InteractionType == Interaction.MusicDisc)
{
message.AppendString(item.ExtraData);
}
else
{
message.AppendString(string.Empty);
}
message.AppendInteger(item.Items[baseItem]);
message.AppendBool(item.IsLimited);
if (!item.IsLimited)
continue;
message.AppendInteger(item.LimitedStack);
message.AppendInteger(item.LimitedStack - item.LimitedSelled);
}
}
message.AppendInteger(item.ClubOnly ? 1 : 0);
if (item.IsLimited || item.FirstAmount != 1)
{
message.AppendBool(false);
return;
}
message.AppendBool(item.HaveOffer && !item.IsLimited && !item.Name.StartsWith("bot_"));
}
}
}
Fix para o Catalog.cs (Azure\Azure.Emulator\HabboHotel\Catalogs\Catalog.cs)
using Azure.Configuration;
using Azure.Database.Manager.Database.Session_Details.Interfaces;
using Azure.HabboHotel.GameClients;
using Azure.HabboHotel.Items;
using Azure.HabboHotel.Pets;
using Azure.HabboHotel.Quests;
using Azure.HabboHotel.RoomBots;
using Azure.HabboHotel.SoundMachine;
using Azure.Messages;
using Azure.Messages.Parsers;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Data;
using System.Linq;
namespace Azure.HabboHotel.Catalogs
{
/// <summary>
/// Class Catalog.
/// </summary>
class Catalog
{
/// <summary>
/// The last sent offer
/// </summary>
internal static int LastSentOffer;
/// <summary>
/// The categories
/// </summary>
internal HybridDictionary Categories;
/// <summary>
/// The offers
/// </summary>
internal HybridDictionary Offers;
/// <summary>
/// The flat offers
/// </summary>
internal Dictionary<int, uint> FlatOffers;
/// <summary>
/// The habbo club items
/// </summary>
internal List<CatalogItem> HabboClubItems;
/// <summary>
/// The ecotron rewards
/// </summary>
internal List<EcotronReward> EcotronRewards;
/// <summary>
/// The ecotron levels
/// </summary>
internal List<int> EcotronLevels;
/// <summary>
/// Checks the name of the pet.
/// </summary>
/// <param name="petName">Name of the pet.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
internal static bool CheckPetName(string petName)
{
return petName.Length >= 3 && petName.Length <= 15 && Azure.IsValidAlphaNumeric(petName);
}
/// <summary>
/// Creates the bot.
/// </summary>
/// <param name="userId">The user identifier.</param>
/// <param name="name">The name.</param>
/// <param name="look">The look.</param>
/// <param name="motto">The motto.</param>
/// <param name="gender">The gender.</param>
/// <param name="bartender">if set to <c>true</c> [bartender].</param>
/// <returns>RoomBot.</returns>
internal static RoomBot CreateBot(uint userId, string name, string look, string motto, string gender, bool bartender)
{
uint botId;
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.SetQuery("INSERT INTO bots (user_id,name,motto,look,gender,walk_mode,is_bartender) VALUES (@h_user,@b_name,@b_motto,@b_look,@b_gender,@b_walk,@b_bartender)");
queryReactor.AddParameter("h_user", userId);
queryReactor.AddParameter("b_name", name);
queryReactor.AddParameter("b_motto", motto);
queryReactor.AddParameter("b_look", look);
queryReactor.AddParameter("b_gender", gender);
queryReactor.AddParameter("b_walk", "freeroam");
queryReactor.AddParameter("b_bartender", bartender ? "1" : "0");
botId = Convert.ToUInt32(queryReactor.InsertQuery());
}
return new RoomBot(botId, userId, 0u, AIType.Generic, "freeroam", name, motto, look, 0, 0, 0.0, 0, 0, 0, 0,0, null, null, gender, 0, bartender);
}
/// <summary>
/// Creates the pet.
/// </summary>
/// <param name="userId">The user identifier.</param>
/// <param name="name">The name.</param>
/// <param name="type">The type.</param>
/// <param name="Race">The race.</param>
/// <param name="Color">The color.</param>
/// <param name="Rarity">The rarity.</param>
/// <returns>Pet.</returns>
internal static Pet CreatePet(uint userId, string name, int type, string Race, string Color, int Rarity = 0)
{
var pet = new Pet(404u, userId, 0u, name, (uint)type, Race, Color, 0, 100, 100, 0,Azure.GetUnixTimeStamp(), 0, 0, 0.0, false, 0, 0, -1, Rarity,DateTime.Now.AddHours(36.0), DateTime.Now.AddHours(48.0), null)
{
DbState = DatabaseUpdateState.NeedsUpdate
};
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.SetQuery(string.Concat(new object[]
{
"INSERT INTO bots (user_id,name, ai_type) VALUES (",
pet.OwnerId,
",@",
pet.PetId,
"name, 'pet')"
}));
queryReactor.AddParameter(string.Format("{0}name", pet.PetId), pet.Name);
pet.PetId = (uint)queryReactor.InsertQuery();
queryReactor.SetQuery(string.Concat(new object[]
{
"INSERT INTO pets_data (id,type,race,color,experience,energy,createstamp,rarity,lasthealth_stamp,untilgrown_stamp) VALUES (",
pet.PetId,
", ",
pet.Type,
",@",
pet.PetId,
"race,@",
pet.PetId,
"color,0,100,UNIX_TIMESTAMP(), ",
Rarity,
", UNIX_TIMESTAMP(now() + INTERVAL 36 HOUR), UNIX_TIMESTAMP(now() + INTERVAL 48 HOUR))"
}));
queryReactor.AddParameter(string.Format("{0}race", pet.PetId), pet.Race);
queryReactor.AddParameter(string.Format("{0}color", pet.PetId), pet.Color);
queryReactor.RunQuery();
}
if (pet.Type == 16u)
{
pet.MoplaBreed = MoplaBreed.CreateMonsterplantBreed(pet);
pet.Name = pet.MoplaBreed.Name;
pet.DbState = DatabaseUpdateState.NeedsUpdate;
}
var clientByUserId = Azure.GetGame().GetClientManager().GetClientByUserId(userId);
if (clientByUserId != null)
Azure.GetGame().GetAchievementManager().ProgressUserAchievement(clientByUserId, "ACH_PetLover", 1, false);
return pet;
}
/// <summary>
/// Generates the pet from row.
/// </summary>
/// <param name="Row">The row.</param>
/// <param name="mRow">The m row.</param>
/// <returns>Pet.</returns>
internal static Pet GeneratePetFromRow(DataRow Row, DataRow mRow)
{
if (Row == null) return null;
MoplaBreed moplaBreed = null;
if (Convert.ToUInt32(mRow["type"]) == 16u)
{
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.SetQuery(string.Format("SELECT * FROM pets_plants WHERE pet_id = {0}", Convert.ToUInt32(Row["id"])));
var row = queryReactor.GetRow();
moplaBreed = new MoplaBreed(row);
}
}
return new Pet(Convert.ToUInt32(Row["id"]), Convert.ToUInt32(Row["user_id"]),
Convert.ToUInt32(Row["room_id"]), (string)Row["name"], Convert.ToUInt32(mRow["type"]),
(string)mRow["race"], (string)mRow["color"], (int)mRow["experience"], (int)mRow["energy"],
(int)mRow["nutrition"], (int)mRow["respect"], Convert.ToDouble(mRow["createstamp"]), (int)Row["x"],
(int)Row["y"], Convert.ToDouble(Row["z"]), (int)mRow["have_saddle"] == 1, (int)mRow["anyone_ride"],
(int)mRow["hairdye"], (int)mRow["pethair"], (int)mRow["rarity"],
Azure.UnixToDateTime((int)mRow["lasthealth_stamp"]),
Azure.UnixToDateTime((int)mRow["untilgrown_stamp"]), moplaBreed);
}
/// <summary>
/// Gets the item from offer.
/// </summary>
/// <param name="offerId">The offer identifier.</param>
/// <returns>CatalogItem.</returns>
internal CatalogItem GetItemFromOffer(int offerId)
{
CatalogItem result = null;
if (FlatOffers.ContainsKey(offerId))
result = (CatalogItem)Offers[FlatOffers[offerId]];
return result ?? (Azure.GetGame().GetCatalog().GetItem(Convert.ToUInt32(offerId)));
}
/// <summary>
/// Initializes the specified database client.
/// </summary>
/// <param name="dbClient">The database client.</param>
/// <param name="pageLoaded">The page loaded.</param>
internal void Initialize(IQueryAdapter dbClient, out uint pageLoaded)
{
Initialize(dbClient);
pageLoaded = (uint)Categories.Count;
}
/// <summary>
/// Initializes the specified database client.
/// </summary>
/// <param name="dbClient">The database client.</param>
internal void Initialize(IQueryAdapter dbClient)
{
Categories = new HybridDictionary();
Offers = new HybridDictionary();
FlatOffers = new Dictionary<int, uint>();
EcotronRewards = new List<EcotronReward>();
EcotronLevels = new List<int>();
HabboClubItems = new List<CatalogItem>();
dbClient.SetQuery("SELECT * FROM catalog_items ORDER BY order_num ASC");
var table = dbClient.GetTable();
dbClient.SetQuery("SELECT * FROM catalog_pages ORDER BY order_num ASC");
var table2 = dbClient.GetTable();
dbClient.SetQuery("SELECT * FROM catalog_ecotron ORDER BY reward_level ASC");
var table3 = dbClient.GetTable();
dbClient.SetQuery("SELECT * FROM catalog_items WHERE specialName LIKE 'HABBO_CLUB_VIP%'");
var table4 = dbClient.GetTable();
if (table != null)
{
foreach (DataRow dataRow in table.Rows)
{
if (string.IsNullOrEmpty(dataRow["item_names"].ToString()) || string.IsNullOrEmpty(dataRow["amounts"].ToString()))
continue;
var source = dataRow["item_names"].ToString();
var firstItem = dataRow["item_names"].ToString().Split(';')[0];
Item item;
if (!Azure.GetGame().GetItemManager().GetItem(firstItem, out item))
continue;
var num = !source.Contains(';') ? item.FlatId : -1;
if (!dataRow.IsNull("specialName"))
item.PublicName = (string)dataRow["specialName"];
var catalogItem = new CatalogItem(dataRow, item.PublicName);
if (catalogItem.GetFirstBaseItem() == null)
continue;
Offers.Add(catalogItem.Id, catalogItem);
if (num != -1 && !FlatOffers.ContainsKey(num))
FlatOffers.Add(num, catalogItem.Id);
}
}
if (table2 != null)
{
foreach (DataRow dataRow2 in table2.Rows)
{
var visible = false;
var enabled = false;
var comingSoon = false;
if (dataRow2["visible"].ToString() == "1")
visible = true;
if (dataRow2["enabled"].ToString() == "1")
enabled = true;
Categories.Add(Convert.ToUInt16(dataRow2["id"]),
new CatalogPage(Convert.ToUInt16(dataRow2["id"]), short.Parse(dataRow2["parent_id"].ToString()),
(string)dataRow2["code_name"], (string)dataRow2["caption"], visible, enabled, comingSoon,
Convert.ToUInt32(dataRow2["min_rank"]), (int)dataRow2["icon_image"],
(string)dataRow2["page_layout"], (string)dataRow2["page_headline"],
(string)dataRow2["page_teaser"], (string)dataRow2["page_special"],
(string)dataRow2["page_text1"], (string)dataRow2["page_text2"],
(string)dataRow2["page_text_details"], (string)dataRow2["page_text_teaser"],
(string)dataRow2["page_link_description"], (string)dataRow2["page_link_pagename"],
(int)dataRow2["order_num"], ref Offers));
}
}
if (table3 != null)
{
foreach (DataRow dataRow3 in table3.Rows)
{
EcotronRewards.Add(new EcotronReward(Convert.ToUInt32(dataRow3["display_id"]),
Convert.ToUInt32(dataRow3["item_id"]), Convert.ToUInt32(dataRow3["reward_level"])));
if (!EcotronLevels.Contains(Convert.ToInt16(dataRow3["reward_level"]))) EcotronLevels.Add(Convert.ToInt16(dataRow3["reward_level"]));
}
}
if (table4 != null)
{
foreach (DataRow row in table4.Rows)
{
HabboClubItems.Add(new CatalogItem(row, row.IsNull("specialName") ? "Habbo VIP" : (string)row["specialName"]));
}
}
return;
}
/// <summary>
/// Gets the item.
/// </summary>
/// <param name="itemId">The item identifier.</param>
/// <returns>CatalogItem.</returns>
internal CatalogItem GetItem(uint itemId)
{
return Offers.Contains(itemId) ? (CatalogItem)Offers[itemId] : null;
}
/// <summary>
/// Gets the page.
/// </summary>
/// <param name="page">The page.</param>
/// <returns>CatalogPage.</returns>
internal CatalogPage GetPage(ushort page)
{
return !Categories.Contains(page) ? null : (CatalogPage)Categories[page];
}
/// <summary>
/// Handles the purchase.
/// </summary>
/// <param name="session">The session.</param>
/// <param name="pageId">The page identifier.</param>
/// <param name="itemId">The item identifier.</param>
/// <param name="extraData">The extra data.</param>
/// <param name="priceAmount">The price amount.</param>
/// <param name="isGift">if set to <c>true</c> [is gift].</param>
/// <param name="giftUser">The gift user.</param>
/// <param name="giftMessage">The gift message.</param>
/// <param name="giftSpriteId">The gift sprite identifier.</param>
/// <param name="giftLazo">The gift lazo.</param>
/// <param name="giftColor">Color of the gift.</param>
/// <param name="undef">if set to <c>true</c> [undef].</param>
/// <param name="group">The group.</param>
internal void HandlePurchase(GameClient session, uint pageId, int itemId, string extraData, int priceAmount,
bool isGift, string giftUser, string giftMessage, int giftSpriteId, int giftLazo, int giftColor, bool undef,
uint @group)
{
Users.Habbo Habbo = session.GetHabbo();
var catalogPage = (CatalogPage)Categories[pageId];
if (!Categories.Contains(pageId))
return;
if (catalogPage == null || !catalogPage.Enabled || !catalogPage.Visible || session == null || session.GetHabbo() == null)
return;
if (catalogPage.MinRank > Habbo.Rank)
return;
if (!catalogPage.Items.Contains(itemId)) // fucking scripters...
return;
if (priceAmount < 1 || priceAmount > 100) priceAmount = 1;
var totalPrice = priceAmount;
var limitedId = 0;
var limtot = 0;
CatalogItem item;
uint toUserId;
{
if (priceAmount >= 6) totalPrice -= Convert.ToInt32(Math.Ceiling(Convert.ToDouble(priceAmount) / 6)) * 2 - 1;
if (catalogPage.MinRank > session.GetHabbo().Rank || catalogPage.Layout == "sold_ltd_items") return;
item = catalogPage.GetItem(itemId);
if (item == null) return;
if (catalogPage.Layout == "vip_buy" || catalogPage.Layout == "club_buy" || HabboClubItems.Contains(item))
{
if (session.GetHabbo().Credits < item.CreditsCost) return;
if (session.GetHabbo().ActivityPoints < item.DucketsCost) return;
if (session.GetHabbo().BelCredits < item.BelCreditsCost) return;
var array = item.Name.Split('_');
double dayLength;
if (item.Name.Contains("DAY")) dayLength = double.Parse(array[3]);
else if (item.Name.Contains("MONTH"))
{
var num4 = double.Parse(array[3]);
dayLength = Math.Ceiling((num4 * 31) - 0.205);
}
else if (item.Name.Contains("YEAR"))
{
var num5 = double.Parse(array[3]);
dayLength = (num5 * 31 * 12);
}
else dayLength = 31;
session.GetHabbo().GetSubscriptionManager().AddSubscription(dayLength);
if (item.CreditsCost > 0)
{
session.GetHabbo().Credits -= (int)item.CreditsCost * totalPrice;
session.GetHabbo().UpdateCreditsBalance();
}
if (item.DucketsCost > 0)
{
session.GetHabbo().ActivityPoints -= (int)item.DucketsCost * totalPrice;
session.GetHabbo().UpdateActivityPointsBalance();
}
if (item.BelCreditsCost > 0)
{
session.GetHabbo().BelCredits -= (int)item.BelCreditsCost * totalPrice;
session.GetHabbo().UpdateSeasonalCurrencyBalance();
}
return;
}
if (item.Name == "room_ad_plus_badge") return;
if (item.ClubOnly && !session.GetHabbo().GetSubscriptionManager().HasSubscription)
{
var serverMessage =
new ServerMessage(LibraryParser.OutgoingRequest("CatalogPurchaseNotAllowedMessageComposer"));
serverMessage.AppendInteger(1);
session.SendMessage(serverMessage);
return;
}
var flag =
item.Items.Keys.Any(
current =>
InteractionTypes.AreFamiliar(GlobalInteractions.Pet, current.InteractionType));
if (!flag &&
(item.CreditsCost * totalPrice < 0 || item.DucketsCost * totalPrice < 0 || item.BelCreditsCost * totalPrice < 0))
return;
if (item.IsLimited)
{
totalPrice = 1;
priceAmount = 1;
if (item.LimitedSelled >= item.LimitedStack)
{
session.SendMessage(
new ServerMessage(LibraryParser.OutgoingRequest("CatalogLimitedItemSoldOutMessageComposer")));
return;
}
item.LimitedSelled++;
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.RunFastQuery(string.Concat("UPDATE catalog_items SET limited_sells = ", item.LimitedSelled, " WHERE id = ", item.Id));
limitedId = item.LimitedSelled;
limtot = item.LimitedStack;
}
}
else if (isGift & priceAmount > 1)
{
totalPrice = 1;
priceAmount = 1;
}
toUserId = 0u;
if (session.GetHabbo().Credits < item.CreditsCost * totalPrice) return;
if (session.GetHabbo().ActivityPoints < item.DucketsCost * totalPrice) return;
if (session.GetHabbo().BelCredits < item.BelCreditsCost * totalPrice) return;
if (item.CreditsCost > 0 && !isGift)
{
session.GetHabbo().Credits -= (int)item.CreditsCost * totalPrice;
session.GetHabbo().UpdateCreditsBalance();
}
if (item.DucketsCost > 0 && !isGift)
{
session.GetHabbo().ActivityPoints -= (int)item.DucketsCost * totalPrice;
session.GetHabbo().UpdateActivityPointsBalance();
}
if (item.BelCreditsCost > 0 && !isGift)
{
session.GetHabbo().BelCredits -= (int)item.BelCreditsCost * totalPrice;
session.GetHabbo().UpdateSeasonalCurrencyBalance();
}
}
foreach (var baseItem in item.Items.Keys)
{
if (isGift)
{
if ((DateTime.Now - session.GetHabbo().LastGiftPurchaseTime).TotalSeconds <= 15.0)
{
session.SendNotif(Azure.GetLanguage().GetVar("user_send_gift"));
return;
}
if (!baseItem.AllowGift) return;
DataRow row;
using (var queryreactor3 = Azure.GetDatabaseManager().GetQueryReactor())
{
queryreactor3.SetQuery("SELECT id FROM users WHERE username = @gift_user");
queryreactor3.AddParameter("gift_user", giftUser);
row = queryreactor3.GetRow();
}
if (row == null)
{
session.GetMessageHandler()
.GetResponse()
.Init(LibraryParser.OutgoingRequest("GiftErrorMessageComposer"));
session.GetMessageHandler().GetResponse().AppendString(giftUser);
session.GetMessageHandler().SendResponse();
return;
}
toUserId = Convert.ToUInt32(row["id"]);
if (toUserId == 0u)
{
session.GetMessageHandler()
.GetResponse()
.Init(LibraryParser.OutgoingRequest("GiftErrorMessageComposer"));
session.GetMessageHandler().GetResponse().AppendString(giftUser);
session.GetMessageHandler().SendResponse();
return;
}
if (item.CreditsCost > 0 && isGift)
{
session.GetHabbo().Credits -= (int)item.CreditsCost * totalPrice;
session.GetHabbo().UpdateCreditsBalance();
}
if (item.DucketsCost > 0 && isGift)
{
session.GetHabbo().ActivityPoints -= (int)item.DucketsCost * totalPrice;
session.GetHabbo().UpdateActivityPointsBalance();
}
if (item.BelCreditsCost > 0 && isGift)
{
session.GetHabbo().BelCredits -= (int)item.BelCreditsCost * totalPrice;
session.GetHabbo().UpdateSeasonalCurrencyBalance();
}
}
if (isGift && baseItem.Type == 'e')
{
session.SendNotif(Azure.GetLanguage().GetVar("user_send_gift_effect"));
return;
}
if (item.Name.StartsWith("builders_club_addon_"))
{
int furniAmount =
Convert.ToInt32(item.Name.Replace("builders_club_addon_", "").Replace("furnis", ""));
session.GetHabbo().BuildersItemsMax += furniAmount;
var update =
new ServerMessage(LibraryParser.OutgoingRequest("BuildersClubMembershipMessageComposer"));
update.AppendInteger(session.GetHabbo().BuildersExpire);
update.AppendInteger(session.GetHabbo().BuildersItemsMax);
update.AppendInteger(2);
session.SendMessage(update);
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.SetQuery("UPDATE users SET builders_items_max = @max WHERE id = @userId");
queryReactor.AddParameter("max", session.GetHabbo().BuildersItemsMax);
queryReactor.AddParameter("userId", session.GetHabbo().Id);
queryReactor.RunQuery();
}
session.SendMessage(CatalogPacket.PurchaseOk(item, item.Items));
session.SendNotif("${notification.builders_club.membership_extended.message}",
"${notification.builders_club.membership_extended.title}", "builders_club_membership_extended");
return;
}
if (item.Name.StartsWith("builders_club_time_"))
{
int timeAmount = Convert.ToInt32(item.Name.Replace("builders_club_time_", "").Replace("seconds", ""));
session.GetHabbo().BuildersExpire += timeAmount;
var update =
new ServerMessage(LibraryParser.OutgoingRequest("BuildersClubMembershipMessageComposer"));
update.AppendInteger(session.GetHabbo().BuildersExpire);
update.AppendInteger(session.GetHabbo().BuildersItemsMax);
update.AppendInteger(2);
session.SendMessage(update);
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.SetQuery("UPDATE users SET builders_expire = @max WHERE id = @userId");
queryReactor.AddParameter("max", session.GetHabbo().BuildersExpire);
queryReactor.AddParameter("userId", session.GetHabbo().Id);
queryReactor.RunQuery();
}
session.SendMessage(CatalogPacket.PurchaseOk(item, item.Items));
session.SendNotif("${notification.builders_club.membership_extended.message}",
"${notification.builders_club.membership_extended.title}", "builders_club_membership_extended");
return;
}
var text = string.Empty;
var interactionType = baseItem.InteractionType;
switch (interactionType)
{
case Interaction.None:
case Interaction.Gate:
case Interaction.Bed:
//case Interaction.PressurePadBed: // 2.0 :D
case Interaction.Guillotine:
case Interaction.HCGate:
case Interaction.ScoreBoard:
case Interaction.VendingMachine:
case Interaction.Alert:
case Interaction.OneWayGate:
case Interaction.LoveShuffler:
case Interaction.HabboWheel:
case Interaction.Dice:
case Interaction.Bottle:
case Interaction.Hopper:
case Interaction.Teleport:
case Interaction.QuickTeleport:
case Interaction.Pet:
case Interaction.Pool:
case Interaction.Roller:
case Interaction.FootballGate:
break;
case Interaction.PostIt:
extraData = "FFFF33";
break;
case Interaction.RoomEffect:
{
double number = 0;
try
{
number = string.IsNullOrEmpty(extraData)
? 0.0
: double.Parse(extraData, Azure.CultureInfo);
}
catch (Exception pException)
{
Logging.HandleException(pException,
string.Format("Catalog.HandlePurchase: {0}", extraData));
}
extraData = number.ToString().Replace(',', '.');
break;
}
case Interaction.Dimmer:
extraData = "1,1,1,#000000,255";
break;
case Interaction.Trophy:
extraData = string.Concat(session.GetHabbo().UserName, Convert.ToChar(9), DateTime.Now.Day.ToString("00"), "-", DateTime.Now.Month.ToString("00"), "-", DateTime.Now.Year, Convert.ToChar(9), extraData);
break;
case Interaction.Rentals:
extraData = item.ExtraData;
break;
case Interaction.PetDog:
case Interaction.PetCat:
case Interaction.PetCrocodile:
case Interaction.PetTerrier:
case Interaction.PetBear:
case Interaction.PetPig:
case Interaction.PetLion:
case Interaction.PetRhino:
case Interaction.PetSpider:
case Interaction.PetTurtle:
case Interaction.PetChick:
case Interaction.PetFrog:
case Interaction.PetDragon:
case Interaction.PetHorse:
case Interaction.PetMonkey:
case Interaction.PetGnomo:
case Interaction.PetMonsterPlant:
case Interaction.PetWhiteRabbit:
case Interaction.PetEvilRabbit:
case Interaction.PetLoveRabbit:
case Interaction.PetCafeRabbit:
case Interaction.PetPigeon:
case Interaction.PetEvilPigeon:
case Interaction.PetDemonMonkey:
case Interaction.Pet24:
case Interaction.Pet25:
case Interaction.Pet26:
case Interaction.Pet27:
case Interaction.Pet28:
case Interaction.Pet29:
case Interaction.Pet30:
case Interaction.Pet31:
case Interaction.Pet32:
case Interaction.Pet33:
case Interaction.Pet34:
try
{
var data = extraData.Split('\n');
var petName = data[0];
var race = data[1];
var color = data[2];
int.Parse(race);
if (!CheckPetName(petName)) return;
if (race.Length != 1 && race.Length != 2) return;
if (color.Length != 6) return;
Azure.GetGame()
.GetAchievementManager()
.ProgressUserAchievement(session, "ACH_PetLover", 1, false);
break;
}
catch (Exception ex)
{
Logging.HandleException(ex, "Catalog.HandlePurchase");
return;
}
default:
switch (interactionType)
{
case Interaction.Mannequin:
extraData = string.Concat("m", Convert.ToChar(5), "ch-215-92.lg-3202-1322-73", Convert.ToChar(5), "Mannequin");
break;
case Interaction.VipGate:
case Interaction.MysteryBox:
case Interaction.YoutubeTv:
case Interaction.TileStackMagic:
case Interaction.Tent:
case Interaction.BedTent:
break;
case Interaction.BadgeDisplay:
if (!session.GetHabbo().GetBadgeComponent().HasBadge(extraData)) extraData = "UMAD";
extraData = string.Format("{0}|{1}|{2}-{3}-{4}", extraData, session.GetHabbo().UserName, DateTime.Now.Day.ToString("00"), DateTime.Now.Month.ToString("00"), DateTime.Now.Year);
break;
case Interaction.FootballGate:
extraData = "hd-99999-99999.lg-270-62;hd-99999-99999.ch-630-62.lg-695-62";
break;
case Interaction.LoveLock:
extraData = "0";
break;
case Interaction.Pinata:
case Interaction.RunWaySage:
case Interaction.Shower:
extraData = "0";
break;
case Interaction.GroupForumTerminal:
case Interaction.GuildItem:
case Interaction.GuildGate:
case Interaction.GuildForum:
case Interaction.Poster:
break;
case Interaction.Moplaseed:
extraData = new Random().Next(0, 12).ToString();
break;
case Interaction.MusicDisc:
var song = SongManager.GetSongById(item.SongId);
if (song != null)
extraData = string.Concat(session.GetHabbo().UserName, '\n', DateTime.Now.Year, '\n',
DateTime.Now.Month, '\n', DateTime.Now.Day, '\n', song.LengthSeconds, '\n',
song.Name);
break;
default:
extraData = item.ExtraData;
break;
}
break;
}
session.GetMessageHandler()
.GetResponse()
.Init(LibraryParser.OutgoingRequest("UpdateInventoryMessageComposer"));
session.GetMessageHandler().SendResponse();
session.SendMessage(CatalogPacket.PurchaseOk(item, item.Items));
if (isGift)
{
var itemBySprite = Azure.GetGame()
.GetItemManager()
.GetItemBySprite(giftSpriteId, 's');
if (itemBySprite == null) return;
uint insertId;
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.SetQuery("INSERT INTO items_rooms (base_item,user_id) VALUES (" + itemBySprite.ItemId + ", " + toUserId + ")");
insertId = (uint)queryReactor.InsertQuery();
queryReactor.SetQuery(string.Concat("INSERT INTO users_gifts (gift_id,item_id,extradata,giver_name,Message,ribbon,color,gift_sprite,show_sender,rare_id) VALUES (", insertId, ", ", baseItem.ItemId, ",@extradata, @name, @Message,", giftLazo, ",", giftColor, ",", giftSpriteId, ",", undef ? 1 : 0, ",", limitedId, ")"));
queryReactor.AddParameter("extradata", extraData);
queryReactor.AddParameter("name", giftUser);
queryReactor.AddParameter("message", giftMessage);
queryReactor.RunQuery();
if (session.GetHabbo().Id != toUserId)
{
Azure.GetGame()
.GetAchievementManager()
.ProgressUserAchievement(session, "ACH_GiftGiver", 1, false);
Azure.GetGame()
.GetQuestManager()
.ProgressUserQuest(session, QuestType.GiftOthers, 0u);
queryReactor.RunFastQuery("UPDATE users_stats SET gifts_given = gifts_given + 1 WHERE id = " + session.GetHabbo().Id +
";UPDATE users_stats SET gifts_received = gifts_received + 1 WHERE id = " + toUserId);
}
}
var clientByUserId =
Azure.GetGame().GetClientManager().GetClientByUserId(toUserId);
if (clientByUserId != null)
{
clientByUserId.GetHabbo()
.GetInventoryComponent()
.AddNewItem(insertId, itemBySprite.ItemId, string.Concat(session.GetHabbo().Id, (char)9, giftMessage, (char)9, giftLazo, (char)9, giftColor, (char)9, ((undef) ? "1" : "0"), (char)9, session.GetHabbo().UserName, (char)9, session.GetHabbo().Look, (char)9, item.Name), 0u, false, false, 0, 0, "");
if (clientByUserId.GetHabbo().Id != session.GetHabbo().Id)
Azure.GetGame()
.GetAchievementManager()
.ProgressUserAchievement(clientByUserId, "ACH_GiftReceiver", 1, false);
}
session.GetHabbo().LastGiftPurchaseTime = DateTime.Now;
continue;
}
session.GetMessageHandler()
.GetResponse()
.Init(LibraryParser.OutgoingRequest("NewInventoryObjectMessageComposer"));
session.GetMessageHandler().GetResponse().AppendInteger(1);
var i = 1;
if (baseItem.Type == 's') i = InteractionTypes.AreFamiliar(GlobalInteractions.Pet, baseItem.InteractionType) ? 3 : 1;
session.GetMessageHandler().GetResponse().AppendInteger(i);
var list = DeliverItems(session, baseItem,
priceAmount * (int)item.Items[baseItem], extraData, limitedId, limtot, text);
session.GetMessageHandler().GetResponse().AppendInteger(list.Count);
foreach (var current3 in list) session.GetMessageHandler().GetResponse().AppendInteger(current3.Id);
session.GetMessageHandler().SendResponse();
session.GetHabbo().GetInventoryComponent().UpdateItems(false);
if (InteractionTypes.AreFamiliar(GlobalInteractions.Pet,
baseItem.InteractionType))
session.SendMessage(session.GetHabbo().GetInventoryComponent().SerializePetInventory());
}
if (item.Badge.Length >= 1) session.GetHabbo().GetBadgeComponent().GiveBadge(item.Badge, true, session, false);
}
/// <summary>
/// Delivers the items.
/// </summary>
/// <param name="session">The session.</param>
/// <param name="item">The item.</param>
/// <param name="amount">The amount.</param>
/// <param name="extraData">The extra data.</param>
/// <param name="limno">The limno.</param>
/// <param name="limtot">The limtot.</param>
/// <param name="songCode">The song code.</param>
/// <returns>List<UserItem>.</returns>
internal List<UserItem> DeliverItems(GameClient session, Item item, int amount, string extraData, int limno,
int limtot, string songCode)
{
var list = new List<UserItem>();
if (item.InteractionType == Interaction.PostIt)
amount = amount * 20;
{
var a = item.Type;
if (a == 'i' || a == 's')
{
var i = 0;
while (i < amount)
{
var interactionType = item.InteractionType;
switch (interactionType)
{
case Interaction.Dimmer:
goto IL_F87;
case Interaction.Trophy:
case Interaction.Bed:
case Interaction.Guillotine:
case Interaction.ScoreBoard:
case Interaction.VendingMachine:
case Interaction.Alert:
case Interaction.OneWayGate:
case Interaction.LoveShuffler:
case Interaction.HabboWheel:
case Interaction.Dice:
case Interaction.Bottle:
case Interaction.Hopper:
case Interaction.Rentals:
case Interaction.Pet:
case Interaction.Pool:
case Interaction.Roller:
case Interaction.FootballGate:
goto IL_10C3;
case Interaction.Teleport:
case Interaction.QuickTeleport:
{
var userItem = session.GetHabbo()
.GetInventoryComponent()
.AddNewItem(0u, item.ItemId, "0", 0u, true, false, 0, 0, "");
var id = userItem.Id;
var userItem2 = session.GetHabbo()
.GetInventoryComponent()
.AddNewItem(0u, item.ItemId, "0", 0u, true, false, 0, 0, "");
var id2 = userItem2.Id;
list.Add(userItem);
list.Add(userItem2);
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.RunFastQuery(string.Format("INSERT INTO items_teleports (tele_one_id,tele_two_id) VALUES ('{0}','{1}')", id, id2));
queryReactor.RunFastQuery(string.Format("INSERT INTO items_teleports (tele_one_id,tele_two_id) VALUES ('{0}','{1}')", id2, id));
break;
}
}
case Interaction.PetDog:
case Interaction.PetCat:
case Interaction.PetCrocodile:
case Interaction.PetTerrier:
case Interaction.PetBear:
case Interaction.PetPig:
case Interaction.PetLion:
case Interaction.PetRhino:
case Interaction.PetSpider:
case Interaction.PetTurtle:
case Interaction.PetChick:
case Interaction.PetFrog:
case Interaction.PetDragon:
case Interaction.PetHorse:
case Interaction.PetMonkey:
case Interaction.PetGnomo:
case Interaction.PetMonsterPlant:
case Interaction.PetWhiteRabbit:
case Interaction.PetEvilRabbit:
case Interaction.PetLoveRabbit:
case Interaction.PetPigeon:
case Interaction.PetEvilPigeon:
case Interaction.PetDemonMonkey:
case Interaction.Pet24:
case Interaction.Pet25:
case Interaction.Pet26:
case Interaction.Pet27:
case Interaction.Pet28:
case Interaction.Pet29:
case Interaction.Pet30:
case Interaction.Pet31:
case Interaction.Pet32:
case Interaction.Pet33:
case Interaction.Pet34:
{
var petData = extraData.Split('\n');
var petId = int.Parse(item.Name.Replace("a0 pet", string.Empty));
var generatedPet = CreatePet(session.GetHabbo().Id, petData[0], petId, petData[1], petData[2], 0);
session.GetHabbo().GetInventoryComponent().AddPet(generatedPet);
list.Add(session.GetHabbo().GetInventoryComponent().AddNewItem(0, 1534, "0", 0u, true, false, 0, 0, string.Empty));
break;
}
default:
switch (interactionType)
{
case Interaction.MusicDisc:
goto IL_1067;
case Interaction.PuzzleBox:
goto IL_10C3;
case Interaction.RoomBg:
goto IL_FF7;
default:
switch (interactionType)
{
case Interaction.GuildItem:
case Interaction.GuildGate:
case Interaction.GroupForumTerminal:
list.Add(session.GetHabbo()
.GetInventoryComponent()
.AddNewItem(0u, item.ItemId, "0", Convert.ToUInt32(extraData),
true, false, 0, 0, string.Empty));
break;
case Interaction.GuildForum:
uint groupId;
uint.TryParse(extraData, out groupId);
var group = Azure.GetGame().GetGroupManager().GetGroup(groupId);
if (group != null)
{
if (group.CreatorId == session.GetHabbo().Id)
{
session.GetMessageHandler().GetResponse().Init(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer"));
session.GetMessageHandler()
.GetResponse()
.AppendString("forums.delivered");
session.GetMessageHandler().GetResponse().AppendInteger(2);
session.GetMessageHandler()
.GetResponse()
.AppendString("groupId");
session.GetMessageHandler()
.GetResponse()
.AppendString(extraData);
session.GetMessageHandler()
.GetResponse()
.AppendString("groupName");
session.GetMessageHandler()
.GetResponse()
.AppendString(group.Name);
session.GetMessageHandler().SendResponse();
if (!group.HasForum)
{
group.HasForum = true;
group.UpdateForum();
}
}
else
{
session.SendNotif(Azure.GetLanguage().GetVar("user_group_owner_error"));
}
}
list.Add(session.GetHabbo().GetInventoryComponent().AddNewItem(0u, item.ItemId, "0", Convert.ToUInt32(extraData),true, false, 0, 0, string.Empty));
break;
default:
goto IL_10C3;
}
break;
}
break;
}
IL_10EE:
i++;
continue;
IL_F87:
var userItem3 = session.GetHabbo()
.GetInventoryComponent()
.AddNewItem(0u, item.ItemId, extraData, 0u, true, false, 0, 0, "");
var id3 = userItem3.Id;
list.Add(userItem3);
using (var queryreactor2 = Azure.GetDatabaseManager().GetQueryReactor())
{
queryreactor2.RunFastQuery(string.Format("INSERT INTO items_moodlight (item_id,enabled,current_preset,preset_one,preset_two,preset_three) VALUES ({0},'0',1,'#000000,255,0','#000000,255,0','#000000,255,0')",id3));
goto IL_10EE;
}
IL_FF7:
var userItem4 = session.GetHabbo().GetInventoryComponent().AddNewItem(0u, item.ItemId, extraData, 0u, true, false, 0, 0, string.Empty);
var id4 = userItem4.Id;
list.Add(userItem4);
using (var queryreactor3 = Azure.GetDatabaseManager().GetQueryReactor())
{
queryreactor3.RunFastQuery(string.Format("INSERT INTO items_toners VALUES ({0},'0',0,0,0)", id4));
goto IL_10EE;
}
IL_1067:
list.Add(session.GetHabbo()
.GetInventoryComponent()
.AddNewItem(0u, item.ItemId, extraData, 0u, true, false, 0, 0, songCode));
goto IL_10EE;
IL_10C3:
list.Add(session.GetHabbo()
.GetInventoryComponent()
.AddNewItem(0u, item.ItemId, extraData, 0u, true, false, limno, limtot, ""));
goto IL_10EE;
}
return list;
}
if (a == 'e')
{
for (var j = 0; j < amount; j++)
session.GetHabbo().GetAvatarEffectsInventoryComponent().AddNewEffect(item.SpriteId, 7200, 0);
return list;
}
else if (a == 'r')
{
if (item.Name == "bot_bartender")
{
var bot = CreateBot(session.GetHabbo().Id, "Mahw",
"hr-9534-39.hd-600-1.ch-819-92.lg-3058-64.sh-3064-110.wa-2005",
"¡Te calma la sed y sabe bailar!", "f", true);
session.GetHabbo().GetInventoryComponent().AddBot(bot);
session.SendMessage(session.GetHabbo().GetInventoryComponent().SerializeBotInventory());
}
else
{
var bot2 = CreateBot(session.GetHabbo().Id, "Claudio",
"hr-3020-34.hd-3091-2.ch-225-92.lg-3058-100.sh-3089-1338.ca-3084-78-108.wa-2005",
"Habla, anda, baila y se viste", "m", false);
session.GetHabbo().GetInventoryComponent().AddBot(bot2);
session.SendMessage(session.GetHabbo().GetInventoryComponent().SerializeBotInventory());
}
return list;
}
return list;
}
}
/// <summary>
/// Gets the random ecotron reward.
/// </summary>
/// <returns>EcotronReward.</returns>
internal EcotronReward GetRandomEcotronReward()
{
var level = 1u;
if (Azure.GetRandomNumber(1, 2000) == 2000)
level = 5u;
else if (Azure.GetRandomNumber(1, 200) == 200)
level = 4u;
else if (Azure.GetRandomNumber(1, 40) == 40)
level = 3u;
else if (Azure.GetRandomNumber(1, 4) == 4)
level = 2u;
var ecotronRewardsForLevel = GetEcotronRewardsForLevel(level);
return
ecotronRewardsForLevel[Azure.GetRandomNumber(0, (ecotronRewardsForLevel.Count - 1))];
}
/// <summary>
/// Gets the ecotron rewards.
/// </summary>
/// <returns>List<EcotronReward>.</returns>
internal List<EcotronReward> GetEcotronRewards() { return EcotronRewards; }
/// <summary>
/// Gets the ecotron rewards levels.
/// </summary>
/// <returns>List<System.Int32>.</returns>
internal List<int> GetEcotronRewardsLevels() { return EcotronLevels; }
/// <summary>
/// Gets the ecotron rewards for level.
/// </summary>
/// <param name="level">The level.</param>
/// <returns>List<EcotronReward>.</returns>
internal List<EcotronReward> GetEcotronRewardsForLevel(uint level)
{
return EcotronRewards.Where(current => current.RewardLevel == level).ToList();
}
}
}
Fix para os Quartos (Rooms.cs) Rooms.cs (Azure\Azure.Emulator\Messages\Handlers\Rooms.cs)
using Azure.Configuration;
using Azure.HabboHotel.Catalogs;
using Azure.HabboHotel.Items;
using Azure.HabboHotel.PathFinding;
using Azure.HabboHotel.Pets;
using Azure.HabboHotel.Polls;
using Azure.HabboHotel.Quests;
using Azure.HabboHotel.RoomBots;
using Azure.HabboHotel.Rooms;
using Azure.Messages.Parsers;
using Azure.Security;
using Azure.Util;
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace Azure.Messages.Handlers
{
partial class GameClientMessageHandler
{
public void GetPetBreeds()
{
var type = Request.GetString();
string petType;
var petId = PetRace.GetPetId(type, out petType);
var races = PetRace.GetRacesForRaceId(petId);
var message = new ServerMessage(LibraryParser.OutgoingRequest("SellablePetBreedsMessageComposer"));
message.AppendString(petType);
message.AppendInteger(races.Count);
foreach (var current in races)
{
message.AppendInteger(petId);
message.AppendInteger(current.Color1);
message.AppendInteger(current.Color2);
message.AppendBool(current.Has1Color);
message.AppendBool(current.Has2Color);
}
Session.SendMessage(message);
}
internal void GoRoom()
{
if (Azure.ShutdownStarted || Session == null || Session.GetHabbo() == null)
return;
var num = Request.GetUInteger();
var roomData = Azure.GetGame().GetRoomManager().GenerateRoomData(num);
Session.GetHabbo().GetInventoryComponent().RunDbUpdate();
if (roomData == null || roomData.Id == Session.GetHabbo().CurrentRoomId)
return;
roomData.SerializeRoomData(Response, Session, !Session.GetHabbo().InRoom, false);
PrepareRoomForUser(num, roomData.PassWord);
}
internal void AddFavorite()
{
if (Session.GetHabbo() == null)
return;
var roomId = Request.GetUInteger();
GetResponse().Init(LibraryParser.OutgoingRequest("FavouriteRoomsUpdateMessageComposer"));
GetResponse().AppendInteger(roomId);
GetResponse().AppendBool(true);
SendResponse();
Session.GetHabbo().FavoriteRooms.Add(roomId);
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
queryReactor.RunFastQuery("INSERT INTO users_favorites (user_id,room_id) VALUES (" + Session.GetHabbo().Id + "," + roomId + ")");
}
internal void RemoveFavorite()
{
if (Session.GetHabbo() == null)
return;
var roomId = Request.GetUInteger();
Session.GetHabbo().FavoriteRooms.Remove(roomId);
GetResponse().Init(LibraryParser.OutgoingRequest("FavouriteRoomsUpdateMessageComposer"));
GetResponse().AppendInteger(roomId);
GetResponse().AppendBool(false);
SendResponse();
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
queryReactor.RunFastQuery("DELETE FROM users_favorites WHERE user_id = " + Session.GetHabbo().Id + " AND room_id = " + roomId);
}
internal void OnlineConfirmationEvent()
{
Out.WriteLine("Is connected now with user: " + Request.GetString() + " and ip: " + Session.GetConnection().GetIp(), "Azure.Users",
ConsoleColor.DarkGreen);
if (!ConfigurationData.Data.ContainsKey("welcome.message.enabled") ||
ConfigurationData.Data["welcome.message.enabled"] != "true")
return;
if (!ConfigurationData.Data.ContainsKey("welcome.message.image") ||
string.IsNullOrEmpty(ConfigurationData.Data["welcome.message.image"]))
Session.SendNotifWithScroll(ExtraSettings.WelcomeMessage.Replace("%username%",
Session.GetHabbo().UserName));
else
Session.SendNotif(ExtraSettings.WelcomeMessage.Replace("%username%", Session.GetHabbo().UserName),
ConfigurationData.Data.ContainsKey("welcome.message.title")
? ConfigurationData.Data["welcome.message.title"]
: string.Empty, ConfigurationData.Data["welcome.message.image"]);
}
internal void GoToHotelView()
{
if (Session == null || Session.GetHabbo() == null)
return;
if (!Session.GetHabbo().InRoom)
return;
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room != null)
room.GetRoomUserManager().RemoveUserFromRoom(Session, true, false);
var hotelView = Azure.GetGame().GetHotelView();
if (hotelView.FurniRewardName != null)
{
var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("LandingRewardMessageComposer"));
serverMessage.AppendString(hotelView.FurniRewardName);
serverMessage.AppendInteger(hotelView.FurniRewardId);
serverMessage.AppendInteger(120);
serverMessage.AppendInteger(120 - Session.GetHabbo().Respect);
Session.SendMessage(serverMessage);
}
Session.CurrentRoomUserId = -1;
}
internal void LandingCommunityGoal()
{
var onlineFriends = Session.GetHabbo().GetMessenger().Friends.Count(x => x.Value.IsOnline);
var goalMeter = new ServerMessage(LibraryParser.OutgoingRequest("LandingCommunityChallengeMessageComposer"));
goalMeter.AppendBool(true); //
goalMeter.AppendInteger(0); //points
goalMeter.AppendInteger(0); //my rank
goalMeter.AppendInteger(onlineFriends); //totalAmount
goalMeter.AppendInteger(onlineFriends >= 20 ? 1 : onlineFriends >= 50 ? 2 : onlineFriends >= 80 ? 3 : 0);
//communityHighestAchievedLevel
goalMeter.AppendInteger(0); //scoreRemainingUntilNextLevel
goalMeter.AppendInteger(0); //percentCompletionTowardsNextLevel
goalMeter.AppendString("friendshipChallenge"); //Type
goalMeter.AppendInteger(0); //unknown
goalMeter.AppendInteger(0); //ranks and loop
Session.SendMessage(goalMeter);
}
internal void RequestFloorItems()
{
}
internal void RequestWallItems()
{
}
internal void SaveBranding()
{
var itemId = Request.GetUInteger();
var count = Request.GetUInteger();
if (Session == null || Session.GetHabbo() == null) return;
var room = Session.GetHabbo().CurrentRoom;
if (room == null || !room.CheckRights(Session, true)) return;
var item = room.GetRoomItemHandler().GetItem(itemId);
if (item == null)
return;
var extraData = string.Format("state{0}0", Convert.ToChar(9));
for (uint i = 1; i <= count; i++)
extraData = string.Format("{0}{1}{2}", extraData, Convert.ToChar(9), Request.GetString());
item.ExtraData = extraData;
room.GetRoomItemHandler()
.SetFloorItem(Session, item, item.X, item.Y, item.Rot, false, false, true);
}
internal void OnRoomUserAdd()
{
if (Session == null || GetResponse() == null)
return;
var queuedServerMessage = new QueuedServerMessage(Session.GetConnection());
if (CurrentLoadingRoom == null || CurrentLoadingRoom.GetRoomUserManager() == null ||
CurrentLoadingRoom.GetRoomUserManager().UserList == null)
return;
var list =
CurrentLoadingRoom.GetRoomUserManager()
.UserList.Values.Where(current => current != null && !current.IsSpectator);
Response.Init(LibraryParser.OutgoingRequest("SetRoomUserMessageComposer"));
Response.StartArray();
foreach (var current2 in list)
{
try
{
current2.Serialize(Response, CurrentLoadingRoom.GetGameMap().GotPublicPool);
Response.SaveArray();
}
catch (Exception e)
{
Writer.Writer.LogException(e.ToString());
Response.Clear();
}
}
Response.EndArray();
queuedServerMessage.AppendResponse(GetResponse());
queuedServerMessage.AppendResponse(RoomFloorAndWallComposer(CurrentLoadingRoom));
queuedServerMessage.AppendResponse(GetResponse());
Response.Init(LibraryParser.OutgoingRequest("RoomOwnershipMessageComposer"));
Response.AppendInteger(CurrentLoadingRoom.RoomId);
Response.AppendBool(CurrentLoadingRoom.CheckRights(Session, true, false));
queuedServerMessage.AppendResponse(GetResponse());
foreach (var habboForId in CurrentLoadingRoom.UsersWithRights.Select(Azure.GetHabboById))
{
if (habboForId == null) continue;
GetResponse().Init(LibraryParser.OutgoingRequest("GiveRoomRightsMessageComposer"));
GetResponse().AppendInteger(CurrentLoadingRoom.RoomId);
GetResponse().AppendInteger(habboForId.Id);
GetResponse().AppendString(habboForId.UserName);
queuedServerMessage.AppendResponse(GetResponse());
}
var serverMessage = CurrentLoadingRoom.GetRoomUserManager().SerializeStatusUpdates(true);
if (serverMessage != null)
queuedServerMessage.AppendResponse(serverMessage);
if (CurrentLoadingRoom.RoomData.Event != null)
Azure.GetGame().GetRoomEvents().SerializeEventInfo(CurrentLoadingRoom.RoomId);
CurrentLoadingRoom.JustLoaded = false;
foreach (var current4 in CurrentLoadingRoom.GetRoomUserManager().UserList.Values.Where(current4 => current4 != null))
{
if (current4.IsBot)
{
if (current4.BotData.DanceId > 0)
{
Response.Init(LibraryParser.OutgoingRequest("DanceStatusMessageComposer"));
Response.AppendInteger(current4.VirtualId);
Response.AppendInteger(current4.BotData.DanceId);
queuedServerMessage.AppendResponse(GetResponse());
}
}
else if (current4.IsDancing)
{
Response.Init(LibraryParser.OutgoingRequest("DanceStatusMessageComposer"));
Response.AppendInteger(current4.VirtualId);
Response.AppendInteger(current4.DanceId);
queuedServerMessage.AppendResponse(GetResponse());
}
if (current4.IsAsleep)
{
var sleepMsg = new ServerMessage(LibraryParser.OutgoingRequest("RoomUserIdleMessageComposer"));
sleepMsg.AppendInteger(current4.VirtualId);
sleepMsg.AppendBool(true);
queuedServerMessage.AppendResponse(sleepMsg);
}
if (current4.CarryItemId > 0 && current4.CarryTimer > 0)
{
Response.Init(LibraryParser.OutgoingRequest("ApplyHanditemMessageComposer"));
Response.AppendInteger(current4.VirtualId);
Response.AppendInteger(current4.CarryTimer);
queuedServerMessage.AppendResponse(GetResponse());
}
if (current4.IsBot)
continue;
try
{
if (current4.GetClient() != null &&
current4.GetClient().GetHabbo() != null)
{
if (current4.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent() != null &&
current4.CurrentEffect >= 1)
{
Response.Init(LibraryParser.OutgoingRequest("ApplyEffectMessageComposer"));
Response.AppendInteger(current4.VirtualId);
Response.AppendInteger(current4.CurrentEffect);
Response.AppendInteger(0);
queuedServerMessage.AppendResponse(GetResponse());
}
var serverMessage2 =
new ServerMessage(LibraryParser.OutgoingRequest("UpdateUserDataMessageComposer"));
serverMessage2.AppendInteger(current4.VirtualId);
serverMessage2.AppendString(current4.GetClient().GetHabbo().Look);
serverMessage2.AppendString(current4.GetClient().GetHabbo().Gender.ToLower());
serverMessage2.AppendString(current4.GetClient().GetHabbo().Motto);
serverMessage2.AppendInteger(current4.GetClient().GetHabbo().AchievementPoints);
if (CurrentLoadingRoom != null)
CurrentLoadingRoom.SendMessage(serverMessage2);
}
}
catch (Exception pException)
{
Logging.HandleException(pException, "Rooms.SendRoomData3");
}
}
queuedServerMessage.SendResponse();
}
internal void EnterOnRoom()
{
if (Azure.ShutdownStarted) return;
var id = Request.GetUInteger();
var password = Request.GetString();
PrepareRoomForUser(id, password);
}
internal void PrepareRoomForUser(uint id, string pWd, bool isReload = false)
{
try
{
if (Session == null || Session.GetHabbo() == null || Session.GetHabbo().LoadingRoom == id)
return;
if (Azure.ShutdownStarted)
{
Session.SendNotif(Azure.GetLanguage().GetVar("server_shutdown"));
return;
}
Session.GetHabbo().LoadingRoom = id;
var queuedServerMessage = new QueuedServerMessage(Session.GetConnection());
Room room;
if (Session.GetHabbo().InRoom)
{
room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room != null && room.GetRoomUserManager() != null)
room.GetRoomUserManager().RemoveUserFromRoom(Session, false, false);
}
room = Azure.GetGame().GetRoomManager().LoadRoom(id);
if (room == null)
return;
if (room.UserCount >= room.RoomData.UsersMax && !Session.GetHabbo().HasFuse("fuse_enter_full_rooms") &&
Session.GetHabbo().Id != (ulong)room.RoomData.OwnerId)
{
var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("RoomEnterErrorMessageComposer"));
serverMessage.AppendInteger(1);
Session.SendMessage(serverMessage);
var message = new ServerMessage(LibraryParser.OutgoingRequest("OutOfRoomMessageComposer"));
Session.SendMessage(message);
ClearRoomLoading();
return;
}
CurrentLoadingRoom = room;
if (!Session.GetHabbo().HasFuse("fuse_enter_any_room") && room.UserIsBanned(Session.GetHabbo().Id))
{
if (!room.HasBanExpired(Session.GetHabbo().Id))
{
ClearRoomLoading();
var serverMessage2 =
new ServerMessage(LibraryParser.OutgoingRequest("RoomEnterErrorMessageComposer"));
serverMessage2.AppendInteger(4);
Session.SendMessage(serverMessage2);
Response.Init(LibraryParser.OutgoingRequest("OutOfRoomMessageComposer"));
queuedServerMessage.AppendResponse(GetResponse());
queuedServerMessage.SendResponse();
return;
}
room.RemoveBan(Session.GetHabbo().Id);
}
Response.Init(LibraryParser.OutgoingRequest("PrepareRoomMessageComposer"));
queuedServerMessage.AppendResponse(GetResponse());
if (!isReload && !Session.GetHabbo().HasFuse("fuse_enter_any_room") && !room.CheckRights(Session, true, false) &&
!(Session.GetHabbo().IsTeleporting && Session.GetHabbo().TeleportingRoomId == id) && !Session.GetHabbo().IsHopping)
{
if (room.RoomData.State == 1)
{
if (room.UserCount == 0)
{
Response.Init(LibraryParser.OutgoingRequest("DoorbellNoOneMessageComposer"));
queuedServerMessage.AppendResponse(GetResponse());
}
else
{
Response.Init(LibraryParser.OutgoingRequest("DoorbellMessageComposer"));
Response.AppendString("");
queuedServerMessage.AppendResponse(GetResponse());
var serverMessage3 =
new ServerMessage(LibraryParser.OutgoingRequest("DoorbellMessageComposer"));
serverMessage3.AppendString(Session.GetHabbo().UserName);
room.SendMessageToUsersWithRights(serverMessage3);
}
queuedServerMessage.SendResponse();
return;
}
if (room.RoomData.State == 2 &&
!string.Equals(pWd, room.RoomData.PassWord, StringComparison.CurrentCultureIgnoreCase))
{
ClearRoomLoading();
Response.Init(LibraryParser.OutgoingRequest("OutOfRoomMessageComposer"));
queuedServerMessage.AppendResponse(GetResponse());
queuedServerMessage.SendResponse();
return;
}
}
Session.GetHabbo().LoadingChecksPassed = true;
queuedServerMessage.AddBytes(LoadRoomForUser().GetPacket);
queuedServerMessage.SendResponse();
if (Session.GetHabbo().RecentlyVisitedRooms.Contains(room.RoomId))
Session.GetHabbo().RecentlyVisitedRooms.Remove(room.RoomId);
Session.GetHabbo().RecentlyVisitedRooms.AddFirst(room.RoomId);
}
catch (Exception e)
{
Writer.Writer.LogException("PrepareRoomForUser. RoomId: " + id + "; UserId: " +
(Session != null
? Session.GetHabbo().Id.ToString(CultureInfo.InvariantCulture)
: "null") + Environment.NewLine + e);
}
}
internal void ReqLoadRoomForUser()
{
LoadRoomForUser().SendResponse();
}
internal QueuedServerMessage LoadRoomForUser()
{
var currentLoadingRoom = CurrentLoadingRoom;
var queuedServerMessage = new QueuedServerMessage(Session.GetConnection());
if (currentLoadingRoom == null || !Session.GetHabbo().LoadingChecksPassed) return queuedServerMessage;
if (Session.GetHabbo().FavouriteGroup > 0u)
{
if (CurrentLoadingRoom.RoomData.Group != null &&
!CurrentLoadingRoom.LoadedGroups.ContainsKey(CurrentLoadingRoom.RoomData.Group.Id))
CurrentLoadingRoom.LoadedGroups.Add(CurrentLoadingRoom.RoomData.Group.Id,
CurrentLoadingRoom.RoomData.Group.Badge);
if (!CurrentLoadingRoom.LoadedGroups.ContainsKey(Session.GetHabbo().FavouriteGroup) &&
Azure.GetGame().GetGroupManager().GetGroup(Session.GetHabbo().FavouriteGroup) != null)
CurrentLoadingRoom.LoadedGroups.Add(Session.GetHabbo().FavouriteGroup,
Azure.GetGame().GetGroupManager().GetGroup(Session.GetHabbo().FavouriteGroup).Badge);
}
Response.Init(LibraryParser.OutgoingRequest("RoomGroupMessageComposer"));
Response.AppendInteger(CurrentLoadingRoom.LoadedGroups.Count);
foreach (var guild1 in CurrentLoadingRoom.LoadedGroups)
{
Response.AppendInteger(guild1.Key);
Response.AppendString(guild1.Value);
}
queuedServerMessage.AppendResponse(GetResponse());
Response.Init(LibraryParser.OutgoingRequest("InitialRoomInfoMessageComposer"));
Response.AppendString(currentLoadingRoom.RoomData.ModelName);
Response.AppendInteger(currentLoadingRoom.RoomId);
queuedServerMessage.AppendResponse(GetResponse());
if (Session.GetHabbo().SpectatorMode)
{
Response.Init(LibraryParser.OutgoingRequest("SpectatorModeMessageComposer"));
queuedServerMessage.AppendResponse(GetResponse());
}
if (currentLoadingRoom.RoomData.WallPaper != "0.0")
{
Response.Init(LibraryParser.OutgoingRequest("RoomSpacesMessageComposer"));
Response.AppendString("wallpaper");
Response.AppendString(currentLoadingRoom.RoomData.WallPaper);
queuedServerMessage.AppendResponse(GetResponse());
}
if (currentLoadingRoom.RoomData.Floor != "0.0")
{
Response.Init(LibraryParser.OutgoingRequest("RoomSpacesMessageComposer"));
Response.AppendString("floor");
Response.AppendString(currentLoadingRoom.RoomData.Floor);
queuedServerMessage.AppendResponse(GetResponse());
}
Response.Init(LibraryParser.OutgoingRequest("RoomSpacesMessageComposer"));
Response.AppendString("landscape");
Response.AppendString(currentLoadingRoom.RoomData.LandScape);
queuedServerMessage.AppendResponse(GetResponse());
if (currentLoadingRoom.CheckRights(Session, true, false))
{
Response.Init(LibraryParser.OutgoingRequest("RoomRightsLevelMessageComposer"));
Response.AppendInteger(4);
queuedServerMessage.AppendResponse(GetResponse());
Response.Init(LibraryParser.OutgoingRequest("HasOwnerRightsMessageComposer"));
queuedServerMessage.AppendResponse(GetResponse());
}
else if (currentLoadingRoom.CheckRights(Session, false, true))
{
Response.Init(LibraryParser.OutgoingRequest("RoomRightsLevelMessageComposer"));
Response.AppendInteger(1);
queuedServerMessage.AppendResponse(GetResponse());
}
else
{
Response.Init(LibraryParser.OutgoingRequest("RoomRightsLevelMessageComposer"));
Response.AppendInteger(0);
queuedServerMessage.AppendResponse(GetResponse());
}
Response.Init(LibraryParser.OutgoingRequest("RoomRatingMessageComposer"));
Response.AppendInteger(currentLoadingRoom.RoomData.Score);
Response.AppendBool(!Session.GetHabbo().RatedRooms.Contains(currentLoadingRoom.RoomId) &&
!currentLoadingRoom.CheckRights(Session, true, false));
queuedServerMessage.AppendResponse(GetResponse());
Response.Init(LibraryParser.OutgoingRequest("EnableRoomInfoMessageComposer"));
Response.AppendInteger(currentLoadingRoom.RoomId);
queuedServerMessage.AppendResponse(GetResponse());
return queuedServerMessage;
}
internal void ClearRoomLoading()
{
if (Session == null || Session.GetHabbo() == null)
return;
Session.GetHabbo().LoadingRoom = 0u;
Session.GetHabbo().LoadingChecksPassed = false;
}
internal void Move()
{
var currentRoom = Session.GetHabbo().CurrentRoom;
if (currentRoom == null)
return;
var roomUserByHabbo = currentRoom.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (roomUserByHabbo == null || !roomUserByHabbo.CanWalk)
return;
var num = Request.GetInteger();
var num2 = Request.GetInteger();
if (num == roomUserByHabbo.X && num2 == roomUserByHabbo.Y)
return;
roomUserByHabbo.MoveTo(num, num2);
if (!roomUserByHabbo.RidingHorse)
return;
var roomUserByVirtualId =
currentRoom.GetRoomUserManager().GetRoomUserByVirtualId(Convert.ToInt32(roomUserByHabbo.HorseId));
roomUserByVirtualId.MoveTo(num, num2);
}
internal void CanCreateRoom()
{
Response.Init(LibraryParser.OutgoingRequest("CanCreateRoomMessageComposer"));
Response.AppendInteger(Session.GetHabbo().UsersRooms.Count >= 75 ? 1 : 0);
Response.AppendInteger(75);
SendResponse();
}
internal void CreateRoom()
{
if (Session.GetHabbo().UsersRooms.Count >= 75)
{
Session.SendNotif(Azure.GetLanguage().GetVar("user_has_more_then_75_rooms"));
return;
}
if ((Azure.GetUnixTimeStamp() - Session.GetHabbo().LastSqlQuery) < 20)
{
Session.SendNotif(Azure.GetLanguage().GetVar("user_create_room_flood_error"));
return;
}
var name = Request.GetString();
var description = Request.GetString();
var roomModel = Request.GetString();
var category = Request.GetInteger();
var maxVisitors = Request.GetInteger();
var tradeState = Request.GetInteger();
var data = Azure.GetGame()
.GetRoomManager()
.CreateRoom(Session, name, description, roomModel, category, maxVisitors, tradeState);
if (data == null)
return;
Session.GetHabbo().LastSqlQuery = Azure.GetUnixTimeStamp();
Response.Init(LibraryParser.OutgoingRequest("OnCreateRoomInfoMessageComposer"));
Response.AppendInteger(data.Id);
Response.AppendString(data.Name);
SendResponse();
}
internal void GetRoomEditData()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Convert.ToUInt32(Request.GetInteger()));
if (room == null)
return;
GetResponse().Init(LibraryParser.OutgoingRequest("RoomSettingsDataMessageComposer"));
GetResponse().AppendInteger(room.RoomId);
GetResponse().AppendString(room.RoomData.Name);
GetResponse().AppendString(room.RoomData.Description);
GetResponse().AppendInteger(room.RoomData.State);
GetResponse().AppendInteger(room.RoomData.Category);
GetResponse().AppendInteger(room.RoomData.UsersMax);
GetResponse()
.AppendInteger(((room.RoomData.Model.MapSizeX * room.RoomData.Model.MapSizeY) > 200) ? 50 : 25);
GetResponse().AppendInteger(room.TagCount);
foreach (var s in room.RoomData.Tags)
{
GetResponse().AppendString(s);
}
GetResponse().AppendInteger(room.RoomData.TradeState);
GetResponse().AppendInteger(room.RoomData.AllowPets);
GetResponse().AppendInteger(room.RoomData.AllowPetsEating);
GetResponse().AppendInteger(room.RoomData.AllowWalkThrough);
GetResponse().AppendInteger(room.RoomData.HideWall);
GetResponse().AppendInteger(room.RoomData.WallThickness);
GetResponse().AppendInteger(room.RoomData.FloorThickness);
GetResponse().AppendInteger(room.RoomData.ChatType);
GetResponse().AppendInteger(room.RoomData.ChatBalloon);
GetResponse().AppendInteger(room.RoomData.ChatSpeed);
GetResponse().AppendInteger(room.RoomData.ChatMaxDistance);
GetResponse().AppendInteger(room.RoomData.ChatFloodProtection > 2 ? 2 : room.RoomData.ChatFloodProtection);
GetResponse().AppendBool(false); //allow_dyncats_checkbox
GetResponse().AppendInteger(room.RoomData.WhoCanMute);
GetResponse().AppendInteger(room.RoomData.WhoCanKick);
GetResponse().AppendInteger(room.RoomData.WhoCanBan);
SendResponse();
}
internal void RoomSettingsOkComposer(uint roomId)
{
GetResponse().Init(LibraryParser.OutgoingRequest("RoomSettingsSavedMessageComposer"));
GetResponse().AppendInteger(roomId);
SendResponse();
}
internal void RoomUpdatedOkComposer(uint roomId)
{
GetResponse().Init(LibraryParser.OutgoingRequest("RoomUpdateMessageComposer"));
GetResponse().AppendInteger(roomId);
SendResponse();
}
internal static ServerMessage RoomFloorAndWallComposer(Room room)
{
var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("RoomFloorWallLevelsMessageComposer"));
serverMessage.AppendBool(room.RoomData.HideWall);
serverMessage.AppendInteger(room.RoomData.WallThickness);
serverMessage.AppendInteger(room.RoomData.FloorThickness);
return serverMessage;
}
internal static ServerMessage SerializeRoomChatOption(Room room)
{
var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("RoomChatOptionsMessageComposer"));
serverMessage.AppendInteger(room.RoomData.ChatType);
serverMessage.AppendInteger(room.RoomData.ChatBalloon);
serverMessage.AppendInteger(room.RoomData.ChatSpeed);
serverMessage.AppendInteger(room.RoomData.ChatMaxDistance);
serverMessage.AppendInteger(room.RoomData.ChatFloodProtection);
return serverMessage;
}
internal void ParseRoomDataInformation()
{
var id = Request.GetUInteger();
var num = Request.GetInteger();
var num2 = Request.GetInteger();
var room = Azure.GetGame().GetRoomManager().LoadRoom(id);
if (num == 0 && num2 == 1)
{
SerializeRoomInformation(room, false);
return;
}
if (num == 1 && num2 == 0)
{
SerializeRoomInformation(room, true);
return;
}
SerializeRoomInformation(room, true);
}
internal void SerializeRoomInformation(Room room, bool show)
{
if (room == null)
return;
room.RoomData.SerializeRoomData(GetResponse(), Session, room.RoomId != Session.GetHabbo().CurrentRoomId, null, show);
SendResponse();
DataTable table;
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.SetQuery(string.Format("SELECT user_id FROM rooms_rights WHERE room_id={0}",
room.RoomId));
table = queryReactor.GetTable();
}
Response.Init(LibraryParser.OutgoingRequest("LoadRoomRightsListMessageComposer"));
GetResponse().AppendInteger(room.RoomData.Id);
GetResponse().AppendInteger(table.Rows.Count);
foreach (var habboForId in table.Rows.Cast<DataRow>().Select(dataRow => Azure.GetHabboById((uint)dataRow[0])).Where(habboForId => habboForId != null))
{
GetResponse().AppendInteger(habboForId.Id);
GetResponse().AppendString(habboForId.UserName);
}
SendResponse();
}
internal void SaveRoomData()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null || !room.CheckRights(Session, true, false))
return;
Request.GetInteger();
var oldName = room.RoomData.Name;
room.RoomData.Name = Request.GetString();
if (room.RoomData.Name.Length < 3)
{
room.RoomData.Name = oldName;
return;
}
room.RoomData.Description = Request.GetString();
room.RoomData.State = Request.GetInteger();
if (room.RoomData.State < 0 || room.RoomData.State > 2)
{
room.RoomData.State = 0;
return;
}
room.RoomData.PassWord = Request.GetString();
room.RoomData.UsersMax = Request.GetUInteger();
room.RoomData.Category = Request.GetInteger();
var tagCount = Request.GetUInteger();
if (tagCount > 2) return;
var tags = new List<string>();
for (var i = 0; i < tagCount; i++)
tags.Add(Request.GetString().ToLower());
room.RoomData.TradeState = Request.GetInteger();
room.RoomData.AllowPets = Request.GetBool();
room.RoomData.AllowPetsEating = Request.GetBool();
room.RoomData.AllowWalkThrough = Request.GetBool();
room.RoomData.HideWall = Request.GetBool();
room.RoomData.WallThickness = Request.GetInteger();
if (room.RoomData.WallThickness < -2 || room.RoomData.WallThickness > 1) room.RoomData.WallThickness = 0;
room.RoomData.FloorThickness = Request.GetInteger();
if (room.RoomData.FloorThickness < -2 || room.RoomData.FloorThickness > 1) room.RoomData.FloorThickness = 0;
room.RoomData.WhoCanMute = Request.GetInteger();
room.RoomData.WhoCanKick = Request.GetInteger();
room.RoomData.WhoCanBan = Request.GetInteger();
room.RoomData.ChatType = Request.GetInteger();
room.RoomData.ChatBalloon = Request.GetUInteger();
room.RoomData.ChatSpeed = Request.GetUInteger();
room.RoomData.ChatMaxDistance = Request.GetUInteger();
if (room.RoomData.ChatMaxDistance > 99) room.RoomData.ChatMaxDistance = 99;
room.RoomData.ChatFloodProtection = Request.GetUInteger(); //chat_flood_sensitivity
if (room.RoomData.ChatFloodProtection > 2) room.RoomData.ChatFloodProtection = 2;
Request.GetBool(); //allow_dyncats_checkbox
var flatCat = Azure.GetGame().GetNavigator().GetFlatCat(room.RoomData.Category);
if (flatCat == null || flatCat.MinRank > Session.GetHabbo().Rank) room.RoomData.Category = 0;
room.ClearTags();
room.AddTagRange(tags);
RoomSettingsOkComposer(room.RoomId);
RoomUpdatedOkComposer(room.RoomId);
Session.GetHabbo().CurrentRoom.SendMessage(RoomFloorAndWallComposer(room));
Session.GetHabbo().CurrentRoom.SendMessage(SerializeRoomChatOption(room));
room.RoomData.SerializeRoomData(Response, Session, false, true);
}
internal void GetBannedUsers()
{
var num = Request.GetUInteger();
var room = Azure.GetGame().GetRoomManager().GetRoom(num);
if (room == null)
return;
var list = room.BannedUsers();
Response.Init(LibraryParser.OutgoingRequest("RoomBannedListMessageComposer"));
Response.AppendInteger(num);
Response.AppendInteger(list.Count);
foreach (var current in list)
{
Response.AppendInteger(current);
Response.AppendString(Azure.GetHabboById(current) != null
? Azure.GetHabboById(current).UserName
: "Undefined");
}
SendResponse();
}
internal void UsersWithRights()
{
Response.Init(LibraryParser.OutgoingRequest("LoadRoomRightsListMessageComposer"));
Response.AppendInteger(Session.GetHabbo().CurrentRoom.RoomId);
Response.AppendInteger(Session.GetHabbo().CurrentRoom.UsersWithRights.Count);
foreach (var current in Session.GetHabbo().CurrentRoom.UsersWithRights)
{
var habboForId = Azure.GetHabboById(current);
Response.AppendInteger(current);
Response.AppendString((habboForId == null) ? "Undefined" : habboForId.UserName);
}
SendResponse();
}
internal void UnbanUser()
{
var num = Request.GetUInteger();
var num2 = Request.GetUInteger();
var room = Azure.GetGame().GetRoomManager().GetRoom(num2);
if (room == null)
return;
room.Unban(num);
Response.Init(LibraryParser.OutgoingRequest("RoomUnbanUserMessageComposer"));
Response.AppendInteger(num2);
Response.AppendInteger(num);
SendResponse();
}
internal void GiveRights()
{
var num = Request.GetUInteger();
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null)
return;
var roomUserByHabbo = room.GetRoomUserManager().GetRoomUserByHabbo(num);
if (!room.CheckRights(Session, true, false))
return;
if (room.UsersWithRights.Contains(num))
{
Session.SendNotif(Azure.GetLanguage().GetVar("no_room_rights_error"));
return;
}
if (num == 0)
{
return;
}
room.UsersWithRights.Add(num);
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
queryReactor.RunFastQuery(string.Concat(new object[]
{
"INSERT INTO rooms_rights (room_id,user_id) VALUES (",
room.RoomId,
",",
num,
")"
}));
if (roomUserByHabbo != null && !roomUserByHabbo.IsBot)
{
Response.Init(LibraryParser.OutgoingRequest("GiveRoomRightsMessageComposer"));
Response.AppendInteger(room.RoomId);
Response.AppendInteger(roomUserByHabbo.GetClient().GetHabbo().Id);
Response.AppendString(roomUserByHabbo.GetClient().GetHabbo().UserName);
SendResponse();
roomUserByHabbo.UpdateNeeded = true;
if (!roomUserByHabbo.IsBot)
{
roomUserByHabbo.AddStatus("flatctrl 1", "");
Response.Init(LibraryParser.OutgoingRequest("RoomRightsLevelMessageComposer"));
Response.AppendInteger(1);
roomUserByHabbo.GetClient().SendMessage(GetResponse());
}
}
UsersWithRights();
}
internal void TakeRights()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null || !room.CheckRights(Session, true, false))
return;
var stringBuilder = new StringBuilder();
var num = Request.GetInteger();
{
for (var i = 0; i < num; i++)
{
if (i > 0)
stringBuilder.Append(" OR ");
var num2 = Request.GetUInteger();
if (room.UsersWithRights.Contains(num2))
room.UsersWithRights.Remove(num2);
stringBuilder.Append(string.Concat(new object[]
{
"room_id = '",
room.RoomId,
"' AND user_id = '",
num2,
"'"
}));
var roomUserByHabbo = room.GetRoomUserManager().GetRoomUserByHabbo(num2);
if (roomUserByHabbo != null && !roomUserByHabbo.IsBot)
{
Response.Init(LibraryParser.OutgoingRequest("RoomRightsLevelMessageComposer"));
Response.AppendInteger(0);
roomUserByHabbo.GetClient().SendMessage(GetResponse());
roomUserByHabbo.RemoveStatus("flatctrl 1");
roomUserByHabbo.UpdateNeeded = true;
}
Response.Init(LibraryParser.OutgoingRequest("RemoveRightsMessageComposer"));
Response.AppendInteger(room.RoomId);
Response.AppendInteger(num2);
SendResponse();
}
UsersWithRights();
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
queryReactor.RunFastQuery(string.Format("DELETE FROM rooms_rights WHERE {0}", stringBuilder));
}
}
internal void TakeAllRights()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null || !room.CheckRights(Session, true, false))
return;
DataTable table;
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.SetQuery(string.Format("SELECT user_id FROM rooms_rights WHERE room_id={0}", room.RoomId));
table = queryReactor.GetTable();
}
foreach (DataRow dataRow in table.Rows)
{
var num = (uint)dataRow[0];
var roomUserByHabbo = room.GetRoomUserManager().GetRoomUserByHabbo(num);
Response.Init(LibraryParser.OutgoingRequest("RemoveRightsMessageComposer"));
Response.AppendInteger(room.RoomId);
Response.AppendInteger(num);
SendResponse();
if (roomUserByHabbo == null || roomUserByHabbo.IsBot)
continue;
Response.Init(LibraryParser.OutgoingRequest("RoomRightsLevelMessageComposer"));
Response.AppendInteger(0);
roomUserByHabbo.GetClient().SendMessage(GetResponse());
roomUserByHabbo.RemoveStatus("flatctrl 1");
roomUserByHabbo.UpdateNeeded = true;
}
using (var queryreactor2 = Azure.GetDatabaseManager().GetQueryReactor())
queryreactor2.RunFastQuery(string.Format("DELETE FROM rooms_rights WHERE room_id = {0}", room.RoomId));
room.UsersWithRights.Clear();
UsersWithRights();
}
internal void KickUser()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null)
return;
if (!room.CheckRights(Session) && room.RoomData.WhoCanKick != 2
&& Session.GetHabbo().Rank < Convert.ToUInt32(Azure.GetDbConfig().DbData["ambassador.minrank"]))
return;
var pId = Request.GetUInteger();
var roomUserByHabbo = room.GetRoomUserManager().GetRoomUserByHabbo(pId);
if (roomUserByHabbo == null || roomUserByHabbo.IsBot)
return;
if (room.CheckRights(roomUserByHabbo.GetClient(), true, false) ||
roomUserByHabbo.GetClient().GetHabbo().HasFuse("fuse_mod") ||
roomUserByHabbo.GetClient().GetHabbo().HasFuse("fuse_no_kick"))
return;
room.GetRoomUserManager().RemoveUserFromRoom(roomUserByHabbo.GetClient(), true, true);
roomUserByHabbo.GetClient().CurrentRoomUserId = -1;
}
internal void BanUser()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null || (room.RoomData.WhoCanBan == 0 && !room.CheckRights(Session, true, false)) ||
(room.RoomData.WhoCanBan == 1 && !room.CheckRights(Session)))
return;
var num = Request.GetInteger();
Request.GetUInteger();
var text = Request.GetString();
var roomUserByHabbo = room.GetRoomUserManager().GetRoomUserByHabbo(Convert.ToUInt32(num));
if (roomUserByHabbo == null || roomUserByHabbo.IsBot)
return;
if (roomUserByHabbo.GetClient().GetHabbo().HasFuse("fuse_mod") ||
roomUserByHabbo.GetClient().GetHabbo().HasFuse("fuse_no_kick"))
return;
var time = 0L;
if (text.ToLower().Contains("hour"))
time = 3600L;
else if (text.ToLower().Contains("day"))
time = 86400L;
else if (text.ToLower().Contains("perm"))
time = 788922000L;
room.AddBan(num, time);
room.GetRoomUserManager().RemoveUserFromRoom(roomUserByHabbo.GetClient(), true, true);
Session.CurrentRoomUserId = -1;
}
internal void SetHomeRoom()
{
var num = Request.GetUInteger();
var roomData = Azure.GetGame().GetRoomManager().GenerateRoomData(num);
if (num != 0u && roomData == null)
return;
Session.GetHabbo().HomeRoom = num;
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
queryReactor.RunFastQuery(string.Concat(new object[]
{
"UPDATE users SET home_room = ",
num,
" WHERE id = ",
Session.GetHabbo().Id
}));
Response.Init(LibraryParser.OutgoingRequest("HomeRoomMessageComposer"));
Response.AppendInteger(num);
Response.AppendInteger(num);
SendResponse();
}
internal void DeleteRoom()
{
var roomId = Request.GetUInteger();
if (Session == null || Session.GetHabbo() == null || Session.GetHabbo().UsersRooms == null)
return;
var room = Azure.GetGame().GetRoomManager().GetRoom(roomId);
if (room == null)
return;
if (room.RoomData.Owner != Session.GetHabbo().UserName && Session.GetHabbo().Rank <= 6u)
return;
if (Session.GetHabbo().GetInventoryComponent() != null)
Session.GetHabbo()
.GetInventoryComponent()
.AddItemArray(room.GetRoomItemHandler().RemoveAllFurniture(Session));
var roomData = room.RoomData;
Azure.GetGame().GetRoomManager().UnloadRoom(room, "Delete room");
Azure.GetGame().GetRoomManager().QueueVoteRemove(roomData);
if (roomData == null || Session == null)
return;
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.RunFastQuery(string.Format("DELETE FROM rooms_data WHERE id = {0}", roomId));
queryReactor.RunFastQuery(string.Format("DELETE FROM users_favorites WHERE room_id = {0}", roomId));
queryReactor.RunFastQuery(string.Format("DELETE FROM items_rooms WHERE room_id = {0}", roomId));
queryReactor.RunFastQuery(string.Format("DELETE FROM rooms_rights WHERE room_id = {0}", roomId));
queryReactor.RunFastQuery(string.Format("UPDATE users SET home_room = '0' WHERE home_room = {0}",
roomId));
}
if (Session.GetHabbo().Rank > 5u && Session.GetHabbo().UserName != roomData.Owner)
Azure.GetGame()
.GetModerationTool()
.LogStaffEntry(Session.GetHabbo().UserName, roomData.Name, "Room deletion",
string.Format("Deleted room ID {0}", roomData.Id));
var roomData2 = (
from p in Session.GetHabbo().UsersRooms
where p.Id == roomId
select p).SingleOrDefault<RoomData>();
if (roomData2 != null)
Session.GetHabbo().UsersRooms.Remove(roomData2);
}
internal void LookAt()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null)
return;
var roomUserByHabbo = room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (roomUserByHabbo == null)
return;
roomUserByHabbo.UnIdle();
var x = Request.GetInteger();
var y = Request.GetInteger();
if (x == roomUserByHabbo.X && y == roomUserByHabbo.Y)
return;
var rotation = PathFinder.CalculateRotation(roomUserByHabbo.X, roomUserByHabbo.Y, x, y);
roomUserByHabbo.SetRot(rotation, false);
roomUserByHabbo.UpdateNeeded = true;
if (!roomUserByHabbo.RidingHorse)
return;
var roomUserByVirtualId =
Session.GetHabbo()
.CurrentRoom.GetRoomUserManager()
.GetRoomUserByVirtualId(Convert.ToInt32(roomUserByHabbo.HorseId));
roomUserByVirtualId.SetRot(rotation, false);
roomUserByVirtualId.UpdateNeeded = true;
}
internal void StartTyping()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null)
return;
var roomUserByHabbo = room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (roomUserByHabbo == null)
return;
var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("TypingStatusMessageComposer"));
serverMessage.AppendInteger(roomUserByHabbo.VirtualId);
serverMessage.AppendInteger(1);
room.SendMessage(serverMessage);
}
internal void StopTyping()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null)
return;
var roomUserByHabbo = room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (roomUserByHabbo == null)
return;
var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("TypingStatusMessageComposer"));
serverMessage.AppendInteger(roomUserByHabbo.VirtualId);
serverMessage.AppendInteger(0);
room.SendMessage(serverMessage);
}
internal void IgnoreUser()
{
if (Session.GetHabbo().CurrentRoom == null)
return;
var text = Request.GetString();
var habbo = Azure.GetGame().GetClientManager().GetClientByUserName(text).GetHabbo();
if (habbo == null)
return;
if (Session.GetHabbo().MutedUsers.Contains(habbo.Id) || habbo.Rank > 4u)
return;
Session.GetHabbo().MutedUsers.Add(habbo.Id);
Response.Init(LibraryParser.OutgoingRequest("UpdateIgnoreStatusMessageComposer"));
Response.AppendInteger(1);
Response.AppendString(text);
SendResponse();
}
internal void UnignoreUser()
{
if (Session.GetHabbo().CurrentRoom == null)
return;
var text = Request.GetString();
var habbo = Azure.GetGame().GetClientManager().GetClientByUserName(text).GetHabbo();
if (habbo == null)
return;
if (!Session.GetHabbo().MutedUsers.Contains(habbo.Id))
return;
Session.GetHabbo().MutedUsers.Remove(habbo.Id);
Response.Init(LibraryParser.OutgoingRequest("UpdateIgnoreStatusMessageComposer"));
Response.AppendInteger(3);
Response.AppendString(text);
SendResponse();
}
internal void CanCreateRoomEvent()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null || !room.CheckRights(Session, true, false))
return;
var b = true;
var i = 0;
if (room.RoomData.State != 0)
{
b = false;
i = 3;
}
Response.AppendBool(b);
Response.AppendInteger(i);
}
internal void Sign()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null)
return;
var roomUserByHabbo = room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (roomUserByHabbo == null)
return;
roomUserByHabbo.UnIdle();
var value = Request.GetInteger();
roomUserByHabbo.AddStatus("sign", Convert.ToString(value));
roomUserByHabbo.UpdateNeeded = true;
roomUserByHabbo.SignTime = (Azure.GetUnixTimeStamp() + 5);
}
internal void InitRoomGroupBadges()
{
Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().LoadingRoom);
}
internal void RateRoom()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null || Session.GetHabbo().RatedRooms.Contains(room.RoomId) ||
room.CheckRights(Session, true, false))
return;
{
switch (Request.GetInteger())
{
case -1:
room.RoomData.Score--;
room.RoomData.Score--;
break;
case 0:
return;
case 1:
room.RoomData.Score++;
room.RoomData.Score++;
break;
default:
return;
}
Azure.GetGame().GetRoomManager().QueueVoteAdd(room.RoomData);
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
queryReactor.RunFastQuery(string.Concat(new object[]
{
"UPDATE rooms_data SET score = ",
room.RoomData.Score,
" WHERE id = ",
room.RoomId
}));
Session.GetHabbo().RatedRooms.Add(room.RoomId);
Response.Init(LibraryParser.OutgoingRequest("RoomRatingMessageComposer"));
Response.AppendInteger(room.RoomData.Score);
Response.AppendBool(room.CheckRights(Session, true, false));
SendResponse();
}
}
internal void Dance()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null)
return;
var roomUserByHabbo = room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (roomUserByHabbo == null)
return;
roomUserByHabbo.UnIdle();
var num = Request.GetInteger();
if (num < 0 || num > 4)
num = 0;
if (num > 0 && roomUserByHabbo.CarryItemId > 0)
roomUserByHabbo.CarryItem(0);
roomUserByHabbo.DanceId = num;
var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("DanceStatusMessageComposer"));
serverMessage.AppendInteger(roomUserByHabbo.VirtualId);
serverMessage.AppendInteger(num);
room.SendMessage(serverMessage);
Azure.GetGame().GetQuestManager().ProgressUserQuest(Session, QuestType.SocialDance, 0u);
if (room.GetRoomUserManager().GetRoomUsers().Count > 19)
Azure.GetGame().GetQuestManager().ProgressUserQuest(Session, QuestType.MassDance, 0u);
}
internal void AnswerDoorbell()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null || !room.CheckRights(Session))
return;
var userName = Request.GetString();
var flag = Request.GetBool();
var clientByUserName = Azure.GetGame().GetClientManager().GetClientByUserName(userName);
if (clientByUserName == null)
return;
if (flag)
{
clientByUserName.GetHabbo().LoadingChecksPassed = true;
clientByUserName.GetMessageHandler()
.Response.Init(LibraryParser.OutgoingRequest("DoorbellOpenedMessageComposer"));
clientByUserName.GetMessageHandler().Response.AppendString("");
clientByUserName.GetMessageHandler().SendResponse();
return;
}
if (clientByUserName.GetHabbo().CurrentRoomId != Session.GetHabbo().CurrentRoomId)
{
clientByUserName.GetMessageHandler()
.Response.Init(LibraryParser.OutgoingRequest("DoorbellNoOneMessageComposer"));
clientByUserName.GetMessageHandler().Response.AppendString("");
clientByUserName.GetMessageHandler().SendResponse();
}
}
internal void AlterRoomFilter()
{
var num = Request.GetUInteger();
var flag = Request.GetBool();
var text = Request.GetString();
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null || !room.CheckRights(Session, true, false))
return;
if (!flag)
{
if (!room.WordFilter.Contains(text))
return;
room.WordFilter.Remove(text);
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.SetQuery("DELETE FROM rooms_wordfilter WHERE room_id = @id AND word = @word");
queryReactor.AddParameter("id", num);
queryReactor.AddParameter("word", text);
queryReactor.RunQuery();
return;
}
}
if (room.WordFilter.Contains(text))
return;
if (text.Contains("+"))
{
Session.SendNotif(Azure.GetLanguage().GetVar("character_error_plus"));
return;
}
room.WordFilter.Add(text);
using (var queryreactor2 = Azure.GetDatabaseManager().GetQueryReactor())
{
queryreactor2.SetQuery("INSERT INTO rooms_wordfilter (room_id, word) VALUES (@id, @word);");
queryreactor2.AddParameter("id", num);
queryreactor2.AddParameter("word", text);
queryreactor2.RunQuery();
}
}
internal void GetRoomFilter()
{
var roomId = Request.GetUInteger();
var room = Azure.GetGame().GetRoomManager().GetRoom(roomId);
if (room == null || !room.CheckRights(Session, true, false))
return;
var serverMessage = new ServerMessage();
serverMessage.Init(LibraryParser.OutgoingRequest("RoomLoadFilterMessageComposer"));
serverMessage.AppendInteger(room.WordFilter.Count);
foreach (var current in room.WordFilter)
serverMessage.AppendString(current);
Response = serverMessage;
SendResponse();
}
internal void ApplyRoomEffect()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null || !room.CheckRights(Session, true, false))
return;
var item = Session.GetHabbo().GetInventoryComponent().GetItem(Request.GetUInteger());
if (item == null)
return;
var type = "floor";
if (item.BaseItem.Name.ToLower().Contains("wallpaper"))
type = "wallpaper";
else if (item.BaseItem.Name.ToLower().Contains("landscape"))
type = "landscape";
switch (type)
{
case "floor":
room.RoomData.Floor = item.ExtraData;
Azure.GetGame()
.GetAchievementManager()
.ProgressUserAchievement(Session, "ACH_RoomDecoFloor", 1);
Azure.GetGame()
.GetQuestManager()
.ProgressUserQuest(Session, QuestType.FurniDecorationFloor);
break;
case "wallpaper":
room.RoomData.WallPaper = item.ExtraData;
Azure.GetGame()
.GetAchievementManager()
.ProgressUserAchievement(Session, "ACH_RoomDecoWallpaper", 1);
Azure.GetGame()
.GetQuestManager()
.ProgressUserQuest(Session, QuestType.FurniDecorationWall);
break;
case "landscape":
room.RoomData.LandScape = item.ExtraData;
Azure.GetGame()
.GetAchievementManager()
.ProgressUserAchievement(Session, "ACH_RoomDecoLandscape", 1);
break;
}
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.SetQuery(string.Concat(new object[]
{
"UPDATE rooms_data SET ",
type,
" = @extradata WHERE id = ",
room.RoomId
}));
queryReactor.AddParameter("extradata", item.ExtraData);
queryReactor.RunQuery();
queryReactor.RunFastQuery(string.Format("DELETE FROM items_rooms WHERE id={0} LIMIT 1", item.Id));
}
Session.GetHabbo().GetInventoryComponent().RemoveItem(item.Id, false);
var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("RoomSpacesMessageComposer"));
serverMessage.AppendString(type);
serverMessage.AppendString(item.ExtraData);
room.SendMessage(serverMessage);
}
internal void PromoteRoom()
{
var pageId = Request.GetUInteger16();
var item = Request.GetInteger();
var page2 = Azure.GetGame().GetCatalog().GetPage(pageId);
if (page2 == null) return;
var catalogItem = page2.GetItem(item);
if (catalogItem == null) return;
var num = Request.GetUInteger();
var text = Request.GetString();
Request.GetBool();
var text2 = string.Empty;
try
{
text2 = Request.GetString();
}
catch (Exception)
{
}
var category = Request.GetInteger();
var room = Azure.GetGame().GetRoomManager().GetRoom(num);
if (room == null)
{
var roomData = Azure.GetGame().GetRoomManager().GenerateRoomData(num);
if (roomData == null) return;
room = new Room();
room.Start(roomData);
}
if (!room.CheckRights(Session, true)) return;
if (catalogItem.CreditsCost > 0)
{
if (catalogItem.CreditsCost > Session.GetHabbo().Credits) return;
Session.GetHabbo().Credits -= (int)catalogItem.CreditsCost;
Session.GetHabbo().UpdateCreditsBalance();
}
if (catalogItem.DucketsCost > 0)
{
if (catalogItem.DucketsCost > Session.GetHabbo().ActivityPoints) return;
Session.GetHabbo().ActivityPoints -= (int)catalogItem.DucketsCost;
Session.GetHabbo().UpdateActivityPointsBalance();
}
if (catalogItem.BelCreditsCost > 0 || catalogItem.LoyaltyCost > 0)
{
if (catalogItem.BelCreditsCost > Session.GetHabbo().BelCredits) return;
Session.GetHabbo().BelCredits -= (int)catalogItem.BelCreditsCost;
Session.GetHabbo().UpdateSeasonalCurrencyBalance();
}
Session.SendMessage(CatalogPacket.PurchaseOk(catalogItem, catalogItem.Items));
if (room.RoomData.Event != null && !room.RoomData.Event.HasExpired)
{
room.RoomData.Event.Time = Azure.GetUnixTimeStamp();
Azure.GetGame().GetRoomEvents().SerializeEventInfo(room.RoomId);
}
else
{
Azure.GetGame().GetRoomEvents().AddNewEvent(room.RoomId, text, text2, Session, 7200, category);
Azure.GetGame().GetRoomEvents().SerializeEventInfo(room.RoomId);
}
Session.GetHabbo().GetBadgeComponent().GiveBadge("RADZZ", true, Session, false);
}
internal void GetPromotionableRooms()
{
var serverMessage = new ServerMessage();
serverMessage.Init(LibraryParser.OutgoingRequest("CatalogPromotionGetRoomsMessageComposer"));
serverMessage.AppendBool(true);
serverMessage.AppendInteger(Session.GetHabbo().UsersRooms.Count);
foreach (var current in Session.GetHabbo().UsersRooms)
{
serverMessage.AppendInteger(current.Id);
serverMessage.AppendString(current.Name);
serverMessage.AppendBool(false);
}
Response = serverMessage;
SendResponse();
}
internal void SaveHeightmap()
{
var room = Session.GetHabbo().CurrentRoom;
if (room == null)
{
Session.SendNotif(Azure.GetLanguage().GetVar("user_is_not_in_room"));
return;
}
if (!room.CheckRights(Session, true))
{
Session.SendNotif(Azure.GetLanguage().GetVar("user_is_not_his_room"));
return;
}
var heightMap = Request.GetString();
var doorX = Request.GetInteger();
var doorY = Request.GetInteger();
var doorOrientation = Request.GetInteger();
var wallThickness = Request.GetInteger();
var floorThickness = Request.GetInteger();
var wallHeight = Request.GetInteger();
if (heightMap.Length < 2)
{
Session.SendNotif(Azure.GetLanguage().GetVar("invalid_room_length"));
return;
}
if (wallThickness < -2 || wallThickness > 1)
wallThickness = 0;
if (floorThickness < -2 || floorThickness > 1)
floorThickness = 0;
if (doorOrientation < 0 || doorOrientation > 8)
doorOrientation = 2;
if (wallHeight < -1 || wallHeight > 16)
wallHeight = -1;
char[] validLetters =
{
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', '\r'
};
if (heightMap.Any(letter => !validLetters.Contains(letter)))
{
Session.SendNotif(Azure.GetLanguage().GetVar("user_floor_editor_error"));
return;
}
if (heightMap.Last() == Convert.ToChar(13))
heightMap = heightMap.Remove(heightMap.Length - 1);
if (heightMap.Length > 1800)
{
var message = new ServerMessage(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer"));
message.AppendString("floorplan_editor.error");
message.AppendInteger(1);
message.AppendString("errors");
message.AppendString(
"(general): too large height (max 64 tiles)\r(general): too large area (max 1800 tiles)");
Session.SendMessage(message);
return;
}
if (heightMap.Split((char)13).Length - 1 < doorY)
{
var message = new ServerMessage(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer"));
message.AppendString("floorplan_editor.error");
message.AppendInteger(1);
message.AppendString("errors");
message.AppendString("Y: Door is in invalid place.");
Session.SendMessage(message);
return;
}
var lines = heightMap.Split((char)13);
var lineWidth = lines[0].Length;
for (var i = 1; i < lines.Length; i++)
if (lines[i].Length != lineWidth)
{
var message = new ServerMessage(LibraryParser.OutgoingRequest("SuperNotificationMessageComposer"));
message.AppendString("floorplan_editor.error");
message.AppendInteger(1);
message.AppendString("errors");
message.AppendString("(general): Line " + (i + 1) + " is of different length than line 1");
Session.SendMessage(message);
return;
}
var doorZ = 0.0;
var charDoor = lines[doorY][doorX];
if (charDoor >= (char)97 && charDoor <= 119) // a-w
{
doorZ = charDoor - 87;
}
else
{
double.TryParse(charDoor.ToString(), out doorZ);
}
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.SetQuery("REPLACE INTO rooms_models_customs (roomid,door_x,door_y,door_z,door_dir,heightmap,poolmap) VALUES ('" + room.RoomId + "', '" + doorX + "','" +
doorY + "','" + doorZ.ToString(CultureInfo.InvariantCulture).Replace(',', '.') + "','" + doorOrientation + "',@newmodel,'')");
queryReactor.AddParameter("newmodel", heightMap);
queryReactor.RunQuery();
room.RoomData.WallHeight = wallHeight;
room.RoomData.WallThickness = wallThickness;
room.RoomData.FloorThickness = floorThickness;
room.RoomData.Model.DoorZ = doorZ;
Azure.GetGame().GetAchievementManager().ProgressUserAchievement(Session, "ACH_RoomDecoHoleFurniCount", 1, false);
queryReactor.RunFastQuery(
string.Format(
"UPDATE rooms_data SET model_name = 'custom', wallthick = '{0}', floorthick = '{1}', walls_height = '{2}' WHERE id = {3};",
wallThickness, floorThickness, wallHeight, room.RoomId));
Azure.GetGame().GetRoomManager().LoadModels(queryReactor);
room.ResetGameMap("custom", wallHeight, wallThickness, floorThickness);
Azure.GetGame().GetRoomManager().UnloadRoom(room, "Reload floor");
}
Session.SendNotif(Azure.GetLanguage().GetVar("user_floor_editor_save"));
}
internal void PlantMonsterplant(RoomItem mopla, Room room)
{
int rarity = 0, internalRarity = 0;
if (room == null || mopla == null)
return;
if (mopla.GetBaseItem().InteractionType != Interaction.Moplaseed)
return;
if (string.IsNullOrEmpty(mopla.ExtraData) || mopla.ExtraData == "0")
rarity = 1;
if (!string.IsNullOrEmpty(mopla.ExtraData) && mopla.ExtraData != "0")
rarity = int.TryParse(mopla.ExtraData, out internalRarity) ? internalRarity : 1;
var getX = mopla.X;
var getY = mopla.Y;
room.GetRoomItemHandler().RemoveFurniture(Session, mopla.Id, false);
var pet = Catalog.CreatePet(Session.GetHabbo().Id, "Monsterplant", 16, "0", "0", rarity);
Response.Init(LibraryParser.OutgoingRequest("SendMonsterplantIdMessageComposer"));
Response.AppendInteger(pet.PetId);
SendResponse();
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
queryReactor.RunFastQuery(string.Concat(new object[]
{
"UPDATE bots SET room_id = '",
room.RoomId,
"', x = '",
getX,
"', y = '",
getY,
"' WHERE id = '",
pet.PetId,
"'"
}));
pet.PlacedInRoom = true;
pet.RoomId = room.RoomId;
var bot = new RoomBot(pet.PetId, pet.OwnerId, pet.RoomId, AIType.Pet, "freeroam", pet.Name, "", pet.Look,
getX, getY, 0.0, 4, 0, 0, 0, 0, null, null, "", 0, false);
room.GetRoomUserManager().DeployBot(bot, pet);
if (pet.DbState != DatabaseUpdateState.NeedsInsert)
pet.DbState = DatabaseUpdateState.NeedsUpdate;
using (var queryreactor2 = Azure.GetDatabaseManager().GetQueryReactor())
{
queryreactor2.RunFastQuery(string.Format("DELETE FROM items_rooms WHERE id = {0}", mopla.Id));
room.GetRoomUserManager().SavePets(queryreactor2);
}
}
internal void KickBot()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null || !room.CheckRights(Session, true, false))
return;
var roomUserByVirtualId = room.GetRoomUserManager().GetRoomUserByVirtualId(Request.GetInteger());
if (roomUserByVirtualId == null || !roomUserByVirtualId.IsBot)
return;
room.GetRoomUserManager().RemoveBot(roomUserByVirtualId.VirtualId, true);
}
internal void PlacePet()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null || (!room.RoomData.AllowPets && !room.CheckRights(Session, true, false)) ||
!room.CheckRights(Session, true, false))
return;
var petId = Request.GetUInteger();
var pet = Session.GetHabbo().GetInventoryComponent().GetPet(petId);
if (pet == null || pet.PlacedInRoom)
return;
var x = Request.GetInteger();
var y = Request.GetInteger();
if (!room.GetGameMap().CanWalk(x, y, false, 0u))
return;
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
queryReactor.RunFastQuery("UPDATE bots SET room_id = '" + room.RoomId + "', x = '" + x + "', y = '" + y + "' WHERE id = '" + petId + "'");
pet.PlacedInRoom = true;
pet.RoomId = room.RoomId;
room.GetRoomUserManager()
.DeployBot(
new RoomBot(pet.PetId, Convert.ToUInt32(pet.OwnerId), pet.RoomId, AIType.Pet, "freeroam", pet.Name,
"", pet.Look, x, y, 0.0, 4, 0, 0, 0, 0, null, null, "", 0, false), pet);
Session.GetHabbo().GetInventoryComponent().MovePetToRoom(pet.PetId);
if (pet.DbState != DatabaseUpdateState.NeedsInsert)
pet.DbState = DatabaseUpdateState.NeedsUpdate;
using (var queryreactor2 = Azure.GetDatabaseManager().GetQueryReactor())
room.GetRoomUserManager().SavePets(queryreactor2);
Session.SendMessage(Session.GetHabbo().GetInventoryComponent().SerializePetInventory());
}
internal void UpdateEventInfo()
{
Request.GetInteger();
var original = Request.GetString();
var original2 = Request.GetString();
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null || !room.CheckRights(Session, true, false) || room.RoomData.Event == null)
return;
room.RoomData.Event.Name = original;
room.RoomData.Event.Description = original2;
Azure.GetGame().GetRoomEvents().UpdateEvent(room.RoomData.Event);
}
internal void HandleBotSpeechList()
{
var botId = Request.GetUInteger();
var num2 = Request.GetInteger();
var num3 = num2;
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null)
return;
var bot = room.GetRoomUserManager().GetBot(botId);
if (bot == null || !bot.IsBot)
return;
if (num3 == 2)
{
var text = bot.BotData.RandomSpeech == null ? string.Empty : string.Join("\n", bot.BotData.RandomSpeech);
text += ";#;";
text += bot.BotData.AutomaticChat ? "true" : "false";
text += ";#;";
text += bot.BotData.SpeechInterval;
text += ";#;";
text += bot.BotData.MixPhrases ? "true" : "false";
var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("BotSpeechListMessageComposer"));
serverMessage.AppendInteger(botId);
serverMessage.AppendInteger(num2);
serverMessage.AppendString(text);
Response = serverMessage;
SendResponse();
return;
}
if (num3 != 5)
return;
var serverMessage2 = new ServerMessage(LibraryParser.OutgoingRequest("BotSpeechListMessageComposer"));
serverMessage2.AppendInteger(botId);
serverMessage2.AppendInteger(num2);
serverMessage2.AppendString(bot.BotData.Name);
Response = serverMessage2;
SendResponse();
}
internal void ManageBotActions()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
var botId = Request.GetUInteger();
var action = Request.GetInteger();
var data = Azure.FilterInjectionChars(Request.GetString());
var bot = room.GetRoomUserManager().GetBot(botId);
var flag = false;
switch (action)
{
case 1:
bot.BotData.Look = Session.GetHabbo().Look;
goto IL_439;
case 2:
try
{
var array = data.Split(new[] { ";#;" }, StringSplitOptions.None);
var speechsJunk =
array[0].Substring(0, array[0].Length > 1024 ? 1024 : array[0].Length)
.Split(Convert.ToChar(13));
var speak = array[1] == "true";
var speechDelay = int.Parse(array[2]);
var mix = array[3] == "true";
if (speechDelay < 7) speechDelay = 7;
var speechs =
speechsJunk.Where(
speech =>
!string.IsNullOrEmpty(speech) &&
(!speech.ToLower().Contains("update") || !speech.ToLower().Contains("set")))
.Aggregate(string.Empty,
(current, speech) =>
current +
(TextHandling.FilterHTML(speech, Session.GetHabbo().GotCommand("ha")) + ";"));
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.SetQuery(
"UPDATE bots SET automatic_chat = @autochat, speaking_interval = @interval, mix_phrases = @mix_phrases, speech = @speech WHERE id = @botid");
queryReactor.AddParameter("autochat", speak ? "1" : "0");
queryReactor.AddParameter("interval", speechDelay);
queryReactor.AddParameter("mix_phrases", mix ? "1" : "0");
queryReactor.AddParameter("speech", speechs);
queryReactor.AddParameter("botid", botId);
queryReactor.RunQuery();
}
var randomSpeech = speechs.Split(';').ToList();
room.GetRoomUserManager()
.UpdateBot(bot.VirtualId, bot, bot.BotData.Name, bot.BotData.Motto, bot.BotData.Look,
bot.BotData.Gender, randomSpeech, null, speak, speechDelay, mix);
flag = true;
goto IL_439;
}
catch (Exception e)
{
Writer.Writer.LogException(e.ToString());
return;
}
case 3:
bot.BotData.WalkingMode = bot.BotData.WalkingMode == "freeroam" ? "stand" : "freeroam";
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.SetQuery("UPDATE bots SET walk_mode = @walkmode WHERE id = @botid");
queryReactor.AddParameter("walkmode", bot.BotData.WalkingMode);
queryReactor.AddParameter("botid", botId);
queryReactor.RunQuery();
}
goto IL_439;
case 4:
break;
case 5:
bot.BotData.Name = TextHandling.FilterHTML(data, Session.GetHabbo().GotCommand("ha"));
goto IL_439;
default:
goto IL_439;
}
if (bot.BotData.DanceId > 0) bot.BotData.DanceId = 0;
else
{
var random = new Random();
bot.DanceId = random.Next(1, 4);
bot.BotData.DanceId = bot.DanceId;
}
var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("DanceStatusMessageComposer"));
serverMessage.AppendInteger(bot.VirtualId);
serverMessage.AppendInteger(bot.BotData.DanceId);
Session.GetHabbo().CurrentRoom.SendMessage(serverMessage);
IL_439:
if (!flag)
{
var serverMessage2 = new ServerMessage(LibraryParser.OutgoingRequest("SetRoomUserMessageComposer"));
serverMessage2.AppendInteger(1);
bot.Serialize(serverMessage2, room.GetGameMap().GotPublicPool);
room.SendMessage(serverMessage2);
}
}
internal void RoomOnLoad()
{
// TODO!
Response.Init(LibraryParser.OutgoingRequest("SendRoomCampaignFurnitureMessageComposer"));
Response.AppendInteger(0);
SendResponse();
}
internal void MuteAll()
{
var currentRoom = Session.GetHabbo().CurrentRoom;
if (currentRoom == null || !currentRoom.CheckRights(Session, true, false))
return;
currentRoom.RoomMuted = !currentRoom.RoomMuted;
Response.Init(LibraryParser.OutgoingRequest("RoomMuteStatusMessageComposer"));
Response.AppendBool(currentRoom.RoomMuted);
Session.SendMessage(Response);
}
internal void HomeRoom()
{
GetResponse().Init(LibraryParser.OutgoingRequest("HomeRoomMessageComposer"));
GetResponse().AppendInteger(Session.GetHabbo().HomeRoom);
GetResponse().AppendInteger(Session.GetHabbo().HomeRoom);
SendResponse();
}
internal void RemoveFavouriteRoom()
{
if (Session.GetHabbo() == null)
return;
var num = Request.GetUInteger();
Session.GetHabbo().FavoriteRooms.Remove(num);
Response.Init(LibraryParser.OutgoingRequest("FavouriteRoomsUpdateMessageComposer"));
Response.AppendInteger(num);
Response.AppendBool(false);
SendResponse();
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
queryReactor.RunFastQuery(string.Concat(new object[]
{
"DELETE FROM users_favorites WHERE user_id = ",
Session.GetHabbo().Id,
" AND room_id = ",
num
}));
}
internal void RoomUserAction()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null)
return;
var roomUserByHabbo = room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (roomUserByHabbo == null)
return;
roomUserByHabbo.UnIdle();
var num = Request.GetInteger();
roomUserByHabbo.DanceId = 0;
var action = new ServerMessage(LibraryParser.OutgoingRequest("RoomUserActionMessageComposer"));
action.AppendInteger(roomUserByHabbo.VirtualId);
action.AppendInteger(num);
room.SendMessage(action);
if (num == 5)
{
roomUserByHabbo.IsAsleep = true;
var sleep = new ServerMessage(LibraryParser.OutgoingRequest("RoomUserIdleMessageComposer"));
sleep.AppendInteger(roomUserByHabbo.VirtualId);
sleep.AppendBool(roomUserByHabbo.IsAsleep);
room.SendMessage(sleep);
}
Azure.GetGame().GetQuestManager().ProgressUserQuest(Session, QuestType.SocialWave, 0u);
}
internal void GetRoomData1()
{
/*this.Response.Init(StaticClientMessageHandler.OutgoingRequest("297"));//Not in release
this.Response.AppendInt32(0);
this.SendResponse();*/
}
internal void GetRoomData2()
{
try
{
var queuedServerMessage = new QueuedServerMessage(Session.GetConnection());
if (Session.GetHabbo().LoadingRoom <= 0u || CurrentLoadingRoom == null)
return;
var roomData = CurrentLoadingRoom.RoomData;
if (roomData == null)
return;
if (roomData.Model == null || CurrentLoadingRoom.GetGameMap() == null)
{
Session.SendMessage(
new ServerMessage(LibraryParser.OutgoingRequest("OutOfRoomMessageComposer")));
ClearRoomLoading();
}
else
{
queuedServerMessage.AppendResponse(CurrentLoadingRoom.GetGameMap().GetNewHeightmap());
queuedServerMessage.AppendResponse(CurrentLoadingRoom.GetGameMap().Model.GetHeightmap());
queuedServerMessage.SendResponse();
GetRoomData3();
}
}
catch (Exception ex)
{
Logging.LogException("Unable to load room ID [" + Session.GetHabbo().LoadingRoom + "]" + ex);
}
}
internal void GetRoomData3()
{
if (Session.GetHabbo().LoadingRoom <= 0u || !Session.GetHabbo().LoadingChecksPassed ||
CurrentLoadingRoom == null || Session == null)
return;
if (CurrentLoadingRoom.RoomData.UsersNow + 1 > CurrentLoadingRoom.RoomData.UsersMax &&
!Session.GetHabbo().HasFuse("fuse_enter_full_rooms"))
{
var roomFull = new ServerMessage(LibraryParser.OutgoingRequest("RoomEnterErrorMessageComposer"));
roomFull.AppendInteger(1);
return;
}
var queuedServerMessage = new QueuedServerMessage(Session.GetConnection());
var array = CurrentLoadingRoom.GetRoomItemHandler().FloorItems.Values.ToArray();
var array2 = CurrentLoadingRoom.GetRoomItemHandler().WallItems.Values.ToArray();
Response.Init(LibraryParser.OutgoingRequest("RoomFloorItemsMessageComposer"));
if (CurrentLoadingRoom.RoomData.Group != null)
{
if (CurrentLoadingRoom.RoomData.Group.AdminOnlyDeco == 1u)
{
Response.AppendInteger(CurrentLoadingRoom.RoomData.Group.Admins.Count + 1);
using (var enumerator = CurrentLoadingRoom.RoomData.Group.Admins.Values.GetEnumerator())
{
while (enumerator.MoveNext())
{
var current = enumerator.Current;
if (Azure.GetHabboById(current.Id) == null)
continue;
Response.AppendInteger(current.Id);
Response.AppendString(Azure.GetHabboById(current.Id).UserName);
}
goto IL_220;
}
}
Response.AppendInteger(CurrentLoadingRoom.RoomData.Group.Members.Count + 1);
foreach (var current2 in CurrentLoadingRoom.RoomData.Group.Members.Values)
{
Response.AppendInteger(current2.Id);
Response.AppendString(Azure.GetHabboById(current2.Id).UserName);
}
IL_220:
Response.AppendInteger(CurrentLoadingRoom.RoomData.OwnerId);
Response.AppendString(CurrentLoadingRoom.RoomData.Owner);
}
else
{
Response.AppendInteger(1);
Response.AppendInteger(CurrentLoadingRoom.RoomData.OwnerId);
Response.AppendString(CurrentLoadingRoom.RoomData.Owner);
}
Response.AppendInteger(array.Length);
var array3 = array;
foreach (var roomItem in array3)
{
roomItem.Serialize(Response);
}
queuedServerMessage.AppendResponse(GetResponse());
Response.Init(LibraryParser.OutgoingRequest("RoomWallItemsMessageComposer"));
if (CurrentLoadingRoom.RoomData.Group != null)
{
if (CurrentLoadingRoom.RoomData.Group.AdminOnlyDeco == 1u)
{
Response.AppendInteger(CurrentLoadingRoom.RoomData.Group.Admins.Count + 1);
using (var enumerator3 = CurrentLoadingRoom.RoomData.Group.Admins.Values.GetEnumerator())
{
while (enumerator3.MoveNext())
{
var current3 = enumerator3.Current;
Response.AppendInteger(current3.Id);
Response.AppendString(Azure.GetHabboById(current3.Id).UserName);
}
goto IL_423;
}
}
Response.AppendInteger(CurrentLoadingRoom.RoomData.Group.Members.Count + 1);
foreach (var current4 in CurrentLoadingRoom.RoomData.Group.Members.Values)
{
Response.AppendInteger(current4.Id);
Response.AppendString(Azure.GetHabboById(current4.Id).UserName);
}
IL_423:
Response.AppendInteger(CurrentLoadingRoom.RoomData.OwnerId);
Response.AppendString(CurrentLoadingRoom.RoomData.Owner);
}
else
{
Response.AppendInteger(1);
Response.AppendInteger(CurrentLoadingRoom.RoomData.OwnerId);
Response.AppendString(CurrentLoadingRoom.RoomData.Owner);
}
Response.AppendInteger(array2.Length);
var array4 = array2;
foreach (var roomItem2 in array4)
{
roomItem2.Serialize(Response);
}
queuedServerMessage.AppendResponse(GetResponse());
Array.Clear(array, 0, array.Length);
Array.Clear(array2, 0, array2.Length);
array = null;
array2 = null;
CurrentLoadingRoom.GetRoomUserManager().AddUserToRoom(Session, Session.GetHabbo().SpectatorMode, false);
Session.GetHabbo().SpectatorMode = false;
var competition = Azure.GetGame().GetRoomManager().GetCompetitionManager().Competition;
if (competition != null)
{
if (CurrentLoadingRoom.CheckRights(Session, true, false))
{
if (!competition.Entries.ContainsKey(CurrentLoadingRoom.RoomData.Id))
{
competition.AppendEntrySubmitMessage(Response, CurrentLoadingRoom.RoomData.State != 0 ? 4 : 1);
}
else
{
if(competition.Entries[CurrentLoadingRoom.RoomData.Id].CompetitionStatus == 3)
{ }
//Competition.AppendEntrySubmitMessage(Response, 0);
else if(competition.HasAllRequiredFurnis(CurrentLoadingRoom))
competition.AppendEntrySubmitMessage(Response, 2);
else
competition.AppendEntrySubmitMessage(Response, 3, CurrentLoadingRoom);
}
}
else if (!CurrentLoadingRoom.CheckRights(Session, true, false) && competition.Entries.ContainsKey(CurrentLoadingRoom.RoomData.Id))
{
if(Session.GetHabbo().DailyCompetitionVotes > 0)
competition.AppendVoteMessage(Response, Session.GetHabbo());
}
queuedServerMessage.AppendResponse(GetResponse());
}
queuedServerMessage.SendResponse();
if (Azure.GetUnixTimeStamp() < Session.GetHabbo().FloodTime && Session.GetHabbo().FloodTime != 0)
{
var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("FloodFilterMessageComposer"));
serverMessage.AppendInteger((Session.GetHabbo().FloodTime - Azure.GetUnixTimeStamp()));
Session.SendMessage(serverMessage);
}
ClearRoomLoading();
Poll poll;
if (!Azure.GetGame().GetPollManager().TryGetPoll(CurrentLoadingRoom.RoomId, out poll) ||
Session.GetHabbo().GotPollData(poll.Id))
return;
Response.Init(LibraryParser.OutgoingRequest("SuggestPollMessageComposer"));
poll.Serialize(Response);
SendResponse();
}
internal void WidgetContainers()
{
var text = Request.GetString();
if (Session == null) return;
var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("LandingWidgetMessageComposer"));
if (!string.IsNullOrEmpty(text))
{
var array = text.Split(',');
serverMessage.AppendString(text);
serverMessage.AppendString(array[1]);
}
else
{
serverMessage.AppendString("");
serverMessage.AppendString("");
}
Session.SendMessage(serverMessage);
}
internal void RefreshPromoEvent()
{
var hotelView = Azure.GetGame().GetHotelView();
if (Session == null || Session.GetHabbo() == null)
return;
if (hotelView.HotelViewPromosIndexers.Count <= 0)
return;
var message =
hotelView.SmallPromoComposer(
new ServerMessage(LibraryParser.OutgoingRequest("LandingPromosMessageComposer")));
Session.SendMessage(message);
}
internal void AcceptPoll()
{
var key = Request.GetUInteger();
var poll = Azure.GetGame().GetPollManager().Polls[key];
var serverMessage = new ServerMessage(LibraryParser.OutgoingRequest("PollQuestionsMessageComposer"));
serverMessage.AppendInteger(poll.Id);
serverMessage.AppendString(poll.PollName);
serverMessage.AppendString(poll.Thanks);
serverMessage.AppendInteger(poll.Questions.Count);
foreach (var current in poll.Questions)
{
var questionNumber = (poll.Questions.IndexOf(current) + 1);
current.Serialize(serverMessage, questionNumber);
}
Response = serverMessage;
SendResponse();
}
internal void RefusePoll()
{
var num = Request.GetUInteger();
Session.GetHabbo().AnsweredPolls.Add(num);
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.SetQuery("INSERT INTO users_polls VALUES (@userid , @pollid , 0 , '0' , '')");
queryReactor.AddParameter("userid", Session.GetHabbo().Id);
queryReactor.AddParameter("pollid", num);
queryReactor.RunQuery();
}
}
internal void AnswerPoll()
{
var pollId = Request.GetUInteger();
var questionId = Request.GetUInteger();
var num3 = Request.GetInteger();
var list = new List<string>();
{
for (var i = 0; i < num3; i++)
list.Add(Request.GetString());
var text = string.Join("\r\n", list);
var poll = Azure.GetGame().GetPollManager().TryGetPollById(pollId);
if (poll != null && poll.Type == Poll.PollType.Matching)//MATCHING_POLL
{
if (text == "1") { poll.answersPositive++; }
else { poll.answersNegative++; }
ServerMessage Answered = new ServerMessage(LibraryParser.OutgoingRequest("MatchingPollAnsweredMessageComposer"));
Answered.AppendInteger(Session.GetHabbo().Id);
Answered.AppendString(text);
Answered.AppendInteger(0);//count
/*Answered.AppendInteger(2);//count
Answered.AppendString("0");
Answered.AppendInteger(poll.answersNegative);
Answered.AppendString("1");
Answered.AppendInteger(poll.answersPositive);*/
Session.SendMessage(Answered);
return;
}
Session.GetHabbo().AnsweredPolls.Add(pollId);
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.SetQuery(
"INSERT INTO users_polls VALUES (@userid , @pollid , @questionid , '1' , @answer)");
queryReactor.AddParameter("userid", Session.GetHabbo().Id);
queryReactor.AddParameter("pollid", pollId);
queryReactor.AddParameter("questionid", questionId);
queryReactor.AddParameter("answer", text);
queryReactor.RunQuery();
}
}
}
public string WallPositionCheck(string wallPosition)
{
try
{
if (wallPosition.Contains(Convert.ToChar(13)) || wallPosition.Contains(Convert.ToChar(9))) return null;
var array = wallPosition.Split(' ');
if (array[2] != "l" && array[2] != "r") return null;
var array2 = array[0].Substring(3).Split(',');
var num = int.Parse(array2[0]);
var num2 = int.Parse(array2[1]);
if (num >= 0 && num2 >= 0 && num <= 200 && num2 <= 200)
{
var array3 = array[1].Substring(2).Split(',');
var num3 = int.Parse(array3[0]);
var num4 = int.Parse(array3[1]);
return num3 < 0 || num4 < 0 || num3 > 200 || num4 > 200
? null
: string.Concat(":w=", num, ",", num2, " l=", num3, ",", num4, " ", array[2]);
}
}
catch
{
}
return null;
}
internal void Sit()
{
var user =
Session.GetHabbo().CurrentRoom.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (user == null) return;
if (user.Statusses.ContainsKey("lay") || user.IsLyingDown ||
user.RidingHorse || user.IsWalking)
return;
if (user.RotBody % 2 != 0) user.RotBody--;
user.Z = Session.GetHabbo().CurrentRoom.GetGameMap().SqAbsoluteHeight(user.X, user.Y);
if (!user.Statusses.ContainsKey("sit"))
{
user.UpdateNeeded = true;
user.Statusses.Add("sit", "0.55");
}
user.IsSitting = true;
}
public void Whisper()
{
if (!Session.GetHabbo().InRoom) return;
var currentRoom = Session.GetHabbo().CurrentRoom;
var text = Request.GetString();
var text2 = text.Split(' ')[0];
var msg = text.Substring(text2.Length + 1);
var colour = Request.GetInteger();
var roomUserByHabbo = currentRoom.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
var roomUserByHabbo2 = currentRoom.GetRoomUserManager().GetRoomUserByHabbo(text2);
msg = currentRoom.WordFilter.Aggregate(msg,
(current1, current) => Regex.Replace(current1, current, "bobba", RegexOptions.IgnoreCase));
BlackWord word;
if (BlackWordsManager.Check(msg, BlackWordType.Hotel, out word))
{
var settings = word.TypeSettings;
Session.HandlePublicist(word.Word, msg, "WHISPER", settings);
if (!settings.ShowMessage)
{
Session.SendWhisper("El mensaje enviado tiene la palabra: " + word.Word +
" que no es permitida aquí, podrías ser baneado.");
return;
}
}
if (roomUserByHabbo == null || roomUserByHabbo2 == null)
{
Session.SendWhisper(msg);
return;
}
if (Session.GetHabbo().Rank < 4 && currentRoom.CheckMute(Session)) return;
currentRoom.AddChatlog(Session.GetHabbo().Id, string.Format("<fluister naar {0}>: {1}", text2, msg),
false);
Azure.GetGame().GetQuestManager().ProgressUserQuest(Session, QuestType.SocialChat, 0u);
var colour2 = colour;
if (!roomUserByHabbo.IsBot)
if (colour2 == 2 || (colour2 == 23 && !Session.GetHabbo().HasFuse("fuse_mod")) || colour2 < 0 ||
colour2 > 29) colour2 = roomUserByHabbo.LastBubble; // or can also be just 0
roomUserByHabbo.UnIdle();
var whisp = new ServerMessage(LibraryParser.OutgoingRequest("WhisperMessageComposer"));
whisp.AppendInteger(roomUserByHabbo.VirtualId);
whisp.AppendString(msg);
whisp.AppendInteger(0);
whisp.AppendInteger(colour2);
whisp.AppendInteger(0);
whisp.AppendInteger(-1);
roomUserByHabbo.GetClient().SendMessage(whisp);
if (!roomUserByHabbo2.IsBot &&
roomUserByHabbo2.UserId != roomUserByHabbo.UserId &&
!roomUserByHabbo2.GetClient().GetHabbo().MutedUsers.Contains(Session.GetHabbo().Id)) roomUserByHabbo2.GetClient().SendMessage(whisp);
var roomUserByRank = currentRoom.GetRoomUserManager().GetRoomUserByRank(4);
if (!roomUserByRank.Any()) return;
foreach (var current2 in roomUserByRank)
if (current2 != null && current2.HabboId != roomUserByHabbo2.HabboId &&
current2.HabboId != roomUserByHabbo.HabboId && current2.GetClient() != null)
{
var whispStaff = new ServerMessage(LibraryParser.OutgoingRequest("WhisperMessageComposer"));
whispStaff.AppendInteger(roomUserByHabbo.VirtualId);
whispStaff.AppendString(string.Format("Whisper to {0}: {1}", text2, msg));
whispStaff.AppendInteger(0);
whispStaff.AppendInteger(colour2);
whispStaff.AppendInteger(0);
whispStaff.AppendInteger(-1);
current2.GetClient().SendMessage(whispStaff);
}
}
public void Chat()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null)
return;
var roomUser = room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (roomUser == null)
return;
var message = Request.GetString();
var bubble = Request.GetInteger();
var count = Request.GetInteger();
if (!roomUser.IsBot)
if (bubble == 2 || (bubble == 23 && !Session.GetHabbo().HasFuse("fuse_mod")) || bubble < 0 ||
bubble > 29)
bubble = roomUser.LastBubble; // or can also be just 0
roomUser.Chat(Session, message, false, count, bubble);
}
public void Shout()
{
var room = Azure.GetGame().GetRoomManager().GetRoom(Session.GetHabbo().CurrentRoomId);
if (room == null)
return;
var roomUserByHabbo = room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id);
if (roomUserByHabbo == null)
return;
var Msg = Request.GetString();
var bubble = Request.GetInteger();
if (!roomUserByHabbo.IsBot)
if (bubble == 2 || (bubble == 23 && !Session.GetHabbo().HasFuse("fuse_mod")) || bubble < 0 ||
bubble > 29)
bubble = roomUserByHabbo.LastBubble; // or can also be just 0
roomUserByHabbo.Chat(Session, Msg, true, -1, bubble);
}
public void GetFloorPlanUsedCoords()
{
Response.Init(LibraryParser.OutgoingRequest("GetFloorPlanUsedCoordsMessageComposer"));
var room = Session.GetHabbo().CurrentRoom;
if (room == null)
Response.AppendInteger(0);
else
{
var coords = room.GetGameMap().CoordinatedItems.Keys.OfType<Point>().ToArray();
Response.AppendInteger(coords.Count());
foreach (var point in coords)
{
Response.AppendInteger(point.X);
Response.AppendInteger(point.Y);
}
}
SendResponse();
}
public void GetFloorPlanDoor()
{
var room = Session.GetHabbo().CurrentRoom;
if (room == null)
return;
Response.Init(LibraryParser.OutgoingRequest("SetFloorPlanDoorMessageComposer"));
Response.AppendInteger(room.GetGameMap().Model.DoorX);
Response.AppendInteger(room.GetGameMap().Model.DoorY);
Response.AppendInteger(room.GetGameMap().Model.DoorOrientation);
SendResponse();
}
public void SubmitRoomToCompetition()
{
var name = Request.GetString();
var code = Request.GetInteger();
var room = Session.GetHabbo().CurrentRoom;
if (room == null) return;
var roomData = room.RoomData;
if (roomData == null) return;
var competition = Azure.GetGame().GetRoomManager().GetCompetitionManager().Competition;
if (competition == null) return;
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
if (code == 2)
{
if (competition.Entries.ContainsKey(room.RoomId)) return;
queryReactor.SetQuery("INSERT INTO rooms_competitions_entries (competition_id, room_id, status) VALUES (@competition_id, @room_id, @status)");
queryReactor.AddParameter("competition_id", competition.Id);
queryReactor.AddParameter("room_id", room.RoomId);
queryReactor.AddParameter("status", 2);
queryReactor.RunQuery();
competition.Entries.Add(room.RoomId, roomData);
var message = new ServerMessage();
roomData.CompetitionStatus = 2;
competition.AppendEntrySubmitMessage(message, 3, room);
Session.SendMessage(message);
}
else if (code == 3)
{
if (!competition.Entries.ContainsKey(room.RoomId)) return;
var entry = competition.Entries[room.RoomId];
if (entry == null) return;
queryReactor.SetQuery("UPDATE rooms_competitions_entries SET status = @status WHERE competition_id = @competition_id AND room_id = @roomid");
queryReactor.AddParameter("status", 3);
queryReactor.AddParameter("competition_id", competition.Id);
queryReactor.AddParameter("roomid", room.RoomId);
queryReactor.RunQuery();
roomData.CompetitionStatus = 3;
var message = new ServerMessage();
competition.AppendEntrySubmitMessage(message, 0);
Session.SendMessage(message);
}
}
}
public void VoteForRoom()
{
var name = Request.GetString();
if (Session.GetHabbo().DailyCompetitionVotes <= 0) return;
var room = Session.GetHabbo().CurrentRoom;
if (room == null) return;
var roomData = room.RoomData;
if (roomData == null) return;
var competition = Azure.GetGame().GetRoomManager().GetCompetitionManager().Competition;
if (competition == null) return;
if (!competition.Entries.ContainsKey(room.RoomId)) return;
var entry = competition.Entries[room.RoomId];
entry.CompetitionVotes++;
Session.GetHabbo().DailyCompetitionVotes--;
using (var queryReactor = Azure.GetDatabaseManager().GetQueryReactor())
{
queryReactor.SetQuery("UPDATE rooms_competitions_entries SET votes = @votes WHERE competition_id = @competition_id AND room_id = @roomid");
queryReactor.AddParameter("votes", entry.CompetitionVotes);
queryReactor.AddParameter("competition_id", competition.Id);
queryReactor.AddParameter("roomid", room.RoomId);
queryReactor.RunQuery();
queryReactor.RunFastQuery("UPDATE users_stats SET daily_competition_votes = " + Session.GetHabbo().DailyCompetitionVotes + " WHERE id = " + Session.GetHabbo().Id);
}
var message = new ServerMessage();
competition.AppendVoteMessage(message, Session.GetHabbo());
Session.SendMessage(message);
}
}
}
Fix para o Comando Disconnect (DisconnectUser.cs) (Azure\Azure.Emulator\HabboHotel\Commands\List\DisconnectUser.cs)
using Azure.HabboHotel.GameClients;
namespace Azure.HabboHotel.Commands.List
{
/// <summary>
/// Class DisconnectUser. This class cannot be inherited.
/// </summary>
internal sealed class DisconnectUser : Command
{
/// <summary>
/// Initializes a new instance of the <see cref="DisconnectUser"/> class.
/// </summary>
public DisconnectUser()
{
MinRank = 7;
Description = "dc user.";
Usage = ":dc [username]";
MinParams = 1;
}
public override bool Execute(GameClient session, string[] pms)
{
var user = Azure.GetGame().GetClientManager().GetClientByUserName(pms[0]);
if (user == null || user.GetHabbo() == null)
{
session.SendWhisper(Azure.GetLanguage().GetVar("user_not_found"));
return true;
}
if (user.GetHabbo().Rank >= session.GetHabbo().Rank)
{
session.SendWhisper(Azure.GetLanguage().GetVar("user_is_higher_rank"));
return true;
}
try
{
user.GetConnection().Dispose();
Azure.GetGame()
.GetModerationTool()
.LogStaffEntry(session.GetHabbo().UserName, user.GetHabbo().UserName, "dc",
string.Format("Disconnect User[{0}]", pms[1]));
}
catch
{
}
return true;
}
}
}
Créditos:
-Sir Jamal (azureweb.org)
-Criando Habbos.net

