internal Trade(UInt32 UserOneId, UInt32 UserTwoId, UInt32 RoomId) { this.oneId = UserOneId; this.twoId = UserTwoId; this.Users = new TradeUser[2]; this.Users[0] = new TradeUser(UserOneId, RoomId); this.Users[1] = new TradeUser(UserTwoId, RoomId); this.TradeStage = 1; this.RoomId = RoomId; foreach (TradeUser User in Users) { if (!User.GetRoomUser().Statusses.ContainsKey("trd")) { User.GetRoomUser().AddStatus("trd", ""); User.GetRoomUser().UpdateNeeded = true; } } ServerMessage Message = new ServerMessage(104); Message.AppendUInt(UserOneId); Message.AppendBoolean(true); Message.AppendUInt(UserTwoId); Message.AppendBoolean(true); SendMessageToUsers(Message); }
internal static ServerMessage Compose(GameClient Session, List<Achievement> Achievements) { ServerMessage Message = new ServerMessage(436); //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.AppendStringWithBreak(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(UserData != null ? UserData.Progress : 0); // Current progress Message.AppendBoolean(UserData != null ? (UserData.Level >= TotalLevels) : false); // Set 100% completed(??) Message.AppendStringWithBreak(Achievement.Category); // Category Message.AppendInt32(TotalLevels); // Total amount of levels } return Message; }
internal static ServerMessage SerializeSearchResults(string Query) { DataTable Results = null; using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { if (dbClient.dbType == Pici.Storage.Database.DatabaseType.MySQL) dbClient.setQuery("SELECT id,title FROM help_topics WHERE title LIKE @query OR body LIKE @query LIMIT 25"); else dbClient.setQuery("SELECT TOP 25 id,title FROM help_topics WHERE title LIKE @query OR body LIKE @query"); dbClient.addParameter("query", Query + "%"); Results = dbClient.getTable(); } // HII[KBCan I pay to be unbanned? ServerMessage Search = new ServerMessage(521); if (Results == null) { Search.AppendBoolean(false); return Search; } Search.AppendInt32(Results.Rows.Count); foreach (DataRow Row in Results.Rows) { Search.AppendUInt(Convert.ToUInt32(Row["id"])); Search.AppendStringWithBreak((string)Row["title"]); } return Search; }
internal void SerializeFloor(ServerMessage Message, Boolean Inventory) { Message.AppendUInt(Id); Message.AppendStringWithBreak(mBaseItem.Type.ToString().ToUpper()); Message.AppendUInt(Id); Message.AppendInt32(GetBaseItem().SpriteId); Message.AppendInt32(1); Message.AppendStringWithBreak(ExtraData); Message.AppendBoolean(GetBaseItem().AllowRecycle); Message.AppendBoolean(GetBaseItem().AllowTrade); Message.AppendBoolean(GetBaseItem().AllowInventoryStack); Message.AppendBoolean(Marketplace.CanSellItem(this)); Message.AppendInt32(-1); Message.AppendStringWithBreak(""); Message.AppendInt32(0); }
internal void Searialize(ServerMessage reply) { reply.AppendUInt(userID); reply.AppendStringWithBreak(username); reply.AppendStringWithBreak(motto); bool Online = (PiciEnvironment.GetGame().GetClientManager().GetClient(userID) != null); reply.AppendBoolean(Online); reply.AppendBoolean(false); reply.AppendStringWithBreak(string.Empty); reply.AppendBoolean(false); reply.AppendStringWithBreak(look); reply.AppendStringWithBreak(last_online); reply.AppendStringWithBreak(string.Empty); }
internal static ServerMessage SerializeUpdate(MessengerBuddy friend) { ServerMessage reply = new ServerMessage(13); reply.AppendInt32(0); reply.AppendInt32(1); reply.AppendInt32(0); friend.Serialize(reply); reply.AppendBoolean(false); return reply; }
internal static ServerMessage Compose(Achievement Achievement, int TargetLevel, AchievementLevel TargetLevelData, int TotalLevels, UserAchievement UserData) { ServerMessage Message = new ServerMessage(913); Message.AppendUInt(Achievement.Id); // Unknown (ID?) Message.AppendInt32(TargetLevel); // Target level Message.AppendStringWithBreak(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(UserData != null ? UserData.Progress : 0); // Current progress Message.AppendBoolean(UserData != null ? (UserData.Level >= TotalLevels) : false); // Set 100% completed(??) Message.AppendStringWithBreak(Achievement.Category); // Category Message.AppendInt32(TotalLevels); // Total amount of levels return Message; }
public bool Handle(RoomUser user, Team team, RoomItem item) { if (user != null && !user.IsBot && user.GetClient() != null) { ServerMessage servermsg = new ServerMessage(); servermsg.Init(25); servermsg.AppendInt32(user.VirtualId); servermsg.AppendStringWithBreak(message); servermsg.AppendBoolean(false); user.GetClient().SendMessage(servermsg); handler.OnEvent(itemID); return true; } return false; }
internal List<RoomItem> RemoveAllFurniture(GameClient Session) { List<RoomItem> ReturnList = new List<RoomItem>(); foreach (RoomItem Item in mFloorItems.Values.ToArray()) { Item.Interactor.OnRemove(Session, Item); ServerMessage Message = new ServerMessage(94); Message.AppendRawUInt(Item.Id); Message.AppendStringWithBreak(""); Message.AppendBoolean(false); room.SendMessage(Message); //mFloorItems.Remove(Item.Id); ReturnList.Add(Item); } foreach (RoomItem Item in mWallItems.Values.ToArray()) { Item.Interactor.OnRemove(Session, Item); ServerMessage Message = new ServerMessage(84); Message.AppendRawUInt(Item.Id); Message.AppendStringWithBreak(""); Message.AppendBoolean(false); room.SendMessage(Message); //mWallItems.Remove(Item.Id); ReturnList.Add(Item); } mWallItems.Clear(); mFloorItems.Clear(); mRemovedItems.Clear(); mMovedItems.Clear(); mAddedItems.Clear(); mRollers.QueueDelegate(new onCycleDoneDelegate(ClearRollers)); using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("DELETE FROM items_rooms WHERE room_id = " + room.RoomId); } room.GetGameMap().GenerateMaps(); room.GetRoomUserManager().UpdateUserStatusses(); if (room.GotWired()) { room.GetWiredHandler().OnPickall(); } return ReturnList; }
internal void Serialize(int Rank, ServerMessage Message) { Message.AppendBoolean(Visible); Message.AppendInt32(IconColor); Message.AppendInt32(IconImage); Message.AppendInt32(Id); Message.AppendStringWithBreak(Caption); Message.AppendInt32(PiciEnvironment.GetGame().GetCatalog().GetTreeSize(Rank, Id)); }
internal static void SerializeQuest(ServerMessage Message, GameClient Session, Quest Quest, string Category) { int AmountInCat = PiciEnvironment.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.AppendStringWithBreak(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.AppendStringWithBreak(Quest == null ? string.Empty : Quest.ActionName); Message.AppendStringWithBreak(Quest == null ? string.Empty : Quest.DataBit); Message.AppendInt32(Quest == null ? 0 : Quest.Reward); Message.AppendStringWithBreak(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 void Serialize(ServerMessage Message, Boolean ShowEvents) { Message.AppendUInt(Id); if (Event == null || !ShowEvents) { Message.AppendInt32(0); Message.AppendStringWithBreak(Name); Message.AppendStringWithBreak(Owner); Message.AppendInt32(State); // room state Message.AppendInt32(UsersNow); Message.AppendInt32(UsersMax); Message.AppendStringWithBreak(Description); Message.AppendInt32(0); // dunno! Message.AppendBoolean(true); // can trade? Message.AppendInt32(Score); Message.AppendInt32(Category); Message.AppendStringWithBreak(string.Empty); Message.AppendInt32(TagCount); foreach (string Tag in Tags) { Message.AppendStringWithBreak(Tag); } } else { Message.AppendBoolean(true); Message.AppendStringWithBreak(Event.Name); Message.AppendStringWithBreak(Owner); Message.AppendInt32(State); Message.AppendInt32(UsersNow); Message.AppendInt32(UsersMax); Message.AppendStringWithBreak(Event.Description); Message.AppendBoolean(true); Message.AppendBoolean(true); Message.AppendInt32(Score); Message.AppendInt32(Event.Category); Message.AppendStringWithBreak(Event.StartTime); Message.AppendInt32(Event.Tags.Count); foreach (string Tag in Event.Tags.ToArray()) { Message.AppendStringWithBreak(Tag); } } Icon.Serialize(Message); Message.AppendBoolean(AllowPets); Message.AppendBoolean(AllowPetsEating); }
internal ServerMessage SerializeFriends() { ServerMessage reply = new ServerMessage(12); reply.AppendInt32(600); reply.AppendInt32(200); reply.AppendInt32(600); reply.AppendInt32(900); reply.AppendBoolean(false); reply.AppendInt32(friends.Count); foreach (MessengerBuddy friend in friends.Values) { friend.Serialize(reply); } return reply; }
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(486); 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)) { 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); 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; } if (room.IsPublic) { room.GetGameMap().HandleRoomLinks(User); } 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); } 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"); if (!User.isFlying) User.AddStatus("mv", nextX + "," + nextY + "," + TextHandling.GetString(nextZ)); 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 (!room.AllowWalkthrough) room.GetGameMap().GameMap[nextX, nextY] = 0; } 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 = PiciEnvironment.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.Append(Id); // Message.Append(0); // if (mBaseItem == null) // Logging.LogException("Unknown base: " + BaseItem); // Message.Append(mBaseItem.Type.ToString().ToUpper()); // Message.Append(Id); // Message.Append(mBaseItem.SpriteId); // if (mBaseItem.Name.Contains("a2")) // Message.Append(3); // else if (mBaseItem.Name.Contains("wallpaper")) // Message.Append(2); // else if (mBaseItem.Name.Contains("landscape")) // Message.Append(4); // else // Message.Append(0); // Message.Append(ExtraData); // Message.Append(mBaseItem.AllowRecycle); // Message.Append(mBaseItem.AllowTrade); // Message.Append(mBaseItem.AllowInventoryStack); // Message.Append(Marketplace.CanSellItem(this)); // Message.Append(-1); // if (mBaseItem.Type == 's') // { // Message.Append(""); // Message.Append(-1); // } //} internal void SerializeWall(ServerMessage Message, Boolean Inventory) { Message.AppendUInt(Id); Message.AppendStringWithBreak(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); } Message.AppendStringWithBreak(ExtraData); Message.AppendBoolean(GetBaseItem().AllowRecycle); Message.AppendBoolean(GetBaseItem().AllowTrade); Message.AppendBoolean(GetBaseItem().AllowInventoryStack); Message.AppendBoolean(Marketplace.CanSellItem(this)); Message.AppendInt32(-1); }
internal static ServerMessage SerializeUserChatlog(UInt32 UserId) { GameClient client = PiciEnvironment.GetGame().GetClientManager().GetClientByUserID(UserId); if (client == null || client.GetHabbo() == null) { ServerMessage Message = new ServerMessage(536); Message.AppendUInt(UserId); Message.AppendStringWithBreak("User not online"); Message.AppendInt32(0); return Message; } else { using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("SELECT room_id,entry_timestamp,exit_timestamp FROM user_roomvisits WHERE user_id = " + UserId + " ORDER BY entry_timestamp DESC LIMIT 5"); DataTable Visits = dbClient.getTable(); ServerMessage Message = new ServerMessage(536); Message.AppendUInt(UserId); Message.AppendStringWithBreak(PiciEnvironment.GetGame().GetClientManager().GetNameById(UserId)); if (Visits != null) { Message.AppendInt32(Visits.Rows.Count); foreach (DataRow Visit in Visits.Rows) { if ((Double)Visit["exit_timestamp"] <= 0.0) { Visit["exit_timestamp"] = PiciEnvironment.GetUnixTimestamp(); } dbClient.setQuery("SELECT user_id,user_name,hour,minute,message FROM chatlogs WHERE room_id = " + (uint)Visit["room_id"] + " AND timestamp > " + (Double)Visit["entry_timestamp"] + " AND timestamp < " + (Double)Visit["exit_timestamp"] + " ORDER BY timestamp DESC"); DataTable Chatlogs = dbClient.getTable(); RoomData RoomData = PiciEnvironment.GetGame().GetRoomManager().GenerateNullableRoomData((UInt32)Visit["room_id"]); Message.AppendBoolean(RoomData.IsPublicRoom); Message.AppendUInt(RoomData.Id); Message.AppendStringWithBreak(RoomData.Name); if (Chatlogs != null) { Message.AppendInt32(Chatlogs.Rows.Count); foreach (DataRow Log in Chatlogs.Rows) { Message.AppendInt32((int)Log["hour"]); Message.AppendInt32((int)Log["minute"]); Message.AppendUInt((UInt32)Log["user_id"]); Message.AppendStringWithBreak((string)Log["user_name"]); Message.AppendStringWithBreak((string)Log["message"]); } } else { Message.AppendInt32(0); } } } else { Message.AppendInt32(0); } return Message; } } }
internal override void OnTrigger(GameClient Session, RoomItem Item, int Request, bool UserHasRights) { if (Session == null || Item == null) return; if (!UserHasRights) return; switch (Item.GetBaseItem().InteractionType) { #region Triggers case InteractionType.triggerwalkonfurni: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.triggergamestart: { ServerMessage message = new ServerMessage(650); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.triggerroomenter: { ServerMessage message = new ServerMessage(650); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(7); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.triggergameend: { ServerMessage message = new ServerMessage(650); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.triggertimer: { ServerMessage message = new ServerMessage(650); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(true); message.AppendBoolean(true); message.AppendBoolean(true); message.AppendInt32(3); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.triggerwalkofffurni: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.triggeronusersay: { ServerMessage message = new ServerMessage(650); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); Session.SendMessage(message); break; } case InteractionType.triggerscoreachieved: { ServerMessage message = new ServerMessage(650); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(true); message.AppendInt32(100); message.AppendBoolean(false); message.AppendInt32(10); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.triggerrepeater: { ServerMessage message = new ServerMessage(650); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(true); message.AppendInt32(10); message.AppendBoolean(false); message.AppendInt32(6); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.triggerstatechanged: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } #endregion #region Effects case InteractionType.actionposreset: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(true); message.AppendUInt(Item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); Session.SendMessage(message); break; } case InteractionType.actiongivescore: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendInt32(2); message.AppendInt32(5); message.AppendBoolean(true); message.AppendBoolean(false); message.AppendInt32(6); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.actionresettimer: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(true); message.AppendUInt(Item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); Session.SendMessage(message); break; } case InteractionType.actiontogglestate: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.actionshowmessage: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(7); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.actionteleportto: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.actionmoverotate: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendInt32(2); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendInt32(4); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } #endregion #region Add-ons case InteractionType.specialrandom: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } case InteractionType.specialunseen: { ServerMessage message = new ServerMessage(651); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendByte(2); message.AppendBoolean(false); message.AppendInt32(8); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendByte(2); Session.SendMessage(message); break; } #endregion #region Conditions case InteractionType.conditiontimelessthan: case InteractionType.conditiontimemorethan: { ServerMessage message = new ServerMessage(652); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(true); message.AppendUInt(Item.Id); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); //message.AppendBoolean(false); //message.AppendBoolean(false); //message.AppendInt32(7); //message.AppendBoolean(false); //message.AppendBoolean(false); Session.SendMessage(message); break; } case InteractionType.conditionfurnishaveusers: { ServerMessage message = new ServerMessage(652); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(true); message.AppendBoolean(false); message.AppendBoolean(false); Session.SendMessage(message); break; } case InteractionType.conditionstatepos: { ServerMessage message = new ServerMessage(652); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(true); message.AppendBoolean(false); message.AppendBoolean(false); Session.SendMessage(message); break; } case InteractionType.conditiontriggeronfurni: { ServerMessage message = new ServerMessage(652); message.AppendBoolean(false); message.AppendInt32(5); message.AppendBoolean(false); message.AppendInt32(Item.GetBaseItem().SpriteId); message.AppendUInt(Item.Id); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); message.AppendBoolean(false); Session.SendMessage(message); break; } //Unknown: //2 radio + 5 selct #endregion } }
internal ServerMessage Serialize() { ServerMessage Message = new ServerMessage(460); Message.AppendInt32(Count); foreach (AvatarEffect Effect in Effects.ToArray()) { Message.AppendInt32(Effect.EffectId); Message.AppendInt32(Effect.TotalDuration); Message.AppendBoolean(!Effect.Activated); Message.AppendInt32(Effect.TimeLeft); } return Message; }
internal void OnRespect() { Respect++; ServerMessage Message = new ServerMessage(606); Message.AppendInt32(Respect); Message.AppendUInt(OwnerId); Message.AppendUInt(PetId); Message.AppendStringWithBreak(Name); Message.AppendBoolean(false); Message.AppendInt32(10); Message.AppendBoolean(false); Message.AppendInt32(-2); Message.AppendBoolean(true); Message.AppendStringWithBreak("281"); Room.SendMessage(Message); if (DBState != DatabaseUpdateState.NeedsInsert) DBState = DatabaseUpdateState.NeedsUpdate; if (Expirience <= 51900) { AddExpirience(10); } }
internal ServerMessage SerializeFlatCategories() { ServerMessage Cats = new ServerMessage(221); Cats.AppendInt32(PrivateCategories.Count); foreach (FlatCat FlatCat in PrivateCategories.Values) { Cats.AppendBoolean(true); if (FlatCat.Id != 15) { Cats.AppendInt32(FlatCat.Id); } Cats.AppendStringWithBreak(FlatCat.Caption); } Cats.AppendStringWithBreak(""); return Cats; }
private void RemoveRoomItem(RoomItem Item) { if (Item.IsWallItem) { ServerMessage Message = new ServerMessage(84); Message.AppendRawUInt(Item.Id); Message.AppendStringWithBreak(""); Message.AppendBoolean(false); room.SendMessage(Message); } else if (Item.IsFloorItem) { ServerMessage Message = new ServerMessage(94); Message.AppendRawUInt(Item.Id); Message.AppendStringWithBreak(""); Message.AppendBoolean(false); room.SendMessage(Message); } if (Item.IsWallItem) mWallItems.Remove(Item.Id); else { room.GetGameMap().RemoveFromMap(Item); mFloorItems.Remove(Item.Id); } RemoveItem(Item); room.GetRoomUserManager().UpdateUserStatusses(); if (WiredHandler.TypeIsWire(Item.GetBaseItem().InteractionType)) { room.GetWiredHandler().RemoveWiredItem(Item.Coordinate); } }
internal static ServerMessage SerializeTicketChatlog(SupportTicket Ticket, RoomData RoomData, Double Timestamp) { Room currentRoom = PiciEnvironment.GetGame().GetRoomManager().GetRoom(RoomData.Id); ServerMessage Message = new ServerMessage(534); Message.AppendUInt(Ticket.TicketId); Message.AppendUInt(Ticket.SenderId); Message.AppendUInt(Ticket.ReportedId); Message.AppendBoolean(RoomData.IsPublicRoom); Message.AppendUInt(RoomData.Id); Message.AppendStringWithBreak(RoomData.Name); if (currentRoom == null) { Message.AppendInt32(0); return Message; } else { using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("SELECT user_id,user_name,hour,minute,message FROM chatlogs WHERE room_id = " + RoomData.Id + " AND timestamp >= " + (Timestamp - 300) + " AND timestamp <= " + Timestamp + " ORDER BY timestamp DESC"); DataTable Data = dbClient.getTable(); Message = new ServerMessage(534); Message.AppendUInt(Ticket.TicketId); Message.AppendUInt(Ticket.SenderId); Message.AppendUInt(Ticket.ReportedId); Message.AppendBoolean(RoomData.IsPublicRoom); Message.AppendUInt(RoomData.Id); Message.AppendStringWithBreak(RoomData.Name); if (Data != null) { Message.AppendInt32(Data.Rows.Count); foreach (DataRow Row in Data.Rows) { Message.AppendInt32((int)Row["hour"]); Message.AppendInt32((int)Row["minute"]); Message.AppendUInt((UInt32)Row["user_id"]); Message.AppendStringWithBreak((String)Row["user_name"]); Message.AppendStringWithBreak((String)Row["message"]); } } else { Message.AppendInt32(0); } return Message; } } }
internal static ServerMessage SerializeRoomTool(RoomData Data) { Room Room = PiciEnvironment.GetGame().GetRoomManager().GetRoom(Data.Id); UInt32 OwnerId = 0; using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { try { dbClient.setQuery("SELECT id FROM users WHERE username = @owner"); dbClient.addParameter("owner", Data.Owner); OwnerId = Convert.ToUInt32(dbClient.getRow()[0]); } catch (Exception e) { Logging.HandleException(e, "ModerationTool.SerializeRoomTool"); } } ServerMessage Message = new ServerMessage(538); Message.AppendUInt(Data.Id); Message.AppendInt32(Data.UsersNow); // user count if (Room != null) { Message.AppendBoolean((Room.GetRoomUserManager().GetRoomUserByHabbo(Data.Owner) != null)); } else { Message.AppendBoolean(false); } Message.AppendUInt(OwnerId); Message.AppendStringWithBreak(Data.Owner); Message.AppendUInt(Data.Id); Message.AppendStringWithBreak(Data.Name); Message.AppendStringWithBreak(Data.Description); Message.AppendInt32(Data.TagCount); foreach (string Tag in Data.Tags) { Message.AppendStringWithBreak(Tag); } if (Room != null) { Message.AppendBoolean(Room.HasOngoingEvent); if (Room.Event != null) { Message.AppendStringWithBreak(Room.Event.Name); Message.AppendStringWithBreak(Room.Event.Description); Message.AppendInt32(Room.Event.Tags.Count); foreach (string Tag in Room.Event.Tags.ToArray()) { Message.AppendStringWithBreak(Tag); } } } else { Message.AppendBoolean(false); } return Message; }
internal void Serialize(ServerMessage Message) { if (!Category) { Message.AppendInt32(Id); Message.AppendStringWithBreak((Type == 1) ? Caption : RoomData.Name); Message.AppendStringWithBreak(RoomData.Description); Message.AppendInt32(Type); Message.AppendStringWithBreak(Caption); Message.AppendStringWithBreak((ImageType == PublicImageType.EXTERNAL) ? Image : string.Empty); Message.AppendInt32(ParentId); Message.AppendInt32(RoomData.UsersNow); Message.AppendInt32(3); Message.AppendStringWithBreak((ImageType == PublicImageType.INTERNAL) ? Image : string.Empty); Message.AppendInt32(0); Message.AppendInt32(0); Message.AppendStringWithBreak(RoomData.CCTs); Message.AppendInt32(RoomData.UsersMax); Message.AppendUInt(RoomId); } else if (Category) { Message.AppendInt32(Id); Message.AppendStringWithBreak(Caption); Message.AppendStringWithBreak(string.Empty); Message.AppendBoolean(true); Message.AppendStringWithBreak(string.Empty); Message.AppendStringWithBreak(Image); Message.AppendBoolean(false); Message.AppendBoolean(false); Message.AppendInt32(4); Message.AppendBoolean(false); } }
internal void UpdateUserStatus(RoomUser User, bool cyclegameitems) { 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; } //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 = 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) { 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(266); RoomUpdate.AppendInt32(User.VirtualId); RoomUpdate.AppendStringWithBreak(User.GetClient().GetHabbo().Look); RoomUpdate.AppendStringWithBreak(User.GetClient().GetHabbo().Gender.ToLower()); RoomUpdate.AppendStringWithBreak(User.GetClient().GetHabbo().Motto); 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; AvatarEffectsInventoryComponent efectmanager = User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent(); if (User.team != Item.team) { User.team = Item.team; if (efectmanager.CurrentEffect != effectID) efectmanager.ApplyCustomEffect(effectID); } else { if (efectmanager.CurrentEffect == effectID) efectmanager.ApplyCustomEffect(0); User.team = Team.none; } } break; } case InteractionType.freezeyellowgate: case InteractionType.freezeredgate: case InteractionType.freezegreengate: case InteractionType.freezebluegate: { if (cyclegameitems) { int effectID = (int)Item.team + 39; AvatarEffectsInventoryComponent efectmanager = User.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent(); if (User.team != Item.team) { User.team = Item.team; if (efectmanager.CurrentEffect != effectID) efectmanager.ApplyCustomEffect(effectID); } else { if (efectmanager.CurrentEffect == effectID) efectmanager.ApplyCustomEffect(0); User.team = Team.none; } 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); } }
internal void Serialize(ServerMessage reply) { /* Message.AppendUInt(UserId); Message.AppendStringWithBreak(Username); Message.AppendBoolean(true); Message.AppendBoolean(IsOnline); Message.AppendBoolean(InRoom); Message.AppendStringWithBreak(Look); Message.AppendBoolean(false); Message.AppendStringWithBreak(Motto); Message.AppendStringWithBreak(LastOnline); Message.AppendStringWithBreak(RealName); Message.AppendStringWithBreak(""); */ reply.AppendUInt(UserId); reply.AppendStringWithBreak(mUsername); reply.AppendBoolean(true); bool Online = IsOnline; reply.AppendBoolean(Online); if (Online) reply.AppendBoolean(InRoom); else reply.AppendBoolean(false); reply.AppendStringWithBreak(mLook); reply.AppendBoolean(false); reply.AppendStringWithBreak(mMotto); reply.AppendStringWithBreak(mLastOnline); reply.AppendStringWithBreak(string.Empty); reply.AppendStringWithBreak(string.Empty); }
internal override void OnUserSay(Rooms.RoomUser User, string Message) { if (Gamemap.TileDistance(GetRoomUser().X, GetRoomUser().Y, User.X, User.Y) > 8) { return; } BotResponse Response = GetBotData().GetResponse(Message); if (Response == null) { return; } switch (Response.ResponseType.ToLower()) { case "say": GetRoomUser().Chat(null, Response.ResponseText, false); break; case "shout": GetRoomUser().Chat(null, Response.ResponseText, true); break; case "whisper": ServerMessage TellMsg = new ServerMessage(25); TellMsg.AppendInt32(GetRoomUser().VirtualId); TellMsg.AppendStringWithBreak(Response.ResponseText); TellMsg.AppendBoolean(false); User.GetClient().SendMessage(TellMsg); break; } if (Response.ServeId >= 1) { User.CarryItem(Response.ServeId); } }
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 HandleRowchase(GameClient Session, int PageId, uint ItemId, string ExtraData, Boolean IsGift, string GiftUser, string GiftMessage) { CatalogPage Page; if (!Pages.TryGetValue(PageId, out Page)) return; if (Page == null || Page.ComingSoon || !Page.Enabled || !Page.Visible || Session == null || Session.GetHabbo() == null) { return; } if (Page.ClubOnly && !Session.GetHabbo().GetSubscriptionManager().HasSubscription("habbo_club")) { return; } if (Page.MinRank > Session.GetHabbo().Rank) { return; } CatalogItem Item = Page.GetItem(ItemId); if (Item == null) { return; } uint GiftUserId = 0; if (IsGift) { if (!Item.GetBaseItem().AllowGift) { return; } DataRow dRow; using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("SELECT id FROM users WHERE username = @gift_user"); dbClient.addParameter("gift_user", GiftUser); dRow = dbClient.getRow(); } if (dRow == null) { Session.GetMessageHandler().GetResponse().Init(76); Session.GetMessageHandler().GetResponse().AppendBoolean(true); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(GiftUser); Session.GetMessageHandler().SendResponse(); return; } GiftUserId = Convert.ToUInt32(dRow[0]); if (GiftUserId == 0) { Session.GetMessageHandler().GetResponse().Init(76); Session.GetMessageHandler().GetResponse().AppendBoolean(true); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(GiftUser); Session.GetMessageHandler().SendResponse(); return; } } Boolean CreditsError = false; Boolean PixelError = false; if (Session.GetHabbo().Credits < Item.CreditsCost) { CreditsError = true; } if (Session.GetHabbo().ActivityPoints < Item.PixelsCost) { PixelError = true; } if (CreditsError || PixelError) { Session.GetMessageHandler().GetResponse().Init(68); Session.GetMessageHandler().GetResponse().AppendBoolean(CreditsError); Session.GetMessageHandler().GetResponse().AppendBoolean(PixelError); Session.GetMessageHandler().SendResponse(); return; } if (IsGift && Item.GetBaseItem().Type == 'e') { Session.SendNotif(LanguageLocale.GetValue("catalog.gift.send.error")); return; } if (Item.CrystalCost > 0) { int userCrystals = 0; using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("SELECT crystals FROM users WHERE id = " + Session.GetHabbo().Id); userCrystals = dbClient.getInteger(); } if (Item.CrystalCost > userCrystals) { Session.SendNotif(LanguageLocale.GetValue("catalog.crystalerror") + Item.CrystalCost); return; } userCrystals = userCrystals - Item.CrystalCost; Session.GetMessageHandler().GetResponse().Init(MessageComposerIds.ActivityPointsMessageComposer); Session.GetMessageHandler().GetResponse().AppendInt32(2); Session.GetMessageHandler().GetResponse().AppendInt32(4); Session.GetMessageHandler().GetResponse().AppendInt32(userCrystals); Session.GetMessageHandler().SendResponse(); using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("UPDATE users SET crystals = " + userCrystals + " WHERE id = " + Session.GetHabbo().Id); } Session.SendNotif(LanguageLocale.GetValue("catalog.crystalsbought") + userCrystals); } if (Item.Name.Contains("HABBO_CLUB")) { #region Purchase Club! // PAYmQHABBO_CLUB_BASIC_1_MONTHSCHHISGZvGSBSE[mQHABBO_CLUB_VIP_1_MONTHQFHIISGZvGSBSEXnQHABBO_CLUB_VIP_3_MONTHSPOHIKQW[vGIPFZmQHABBO_CLUB_BASIC_3_MONTHSQKHHKQW[vGIPF int TypeOfClub = 0; Subscription Sub; if (Session.GetHabbo().GetSubscriptionManager().HasSubscription("habbo_vip")) Sub = Session.GetHabbo().GetSubscriptionManager().GetSubscription("habbo_vip"); else if (Session.GetHabbo().GetSubscriptionManager().HasSubscription("habbo_club")) Sub = Session.GetHabbo().GetSubscriptionManager().GetSubscription("habbo_club"); else Sub = null; if (Item.Name == "HABBO_CLUB_BASIC_1_MONTH") { TypeOfClub = 1; } else if (Item.Name.Contains("HABBO_CLUB_BASIC_3")) { TypeOfClub = 2; } else if (Item.Name == "HABBO_CLUB_VIP_1_MONTH") { TypeOfClub = 3; } else if (Item.Name.Contains("HABBO_CLUB_VIP_3")) { TypeOfClub = 4; } else if (Item.Name == "HABBO_CLUB_UPGRADE_1") { TypeOfClub = 5; } else if (Item.Name == "HABBO_CLUB_UPGRADE_3") { TypeOfClub = 6; } if (TypeOfClub == 1) { Session.GetHabbo().GetSubscriptionManager().AddOrExtendSubscription("habbo_club", (60 * 60 * 24 * 31)); ServerMessage FuseRight = new ServerMessage(2); FuseRight.AppendInt32(1); Session.SendMessage(FuseRight); Session.GetMessageHandler().GetSubscriptionData(); } else if (TypeOfClub == 2) { Session.GetHabbo().GetSubscriptionManager().AddOrExtendSubscription("habbo_club", (60 * 60 * 24 * 31 * 3)); ServerMessage FuseRight = new ServerMessage(2); FuseRight.AppendInt32(1); Session.SendMessage(FuseRight); Session.GetMessageHandler().GetSubscriptionData(); } else if (TypeOfClub == 3) { Session.GetHabbo().GetSubscriptionManager().AddOrExtendSubscription("habbo_vip", (60 * 60 * 24 * 31)); ServerMessage FuseRight = new ServerMessage(2); FuseRight.AppendInt32(2); Session.SendMessage(FuseRight); Session.GetMessageHandler().GetSubscriptionData(); } else if (TypeOfClub == 4) { Session.GetHabbo().GetSubscriptionManager().AddOrExtendSubscription("habbo_vip", (60 * 60 * 24 * 31 * 3)); ServerMessage FuseRight = new ServerMessage(2); FuseRight.AppendInt32(2); Session.SendMessage(FuseRight); Session.GetMessageHandler().GetSubscriptionData(); } else if (TypeOfClub == 5) { Session.GetHabbo().GetSubscriptionManager().AddOrExtendSubscription("habbo_vip", (60 * 60 * 24 * 31)); ServerMessage FuseRight = new ServerMessage(2); FuseRight.AppendInt32(2); Session.SendMessage(FuseRight); Session.GetMessageHandler().GetSubscriptionData(); } else if (TypeOfClub == 6) { Session.GetHabbo().GetSubscriptionManager().AddOrExtendSubscription("habbo_vip", (60 * 60 * 24 * 31 * 3)); ServerMessage FuseRight = new ServerMessage(2); FuseRight.AppendInt32(2); Session.SendMessage(FuseRight); Session.GetMessageHandler().GetSubscriptionData(); } bool CreditsFail = false; bool PixelsFail = false; if (Session.GetHabbo().Credits < Item.CreditsCost) { CreditsFail = true; } if (CreditsFail || PixelsFail) { ServerMessage Failed = new ServerMessage(68); Failed.AppendBoolean(CreditsFail); Failed.AppendBoolean(PixelsFail); Session.SendMessage(Failed); return; } if (Item.CreditsCost > 0) { Session.GetHabbo().Credits -= Item.CreditsCost; Session.GetHabbo().UpdateCreditsBalance(); } ServerMessage PurchaseClub = new ServerMessage(67); //AC[mQHABBO_CLUB_VIP_1_MONTH{2}QFHHH{1} PurchaseClub.AppendUInt(Item.Id); PurchaseClub.AppendStringWithBreak(Item.Name); PurchaseClub.AppendInt32(Item.CreditsCost); PurchaseClub.AppendBoolean(true); PurchaseClub.AppendBoolean(false); PurchaseClub.AppendBoolean(false); Session.SendMessage(PurchaseClub); #endregion return; } if (Item.OudeCredits > 0) { int oudeCredits = 0; using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("SELECT belcredits FROM users WHERE id = " + Session.GetHabbo().Id); oudeCredits = dbClient.getInteger(); } if (Item.OudeCredits > oudeCredits) { Session.SendNotif(LanguageLocale.GetValue("catalog.oudebelcreditserror") + Item.OudeCredits); return; } oudeCredits = oudeCredits - Item.OudeCredits; using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.runFastQuery("UPDATE users SET belcredits = " + oudeCredits + " WHERE id = " + Session.GetHabbo().Id); } Session.SendNotif(LanguageLocale.GetValue("catalog.oudebelcreditsok") + oudeCredits); } //Console.WriteLine(Item.GetBaseItem().ItemId); //Console.WriteLine(Item.GetBaseItem().InteractionType.ToLower()); // Extra Data is _NOT_ filtered at this point and MUST BE VERIFIED BELOW: switch (Item.GetBaseItem().InteractionType) { case InteractionType.none: ExtraData = ""; break; case InteractionType.musicdisc: ExtraData = Item.songID.ToString(); break; #region Pet handling case InteractionType.pet0: case InteractionType.pet1: case InteractionType.pet2: case InteractionType.pet3: case InteractionType.pet4: case InteractionType.pet5: case InteractionType.pet6: case InteractionType.pet7: case InteractionType.pet8: case InteractionType.pet9: case InteractionType.pet10: case InteractionType.pet11: case InteractionType.pet12: case InteractionType.pet14: case InteractionType.pet15: try { //uint count = 0; //using (IQueryAdapter dbClient = ButterflyEnvironment.GetDatabaseManager().getQueryreactor()) //{ // dbClient.setQuery("SELECT COUNT(*) FROM user_pets WHERE user_id = " + Session.GetHabbo().Id); // count = uint.Parse(dbClient.getString()); //} //if (count > 5) //{ // Session.SendNotif(LanguageLocale.GetValue("catalog.pets.maxpets")); // return; //} string[] Bits = ExtraData.Split('\n'); string PetName = Bits[0]; string Race = Bits[1]; string Color = Bits[2]; int.Parse(Race); // to trigger any possible errors if (!CheckPetName(PetName)) return; if (Race.Length != 1) return; if (Color.Length != 6) return; } catch (Exception e) { //Logging.WriteLine(e.ToString()); Logging.HandleException(e, "Catalog.HandleRowchase"); return; } break; #endregion case InteractionType.roomeffect: Double Number = 0; try { if (string.IsNullOrEmpty(ExtraData)) Number = 0; else Number = Double.Parse(ExtraData, PiciEnvironment.cultureInfo); } catch (Exception e) { Logging.HandleException(e, "Catalog.HandleRowchase: " + ExtraData); } ExtraData = Number.ToString().Replace(',', '.'); break; // maintain extra data // todo: validate case InteractionType.postit: ExtraData = "FFFF33"; break; case InteractionType.dimmer: ExtraData = "1,1,1,#000000,255"; break; case InteractionType.trophy: ExtraData = Session.GetHabbo().Username + Convert.ToChar(9) + DateTime.Now.Day + "-" + DateTime.Now.Month + "-" + DateTime.Now.Year + Convert.ToChar(9) + PiciEnvironment.FilterInjectionChars(ExtraData, true); break; default: ExtraData = ""; break; } if (Item.CreditsCost > 0) { Session.GetHabbo().Credits -= Item.CreditsCost; Session.GetHabbo().UpdateCreditsBalance(); } if (Item.PixelsCost > 0) { Session.GetHabbo().ActivityPoints -= Item.PixelsCost; Session.GetHabbo().UpdateActivityPointsBalance(true); } Session.GetMessageHandler().GetResponse().Init(101); Session.GetMessageHandler().SendResponse(); Session.GetMessageHandler().GetResponse().Init(67); Session.GetMessageHandler().GetResponse().AppendUInt(Item.GetBaseItem().ItemId); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(Item.GetBaseItem().Name); Session.GetMessageHandler().GetResponse().AppendInt32(Item.CreditsCost); Session.GetMessageHandler().GetResponse().AppendInt32(Item.PixelsCost); Session.GetMessageHandler().GetResponse().AppendInt32(0); Session.GetMessageHandler().GetResponse().AppendInt32(1); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(Item.GetBaseItem().Type.ToString().ToLower()); Session.GetMessageHandler().GetResponse().AppendInt32(Item.GetBaseItem().SpriteId); Session.GetMessageHandler().GetResponse().AppendStringWithBreak(""); Session.GetMessageHandler().GetResponse().AppendInt32(1); Session.GetMessageHandler().GetResponse().AppendInt32(0); Session.GetMessageHandler().SendResponse(); if (IsGift) { uint itemID; //uint GenId = GenerateItemId(); Item Present = GeneratePresent(); using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { if (dbClient.dbType == DatabaseType.MSSQL) dbClient.setQuery("INSERT INTO items (base_id) OUTPUT INSERTED.* VALUES (" + Present.ItemId + ")"); else dbClient.setQuery("INSERT INTO items (base_id) VALUES (" + Present.ItemId + ")"); itemID = (uint)dbClient.insertQuery(); dbClient.runFastQuery("INSERT INTO items_users VALUES (" + itemID + "," + GiftUserId + ")"); if (!string.IsNullOrEmpty(GiftMessage)) { dbClient.setQuery("INSERT INTO items_extradata VALUES (" + itemID + ",@data)"); dbClient.addParameter("data", GiftMessage); dbClient.runQuery(); } dbClient.setQuery("INSERT INTO user_presents (item_id,base_id,amount,extra_data) VALUES (" + itemID + "," + Item.GetBaseItem().ItemId + "," + Item.Amount + ",@extra_data)"); dbClient.addParameter("gift_message", "!" + GiftMessage); dbClient.addParameter("extra_data", ExtraData); dbClient.runQuery(); } GameClient Receiver = PiciEnvironment.GetGame().GetClientManager().GetClientByUserID(GiftUserId); if (Receiver != null) { Receiver.SendNotif(LanguageLocale.GetValue("catalog.gift.received") + Session.GetHabbo().Username); Receiver.GetHabbo().GetInventoryComponent().AddNewItem(itemID, Present.ItemId, ExtraData, false, false, 0); Receiver.GetHabbo().GetInventoryComponent().SendFloorInventoryUpdate(); InventoryComponent targetInventory = Receiver.GetHabbo().GetInventoryComponent(); if (targetInventory != null) targetInventory.RunDBUpdate(); } Session.SendNotif(LanguageLocale.GetValue("catalog.gift.sent")); } else { DeliverItems(Session, Item.GetBaseItem(), Item.Amount, ExtraData, Item.songID); } }
internal static ServerMessage SerializeUserInfo(uint UserId) { using (IQueryAdapter dbClient = PiciEnvironment.GetDatabaseManager().getQueryreactor()) { dbClient.setQuery("SELECT id, username, online FROM users WHERE id = " + UserId + ""); DataRow User = dbClient.getRow(); dbClient.setQuery("SELECT reg_timestamp, login_timestamp, cfhs, cfhs_abusive, cautions, bans FROM user_info WHERE user_id = " + UserId + ""); DataRow Info = dbClient.getRow(); if (User == null) { throw new NullReferenceException("No user found in database"); } ServerMessage Message = new ServerMessage(533); Message.AppendUInt(Convert.ToUInt32(User["id"])); Message.AppendStringWithBreak((string)User["username"]); if (Info != null) { Message.AppendInt32((int)Math.Ceiling((PiciEnvironment.GetUnixTimestamp() - (Double)Info["reg_timestamp"]) / 60)); Message.AppendInt32((int)Math.Ceiling((PiciEnvironment.GetUnixTimestamp() - (Double)Info["login_timestamp"]) / 60)); } else { Message.AppendInt32(0); Message.AppendInt32(0); } if (User["online"].ToString() == "1") { Message.AppendBoolean(true); } else { Message.AppendBoolean(false); } if (Info != null) { Message.AppendInt32((int)Info["cfhs"]); Message.AppendInt32((int)Info["cfhs_abusive"]); Message.AppendInt32((int)Info["cautions"]); Message.AppendInt32((int)Info["bans"]); } else { Message.AppendInt32(0); // cfhs Message.AppendInt32(0); // abusive cfhs Message.AppendInt32(0); // cautions Message.AppendInt32(0); // bans } return Message; } }