internal static ServerMessage Compose(GameClient Session, Quest Quest)
		{
			int amountOfQuestsInCategory = MercuryEnvironment.GetGame().GetQuestManager().GetAmountOfQuestsInCategory(Quest.Category);
			int i = (Quest == null) ? amountOfQuestsInCategory : Quest.Number;
			int i2 = (Quest == null) ? 0 : Session.GetHabbo().GetQuestProgress(Quest.Id);
			ServerMessage serverMessage = new ServerMessage(Outgoing.QuestCompletedMessageComposer);
			serverMessage.AppendString(Quest.Category);
			serverMessage.AppendInt32(i);
			serverMessage.AppendInt32(Quest.Name.Contains("xmas2012") ? 1 : amountOfQuestsInCategory);
			serverMessage.AppendInt32((Quest == null) ? 3 : Quest.RewardType);
			serverMessage.AppendUInt((Quest == null) ? 0u : Quest.Id);
			serverMessage.AppendBoolean(Quest != null && Session.GetHabbo().CurrentQuestId == Quest.Id);
			serverMessage.AppendString((Quest == null) ? string.Empty : Quest.ActionName);
			serverMessage.AppendString((Quest == null) ? string.Empty : Quest.DataBit);
			serverMessage.AppendInt32((Quest == null) ? 0 : Quest.Reward);
			serverMessage.AppendString((Quest == null) ? string.Empty : Quest.Name);
			serverMessage.AppendInt32(i2);
			serverMessage.AppendUInt((Quest == null) ? 0u : Quest.GoalData);
			serverMessage.AppendInt32((Quest == null) ? 0 : Quest.TimeUnlock);
			serverMessage.AppendString("");
			serverMessage.AppendString("");
			serverMessage.AppendBoolean(true);
			serverMessage.AppendBoolean(true);
			return serverMessage;
		}
Beispiel #2
0
		internal void Searialize(ServerMessage reply)
		{
			reply.AppendUInt(this.userID);
			reply.AppendString(this.username);
			reply.AppendString(this.motto);
			bool b = MercuryEnvironment.GetGame().GetClientManager().GetClient(this.userID) != null;
			reply.AppendBoolean(b);
			reply.AppendBoolean(false);
			reply.AppendString(string.Empty);
			reply.AppendInt32(0);
			reply.AppendString(this.look);
			reply.AppendString(this.last_online);
		}
Beispiel #3
0
        internal static ServerMessage ComposeIndex(uint Rank)
        {
            var Pages = MercuryEnvironment.GetGame().GetCatalog().Categories.Values.OfType<CatalogPage>();
            ServerMessage Message = new ServerMessage(Outgoing.CatalogueIndexMessageComposer);
            var SortedPages = Pages.Where(x => x.ParentId == -1 && x.MinRank <= Rank).OrderBy(x => x.OrderNum);

            Message.AppendBoolean(true);
            Message.AppendInt32(0);
            Message.AppendInt32(-1);
            Message.AppendString("root");
            Message.AppendString(string.Empty);
            Message.AppendInt32(0);
            Message.AppendInt32(SortedPages.Count());
            foreach (CatalogPage Cat in SortedPages)
            {
                Message.AppendBoolean(Cat.Visible);
                Message.AppendInt32(Cat.IconImage);
                Message.AppendInt32(Cat.PageId);
                Message.AppendString(Cat.CodeName);
                Message.AppendString(Cat.Caption);
                Message.AppendInt32(Cat.FlatOffers.Count);
                foreach (int i in Cat.FlatOffers.Keys)
                {
                    Message.AppendInt32(i);
                }

                var SortedSubPages = Pages.Where(x => x.ParentId == Cat.PageId && x.MinRank <= Rank).OrderBy(x => x.Caption);
                Message.AppendInt32(SortedSubPages.Count());

                foreach (CatalogPage SubCat in SortedSubPages)
                {
                    Message.AppendBoolean(SubCat.Visible);
                    Message.AppendInt32(SubCat.IconImage);
                    Message.AppendInt32(SubCat.PageId);
                    Message.AppendString(SubCat.CodeName);
                    Message.AppendString(SubCat.Caption);
                    Message.AppendInt32(SubCat.FlatOffers.Count);
                    foreach (int i2 in SubCat.FlatOffers.Keys)
                    {
                        Message.AppendInt32(i2);
                    }
                    Message.AppendInt32(0);
                }
            }
            Message.AppendBoolean(false);
            Message.AppendString("NORMAL");

            return Message;
        }
Beispiel #4
0
		internal static void SerializeQuest(ServerMessage Message, GameClient Session, Quest Quest, string Category)
		{
			if (Message == null || Session == null)
			{
				return;
			}
			int amountOfQuestsInCategory = MercuryEnvironment.GetGame().GetQuestManager().GetAmountOfQuestsInCategory(Category);
			checked
			{
				int num = (Quest == null) ? amountOfQuestsInCategory : (Quest.Number - 1);
				int num2 = (Quest == null) ? 0 : Session.GetHabbo().GetQuestProgress(Quest.Id);
				if (Quest != null && Quest.IsCompleted(num2))
				{
					num++;
				}
				Message.AppendString(Category);
				Message.AppendInt32((Quest == null) ? 0 : (Quest.Category.Contains("xmas2012") ? 0 : num));
				Message.AppendInt32((Quest == null) ? 0 : (Quest.Category.Contains("xmas2012") ? 0 : amountOfQuestsInCategory));
				Message.AppendInt32((Quest == null) ? 3 : Quest.RewardType);
				Message.AppendUInt((Quest == null) ? 0u : Quest.Id);
				Message.AppendBoolean(Quest != null && Session.GetHabbo().CurrentQuestId == Quest.Id);
				Message.AppendString((Quest == null) ? string.Empty : Quest.ActionName);
				Message.AppendString((Quest == null) ? string.Empty : Quest.DataBit);
				Message.AppendInt32((Quest == null) ? 0 : Quest.Reward);
				Message.AppendString((Quest == null) ? string.Empty : Quest.Name);
				Message.AppendInt32(num2);
				Message.AppendUInt((Quest == null) ? 0u : Quest.GoalData);
				Message.AppendInt32((Quest == null) ? 0 : Quest.TimeUnlock);
				Message.AppendString("");
				Message.AppendString("");
				Message.AppendBoolean(true);
			}
		}
Beispiel #5
0
		internal ServerMessage SerializeTool()
		{
			ServerMessage serverMessage = new ServerMessage(Outgoing.LoadModerationToolMessageComposer);
			serverMessage.AppendInt32(this.Tickets.Count);
			foreach (SupportTicket current in this.Tickets)
			{
				current.Serialize(serverMessage);
			}
			serverMessage.AppendInt32(this.UserMessagePresets.Count);
			foreach (string current2 in this.UserMessagePresets)
			{
				serverMessage.AppendString(current2);
			}
			IEnumerable<ModerationTemplate> enumerable = 
				from x in this.ModerationTemplates.Values
				where x.Category == -1
				select x;
			serverMessage.AppendInt32(enumerable.Count<ModerationTemplate>());
			using (IEnumerator<ModerationTemplate> enumerator3 = enumerable.GetEnumerator())
			{
				while (enumerator3.MoveNext())
				{
					ModerationTemplate Template = enumerator3.Current;
					IEnumerable<ModerationTemplate> enumerable2 = 
						from x in this.ModerationTemplates.Values
						where (long)x.Category == (long)((ulong)Template.Id)
						select x;
					serverMessage.AppendString(Template.Caption);
					serverMessage.AppendBoolean(true);
					serverMessage.AppendInt32(enumerable2.Count<ModerationTemplate>());
					foreach (ModerationTemplate current3 in enumerable2)
					{
						serverMessage.AppendString(current3.Caption);
						serverMessage.AppendString(current3.BanMessage);
						serverMessage.AppendInt32((int)current3.BanHours);
						serverMessage.AppendInt32(MercuryEnvironment.BoolToInteger(current3.AvatarBan));
						serverMessage.AppendInt32(MercuryEnvironment.BoolToInteger(current3.Mute));
						serverMessage.AppendInt32(MercuryEnvironment.BoolToInteger(current3.TradeLock));
						serverMessage.AppendString(current3.WarningMessage);
					}
				}
			}
			serverMessage.AppendBoolean(true);
			serverMessage.AppendBoolean(true);
			serverMessage.AppendBoolean(true);
			serverMessage.AppendBoolean(true);
			serverMessage.AppendBoolean(true);
			serverMessage.AppendBoolean(true);
			serverMessage.AppendBoolean(true);
			serverMessage.AppendInt32(this.RoomMessagePresets.Count);
			foreach (string current4 in this.RoomMessagePresets)
			{
				serverMessage.AppendString(current4);
			}
			return serverMessage;
		}
        internal static ServerMessage Compose(GameClient Session, List<Achievement> Achievements)
        {
            ServerMessage serverMessage = new ServerMessage(Outgoing.AchievementListMessageComposer);
            serverMessage.AppendInt32(Achievements.Count);
            foreach (Achievement achievement in Achievements)
            {
                UserAchievement achievementData = Session.GetHabbo().GetAchievementData(achievement.GroupName);
                int i = achievementData != null ? checked(achievementData.Level + 1) : 1;
                int count = achievement.Levels.Count;
                if (i > count)
                {
                    i = count;
                }
                AchievementLevel achievementLevel = achievement.Levels[i];
                AchievementLevel oldLevel = (achievement.Levels.ContainsKey(i - 1)) ? achievement.Levels[i - 1] : achievementLevel;

                serverMessage.AppendUInt(achievement.Id);
                serverMessage.AppendInt32(i);
                serverMessage.AppendString(achievement.GroupName + i);
                serverMessage.AppendInt32(oldLevel.Requirement); // Requisito Anterior
                serverMessage.AppendInt32(achievementLevel.Requirement); // Requisito Nuevo
                serverMessage.AppendInt32(achievementLevel.RewardPoints);
                serverMessage.AppendInt32(0);
                serverMessage.AppendInt32(achievementData != null ? achievementData.Progress : 0); // Progreso Total
                if (achievementData == null)
                {
                    serverMessage.AppendBoolean(false);
                }
                else if (achievementData.Level >= count)
                {
                    serverMessage.AppendBoolean(true);
                }
                else
                {
                    serverMessage.AppendBoolean(false); // Terminado
                }
                serverMessage.AppendString(achievement.Category);
                serverMessage.AppendString(string.Empty);
                serverMessage.AppendInt32(count); // Número de niveles
                serverMessage.AppendInt32(0);
            }
            serverMessage.AppendString("");
            return serverMessage;
        }
Beispiel #7
0
		internal static ServerMessage Compose(GameClient Session, List<Quest> Quests, bool Send)
		{
			Dictionary<string, int> dictionary = new Dictionary<string, int>();
			Dictionary<string, Quest> dictionary2 = new Dictionary<string, Quest>();
			foreach (Quest current in Quests)
			{
				if (!current.Category.Contains("xmas2012"))
				{
					if (!dictionary.ContainsKey(current.Category))
					{
						dictionary.Add(current.Category, 1);
						dictionary2.Add(current.Category, null);
					}
					if (current.Number >= dictionary[current.Category])
					{
						int questProgress = Session.GetHabbo().GetQuestProgress(current.Id);
						if (Session.GetHabbo().CurrentQuestId != current.Id && (long)questProgress >= (long)((ulong)current.GoalData))
						{
							dictionary[current.Category] = checked(current.Number + 1);
						}
					}
				}
			}
			foreach (Quest current2 in Quests)
			{
				foreach (KeyValuePair<string, int> current3 in dictionary)
				{
					if (!current2.Category.Contains("xmas2012") && current2.Category == current3.Key && current2.Number == current3.Value)
					{
						dictionary2[current3.Key] = current2;
						break;
					}
				}
			}
			ServerMessage serverMessage = new ServerMessage(Outgoing.QuestListMessageComposer);
			serverMessage.AppendInt32(dictionary2.Count);
			foreach (KeyValuePair<string, Quest> current4 in dictionary2)
			{
				if (current4.Value != null)
				{
					QuestListComposer.SerializeQuest(serverMessage, Session, current4.Value, current4.Key);
				}
			}
			foreach (KeyValuePair<string, Quest> current5 in dictionary2)
			{
				if (current5.Value == null)
				{
					QuestListComposer.SerializeQuest(serverMessage, Session, current5.Value, current5.Key);
				}
			}
			serverMessage.AppendBoolean(Send);
			return serverMessage;
		}
Beispiel #8
0
		internal void SerializeWall(ServerMessage Message, bool Inventory)
		{
			Message.AppendUInt(this.Id);
			Message.AppendString(this.mBaseItem.Type.ToString().ToUpper());
			Message.AppendUInt(this.Id);
			Message.AppendInt32(this.GetBaseItem().SpriteId);

			if (this.GetBaseItem().Name.Contains("a2"))
			{
				Message.AppendInt32(3);
			}
			else
			{
				if (this.GetBaseItem().Name.Contains("wallpaper"))
				{
					Message.AppendInt32(2);
				}
				else
				{
					if (this.GetBaseItem().Name.Contains("landscape"))
					{
						Message.AppendInt32(4);
					}
					else
					{
						Message.AppendInt32(1);
					}
				}
			}
			Message.AppendInt32(0);
			Message.AppendString(this.ExtraData);
			Message.AppendBoolean(this.GetBaseItem().AllowRecycle);
			Message.AppendBoolean(this.GetBaseItem().AllowTrade);
			Message.AppendBoolean(this.GetBaseItem().AllowInventoryStack);
			Message.AppendBoolean(false);
			Message.AppendInt32(-1);
			Message.AppendBoolean(true);
			Message.AppendInt32(-1);
		}
 internal static ServerMessage Compose(Achievement Achievement, int Level, int PointReward, int PixelReward)
 {
     ServerMessage serverMessage = new ServerMessage(Outgoing.UnlockAchievementMessageComposer);
     serverMessage.AppendUInt(Achievement.Id);
     serverMessage.AppendInt32(Level);
     serverMessage.AppendInt32(144);
     serverMessage.AppendString(Achievement.GroupName + Level);
     serverMessage.AppendInt32(PointReward);
     serverMessage.AppendInt32(PixelReward);
     serverMessage.AppendInt32(0);
     serverMessage.AppendInt32(10);
     serverMessage.AppendInt32(21);
     serverMessage.AppendString(Level > 1 ? Achievement.GroupName + checked(Level - 1) : string.Empty);
     serverMessage.AppendString(Achievement.Category);
     serverMessage.AppendBoolean(true);
     return serverMessage;
 }
 internal static ServerMessage Compose(Achievement Achievement, int TargetLevel, AchievementLevel TargetLevelData, int TotalLevels, UserAchievement UserData)
 {
     ServerMessage serverMessage = new ServerMessage(Outgoing.AchievementProgressMessageComposer);
     serverMessage.AppendUInt(Achievement.Id);
     serverMessage.AppendInt32(TargetLevel);
     serverMessage.AppendString(Achievement.GroupName + TargetLevel);
     serverMessage.AppendInt32(TargetLevelData.Requirement);
     serverMessage.AppendInt32(TargetLevelData.Requirement);
     serverMessage.AppendInt32(TargetLevelData.RewardPixels);
     serverMessage.AppendInt32(0);
     serverMessage.AppendInt32(UserData != null ? UserData.Progress : 0);
     serverMessage.AppendBoolean(UserData != null && UserData.Level >= TotalLevels);
     serverMessage.AppendString(Achievement.Category);
     serverMessage.AppendString(string.Empty);
     serverMessage.AppendInt32(TotalLevels);
     serverMessage.AppendInt32(0);
     return serverMessage;
 }
Beispiel #11
0
		internal List<RoomItem> RemoveAllFurniture(GameClient Session)
		{
			List<RoomItem> list = new List<RoomItem>();
			RoomItem[] array = this.mFloorItems.Values.ToArray<RoomItem>();
			for (int i = 0; i < array.Length; i++)
			{
				RoomItem roomItem = array[i];
				roomItem.Interactor.OnRemove(Session, roomItem);
				ServerMessage serverMessage = new ServerMessage(Outgoing.PickUpFloorItemMessageComposer);
				serverMessage.AppendString(roomItem.Id + string.Empty);
				serverMessage.AppendBoolean(false);
				serverMessage.AppendInt32(0);
				serverMessage.AppendUInt(roomItem.UserID);
				this.room.SendMessage(serverMessage);
				list.Add(roomItem);
			}
			RoomItem[] array2 = this.mWallItems.Values.ToArray<RoomItem>();
			for (int j = 0; j < array2.Length; j++)
			{
				RoomItem roomItem2 = array2[j];
				roomItem2.Interactor.OnRemove(Session, roomItem2);
				ServerMessage serverMessage2 = new ServerMessage(Outgoing.PickUpWallItemMessageComposer);
				serverMessage2.AppendString(roomItem2.Id + string.Empty);
				serverMessage2.AppendUInt(roomItem2.UserID);
				this.room.SendMessage(serverMessage2);
				list.Add(roomItem2);
			}
			this.mWallItems.Clear();
			this.mFloorItems.Clear();
			this.mRemovedItems.Clear();
			this.mMovedItems.Clear();
			this.mAddedItems.Clear();
			this.mRollers.QueueDelegate(new onCycleDoneDelegate(this.ClearRollers));
			using (IQueryAdapter queryreactor = MercuryEnvironment.GetDatabaseManager().getQueryreactor())
			{
				queryreactor.runFastQuery("UPDATE items SET room_id='0' WHERE room_id = " + this.room.RoomId);
			}
			this.room.GetGameMap().GenerateMaps(true);
			this.room.GetRoomUserManager().UpdateUserStatusses();
			return list;
		}
Beispiel #12
0
		internal void Serialize(ServerMessage Message, GameClient Session)
		{
			Relationship value = Session.GetHabbo().Relationships.FirstOrDefault((KeyValuePair<int, Relationship> x) => x.Value.UserId == Convert.ToInt32(this.UserId)).Value;
			int i = (value == null) ? 0 : value.Type;
			Message.AppendUInt(this.UserId);
			Message.AppendString(this.mUsername);
			Message.AppendInt32(1);
			if (!this.mAppearOffline || Session.GetHabbo().Rank >= 4u)
			{
				Message.AppendBoolean(this.IsOnline);
			}
			else
			{
				Message.AppendBoolean(false);
			}
			if (!this.mHideInroom || Session.GetHabbo().Rank >= 4u)
			{
				Message.AppendBoolean(this.InRoom);
			}
			else
			{
				Message.AppendBoolean(false);
			}
			Message.AppendString(this.IsOnline ? this.mLook : "");
			Message.AppendInt32(0);
			Message.AppendString(this.mMotto);
			Message.AppendString(string.Empty);
			Message.AppendString(string.Empty);
			Message.AppendBoolean(true);
			Message.AppendBoolean(false);
			Message.AppendBoolean(false);
			Message.AppendShort(i);
		}
Beispiel #13
0
        internal void UpdateUserStatus(RoomUser User, bool cyclegameitems)
        {
            try
            {
                if (User != null)
                {
                    bool isBot = User.IsBot;
                    if (isBot)
                    {
                        cyclegameitems = false;
                    }
                    if (checked(User.SignTime - MercuryEnvironment.GetUnixTimestamp()) < 0 && User.Statusses.ContainsKey("sign"))
                    {
                        User.Statusses.Remove("sign");
                        User.UpdateNeeded = true;
                    }
                    if ((User.Statusses.ContainsKey("lay") && !User.IsLyingDown) || (User.Statusses.ContainsKey("sit") && !User.IsSitting))
                    {
                        User.Statusses.Remove("lay");
                        User.Statusses.Remove("sit");
                        User.UpdateNeeded = true;
                    }
                    else
                    {
                        if (User.IsLyingDown || User.IsSitting)
                        {
                            return;
                        }
                    }
                    CoordItemSearch coordItemSearch = new CoordItemSearch(this.room.GetGameMap().CoordinatedItems);
                    List<RoomItem> allRoomItemForSquare = coordItemSearch.GetAllRoomItemForSquare(User.X, User.Y);
                    double num;
                    if (User.RidingHorse && !User.IsPet)
                    {
                        num = this.room.GetGameMap().SqAbsoluteHeight(User.X, User.Y, allRoomItemForSquare) + 1.0;
                    }
                    else
                    {
                        num = this.room.GetGameMap().SqAbsoluteHeight(User.X, User.Y, allRoomItemForSquare);
                    }
                    if (num != User.Z)
                    {
                        User.Z = num;
                        User.UpdateNeeded = true;
                    }
                    DynamicRoomModel model = this.room.GetGameMap().Model;
                    if (model.SqState[User.X, User.Y] == SquareState.SEAT || User.IsSitting || User.IsLyingDown)
                    {
                        if (User.IsSitting)
                        {
                            if (!User.Statusses.ContainsKey("sit"))
                            {
                                User.Statusses.Add("sit", Convert.ToString((double)model.SqFloorHeight[User.X, User.Y] + 0.55));
                            }
                            User.Z = (double)model.SqFloorHeight[User.X, User.Y];
                            User.UpdateNeeded = true;
                        }
                        else
                        {
                            if (User.IsLyingDown)
                            {
                                if (!User.Statusses.ContainsKey("lay"))
                                {
                                    User.Statusses.Add("lay", Convert.ToString((double)model.SqFloorHeight[User.X, User.Y] + 0.55));
                                }
                                User.Z = (double)model.SqFloorHeight[User.X, User.Y];
                                User.UpdateNeeded = true;
                            }
                            else
                            {
                                if (!User.Statusses.ContainsKey("sit"))
                                {
                                    User.Statusses.Add("sit", "1.0");
                                }
                                User.Z = (double)model.SqFloorHeight[User.X, User.Y];
                                User.RotHead = (int)model.SqSeatRot[User.X, User.Y];
                                User.RotBody = (int)model.SqSeatRot[User.X, User.Y];
                                User.UpdateNeeded = true;
                            }
                        }
                    }
                    if (allRoomItemForSquare.Count == 0)
                    {
                        User.LastItem = 0;
                    }
                    using (List<RoomItem>.Enumerator enumerator = allRoomItemForSquare.GetEnumerator())
                    {
                        while (enumerator.MoveNext())
                        {
                            RoomItem Item = enumerator.Current;
                            if (cyclegameitems)
                            {
                                Item.UserWalksOnFurni(User);
                                MercuryEnvironment.GetGame().GetQuestManager().ProgressUserQuest(User.GetClient(), QuestType.STAND_ON, Item.GetBaseItem().ItemId);
                            }
                            if (Item.GetBaseItem().IsSeat)
                            {
                                if (!User.Statusses.ContainsKey("sit"))
                                {
                                    if (Item.GetBaseItem().StackMultipler && !string.IsNullOrWhiteSpace(Item.ExtraData))
                                    {
                                        if (Item.ExtraData != "0")
                                        {
                                            int num2 = Convert.ToInt32(Item.ExtraData);
                                            User.Statusses.Add("sit", Item.GetBaseItem().ToggleHeight[num2].ToString());
                                        }
                                        else
                                        {
                                            User.Statusses.Add("sit", TextHandling.GetString(Item.GetBaseItem().Height));
                                        }
                                    }
                                    else
                                    {
                                        User.Statusses.Add("sit", TextHandling.GetString(Item.GetBaseItem().Height));
                                    }
                                }
                                User.Z = Item.GetZ;
                                User.RotHead = Item.Rot;
                                User.RotBody = Item.Rot;
                                User.UpdateNeeded = true;
                            }
                            InteractionType interactionType = Item.GetBaseItem().InteractionType;
                            checked
                            {
                                if (interactionType <= InteractionType.banzaigategreen)
                                {
                                    if (interactionType != InteractionType.bed)
                                    {
                                        if (interactionType != InteractionType.fbgate)
                                        {
                                            switch (interactionType)
                                            {
                                                case InteractionType.banzaigateblue:
                                                case InteractionType.banzaigatered:
                                                case InteractionType.banzaigateyellow:
                                                case InteractionType.banzaigategreen:
                                                    {
                                                        if (!cyclegameitems)
                                                        {
                                                            continue;
                                                        }
                                                        int num3 = (int)(Item.team + 32);
                                                        TeamManager teamManagerForBanzai = User.GetClient().GetHabbo().CurrentRoom.GetTeamManagerForBanzai();
                                                        AvatarEffectsInventoryComponent avatarEffectsInventoryComponent = User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent();
                                                        if (User.team == Team.none)
                                                        {
                                                            if (!teamManagerForBanzai.CanEnterOnTeam(Item.team))
                                                            {
                                                                continue;
                                                            }
                                                            if (User.team != Team.none)
                                                            {
                                                                teamManagerForBanzai.OnUserLeave(User);
                                                            }
                                                            User.team = Item.team;
                                                            teamManagerForBanzai.AddUser(User);
                                                            if (avatarEffectsInventoryComponent.CurrentEffect != num3)
                                                            {
                                                                avatarEffectsInventoryComponent.ActivateCustomEffect(num3);
                                                                continue;
                                                            }
                                                            continue;
                                                        }
                                                        else
                                                        {
                                                            if (User.team != Team.none && User.team != Item.team)
                                                            {
                                                                teamManagerForBanzai.OnUserLeave(User);
                                                                User.team = Team.none;
                                                                avatarEffectsInventoryComponent.ActivateCustomEffect(0);
                                                                continue;
                                                            }
                                                            teamManagerForBanzai.OnUserLeave(User);
                                                            if (avatarEffectsInventoryComponent.CurrentEffect == num3)
                                                            {
                                                                avatarEffectsInventoryComponent.ActivateCustomEffect(0);
                                                            }
                                                            User.team = Team.none;
                                                            continue;
                                                        }
                                                    }
                                                default:
                                                    continue;
                                            }
                                        }
                                        else
                                        {
                                            if (User.IsBot)
                                            {
                                                continue;
                                            }

                                            string look = Item.ExtraData.Split(',')[0];
                                            if (User.GetClient().GetHabbo().Gender.ToUpper() == "F")
                                            {
                                                look = Item.ExtraData.Split(',')[1];
                                            }
                                            if (!look.Contains("hd-99999-99999"))
                                            {
                                                look = "hd-99999-99999." + look;
                                            }
                                            look = look.Replace("hd-99999-99999", User.GetClient().GetHabbo().HeadPart);
                                            User.GetClient().GetHabbo().Look = look;

                                            ServerMessage serverMessage = new ServerMessage();
                                            serverMessage.Init(Outgoing.UpdateUserDataMessageComposer);
                                            serverMessage.AppendInt32(-1);
                                            serverMessage.AppendString(User.GetClient().GetHabbo().Look);
                                            serverMessage.AppendString(User.GetClient().GetHabbo().Gender.ToLower());
                                            serverMessage.AppendString(User.GetClient().GetHabbo().Motto);
                                            serverMessage.AppendInt32(User.GetClient().GetHabbo().AchievementPoints);
                                            User.GetClient().SendMessage(serverMessage);
                                            ServerMessage serverMessage2 = new ServerMessage();
                                            serverMessage2.Init(Outgoing.UpdateUserDataMessageComposer);
                                            serverMessage2.AppendInt32(User.VirtualId);
                                            serverMessage2.AppendString(User.GetClient().GetHabbo().Look);
                                            serverMessage2.AppendString(User.GetClient().GetHabbo().Gender.ToLower());
                                            serverMessage2.AppendString(User.GetClient().GetHabbo().Motto);
                                            serverMessage2.AppendInt32(User.GetClient().GetHabbo().AchievementPoints);
                                            this.room.SendMessage(serverMessage2);

                                            ServerMessage serverMessage3 = new ServerMessage();
                                            serverMessage3.Init(Outgoing.UpdateAvatarAspectMessageComposer);
                                            serverMessage3.AppendString(User.GetClient().GetHabbo().Look);
                                            serverMessage3.AppendString(User.GetClient().GetHabbo().Gender.ToUpper());
                                            User.GetClient().SendMessage(serverMessage3);

                                            continue;
                                        }
                                    }
                                }
                                else
                                {
                                    if (interactionType <= InteractionType.freezebluegate)
                                    {
                                        if (interactionType == InteractionType.banzaitele)
                                        {
                                            this.room.GetGameItemHandler().onTeleportRoomUserEnter(User, Item);
                                            continue;
                                        }
                                        switch (interactionType)
                                        {
                                            case InteractionType.freezeyellowgate:
                                            case InteractionType.freezeredgate:
                                            case InteractionType.freezegreengate:
                                            case InteractionType.freezebluegate:
                                                if (cyclegameitems)
                                                {
                                                    int num4 = (int)(Item.team + 39);
                                                    TeamManager teamManagerForFreeze = User.GetClient().GetHabbo().CurrentRoom.GetTeamManagerForFreeze();
                                                    AvatarEffectsInventoryComponent avatarEffectsInventoryComponent2 = User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent();
                                                    if (User.team != Item.team)
                                                    {
                                                        if (teamManagerForFreeze.CanEnterOnTeam(Item.team))
                                                        {
                                                            if (User.team != Team.none)
                                                            {
                                                                teamManagerForFreeze.OnUserLeave(User);
                                                            }
                                                            User.team = Item.team;
                                                            teamManagerForFreeze.AddUser(User);
                                                            if (avatarEffectsInventoryComponent2.CurrentEffect != num4)
                                                            {
                                                                avatarEffectsInventoryComponent2.ActivateCustomEffect(num4);
                                                            }
                                                        }
                                                    }
                                                    else
                                                    {
                                                        teamManagerForFreeze.OnUserLeave(User);
                                                        if (avatarEffectsInventoryComponent2.CurrentEffect == num4)
                                                        {
                                                            avatarEffectsInventoryComponent2.ActivateCustomEffect(0);
                                                        }
                                                        User.team = Team.none;
                                                    }
                                                    ServerMessage serverMessage3 = new ServerMessage(Outgoing.UserIsPlayingFreezeMessageComposer);
                                                    serverMessage3.AppendBoolean(User.team != Team.none);
                                                    User.GetClient().SendMessage(serverMessage3);
                                                    continue;
                                                }
                                                continue;
                                            default:
                                                continue;
                                        }
                                    }
                                    else
                                    {
                                        if (interactionType != InteractionType.jump)
                                        {
                                            switch (interactionType)
                                            {
                                                case InteractionType.pinata:
                                                    {
                                                        if (!User.IsWalking || Item.ExtraData.Length <= 0)
                                                        {
                                                            continue;
                                                        }
                                                        int num5 = int.Parse(Item.ExtraData);
                                                        if (num5 >= 100 || User.CurrentEffect != 158)
                                                        {
                                                            continue;
                                                        }
                                                        int num6 = num5 + 1;
                                                        Item.ExtraData = num6.ToString();

                                                        Item.UpdateState();
                                                        MercuryEnvironment.GetGame().GetAchievementManager().ProgressUserAchievement(User.GetClient(), "ACH_PinataWhacker", 1, false);
                                                        if (num6 == 100)
                                                        {
                                                            MercuryEnvironment.GetGame().GetPinataHandler().DeliverRandomPinataItem(User, this.room, Item);
                                                            MercuryEnvironment.GetGame().GetAchievementManager().ProgressUserAchievement(User.GetClient(), "ACH_PinataBreaker", 1, false);
                                                            continue;
                                                        }
                                                        continue;
                                                    }
                                                case InteractionType.tilestackmagic:
                                                case InteractionType.poster:
                                                    continue;

                                                case InteractionType.tent:
                                                case InteractionType.bedtent:
                                                    if (User.LastItem == Item.Id)
                                                        continue;

                                                    if (!User.IsBot && !User.OnCampingTent)
                                                    {
                                                        ServerMessage serverMessage = new ServerMessage();
                                                        serverMessage.Init(Outgoing.UpdateFloorItemExtraDataMessageComposer);
                                                        serverMessage.AppendString(Item.Id.ToString());
                                                        serverMessage.AppendInt32(0);
                                                        serverMessage.AppendString("1");
                                                        User.GetClient().SendMessage(serverMessage);
                                                        User.OnCampingTent = true;
                                                        User.LastItem = Item.Id;
                                                    }
                                                    continue;
                                                case InteractionType.runwaysage:
                                                    {
                                                        int num7 = new Random().Next(1, 4);
                                                        Item.ExtraData = num7.ToString();
                                                        Item.UpdateState();
                                                        continue;
                                                    }
                                                case InteractionType.shower:
                                                    Item.ExtraData = "1";
                                                    Item.UpdateState();
                                                    continue;
                                                default:
                                                    continue;
                                            }
                                        }
                                        else
                                        {
                                            if ((User.Y == Item.GetY || User.Y == Item.GetY - 1) && User.X == Item.GetX + 1)
                                            {
                                                continue;
                                            }
                                            continue;
                                        }
                                    }
                                }
                                if (Item.GetBaseItem().InteractionType == InteractionType.bedtent)
                                {
                                    User.OnCampingTent = true;
                                }
                                if (!User.Statusses.ContainsKey("lay"))
                                {
                                    User.Statusses.Add("lay", TextHandling.GetString(Item.GetBaseItem().Height) + " null");
                                }
                                User.Z = Item.GetZ;
                            }
                            User.RotHead = Item.Rot;
                            User.RotBody = Item.Rot;
                            User.UpdateNeeded = true;
                        }
                    }
                    if (User.IsSitting && User.TeleportEnabled)
                    {
                        User.Z -= 0.35;
                        User.UpdateNeeded = true;
                    }
                    if (cyclegameitems)
                    {
                        if (this.room.GotSoccer())
                        {
                            this.room.GetSoccer().OnUserWalk(User);
                        }
                        if (this.room.GotBanzai())
                        {
                            this.room.GetBanzai().OnUserWalk(User);
                        }
                        this.room.GetFreeze().OnUserWalk(User);
                    }
                }
            }
            catch
            {
            }
        }
Beispiel #14
0
        internal void RemoveUserFromRoom(GameClient Session, bool NotifyClient, bool NotifyKick)
        {
            try
            {
                if (Session == null || Session.GetHabbo() == null || this.room == null)
                {
                    return;
                }
                Session.GetHabbo().GetAvatarEffectsInventoryComponent().OnRoomExit();
                using (IQueryAdapter queryreactor = MercuryEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    queryreactor.runFastQuery(string.Concat(new object[]
					{
						"UPDATE user_roomvisits SET exit_timestamp = '",
						MercuryEnvironment.GetUnixTimestamp(),
						"' WHERE room_id = '",
						this.room.RoomId,
						"' AND user_id = '",
						Session.GetHabbo().Id,
						"' ORDER BY entry_timestamp DESC LIMIT 1"
					}));
                }
                RoomUser roomUserByHabbo = this.GetRoomUserByHabbo(Session.GetHabbo().Id);
                if (roomUserByHabbo == null)
                {
                    return;
                }
                if (NotifyKick || (NotifyClient && NotifyKick))
                {
                    Room room = MercuryEnvironment.GetGame().GetRoomManager().GetRoom(roomUserByHabbo.RoomId);
                    DynamicRoomModel model = room.GetGameMap().Model;
                    roomUserByHabbo.MoveTo(model.DoorX, model.DoorY);
                    roomUserByHabbo.CanWalk = false;
                    Session.GetMessageHandler().GetResponse().Init(Outgoing.RoomErrorMessageComposer);
                    Session.GetMessageHandler().GetResponse().AppendInt32(4008);
                    Session.GetMessageHandler().SendResponse();


                    Session.GetMessageHandler().GetResponse().Init(Outgoing.OutOfRoomMessageComposer);
                    Session.GetMessageHandler().GetResponse().AppendShort(2);
                    Session.GetMessageHandler().SendResponse();
                }
                else
                {
                    if (NotifyClient && !NotifyKick)
                    {
                        ServerMessage serverMessage = new ServerMessage(Outgoing.UserIsPlayingFreezeMessageComposer);
                        serverMessage.AppendBoolean(roomUserByHabbo.team != Team.none);
                        roomUserByHabbo.GetClient().SendMessage(serverMessage);
                        Session.GetMessageHandler().GetResponse().Init(Outgoing.OutOfRoomMessageComposer);
                        Session.GetMessageHandler().GetResponse().AppendShort(2);
                        Session.GetMessageHandler().SendResponse();
                    }
                }
                if (roomUserByHabbo != null)
                {
                    if (roomUserByHabbo.team != Team.none)
                    {
                        this.room.GetTeamManagerForBanzai().OnUserLeave(roomUserByHabbo);
                        this.room.GetTeamManagerForFreeze().OnUserLeave(roomUserByHabbo);
                    }
                    if (roomUserByHabbo.RidingHorse)
                    {
                        roomUserByHabbo.RidingHorse = false;
                        RoomUser Horse = this.GetRoomUserByVirtualId((int)roomUserByHabbo.HorseID);
                        if (Horse != null)
                        {
                            Horse.RidingHorse = false;
                            Horse.HorseID = 0u;
                        }
                    }
                    if (roomUserByHabbo.IsLyingDown || roomUserByHabbo.IsSitting)
                    {
                        roomUserByHabbo.IsSitting = false;
                        roomUserByHabbo.IsLyingDown = false;
                    }
                    this.RemoveRoomUser(roomUserByHabbo);
                    if (Session.GetHabbo() != null && !roomUserByHabbo.IsSpectator)
                    {
                        if (roomUserByHabbo.CurrentItemEffect != ItemEffectType.None)
                        {
                            roomUserByHabbo.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent().CurrentEffect = -1;
                        }
                        if (Session.GetHabbo() != null)
                        {
                            if (this.room.HasActiveTrade(Session.GetHabbo().Id))
                            {
                                this.room.TryStopTrade(Session.GetHabbo().Id);
                            }
                            Session.GetHabbo().CurrentRoomId = 0u;
                            if (Session.GetHabbo().GetMessenger() != null)
                            {
                                Session.GetHabbo().GetMessenger().OnStatusChanged(true);
                            }
                        }
                        DateTime now = DateTime.Now;
                        using (IQueryAdapter queryreactor2 = MercuryEnvironment.GetDatabaseManager().getQueryreactor())
                        {

                            if (Session.GetHabbo() != null)
                            {
                                queryreactor2.runFastQuery(string.Concat(new object[]
								{
									"UPDATE user_roomvisits SET exit_timestamp = '",
									MercuryEnvironment.GetUnixTimestamp(),
									"' WHERE room_id = '",
									this.room.RoomId,
									"' AND user_id = '",
									Session.GetHabbo().Id,
									"' ORDER BY exit_timestamp DESC LIMIT 1"
								}));
                            }
                        }
                    }
                    this.usersByUserID.Remove(roomUserByHabbo.UserID);
                    if (Session.GetHabbo() != null)
                    {
                        this.usersByUsername.Remove(Session.GetHabbo().Username.ToLower());
                    }
                    roomUserByHabbo.Dispose();
                }
            }
            catch (Exception ex)
            {
                Logging.LogCriticalException("Error during removing user from room:" + ex.ToString());
            }
        }
Beispiel #15
0
        internal void OnCycle(ref int idleCount)
        {
            this.ToRemove.Clear();
            int count = 0;
            foreach (RoomUser roomUser in this.UserList.Values)
            {
                if (!this.isValid(roomUser))
                {
                    if (roomUser.GetClient() != null)
                        this.RemoveUserFromRoom(roomUser.GetClient(), false, false);
                    else
                        this.RemoveRoomUser(roomUser);
                }
                bool flag1 = false;
                checked { ++roomUser.IdleTime; }
                if (!roomUser.IsBot && !roomUser.IsAsleep && roomUser.IdleTime >= 600)
                {
                    roomUser.IsAsleep = true;
                    ServerMessage sleepMsg = new ServerMessage(Outgoing.RoomUserIdleMessageComposer);
                    sleepMsg.AppendInt32(roomUser.VirtualId);
                    sleepMsg.AppendBoolean(true);
                    this.room.SendMessage(sleepMsg);
                }
                if (roomUser.NeedsAutokick && !this.ToRemove.Contains(roomUser))
                {
                    this.ToRemove.Add(roomUser);
                }
                else
                {
                    if (roomUser.CarryItemID > 0)
                    {
                        checked { --roomUser.CarryTimer; }
                        if (roomUser.CarryTimer <= 0)
                            roomUser.CarryItem(0);
                    }
                    if (this.room.GotFreeze())
                        this.room.GetFreeze().CycleUser(roomUser);
                    bool flag2 = false;

                    if (roomUser.IsPet)
                    {
                        if (!roomUser.IsWalking && roomUser.Statusses.ContainsKey("mv"))
                        {
                            roomUser.ClearMovement(true);
                        }
                    }
                    if (roomUser.SetStep)
                    {
                        if (this.room.GetGameMap().CanWalk(roomUser.SetX, roomUser.SetY, roomUser.AllowOverride) || roomUser.RidingHorse)
                        {
                            Gamemap gameMap = this.room.GetGameMap();


                            Point coordinate = roomUser.Coordinate;
                            int x = coordinate.X;
                            coordinate = roomUser.Coordinate;
                            int y = coordinate.Y;
                            Point oldCoord = new Point(x, y);
                            Point newCoord = new Point(roomUser.SetX, roomUser.SetY);
                            RoomUser user = roomUser;
                            gameMap.UpdateUserMovement(oldCoord, newCoord, user);
                            List<RoomItem> coordinatedItems = this.room.GetGameMap().GetCoordinatedItems(new Point(roomUser.X, roomUser.Y));
                            roomUser.X = roomUser.SetX;
                            roomUser.Y = roomUser.SetY;
                            roomUser.Z = roomUser.SetZ;
                            this.ToSet.Remove(new Point(roomUser.SetX, roomUser.SetY));

                            if (this.room.GotSoccer())
                            {
                                this.room.GetSoccer().OnUserWalk(roomUser);
                            }

                            lock (coordinatedItems)
                            {
                                foreach (RoomItem itemE in coordinatedItems)
                                {
                                    itemE.UserWalksOffFurni(roomUser);

                                    switch (itemE.GetBaseItem().InteractionType)
                                    {
                                        case InteractionType.tent:
                                        case InteractionType.bedtent:
                                            if (!roomUser.IsBot && roomUser.OnCampingTent)
                                            {
                                                ServerMessage serverMessage = new ServerMessage();
                                                serverMessage.Init(Outgoing.UpdateFloorItemExtraDataMessageComposer);
                                                serverMessage.AppendString(itemE.Id.ToString());
                                                serverMessage.AppendInt32(0);
                                                serverMessage.AppendString("0");
                                                roomUser.GetClient().SendMessage(serverMessage);
                                                roomUser.OnCampingTent = false;
                                            }
                                            break;

                                        case InteractionType.runwaysage:
                                        case InteractionType.shower:
                                            itemE.ExtraData = "0";
                                            itemE.UpdateState();
                                            break;
                                    }
                                }
                            }

                            if (roomUser.X == this.room.GetGameMap().Model.DoorX && roomUser.Y == this.room.GetGameMap().Model.DoorY && !this.ToRemove.Contains(roomUser) && !roomUser.IsBot)
                            {
                                this.ToRemove.Add(roomUser);
                                continue;
                            }
                            else
                                this.UpdateUserStatus(roomUser, true);
                        }
                        else
                            flag2 = true;
                        roomUser.SetStep = false;
                    }

                    if (roomUser.PathRecalcNeeded)
                    {
                        roomUser.Path.Clear();
                        roomUser.Path = PathFinder.FindPath(roomUser, this.room.GetGameMap().DiagonalEnabled, this.room.GetGameMap(), new Vector2D(roomUser.X, roomUser.Y), new Vector2D(roomUser.GoalX, roomUser.GoalY));
                        if (roomUser.Path.Count > 1)
                        {
                            roomUser.PathStep = 1;
                            roomUser.IsWalking = true;
                            roomUser.PathRecalcNeeded = false;
                        }
                        else
                        {
                            roomUser.PathRecalcNeeded = false;
                            roomUser.Path.Clear();
                        }
                    }
                    if (roomUser.IsWalking && !roomUser.Freezed)
                    {
                        if (!roomUser.HasPathBlocked && (flag2 || roomUser.PathStep >= roomUser.Path.Count || roomUser.GoalX == roomUser.X && roomUser.GoalY == roomUser.Y))
                        {
                            roomUser.IsWalking = false;
                            roomUser.RemoveStatus("mv");
                            this.UpdateUserStatus(roomUser, false);

                            if (roomUser.RidingHorse && !roomUser.IsPet && !roomUser.IsBot)
                            {
                                RoomUser roomUserByVirtualId = this.GetRoomUserByVirtualId(Convert.ToInt32(roomUser.HorseID));
                                roomUserByVirtualId.IsWalking = false;
                                roomUserByVirtualId.RemoveStatus("mv");
                                ServerMessage Message = new ServerMessage(Outgoing.UpdateUserStatusMessageComposer);
                                Message.AppendInt32(1);
                                roomUserByVirtualId.SerializeStatus(Message, "");
                                roomUser.GetClient().GetHabbo().CurrentRoom.SendMessage(Message);
                            }
                        }
                        else
                        {
                            int index1 = checked(roomUser.Path.Count - roomUser.PathStep - 1);
                            Vector2D vector2D = roomUser.Path[index1];
                            checked { ++roomUser.PathStep; }

                            if (roomUser.FastWalking && roomUser.PathStep < roomUser.Path.Count)
                            {
                                int index2 = checked(roomUser.Path.Count - roomUser.PathStep - 1);
                                vector2D = roomUser.Path[index2];
                                checked { ++roomUser.PathStep; }
                            }
                            int x = vector2D.X;
                            int y = vector2D.Y;
                            roomUser.RemoveStatus("mv");

                            if (this.room.GetGameMap().IsValidStep2(roomUser, new Point(roomUser.X, roomUser.Y), new Point(x, y), roomUser.GoalX == x && roomUser.GoalY == y, roomUser.AllowOverride) && this.room.GetGameMap().AntiChoques(x, y, roomUser))
                            {
                                double k = this.room.GetGameMap().SqAbsoluteHeight(x, y);
                                roomUser.SetX = x;
                                roomUser.SetY = y;
                                roomUser.SetZ = k;



                                int num = PathFinder.CalculateRotation(roomUser.X, roomUser.Y, x, y);
                                roomUser.RotBody = num;
                                roomUser.RotHead = num;
                                roomUser.SetStep = true;



                                if (!roomUser.IsBot)
                                {
                                    if (roomUser.IsSitting)
                                    {
                                        roomUser.Statusses.Remove("sit");
                                        roomUser.Z += 0.35;
                                        roomUser.IsSitting = false;
                                        roomUser.UpdateNeeded = true;
                                    }
                                    else if (roomUser.IsLyingDown)
                                    {
                                        roomUser.Statusses.Remove("sit");
                                        roomUser.Z += 0.35;
                                        roomUser.IsLyingDown = false;
                                        roomUser.UpdateNeeded = true;
                                    }
                                }
                                if (!roomUser.IsBot)
                                {
                                    roomUser.Statusses.Remove("lay");
                                    roomUser.Statusses.Remove("sit");
                                }
                                string Status1 = "";
                                string Status2 = "";
                                if (!roomUser.IsBot && !roomUser.IsPet && roomUser.GetClient() != null)
                                {
                                    if (roomUser.GetClient().GetHabbo().IsTeleporting)
                                    {
                                        roomUser.TeleportEnabled = false;
                                        roomUser.GetClient().GetHabbo().IsTeleporting = false;
                                        roomUser.GetClient().GetHabbo().TeleporterId = 0U;
                                    }
                                    else if (roomUser.GetClient().GetHabbo().IsHopping)
                                    {
                                        roomUser.GetClient().GetHabbo().IsHopping = false;
                                        roomUser.GetClient().GetHabbo().HopperId = 0U;
                                    }
                                }


                                if (!ToSet.ContainsKey(new Point(roomUser.SetX, roomUser.SetY)))
                                {
                                    this.ToSet.Add(new Point(roomUser.SetX, roomUser.SetY), roomUser);
                                }

                                if (!roomUser.IsBot && roomUser.RidingHorse && !roomUser.IsPet)
                                {
                                    Status1 = "mv " + x + "," + y + "," + TextHandling.GetString(k + 1.0);
                                    roomUser.AddStatus("mv", x + "," + y + "," + TextHandling.GetString(k + 1.0));
                                    Status2 = "mv " + x + "," + y + "," + TextHandling.GetString(k);
                                }
                                else
                                    roomUser.AddStatus("mv", x + "," + y + "," + TextHandling.GetString(k));

                                this.UpdateUserEffect(roomUser, roomUser.SetX, roomUser.SetY);
                                flag1 = true;
                                this.room.GetGameMap().GameMap[roomUser.X, roomUser.Y] = roomUser.SqState;
                                roomUser.SqState = this.room.GetGameMap().GameMap[roomUser.SetX, roomUser.SetY];


                                if (!roomUser.IsBot)
                                {
                                    if (roomUser.IsSitting)
                                        roomUser.IsSitting = false;
                                    if (roomUser.IsLyingDown)
                                        roomUser.IsLyingDown = false;
                                }
                                if (roomUser.RidingHorse && !roomUser.IsPet && !roomUser.IsBot)
                                {
                                    RoomUser roomUserByVirtualId = this.GetRoomUserByVirtualId(Convert.ToInt32(roomUser.HorseID));
                                    roomUserByVirtualId.RotBody = num;
                                    roomUserByVirtualId.RotHead = num;
                                    roomUserByVirtualId.SetStep = true;
                                    roomUserByVirtualId.SetX = x;
                                    roomUserByVirtualId.SetY = y;
                                    roomUserByVirtualId.SetZ = k;
                                    this.UpdateUserEffect(roomUserByVirtualId, roomUserByVirtualId.SetX, roomUserByVirtualId.SetY);
                                    flag1 = true;
                                    ServerMessage Message = new ServerMessage(Outgoing.UpdateUserStatusMessageComposer);
                                    Message.AppendInt32(2);
                                    roomUser.SerializeStatus(Message, Status1);
                                    roomUserByVirtualId.SerializeStatus(Message, Status2);
                                    roomUser.GetClient().GetHabbo().CurrentRoom.SendMessage(Message);
                                    this.UpdateUserEffect(roomUser, roomUser.SetX, roomUser.SetY);
                                    roomUserByVirtualId.UpdateNeeded = true;
                                }

                            }
                            else
                            {
                                roomUser.PathRecalcNeeded = true;
                            }
                        }
                        if (!roomUser.RidingHorse)
                            roomUser.UpdateNeeded = true;
                    }
                    else if (roomUser.Statusses.ContainsKey("mv"))
                    {
                        RoomUser roomUserByVirtualId = this.GetRoomUserByVirtualId(Convert.ToInt32(roomUser.HorseID));
                        roomUser.RemoveStatus("mv");
                        roomUser.UpdateNeeded = true;
                        if (roomUser.RidingHorse)
                        {
                            roomUserByVirtualId.RemoveStatus("mv");
                            roomUserByVirtualId.UpdateNeeded = true;
                        }
                    }
                    if (roomUser.RidingHorse)
                        roomUser.ApplyEffect(77);
                    if (roomUser.IsBot)
                        roomUser.BotAI.OnTimerTick();
                    else
                        checked { ++count; }
                    if (!flag1)
                        this.UpdateUserEffect(roomUser, roomUser.X, roomUser.Y);
                }
            }
            if (count == 0)
                checked { ++idleCount; }

            lock (ToRemove)
            {
                foreach (RoomUser user in this.ToRemove)
                {
                    GameClient clientByUserId = MercuryEnvironment.GetGame().GetClientManager().GetClientByUserID(user.HabboId);
                    if (clientByUserId != null)
                    {
                        this.RemoveUserFromRoom(clientByUserId, true, false);
                        clientByUserId.CurrentRoomUserID = -1;
                    }
                    else
                        this.RemoveRoomUser(user);
                }
            }
            if (this.userCount == count)
                return;
            this.UpdateUserCount(count);
        }
Beispiel #16
0
		public void OnTrigger(GameClient Session, RoomItem Item, int Request, bool HasRights)
		{
			if (Session == null || Item == null)
			{
				return;
			}
			if (!HasRights)
			{
				return;
			}
			string ExtraInfo = "";
			bool flag = false;
			int i = 0;
			List<RoomItem> list = new List<RoomItem>();
			string ExtraString = "";
			string ExtraString2 = "";
			using (IQueryAdapter queryreactor = MercuryEnvironment.GetDatabaseManager().getQueryreactor())
			{
				queryreactor.setQuery("SELECT * FROM wired_items WHERE id=@id LIMIT 1");
				queryreactor.addParameter("id", Item.Id);
				DataRow row = queryreactor.getRow();
				if (row != null)
				{
					ExtraInfo = row["string"].ToString();
					i = (int)row["delay"] / 500;
					flag = (row["bool"].ToString() == "1");
					ExtraString = row["extra_string"].ToString();
					ExtraString2 = row["extra_string_2"].ToString();
					string[] array = row["items"].ToString().Split(new char[]
					{
						';'
					});
					for (int j = 0; j < array.Length; j++)
					{
						string s = array[j];
						uint pId = 0u;
						if (uint.TryParse(s, out pId))
						{
							RoomItem item = Item.GetRoom().GetRoomItemHandler().GetItem(pId);
							if (item != null && !list.Contains(item))
							{
								list.Add(item);
							}
						}
					}
				}
			}
			switch (Item.GetBaseItem().InteractionType)
			{
			case InteractionType.triggertimer:
			{
				ServerMessage serverMessage = new ServerMessage(Outgoing.WiredTriggerMessageComposer);
				serverMessage.AppendBoolean(false);
				serverMessage.AppendInt32(5);
				serverMessage.AppendInt32(list.Count);
				foreach (RoomItem current in list)
				{
					serverMessage.AppendUInt(current.Id);
				}
				serverMessage.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage.AppendUInt(Item.Id);
				serverMessage.AppendString(ExtraInfo);
				serverMessage.AppendInt32(1);
				serverMessage.AppendInt32(1);
				serverMessage.AppendInt32(1);
				serverMessage.AppendInt32(3);
				serverMessage.AppendInt32(0);
				serverMessage.AppendInt32(0);
				Session.SendMessage(serverMessage);
				return;
			}
			case InteractionType.triggerroomenter:
			{
				ServerMessage serverMessage2 = new ServerMessage(Outgoing.WiredTriggerMessageComposer);
				serverMessage2.AppendBoolean(false);
				serverMessage2.AppendInt32(0);
				serverMessage2.AppendInt32(list.Count);
				foreach (RoomItem current2 in list)
				{
					serverMessage2.AppendUInt(current2.Id);
				}
				serverMessage2.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage2.AppendUInt(Item.Id);
				serverMessage2.AppendString(ExtraInfo);
				serverMessage2.AppendInt32(0);
				serverMessage2.AppendInt32(0);
				serverMessage2.AppendInt32(7);
				serverMessage2.AppendInt32(0);
				serverMessage2.AppendInt32(0);
				serverMessage2.AppendInt32(0);
				Session.SendMessage(serverMessage2);
				return;
			}
			case InteractionType.triggergameend:
			{
				ServerMessage serverMessage3 = new ServerMessage(Outgoing.WiredTriggerMessageComposer);
				serverMessage3.AppendBoolean(false);
				serverMessage3.AppendInt32(0);
				serverMessage3.AppendInt32(list.Count);
				foreach (RoomItem current3 in list)
				{
					serverMessage3.AppendUInt(current3.Id);
				}
				serverMessage3.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage3.AppendUInt(Item.Id);
				serverMessage3.AppendString(ExtraInfo);
				serverMessage3.AppendInt32(0);
				serverMessage3.AppendInt32(0);
				serverMessage3.AppendInt32(8);
				serverMessage3.AppendInt32(0);
				serverMessage3.AppendInt32(0);
				serverMessage3.AppendInt32(0);
				Session.SendMessage(serverMessage3);
				return;
			}
			case InteractionType.triggergamestart:
			{
				ServerMessage serverMessage4 = new ServerMessage(Outgoing.WiredTriggerMessageComposer);
				serverMessage4.AppendBoolean(false);
				serverMessage4.AppendInt32(0);
				serverMessage4.AppendInt32(list.Count);
				foreach (RoomItem current4 in list)
				{
					serverMessage4.AppendUInt(current4.Id);
				}
				serverMessage4.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage4.AppendUInt(Item.Id);
				serverMessage4.AppendString(ExtraInfo);
				serverMessage4.AppendInt32(0);
				serverMessage4.AppendInt32(0);
				serverMessage4.AppendInt32(8);
				serverMessage4.AppendInt32(0);
				serverMessage4.AppendInt32(0);
				serverMessage4.AppendInt32(0);
				Session.SendMessage(serverMessage4);
				return;
			}
                case InteractionType.triggerlongrepeater:
            {
                ServerMessage serverMessage = new ServerMessage(Outgoing.WiredTriggerMessageComposer);
                serverMessage.AppendBoolean(false);
                serverMessage.AppendInt32(5);
                serverMessage.AppendInt32(0);
                serverMessage.AppendInt32(Item.GetBaseItem().SpriteId);
                serverMessage.AppendUInt(Item.Id);
                serverMessage.AppendString("");
                serverMessage.AppendInt32(1);
                serverMessage.AppendInt32(i / 10);//fix
                serverMessage.AppendInt32(0);
                serverMessage.AppendInt32(12);
                serverMessage.AppendInt32(0);
                Session.SendMessage(serverMessage);
                return;
            }

			case InteractionType.triggerrepeater:
			{
				ServerMessage serverMessage5 = new ServerMessage(Outgoing.WiredTriggerMessageComposer);
				serverMessage5.AppendBoolean(false);
				serverMessage5.AppendInt32(5);
				serverMessage5.AppendInt32(list.Count);
				foreach (RoomItem current5 in list)
				{
					serverMessage5.AppendUInt(current5.Id);
				}
				serverMessage5.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage5.AppendUInt(Item.Id);
				serverMessage5.AppendString(ExtraInfo);
				serverMessage5.AppendInt32(1);
				serverMessage5.AppendInt32(i);
				serverMessage5.AppendInt32(0);
				serverMessage5.AppendInt32(6);
				serverMessage5.AppendInt32(0);
				serverMessage5.AppendInt32(0);
				Session.SendMessage(serverMessage5);
				return;
			}
			case InteractionType.triggeronusersay:
			{
				ServerMessage serverMessage6 = new ServerMessage(Outgoing.WiredTriggerMessageComposer);
				serverMessage6.AppendBoolean(false);
				serverMessage6.AppendInt32(0);
				serverMessage6.AppendInt32(list.Count);
				foreach (RoomItem current6 in list)
				{
					serverMessage6.AppendUInt(current6.Id);
				}
				serverMessage6.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage6.AppendUInt(Item.Id);
				serverMessage6.AppendString(ExtraInfo);
				serverMessage6.AppendInt32(0);
				serverMessage6.AppendInt32(0);
				serverMessage6.AppendInt32(0);
				serverMessage6.AppendInt32(0);
				serverMessage6.AppendInt32(0);
				serverMessage6.AppendInt32(0);
				Session.SendMessage(serverMessage6);
				return;
			}

			case InteractionType.triggerscoreachieved:
			{
				ServerMessage serverMessage7 = new ServerMessage(Outgoing.WiredTriggerMessageComposer);
				serverMessage7.AppendBoolean(false);
				serverMessage7.AppendInt32(5);
                serverMessage7.AppendInt32(0);
				serverMessage7.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage7.AppendUInt(Item.Id);
				serverMessage7.AppendString("");
				serverMessage7.AppendInt32(1);
				serverMessage7.AppendInt32((String.IsNullOrWhiteSpace(ExtraInfo)) ? 100 : int.Parse(ExtraInfo));
				serverMessage7.AppendInt32(0);
				serverMessage7.AppendInt32(10);
				serverMessage7.AppendInt32(0);
				serverMessage7.AppendInt32(0);
				Session.SendMessage(serverMessage7);
				return;
			}
			case InteractionType.triggerstatechanged:
			{
                ServerMessage serverMessage8 = new ServerMessage(Outgoing.WiredTriggerMessageComposer);
				serverMessage8.AppendBoolean(false);
				serverMessage8.AppendInt32(5);
				serverMessage8.AppendInt32(list.Count);
				foreach (RoomItem current8 in list)
				{
					serverMessage8.AppendUInt(current8.Id);
				}
				serverMessage8.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage8.AppendUInt(Item.Id);
				serverMessage8.AppendString(ExtraInfo);
				serverMessage8.AppendInt32(0);
				serverMessage8.AppendInt32(0);
				serverMessage8.AppendInt32(1);
				serverMessage8.AppendInt32(i);
				serverMessage8.AppendInt32(0);
				serverMessage8.AppendInt32(0);
				Session.SendMessage(serverMessage8);
				return;
			}
			case InteractionType.triggerwalkonfurni:
			{
                ServerMessage serverMessage9 = new ServerMessage(Outgoing.WiredTriggerMessageComposer);
				serverMessage9.AppendBoolean(false);
				serverMessage9.AppendInt32(5);
				serverMessage9.AppendInt32(list.Count);
				foreach (RoomItem current9 in list)
				{
					serverMessage9.AppendUInt(current9.Id);
				}
				serverMessage9.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage9.AppendUInt(Item.Id);
				serverMessage9.AppendString(ExtraInfo);
				serverMessage9.AppendInt32(0);
				serverMessage9.AppendInt32(0);
				serverMessage9.AppendInt32(1);
				serverMessage9.AppendInt32(0);
				serverMessage9.AppendInt32(0);
				serverMessage9.AppendInt32(0);
				Session.SendMessage(serverMessage9);
				return;
			}
                case InteractionType.actionmuteuser:
            {
                ServerMessage serverMessage18 = new ServerMessage(Outgoing.WiredEffectMessageComposer);
                serverMessage18.AppendBoolean(false);
                serverMessage18.AppendInt32(5);
                serverMessage18.AppendInt32(0);
                serverMessage18.AppendInt32(Item.GetBaseItem().SpriteId);
                serverMessage18.AppendUInt(Item.Id);
                serverMessage18.AppendString(ExtraInfo);
                serverMessage18.AppendInt32(1);
                serverMessage18.AppendInt32(i);
                serverMessage18.AppendInt32(0);
                serverMessage18.AppendInt32(20);
                serverMessage18.AppendInt32(0);
                serverMessage18.AppendInt32(0);
                Session.SendMessage(serverMessage18);
                return;
            }
			case InteractionType.triggerwalkofffurni:
			{
                ServerMessage serverMessage10 = new ServerMessage(Outgoing.WiredTriggerMessageComposer);
				serverMessage10.AppendBoolean(false);
				serverMessage10.AppendInt32(5);
				serverMessage10.AppendInt32(list.Count);
				foreach (RoomItem current10 in list)
				{
					serverMessage10.AppendUInt(current10.Id);
				}
				serverMessage10.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage10.AppendUInt(Item.Id);
				serverMessage10.AppendString(ExtraInfo);
				serverMessage10.AppendInt32(0);
                serverMessage10.AppendInt32(0);
				serverMessage10.AppendInt32(1);
				serverMessage10.AppendInt32(0);
				serverMessage10.AppendInt32(0);
				serverMessage10.AppendInt32(0);
				serverMessage10.AppendInt32(0);
				Session.SendMessage(serverMessage10);
				return;
			}

			case InteractionType.actiongivescore:
			{
                // Por hacer.
				ServerMessage serverMessage11 = new ServerMessage(Outgoing.WiredEffectMessageComposer);
				serverMessage11.AppendBoolean(false);
				serverMessage11.AppendInt32(5);
                serverMessage11.AppendInt32(0);
				serverMessage11.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage11.AppendUInt(Item.Id);
				serverMessage11.AppendString("");
				serverMessage11.AppendInt32(2);
                if (String.IsNullOrWhiteSpace(ExtraInfo))
                {
                    serverMessage11.AppendInt32(10); // Puntos a dar
                    serverMessage11.AppendInt32(1); // Numero de veces por equipo
                }
                else
                {
                    string[] Integers = ExtraInfo.Split(',');
                    serverMessage11.AppendInt32(int.Parse(Integers[0])); // Puntos a dar
                    serverMessage11.AppendInt32(int.Parse(Integers[1])); // Numero de veces por equipo
                }
				serverMessage11.AppendInt32(0);
				serverMessage11.AppendInt32(6);
				serverMessage11.AppendInt32(0);
				serverMessage11.AppendInt32(0);
				serverMessage11.AppendInt32(0);
				Session.SendMessage(serverMessage11);
				return;
			}

                case InteractionType.conditiongroupmember:
                case InteractionType.conditionnotgroupmember:
            {
                ServerMessage Message = new ServerMessage(Outgoing.WiredConditionMessageComposer);
                Message.AppendBoolean(false);
                Message.AppendInt32(5);
                Message.AppendInt32(0);
                Message.AppendInt32(Item.GetBaseItem().SpriteId);
                Message.AppendUInt(Item.Id);
                Message.AppendString("");
                Message.AppendInt32(0);
                Message.AppendInt32(0);
                Message.AppendInt32(10);
                Session.SendMessage(Message);
                return;
            }

            case InteractionType.conditionitemsmatches:
                case InteractionType.conditionitemsdontmatch:
            {
                ServerMessage serverMessage21 = new ServerMessage(Outgoing.WiredConditionMessageComposer);
                serverMessage21.AppendBoolean(false);
                serverMessage21.AppendInt32(5);
                serverMessage21.AppendInt32(list.Count);
                foreach (RoomItem current20 in list)
                {
                    serverMessage21.AppendUInt(current20.Id);
                }
                serverMessage21.AppendInt32(Item.GetBaseItem().SpriteId);
                serverMessage21.AppendUInt(Item.Id);
                serverMessage21.AppendString(ExtraString2);
                serverMessage21.AppendInt32(3);

                if (String.IsNullOrWhiteSpace(ExtraInfo))
                {
                    serverMessage21.AppendInt32(0);
                    serverMessage21.AppendInt32(0);
                    serverMessage21.AppendInt32(0);
                }
                else
                {
                    string[] boolz = ExtraInfo.Split(',');

                    foreach (string Stringy in boolz)
                    {
                        if (Stringy.ToLower() == "true")
                        {
                            serverMessage21.AppendInt32(1);
                        }   
                        else
                        {
                            serverMessage21.AppendInt32(0);
                        }
                    }
                }
                serverMessage21.AppendInt32(0);
                serverMessage21.AppendInt32(0);
                Session.SendMessage(serverMessage21);
                return;
            }


			case InteractionType.actionposreset:
			{
				ServerMessage serverMessage12 = new ServerMessage(Outgoing.WiredEffectMessageComposer);
				serverMessage12.AppendBoolean(false);
				serverMessage12.AppendInt32(5);
				serverMessage12.AppendInt32(list.Count);
				foreach (RoomItem current12 in list)
				{
					serverMessage12.AppendUInt(current12.Id);
				}
				serverMessage12.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage12.AppendUInt(Item.Id);
				serverMessage12.AppendString(ExtraString2);
				serverMessage12.AppendInt32(3);

                if (String.IsNullOrWhiteSpace(ExtraInfo))
                {
                    serverMessage12.AppendInt32(0);
                    serverMessage12.AppendInt32(0);
                    serverMessage12.AppendInt32(0);
                }
                else
                {
                    string[] boolz = ExtraInfo.Split(',');

                    foreach (string Stringy in boolz)
                    {
                        if (Stringy.ToLower() == "true")
                        {
                            serverMessage12.AppendInt32(1);
                        }
                        else
                        {
                            serverMessage12.AppendInt32(0);
                        }
                    }
                }
				serverMessage12.AppendInt32(0);
				serverMessage12.AppendInt32(3);
				serverMessage12.AppendInt32(i); // Delay
				serverMessage12.AppendInt32(0);
				Session.SendMessage(serverMessage12);
				return;
			}
			case InteractionType.actionmoverotate:
			{
				ServerMessage serverMessage13 = new ServerMessage(Outgoing.WiredEffectMessageComposer);
				serverMessage13.AppendBoolean(false);
				serverMessage13.AppendInt32(5);
				serverMessage13.AppendInt32(list.Count);
				foreach (RoomItem current13 in list)
				{
					serverMessage13.AppendUInt(current13.Id);
				}
				serverMessage13.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage13.AppendUInt(Item.Id);
				serverMessage13.AppendString(ExtraInfo);
				serverMessage13.AppendInt32(2);
				serverMessage13.AppendInt32(int.Parse(ExtraInfo.Split(new char[]
				{
					';'
				})[0]));
				serverMessage13.AppendInt32(int.Parse(ExtraInfo.Split(new char[]
				{
					';'
				})[1]));
				serverMessage13.AppendInt32(0);
				serverMessage13.AppendInt32(4);
				serverMessage13.AppendInt32(i);
				serverMessage13.AppendInt32(0);
				serverMessage13.AppendInt32(0);
				Session.SendMessage(serverMessage13);
				return;
			}
			case InteractionType.actionresettimer:
			{
				ServerMessage serverMessage14 = new ServerMessage(Outgoing.WiredEffectMessageComposer);
				serverMessage14.AppendBoolean(false);
				serverMessage14.AppendInt32(5);
				serverMessage14.AppendInt32(list.Count);
				foreach (RoomItem current14 in list)
				{
					serverMessage14.AppendUInt(current14.Id);
				}
				serverMessage14.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage14.AppendUInt(Item.Id);
				serverMessage14.AppendString(ExtraInfo);
				serverMessage14.AppendInt32(0);
				serverMessage14.AppendInt32(0);
				serverMessage14.AppendInt32(0);
				serverMessage14.AppendInt32(0);
				serverMessage14.AppendInt32(0);
				serverMessage14.AppendInt32(0);
				Session.SendMessage(serverMessage14);
				return;
			}
			case InteractionType.actionshowmessage:
			case InteractionType.actionkickuser:
			{
				ServerMessage serverMessage15 = new ServerMessage(Outgoing.WiredEffectMessageComposer);
				serverMessage15.AppendBoolean(false);
				serverMessage15.AppendInt32(0);
				serverMessage15.AppendInt32(list.Count);
				foreach (RoomItem current15 in list)
				{
					serverMessage15.AppendUInt(current15.Id);
				}
				serverMessage15.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage15.AppendUInt(Item.Id);
				serverMessage15.AppendString(ExtraInfo);
				serverMessage15.AppendInt32(0);
				serverMessage15.AppendInt32(0);
				serverMessage15.AppendInt32(7);
				serverMessage15.AppendInt32(0);
				serverMessage15.AppendInt32(0);
				serverMessage15.AppendInt32(0);
				Session.SendMessage(serverMessage15);
				return;
			}
			case InteractionType.actionteleportto:
			{
				ServerMessage serverMessage16 = new ServerMessage(Outgoing.WiredEffectMessageComposer);
				serverMessage16.AppendBoolean(false);
				serverMessage16.AppendInt32(5);
				serverMessage16.AppendInt32(list.Count);
				foreach (RoomItem current16 in list)
				{
					serverMessage16.AppendUInt(current16.Id);
				}
				serverMessage16.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage16.AppendUInt(Item.Id);
				serverMessage16.AppendString(ExtraInfo);
				serverMessage16.AppendInt32(0);
				serverMessage16.AppendInt32(8);
				serverMessage16.AppendInt32(0);
				serverMessage16.AppendInt32(i);
				serverMessage16.AppendInt32(0);
				serverMessage16.AppendByte(2);
				Session.SendMessage(serverMessage16);
				return;
			}
			case InteractionType.actiontogglestate:
			{
				ServerMessage serverMessage17 = new ServerMessage(Outgoing.WiredEffectMessageComposer);
				serverMessage17.AppendBoolean(false);
				serverMessage17.AppendInt32(5);
				serverMessage17.AppendInt32(list.Count);
				foreach (RoomItem current17 in list)
				{
					serverMessage17.AppendUInt(current17.Id);
				}
				serverMessage17.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage17.AppendUInt(Item.Id);
				serverMessage17.AppendString(ExtraInfo);
				serverMessage17.AppendInt32(0);
				serverMessage17.AppendInt32(8);
				serverMessage17.AppendInt32(0);
				serverMessage17.AppendInt32(i);
				serverMessage17.AppendInt32(0);
				serverMessage17.AppendInt32(0);
				Session.SendMessage(serverMessage17);
				return;
			}
			case InteractionType.actiongivereward:
			{
				ServerMessage serverMessage18 = new ServerMessage(Outgoing.WiredEffectMessageComposer);
				serverMessage18.AppendBoolean(false);
				serverMessage18.AppendInt32(5);
				serverMessage18.AppendInt32(0);
				serverMessage18.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage18.AppendUInt(Item.Id);
				serverMessage18.AppendString(ExtraInfo);
				serverMessage18.AppendInt32(3);
				serverMessage18.AppendInt32((ExtraString == "") ? 0 : int.Parse(ExtraString));
				serverMessage18.AppendInt32(flag ? 1 : 0);
				serverMessage18.AppendInt32((ExtraString2 == "") ? 0 : int.Parse(ExtraString2));
				serverMessage18.AppendInt32(0);
				serverMessage18.AppendInt32(17);
				serverMessage18.AppendInt32(0);
				serverMessage18.AppendInt32(0);
				Session.SendMessage(serverMessage18);
				return;
			}

            case InteractionType.conditionhowmanyusersinroom:
                case InteractionType.conditionnegativehowmanyusers:
            {
                ServerMessage serverMessage19 = new ServerMessage(Outgoing.WiredConditionMessageComposer);
                serverMessage19.AppendBoolean(false);
                serverMessage19.AppendInt32(5);
                serverMessage19.AppendInt32(0);
                serverMessage19.AppendInt32(Item.GetBaseItem().SpriteId);
                serverMessage19.AppendUInt(Item.Id);
                serverMessage19.AppendString("");
                serverMessage19.AppendInt32(2);
                if (String.IsNullOrWhiteSpace(ExtraInfo))
                {
                    serverMessage19.AppendInt32(1);
                    serverMessage19.AppendInt32(50);
                }
                else
                {
                    foreach (string Integers in ExtraInfo.Split(','))
                    {
                        serverMessage19.AppendInt32(int.Parse(Integers));
                    }
                }
                serverMessage19.AppendBoolean(false);
                serverMessage19.AppendInt32(0);
                serverMessage19.AppendInt32(1290);
                Session.SendMessage(serverMessage19);
                return;
            }

			case InteractionType.conditionfurnishaveusers:
            case InteractionType.conditionstatepos:
            case InteractionType.conditiontriggeronfurni:
            case InteractionType.conditionfurnihasfurni:
            case InteractionType.conditionfurnitypematches:
                case InteractionType.conditionfurnihasnotfurni:
                case InteractionType.conditionfurnishavenotusers:
                case InteractionType.conditionfurnitypedontmatch:
                case InteractionType.conditiontriggerernotonfurni:
			{
				ServerMessage serverMessage19 = new ServerMessage(Outgoing.WiredConditionMessageComposer);
				serverMessage19.AppendBoolean(false);
				serverMessage19.AppendInt32(5);
				serverMessage19.AppendInt32(list.Count);
				foreach (RoomItem current18 in list)
				{
					serverMessage19.AppendUInt(current18.Id);
				}
				serverMessage19.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage19.AppendUInt(Item.Id);
				serverMessage19.AppendInt32(0);
				serverMessage19.AppendInt32(0);
				serverMessage19.AppendInt32(0);
				serverMessage19.AppendBoolean(false);
				serverMessage19.AppendBoolean(true);
				Session.SendMessage(serverMessage19);
				return;
			}
			case InteractionType.conditiontimelessthan:
			case InteractionType.conditiontimemorethan:
			{
				ServerMessage serverMessage21 = new ServerMessage(Outgoing.WiredConditionMessageComposer);
				serverMessage21.AppendBoolean(false);
				serverMessage21.AppendInt32(5);
				serverMessage21.AppendInt32(list.Count);
				foreach (RoomItem current20 in list)
				{
					serverMessage21.AppendUInt(current20.Id);
				}
				serverMessage21.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage21.AppendUInt(Item.Id);
				serverMessage21.AppendInt32(0);
				serverMessage21.AppendInt32(0);
				serverMessage21.AppendInt32(0);
				serverMessage21.AppendInt32(0);
				serverMessage21.AppendInt32(0);
				serverMessage21.AppendInt32(0);
				serverMessage21.AppendInt32(0);
				Session.SendMessage(serverMessage21);
				return;
			}

            case InteractionType.conditionuserwearingeffect:
                case InteractionType.conditionusernotwearingeffect:
            {
                int effect = 0;
                int.TryParse(ExtraInfo, out effect);
                ServerMessage serverMessage21 = new ServerMessage(Outgoing.WiredConditionMessageComposer);
                serverMessage21.AppendBoolean(false);
                serverMessage21.AppendInt32(5);
                serverMessage21.AppendInt32(0);
                serverMessage21.AppendInt32(Item.GetBaseItem().SpriteId);
                serverMessage21.AppendUInt(Item.Id);
                serverMessage21.AppendString("");
                serverMessage21.AppendInt32(1);
                serverMessage21.AppendInt32(effect);
                serverMessage21.AppendInt32(0);
                serverMessage21.AppendInt32(12);
                Session.SendMessage(serverMessage21);
                return;
            }

                case InteractionType.conditionuserwearingbadge:
                case InteractionType.conditionusernotwearingbadge:
            {
                ServerMessage serverMessage21 = new ServerMessage(Outgoing.WiredConditionMessageComposer);
                serverMessage21.AppendBoolean(false);
                serverMessage21.AppendInt32(5);
                serverMessage21.AppendInt32(0);
                serverMessage21.AppendInt32(Item.GetBaseItem().SpriteId);
                serverMessage21.AppendUInt(Item.Id);
                serverMessage21.AppendString(ExtraInfo);
                serverMessage21.AppendInt32(0);
                serverMessage21.AppendInt32(0);
                serverMessage21.AppendInt32(11);
                Session.SendMessage(serverMessage21);
                return;
            }

                case InteractionType.conditiondaterangeactive:
            {
                int date1 = 0;
                int date2 = 0;

                try
                {
                    string[] strArray = ExtraInfo.Split(',');
                    date1 = int.Parse(strArray[0]);
                    date2 = int.Parse(strArray[1]);
                }
                catch { }

                ServerMessage serverMessage21 = new ServerMessage(Outgoing.WiredConditionMessageComposer);
                serverMessage21.AppendBoolean(false);
                serverMessage21.AppendInt32(5);
                serverMessage21.AppendInt32(0);
                serverMessage21.AppendInt32(Item.GetBaseItem().SpriteId);
                serverMessage21.AppendUInt(Item.Id);
                serverMessage21.AppendString(ExtraInfo);
                serverMessage21.AppendInt32(2);
                serverMessage21.AppendInt32(date1);
                serverMessage21.AppendInt32(date2);
                serverMessage21.AppendInt32(0);
                serverMessage21.AppendInt32(24);
                Session.SendMessage(serverMessage21);
                return;
            }
			
           
			
			case InteractionType.arrowplate:
			case InteractionType.pressurepad:
			case InteractionType.ringplate:
			case InteractionType.colortile:
			case InteractionType.colorwheel:
			case InteractionType.floorswitch1:
			case InteractionType.floorswitch2:
			case InteractionType.firegate:
			case InteractionType.glassfoor:
				break;
			case InteractionType.specialrandom:
			{
				ServerMessage serverMessage24 = new ServerMessage(Outgoing.WiredEffectMessageComposer);
				serverMessage24.AppendBoolean(false);
				serverMessage24.AppendInt32(5);
				serverMessage24.AppendInt32(list.Count);
				foreach (RoomItem current23 in list)
				{
					serverMessage24.AppendUInt(current23.Id);
				}
				serverMessage24.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage24.AppendUInt(Item.Id);
				serverMessage24.AppendString(ExtraInfo);
				serverMessage24.AppendInt32(0);
				serverMessage24.AppendInt32(8);
				serverMessage24.AppendInt32(0);
				serverMessage24.AppendInt32(0);
				serverMessage24.AppendInt32(0);
				serverMessage24.AppendInt32(0);
				Session.SendMessage(serverMessage24);
				return;
			}
			case InteractionType.specialunseen:
			{
				ServerMessage serverMessage25 = new ServerMessage(Outgoing.WiredEffectMessageComposer);
				serverMessage25.AppendBoolean(false);
				serverMessage25.AppendInt32(5);
				serverMessage25.AppendInt32(list.Count);
				foreach (RoomItem current24 in list)
				{
					serverMessage25.AppendUInt(current24.Id);
				}
				serverMessage25.AppendInt32(Item.GetBaseItem().SpriteId);
				serverMessage25.AppendUInt(Item.Id);
				serverMessage25.AppendString(ExtraInfo);
				serverMessage25.AppendInt32(0);
				serverMessage25.AppendInt32(8);
				serverMessage25.AppendInt32(0);
				serverMessage25.AppendInt32(0);
				serverMessage25.AppendInt32(0);
				serverMessage25.AppendInt32(0);
				Session.SendMessage(serverMessage25);
				return;
			}
			default:
				return;
			}
		}
Beispiel #17
0
		internal static ServerMessage SerializeTicketChatlog(SupportTicket Ticket, RoomData RoomData, double Timestamp)
		{
			ServerMessage result;
			using (IQueryAdapter queryreactor = MercuryEnvironment.GetDatabaseManager().getQueryreactor())
			{
				queryreactor.setQuery(string.Concat(new object[]
				{
					"SELECT user_id,timestamp,message FROM chatlogs WHERE room_id = ",
					RoomData.Id,
					" AND (timestamp >= ",
					Timestamp - 300.0,
					" AND timestamp <= ",
					Timestamp,
					") OR (timestamp >= ",
					Timestamp - 300.0,
					" AND timestamp = 0) ORDER BY timestamp DESC LIMIT 150"
				}));
				DataTable table = queryreactor.getTable();
				ServerMessage serverMessage = new ServerMessage(Outgoing.ModerationToolIssueChatlogMessageComposer);
				serverMessage.AppendUInt(Ticket.TicketId);
				serverMessage.AppendUInt(Ticket.SenderId);
				serverMessage.AppendUInt(Ticket.ReportedId);
				serverMessage.AppendUInt(RoomData.Id);
				serverMessage.AppendBoolean(false);
				serverMessage.AppendUInt(RoomData.Id);
				serverMessage.AppendString(RoomData.Name);
				if (table != null)
				{
					serverMessage.AppendInt32(table.Rows.Count);
					IEnumerator enumerator = table.Rows.GetEnumerator();
					try
					{
						while (enumerator.MoveNext())
						{
							DataRow dataRow = (DataRow)enumerator.Current;
							Habbo habboForId = MercuryEnvironment.getHabboForId(Convert.ToUInt32(dataRow["user_id"]));
							serverMessage.AppendInt32(MercuryEnvironment.UnixToDateTime(Convert.ToDouble(dataRow["timestamp"])).Minute);
							serverMessage.AppendUInt(habboForId.Id);
							serverMessage.AppendString(habboForId.Username);
							serverMessage.AppendString((string)dataRow["message"]);
						}
						goto IL_1B8;
					}
					finally
					{
						IDisposable disposable = enumerator as IDisposable;
						if (disposable != null)
						{
							disposable.Dispose();
						}
					}
				}
				serverMessage.AppendInt32(0);
				IL_1B8:
				result = serverMessage;
			}
			return result;
		}
Beispiel #18
0
		private ServerMessage SerializeHeightmap()
		{
			ServerMessage serverMessage = new ServerMessage(Outgoing.FloorMapMessageComposer);
			serverMessage.AppendBoolean(true);
			serverMessage.AppendInt32(mRoom.WallHeight);
			StringBuilder stringBuilder = new StringBuilder();
			checked
			{
				for (int i = 0; i < this.MapSizeY; i++)
				{
					for (int j = 0; j < this.MapSizeX; j++)
					{
                        try
                        {
                            stringBuilder.Append(this.SqChar[j, i].ToString());
                        }
                        catch (Exception)
                        {
                            stringBuilder.Append("0");
                        }
					}
					stringBuilder.Append(Convert.ToChar(13));
				}
				string s = stringBuilder.ToString();
				serverMessage.AppendString(s);
				return serverMessage;
			}
		}
Beispiel #19
0
		internal static ServerMessage Compose()
		{
			ServerMessage serverMessage = new ServerMessage(Outgoing.QuestAbortedMessageComposer);
			serverMessage.AppendBoolean(false);
			return serverMessage;
		}
Beispiel #20
0
		internal void Serialize(ServerMessage Message)
		{
			try
			{
				Message.AppendInt32(this.Id);
				Message.AppendString(this.Caption);
				Message.AppendString(this.Description);
				Message.AppendInt32(this.Type);
				Message.AppendString(this.Caption);
				Message.AppendString(this.Image);
				Message.AppendInt32((this.ParentId > 0) ? this.ParentId : 0);
				Message.AppendInt32((this.RoomInfo != null) ? this.RoomInfo.UsersNow : 0);
				Message.AppendInt32((this.itemType == PublicItemType.NONE) ? 0 : ((this.itemType == PublicItemType.TAG) ? 1 : ((this.itemType == PublicItemType.FLAT) ? 2 : ((this.itemType == PublicItemType.PUBLIC_FLAT) ? 2 : ((this.itemType == PublicItemType.CATEGORY) ? 4 : 0)))));
				if (this.itemType == PublicItemType.TAG)
				{
					Message.AppendString(this.TagsToSearch);
				}
				else
				{
					if (this.itemType == PublicItemType.CATEGORY)
					{
						Message.AppendBoolean(false);
					}
					else
					{
						if (this.itemType == PublicItemType.FLAT)
						{
							this.RoomInfo.Serialize(Message, false);
						}
						else
						{
							if (this.itemType == PublicItemType.PUBLIC_FLAT)
							{
								this.RoomInfo.Serialize(Message, false);
							}
						}
					}
				}
			}
			catch (Exception ex)
			{
				Console.WriteLine("Exception on publicitems composing: " + ex.ToString());
			}
		}
Beispiel #21
0
		internal bool tryLogin(string AuthTicket)
		{
			try
			{
				string ip = this.GetConnection().getIp();
				byte b = 0;
				UserData userData = UserDataFactory.GetUserData(AuthTicket, ip, out b);
				bool result;
				if (b == 1)
				{
					result = false;
					return result;
				}
				if (b == 2)
				{
					result = false;
					return result;
				}
				MercuryEnvironment.GetGame().GetClientManager().RegisterClient(this, userData.userID, userData.user.Username);
				this.Habbo = userData.user;
				userData.user.LoadData(userData);
				string banReason = MercuryEnvironment.GetGame().GetBanManager().GetBanReason(userData.user.Username, ip, this.MachineId);
				if (!string.IsNullOrEmpty(banReason) || userData.user.Username == null)
				{
					this.SendNotifWithScroll(banReason);
					using (IQueryAdapter queryreactor = MercuryEnvironment.GetDatabaseManager().getQueryreactor())
					{
						queryreactor.setQuery("SELECT ip_last FROM users WHERE id=" + this.GetHabbo().Id + " LIMIT 1");
						string @string = queryreactor.getString();
						queryreactor.setQuery("SELECT COUNT(0) FROM bans_access WHERE user_id=" + this.Habbo.Id + " LIMIT 1");
						int integer = queryreactor.getInteger();
						if (integer > 0)
						{
							queryreactor.runFastQuery(string.Concat(new object[]
							{
								"UPDATE bans_access SET attempts = attempts + 1, ip='",
								@string,
								"' WHERE user_id=",
								this.GetHabbo().Id,
								" LIMIT 1"
							}));
						}
						else
						{
							queryreactor.runFastQuery(string.Concat(new object[]
							{
								"INSERT INTO bans_access (user_id, ip) VALUES (",
								this.GetHabbo().Id,
								", '",
								@string,
								"')"
							}));
						}
					}
					result = false;
					return result;
				}
				userData.user.Init(this, userData);
				QueuedServerMessage queuedServerMessage = new QueuedServerMessage(this.Connection);
				ServerMessage serverMessage = new ServerMessage(Outgoing.UniqueMachineIDMessageComposer);
				serverMessage.AppendString(this.MachineId);
				queuedServerMessage.appendResponse(serverMessage);
				queuedServerMessage.appendResponse(new ServerMessage(Outgoing.AuthenticationOKMessageComposer));
				if (this.Habbo != null)
				{
					ServerMessage serverMessage2 = new ServerMessage(Outgoing.HomeRoomMessageComposer);
					serverMessage2.AppendUInt(this.Habbo.HomeRoom);
					serverMessage2.AppendUInt(this.Habbo.HomeRoom);
					queuedServerMessage.appendResponse(serverMessage2);
				}
				ServerMessage serverMessage3 = new ServerMessage(Outgoing.MinimailCountMessageComposer);
				serverMessage3.AppendInt32(this.Habbo.MinimailUnreadMessages);
				queuedServerMessage.appendResponse(serverMessage3);

				ServerMessage serverMessage4 = new ServerMessage(Outgoing.FavouriteRoomsMessageComposer);
				serverMessage4.AppendInt32(30);
				serverMessage4.AppendInt32(userData.user.FavoriteRooms.Count);
				object[] array = userData.user.FavoriteRooms.ToArray();
				for (int i = 0; i < array.Length; i++)
				{
					uint i2 = (uint)array[i];
					serverMessage4.AppendUInt(i2);
				}
				queuedServerMessage.appendResponse(serverMessage4);
				

                ServerMessage rightsMessage = new ServerMessage(Outgoing.UserClubRightsMessageComposer);
                rightsMessage.AppendInt32(userData.user.GetSubscriptionManager().HasSubscription ? 2 : 0);
                rightsMessage.AppendUInt(userData.user.Rank);
                rightsMessage.AppendInt32(0);


                queuedServerMessage.appendResponse(rightsMessage);
				ServerMessage serverMessage5 = new ServerMessage(Outgoing.EnableNotificationsMessageComposer);
				serverMessage5.AppendBoolean(true);
				serverMessage5.AppendBoolean(false);
				queuedServerMessage.appendResponse(serverMessage5);
				ServerMessage serverMessage6 = new ServerMessage(Outgoing.EnableTradingMessageComposer);
				serverMessage6.AppendBoolean(true);
				queuedServerMessage.appendResponse(serverMessage6);
				userData.user.UpdateCreditsBalance();
				ServerMessage serverMessage7 = new ServerMessage(Outgoing.ActivityPointsMessageComposer);
				serverMessage7.AppendInt32(2);
				serverMessage7.AppendInt32(0);
				serverMessage7.AppendInt32(userData.user.ActivityPoints);
				serverMessage7.AppendInt32(5);
				serverMessage7.AppendInt32(userData.user.BelCredits);
				queuedServerMessage.appendResponse(serverMessage7);
				if (userData.user.HasFuse("fuse_mod"))
				{
					queuedServerMessage.appendResponse(MercuryEnvironment.GetGame().GetModerationTool().SerializeTool());
				}
				if (!string.IsNullOrWhiteSpace(MercuryEnvironment.GetDBConfig().DBData["welcome_message"]))
				{
					this.SendBroadcastMessage(MercuryEnvironment.GetDBConfig().DBData["welcome_message"]);
				}

                queuedServerMessage.appendResponse(MercuryEnvironment.GetGame().GetAchievementManager().AchievementDataCached);



                if (!GetHabbo().NUXPassed && ExtraSettings.NEW_USER_GIFTS_ENABLED)
                {
                    queuedServerMessage.appendResponse(new ServerMessage(Outgoing.NuxSuggestFreeGiftsMessageComposer));
                }

                queuedServerMessage.appendResponse(this.GetHabbo().GetAvatarEffectsInventoryComponent().GetPacket());

				queuedServerMessage.sendResponse();

                MercuryEnvironment.GetGame().GetAchievementManager().TryProgressHabboClubAchievements(this);
                MercuryEnvironment.GetGame().GetAchievementManager().TryProgressRegistrationAchievements(this);
                MercuryEnvironment.GetGame().GetAchievementManager().TryProgressLoginAchievements(this);
				result = true;
				return result;
			}
			catch (Exception ex)
			{
				Logging.LogCriticalException("Bug during user login: " + ex.ToString());
			}
			return false;
		}
Beispiel #22
0
 internal static ServerMessage PurchaseOK()
 {
     ServerMessage Message = new ServerMessage(Outgoing.PurchaseOKMessageComposer);
     Message.AppendInt32(0);
     Message.AppendString("");
     Message.AppendBoolean(false);
     Message.AppendInt32(0);
     Message.AppendInt32(0);
     Message.AppendInt32(0);
     Message.AppendBoolean(true);
     Message.AppendInt32(1);
     Message.AppendString("s");
     Message.AppendInt32(0);
     Message.AppendString("");
     Message.AppendInt32(1);
     Message.AppendInt32(0);
     Message.AppendString("");
     Message.AppendInt32(1);
     return Message;
 }
Beispiel #23
0
        internal static void ComposeItem(CatalogItem Item, ServerMessage Message)
        {
            Message.AppendUInt(Item.Id);
            Message.AppendString(Item.Name);
            Message.AppendBoolean(false);
            Message.AppendInt32(Item.CreditsCost);
            if (Item.BelCreditsCost > 0)
            {
                Message.AppendInt32(Item.BelCreditsCost);
                Message.AppendInt32(105);
            }
            else
            {
                if (Item.LoyaltyCost > 0)
                {
                    Message.AppendInt32(Item.LoyaltyCost);
                    Message.AppendInt32(105);
                }
                else
                {
                    Message.AppendInt32(Item.DucketsCost);
                    Message.AppendInt32(0);
                }
            }
            Message.AppendBoolean(Item.GetFirstBaseItem().AllowGift);
            checked
            {
                if (Item.Name == "g0 group_product")
                {
                    Message.AppendInt32(0);
                }
                else
                {
                    if (Item.Badge == "")
                    {
                        Message.AppendInt32(Item.Items.Count);
                    }
                    else
                    {
                        if (Item.Name == "room_ad_plus_badge")
                        {
                            Message.AppendInt32(1);
                        }
                        else
                        {
                            Message.AppendInt32(Item.Items.Count + 1);
                        }
                        Message.AppendString("b");
                        Message.AppendString(Item.Badge);
                    }
                }
                foreach (uint current in Item.Items.Keys)
                {
                    if (Item.Name == "g0 group_product")
                    {
                        break;
                    }
                    if (Item.Name != "room_ad_plus_badge")
                    {
                        Message.AppendString(Item.GetBaseItem(current).Type.ToString());
                        Message.AppendInt32(Item.GetBaseItem(current).SpriteId);

                        if (Item.Name.Contains("wallpaper_single") || Item.Name.Contains("floor_single") || Item.Name.Contains("landscape_single"))
                        {
                            string[] array = Item.Name.Split('_');
                            Message.AppendString(array[2]);
                        }
                        else
                        {
                            if (Item.Name.StartsWith("bot_") || Item.GetBaseItem(current).InteractionType == InteractionType.musicdisc)
                            {
                                Message.AppendString(Item.ExtraData);
                            }
                            else
                            {
                                if (Item.Name.StartsWith("poster_"))
                                {
                                    string[] array2 = Item.Name.Split('_');
                                    Message.AppendString(array2[1]);
                                }
                                else
                                {
                                    if (Item.Name.StartsWith("poster "))
                                    {
                                        string[] array3 = Item.Name.Split(' ');
                                        Message.AppendString(array3[1]);
                                    }
                                    else
                                    {
                                        if (Item.songID > 0u && Item.GetBaseItem(current).InteractionType == InteractionType.musicdisc)
                                        {
                                            Message.AppendString(Item.ExtraData);
                                        }
                                        else
                                        {
                                            Message.AppendString(string.Empty);
                                        }
                                    }
                                }
                            }
                        }
                        Message.AppendInt32(Item.Items[current]);
                        Message.AppendBoolean(Item.IsLimited);
                        if (Item.IsLimited)
                        {
                            Message.AppendInt32(Item.LimitedStack);
                            Message.AppendInt32(Item.LimitedStack - Item.LimitedSelled);
                        }
                    }
                    else
                    {
                        Message.AppendString("");
                        Message.AppendInt32(0);
                    }
                }
                Message.AppendInt32(Item.ClubOnly ? 1 : 0);
                if (Item.IsLimited || Item.FirstAmount != 1)
                {
                    Message.AppendBoolean(false);
                    return;
                }
                Message.AppendBoolean(Item.HaveOffer && !Item.IsLimited);
            }
        }
Beispiel #24
0
		internal static ServerMessage SerializeRoomChatlog(uint roomID)
		{
            // NEW CHATLOGS [March 2014] Coded by Finn
            // Please don't remove credits, this took me some time to do... :(
            // Credits to Itachi for the structure's "context" enigma :D

			ServerMessage Message = new ServerMessage();
            RoomData Room = MercuryEnvironment.GetGame().GetRoomManager().GenerateRoomData(roomID);
			if (Room == null)
			{
                throw new NullReferenceException("No room found.");
			}

			Message.Init(Outgoing.ModerationToolRoomChatlogMessageComposer);
			Message.AppendByte(1);
			Message.AppendShort(2);
			Message.AppendString("roomName");
			Message.AppendByte(2);
			Message.AppendString(Room.Name);
			Message.AppendString("roomId");
			Message.AppendByte(1);
			Message.AppendUInt(Room.Id);


            var TempChatlogs = Room.RoomChat.Reverse().Take(60);
            Message.AppendShort(TempChatlogs.Count());
            foreach (Chatlog current in TempChatlogs)
			{
				Habbo Habbo = MercuryEnvironment.getHabboForId(current.UserId);
				DateTime Date = MercuryEnvironment.UnixToDateTime(current.Timestamp);
                if (Habbo == null)
                {
                    Message.AppendInt32((DateTime.Now - Date).Seconds);
                    Message.AppendUInt(current.UserId);
                    Message.AppendString("*User not found*");
                    Message.AppendString(current.Message);
                    Message.AppendBoolean(true);
                }
                else
                {
                    Message.AppendInt32((DateTime.Now - Date).Seconds);
                    Message.AppendUInt(Habbo.Id);
                    Message.AppendString(Habbo.Username);
                    Message.AppendString(current.Message);
                    Message.AppendBoolean(false); // Text is bold
                }
			}
            TempChatlogs = null;

            return Message;
		}
Beispiel #25
0
		internal void UpdateTradeWindow()
		{
			ServerMessage serverMessage = new ServerMessage(Outgoing.TradeUpdateMessageComposer);
			checked
			{
				for (int i = 0; i < this.Users.Length; i++)
				{
					TradeUser tradeUser = this.Users[i];
					if (tradeUser != null)
					{
						serverMessage.AppendUInt(tradeUser.UserId);
						serverMessage.AppendInt32(tradeUser.OfferedItems.Count);
						foreach (UserItem current in tradeUser.OfferedItems)
						{
							serverMessage.AppendUInt(current.Id);
							serverMessage.AppendString(current.GetBaseItem().Type.ToString().ToLower());
							serverMessage.AppendUInt(current.Id);
							serverMessage.AppendInt32(current.GetBaseItem().SpriteId);
							serverMessage.AppendInt32(0);
							serverMessage.AppendBoolean(true);
							serverMessage.AppendInt32(0);
							serverMessage.AppendString("");
							serverMessage.AppendInt32(0);
							serverMessage.AppendInt32(0);
							serverMessage.AppendInt32(0);
							if (current.GetBaseItem().Type == 's')
							{
								serverMessage.AppendInt32(0);
							}
						}
					}
				}
				this.SendMessageToUsers(serverMessage);
			}
		}
Beispiel #26
0
		internal void RemoveRoomItem(RoomItem Item, bool WasPicked)
		{
			if (Item.IsWallItem)
			{
				ServerMessage serverMessage = new ServerMessage(Outgoing.PickUpWallItemMessageComposer);
				serverMessage.AppendString(Item.Id + string.Empty);
				if (WasPicked)
				{
					serverMessage.AppendUInt(Item.UserID);
				}
				else
				{
					serverMessage.AppendInt32(0);
				}
				this.room.SendMessage(serverMessage);
			}
			else
			{
				if (Item.IsFloorItem)
				{
					ServerMessage serverMessage2 = new ServerMessage(Outgoing.PickUpFloorItemMessageComposer);
					serverMessage2.AppendString(Item.Id + string.Empty);
					serverMessage2.AppendBoolean(false);
					serverMessage2.AppendInt32((!WasPicked && Item.GetBaseItem().InteractionType == InteractionType.moplaseed) ? -1 : 0);
					if (WasPicked)
					{
						serverMessage2.AppendUInt(Item.UserID);
					}
					else
					{
						serverMessage2.AppendInt32(0);
					}
					this.room.SendMessage(serverMessage2);
				}
			}
			if (Item.IsWallItem)
			{
				this.mWallItems.Remove(Item.Id);
			}
			else
			{
				this.mFloorItems.Remove(Item.Id);
				this.mFloorItems.OnCycle();
				this.room.GetGameMap().RemoveFromMap(Item);
			}
			this.RemoveItem(Item);
			this.room.GetRoomUserManager().UpdateUserStatusses();
		}
Beispiel #27
0
		internal ServerMessage SerializeUpdate(MessengerBuddy friend)
		{
			ServerMessage serverMessage = new ServerMessage(Outgoing.FriendUpdateMessageComposer);
			serverMessage.AppendInt32(0);
			serverMessage.AppendInt32(1);
			serverMessage.AppendInt32(0);
			friend.Serialize(serverMessage, this.GetClient());
			serverMessage.AppendBoolean(false);
			return serverMessage;
		}
Beispiel #28
0
        internal static ServerMessage ComposeClubPurchasePage(GameClient Session, int WindowId)
        {
            // Coded by Finn for Mercury Emulator
            ServerMessage Message = new ServerMessage(Outgoing.CatalogueClubPageMessageComposer);
           
            var habboClubItems = MercuryEnvironment.GetGame().GetCatalog().HabboClubItems;
            Message.AppendInt32(habboClubItems.Count);

            foreach (CatalogItem Item in habboClubItems)
            {
                Message.AppendUInt(Item.Id);
                Message.AppendString(Item.Name);
                Message.AppendBoolean(false);
                Message.AppendInt32(Item.CreditsCost);
                Message.AppendInt32(Item.DucketsCost);
                Message.AppendInt32(0);
                Message.AppendBoolean(true);

                string[] fuckingArray = Item.Name.Split('_');
                double dayTime = 31;

                if (Item.Name.Contains("DAY"))
                {
                    dayTime = int.Parse(fuckingArray[3]);
                }
                else if (Item.Name.Contains("MONTH"))
                {
                    int monthTime = int.Parse(fuckingArray[3]);
                    dayTime = monthTime * 31;
                }
                else if (Item.Name.Contains("YEAR"))
                {
                    int yearTimeOmg = int.Parse(fuckingArray[3]);
                    dayTime = yearTimeOmg * 31 * 12;
                }

                DateTime newExpiryDate = DateTime.Now.AddDays(dayTime);
                if (Session.GetHabbo().GetSubscriptionManager().HasSubscription)
                {
                    newExpiryDate = MercuryEnvironment.UnixToDateTime((double)Session.GetHabbo().GetSubscriptionManager().GetSubscription().ExpireTime).AddDays(dayTime);
                }
                Message.AppendInt32((int)dayTime / 31);
                Message.AppendInt32((int)dayTime);
                Message.AppendBoolean(false);
                Message.AppendInt32((int)dayTime);
                Message.AppendInt32(newExpiryDate.Year);
                Message.AppendInt32(newExpiryDate.Month);
                Message.AppendInt32(newExpiryDate.Day);
            }
            Message.AppendInt32(WindowId);
            return Message;
        }
Beispiel #29
0
		internal void SerializeFloor(ServerMessage Message, bool Inventory)
		{
			Message.AppendUInt(this.Id);
			Message.AppendString(this.mBaseItem.Type.ToString().ToUpper());
			Message.AppendUInt(this.Id);
			Message.AppendInt32(this.GetBaseItem().SpriteId);

            int ExtraParam = 0;

			if (this.GetBaseItem().InteractionType == InteractionType.gld_item || this.GetBaseItem().InteractionType == InteractionType.gld_gate)
			{
				Guild group = MercuryEnvironment.GetGame().GetGroupManager().GetGroup(this.GroupId);
				if (group != null)
				{
					Message.AppendInt32(17);
					Message.AppendInt32(2);
					Message.AppendInt32(5);
					Message.AppendString(this.ExtraData);
					Message.AppendString(group.Id.ToString());
					Message.AppendString(group.Badge);
					Message.AppendString(MercuryEnvironment.GetGame().GetGroupManager().GetGroupColour(group.Colour1, true));
					Message.AppendString(MercuryEnvironment.GetGame().GetGroupManager().GetGroupColour(group.Colour2, false));
				}
				else
				{
					if (this.GetBaseItem().InteractionType == InteractionType.moplaseed)
					{
						Message.AppendInt32(19);
						Message.AppendInt32(1);
						Message.AppendInt32(1);
						Message.AppendString("rarity");
						Message.AppendString(this.ExtraData.ToString());
					}
					else
					{
						if (this.LimitedNo > 0)
						{
							Message.AppendInt32(1);
							Message.AppendInt32(256);
							Message.AppendString(this.ExtraData);
							Message.AppendInt32(this.LimitedNo);
							Message.AppendInt32(this.LimitedTot);
						}
						else
						{
							Message.AppendInt32((GetBaseItem().InteractionType == InteractionType.gift) ? 9 : 0);
							Message.AppendInt32(0);
							Message.AppendString((GetBaseItem().InteractionType == InteractionType.gift) ? "" : this.ExtraData);
						}
					}
				}
			}
			else
			{
				Message.AppendInt32(1);
				Message.AppendInt32(0);
				Message.AppendString((GetBaseItem().InteractionType == InteractionType.gift) ? "" : this.ExtraData);
			}
			Message.AppendBoolean(this.GetBaseItem().AllowRecycle);
			Message.AppendBoolean(this.GetBaseItem().AllowTrade);
			Message.AppendBoolean(this.LimitedNo <= 0 && this.GetBaseItem().AllowInventoryStack);
			Message.AppendBoolean(false);
			Message.AppendInt32(-1);
			Message.AppendBoolean(true);
			Message.AppendInt32(-1);
			Message.AppendString("");

            try
            {
                if (GetBaseItem().InteractionType == InteractionType.gift)
                {
                    string[] Split = this.ExtraData.Split((char)9);
                    int Ribbon = int.Parse(Split[2]);
                    int Colour = int.Parse(Split[3]);
                    ExtraParam = (Ribbon * 1000) + Colour;
                }
            }
            catch
            {
                ExtraParam = 1001;
            }
            Console.WriteLine(ExtraParam);
			Message.AppendInt32(ExtraParam);//ExtraParam
		}
Beispiel #30
0
        internal static ServerMessage ComposePage(CatalogPage Page)
        {
            ServerMessage Message = new ServerMessage(Outgoing.CataloguePageMessageComposer);
            Message.AppendInt32(Page.PageId);
            Message.AppendString("NORMAL");

            switch (Page.Layout)
            {
                case "frontpage":
                    Message.AppendString("frontpage4");
                    Message.AppendInt32(2);
                    Message.AppendString(Page.LayoutHeadline);
                    Message.AppendString(Page.LayoutTeaser);
                    Message.AppendInt32(2);
                    Message.AppendString(Page.Text1);
                    Message.AppendString(Page.Text2);
                    Message.AppendInt32(0);
                    Message.AppendInt32(-1);
                    Message.AppendBoolean(false);
                    break;

                case "roomads":
                    Message.AppendString("roomads");
                    Message.AppendInt32(2);
                    Message.AppendString("events_header");
                    Message.AppendString("");
                    Message.AppendInt32(2);
                    Message.AppendString(Page.Text1);
                    Message.AppendString("");
                    break;

                case "bots":
                    Message.AppendString("bots");
                    Message.AppendInt32(2);
                    Message.AppendString(Page.LayoutHeadline);
                    Message.AppendString(Page.LayoutTeaser);
                    Message.AppendInt32(3);
                    Message.AppendString(Page.Text1);
                    Message.AppendString(Page.Text2);
                    Message.AppendString(Page.TextDetails);
                    break;

                case "badge_display":
                    Message.AppendString("badge_display");
                    Message.AppendInt32(2);
                    Message.AppendString(Page.LayoutHeadline);
                    Message.AppendString(Page.LayoutTeaser);
                    Message.AppendInt32(3);
                    Message.AppendString(Page.Text1);
                    Message.AppendString(Page.Text2);
                    Message.AppendString(Page.TextDetails);
                    break;

                case "info_loyalty":
                case "info_duckets":
                    Message.AppendString(Page.Layout);
                    Message.AppendInt32(1);
                    Message.AppendString(Page.LayoutHeadline);
                    Message.AppendInt32(1);
                    Message.AppendString(Page.Text1);
                    break;
                case "sold_ltd_items":
                    Message.AppendString("sold_ltd_items");
                    Message.AppendInt32(2);
                    Message.AppendString(Page.LayoutHeadline);
                    Message.AppendString(Page.LayoutTeaser);
                    Message.AppendInt32(3);
                    Message.AppendString(Page.Text1);
                    Message.AppendString(Page.Text2);
                    Message.AppendString(Page.TextDetails);
                    break;
                case "recycler_info":
                    Message.AppendString(Page.Layout);
                    Message.AppendInt32(2);
                    Message.AppendString(Page.LayoutHeadline);
                    Message.AppendString(Page.LayoutTeaser);
                    Message.AppendInt32(3);
                    Message.AppendString(Page.Text1);
                    Message.AppendString(Page.Text2);
                    Message.AppendString(Page.TextDetails);
                    break;
                case "recycler_prizes":
                    Message.AppendString("recycler_prizes");
                    Message.AppendInt32(1);
                    Message.AppendString("catalog_recycler_headline3");
                    Message.AppendInt32(1);
                    Message.AppendString(Page.Text1);
                    break;
                case "spaces_new":
                case "spaces":
                    Message.AppendString("spaces_new");
                    Message.AppendInt32(1);
                    Message.AppendString(Page.LayoutHeadline);
                    Message.AppendInt32(1);
                    Message.AppendString(Page.Text1);
                    break;
                case "recycler":
                    Message.AppendString(Page.Layout);
                    Message.AppendInt32(2);
                    Message.AppendString(Page.LayoutHeadline);
                    Message.AppendString(Page.LayoutTeaser);
                    Message.AppendInt32(1);
                    Message.AppendString(Page.Text1);
                    Message.AppendInt32(-1);
                    Message.AppendBoolean(false);
                    break;

                case "trophies":
                    Message.AppendString("trophies");
                    Message.AppendInt32(1);
                    Message.AppendString(Page.LayoutHeadline);
                    Message.AppendInt32(2);
                    Message.AppendString(Page.Text1);
                    Message.AppendString(Page.TextDetails);
                    break;

                case "pets":
                case "pets2":
                case "pets3":
                    Message.AppendString(Page.Layout);
                    Message.AppendInt32(2);
                    Message.AppendString(Page.LayoutHeadline);
                    Message.AppendString(Page.LayoutTeaser);
                    Message.AppendInt32(4);
                    Message.AppendString(Page.Text1);
                    Message.AppendString(Page.Text2);
                    Message.AppendString(Page.TextDetails);
                    Message.AppendString(Page.TextTeaser);
                    break;

                case "soundmachine":
                    Message.AppendString(Page.Layout);
                    Message.AppendInt32(2);
                    Message.AppendString(Page.LayoutHeadline);
                    Message.AppendString(Page.LayoutTeaser);
                    Message.AppendInt32(2);
                    Message.AppendString(Page.Text1);
                    Message.AppendString(Page.TextDetails);
                    break;
                case "vip_buy":
                    Message.AppendString(Page.Layout);
                    Message.AppendInt32(2);
                    Message.AppendString(Page.LayoutHeadline);
                    Message.AppendString(Page.LayoutTeaser);
                    Message.AppendInt32(0);
                    break;

                case "guild_custom_furni":
                    Message.AppendString("guild_custom_furni");
                    Message.AppendInt32(3);
                    Message.AppendString(Page.LayoutHeadline);
                    Message.AppendString("");
                    Message.AppendString("");
                    Message.AppendInt32(3);
                    Message.AppendString(Page.Text1);
                    Message.AppendString(Page.TextDetails);
                    Message.AppendString(Page.Text2);
                    break;

                case "guild_frontpage":
                    Message.AppendString("guild_frontpage");
                    Message.AppendInt32(2);
                    Message.AppendString(Page.LayoutHeadline);
                    Message.AppendString(Page.LayoutTeaser);
                    Message.AppendInt32(3);
                    Message.AppendString(Page.Text1);
                    Message.AppendString(Page.TextDetails);
                    Message.AppendString(Page.Text2);
                    break;

                case "guild_forum":
                    Message.AppendString("guild_forum");
                    Message.AppendInt32(0);
                    Message.AppendInt32(2);
                    Message.AppendString(Page.Text1);
                    Message.AppendString(Page.Text2);
                    break;

                case "club_gifts":
                    Message.AppendString("club_gifts");
                    Message.AppendInt32(1);
                    Message.AppendString(Page.LayoutHeadline);
                    Message.AppendInt32(1);
                    Message.AppendString(Page.Text1);
                    break;

                default:
                case "default_3x3":
                    Message.AppendString(Page.Layout);
                    Message.AppendInt32(3);
                    Message.AppendString(Page.LayoutHeadline);
                    Message.AppendString(Page.LayoutTeaser);
                    Message.AppendString(Page.LayoutSpecial);
                    Message.AppendInt32(3);
                    Message.AppendString(Page.Text1);
                    Message.AppendString(Page.TextDetails);
                    Message.AppendString(Page.TextTeaser);
                    break;
            }

            if (Page.Layout.StartsWith("frontpage") || Page.Layout == "vip_buy")
            {
                Message.AppendInt32(0);
            }
            else
            {
                Message.AppendInt32(Page.Items.Count);
                foreach (CatalogItem Item in Page.Items.Values)
                {
                    ComposeItem(Item, Message);
                }
            }
                

            Message.AppendInt32(-1);
            Message.AppendBoolean(false);

            return Message;
        }