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; }
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); }
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; }
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); } }
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; }
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; }
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; }
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; }
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); }
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 { } }
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()); } }
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); }
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; } }
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; }
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; } }
internal static ServerMessage Compose() { ServerMessage serverMessage = new ServerMessage(Outgoing.QuestAbortedMessageComposer); serverMessage.AppendBoolean(false); return serverMessage; }
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()); } }
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; }
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; }
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); } }
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; }
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); } }
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(); }
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; }
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; }
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 }
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; }