internal void Searialize(ServerMessage reply) { reply.AppendInt32(userID); reply.AppendString(username); reply.AppendString(motto); bool Online = (FirewindEnvironment.GetGame().GetClientManager().GetClientByUserID(userID) != null); reply.AppendBoolean(Online); reply.AppendBoolean(false); reply.AppendString(string.Empty); reply.AppendInt32(0); reply.AppendString(look); reply.AppendString(last_online); }
internal void SendResponseWithOwnerParam() { if (!isDestroyed && Response != null && Response.Id > 0 && Session.GetConnection() != null) { //Logging.WriteLine("SENDED [" + Response.Id + "] => " + Response.ToString().Replace(Convert.ToChar(0).ToString(), "{char0}")); Response.AppendBoolean(Session.GetHabbo().CurrentRoom.CheckRights(Session, true)); Session.GetConnection().SendData(Response.GetBytes()); } }
internal void SerializeFloor(ServerMessage Message, Boolean Inventory) { Message.AppendUInt(Id); Message.AppendString(mBaseItem.Type.ToString().ToUpper()); Message.AppendUInt(Id); Message.AppendInt32(GetBaseItem().SpriteId); Message.AppendInt32(Extra); // extra Message.AppendInt32(Data.GetTypeID()); Data.AppendToMessage(Message); Message.AppendBoolean(GetBaseItem().AllowRecycle); Message.AppendBoolean(GetBaseItem().AllowTrade); Message.AppendBoolean(GetBaseItem().AllowInventoryStack); Message.AppendBoolean(Marketplace.CanSellItem(this)); Message.AppendInt32(-1); Message.AppendString(""); Message.AppendInt32(0); }
internal static ServerMessage SerializeUpdate(MessengerBuddy friend) { ServerMessage reply = new ServerMessage(Outgoing.FriendUpdate); reply.AppendInt32(0); // category reply.AppendInt32(1); // number of updates reply.AppendInt32(0); // don't know friend.Serialize(reply); reply.AppendBoolean(false); return reply; }
internal static ServerMessage Compose(GameClient Session, List<Achievement> Achievements) { ServerMessage Message = new ServerMessage(Outgoing.AchievementList); //436 Message.AppendInt32(Achievements.Count); foreach (Achievement Achievement in Achievements) { UserAchievement UserData = Session.GetHabbo().GetAchievementData(Achievement.GroupName); int TargetLevel = (UserData != null ? UserData.Level + 1 : 1); int TotalLevels = Achievement.Levels.Count; if (TargetLevel > TotalLevels) { TargetLevel = TotalLevels; } AchievementLevel TargetLevelData = Achievement.Levels[TargetLevel]; Message.AppendUInt(Achievement.Id); // Unknown (ID?) Message.AppendInt32(TargetLevel); // Target level Message.AppendString(Achievement.GroupName + TargetLevel); // Target name/desc/badge Message.AppendInt32(TargetLevelData.Requirement); // Progress req/target Message.AppendInt32(TargetLevelData.RewardPixels); // Pixel reward Message.AppendInt32(TargetLevelData.RewardPoints); // Unknown(??) Message.AppendInt32(0); Message.AppendInt32(UserData != null ? UserData.Progress : 0); // Current progress Message.AppendBoolean(UserData != null ? (UserData.Level >= TotalLevels) : false); // Set 100% completed(??) Message.AppendString(Achievement.Category); // Category Message.AppendString(String.Empty); Message.AppendInt32(TotalLevels); // Total amount of levels Message.AppendInt32(0); } Message.AppendBoolean(false); Message.AppendBoolean(false); return Message; }
internal static ServerMessage Compose(Achievement Achievement, int TargetLevel, AchievementLevel TargetLevelData, int TotalLevels, UserAchievement UserData) { ServerMessage Message = new ServerMessage(Outgoing.AchievementProgress); Message.AppendUInt(Achievement.Id); // Unknown (ID?) Message.AppendInt32(TargetLevel); // Target level Message.AppendString(Achievement.GroupName + TargetLevel); // Target name/desc/badge Message.AppendInt32(TargetLevelData.Requirement); // Progress req/target Message.AppendInt32(TargetLevelData.RewardPixels); // Pixel reward Message.AppendInt32(TargetLevelData.RewardPoints); // Unknown(??) Message.AppendInt32(0); // ? Message.AppendInt32(UserData != null ? UserData.Progress : 0); // Current progress Message.AppendBoolean(UserData != null ? (UserData.Level >= TotalLevels) : false); // Set 100% completed(??) Message.AppendString(Achievement.Category); // Category Message.AppendString(String.Empty); Message.AppendInt32(TotalLevels); // Total amount of levels Message.AppendInt32(0); return Message; }
internal void UpdateTradeWindow() { ServerMessage Message = new ServerMessage(Outgoing.TradeUpdate); for (int i = 0; i < Users.Length; i++) { TradeUser User = Users[i]; if (User == null) continue; lock (User.OfferedItems) { Message.AppendInt32(User.UserId); Message.AppendInt32(User.OfferedItems.Count); foreach (UserItem Item in User.OfferedItems) { Message.AppendUInt(Item.Id); Message.AppendString(Item.GetBaseItem().Type.ToString().ToLower()); Message.AppendUInt(Item.Id); Message.AppendInt32(Item.GetBaseItem().SpriteId); Message.AppendInt32(0); // undef Message.AppendBoolean(true); Message.AppendInt32(0); Message.AppendString(""); Message.AppendInt32(0); // xmas 09 furni had a special furni tag here, with wired day (wat?) Message.AppendInt32(0); // xmas 09 furni had a special furni tag here, wired month (wat?) Message.AppendInt32(0); // xmas 09 furni had a special furni tag here, wired year (wat?) if (Item.GetBaseItem().Type == 's') { Message.AppendInt32(0); } } } } SendMessageToUsers(Message); }
internal ServerMessage SerializeSearchResults(string SearchQuery) { bool OwnerOnly = SearchQuery.StartsWith("owner:"); DataTable Data = new DataTable(); using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { if (SearchQuery.Length > 0) { if (OwnerOnly) // search for owner { dbClient.setQuery("SELECT rooms.*, room_active.active_users FROM rooms LEFT JOIN room_active ON (room_active.roomid = rooms.id) WHERE owner = @query " + "UNION ALL " + "SELECT rooms.*, room_active.active_users FROM rooms LEFT JOIN room_active ON (room_active.roomid = rooms.id) WHERE caption = @query " + "ORDER BY active_users DESC LIMIT 50"); } dbClient.setQuery("SELECT rooms.*, room_active.active_users FROM rooms LEFT JOIN room_active ON (room_active.roomid = rooms.id) WHERE owner = @query " + "UNION ALL " + "SELECT rooms.*, room_active.active_users FROM rooms LEFT JOIN room_active ON (room_active.roomid = rooms.id) WHERE caption = @query " + "ORDER BY active_users DESC LIMIT 50"); if (OwnerOnly) dbClient.addParameter("query", SearchQuery.Substring(SearchQuery.IndexOf(':') + 1)); else dbClient.addParameter("query", SearchQuery); Data = dbClient.getTable(); } } List<RoomData> Results = new List<RoomData>(); if (Data != null) { foreach (DataRow Row in Data.Rows) { RoomData RData = FirewindEnvironment.GetGame().GetRoomManager().FetchRoomData(Convert.ToUInt32(Row["id"]), Row); Results.Add(RData); } } ServerMessage Message = new ServerMessage(Outgoing.NavigatorPacket); Message.AppendInt32(8); Message.AppendString(SearchQuery); Message.AppendInt32(Results.Count); int i = 0; foreach (RoomData Room in Results) { Room.Serialize(Message, false); } Message.AppendBoolean(false); return Message; }
private void SerializeNavigatorRooms(ref ServerMessage reply, List<RoomData> rooms) { reply.AppendString(""); reply.AppendInt32(rooms.Count); bool headerSerialized = false; foreach (RoomData data in rooms) { data.Serialize(reply, false); } reply.AppendBoolean(false); //if (PublicRecommended.Count > 0) //{ // reply.AppendString(""); // foreach (PublicItem Pub in PublicRecommended.Values) // { // Pub.Serialize(reply); // } //} }
internal static ServerMessage Compose(GameClient Session, List<Quest> Quests, bool Send) { Dictionary<string, int> UserQuestGoals = new Dictionary<string, int>(); Dictionary<string, Quest> UserQuests = new Dictionary<string, Quest>(); foreach (Quest Quest in Quests) { if (!UserQuestGoals.ContainsKey(Quest.Category)) { UserQuestGoals.Add(Quest.Category, 1); UserQuests.Add(Quest.Category, null); } if (Quest.Number >= UserQuestGoals[Quest.Category]) { int UserProgress = Session.GetHabbo().GetQuestProgress(Quest.Id); if (Session.GetHabbo().CurrentQuestId != Quest.Id && UserProgress >= Quest.GoalData) { UserQuestGoals[Quest.Category] = Quest.Number + 1; } } } foreach (Quest Quest in Quests) { foreach (KeyValuePair<string, int> Goal in UserQuestGoals) { if (Quest.Category == Goal.Key && Quest.Number == Goal.Value) { UserQuests[Goal.Key] = Quest; break; } } } ServerMessage Message = new ServerMessage(800); Message.AppendInt32(UserQuests.Count); // Active ones first foreach (KeyValuePair<string, Quest> UserQuest in UserQuests) { if (UserQuest.Value == null) { continue; } SerializeQuest(Message, Session, UserQuest.Value, UserQuest.Key); } // Dead ones last foreach (KeyValuePair<string, Quest> UserQuest in UserQuests) { if (UserQuest.Value != null) { continue; } SerializeQuest(Message, Session, UserQuest.Value, UserQuest.Key); } Message.AppendBoolean(Send); return Message; }
internal void SendGroupList() { List<Group> groups = FirewindEnvironment.GetGame().GetGroupManager().GetGroups(this.Groups); ServerMessage message = new ServerMessage(Outgoing.OwnGuilds); message.AppendInt32(groups.Count); // count foreach (Group group in groups) { message.AppendInt32(group.ID); // groupId message.AppendString(group.Name); // groupName message.AppendString(group.BadgeCode); // badge message.AppendString(group.Color1); // color 1 message.AppendString(group.Color2); // color 2 message.AppendBoolean(true); // favourite } GetClient().SendMessage(message); }
internal override bool OnTrigger(GameClient Session, RoomItem Item, int Request, bool UserHasRights) { if (Session == null || Item == null) return false; if (!UserHasRights) return false; String ExtraInfo = ""; List<RoomItem> items = new List<RoomItem>(); using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { try { dbClient.setQuery("SELECT trigger_data FROM trigger_item WHERE trigger_id = @id "); dbClient.addParameter("id", (int)Item.Id); ExtraInfo = dbClient.getString(); } catch { } try { dbClient.setQuery("SELECT triggers_item FROM trigger_in_place WHERE original_trigger = @id"); dbClient.addParameter("id", (int)Item.Id); DataTable dTable = dbClient.getTable(); RoomItem targetItem; foreach (DataRow dRows in dTable.Rows) { targetItem = Item.GetRoom().GetRoomItemHandler().GetItem(Convert.ToUInt32(dRows[0])); if (targetItem == null || items.Contains(targetItem)) continue; items.Add(targetItem); } } catch { } } switch (Item.GetBaseItem().InteractionType) { #region Triggers case InteractionType.triggerwalkonfurni: { ServerMessage message = new ServerMessage(Outgoing.WiredEffect); message.AppendBoolean(false); // stuffTypeSelectionEnabled message.AppendInt32(5); // furniLimit message.AppendInt32(items.Count); //stuffIds foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); // stuffTypeId message.AppendUInt(Item.Id); // id message.AppendString(ExtraInfo); // stringParam message.AppendInt32(0); // intParams message.AppendInt32(8); // type message.AppendInt32(0); // delayInPulses message.AppendInt32(0); // conflictingTriggers message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.triggergamestart: { ServerMessage message = new ServerMessage(Outgoing.WiredFurniTrigger); message.AppendBoolean(false); message.AppendInt32(0); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(8); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.triggerroomenter: { ServerMessage message = new ServerMessage(Outgoing.WiredFurniTrigger); message.AppendBoolean(false); message.AppendInt32(0); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(7); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.triggergameend: { ServerMessage message = new ServerMessage(Outgoing.WiredFurniTrigger); message.AppendBoolean(false); message.AppendInt32(0); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(8); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.triggertimer: { ServerMessage message = new ServerMessage(Outgoing.WiredFurniTrigger); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(1); message.AppendInt32(1); message.AppendInt32(1); message.AppendInt32(3); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.triggerwalkofffurni: { ServerMessage message = new ServerMessage(Outgoing.WiredFurniTrigger); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(0); message.AppendInt32(8); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.triggeronusersay: { ServerMessage message = new ServerMessage(Outgoing.WiredFurniTrigger); message.AppendBoolean(false); message.AppendInt32(0); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.triggerscoreachieved: { ServerMessage message = new ServerMessage(Outgoing.WiredFurniTrigger); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(1); message.AppendInt32(100); message.AppendInt32(0); message.AppendInt32(10); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.triggerrepeater: { ServerMessage message = new ServerMessage(Outgoing.WiredFurniTrigger); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(1); message.AppendInt32(10); message.AppendInt32(0); message.AppendInt32(6); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.triggerstatechanged: { ServerMessage message = new ServerMessage(Outgoing.WiredFurniTrigger); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(0); message.AppendInt32(8); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } #endregion #region Effects case InteractionType.actionposreset: { ServerMessage message = new ServerMessage(Outgoing.WiredEffect); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.actiongivescore: { ServerMessage message = new ServerMessage(Outgoing.WiredEffect); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(2); message.AppendInt32(5); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(6); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.actionresettimer: { ServerMessage message = new ServerMessage(Outgoing.WiredEffect); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.actiontogglestate: { ServerMessage message = new ServerMessage(Outgoing.WiredEffect); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(0); message.AppendInt32(8); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.actionshowmessage: { ServerMessage message = new ServerMessage(Outgoing.WiredEffect); message.AppendBoolean(false); message.AppendInt32(0); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(7); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.actionteleportto: { ServerMessage message = new ServerMessage(Outgoing.WiredEffect); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(0); message.AppendInt32(8); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.actionmoverotate: { ServerMessage message = new ServerMessage(Outgoing.WiredEffect); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(2); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(4); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } #endregion #region Add-ons case InteractionType.specialrandom: { ServerMessage message = new ServerMessage(Outgoing.WiredEffect); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(0); message.AppendInt32(8); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.specialunseen: { ServerMessage message = new ServerMessage(Outgoing.WiredEffect); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendString(ExtraInfo); message.AppendInt32(0); message.AppendInt32(8); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } #endregion #region Conditions case InteractionType.conditiontimelessthan: case InteractionType.conditiontimemorethan: { ServerMessage message = new ServerMessage(Outgoing.WiredCondition); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); //message.AppendBoolean(false); //message.AppendBoolean(false); //message.AppendInt32(7); //message.AppendBoolean(false); //message.AppendBoolean(false); Session.SendMessage(message); break; } case InteractionType.conditionfurnishaveusers: { ServerMessage message = new ServerMessage(Outgoing.WiredCondition); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(1); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.conditionstatepos: { ServerMessage message = new ServerMessage(Outgoing.WiredCondition); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(1); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } case InteractionType.conditiontriggeronfurni: { ServerMessage message = new ServerMessage(Outgoing.WiredCondition); message.AppendBoolean(false); message.AppendInt32(5); message.AppendInt32(items.Count); foreach (RoomItem item in items) message.AppendUInt(item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); message.AppendInt32(0); Session.SendMessage(message); break; } //Unknown: //2 radio + 5 selct #endregion } return true; }
internal void UpdateUserStatus(RoomUser User, bool cyclegameitems) { try { if (User == null) return; bool isBot = User.IsBot; if (isBot) cyclegameitems = false; if (User.Statusses.ContainsKey("lay") || User.Statusses.ContainsKey("sit")) { User.Statusses.Remove("lay"); User.Statusses.Remove("sit"); User.UpdateNeeded = true; } if (User.Statusses.ContainsKey("sign")) { User.Statusses.Remove("sign"); User.UpdateNeeded = true; } //List<RoomItem> ItemsOnSquare = GetFurniObjects(User.X, User.Y); CoordItemSearch ItemSearch = new CoordItemSearch(room.GetGameMap().CoordinatedItems); List<RoomItem> ItemsOnSquare = ItemSearch.GetAllRoomItemForSquare(User.X, User.Y); double newZ; if (User.isMounted == true && User.IsPet == false) { newZ = room.GetGameMap().SqAbsoluteHeight(User.X, User.Y, ItemsOnSquare) + 1; } else { newZ = room.GetGameMap().SqAbsoluteHeight(User.X, User.Y, ItemsOnSquare); } if (newZ != User.Z) { User.Z = newZ; if (User.isFlying) User.Z += 4 + (0.5 * Math.Sin(0.7 * User.flyk)); User.UpdateNeeded = true; } DynamicRoomModel Model = room.GetGameMap().Model; if (Model.SqState[User.X, User.Y] == SquareState.SEAT || User.sentadoBol == true || User.acostadoBol == true) { if (User.sentadoBol == true) { if (!User.Statusses.ContainsKey("sit")) { User.Statusses.Add("sit", Convert.ToString(Model.SqFloorHeight[User.X, User.Y] + 0.55).Replace(",", ".")); } User.Z = Model.SqFloorHeight[User.X, User.Y]; User.UpdateNeeded = true; } else if (User.acostadoBol == true) { if (!User.Statusses.ContainsKey("lay")) { User.Statusses.Add("lay", Convert.ToString(Model.SqFloorHeight[User.X, User.Y] + 0.55).Replace(",", ".")); } User.Z = Model.SqFloorHeight[User.X, User.Y]; User.UpdateNeeded = true; } else { if (!User.Statusses.ContainsKey("sit")) { User.Statusses.Add("sit", "1.0"); } User.Z = Model.SqFloorHeight[User.X, User.Y]; if (User.isFlying) User.Z += 4 + (0.5 * Math.Sin(0.7 * User.flyk)); User.RotHead = Model.SqSeatRot[User.X, User.Y]; User.RotBody = Model.SqSeatRot[User.X, User.Y]; User.UpdateNeeded = true; } } foreach (RoomItem Item in ItemsOnSquare) { if (cyclegameitems) { Item.UserWalksOnFurni(User); } if (Item.GetBaseItem().IsSeat) { if (!User.Statusses.ContainsKey("sit")) { User.Statusses.Add("sit", TextHandling.GetString(Item.GetBaseItem().Height)); } User.Z = Item.GetZ; if (User.isFlying) User.Z += 4 + (0.5 * Math.Sin(0.7 * User.flyk)); User.RotHead = Item.Rot; User.RotBody = Item.Rot; User.UpdateNeeded = true; } switch (Item.GetBaseItem().InteractionType) { case InteractionType.bed: { if (!User.Statusses.ContainsKey("lay")) { User.Statusses.Add("lay", TextHandling.GetString(Item.GetBaseItem().Height) + " null"); } User.Z = Item.GetZ; if (User.isFlying) User.Z += 4 + (0.2 * 0.5 * Math.Sin(0.7 * User.flyk)); User.RotHead = Item.Rot; User.RotBody = Item.Rot; User.UpdateNeeded = true; break; } case InteractionType.fbgate: { if (cyclegameitems) { if (User.team != Item.team) User.team = Item.team; else if (User.team == Item.team) User.team = Team.none; if (!string.IsNullOrEmpty(Item.Figure)) { //User = GetUserForSquare(Item.Coordinate.X, Item.Coordinate.Y); if (User != null && !User.IsBot) { if (User.Coordinate == Item.Coordinate) { if (User.GetClient().GetHabbo().Gender != Item.Gender && User.GetClient().GetHabbo().Look != Item.Figure) { User.GetClient().GetHabbo().tempGender = User.GetClient().GetHabbo().Gender; User.GetClient().GetHabbo().tempLook = User.GetClient().GetHabbo().Look; User.GetClient().GetHabbo().Gender = Item.Gender; User.GetClient().GetHabbo().Look = Item.Figure; } else { User.GetClient().GetHabbo().Gender = User.GetClient().GetHabbo().tempGender; User.GetClient().GetHabbo().Look = User.GetClient().GetHabbo().tempLook; } ServerMessage RoomUpdate = new ServerMessage(Outgoing.UpdateUserInformation); RoomUpdate.AppendInt32(User.VirtualId); RoomUpdate.AppendStringWithBreak(User.GetClient().GetHabbo().Look); RoomUpdate.AppendStringWithBreak(User.GetClient().GetHabbo().Gender.ToLower()); RoomUpdate.AppendStringWithBreak(User.GetClient().GetHabbo().Motto); RoomUpdate.AppendInt32(User.GetClient().GetHabbo().AchievementPoints); room.SendMessage(RoomUpdate); } } } } break; } //33: Red //34: Green //35: Blue //36: Yellow case InteractionType.banzaigategreen: case InteractionType.banzaigateblue: case InteractionType.banzaigatered: case InteractionType.banzaigateyellow: { if (cyclegameitems) { int effectID = (int)Item.team + 32; TeamManager t = User.GetClient().GetHabbo().CurrentRoom.GetTeamManagerForBanzai(); AvatarEffectsInventoryComponent efectmanager = User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent(); if (User.team != Item.team) { if (t.CanEnterOnTeam(Item.team)) { if (User.team != Team.none) t.OnUserLeave(User); User.team = Item.team; t.AddUser(User); if (efectmanager.CurrentEffect != effectID) efectmanager.ApplyCustomEffect(effectID); } } else { //usersOnTeam--; t.OnUserLeave(User); if (efectmanager.CurrentEffect == effectID) efectmanager.ApplyCustomEffect(0); User.team = Team.none; } //((StringData)Item.data).Data = usersOnTeam.ToString(); //Item.UpdateState(false, true); } break; } case InteractionType.freezeyellowgate: case InteractionType.freezeredgate: case InteractionType.freezegreengate: case InteractionType.freezebluegate: { if (cyclegameitems) { int effectID = (int)Item.team + 39; TeamManager t = User.GetClient().GetHabbo().CurrentRoom.GetTeamManagerForFreeze(); //int usersOnTeam = 0; //if (((StringData)Item.data).Data != "") //usersOnTeam = int.Parse(((StringData)Item.data).Data); AvatarEffectsInventoryComponent efectmanager = User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent(); if (User.team != Item.team) { if (t.CanEnterOnTeam(Item.team)) { if (User.team != Team.none) t.OnUserLeave(User); User.team = Item.team; t.AddUser(User); if (efectmanager.CurrentEffect != effectID) efectmanager.ApplyCustomEffect(effectID); } } else { //usersOnTeam--; t.OnUserLeave(User); if (efectmanager.CurrentEffect == effectID) efectmanager.ApplyCustomEffect(0); User.team = Team.none; } //((StringData)Item.data).Data = usersOnTeam.ToString(); //Item.UpdateState(false, true); ServerMessage message = new ServerMessage(700); message.AppendBoolean((User.team != Team.none)); User.GetClient().SendMessage(message); } break; } case InteractionType.banzaitele: { room.GetGameItemHandler().onTeleportRoomUserEnter(User, Item); break; } } } if (cyclegameitems) { if (room.GotSoccer()) room.GetSoccer().OnUserWalk(User); if (room.GotBanzai()) room.GetBanzai().OnUserWalk(User); //if (room.GotFreeze()) room.GetFreeze().OnUserWalk(User); } } catch (Exception e) { } }
internal void OnCycle(ref int idleCount) { ToRemove.Clear(); int userCounter = 0; foreach (RoomUser User in UserList.Values) { if (!isValid(User)) { if (User.GetClient() != null) RemoveUserFromRoom(User.GetClient(), false, false); else RemoveRoomUser(User); } bool updated = false; User.IdleTime++; if (!User.IsAsleep && User.IdleTime >= 600) { User.IsAsleep = true; ServerMessage FallAsleep = new ServerMessage(Outgoing.IdleStatus); FallAsleep.AppendInt32(User.VirtualId); FallAsleep.AppendBoolean(true); room.SendMessage(FallAsleep); } if (User.NeedsAutokick && !ToRemove.Contains(User)) { ToRemove.Add(User); continue; } if (User.CarryItemID > 0) { User.CarryTimer--; if (User.CarryTimer <= 0) User.CarryItem(0); } if (room.GotFreeze()) { room.GetFreeze().CycleUser(User); } if (User.isFlying) User.OnFly(); if (User.SetStep) { if (room.GetGameMap().CanWalk(User.SetX, User.SetY, User.AllowOverride)||User.isMounted==true) { room.GetGameMap().UpdateUserMovement(new Point(User.Coordinate.X, User.Coordinate.Y), new Point(User.SetX, User.SetY), User); List<RoomItem> items = room.GetGameMap().GetCoordinatedItems(new Point(User.X, User.Y)); User.X = User.SetX; User.Y = User.SetY; User.Z = User.SetZ; if (User.isFlying) User.Z += 4 + 0.5 * Math.Sin(0.7 * User.flyk); lock (items) { foreach (RoomItem item in items) { item.UserWalksOffFurni(User); } } if (User.X == room.GetGameMap().Model.DoorX && User.Y == room.GetGameMap().Model.DoorY && !ToRemove.Contains(User) && !User.IsBot) { ToRemove.Add(User); continue; } UpdateUserStatus(User, true); } User.SetStep = false; } if (User.IsWalking && !User.Freezed) { Gamemap map = room.GetGameMap(); SquarePoint Point = DreamPathfinder.GetNextStep(User.X, User.Y, User.GoalX, User.GoalY, map.GameMap, map.ItemHeightMap, map.Model.MapSizeX, map.Model.MapSizeY, User.AllowOverride, map.DiagonalEnabled); if (Point.X == User.X && Point.Y == User.Y) //No path found, or reached goal (: { User.IsWalking = false; User.RemoveStatus("mv"); UpdateUserStatus(User, false); if (User.isMounted == true && User.IsPet == false) { RoomUser mascotaVinculada = GetRoomUserByVirtualId(Convert.ToInt32(User.mountID)); mascotaVinculada.IsWalking = false; mascotaVinculada.RemoveStatus("mv"); ServerMessage mess = new ServerMessage(Outgoing.UserUpdate); mess.AppendInt32(1); mascotaVinculada.SerializeStatus(mess, ""); User.GetClient().GetHabbo().CurrentRoom.SendMessage(mess); } } else { int nextX = Point.X; int nextY = Point.Y; User.RemoveStatus("mv"); double nextZ = room.GetGameMap().SqAbsoluteHeight(nextX, nextY); User.Statusses.Remove("lay"); User.Statusses.Remove("sit"); string user = ""; string mascote = ""; if (!User.isFlying) { if (User.isMounted == true&&User.IsPet==false) { RoomUser mascotaVinculada = GetRoomUserByVirtualId(Convert.ToInt32(User.mountID)); user = ("mv " + nextX + "," + nextY + "," + TextHandling.GetString(nextZ + 1)); User.AddStatus("mv", + nextX + "," + nextY + "," + TextHandling.GetString(nextZ + 1)); mascote = ("mv "+ nextX + "," + nextY + "," + TextHandling.GetString(nextZ)); //Logging.WriteLine("Se handleo movimiento en la mascota id: " + GetRoomUserByVirtualId(Convert.ToInt32(User.montandoID)).InternalRoomID); } else { User.AddStatus("mv", nextX + "," + nextY + "," + TextHandling.GetString(nextZ)); } /** if (User.montandoBol == true) { GetRoomUserByVirtualId(Convert.ToInt32(User.montandoID)).MoveTo(User.GoalX, User.GoalY,true); User.MoveTo(User.GoalX, User.GoalY); GetRoomUserByVirtualId(Convert.ToInt32(User.montandoID)).AllowOverride = true; Logging.WriteLine("Se handleo movimiento en la mascota id: " + GetRoomUserByVirtualId(Convert.ToInt32(User.montandoID)).InternalRoomID); } */ } else { User.AddStatus("mv", nextX + "," + nextY + "," + TextHandling.GetString(nextZ + 4 + (0.5 * Math.Sin(0.7 * User.flyk)))); } int newRot = Rotation.Calculate(User.X, User.Y, nextX, nextY, User.moonwalkEnabled); User.RotBody = newRot; User.RotHead = newRot; User.SetStep = true; User.SetX = nextX; User.SetY = nextY; User.SetZ = nextZ; UpdateUserEffect(User, User.SetX, User.SetY); updated = true; room.GetGameMap().GameMap[User.X, User.Y] = User.SqState; // REstore the old one User.SqState = room.GetGameMap().GameMap[User.SetX, User.SetY];//Backup the new one if (User.sentadoBol == true) User.sentadoBol = false; if (User.acostadoBol == true) User.acostadoBol = false; if (User.isMounted == true&&User.IsPet==false) { //Logging.WriteLine("Montaje"); RoomUser mascotaVinculada = GetRoomUserByVirtualId(Convert.ToInt32(User.mountID)); // Temp fix for crash // TODO: Remove the saddle effect if (mascotaVinculada == null) { User.mountID = 0; User.isMounted = false; continue; } mascotaVinculada.RotBody = newRot; mascotaVinculada.RotHead = newRot; mascotaVinculada.SetStep = true; mascotaVinculada.SetX = nextX; mascotaVinculada.SetY = nextY; mascotaVinculada.SetZ = nextZ; UpdateUserEffect(mascotaVinculada, mascotaVinculada.SetX, mascotaVinculada.SetY); updated = true; ServerMessage mess = new ServerMessage(Outgoing.UserUpdate); mess.AppendInt32(2); User.SerializeStatus(mess, user); mascotaVinculada.SerializeStatus(mess, mascote); User.GetClient().GetHabbo().CurrentRoom.SendMessage(mess); UpdateUserEffect(User, User.SetX, User.SetY); //mascotaVinculada.UpdateNeeded = true; } if (!room.AllowWalkthrough) room.GetGameMap().GameMap[nextX, nextY] = 0; } if (!User.isMounted) User.UpdateNeeded = true; } else { if (User.Statusses.ContainsKey("mv")) { User.RemoveStatus("mv"); User.UpdateNeeded = true; } } if (User.IsBot) User.BotAI.OnTimerTick(); else { userCounter++; } if (!updated) UpdateUserEffect(User, User.X, User.Y); } if (userCounter == 0) idleCount++; foreach (RoomUser toRemove in ToRemove) { GameClient client = FirewindEnvironment.GetGame().GetClientManager().GetClientByUserID(toRemove.HabboId); if (client != null) { RemoveUserFromRoom(client, true, false); client.CurrentRoomUserID = -1; } else RemoveRoomUser(toRemove); } if (userCount != userCounter) { UpdateUserCount(userCounter); } }
//internal void Serialize(ServerMessage Message) //{ // Message.AppendUInt(Id); // Message.AppendInt32(0); // if (mBaseItem == null) // Logging.LogException("Unknown base: " + BaseItem); // Message.AppendString(mBaseItem.Type.ToString().ToUpper()); // Message.AppendUInt(Id); // Message.AppendInt32(mBaseItem.SpriteId); // if (mBaseItem.Name.Contains("a2")) // Message.AppendInt32(3); // else if (mBaseItem.Name.Contains("wallpaper")) // Message.AppendInt32(2); // else if (mBaseItem.Name.Contains("landscape")) // Message.AppendInt32(4); // else // Message.AppendInt32(0); // Message.AppendString(ExtraData); // Message.AppendBoolean(mBaseItem.AllowRecycle); // Message.AppendBoolean(mBaseItem.AllowTrade); // Message.AppendBoolean(mBaseItem.AllowInventoryStack); // Message.AppendBoolean(Marketplace.CanSellItem(this)); // Message.AppendInt32(-1); // if (mBaseItem.Type == 's') // { // Message.AppendString(""); // Message.AppendInt32(-1); // } //} internal void SerializeWall(ServerMessage Message, Boolean Inventory) { Message.AppendUInt(Id); Message.AppendString(mBaseItem.Type.ToString().ToUpper()); Message.AppendUInt(Id); Message.AppendInt32(GetBaseItem().SpriteId); if (GetBaseItem().Name.Contains("a2")) { Message.AppendInt32(3); } else if (GetBaseItem().Name.Contains("wallpaper")) { Message.AppendInt32(2); } else if (GetBaseItem().Name.Contains("landscape")) { Message.AppendInt32(4); } else { Message.AppendInt32(1); } int result = 0; //if (this.GetBaseItem().InteractionType == InteractionType.gift && ExtraData.Contains(Convert.ToChar(5).ToString())) //{ // int color = int.Parse(ExtraData.Split((char)5)[1]); // int lazo = int.Parse(ExtraData.Split((char)5)[2]); // result = color * 1000 + lazo; //} Message.AppendInt32(result); Message.AppendString(Data.ToString()); Message.AppendBoolean(GetBaseItem().AllowRecycle); Message.AppendBoolean(GetBaseItem().AllowTrade); Message.AppendBoolean(GetBaseItem().AllowInventoryStack); Message.AppendBoolean(Marketplace.CanSellItem(this)); Message.AppendInt32(-1); }
private void SerializeNavigatorRooms(ref ServerMessage reply, KeyValuePair<RoomData, int>[] rooms) { reply.AppendString(string.Empty); reply.AppendInt32(rooms.Length); foreach (KeyValuePair<RoomData,int> pair in rooms) { pair.Key.Serialize(reply, false); } reply.AppendBoolean(false); //if (PublicRecommended.Count > 0) //{ // reply.AppendString(""); // foreach (PublicItem Pub in PublicRecommended.Values) // { // Pub.Serialize(reply); // } //} }
internal override void OnCycle() { base.OnCycle(); if (!IsValidUser()) { if (GetClient() != null) GetRoom().GetRoomUserManager().RemoveUserFromRoom(GetClient(), false, false); else GetRoom().GetRoomUserManager().RemoveRoomUnit(this); } if (IsWalking && IsAsleep) // Unidle! Unidle(); IdleTime++; if (!IsAsleep && IdleTime >= 600) { IsAsleep = true; ServerMessage FallAsleep = new ServerMessage(Outgoing.IdleStatus); FallAsleep.AppendInt32(VirtualID); FallAsleep.AppendBoolean(true); GetRoom().SendMessage(FallAsleep); } // TODO: Re-add idle kicking if (CarryItemID > 0) { CarryTimer--; if (CarryTimer <= 0) CarryItem(0); } }
internal void Unidle() { this.IdleTime = 0; if (this.IsAsleep) { this.IsAsleep = false; ServerMessage Message = new ServerMessage(Outgoing.IdleStatus); Message.AppendInt32(VirtualID); Message.AppendBoolean(false); GetRoom().SendMessage(Message); } }
internal ServerMessage SerializeIndexForCache(int rank) { //ServerMessage Index = new ServerMessage(126); //Index.AppendBoolean(false); //Index.AppendInt32(0); //Index.AppendInt32(0); //Index.AppendInt32(-1); //Index.AppendString(""); //Index.AppendBoolean(false); ServerMessage Index = new ServerMessage(Outgoing.OpenShop); //Fix for r61 Index.AppendBoolean(true); Index.AppendInt32(0); Index.AppendInt32(0); Index.AppendInt32(-1); Index.AppendString("root"); Index.AppendString(""); Index.AppendInt32(GetTreeSize(rank, -1)); foreach (CatalogPage Page in Pages.Values) { if (Page.ParentId != -1 || Page.MinRank > rank) continue; Page.Serialize(rank, Index); foreach (CatalogPage _Page in Pages.Values) { if (_Page.ParentId != Page.PageId) continue; _Page.Serialize(rank, Index); } } Index.AppendBoolean(false); // is updated return Index; }
internal void Serialize(ServerMessage reply) { reply.AppendInt32(Convert.ToInt32(this.UserId)); reply.AppendString(this.mUsername); reply.AppendInt32(1); bool isOnline = this.IsOnline; reply.AppendBoolean(isOnline); if (isOnline) { reply.AppendBoolean(this.InRoom); } else { reply.AppendBoolean(false); } reply.AppendString(this.mLook); reply.AppendInt32(0); reply.AppendString(this.mMotto); reply.AppendInt32(0); reply.AppendBoolean(false); }
internal void HandlePurchase(GameClient Session, int PageId, uint ItemId, string extraParameter, int buyAmount, Boolean IsGift, string GiftUser, string GiftMessage, int GiftSpriteId, int GiftLazo, int GiftColor, bool giftShowIdentity) { int finalAmount = buyAmount; if (buyAmount > 5) // Possible discount! { // Nearest number that increases the amount of free items int nearestDiscount = ((int)Math.Floor(buyAmount / 6.0) * 6); // How many free ones we get int freeItemsCount = (nearestDiscount - 3) / 3; // Add 1 free if more than 42 if (buyAmount >= 42) freeItemsCount++; // Doesn't follow rules as it isn't dividable by 6, but still increases free items if (buyAmount >= 99) { freeItemsCount = 33; } // This is how many we pay for in the end finalAmount = buyAmount - freeItemsCount; } //Logging.WriteLine("Amount: " + priceAmount + "; withOffer= " + finalAmount); CatalogPage Page; if (!Pages.TryGetValue(PageId, out Page)) return; if (Page == null || !Page.Enabled || !Page.Visible || Session == null || Session.GetHabbo() == null) { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } if (Page.ClubOnly && !Session.GetHabbo().GetSubscriptionManager().HasSubscription("habbo_club") && !Session.GetHabbo().GetSubscriptionManager().HasSubscription("habbo_vip")) { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } if (Page.MinRank > Session.GetHabbo().Rank) { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } CatalogItem Item = Page.GetItem(ItemId); if (Item == null) // TODO: Check item minimum club rank { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } if (!Item.HaveOffer && buyAmount > 1) // Check if somebody is bulk-buying when not allowed { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } if (Item.IsLimited && Item.LimitedStack <= Item.LimitedSelled) { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } uint GiftUserId = 0; //int giftWrappingCost = 0; if (IsGift) { if(!Item.AllowGift) { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } if(Item.Items.Count > 1 || Item.Amount > 1) // Gifts can only have 1 item? { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } DataRow dRow; using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("SELECT id FROM users WHERE username = @gift_user"); dbClient.addParameter("gift_user", GiftUser); dRow = dbClient.getRow(); } if (dRow == null) { Session.GetMessageHandler().GetResponse().Init(Outgoing.GiftError); Session.GetMessageHandler().GetResponse().AppendString(GiftUser); Session.GetMessageHandler().SendResponse(); return; } GiftUserId = Convert.ToUInt32(dRow[0]); if (GiftUserId == 0) { Session.GetMessageHandler().GetResponse().Init(Outgoing.GiftError); Session.GetMessageHandler().GetResponse().AppendString(GiftUser); Session.GetMessageHandler().SendResponse(); return; } } Boolean CreditsError = false; Boolean PixelError = false; Boolean CrystalError = false; if (Session.GetHabbo().Credits < (Item.CreditsCost * finalAmount)) { CreditsError = true; } if (Session.GetHabbo().VipPoints < (Item.CrystalCost * finalAmount)) { CrystalError = true; } if (Session.GetHabbo().ActivityPoints < (Item.PixelsCost * finalAmount)) { PixelError = true; } if (CreditsError || PixelError) { ServerMessage message = new ServerMessage(Outgoing.NotEnoughBalance); message.AppendBoolean(CreditsError); message.AppendBoolean(PixelError); Session.SendMessage(message); return; } if (Item.CrystalCost > 0) { int cost = Item.CrystalCost * finalAmount; if (Session.GetHabbo().VipPoints < cost) { Session.SendNotif("You can't afford that item!"); Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } Session.GetHabbo().VipPoints -= cost; Session.GetHabbo().UpdateActivityPointsBalance(true); using (IQueryAdapter adapter = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { adapter.runFastQuery("UPDATE users SET vip_points = " + Session.GetHabbo().VipPoints + " WHERE id = " + Session.GetHabbo().Id); } } if (Item.CreditsCost > 0 && !IsGift) { Session.GetHabbo().Credits -= (Item.CreditsCost * finalAmount); Session.GetHabbo().UpdateCreditsBalance(); } if (Item.PixelsCost > 0 && !IsGift) { Session.GetHabbo().ActivityPoints -= (Item.PixelsCost * finalAmount); Session.GetHabbo().UpdateActivityPointsBalance(true); } // Item is purchased, now do post-proccessing if (Item.IsLimited) { Item.LimitedSelled++; using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("UPDATE catalog_items SET limited_sells = " + Item.LimitedSelled + " WHERE id = " + Item.Id); } Page.InitMsg(); // update page! // send update Session.SendMessage(Page.GetMessage); } foreach (uint i in Item.Items) { //Logging.WriteLine(Item.GetBaseItem().ItemId); //Logging.WriteLine(Item.GetBaseItem().InteractionType.ToLower()); // Extra Data is _NOT_ filtered at this point and MUST BE VERIFIED BELOW: if (Item.GetBaseItem(i).Type == 'h') // Subscription { int Months = 0; int Days = 0; if (Item.Name.Contains("HABBO_CLUB_VIP_")) { if (Item.Name.Contains("_DAY")) { Days = int.Parse(Item.Name.Split('_')[3]); } else if (Item.Name.Contains("_MONTH")) { Months = int.Parse(Item.Name.Split('_')[3]); Days = 31 * Months; } } else if (Item.Name.Equals("deal_vip_1_year_and_badge")) { Months = 12; Days = 31 * Months; } else if (Item.Name.Equals("HABBO_CLUB_VIP_5_YEAR")) { Months = 5 * 12; Days = 31 * Months; } else if (Item.Name.StartsWith("DEAL_HC_")) { Months = int.Parse(Item.Name.Split('_')[2]); Days = 31 * Months; Session.GetHabbo().GetSubscriptionManager().AddOrExtendSubscription("habbo_club", Days * 24 * 3600); Session.GetHabbo().SerializeClub(); return; } Session.GetHabbo().GetSubscriptionManager().AddOrExtendSubscription("habbo_vip", Days * 24 * 3600); Session.GetHabbo().SerializeClub(); return; } if (IsGift && Item.GetBaseItem(i).Type == 'e') { Session.SendNotif(LanguageLocale.GetValue("catalog.gift.send.error")); return; } IRoomItemData itemData = new StringData(extraParameter); switch (Item.GetBaseItem(i).InteractionType) { case InteractionType.none: //itemData = new StringData(extraParameter); break; case InteractionType.musicdisc: itemData = new StringData(Item.songID.ToString()); break; #region Pet handling case InteractionType.pet: try { string[] Bits = extraParameter.Split('\n'); string PetName = Bits[0]; string Race = Bits[1]; string Color = Bits[2]; int.Parse(Race); // to trigger any possible errors if (!CheckPetName(PetName)) { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } //if (Race.Length != 1) // return; if (Color.Length != 6) { Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } } catch (Exception e) { Logging.WriteLine(e.ToString()); Logging.HandleException(e, "Catalog.HandlePurchase"); Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } break; #endregion case InteractionType.roomeffect: Double Number = 0; try { if (string.IsNullOrEmpty(extraParameter)) Number = 0; else Number = Double.Parse(extraParameter, FirewindEnvironment.cultureInfo); } catch (Exception e) { Logging.HandleException(e, "Catalog.HandlePurchase: " + extraParameter); } itemData = new StringData(Number.ToString().Replace(',', '.')); break; // maintain extra data // todo: validate case InteractionType.postit: itemData = new StringData("FFFF33"); break; case InteractionType.dimmer: itemData = new StringData("1,1,1,#000000,255"); break; case InteractionType.trophy: itemData = new StringData(String.Format("{0}\t{1}\t{2}", Session.GetHabbo().Username, DateTime.Now.ToString("d-M-yyy"), extraParameter)); break; //case InteractionType.mannequin: // MapStuffData data = new MapStuffData(); // data.Data.Add("OUTFIT_NAME", ""); // data.Data.Add("FIGURE", ""); // data.Data.Add("GENDER", ""); // itemData = data; // break; default: //itemData = new StringData(extraParameter); break; } //Session.GetMessageHandler().GetResponse().Init(Outgoing.UpdateInventary); //Session.GetMessageHandler().SendResponse(); Session.GetMessageHandler().GetResponse().Init(Outgoing.PurchaseOK); // PurchaseOKMessageEvent Item.Serialize(Session.GetMessageHandler().GetResponse()); Session.GetMessageHandler().SendResponse(); if (IsGift) { uint itemID; //uint GenId = GenerateItemId(); Item Present = FirewindEnvironment.GetGame().GetItemManager().GetItemBySpriteID(GiftSpriteId); if (Present == null) { Logging.LogDebug(string.Format("Somebody tried to purchase a present with invalid sprite ID: {0}", GiftSpriteId)); Session.SendMessage(new ServerMessage(Outgoing.PurchaseError)); return; } MapStuffData giftData = new MapStuffData(); if (giftShowIdentity) { giftData.Data.Add("PURCHASER_NAME", Session.GetHabbo().Username); giftData.Data.Add("PURCHASER_FIGURE", Session.GetHabbo().Look); } giftData.Data.Add("MESSAGE", GiftMessage); giftData.Data.Add("PRODUCT_CODE", "10"); giftData.Data.Add("EXTRA_PARAM", "test"); giftData.Data.Add("state", "1"); using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("INSERT INTO items (base_id) VALUES (" + Present.ItemId + ")"); itemID = (uint)dbClient.insertQuery(); dbClient.runFastQuery("INSERT INTO items_users VALUES (" + itemID + "," + GiftUserId + ")"); if (!string.IsNullOrEmpty(GiftMessage)) { dbClient.setQuery("INSERT INTO items_extradata VALUES (" + itemID + ",@datatype,@data,@extra)"); dbClient.addParameter("datatype", giftData.GetTypeID()); dbClient.addParameter("data", giftData.ToString()); dbClient.addParameter("extra", GiftColor * 1000 + GiftLazo); dbClient.runQuery(); } dbClient.setQuery("INSERT INTO user_presents (item_id,base_id,amount,extra_data) VALUES (" + itemID + "," + Item.GetBaseItem(i).ItemId + "," + Item.Amount + ",@extra_data)"); dbClient.addParameter("extra_data", itemData.ToString()); dbClient.runQuery(); } GameClient Receiver = FirewindEnvironment.GetGame().GetClientManager().GetClientByUserID(GiftUserId); if (Receiver != null) { Receiver.SendNotif(LanguageLocale.GetValue("catalog.gift.received") + Session.GetHabbo().Username); UserItem u = Receiver.GetHabbo().GetInventoryComponent().AddNewItem(itemID, Present.ItemId, giftData, GiftColor * 1000 + GiftLazo, false, false, 0); Receiver.GetHabbo().GetInventoryComponent().SendFloorInventoryUpdate(); Receiver.GetMessageHandler().GetResponse().Init(Outgoing.UnseenItems); Receiver.GetMessageHandler().GetResponse().AppendInt32(1); // items Receiver.GetMessageHandler().GetResponse().AppendInt32(1); // type (gift) == s Receiver.GetMessageHandler().GetResponse().AppendInt32(1); Receiver.GetMessageHandler().GetResponse().AppendUInt(u.Id); Receiver.GetMessageHandler().SendResponse(); InventoryComponent targetInventory = Receiver.GetHabbo().GetInventoryComponent(); if (targetInventory != null) targetInventory.RunDBUpdate(); } Session.SendNotif(LanguageLocale.GetValue("catalog.gift.sent")); } else { List<UserItem> items = DeliverItems(Session, Item.GetBaseItem(i), (buyAmount * Item.Amount), itemData.ToString(), Item.songID); int Type = 2; if (Item.GetBaseItem(i).Type.ToString().ToLower().Equals("s")) { if (Item.GetBaseItem(i).InteractionType == InteractionType.pet) Type = 3; else Type = 1; } Session.GetMessageHandler().GetResponse().Init(Outgoing.UnseenItems); Session.GetMessageHandler().GetResponse().AppendInt32(1); // items Session.GetMessageHandler().GetResponse().AppendInt32(Type); Session.GetMessageHandler().GetResponse().AppendInt32(items.Count); foreach (UserItem u in items) Session.GetMessageHandler().GetResponse().AppendUInt(u.Id); Session.GetMessageHandler().SendResponse(); //Logging.WriteLine("Purchased " + items.Count); Session.GetHabbo().GetInventoryComponent().UpdateItems(false); if (Item.GetBaseItem(i).InteractionType == InteractionType.pet) { Session.SendMessage(Session.GetHabbo().GetInventoryComponent().SerializePetInventory()); } } } }
internal void SerializeClub() { GameClient Client = GetClient(); ServerMessage club = new ServerMessage(Outgoing.SerializeClub); club.AppendString("club_habbo"); if (GetSubscriptionManager().HasSubscription("habbo_vip")) { Double Expire = GetSubscriptionManager().GetSubscription("habbo_vip").ExpireTime; Double TimeLeft = Expire - FirewindEnvironment.GetUnixTimestamp(); int TotalDaysLeft = (int)Math.Ceiling(TimeLeft / 86400); int MonthsLeft = TotalDaysLeft / 31; if (MonthsLeft >= 1) MonthsLeft--; club.AppendInt32(TotalDaysLeft - (MonthsLeft * 31)); club.AppendInt32(2); // ?? club.AppendInt32(MonthsLeft); club.AppendInt32(1); // type club.AppendBoolean(true); club.AppendBoolean(true); club.AppendInt32(0); club.AppendInt32(0); // days i have on hc club.AppendInt32(0); // days i have on vip } else { club.AppendInt32(0); club.AppendInt32(0); // ?? club.AppendInt32(0); club.AppendInt32(0); // type club.AppendBoolean(false); club.AppendBoolean(true); club.AppendInt32(0); club.AppendInt32(0); // days i have on hc club.AppendInt32(0); // days i have on vip } Client.SendMessage(club); ServerMessage fuserights = new ServerMessage(Outgoing.Fuserights); if (GetSubscriptionManager().HasSubscription("habbo_vip")) // VIP fuserights.AppendInt32(2); else if (GetSubscriptionManager().HasSubscription("habbo_club")) // HC fuserights.AppendInt32(1); else fuserights.AppendInt32(0); fuserights.AppendUInt(Rank); Client.SendMessage(fuserights); }
internal static ServerMessage SerializePage(CatalogPage Page) { ServerMessage PageData = new ServerMessage(Outgoing.OpenShopPage); PageData.AppendInt32(Page.PageId); switch (Page.Layout) { case "frontpage": PageData.AppendString("frontpage3"); PageData.AppendInt32(2); //for (int i = 0; i < 3; i++) //{ // PageData.AppendString("catalog_club_headline1"); //} //PageData.AppendInt32(7); //for (int i = 0; i < 7; i++) //{ // PageData.AppendString("#FEFEFE"); //} PageData.AppendString("Bundles_ts"); PageData.AppendString(""); PageData.AppendInt32(11); PageData.AppendString(""); PageData.AppendString(""); PageData.AppendString(""); PageData.AppendString("How to get Habbo Credits"); PageData.AppendString("You can get Habbo Credits via Prepaid Cards, Home Phone, Credit Card, Mobile, completing offers and more! " + Convert.ToChar(13) + Convert.ToChar(10) + Convert.ToChar(13) + Convert.ToChar(10) + "To redeem your Habbo Credits, enter your voucher code below."); PageData.AppendString(Page.TextDetails); PageData.AppendString(""); PageData.AppendString("#FEFEFE"); PageData.AppendString("#FEFEFE"); PageData.AppendString(LanguageLocale.GetValue("catalog.waystogetcredits")); PageData.AppendString("credits"); break; case "recycler_info": PageData.AppendString(Page.Layout); PageData.AppendInt32(2); PageData.AppendString(Page.LayoutHeadline); PageData.AppendString(Page.LayoutTeaser); PageData.AppendInt32(3); PageData.AppendString(Page.Text1); PageData.AppendString(Page.Text2); PageData.AppendString(Page.TextDetails); break; case "recycler_prizes": // Ac@aArecycler_prizesIcatalog_recycler_headline3IDe Ecotron geeft altijd een van deze beloningen:H PageData.AppendString("recycler_prizes"); PageData.AppendInt32(1); PageData.AppendString("catalog_recycler_headline3"); PageData.AppendInt32(1); PageData.AppendString(Page.Text1); break; case "spaces_new": PageData.AppendString(Page.Layout); PageData.AppendInt32(1); PageData.AppendString(Page.LayoutHeadline); PageData.AppendInt32(1); PageData.AppendString(Page.Text1); break; case "recycler": PageData.AppendString(Page.Layout); PageData.AppendInt32(2); PageData.AppendString(Page.LayoutHeadline); PageData.AppendString(Page.LayoutTeaser); PageData.AppendInt32(1); PageData.AppendStringWithBreak(Page.Text1, 10); PageData.AppendString(Page.Text2); PageData.AppendString(Page.TextDetails); break; case "trophies": PageData.AppendString("trophies"); PageData.AppendInt32(1); PageData.AppendString(Page.LayoutHeadline); PageData.AppendInt32(2); PageData.AppendString(Page.Text1); PageData.AppendString(Page.TextDetails); break; case "pets": PageData.AppendString("pets"); PageData.AppendInt32(2); PageData.AppendString(Page.LayoutHeadline); PageData.AppendString(Page.LayoutTeaser); PageData.AppendInt32(4); PageData.AppendString(Page.Text1); PageData.AppendString(LanguageLocale.GetValue("catalog.pickname")); PageData.AppendString(LanguageLocale.GetValue("catalog.pickcolor")); PageData.AppendString(LanguageLocale.GetValue("catalog.pickrace")); break; case "soundmachine": PageData.AppendString(Page.Layout); PageData.AppendInt32(2); PageData.AppendString(Page.LayoutHeadline); PageData.AppendString(Page.LayoutTeaser); PageData.AppendInt32(2); PageData.AppendString(Page.Text1); PageData.AppendString(Page.TextDetails); break; case "club_buy": PageData.AppendString("vip_buy"); // layout PageData.AppendInt32(2); PageData.AppendString("ctlg_buy_vip_header"); PageData.AppendString("ctlg_gift_vip_teaser"); PageData.AppendInt32(0); break; case "guild_frontpage": PageData.AppendString(Page.Layout); PageData.AppendInt32(2); PageData.AppendString("catalog_groups_en"); PageData.AppendString(""); PageData.AppendInt32(3); PageData.AppendString(Page.LayoutTeaser); PageData.AppendString(Page.LayoutSpecial); PageData.AppendString(Page.Text1); break; default: PageData.AppendString(Page.Layout); PageData.AppendInt32(3); PageData.AppendString(Page.LayoutHeadline); PageData.AppendString(Page.LayoutTeaser); PageData.AppendString(Page.LayoutSpecial); PageData.AppendInt32(3); PageData.AppendString(Page.Text1); PageData.AppendString(Page.TextDetails); PageData.AppendString(Page.TextTeaser); break; } if (!Page.Layout.Equals("frontpage") && !Page.Layout.Equals("club_buy")) { PageData.AppendInt32(Page.Items.Count); //if (Page.Layout == "trophies") // We have to order descending here! foreach (CatalogItem Item in Page.Items.Values) { Item.Serialize(PageData); } } else PageData.AppendInt32(0); PageData.AppendInt32(-1); PageData.AppendBoolean(false); return PageData; }
internal static void SerializeQuest(ServerMessage Message, GameClient Session, Quest Quest, string Category) { int AmountInCat = FirewindEnvironment.GetGame().GetQuestManager().GetAmountOfQuestsInCategory(Category); int Number = Quest == null ? AmountInCat : Quest.Number - 1; int UserProgress = Quest == null ? 0 : Session.GetHabbo().GetQuestProgress(Quest.Id); if (Quest != null && Quest.IsCompleted(UserProgress)) { Number++; } Message.AppendString(Category); Message.AppendInt32(Number); // Quest progress in this cat Message.AppendInt32(AmountInCat); // Total quests in this cat Message.AppendInt32((int)QuestRewardType.Pixels); // Reward type (1 = Snowflakes, 2 = Love hearts, 3 = Pixels, 4 = Seashells, everything else is pixels Message.AppendUInt(Quest == null ? 0 : Quest.Id); // Quest id Message.AppendBoolean(Quest == null ? false : Session.GetHabbo().CurrentQuestId == Quest.Id); // Quest started 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(UserProgress); // Current progress Message.AppendUInt(Quest == null ? 0 : Quest.GoalData); // Target progress Message.AppendInt32(0); // "Next quest available countdown" in seconds }
internal bool tryLogin(string AuthTicket) { int loginProgress = 0; try { string ip = GetConnection().getIp(); byte errorCode = 0; UserData userData = UserDataFactory.GetUserData(AuthTicket, ip, out errorCode); if (errorCode == 1) { SendNotifWithScroll(LanguageLocale.GetValue("login.invalidsso")); return false; } else if (errorCode == 2) { SendNotifWithScroll(LanguageLocale.GetValue("login.loggedin")); return false; } loginProgress++; FirewindEnvironment.GetGame().GetClientManager().RegisterClient(this, userData.userID, userData.user.Username); this.Habbo = userData.user; userData.user.LoadData(userData); loginProgress++; if (userData.user.Username == null) { SendBanMessage("You have no username."); return false; } string banReason = FirewindEnvironment.GetGame().GetBanManager().GetBanReason(userData.user.Username, ip); loginProgress++; if (!string.IsNullOrEmpty(banReason)) { SendBanMessage(banReason); return false; } userData.user.Init(this, userData); QueuedServerMessage response = new QueuedServerMessage(Connection); ServerMessage UniqueId = new ServerMessage(Outgoing.UniqueID); UniqueId.AppendString(this.MachineId); response.appendResponse(UniqueId); ServerMessage authok = new ServerMessage(Outgoing.AuthenticationOK); response.appendResponse(authok); ServerMessage HomeRoom = new ServerMessage(Outgoing.HomeRoom); HomeRoom.AppendUInt(this.GetHabbo().HomeRoom); // first home HomeRoom.AppendUInt(this.GetHabbo().HomeRoom); // first home SendMessage(HomeRoom); loginProgress++; ServerMessage FavouriteRooms = new ServerMessage(Outgoing.FavouriteRooms); FavouriteRooms.AppendInt32(30); // max rooms FavouriteRooms.AppendInt32(userData.user.FavoriteRooms.Count); foreach (uint Id in userData.user.FavoriteRooms.ToArray()) { FavouriteRooms.AppendUInt(Id); } response.appendResponse(FavouriteRooms); loginProgress++; ServerMessage fuserights = new ServerMessage(Outgoing.Fuserights); if (GetHabbo().GetSubscriptionManager().HasSubscription("habbo_vip")) // VIP fuserights.AppendInt32(2); else if (GetHabbo().GetSubscriptionManager().HasSubscription("habbo_club")) // HC fuserights.AppendInt32(1); else fuserights.AppendInt32(0); fuserights.AppendUInt(this.GetHabbo().Rank); response.appendResponse(fuserights); loginProgress++; ServerMessage bools1 = new ServerMessage(Outgoing.AvailabilityStatus); bools1.AppendBoolean(true); bools1.AppendBoolean(false); response.appendResponse(bools1); ServerMessage bools2 = new ServerMessage(Outgoing.InfoFeedEnable); bools2.AppendBoolean(false); response.appendResponse(bools2); loginProgress++; ServerMessage setRanking = new ServerMessage(Outgoing.SerializeCompetitionWinners); setRanking.AppendString("hlatCompetitions"); // competition type setRanking.AppendInt32(Ranking.getCompetitionForInfo("hlatCompetitions").Count); loginProgress++; int i = 0; foreach (Ranking r in Ranking.getCompetitionForInfo("hlatCompetitions")) { i++; setRanking.AppendUInt(r.UserId); Habbo data = FirewindEnvironment.getHabboForId(r.UserId); setRanking.AppendString((data != null) ? data.Username : "******"); setRanking.AppendString((data != null) ? data.Look : "sh-907-96.hd-3096-3.he-3082-91.lg-3018-81.ch-660-95.hr-9534-34"); setRanking.AppendInt32(i); // position setRanking.AppendInt32(r.Score); } response.appendResponse(setRanking); loginProgress++; if (userData.user.HasFuse("fuse_mod")) { this.SendMessage(FirewindEnvironment.GetGame().GetModerationTool().SerializeTool()); FirewindEnvironment.GetGame().GetModerationTool().SerializeOpenTickets(ref response, userData.userID); } if (LanguageLocale.welcomeAlertEnabled) { this.SendMOTD(LanguageLocale.welcomeAlert); } loginProgress++; using (IQueryAdapter db = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) { db.setQuery("UPDATE users SET online = '1' WHERE id = @id"); db.addParameter("id", this.GetHabbo().Id); db.runQuery(); } loginProgress++; // Send the big chunk response.sendResponse(); // fire the event! FirewindEnvironment.GetGame().GetClientManager().ClientLoggedIn(this); return true; } catch (UserDataNotFoundException e) { SendNotifWithScroll(LanguageLocale.GetValue("login.invalidsso") + "extra data: " + e.ToString()); } catch (Exception e) { Logging.LogCriticalException(String.Format("Invalid Dario bug duing user login (progress = {0}): ", loginProgress) + e.ToString()); SendNotifWithScroll("Login error: " + e.ToString()); } return false; }
internal void Serialize(ServerMessage Message, Boolean ShowEvents) { Message.AppendUInt(Id); if (Event == null || !ShowEvents) { Message.AppendBoolean(false); Message.AppendString(Name); Message.AppendBoolean(Owner != ""); Message.AppendInt32(OwnerId); Message.AppendString(Owner); Message.AppendInt32(State); // room state Message.AppendInt32(UsersNow); Message.AppendInt32(UsersMax); Message.AppendString(Description); Message.AppendInt32(0); // dunno! Message.AppendInt32(2); // can trade? Message.AppendInt32(Score); Message.AppendInt32(Category); Message.AppendInt32(Group != null ? Group.ID : 0); // group id Message.AppendString(Group != null ? Group.Name : ""); // group name Message.AppendString(Group != null ? Group.BadgeCode : ""); // group image //Message.AppendInt32(1); //Message.AppendString("GRP"); //Message.AppendString(""); Message.AppendString(""); // ??? Message.AppendInt32(TagCount); foreach (string Tag in Tags) { Message.AppendString(Tag); } } else { Message.AppendBoolean(true); Message.AppendString(Event.Name); Message.AppendString(Owner); Message.AppendInt32(State); Message.AppendInt32(UsersNow); Message.AppendInt32(UsersMax); Message.AppendString(Event.Description); Message.AppendBoolean(true); Message.AppendBoolean(true); Message.AppendInt32(Score); Message.AppendInt32(Event.Category); Message.AppendString(Event.StartTime); Message.AppendInt32(Event.Tags.Count); foreach (string Tag in Event.Tags.ToArray()) { Message.AppendString(Tag); } } Message.AppendInt32(0); Message.AppendInt32(0); Message.AppendInt32(0); Message.AppendBoolean(true); Message.AppendBoolean(true); }
private void SerializeNavigatorPopularRooms(ref ServerMessage reply, KeyValuePair<RoomData, int>[] rooms, int Category) { reply.AppendInt32(rooms.Length); int i = 0; foreach (KeyValuePair<RoomData, int> pair in rooms) { RoomData data = pair.Key; if (data.Category.Equals(Category)) { data.Serialize(reply, false); i++; } else continue; } //Logging.WriteLine("Rooms in this category: " + i); reply.setInt(i, 8 + Category.ToString().Length); reply.AppendBoolean(false); }
internal void FlushSettings() { List<ServerMessage> messages = new List<ServerMessage>(); lock (GetRoomItemHandler().mFloorItems) { foreach (RoomItem Item in GetRoomItemHandler().mFloorItems.Values) { ServerMessage Message = new ServerMessage(94); Message.AppendRawUInt(Item.Id); Message.AppendStringWithBreak(""); Message.AppendBoolean(false); messages.Add(Message); } } lock (GetRoomItemHandler().mWallItems) { foreach (RoomItem Item in GetRoomItemHandler().mWallItems.Values) { ServerMessage Message = new ServerMessage(84); Message.AppendRawUInt(Item.Id); Message.AppendStringWithBreak(""); Message.AppendBoolean(false); messages.Add(Message); } } SendMessage(messages); mCycleEnded = true; using (IQueryAdapter dbClient = FirewindEnvironment.GetDatabaseManager().getQueryreactor()) GetRoomItemHandler().SaveFurniture(dbClient); Tags.Clear(); UsersWithRights.Clear(); Bans.Clear(); ActiveTrades.Clear(); if (GotFreeze()) freeze = new Freeze(this); if (GotBanzai()) banzai = new BattleBanzai(this); if (GotSoccer()) soccer = new Soccer(this); if (gameItemHandler != null) gameItemHandler = new GameItemHandler(this); }
internal void SendGroupList() { List<Group> groups = FirewindEnvironment.GetGame().GetGroupManager().GetMemberships(Id); ServerMessage message = new ServerMessage(Outgoing.HabboGroupsWhereMember); message.AppendInt32(groups.Count); // count foreach (Group group in groups) { message.AppendInt32(group.ID); // groupId message.AppendString(group.Name); // groupName message.AppendString(group.BadgeCode); // badge message.AppendString(group.Color1); // color 1 message.AppendString(group.Color2); // color 2 message.AppendBoolean(group.ID == FavouriteGroup); // favourite } GetClient().SendMessage(message); }
internal void massaction() { Room currentRoom = Session.GetHabbo().CurrentRoom; if (currentRoom != null) { if (currentRoom.Owner == Session.GetHabbo().Username && Session.GetHabbo().Rank >= 4) { string action = Params[1]; int ActionId = 0; switch(action) { case "wave": ActionId = 1; break; case "kiss": ActionId = 2; break; case "laugh": ActionId = 3; break; case "sleep": ActionId = 5; break; default: Session.SendNotif(":massaction wave\n:massaction kiss\n:massaction laugh\n:massaction sleep"); return; } List<RoomUser> roomUsers = currentRoom.GetRoomUserManager().GetRoomUsers(); foreach (RoomUser user in roomUsers) { user.DanceId = 0; ServerMessage message = new ServerMessage(Outgoing.Action); message.AppendInt32(user.VirtualId); message.AppendInt32(ActionId); currentRoom.SendMessage(message); if (ActionId == 5) { user.IsAsleep = true; ServerMessage message2 = new ServerMessage(Outgoing.IdleStatus); message2.AppendInt32(user.VirtualId); message2.AppendBoolean(user.IsAsleep); currentRoom.SendMessage(message2); } } } } }
internal void AddPet(Pet Pet) { isUpdated = false; if (Pet == null || InventoryPets.ContainsKey(Pet.PetId)) return; Pet.PlacedInRoom = false; Pet.RoomId = 0; InventoryPets.Add(Pet.PetId, Pet); //using (DatabaseClient dbClient = FirewindEnvironment.GetDatabase().GetClient()) //{ // dbClient.addParameter("botid", Pet.PetId); // dbClient.runFastQuery("UPDATE user_pets SET room_id = 0, x = 0, y = 0, z = 0 WHERE id = @botid LIMIT 1"); //} ServerMessage AddMessage = new ServerMessage(Outgoing.PetAddedToInventory); Pet.SerializeInventory(AddMessage); AddMessage.AppendBoolean(true); // ??? GetClient().SendMessage(AddMessage); //UpdatePets(false); }