Esempio n. 1
0
        private static void AddToPlaylist(Session Session, ClientMessage Message)
        {
            RoomInstance Instance = RoomManager.GetInstanceByRoomId(Session.CurrentRoomId);

            if (Instance == null || !Instance.CheckUserRights(Session, true) || Instance.MusicController == null ||
                Instance.MusicController.PlaylistSize >= Instance.MusicController.PlaylistCapacity)
            {
                return;
            }

            Item DiskItem = Session.InventoryCache.GetItem(Message.PopWiredUInt32());

            if (DiskItem == null || DiskItem.Definition.Behavior != ItemBehavior.MusicDisk)
            {
                return;
            }

            int NewOrder = Instance.MusicController.AddDisk(DiskItem);

            if (NewOrder < 0)
            {
                return;
            }

            Session.InventoryCache.RemoveItem(DiskItem.Id);

            using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
            {
                DiskItem.MoveToSoundManager(MySqlClient, Instance.MusicController.LinkedItemId, NewOrder);
            }

            Session.SendData(InventoryItemRemovedComposer.Compose(DiskItem.Id));
            Session.SendData(JukeboxPlaylistComposer.Compose(Instance.MusicController.PlaylistCapacity,
                                                             Instance.MusicController.Playlist.Values.ToList()));
        }
Esempio n. 2
0
        private static void RemoveFromPlaylist(Session Session, ClientMessage Message)
        {
            RoomInstance Instance = RoomManager.GetInstanceByRoomId(Session.CurrentRoomId);

            if (Instance == null || Instance.MusicController == null || !Instance.CheckUserRights(Session, true))
            {
                return;
            }

            Item TakenItem = Instance.MusicController.RemoveDisk(Message.PopWiredInt32());

            // playlist will skip to the next item automatically if it has to

            if (TakenItem == null)
            {
                return;
            }

            Session.InventoryCache.Add(TakenItem);

            using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
            {
                TakenItem.MoveToUserInventory(MySqlClient, Session.CharacterId);
            }

            Session.SendData(InventoryItemAddedComposer.Compose(TakenItem));
            Session.SendData(JukeboxDisksComposer.Compose(Session));
            Session.SendData(JukeboxPlaylistComposer.Compose(Instance.MusicController.PlaylistCapacity,
                                                             Instance.MusicController.Playlist.Values.ToList()));
        }
Esempio n. 3
0
        private static bool HandleScoreboard(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
            case ItemEventType.Interact:

                if (!Instance.CheckUserRights(Session))
                {
                    break;
                }

                RoomActor Actor = Instance.GetActorByReferenceId(Session.CharacterId);

                if (Actor == null)
                {
                    break;
                }

                if (!Distance.TilesTouching(Actor.Position.GetVector2(), Item.RoomPosition.GetVector2()))
                {
                    Actor.MoveToItemAndInteract(Item, RequestData, Opcode);
                    break;
                }

                int Val = 0;
                int.TryParse(Item.DisplayFlags, out Val);

                if (RequestData == 1)
                {
                    Val--;

                    if (Val < 0)
                    {
                        Val = 99;
                    }
                }
                else if (RequestData == 2)
                {
                    Val++;

                    if (Val > 99)
                    {
                        Val = 0;
                    }
                }
                else
                {
                    Val = (Val == -1 ? 0 : -1);
                }

                Item.DisplayFlags = Val.ToString();
                Item.BroadcastStateUpdate(Instance);
                break;
            }

            return(true);
        }
Esempio n. 4
0
        private static void GetPlaylist(Session Session, ClientMessage Message)
        {
            RoomInstance Instance = RoomManager.GetInstanceByRoomId(Session.CurrentRoomId);

            if (Instance == null || !Instance.CheckUserRights(Session, true))
            {
                return;
            }

            Session.SendData(JukeboxPlaylistComposer.Compose(Instance.MusicController.PlaylistCapacity,
                                                             Instance.MusicController.Playlist.Values.ToList()));
        }
Esempio n. 5
0
        private static bool HandleHabboWheel(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
            case ItemEventType.Placed:

                Item.Flags        = "-1";
                Item.DisplayFlags = "-1";

                Item.RequestUpdate(10);
                break;

            case ItemEventType.Removing:

                Item.Flags        = "0";
                Item.DisplayFlags = "0";
                break;

            case ItemEventType.Interact:

                if (!Instance.CheckUserRights(Session))
                {
                    break;
                }

                if (Item.Flags != "-1")
                {
                    Item.Flags        = "-1";
                    Item.DisplayFlags = "-1";

                    Item.RequestUpdate(10);
                    Item.BroadcastStateUpdate(Instance);
                }

                break;

            case ItemEventType.UpdateTick:

                Item.Flags        = RandomGenerator.GetNext(1, 10).ToString();
                Item.DisplayFlags = Item.Flags;

                Item.BroadcastStateUpdate(Instance);

                RoomManager.MarkWriteback(Item, true);

                break;
            }

            return(true);
        }
        private static bool HandleAlert(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
            case ItemEventType.InstanceLoaded:
            case ItemEventType.Placed:
            case ItemEventType.Removing:

                Item.Flags        = "0";
                Item.DisplayFlags = "0";
                break;

            case ItemEventType.Interact:

                if (!Instance.CheckUserRights(Session) || Item.Flags == "1")
                {
                    break;
                }

                Item.Flags        = "1";
                Item.DisplayFlags = "1";

                Item.RequestUpdate(4);
                Item.BroadcastStateUpdate(Instance);
                break;

            case ItemEventType.UpdateTick:

                if (Item.Flags != "1")
                {
                    break;
                }

                Item.Flags        = "0";
                Item.DisplayFlags = "0";

                Item.BroadcastStateUpdate(Instance);
                break;
            }

            return(true);
        }
Esempio n. 7
0
        private static bool HandleGenericSwitch(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
            case ItemEventType.Interact:

                if (!Instance.CheckUserRights(Session))
                {
                    return(true);
                }

                int CurrentState = 0;
                int.TryParse(Item.Flags, out CurrentState);

                int NewState = CurrentState + 1;

                if (CurrentState < 0 || CurrentState >= (Item.Definition.BehaviorData - 1))
                {
                    NewState = 0;
                }

                if (CurrentState != NewState)
                {
                    Item.Flags        = NewState.ToString();
                    Item.DisplayFlags = Item.Flags;

                    RoomManager.MarkWriteback(Item, true);

                    Item.BroadcastStateUpdate(Instance);
                }

                break;
            }

            return(true);
        }
Esempio n. 8
0
        private static bool HandleFixedGateSwitch(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode)
        {
            switch (Event)
            {
            case ItemEventType.Interact:

                if (!Instance.CheckUserRights(Session))
                {
                    return(true);
                }

                List <Vector2> GateTiles = Instance.CalculateAffectedTiles(Item, Item.RoomPosition.GetVector2(), Item.RoomRotation);

                foreach (Vector2 Tile in GateTiles)
                {
                    if (Instance.GetActorsOnPosition(Tile).Count > 0)
                    {
                        return(true);
                    }
                }

                int CurrentState = 0;
                int.TryParse(Item.Flags, out CurrentState);

                Item.Flags        = (CurrentState == 0 ? 1 : 0).ToString();
                Item.DisplayFlags = Item.Flags;

                RoomManager.MarkWriteback(Item, true);

                Item.BroadcastStateUpdate(Instance);
                Instance.RegenerateRelativeHeightmap();
                break;
            }

            return(true);
        }
Esempio n. 9
0
        public static bool HandleCommand(Session Session, string Input)
        {
            Input = Input.Substring(1, Input.Length - 1);
            string[] Bits = Input.Split(' ');

            RoomInstance Instance = RoomManager.GetInstanceByRoomId(Session.CurrentRoomId);
            RoomActor    Actor    = (Instance == null ? null : Instance.GetActorByReferenceId(Session.CharacterId));

            switch (Bits[0].ToLower())
            {
            case "commands":
            {
                Session.SendData(NotificationMessageComposer.Compose((string)LangManager.GetValue("command.commands.info") + ":\n\n:commands\n:online\n:about\n:pickall"));
                return(true);
            }

            case "update_catalog":
            {
                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }
                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    Snowlight.Game.Catalog.CatalogManager.RefreshCatalogData(MySqlClient);
                }
                Session.SendData(NotificationMessageComposer.Compose((string)LangManager.GetValue("command.updatecatalog.success")));
                return(true);
            }

            case "online":
            {
                List <string> OnlineUsers = SessionManager.ConnectedUserData.Values.ToList();
                StringBuilder MessageText = new StringBuilder((string)LangManager.GetValue("command.online.part1") + " " + OnlineUsers.Count + " " + (string)LangManager.GetValue("command.online.part2") + "\n");

                foreach (string OnlineUser in OnlineUsers)
                {
                    MessageText.Append('\n');
                    MessageText.Append("- " + OnlineUser);
                }

                Session.SendData(NotificationMessageComposer.Compose(MessageText.ToString()));
                return(true);
            }

            case "superkick":
            {
                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }

                if (Bits.Length < 2)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, (string)LangManager.GetValue("command.invalidsyntax") + " - :kick <username>", 0, ChatType.Whisper));
                    return(true);
                }

                string  Username      = UserInputFilter.FilterString(Bits[1].Trim());
                Session TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(Username));

                if (TargetSession == null || TargetSession.HasRight("moderation_tool") || !TargetSession.InRoom)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, (string)LangManager.GetValue("command.targetuser") + " '" + Username + "' is offline or cannot be kicked.", 0, ChatType.Whisper));
                    return(true);
                }

                SessionManager.StopSession(TargetSession.Id);

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Superkicked user from server (chat command)",
                                                       "User '" + TargetSession.CharacterInfo.Username + "' (ID " + TargetSession.CharacterId + ").");
                }

                return(true);
            }

            case "kick":
            {
                if (!Session.HasRight("moderation_tool"))
                {
                    return(false);
                }

                if (Bits.Length < 2)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, (string)LangManager.GetValue("command.invalidsyntax") + " - :kick <username>", 0, ChatType.Whisper));
                    return(true);
                }

                string  Username      = UserInputFilter.FilterString(Bits[1].Trim());
                Session TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(Username));

                if (TargetSession == null || TargetSession.HasRight("moderation_tool") || !TargetSession.InRoom)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, (string)LangManager.GetValue("command.targetuser") + " '" + Username + "' is offline, not in a room, or cannot be kicked.", 0, ChatType.Whisper));
                    return(true);
                }

                RoomManager.RemoveUserFromRoom(TargetSession, true);
                TargetSession.SendData(NotificationMessageComposer.Compose((string)LangManager.GetValue("command.kick.success")));

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Kicked user from room (chat command)",
                                                       "User '" + TargetSession.CharacterInfo.Username + "' (ID " + TargetSession.CharacterId + ").");
                }

                return(true);
            }

            case "roomunmute":
            {
                if (!Session.HasRight("mute"))
                {
                    return(false);
                }

                if (Instance.RoomMuted)
                {
                    Instance.RoomMuted = false;
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, (string)LangManager.GetValue("command.roomunmute.success"), 0, ChatType.Whisper));
                }
                else
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, (string)LangManager.GetValue("command.roomunmute.error"), 0, ChatType.Whisper));
                }

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Unmuted room", "Room '"
                                                       + Instance.Info.Name + "' (ID " + Instance.RoomId + ")");
                }

                return(true);
            }

            case "roommute":
            {
                if (!Session.HasRight("mute"))
                {
                    return(false);
                }

                if (!Instance.RoomMuted)
                {
                    Instance.RoomMuted = true;
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, (string)LangManager.GetValue("command.roommute.success"), 0, ChatType.Whisper));
                }
                else
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, (string)LangManager.GetValue("command.roommute.error"), 0, ChatType.Whisper));
                }

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Muted room", "Room '"
                                                       + Instance.Info.Name + "' (ID " + Instance.RoomId + ")");
                }

                return(true);
            }

            case "unmute":
            {
                if (!Session.HasRight("mute"))
                {
                    return(false);
                }

                if (Bits.Length < 2)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, (string)LangManager.GetValue("command.invalidsyntax") + " - :unmute <username>", 0, ChatType.Whisper));
                    return(true);
                }

                string Username = UserInputFilter.FilterString(Bits[1].Trim());

                Session TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(Username));

                if (TargetSession == null)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, (string)LangManager.GetValue("command.targetuser") + " '" + Username + "' " + (string)LangManager.GetValue("command.cannotproceedcmd3"), 0, ChatType.Whisper));
                    return(true);
                }

                if (!TargetSession.CharacterInfo.IsMuted)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, (string)LangManager.GetValue("command.targetuser") + " '" + Username + "' " + (string)LangManager.GetValue("command.unmute.error"), 0, ChatType.Whisper));
                    return(true);
                }

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    TargetSession.CharacterInfo.Unmute(MySqlClient);
                }

                TargetSession.SendData(NotificationMessageComposer.Compose((string)LangManager.GetValue("command.unmute.sucess")));
                Session.SendData(RoomChatComposer.Compose(Actor.Id, (string)LangManager.GetValue("command.targetuser") + " '" + Username + "' " + (string)LangManager.GetValue("command.unmute.sucess2"), 0, ChatType.Whisper));

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Unmuted user",
                                                       "User '" + TargetSession.CharacterInfo.Username + "' (ID " + TargetSession.CharacterId + ").");
                }

                return(true);
            }

            case "mute":
            {
                if (!Session.HasRight("mute"))
                {
                    return(false);
                }

                if (Bits.Length < 2)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, (string)LangManager.GetValue("command.invalidsyntax") + " - :mute <username> [length in seconds]", 0, ChatType.Whisper));
                    return(true);
                }

                string Username   = UserInputFilter.FilterString(Bits[1].Trim());
                int    TimeToMute = 0;

                if (Bits.Length >= 3)
                {
                    int.TryParse(Bits[2], out TimeToMute);
                }

                if (TimeToMute <= 0)
                {
                    TimeToMute = 300;
                }

                if (TimeToMute > 3600)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, (string)LangManager.GetValue("command.mute.error"), 0, ChatType.Whisper));
                    return(true);
                }

                Session TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(Username));

                if (TargetSession == null || TargetSession.HasRight("mute"))
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, (string)LangManager.GetValue("command.targetuser") + " '" + Username + "' " + (string)LangManager.GetValue("command.cannotproceedcmd4"), 0, ChatType.Whisper));
                    return(true);
                }

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    TargetSession.CharacterInfo.Mute(MySqlClient, TimeToMute);
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Muted user",
                                                       "User '" + TargetSession.CharacterInfo.Username + "' (ID " + TargetSession.CharacterId + ") for " + TimeToMute + " seconds.");
                }

                TargetSession.SendData(RoomMutedComposer.Compose(TimeToMute));
                Session.SendData(RoomChatComposer.Compose(Actor.Id, (string)LangManager.GetValue("command.mute.sucess.part1") + " '" + Username + "' " + (string)LangManager.GetValue("command.mute.sucess.part2") + " " + TimeToMute + " seconds.", 0, ChatType.Whisper));
                return(true);
            }

            case "clipping":

                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }

                Actor.OverrideClipping = !Actor.OverrideClipping;
                Actor.ApplyEffect(Actor.ClippingEnabled ? 0 : 23);
                Session.CurrentEffect = 0;
                return(true);

            case "about":

                Session.SendData(UserAlertModernComposer.Compose("Powered by Snowlight", "This hotel is proudly powered by Snowlight, the premium open-source Habbo Hotel emulator.\n\nhttp://www.meth0d.org/snowlight"));
                return(true);

            case "t":

                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }

                Session.SendData(NotificationMessageComposer.Compose("Position: " + Actor.Position.ToString() + ", Rotation: " + Actor.BodyRotation));
                return(true);

            case "emptyinv":

                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }

                Session.InventoryCache.ClearAndDeleteAll();
                Session.SendData(InventoryRefreshComposer.Compose());
                Session.SendData(NotificationMessageComposer.Compose((string)LangManager.GetValue("command.emptyinv.sucess")));
                return(true);

            case "pickall":

                if (!Instance.CheckUserRights(Session, true))
                {
                    Session.SendData(NotificationMessageComposer.Compose((string)LangManager.GetValue("command.pickall.error")));
                    return(true);
                }

                Instance.PickAllToUserInventory(Session);
                return(true);
            }

            return(false);
        }
Esempio n. 10
0
        public void HandleSave(Session Session, ClientMessage Message)
        {
            uint ItemId = Message.PopWiredUInt32();



            if (!mInstance.CheckUserRights(Session) || !mWired.ContainsKey(ItemId))
            {
                return;
            }

            Item item = mInstance.GetItem(ItemId);

            if (item == null)
            {
                return;
            }

            WiredData data = mWired [ItemId];

            String Data1 = "";
            int    Data2 = 0;
            int    Data3 = 0;
            int    Data4 = 0;
            int    Time  = 0;
            String Data5 = "";

            Message.PopWiredInt32();
            Data2 = Message.PopWiredInt32();

            Boolean Simple = true;

            if (item.Definition.Behavior == ItemBehavior.WiredEffect)
            {
                switch (WiredTypesUtil.EffectFromInt(item.Definition.BehaviorData))
                {
                case WiredEffectTypes.match_to_sshot:
                case WiredEffectTypes.move_rotate:
                case WiredEffectTypes.teleport_to:
                case WiredEffectTypes.toggle_state:
                    Simple = false;
                    break;
                }
            }

            if (item.Definition.Behavior == ItemBehavior.WiredTrigger)
            {
                switch (WiredTypesUtil.TriggerFromInt(item.Definition.BehaviorData))
                {
                case WiredTriggerTypes.state_changed:
                case WiredTriggerTypes.walks_off_furni:
                case WiredTriggerTypes.walks_on_furni:
                    Simple = false;
                    break;
                }
            }

            if (!Simple)
            {
                Data3 = Message.PopWiredInt32();

                if (item.Definition.Behavior == ItemBehavior.WiredEffect && WiredTypesUtil.EffectFromInt(item.Definition.BehaviorData) == WiredEffectTypes.match_to_sshot)
                {
                    Data4 = Message.PopWiredInt32();
                }

                Message.PopString();
                int c = Message.PopWiredInt32();
                for (int i = 0; i < c; i++)
                {
                    uint tmp = Message.PopWiredUInt32();
                    if (mInstance.GetItem(tmp) == null)
                    {
                        continue;
                    }
                    if (tmp != 0)
                    {
                        Data1 += "" + tmp.ToString() + "|";
                    }
                }

                Time = Message.PopWiredInt32();
            }
            else
            {
                Data1 = Message.PopString();
                Data3 = Message.PopWiredInt32();
            }


            if (item.Definition.Behavior == ItemBehavior.WiredEffect)
            {
                switch (WiredTypesUtil.EffectFromInt(item.Definition.BehaviorData))
                {
                case WiredEffectTypes.match_to_sshot:
                    String[] Selected = Data1.Split('|');

                    foreach (String ItemIdS in Selected)
                    {
                        uint SelectedItemId;
                        uint.TryParse(ItemIdS, out SelectedItemId);
                        Item Item = mInstance.GetItem(SelectedItemId);
                        if (Item == null)
                        {
                            continue;
                        }

                        Data5 += Item.Id + "#" + Item.RoomPosition.ToString() + "#" + Item.RoomRotation + "#" + Item.Flags + "+";
                    }
                    break;
                }
            }

            if (data.Data1 == Data1 && data.Data2 == Data2 && data.Data3 == Data3 && data.Data4 == Data4 && data.Time == Time && data.Data5 == Data5)
            {
                return;
            }

            using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) {
                data.Data1 = Data1;
                data.Data2 = Data2;
                data.Data3 = Data3;
                data.Data4 = Data4;
                data.Data5 = Data5;
                data.Time  = Time;
                data.SynchronizeDatabase(MySqlClient);
            }

            if (item.Definition.Behavior == ItemBehavior.WiredTrigger)
            {
                switch (WiredTypesUtil.TriggerFromInt(item.Definition.BehaviorData))
                {
                case WiredTriggerTypes.at_given_time:
                    item.RequestUpdate(Data2);
                    break;

                case WiredTriggerTypes.walks_on_furni:
                case WiredTriggerTypes.walks_off_furni:
                    DeRegisterWalkItems(item.Id);
                    RegisterWalkItems(item.Id);
                    break;
                }
            }
        }
Esempio n. 11
0
        private static bool HandleJukebox(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData)
        {
            switch (Event)
            {
            case ItemEventType.Placed:
            case ItemEventType.InstanceLoaded:

                Instance.MusicController.Reset();
                Instance.MusicController.LinkRoomOutputItem(Item);

                List <Item> Disks = new List <Item>();

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    Disks = LoadPlaylist(MySqlClient, Item.Id);
                }

                foreach (Item Disk in Disks)
                {
                    Instance.MusicController.AddDisk(Disk);
                }

                if (Item.DisplayFlags == "1")
                {
                    if (Instance.MusicController.PlaylistSize > 0)
                    {
                        Instance.MusicController.Start();
                    }
                    else
                    {
                        Item.DisplayFlags = "0";
                        Item.BroadcastStateUpdate(Instance);
                    }
                }

                break;

            case ItemEventType.Removing:

                if (Instance.MusicController.IsPlaying)
                {
                    Instance.MusicController.Stop();
                    Instance.MusicController.BroadcastCurrentSongData(Instance);
                }

                Instance.MusicController.Reset();
                break;

            case ItemEventType.Interact:

                if (!Instance.CheckUserRights(Session, true))
                {
                    return(true);
                }

                switch (RequestData)
                {
                case -1:         // Open interface

                    break;

                default:         // it loves sending random numbers. as you do.

                    if (Item.DisplayFlags == "1")
                    {
                        Item.DisplayFlags = "0";
                        Instance.MusicController.Stop();
                    }
                    else
                    {
                        if (Instance.MusicController.PlaylistSize < 1)
                        {
                            break;
                        }

                        Item.DisplayFlags = "1";
                        Instance.MusicController.Start();
                    }

                    Item.BroadcastStateUpdate(Instance);
                    RoomManager.MarkWriteback(Item, true);

                    Instance.MusicController.BroadcastCurrentSongData(Instance);
                    break;
                }

                break;
            }

            return(true);
        }
Esempio n. 12
0
        public static bool HandleCommand(Session Session, string Input)
        {
            Input = Input.Substring(1, Input.Length - 1);
            string[] Bits = Input.Split(' ');

            RoomInstance Instance = RoomManager.GetInstanceByRoomId(Session.CurrentRoomId);
            RoomActor    Actor    = (Instance == null ? null : Instance.GetActorByReferenceId(Session.CharacterId));

            switch (Bits[0].ToLower())
            {
            case "commands":
            {
                Session.SendData(NotificationMessageComposer.Compose("The following commands are available to regular users:\n\n:commands\n:online\n:about\n:pickall"));
                return(true);
            }

            case "online":
            {
                List <string> OnlineUsers = SessionManager.ConnectedUserData.Values.ToList();
                StringBuilder MessageText = new StringBuilder("There are currently " + OnlineUsers.Count + " user(s) online:\n");

                foreach (string OnlineUser in OnlineUsers)
                {
                    MessageText.Append('\n');
                    MessageText.Append("- " + OnlineUser);
                }

                Session.SendData(NotificationMessageComposer.Compose(MessageText.ToString()));
                return(true);
            }

            case "superkick":
            {
                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }

                if (Bits.Length < 2)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, "Invalid syntax - :kick <username>", 0, ChatType.Whisper));
                    return(true);
                }

                string  Username      = UserInputFilter.FilterString(Bits[1].Trim());
                Session TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(Username));

                if (TargetSession == null || TargetSession.HasRight("moderation_tool") || !TargetSession.InRoom)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, "Target user '" + Username + "' is offline or cannot be kicked.", 0, ChatType.Whisper));
                    return(true);
                }

                SessionManager.StopSession(TargetSession.Id);

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Superkicked user from server (chat command)",
                                                       "User '" + TargetSession.CharacterInfo.Username + "' (ID " + TargetSession.CharacterId + ").");
                }

                return(true);
            }

            case "kick":
            {
                if (!Session.HasRight("moderation_tool"))
                {
                    return(false);
                }

                if (Bits.Length < 2)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, "Invalid syntax - :kick <username>", 0, ChatType.Whisper));
                    return(true);
                }

                string  Username      = UserInputFilter.FilterString(Bits[1].Trim());
                Session TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(Username));

                if (TargetSession == null || TargetSession.HasRight("moderation_tool") || !TargetSession.InRoom)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, "Target user '" + Username + "' is offline, not in a room, or cannot be kicked.", 0, ChatType.Whisper));
                    return(true);
                }

                RoomManager.RemoveUserFromRoom(TargetSession, true);
                TargetSession.SendData(NotificationMessageComposer.Compose("You have been kicked from the room by a community staff member."));

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Kicked user from room (chat command)",
                                                       "User '" + TargetSession.CharacterInfo.Username + "' (ID " + TargetSession.CharacterId + ").");
                }

                return(true);
            }

            case "roomunmute":
            {
                if (!Session.HasRight("mute"))
                {
                    return(false);
                }

                if (Instance.RoomMuted)
                {
                    Instance.RoomMuted = false;
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, "The current room has been unmuted successfully.", 0, ChatType.Whisper));
                }
                else
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, "This room is not muted.", 0, ChatType.Whisper));
                }

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Unmuted room", "Room '"
                                                       + Instance.Info.Name + "' (ID " + Instance.RoomId + ")");
                }

                return(true);
            }

            case "roommute":
            {
                if (!Session.HasRight("mute"))
                {
                    return(false);
                }

                if (!Instance.RoomMuted)
                {
                    Instance.RoomMuted = true;
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, "The current room has been muted successfully.", 0, ChatType.Whisper));
                }
                else
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, "This room is already muted.", 0, ChatType.Whisper));
                }

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Muted room", "Room '"
                                                       + Instance.Info.Name + "' (ID " + Instance.RoomId + ")");
                }

                return(true);
            }

            case "unmute":
            {
                if (!Session.HasRight("mute"))
                {
                    return(false);
                }

                if (Bits.Length < 2)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, "Invalid syntax - :unmute <username>", 0, ChatType.Whisper));
                    return(true);
                }

                string Username = UserInputFilter.FilterString(Bits[1].Trim());

                Session TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(Username));

                if (TargetSession == null)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, "Target user '" + Username + "' does not exist or is not online.", 0, ChatType.Whisper));
                    return(true);
                }

                if (!TargetSession.CharacterInfo.IsMuted)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, "Target user '" + Username + "' is not muted.", 0, ChatType.Whisper));
                    return(true);
                }

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    TargetSession.CharacterInfo.Unmute(MySqlClient);
                }

                TargetSession.SendData(NotificationMessageComposer.Compose("You have been unmuted. Please reload the room."));
                Session.SendData(RoomChatComposer.Compose(Actor.Id, "Target user '" + Username + "' was successfully unmuted.", 0, ChatType.Whisper));

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Unmuted user",
                                                       "User '" + TargetSession.CharacterInfo.Username + "' (ID " + TargetSession.CharacterId + ").");
                }

                return(true);
            }

            case "mute":
            {
                if (!Session.HasRight("mute"))
                {
                    return(false);
                }

                if (Bits.Length < 2)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, "Invalid syntax - :mute <username> [length in seconds]", 0, ChatType.Whisper));
                    return(true);
                }

                string Username   = UserInputFilter.FilterString(Bits[1].Trim());
                int    TimeToMute = 0;

                if (Bits.Length >= 3)
                {
                    int.TryParse(Bits[2], out TimeToMute);
                }

                if (TimeToMute <= 0)
                {
                    TimeToMute = 300;
                }

                if (TimeToMute > 3600)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, "The maximum mute time is one hour.", 0, ChatType.Whisper));
                    return(true);
                }

                Session TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(Username));

                if (TargetSession == null || TargetSession.HasRight("mute"))
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, "Target user '" + Username + "' does not exist, is not online, or cannot be muted.", 0, ChatType.Whisper));
                    return(true);
                }

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    TargetSession.CharacterInfo.Mute(MySqlClient, TimeToMute);
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Muted user",
                                                       "User '" + TargetSession.CharacterInfo.Username + "' (ID " + TargetSession.CharacterId + ") for " + TimeToMute + " seconds.");
                }

                TargetSession.SendData(RoomMutedComposer.Compose(TimeToMute));
                Session.SendData(RoomChatComposer.Compose(Actor.Id, "User '" + Username + "' has been muted successfully for " + TimeToMute + " seconds.", 0, ChatType.Whisper));
                return(true);
            }

            case "clipping":

                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }

                Actor.OverrideClipping = !Actor.OverrideClipping;
                Actor.ApplyEffect(Actor.ClippingEnabled ? 0 : 23);
                Session.CurrentEffect = 0;
                return(true);

            case "about":

                Session.SendData(UserAlertModernComposer.Compose("Powered by Snowlight", "This hotel is proudly powered by Snowlight, the premium open-source Habbo Hotel emulator.\n\nhttp://www.meth0d.org/snowlight"));
                return(true);

            case "t":

                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }

                Session.SendData(NotificationMessageComposer.Compose("Position: " + Actor.Position.ToString() + ", Rotation: " + Actor.BodyRotation));
                return(true);

            case "emptyinv":

                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }

                Session.InventoryCache.ClearAndDeleteAll();
                Session.SendData(InventoryRefreshComposer.Compose());
                Session.SendData(NotificationMessageComposer.Compose("Your inventory has been emptied."));
                return(true);

            case "pickall":

                if (!Instance.CheckUserRights(Session, true))
                {
                    Session.SendData(NotificationMessageComposer.Compose("You do not have rights to pickall in this room."));
                    return(true);
                }

                Instance.PickAllToUserInventory(Session);
                return(true);
            }

            return(false);
        }
Esempio n. 13
0
        public static bool HandleCommand(Session Session, string Input)
        {
            Input = Input.Substring(1, Input.Length - 1);
            string[] Bits = Input.Split(' ');

            RoomInstance Instance      = RoomManager.GetInstanceByRoomId(Session.CurrentRoomId);
            RoomActor    Actor         = (Instance == null ? null : Instance.GetActorByReferenceId(Session.CharacterId));
            Session      TargetSession = null;
            RoomActor    TargetActor   = null;
            String       TargetName    = "";

            switch (Bits[0].ToLower())
            {
                #region users
                #region misc
            case "commands":
            {
                Session.SendData(NotificationMessageComposer.Compose(Localization.GetValue("command.commands.info") + ":\n\n:commands\n:online\n:about\n:pickall"));
                return(true);
            }

            case "online":
            {
                List <string> OnlineUsers = SessionManager.ConnectedUserData.Values.ToList();
                StringBuilder MessageText = new StringBuilder(Localization.GetValue("command.online", OnlineUsers.Count.ToString()) + "\n");

                foreach (string OnlineUser in OnlineUsers)
                {
                    MessageText.Append('\n');
                    MessageText.Append("- " + OnlineUser);
                }

                Session.SendData(NotificationMessageComposer.Compose(MessageText.ToString()));
                return(true);
            }

            case "about":

                Session.SendData(UserAlertModernComposer.Compose("Powered by Snowlight", "This hotel is proudly powered by Snowlight,\nedited by flx5. \nCredits to Meth0d."));
                return(true);

                #endregion
                #region furni
            case "empty":
            case "emptyinv":

                if (Bits.Length > 2)
                {
                    return(false);
                }

                if (!Session.HasRight("hotel_admin") && Bits.Length == 2)
                {
                    return(false);
                }

                Session Targetuser = Session;

                if (Bits.Length == 2)
                {
                    uint userid = CharacterResolverCache.GetUidFromName(Bits[1]);
                    Targetuser = SessionManager.GetSessionByCharacterId(userid);
                }

                Targetuser.PetInventoryCache.ClearAndDeleteAll();
                Targetuser.InventoryCache.ClearAndDeleteAll();
                Targetuser.SendData(InventoryRefreshComposer.Compose());
                Targetuser.SendData(NotificationMessageComposer.Compose(Localization.GetValue("command.emptyinv.sucess")));
                return(true);

            case "pickall":

                if (!Instance.CheckUserRights(Session, true))
                {
                    Session.SendData(NotificationMessageComposer.Compose(Localization.GetValue("command.pickall.error")));
                    return(true);
                }
                Instance.PickAllToUserInventory(Session);
                return(true);

                #endregion
                #region extra
            case "moonwalk":
                if (!Session.CharacterInfo.IsPremium)
                {
                    return(false);
                }

                Actor.WalkingBackwards = !Actor.WalkingBackwards;
                Actor.Dance(Actor.WalkingBackwards ? 4 : 0);
                Session.SendData(RoomChatComposer.Compose(Actor.Id, "TEST " + Actor.WalkingBackwards, 0, ChatType.Whisper));
                return(true);

                #region push
            case "push":
                if (!Session.CharacterInfo.IsPremium || Bits.Length != 2)
                {
                    return(false);
                }
                TargetName  = UserInputFilter.FilterString(Bits[1].Trim());
                TargetActor = Instance.GetActorByReferenceId(CharacterResolverCache.GetUidFromName(TargetName));

                if (TargetActor == null || TargetActor.IsMoving)
                {
                    return(false);
                }



                if ((TargetActor.Position.X == Actor.Position.X - 1) || (TargetActor.Position.X == Actor.Position.X + 1) || (TargetActor.Position.Y == Actor.Position.Y - 1) || (TargetActor.Position.Y == Actor.Position.Y + 1))
                {
                    Vector2 Newposition = null;

                    if (TargetActor.Position.X == Actor.Position.X - 1 && TargetActor.Position.Y == Actor.Position.Y)
                    {
                        Newposition = new Vector2(TargetActor.Position.X - 1, TargetActor.Position.Y);
                    }

                    if (TargetActor.Position.X == Actor.Position.X + 1 && TargetActor.Position.Y == Actor.Position.Y)
                    {
                        Newposition = new Vector2(TargetActor.Position.X + 1, TargetActor.Position.Y);
                    }

                    if (TargetActor.Position.X == Actor.Position.X && TargetActor.Position.Y == Actor.Position.Y + 1)
                    {
                        Newposition = new Vector2(TargetActor.Position.X, TargetActor.Position.Y + 1);
                    }

                    if (TargetActor.Position.X == Actor.Position.X && TargetActor.Position.Y == Actor.Position.Y - 1)
                    {
                        Newposition = new Vector2(TargetActor.Position.X, TargetActor.Position.Y - 1);
                    }

                    if (TargetActor.Position.X == Actor.Position.X + 1 && TargetActor.Position.Y == Actor.Position.Y + 1)
                    {
                        Newposition = new Vector2(TargetActor.Position.X + 1, TargetActor.Position.Y + 1);
                    }

                    if (TargetActor.Position.X == Actor.Position.X - 1 && TargetActor.Position.Y == Actor.Position.Y - 1)
                    {
                        Newposition = new Vector2(TargetActor.Position.X - 1, TargetActor.Position.Y - 1);
                    }

                    if (TargetActor.Position.X == Actor.Position.X - 1 && TargetActor.Position.Y == Actor.Position.Y + 1)
                    {
                        Newposition = new Vector2(TargetActor.Position.X - 1, TargetActor.Position.Y + 1);
                    }

                    if (TargetActor.Position.X == Actor.Position.X + 1 && TargetActor.Position.Y == Actor.Position.Y - 1)
                    {
                        Newposition = new Vector2(TargetActor.Position.X + 1, TargetActor.Position.Y - 1);
                    }

                    if (Newposition == null || !Instance.IsValidPosition(Newposition) || (Instance.Model.DoorPosition.GetVector2().X == Newposition.X && Instance.Model.DoorPosition.GetVector2().Y == Newposition.Y))
                    {
                        return(false);
                    }

                    TargetActor.MoveTo(Newposition);
                    Actor.Chat("*" + Session.CharacterInfo.Username + " pushes " + Bits[1] + "*");
                    return(true);
                }
                else
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, Bits[1] + " is not in your area.", 0, ChatType.Whisper));
                    return(false);
                }

                #endregion

            case "pull":
                if (!Session.CharacterInfo.IsPremium || Bits.Length != 2)
                {
                    return(false);
                }

                TargetName  = UserInputFilter.FilterString(Bits[1].Trim());
                TargetActor = Instance.GetActorByReferenceId(CharacterResolverCache.GetUidFromName(TargetName));

                if (TargetActor == null || TargetActor.IsMoving)
                {
                    return(false);
                }

                if ((TargetActor.Position.X > Actor.Position.X - 10) && (TargetActor.Position.X < Actor.Position.X + 10) && (TargetActor.Position.Y > Actor.Position.Y - 10) && (TargetActor.Position.Y < Actor.Position.Y + 10) && (Instance.Model.DoorPosition.GetVector2().X == Actor.SquareInFront.X && Instance.Model.DoorPosition.GetVector2().Y == Actor.SquareInFront.Y))
                {
                    TargetActor.MoveTo(Actor.SquareInFront);
                    Actor.Chat("*" + Session.CharacterInfo.Username + " pulls " + Bits[1] + "*");
                    return(true);
                }

                Session.SendData(RoomChatComposer.Compose(Actor.Id, Bits[1] + " is not in your area.", 0, ChatType.Whisper));
                return(false);

                #endregion
                #endregion

                #region debugging
                #region items
            case "update_catalog":
            {
                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }
                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    Snowlight.Game.Catalog.CatalogManager.RefreshCatalogData(MySqlClient);
                }
                Session.SendData(NotificationMessageComposer.Compose(Localization.GetValue("command.updatecatalog.success")));
                return(true);
            }

            case "update_items":
            {
                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }
                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    Snowlight.Game.Items.ItemDefinitionManager.Initialize(MySqlClient);
                }
                Session.SendData(NotificationMessageComposer.Compose("Items reloaded"));
                return(true);
            }

                #endregion
                #region rooms
            case "unload":
                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }
                Instance.BroadcastMessage(NotificationMessageComposer.Compose("This room was unloaded!"));
                Instance.Unload();
                return(true);

            case "t":

                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }

                Session.SendData(NotificationMessageComposer.Compose("Position: " + Actor.Position.ToString() + ", Rotation: " + Actor.BodyRotation));
                return(true);

                #endregion

            case "update_rights":
                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    RightsManager.RebuildCache(MySqlClient);
                }

                return(true);

            case "effect":

                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }

                if (Bits.Length < 1)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, "Invalid syntax - :effect <id>", 0, ChatType.Whisper));
                    return(true);
                }

                int effectID;

                if (int.TryParse(Bits[1], out effectID))
                {
                    Actor.ApplyEffect(effectID);
                    Session.CurrentEffect = 0;
                }
                else
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, "Invalid syntax - :effect <id>", 0, ChatType.Whisper));
                }

                return(true);

            case "clipping":

                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }

                Actor.OverrideClipping = !Actor.OverrideClipping;
                Actor.ApplyEffect(Actor.ClippingEnabled ? 0 : 23);
                Session.CurrentEffect = 0;
                return(true);

                #endregion

                #region moderation
                #region kick
            case "superkick":      // Kick User out of the Hotel
            {
                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }

                if (Bits.Length < 2)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, Localization.GetValue("command.invalidsyntax") + " - :kick <username>", 0, ChatType.Whisper));
                    return(true);
                }

                TargetName    = UserInputFilter.FilterString(Bits[1].Trim());
                TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(TargetName));

                if (TargetSession == null || TargetSession.HasRight("moderation_tool") || !TargetSession.InRoom)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, Localization.GetValue("command.targetuser") + " '" + TargetName + "' is offline or cannot be kicked.", 0, ChatType.Whisper));
                    return(true);
                }

                SessionManager.StopSession(TargetSession.Id);

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Superkicked user from server (chat command)",
                                                       "User '" + TargetSession.CharacterInfo.Username + "' (ID " + TargetSession.CharacterId + ").");
                }

                return(true);
            }

            case "kick":     //kick User out of Room
            {
                if (!Session.HasRight("moderation_tool"))
                {
                    return(false);
                }

                if (Bits.Length < 2)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, Localization.GetValue("command.invalidsyntax") + " - :kick <username>", 0, ChatType.Whisper));
                    return(true);
                }

                TargetName    = UserInputFilter.FilterString(Bits[1].Trim());
                TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(TargetName));

                if (TargetSession == null || TargetSession.HasRight("moderation_tool") || !TargetSession.InRoom)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, Localization.GetValue("command.targetuser") + " '" + TargetName + "' is offline, not in a room, or cannot be kicked.", 0, ChatType.Whisper));
                    return(true);
                }

                RoomManager.RemoveUserFromRoom(TargetSession, true);
                TargetSession.SendData(NotificationMessageComposer.Compose(Localization.GetValue("command.kick.success")));

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Kicked user from room (chat command)",
                                                       "User '" + TargetSession.CharacterInfo.Username + "' (ID " + TargetSession.CharacterId + ").");
                }

                return(true);
            }

                #endregion
                #region mute
            case "roomunmute":
            {
                if (!Session.HasRight("mute"))
                {
                    return(false);
                }

                if (Instance.RoomMuted)
                {
                    Instance.RoomMuted = false;
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, Localization.GetValue("command.roomunmute.success"), 0, ChatType.Whisper));
                }
                else
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, Localization.GetValue("command.roomunmute.error"), 0, ChatType.Whisper));
                }

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Unmuted room", "Room '"
                                                       + Instance.Info.Name + "' (ID " + Instance.RoomId + ")");
                }

                return(true);
            }

            case "roommute":
            {
                if (!Session.HasRight("mute"))
                {
                    return(false);
                }

                if (!Instance.RoomMuted)
                {
                    Instance.RoomMuted = true;
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, Localization.GetValue("command.roommute.success"), 0, ChatType.Whisper));
                }
                else
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, Localization.GetValue("command.roommute.error"), 0, ChatType.Whisper));
                }

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Muted room", "Room '"
                                                       + Instance.Info.Name + "' (ID " + Instance.RoomId + ")");
                }

                return(true);
            }

            case "unmute":
            {
                if (!Session.HasRight("mute"))
                {
                    return(false);
                }

                if (Bits.Length < 2)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, Localization.GetValue("command.invalidsyntax") + " - :unmute <username>", 0, ChatType.Whisper));
                    return(true);
                }

                TargetName = UserInputFilter.FilterString(Bits[1].Trim());

                TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(TargetName));

                if (TargetSession == null)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, Localization.GetValue("command.targetuser") + " '" + TargetName + "' " + Localization.GetValue("command.cannotproceedcmd3"), 0, ChatType.Whisper));
                    return(true);
                }

                if (!TargetSession.CharacterInfo.IsMuted)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, Localization.GetValue("command.targetuser") + " '" + TargetName + "' " + Localization.GetValue("command.unmute.error"), 0, ChatType.Whisper));
                    return(true);
                }

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    TargetSession.CharacterInfo.Unmute(MySqlClient);
                }

                TargetSession.SendData(NotificationMessageComposer.Compose(Localization.GetValue("command.unmute.sucess")));
                Session.SendData(RoomChatComposer.Compose(Actor.Id, Localization.GetValue("command.targetuser") + " '" + TargetName + "' " + Localization.GetValue("command.unmute.sucess2"), 0, ChatType.Whisper));

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Unmuted user",
                                                       "User '" + TargetSession.CharacterInfo.Username + "' (ID " + TargetSession.CharacterId + ").");
                }

                return(true);
            }

            case "mute":
            {
                if (!Session.HasRight("mute"))
                {
                    return(false);
                }

                if (Bits.Length < 2)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, Localization.GetValue("command.invalidsyntax") + " - :mute <username> [length in seconds]", 0, ChatType.Whisper));
                    return(true);
                }

                TargetName = UserInputFilter.FilterString(Bits[1].Trim());
                int TimeToMute = 0;

                if (Bits.Length >= 3)
                {
                    int.TryParse(Bits[2], out TimeToMute);
                }

                if (TimeToMute <= 0)
                {
                    TimeToMute = 300;
                }

                if (TimeToMute > 3600)
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, Localization.GetValue("command.mute.error"), 0, ChatType.Whisper));
                    return(true);
                }

                TargetSession = SessionManager.GetSessionByCharacterId(CharacterResolverCache.GetUidFromName(TargetName));

                if (TargetSession == null || TargetSession.HasRight("mute"))
                {
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, Localization.GetValue("command.targetuser") + " '" + TargetName + "' " + Localization.GetValue("command.cannotproceedcmd4"), 0, ChatType.Whisper));
                    return(true);
                }

                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    TargetSession.CharacterInfo.Mute(MySqlClient, TimeToMute);
                    ModerationLogs.LogModerationAction(MySqlClient, Session, "Muted user",
                                                       "User '" + TargetSession.CharacterInfo.Username + "' (ID " + TargetSession.CharacterId + ") for " + TimeToMute + " seconds.");
                }

                TargetSession.SendData(RoomMutedComposer.Compose(TimeToMute));
                Session.SendData(RoomChatComposer.Compose(Actor.Id, Localization.GetValue("command.mute.sucess.part1") + " '" + TargetName + "' " + Localization.GetValue("command.mute.sucess.part2") + " " + TimeToMute + " seconds.", 0, ChatType.Whisper));
                return(true);
            }

                #endregion
                #region credits
            case "coins":
            case "credits":
                using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
                {
                    if (!Session.HasRight("hotel_admin"))
                    {
                        return(false);
                    }
                    if (Bits.Length < 2)
                    {
                        Session.SendData(RoomChatComposer.Compose(Actor.Id, "Invalid syntax - :" + Bits[0].ToLower() + " <user> <amount>", 0, ChatType.Whisper));
                        return(false);
                    }
                    int Valor;
                    if (!Int32.TryParse(Bits[2], out Valor))
                    {
                        Session.SendData(RoomChatComposer.Compose(Actor.Id, "Amount must be numeric!", 0, ChatType.Whisper));
                        return(false);
                    }

                    TargetName = UserInputFilter.FilterString(Bits[1].Trim());
                    uint UserID = CharacterResolverCache.GetUidFromName(TargetName);

                    if (UserID == 0)
                    {
                        Session.SendData(RoomChatComposer.Compose(Actor.Id, "User not found!", 0, ChatType.Whisper));
                        return(false);
                    }
                    Session TargetUser = SessionManager.GetSessionByCharacterId(UserID);
                    if (TargetUser == null)
                    {
                        Session.SendData(RoomChatComposer.Compose(Actor.Id, "User not online!", 0, ChatType.Whisper));
                        return(false);
                    }
                    TargetUser.CharacterInfo.UpdateCreditsBalance(MySqlClient, (int)Valor);
                    TargetUser.SendData(RoomChatComposer.Compose(TargetUser.Id, "You received " + Valor + " coins!", 0, ChatType.Whisper));
                    Session.SendData(RoomChatComposer.Compose(Actor.Id, TargetName + " received " + Valor + " coins!", 0, ChatType.Whisper));
                    TargetUser.SendData(CreditsBalanceComposer.Compose(TargetUser.CharacterInfo.CreditsBalance));

                    return(true);
                }

                #endregion
                #region messages
            case "ha":
            {
                if (!Session.HasRight("hotel_admin"))
                {
                    return(false);
                }
                string Alert = UserInputFilter.FilterString(MergeInputs(Bits, 1));
                SessionManager.BroadcastPacket(UserAlertModernComposer.Compose("Important notice from Hotel Management", Alert));
                return(true);
            }
                #endregion
                #endregion
            }


            return(false);
        }