示例#1
0
        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;
        }
示例#3
0
        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;
        }
示例#4
0
        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);
        }
示例#5
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);
        }
示例#6
0
        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;
 }
示例#8
0
        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;
        }
示例#9
0
        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;
        }
示例#10
0
 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));
 }
示例#11
0
        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
        }
示例#12
0
        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);
        }
示例#13
0
        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;
        }
示例#14
0
        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);
            }
        }
示例#15
0
        //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);
        }
示例#16
0
        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;
                }
            }
        }
示例#17
0
        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;
        }
示例#19
0
文件: Pet.cs 项目: habb0/PiciEmulator
        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);
            }
        }
示例#20
0
        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;
        }
示例#21
0
        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);
            }
        }
示例#22
0
        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;
                }
            }
        }
示例#23
0
        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;
        }
示例#24
0
        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);
            }
        }
示例#25
0
        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);
            }
        }
示例#26
0
        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);
        }
示例#27
0
        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);
            }
        }
示例#28
0
        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;
        }
示例#29
0
        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);
            }
        }
示例#30
0
        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;
            }
        }