Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

Plus R2.1 - Working SOS tickets?

Hakuna Matata
Joined
Sep 5, 2012
Messages
804
Reaction score
137
Hi there!
SOS tickets doesn't work and I believe it's because of wrong structure.
As finding the structure is the only thing I don't know how to do, I really need some help.

Can anyone:
  • Confirm that they also have the problem
  • Post the correct structure
  • Post a guide for finding structures


Thanks!
 
Custom Title Activated
Loyal Member
Joined
Jun 27, 2009
Messages
1,571
Reaction score
170
Okay so now does he want the structures for report a bully? Because I have it working in my hotel. I think... only thing can't do at the moment is report a bully
 
Upvote 0
Hakuna Matata
Joined
Sep 5, 2012
Messages
804
Reaction score
137
Okay so now does he want the structures for report a bully? Because I have it working in my hotel. I think... only thing can't do at the moment is report a bully

No, support tickets doesn't work.
When you pick them, you disconnect.
 
Upvote 0
Custom Title Activated
Loyal Member
Joined
Jun 27, 2009
Messages
1,571
Reaction score
170
Oh here you go...

ModerationTool.cs:

Code:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Silverwave.Collections;
using Silverwave.Core;
using Silverwave.HabboHotel.GameClients;
using Silverwave.HabboHotel.Rooms;
using Silverwave.HabboHotel.Rooms.RoomInvokedItems;
using Silverwave.Messages;
using Database_Manager.Database.Session_Details.Interfaces;
using Silverwave.Messages.Headers;
using Silverwave.HabboHotel.Users;
using System.Collections.Specialized;

namespace Silverwave.HabboHotel.Support
{
    public class ModerationTool
    {
        #region General

        internal List<SupportTicket> Tickets;

        internal List<string> UserMessagePresets;
        internal List<string> RoomMessagePresets;
        internal StringDictionary SupportTicketHints;

        internal ModerationTool()
        {
            Tickets = new List<SupportTicket>();
            UserMessagePresets = new List<string>();
            RoomMessagePresets = new List<string>();
            SupportTicketHints = new StringDictionary();
        }

        internal ServerMessage SerializeTool()
        {
            ServerMessage Response = new ServerMessage(Outgoing.OpenModTools);
            Response.AppendInt32(Tickets.Count);
            foreach (SupportTicket ticket in Tickets)
            {
                ticket.Serialize(Response);
            }

            Response.AppendInt32(UserMessagePresets.Count);
            foreach (String Preset in UserMessagePresets)
            {
                Response.AppendString(Preset);
            }
            using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
            {
                dbClient.setQuery("SELECT * from moderation_templates where category = '1' ");
                DataTable PII = dbClient.getTable();

                dbClient.setQuery("SELECT * from moderation_templates where category = '2' ");
                DataTable sex = dbClient.getTable();

                Response.AppendInt32(2);
                Response.AppendString("PII");
                Response.AppendBoolean(true);
                Response.AppendInt32(PII.Rows.Count); //array count

                foreach (DataRow PIIRow in PII.Rows)
                {
                    Response.AppendString(Convert.ToString(PIIRow["name"])); //type
                    Response.AppendString(Convert.ToString(PIIRow["banmessage"])); //ban message
                    Response.AppendInt32(Convert.ToInt32(PIIRow["Banhours"]));
                    Response.AppendInt32(Convert.ToInt32(PIIRow["AvatarBan"]));
                    Response.AppendInt32(Convert.ToInt32(PIIRow["Mute"]));
                    Response.AppendInt32(Convert.ToInt32(PIIRow["TradeLock"]));/// REMOVE THIS LINE IF YOUR NOT USING THE NEW_UI
                    Response.AppendString(Convert.ToString(PIIRow["Warningmessage"])); // warning message

                }

                Response.AppendString("Sexually Explicit");
                Response.AppendBoolean(false);
                Response.AppendInt32(sex.Rows.Count); //array count
                foreach (DataRow Sex in sex.Rows)
                {
                    Response.AppendString(Convert.ToString(Sex["name"])); //type
                    Response.AppendString(Convert.ToString(Sex["banmessage"])); //ban message
                    Response.AppendInt32(Convert.ToInt32(Sex["Banhours"]));
                    Response.AppendInt32(Convert.ToInt32(Sex["AvatarBan"]));
                    Response.AppendInt32(Convert.ToInt32(Sex["Mute"]));
                    Response.AppendInt32(Convert.ToInt32(Sex["TradeLock"])); /// REMOVE THIS LINE IF YOUR NOT USING THE NEW_UI
                    Response.AppendString(Convert.ToString(Sex["Warningmessage"])); // warning message

                }
            }


            /*Response.AppendString("PII");
            Response.AppendBoolean(true);
            Response.AppendInt32(1);
            Response.AppendString("HI");
            Response.AppendString("BYE");
            Response.AppendInt32(1);
            Response.AppendInt32(1);

            Response.AppendString("Sexually Explicit");
            Response.AppendBoolean(true);
            Response.AppendInt32(1);
            Response.AppendString("HI");
            Response.AppendString("NIIZ IS QUEER");
            Response.AppendInt32(1);
            Response.AppendInt32(10); // 1 = mute 1 hr, 2 = mute 2 hr*/

            /*Response.AppendString("TEST2"); // Category
            Response.AppendUInt(2); //Mod Actions Count
            Response.AppendString("TEST3"); // Name
            Response.AppendString("TEST4"); // Value
            Response.AppendString("TEST3"); // Name
            Response.AppendString("TEST4"); // Value*/

            // Permissions
            Response.AppendBoolean(true); // ticket_queue fuse
            Response.AppendBoolean(true); // chatlog fuse
            Response.AppendBoolean(true); // message / caution fuse
            Response.AppendBoolean(true); // kick fuse
            Response.AppendBoolean(true); // band fuse
            Response.AppendBoolean(true); // broadcastshit fuse
            Response.AppendBoolean(true);

            // Room tool notices
            Response.AppendInt32(RoomMessagePresets.Count);
            foreach (String Preset in RoomMessagePresets)
            {
                Response.AppendString(Preset);
            }

            /*Response.AppendInt32(0); // actionType
            Response.AppendInt32(0); // actionLen
            Response.AppendInt32(0); // action multiplier (repeat x times)
             */

            /*
            Response.AppendInt32(-1);

            Response.AppendInt32(UserMessagePresets.Count);
                foreach (String Preset in UserMessagePresets)
                {
                    Response.AppendString(Preset);
                }
            Response.AppendUInt(6); //Mod Actions Count

            Response.AppendString("Common Problems"); // modaction Cata
            Response.AppendUInt(8); // ModAction Count
            Response.AppendString("Inappropriate Actions"); // mod action Cata
            Response.AppendString("Your actions have been deemed inappropriate and adverse action may be taken on your account if you do not stop."); // Msg
            Response.AppendString("Swearing"); // Mod Action Cata
            Response.AppendString("Your language has been deemed inappropriate and adverse action may be taken on your account if you do not stop."); // Msg
            Response.AppendString("Scamming");// Mod Action Cata
            Response.AppendString("Unfortunately, action can not be taken against scammers without proof of a scam. If you believe you have proof of a scam, please post it on our forums at Habbo.vc.com/forum in the Scammers section. "); // Msg
            Response.AppendString("Staff Applications"); // Mod Cata
            Response.AppendString("When Habbo.vc is looking for staff members, an article will go up on the homepage. Please keep checking back."); // Msg
            Response.AppendString("Flooding/Spamming"); // Mod Cata
            Response.AppendString("Do not flood/spam the room with senseless speech. Doing so may cause you to be kicked or banned from the room."); // Msg
            Response.AppendString("Coins"); // Mod Cata
            Response.AppendString("150 coins are distributed every 15 minutes on Habbo.vc, you can alternatively buy more credits from Habbo.vc.com/purchases"); // Msg
            Response.AppendString("VIP/coins hasn’t arrived"); // Mod Cata
            Response.AppendString("If you have been waiting longer than 48 hours for your VIP and/or coins to arrive, please email VIP@SilverwaveIndustry.com."); // Msg
            Response.AppendString("How to get VIP"); // Mod Cata
            Response.AppendString("You can purchase VIP through PayPal or PayGol (mobile phone). Go to Habbo.vc.com/purchases for more information."); // Msg

            Response.AppendString("Bugs");// modaction Cata
            Response.AppendUInt(8); // ModAction Count
            Response.AppendString("SilverwaveEMU Bug"); // mod action Cata
            Response.AppendString("If you have found a bug with SilverwaveEMU, please report it on our forums at Habbo.vc.com/forum"); // Msg
            Response.AppendString("General Bug"); // Mod Action Cata
            Response.AppendString("If you have found a bug on the client, please report it on our forums at Habbo.vc.com/forum"); // Msg
            Response.AppendString("Something not loading");// Mod Action Cata
            Response.AppendString("If something is not loading for you on Habbo.vc, make sure you clear your browsers cache and then reload the hotel. More information on how to clear your browsers cache can be found at http://bit.ly/plusclearcache"); // Msg
            Response.AppendString("Disconnection"); // Mod Cata
            Response.AppendString("If you are constantly disconnecting make sure you do not have two clients open and also that you clear your browsers cache. More information on how to clear your browsers cache can be found at http://bit.ly/plusclearcache"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg

            Response.AppendString("Room Problems");// modaction Cata
            Response.AppendUInt(8); // ModAction Count
            Response.AppendString("Swearing"); // mod action Cata
            Response.AppendString("Please stop using abusive speech. Swearing is allowed on Habbo.vc but not when it is directed in a hateful way towards other users."); // Msg
            Response.AppendString("Room Name Problem"); // Mod Action Cata
            Response.AppendString("Please change the name of your room or your room will be shut down."); // Msg
            Response.AppendString("NILL");// Mod Action Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg

            Response.AppendString("Ban Reasons");// modaction Cata
            Response.AppendUInt(8); // ModAction Count
            Response.AppendString("Advertising"); // mod action Cata
            Response.AppendString("Advertising another retro hotel in-game (Perm IP ban)"); // Msg
            Response.AppendString("Scamming (with evidence)"); // Mod Action Cata
            Response.AppendString("Scamming (3 day ban)"); // Msg
            Response.AppendString("Constant Abuse (after warning)");// Mod Action Cata
            Response.AppendString("Abuse against hotel staff and/or players (4 hour ban)"); // Msg
            Response.AppendString("Abuse of CFH (after warning)"); // Mod Cata
            Response.AppendString("Abuse of the call for help system (2 hour ban)"); // Msg
            Response.AppendString("Jayden Rocks!"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg

            Response.AppendString("Debug Problems - Original");// modaction Cata
            Response.AppendUInt(8); // ModAction Count
            Response.AppendString("Lag"); // mod action Cata
            Response.AppendString("We will Check the problem for you now can you give us more infomation about what's happens"); // Msg
            Response.AppendString("Disconnection"); // Mod Action Cata
            Response.AppendString("What happens and how happens please explain us"); // Msg
            Response.AppendString("
             * problem");// Mod Action Cata
            Response.AppendString("Please Contact The Player Support For this problem"); // Msg
            Response.AppendString("Char Filter"); // Mod Cata
            Response.AppendString("Can you say The usersname and explain us what happens"); // Msg
            Response.AppendString("System check"); // Mod Cata
            Response.AppendString("We already checking every debug stuff"); // Msg
            Response.AppendString("Error from WireEncoding"); // Mod Cata
            Response.AppendString("Can you say explain us what happens"); // Msg
            Response.AppendString("Error from BASE64"); // Mod Cata
            Response.AppendString("Can you explain us what happens"); // Msg
            Response.AppendString("Error from Flash player"); // Mod Cata
            Response.AppendString("Can you explain us what happens"); // Msg

            Response.AppendString("System Problems - Original");// modaction Cata
            Response.AppendUInt(8); // ModAction Count
            Response.AppendString("Version"); // mod action Cata
            Response.AppendString("Ask a Administrator For more Information"); // Msg
            Response.AppendString("Swf Version?"); // Mod Action Cata
            Response.AppendString("Currenly We use the same version like Habbo.com"); // Msg
            Response.AppendString("Freeze");// Mod Action Cata
            Response.AppendString("Please Contact The Player Support For this problem"); // Msg
            Response.AppendString("Name Filter"); // Mod Cata
            Response.AppendString("Can you say The usersname and explain us what happens"); // Msg
            Response.AppendString("Nickname Filter"); // Mod Cata
            Response.AppendString("Can you say The usersname and explain us what happens"); // Msg
            Response.AppendString("System Filter"); // Mod Cata
            Response.AppendString("Can you say The usersname and explain us what happens"); // Msg
            Response.AppendString("Cursing Filter"); // Mod Cata
            Response.AppendString("Can you say The usersname and explain us what happens"); // Msg
            Response.AppendString("Update Filter"); // Mod Cata
            Response.AppendString("We will update your words in the filter Thanks for report."); // Msg

            Response.AppendBoolean(true); // ticket_queue fuse
            Response.AppendBoolean(true); // chatlog fuse
            Response.AppendBoolean(true); // message / caution fuse
            Response.AppendBoolean(true); // kick fuse
            Response.AppendBoolean(true); // band fuse
            Response.AppendBoolean(true); // broadcastshit fuse
            Response.AppendBoolean(true); // other poop fuse

            Response.AppendInt32(RoomMessagePresets.Count);
                foreach (String Preset in RoomMessagePresets)
                {
                    Response.AppendString(Preset);
                }
            Response.AppendInt32(0); // undef
            Response.AppendString(""); // undef
            Response.AppendString(""); // undef
            Response.AppendInt32(0); // count of actions
            Response.AppendInt32(0); // count of actions

            Response.AppendString(""); // undef
            Response.AppendString(""); // undef
            /*Response.AppendInt32(0); // actionType
            Response.AppendInt32(0); // actionLen
            Response.AppendInt32(0); // action multiplier (repeat x times)
             */
            return Response;
        }

        #endregion

        #region Message Presets

        internal void LoadMessagePresets(IQueryAdapter dbClient)
        {
            UserMessagePresets.Clear();
            RoomMessagePresets.Clear();
            SupportTicketHints.Clear();

            dbClient.setQuery("SELECT type,message FROM moderation_presets WHERE enabled = 2");
            DataTable Data = dbClient.getTable();

            dbClient.setQuery("SELECT word,hint FROM moderation_tickethints");
            DataTable Hints = dbClient.getTable();

            if (Data == null || Hints == null)
                return;

            foreach (DataRow Row in Data.Rows)
            {
                String Message = (String)Row["message"];

                switch (Row["type"].ToString().ToLower())
                {
                    case "message":

                        UserMessagePresets.Add(Message);
                        break;

                    case "roommessage":

                        RoomMessagePresets.Add(Message);
                        break;
                }
            }

            foreach (DataRow Row in Hints.Rows)
            {
                SupportTicketHints.Add((string)Row[0], (string)Row[1]);
            }
        }

        #endregion

        #region Support Tickets

        internal void LoadPendingTickets(IQueryAdapter dbClient)
        {
            dbClient.runFastQuery("TRUNCATE TABLE moderation_tickets");
            //dbClient.setQuery("SELECT moderation_tickets.*, p1.username AS sender_username, p2.username AS reported_username, p3.username AS moderator_username FROM moderation_tickets LEFT OUTER JOIN users AS p1 ON moderation_tickets.sender_id = p1.id LEFT OUTER JOIN users AS p2 ON moderation_tickets.reported_id = p2.id LEFT OUTER JOIN users AS p3 ON moderation_tickets.moderator_id = p3.id WHERE moderation_tickets.status != 'resolved'");
            //DataTable Data = dbClient.getTable();

            //if (Data == null)
            //{
            //    return;
            //}

            //foreach (DataRow Row in Data.Rows)
            //{
            //    SupportTicket Ticket = new SupportTicket(Convert.ToUInt32(Row["id"]), (int)Row["score"], (int)Row["type"], Convert.ToUInt32(Row["sender_id"]), Convert.ToUInt32(Row["reported_id"]), (String)Row["message"], Convert.ToUInt32(Row["room_id"]), (String)Row["room_name"], (Double)Row["timestamp"], Row["sender_username"], Row["reported_username"], Row["moderator_username"]);

            //    if (Row["status"].ToString().ToLower() == "picked")
            //    {
            //        Ticket.Pick(Convert.ToUInt32(Row["moderator_id"]), false);
            //    }

            //    Tickets.Add(Ticket);
            //}
        }

        internal void SendNewTicket(GameClient Session, int Category, uint ReportedUser, string Message, List<string> Messages)
        {
            UInt32 Id = 0;


            if (Session.GetHabbo().CurrentRoomId <= 0)
            {
                using (IQueryAdapter DBClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    DBClient.setQuery(string.Concat(new object[]
                        {
                            "INSERT INTO moderation_tickets (score,status,sender_id,reported_id,moderator_id,message,room_id,room_name,timestamp) VALUES (1,'open','",
                            Session.GetHabbo().Id,
                            "','",
                            ReportedUser,
                            "','0'  [USER=782815]messa[/USER]ge,'0','','",
                            SilverwaveEnvironment.GetUnixTimestamp(),
                            "')"
                        }));
                    DBClient.addParameter("message", Message);
                    Id = (uint)DBClient.insertQuery();
                    DBClient.runFastQuery("UPDATE user_info SET cfhs = cfhs + 1 WHERE user_id = " + Session.GetHabbo().Id);
                }


                SupportTicket Ticket = new SupportTicket(Id, 1, Session.GetHabbo().Id, ReportedUser, Message, 0, "", (double)SilverwaveEnvironment.GetUnixTimestamp(), Messages);
                this.Tickets.Add(Ticket);
                ModerationTool.SendTicketToModerators(Ticket);
                return;
            }


            RoomData Data = SilverwaveEnvironment.GetGame().GetRoomManager().GenerateNullableRoomData(Session.GetHabbo().CurrentRoomId);
            using (IQueryAdapter DBClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
            {
                DBClient.setQuery(string.Concat(new object[]
                    {
                        "INSERT INTO moderation_tickets (score,status,sender_id,reported_id,moderator_id,message,room_id,room_name,timestamp) VALUES (1,'open','",
                        Session.GetHabbo().Id,
                        "','",
                        ReportedUser,
                        "','0'  [USER=782815]messa[/USER]ge,'",
                        Data.Id,
                        "'  [USER=1333344765]name[/USER],'",
                        SilverwaveEnvironment.GetUnixTimestamp(),
                        "')"
                    }));
                DBClient.addParameter("message", Message);
                DBClient.addParameter("name", Data.Name);
                Id = (uint)DBClient.insertQuery();
                DBClient.runFastQuery("UPDATE user_info SET cfhs = cfhs + 1 WHERE user_id = " + Session.GetHabbo().Id);
            }
            SupportTicket Ticket2 = new SupportTicket(Id, 1, Session.GetHabbo().Id, ReportedUser, Message, 0, "", (double)SilverwaveEnvironment.GetUnixTimestamp(), Messages);
            this.Tickets.Add(Ticket2);
            ModerationTool.SendTicketToModerators(Ticket2);
        }

        internal void SerializeOpenTickets(ref QueuedServerMessage serverMessages, uint userID)
        {
            ServerMessage Response = new ServerMessage(Outgoing.SerializeIssue);
            foreach (SupportTicket ticket in Tickets)
            {
                if (ticket.Status == TicketStatus.OPEN || (ticket.Status == TicketStatus.PICKED && ticket.ModeratorId == userID) || (ticket.Status == TicketStatus.PICKED && ticket.ModeratorId == 0))
                {
                    Response = ticket.Serialize(Response);
                    serverMessages.appendResponse(Response);
                }
            }
        }

        internal SupportTicket GetTicket(uint TicketId)
        {
            foreach (SupportTicket Ticket in Tickets)
            {
                if (Ticket.TicketId == TicketId)
                {
                    return Ticket;
                }
            }
            return null;
        }

        internal void PickTicket(GameClient Session, uint TicketId)
        {
            SupportTicket Ticket = GetTicket(TicketId);

            if (Ticket == null || Ticket.Status != TicketStatus.OPEN)
            {
                return;
            }

            Ticket.Pick(Session.GetHabbo().Id, true);
            SendTicketToModerators(Ticket);
        }

        internal void ReleaseTicket(GameClient Session, uint TicketId)
        {
            SupportTicket Ticket = GetTicket(TicketId);

            if (Ticket == null || Ticket.Status != TicketStatus.PICKED || Ticket.ModeratorId != Session.GetHabbo().Id)
            {
                return;
            }

            Ticket.Release(true);
            SendTicketToModerators(Ticket);
        }

        internal void CloseTicket(GameClient Session, uint TicketId, int Result)
        {
            SupportTicket Ticket = GetTicket(TicketId);

            if (Ticket == null || Ticket.Status != TicketStatus.PICKED || Ticket.ModeratorId != Session.GetHabbo().Id)
            {
                return;
            }

            GameClient Client = SilverwaveEnvironment.GetGame().GetClientManager().GetClientByUserID(Ticket.SenderId);

            TicketStatus NewStatus;
            int ResultCode = 0;
            switch (Result)
            {
                case 1:

                    ResultCode = 1;
                    NewStatus = TicketStatus.INVALID;
                    //Client.SendNotif("Your ticket has been closed as invalid.");
                    break;

                case 2:

                    ResultCode = 2;
                    NewStatus = TicketStatus.ABUSIVE;

                    using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                    {
                        dbClient.runFastQuery("UPDATE user_info SET cfhs_abusive = cfhs_abusive + 1 WHERE user_id = " + Ticket.SenderId + "");
                    }
                    //Client.SendNotif("Abusive ticket");

                    break;

                case 3:
                default:

                    ResultCode = 0;
                    NewStatus = TicketStatus.RESOLVED;
                    //Client.SendNotif("Thanks, all the issues have been resolved.");
                    break;
            }

            if (Client != null)
            {
                Client.GetMessageHandler().GetResponse().Init(Outgoing.UpdateIssue);
                Client.GetMessageHandler().GetResponse().AppendInt32(1); // size
                Client.GetMessageHandler().GetResponse().AppendInt32(Ticket.TicketId);
                Client.GetMessageHandler().GetResponse().AppendInt32(Ticket.ModeratorId);
                Client.GetMessageHandler().GetResponse().AppendString((SilverwaveEnvironment.getHabboForId(Ticket.ModeratorId) != null) ? (SilverwaveEnvironment.getHabboForId(Ticket.ModeratorId).Username) : "Undefined");
                Client.GetMessageHandler().GetResponse().AppendBoolean(false); // retryEnabled
                Client.GetMessageHandler().GetResponse().AppendInt32(0); // retryEnabled
                //Client.GetMessageHandler().SendResponse();
                Client.GetMessageHandler().GetResponse().Init(Outgoing.ModResponseTicket);
                Client.GetMessageHandler().GetResponse().AppendInt32(ResultCode);
                Client.GetMessageHandler().SendResponse();
            }
            using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                dbClient.runFastQuery("UPDATE user_stats SET tickets_answered = tickets_answered+1 WHERE id=" + Session.GetHabbo().Id + " LIMIT 1");
            Ticket.Close(NewStatus, true);
            //SendTicketUpdateToModerators(Ticket);
            SendTicketToModerators(Ticket);
        }

        internal Boolean UsersHasPendingTicket(UInt32 Id)
        {
            foreach (SupportTicket Ticket in Tickets)
            {
                if (Ticket.SenderId == Id && Ticket.Status == TicketStatus.OPEN)
                {
                    return true;
                }
            }
            return false;
        }

        internal void DeletePendingTicketForUser(UInt32 Id)
        {
            foreach (SupportTicket Ticket in Tickets)
            {
                if (Ticket.SenderId == Id)
                {
                    Ticket.Delete(true);
                    SendTicketToModerators(Ticket);
                    return;
                }
            }
        }

        internal static void SendTicketUpdateToModerators(SupportTicket Ticket)
        {
            //SilverwaveEnvironment.GetGame().GetClientManager().QueueBroadcaseMessage(Ticket.SerializeUpdate(), "fuse_mod");
        }

        internal static void SendTicketToModerators(SupportTicket Ticket)
        {
            ServerMessage Response = new ServerMessage(Outgoing.SerializeIssue);
            Response = Ticket.Serialize(Response);
            SilverwaveEnvironment.GetGame().GetClientManager().QueueBroadcaseMessage(Response, "fuse_mod");
        }


        internal void LogStaffEntry(string modName, string target, string type, string description)
        {
            using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
            {
                dbClient.setQuery("INSERT INTO staff_logs (staffuser,target,action_type,description) VALUES (@username  [USER=1333461823]Target[/USER]  [USER=1333375725]Type[/USER]  [USER=275999]des[/USER]c)");
                dbClient.addParameter("username", modName);
                dbClient.addParameter("target", target);
                dbClient.addParameter("type", type);
                dbClient.addParameter("desc", description);
                dbClient.runQuery();
            }
        }
        #endregion

        #region Room Moderation

        internal static void PerformRoomAction(GameClient ModSession, uint RoomId, Boolean KickUsers, Boolean LockRoom, Boolean InappropriateRoom, ServerMessage Message)
        {
            Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(RoomId);

            if (Room == null)
            {
                return;
            }

            if (LockRoom)
            {
                Room.State = 1;

                using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    dbClient.runFastQuery("UPDATE rooms SET state = 'locked' WHERE id = " + Room.RoomId);
                }
                Room.Name = "Inappropriate to Hotel Management";
            }

            if (InappropriateRoom)
            {
                Room.Name = LanguageLocale.GetValue("moderation.room.roomclosed");
                Room.Description = LanguageLocale.GetValue("moderation.room.roomclosed");
                Room.ClearTags();

                using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    dbClient.runFastQuery("UPDATE rooms SET caption = 'Inappropriate to Hotel Management', description = 'Inappropriate to Hotel Management', tags = '' WHERE id = " + Room.RoomId + "");
                }
            }

            if (KickUsers)
            {
                onCycleDoneDelegate kick = new onCycleDoneDelegate(Room.onRoomKick);
                Room.GetRoomUserManager().UserList.QueueDelegate(kick);
            }
        }

        internal static ServerMessage SerializeRoomTool(RoomData Data)
        {
            Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Data.Id);

            ServerMessage Message = new ServerMessage(Outgoing.RoomTool);
            Message.AppendInt32(Data.Id);
            Message.AppendInt32(Data.UsersNow); // user count

            if (Room != null)
            {
                Message.AppendBoolean((Room.GetRoomUserManager().GetRoomUserByHabbo(Data.Owner) != null));
            }
            else
            {
                Message.AppendBoolean(false);
            }
            Message.AppendInt32(Room.OwnerId);
            Message.AppendString(Data.Owner);
            Message.AppendBoolean((Room != null)); // show data?

            Message.AppendString(Data.Name);
            Message.AppendString(Data.Description);
            Message.AppendInt32(Data.TagCount);

            foreach (string Tag in Data.Tags)
            {
                Message.AppendString(Tag);
            }

            Message.AppendBoolean(false);

            return Message;
        }

        #endregion

        #region User Moderation

        internal static void KickUser(GameClient ModSession, uint UserId, String Message, Boolean Soft)
        {
            GameClient Client = SilverwaveEnvironment.GetGame().GetClientManager().GetClientByUserID(UserId);

            if (Client == null || Client.GetHabbo().CurrentRoomId < 1 || Client.GetHabbo().Id == ModSession.GetHabbo().Id)
            {
                return;
            }

            if (Client.GetHabbo().Rank >= ModSession.GetHabbo().Rank)
            {
                ModSession.SendNotif(LanguageLocale.GetValue("moderation.kick.missingrank"));
                return;
            }

            Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Client.GetHabbo().CurrentRoomId);

            if (Room == null)
            {
                return;
            }

            Room.GetRoomUserManager().RemoveUserFromRoom(Client, true, false);
            Client.CurrentRoomUserID = -1;

            if (!Soft)
            {
                Client.SendNotif(Message);

                using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    dbClient.runFastQuery("UPDATE user_info SET cautions = cautions + 1 WHERE user_id = " + UserId + "");
                }
            }
        }

        internal static void AlertUser(GameClient ModSession, uint UserId, String Message, Boolean Caution)
        {
            GameClient Client = SilverwaveEnvironment.GetGame().GetClientManager().GetClientByUserID(UserId);

            if (Client == null)
            {
                return;
            }

            Client.SendNotif(Message);
        }

        internal static void BanUser(GameClient ModSession, uint UserId, int Length, String Message)
        {
            GameClient Client = SilverwaveEnvironment.GetGame().GetClientManager().GetClientByUserID(UserId);

            if (Client == null || Client.GetHabbo().Id == ModSession.GetHabbo().Id)
            {
                return;
            }

            if (Client.GetHabbo().Rank >= ModSession.GetHabbo().Rank)
            {
                ModSession.SendNotif(LanguageLocale.GetValue("moderation.ban.missingrank"));
                return;
            }

            Double dLength = Length;

            SilverwaveEnvironment.GetGame().GetBanManager().BanUser(Client, ModSession.GetHabbo().Username, dLength, Message, false, false);
        }

        #endregion

        #region User Info

        internal static ServerMessage SerializeUserInfo(uint UserId)
        {
            using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
            {
                dbClient.setQuery("SELECT id, username, online, mail, ip_reg, look 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(Outgoing.UserTool);

                Message.AppendInt32(Convert.ToUInt32(User["id"]));
                Message.AppendString((string)User["username"]);
                Message.AppendString((string)User["look"]);
                if (Info != null)
                {
                    Message.AppendInt32((int)Math.Ceiling((SilverwaveEnvironment.GetUnixTimestamp() - (Double)Info["reg_timestamp"]) / 60));
                    Message.AppendInt32((int)Math.Ceiling((SilverwaveEnvironment.GetUnixTimestamp() - (Double)Info["login_timestamp"]) / 60));
                }
                else
                {
                    Message.AppendInt32(0);
                    Message.AppendInt32(0);
                }

                Message.AppendBoolean(SilverwaveEnvironment.GetGame().GetClientManager().GetClientByUserID(Convert.ToUInt32(User["id"])) != null);

                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
                }
                Message.AppendInt32(0); // trading_lock_count_txt
                Message.AppendString(""); // trade_lock_expire_txt
                Message.AppendString((string)User["ip_reg"]); // last_purchase_txt
                Message.AppendInt32(0); // identityinformationtool.url + this
                Message.AppendInt32(0); // id_bans_txt
                Message.AppendString((string)User["mail"]); // email_address_txt  
                Message.AppendString(""); // ???

                return Message;
            }
        }

        internal static ServerMessage SerializeRoomVisits(UInt32 UserId)
        {
            using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
            {
                dbClient.setQuery("SELECT room_id,hour,minute FROM user_roomvisits WHERE user_id = " + UserId + " ORDER BY entry_timestamp DESC LIMIT 50");
                DataTable Data = dbClient.getTable();

                ServerMessage Message = new ServerMessage(Outgoing.RoomVisits);
                Message.AppendInt32(UserId);
                Message.AppendString(SilverwaveEnvironment.GetGame().GetClientManager().GetNameById(UserId));

                if (Data != null)
                {
                    Message.AppendInt32(Data.Rows.Count);

                    foreach (DataRow Row in Data.Rows)
                    {
                        RoomData RoomData = SilverwaveEnvironment.GetGame().GetRoomManager().GenerateNullableRoomData(Convert.ToUInt32(Row["room_id"]));
                        Message.AppendBoolean(false); // Public room
                        Message.AppendInt32(RoomData.Id);
                        Message.AppendString(RoomData.Name);
                        Message.AppendInt32((int)Row["hour"]);
                        Message.AppendInt32((int)Row["minute"]);
                    }
                }
                else
                {
                    Message.AppendInt32(0);
                }

                return Message;
            }
        }

        #endregion

        #region Chatlogs

        internal static ServerMessage SerializeUserChatlog(UInt32 UserId)
        {
            using (IQueryAdapter dbClient = SilverwaveEnvironment.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(Outgoing.UserChatlog);
                Message.AppendInt32(UserId);
                Message.AppendString(SilverwaveEnvironment.GetGame().GetClientManager().GetNameById(UserId));
                if (Visits != null)
                {
                    Message.AppendInt32(Visits.Rows.Count);


                    foreach (DataRow Visit in Visits.Rows)
                    {
                        DataTable Chatlogs = null;
                        if ((Double)Visit["exit_timestamp"] <= 0)
                        {
                            Visit["exit_timestamp"] = SilverwaveEnvironment.GetUnixTimestamp();
                        }


                        dbClient.setQuery("SELECT user_id,timestamp,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 LIMIT 150");
                        Chatlogs = dbClient.getTable();
                        RoomData RoomData = SilverwaveEnvironment.GetGame().GetRoomManager().GenerateNullableRoomData((UInt32)Visit["room_id"]);


                        Message.AppendByte(1);
                        Message.AppendShort(2);
                        Message.AppendString("roomName");
                        Message.AppendByte(2);
                        Message.AppendString(RoomData.Name);
                        Message.AppendString("roomId");
                        Message.AppendByte(1);
                        Message.AppendInt32(RoomData.Id);
                        if (Chatlogs != null)
                        {
                            Message.AppendShort(Chatlogs.Rows.Count);
                            foreach (DataRow Log in Chatlogs.Rows)
                            {
                                Habbo Habbo = SilverwaveEnvironment.getHabboForId(Convert.ToUInt32(Log["user_id"]));
                                DateTime Time = SilverwaveEnvironment.UnixToDateTime(Convert.ToDouble(Log["timestamp"]));
                                //Message.AppendInt32(Time.Hour);
                                Message.AppendInt32(Time.Minute);
                                Message.AppendInt32(Habbo.Id);
                                Message.AppendString(Habbo.Username);
                                Message.AppendString((string)Log["message"]);
                                Message.AppendBoolean(false);
                            }
                        }
                        else
                        {
                            Message.AppendInt32(0);
                        }
                    }
                }
                else
                {
                    Message.AppendInt32(0);
                }


                return Message;
            }
        }

        internal static ServerMessage SerializeTicketChatlog(SupportTicket Ticket, RoomData RoomData, Double Timestamp)
        {
            using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
            {
                dbClient.setQuery("SELECT user_id,timestamp,message FROM chatlogs WHERE room_id = " + RoomData.Id + " AND (timestamp >= " + (Timestamp - 300) + " AND timestamp <= " + Timestamp + ") OR (timestamp >= " + (Timestamp - 300) + " AND timestamp = 0) ORDER BY timestamp DESC LIMIT 150");
                DataTable Data = dbClient.getTable();

                ServerMessage Message = new ServerMessage(Outgoing.IssueChatlog);
                Message.AppendInt32(Ticket.TicketId);
                Message.AppendInt32(Ticket.SenderId);
                Message.AppendInt32(Ticket.ReportedId);
                Message.AppendInt32(RoomData.Id);
                Message.AppendBoolean(false); // Public room
                Message.AppendInt32(RoomData.Id);
                Message.AppendString(RoomData.Name);

                if (Data != null)
                {
                    Message.AppendInt32(Data.Rows.Count);

                    foreach (DataRow Row in Data.Rows)
                    {
                        Habbo Habbo = SilverwaveEnvironment.getHabboForId(Convert.ToUInt32(Row["user_id"]));
                        DateTime Time = SilverwaveEnvironment.UnixToDateTime(Convert.ToDouble(Row["timestamp"]));
                        //Message.AppendInt32(Time.Hour);
                        Message.AppendInt32(Time.Minute);
                        Message.AppendInt32(Habbo.Id);
                        Message.AppendString(Habbo.Username);
                        Message.AppendString((String)Row["message"]);
                    }
                }
                else
                {
                    Message.AppendInt32(0);
                }

                return Message;
            }
        }


        internal static ServerMessage SerializeRoomChatlog(uint roomID)
        {
            // NEW CHATLOGS [March 2014] Coded by Finn
            // Please don't remove credits, this took me some time to do... :(
            // Credits to Itachi for the structure's "context" enigma :D




            ServerMessage Message = new ServerMessage();
            RoomData Room = SilverwaveEnvironment.GetGame().GetRoomManager().GenerateRoomData(roomID);
            if (Room == null)
            {
                throw new NullReferenceException("No room found.");
            }




            Message.Init(Outgoing.RoomChatlog);
            Message.AppendByte(1);
            Message.AppendShort(2);
            Message.AppendString("roomName");
            Message.AppendByte(2);
            Message.AppendString(Room.Name);
            Message.AppendString("roomId");
            Message.AppendByte(1);
            Message.AppendInt32(Room.Id);




            Message.AppendShort(Room.RoomChat.Count);
            Room.RoomChat.Reverse();
            foreach (Chatlog Log in Room.RoomChat)
            {
                Habbo Habbo = SilverwaveEnvironment.getHabboForId(Log.UserId);
                DateTime Date = SilverwaveEnvironment.UnixToDateTime(Log.Timestamp);
                if (Habbo == null)
                {
                    Message.AppendInt32((DateTime.Now - Date).Seconds);
                    Message.AppendInt32(Log.UserId);
                    Message.AppendString("*User not found*");
                    Message.AppendString(Log.Message);
                    Message.AppendBoolean(true);
                }
                else
                {
                    Message.AppendInt32((DateTime.Now - Date).Seconds);
                    Message.AppendInt32(Habbo.Id);
                    Message.AppendString(Habbo.Username);
                    Message.AppendString(Log.Message);
                    Message.AppendBoolean(false); // Text is bold
                }
            }
            Room.RoomChat.Reverse();
            return Message;
        }

    }
        #endregion
}

SupportTicket.cs

Code:
using System;

using Silverwave.Messages;
using Silverwave.HabboHotel.Rooms;
using Database_Manager.Database.Session_Details.Interfaces;
using Silverwave.Messages.Headers;
using Silverwave.Core;
using System.Collections.Generic;
namespace Silverwave.HabboHotel.Support
{
    enum TicketStatus
    {
        OPEN = 0,
        PICKED = 1,
        RESOLVED = 2,
        ABUSIVE = 3,
        INVALID = 4,
        DELETED = 5
    }

    class SupportTicket
    {
        private UInt32 Id;
        internal Int32 Score;
        internal Int32 Type;

        internal TicketStatus Status;

        internal UInt32 SenderId;
        internal UInt32 ReportedId;
        internal UInt32 ModeratorId;

        internal String Message;

        internal UInt32 RoomId;
        internal String RoomName;

        internal Double Timestamp;
        internal List<string> ReportedChats;

        private string SenderName;
        private string ReportedName;
        private string ModName;

        internal int TabId
        {
            get
            {
                if (Status == TicketStatus.OPEN)
                {
                    return 1;
                }

                if (Status == TicketStatus.PICKED)
                {
                    return 2;
                }

                if (Status == TicketStatus.ABUSIVE || Status == TicketStatus.INVALID || Status == TicketStatus.RESOLVED)
                    return 0;

                if (Status == TicketStatus.DELETED)
                    return 0;

                return 0;
            }
        }

        internal UInt32 TicketId
        {
            get
            {
                return Id;
            }
        }

        internal SupportTicket(uint Id, int Score, UInt32 SenderId, UInt32 ReportedId, String Message, UInt32 RoomId, String RoomName, Double Timestamp, List<string> ReportedChats)
        {
            this.Id = Id;
            this.Score = Score;
            //this.Type = Type;
            this.Status = TicketStatus.OPEN;
            this.SenderId = SenderId;
            this.ReportedId = ReportedId;
            this.ModeratorId = 0;
            this.Message = Message;
            this.RoomId = RoomId;
            this.RoomName = RoomName;
            this.Timestamp = Timestamp;
            this.ReportedChats = ReportedChats;
            this.SenderName = SilverwaveEnvironment.GetGame().GetClientManager().GetNameById(SenderId);
            this.ReportedName = SilverwaveEnvironment.GetGame().GetClientManager().GetNameById(ReportedId);
            this.ModName = SilverwaveEnvironment.GetGame().GetClientManager().GetNameById(ModeratorId);
        }

        internal void Pick(UInt32 pModeratorId, Boolean UpdateInDb)
        {
            this.Status = TicketStatus.PICKED;
            this.ModeratorId = pModeratorId;
            this.ModName = SilverwaveEnvironment.getHabboForId(pModeratorId).Username;
            if (UpdateInDb)
            {
                using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    dbClient.runFastQuery("UPDATE moderation_tickets SET status = 'picked', moderator_id = " + pModeratorId + ", timestamp = '" + SilverwaveEnvironment.GetUnixTimestamp() + "' WHERE id = " + Id + "");
                }
            }
        }

        internal void Close(TicketStatus NewStatus, Boolean UpdateInDb)
        {
            this.Status = NewStatus;

            if (UpdateInDb)
            {
                String dbType = "";

                switch (NewStatus)
                {
                    case TicketStatus.ABUSIVE:

                        dbType = "abusive";
                        break;

                    case TicketStatus.INVALID:

                        dbType = "invalid";
                        break;

                    case TicketStatus.RESOLVED:
                    default:

                        dbType = "resolved";
                        break;
                }

                using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    dbClient.runFastQuery("UPDATE moderation_tickets SET status = '" + dbType + "' WHERE id = " + Id + "");
                }
            }
        }

        internal void Release(Boolean UpdateInDb)
        {
            this.Status = TicketStatus.OPEN;

            if (UpdateInDb)
            {
                using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    dbClient.runFastQuery("UPDATE moderation_tickets SET status = 'open' WHERE id = " + Id + "");
                }
            }
        }

        internal void Delete(Boolean UpdateInDb)
        {
            this.Status = TicketStatus.DELETED;

            if (UpdateInDb)
            {
                using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    dbClient.runFastQuery("UPDATE moderation_tickets SET status = 'deleted' WHERE id = " + Id + "");
                }
            }
        }

        internal ServerMessage Serialize(ServerMessage Message)
        {
            Message.AppendInt32(this.Id);
            Message.AppendInt32(this.TabId);
            Message.AppendInt32(3); // Type
            Message.AppendInt32(114); // Category
            Message.AppendInt32((SilverwaveEnvironment.GetUnixTimestamp() - (int)this.Timestamp) * 1000);
            Message.AppendInt32(this.Score);
            Message.AppendInt32(0);
            Message.AppendInt32(this.SenderId);
            Message.AppendString(this.SenderName);
            Message.AppendInt32(this.ReportedId);
            Message.AppendString(this.ReportedName);
            Message.AppendInt32((this.Status == TicketStatus.PICKED) ? this.ModeratorId : 0u);
            Message.AppendString(this.ModName);
            Message.AppendString(this.Message);
            Message.AppendInt32(0);

            Message.AppendInt32(this.ReportedChats.Count);

            foreach (string Chat in ReportedChats)
            {
                Message.AppendString(Chat);
                Message.AppendInt32(-1);
                Message.AppendInt32(-1);
            }
            return Message;

        }
    }
}

Proof:

REMOVED IP's SHOWING
 
Last edited:
Upvote 0
Hakuna Matata
Joined
Sep 5, 2012
Messages
804
Reaction score
137
Oh here you go...

ModerationTool.cs:

Code:
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Silverwave.Collections;
using Silverwave.Core;
using Silverwave.HabboHotel.GameClients;
using Silverwave.HabboHotel.Rooms;
using Silverwave.HabboHotel.Rooms.RoomInvokedItems;
using Silverwave.Messages;
using Database_Manager.Database.Session_Details.Interfaces;
using Silverwave.Messages.Headers;
using Silverwave.HabboHotel.Users;
using System.Collections.Specialized;

namespace Silverwave.HabboHotel.Support
{
    public class ModerationTool
    {
        #region General

        internal List<SupportTicket> Tickets;

        internal List<string> UserMessagePresets;
        internal List<string> RoomMessagePresets;
        internal StringDictionary SupportTicketHints;

        internal ModerationTool()
        {
            Tickets = new List<SupportTicket>();
            UserMessagePresets = new List<string>();
            RoomMessagePresets = new List<string>();
            SupportTicketHints = new StringDictionary();
        }

        internal ServerMessage SerializeTool()
        {
            ServerMessage Response = new ServerMessage(Outgoing.OpenModTools);
            Response.AppendInt32(Tickets.Count);
            foreach (SupportTicket ticket in Tickets)
            {
                ticket.Serialize(Response);
            }

            Response.AppendInt32(UserMessagePresets.Count);
            foreach (String Preset in UserMessagePresets)
            {
                Response.AppendString(Preset);
            }
            using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
            {
                dbClient.setQuery("SELECT * from moderation_templates where category = '1' ");
                DataTable PII = dbClient.getTable();

                dbClient.setQuery("SELECT * from moderation_templates where category = '2' ");
                DataTable sex = dbClient.getTable();

                Response.AppendInt32(2);
                Response.AppendString("PII");
                Response.AppendBoolean(true);
                Response.AppendInt32(PII.Rows.Count); //array count

                foreach (DataRow PIIRow in PII.Rows)
                {
                    Response.AppendString(Convert.ToString(PIIRow["name"])); //type
                    Response.AppendString(Convert.ToString(PIIRow["banmessage"])); //ban message
                    Response.AppendInt32(Convert.ToInt32(PIIRow["Banhours"]));
                    Response.AppendInt32(Convert.ToInt32(PIIRow["AvatarBan"]));
                    Response.AppendInt32(Convert.ToInt32(PIIRow["Mute"]));
                    Response.AppendInt32(Convert.ToInt32(PIIRow["TradeLock"]));/// REMOVE THIS LINE IF YOUR NOT USING THE NEW_UI
                    Response.AppendString(Convert.ToString(PIIRow["Warningmessage"])); // warning message

                }

                Response.AppendString("Sexually Explicit");
                Response.AppendBoolean(false);
                Response.AppendInt32(sex.Rows.Count); //array count
                foreach (DataRow Sex in sex.Rows)
                {
                    Response.AppendString(Convert.ToString(Sex["name"])); //type
                    Response.AppendString(Convert.ToString(Sex["banmessage"])); //ban message
                    Response.AppendInt32(Convert.ToInt32(Sex["Banhours"]));
                    Response.AppendInt32(Convert.ToInt32(Sex["AvatarBan"]));
                    Response.AppendInt32(Convert.ToInt32(Sex["Mute"]));
                    Response.AppendInt32(Convert.ToInt32(Sex["TradeLock"])); /// REMOVE THIS LINE IF YOUR NOT USING THE NEW_UI
                    Response.AppendString(Convert.ToString(Sex["Warningmessage"])); // warning message

                }
            }


            /*Response.AppendString("PII");
            Response.AppendBoolean(true);
            Response.AppendInt32(1);
            Response.AppendString("HI");
            Response.AppendString("BYE");
            Response.AppendInt32(1);
            Response.AppendInt32(1);

            Response.AppendString("Sexually Explicit");
            Response.AppendBoolean(true);
            Response.AppendInt32(1);
            Response.AppendString("HI");
            Response.AppendString("NIIZ IS QUEER");
            Response.AppendInt32(1);
            Response.AppendInt32(10); // 1 = mute 1 hr, 2 = mute 2 hr*/

            /*Response.AppendString("TEST2"); // Category
            Response.AppendUInt(2); //Mod Actions Count
            Response.AppendString("TEST3"); // Name
            Response.AppendString("TEST4"); // Value
            Response.AppendString("TEST3"); // Name
            Response.AppendString("TEST4"); // Value*/

            // Permissions
            Response.AppendBoolean(true); // ticket_queue fuse
            Response.AppendBoolean(true); // chatlog fuse
            Response.AppendBoolean(true); // message / caution fuse
            Response.AppendBoolean(true); // kick fuse
            Response.AppendBoolean(true); // band fuse
            Response.AppendBoolean(true); // broadcastshit fuse
            Response.AppendBoolean(true);

            // Room tool notices
            Response.AppendInt32(RoomMessagePresets.Count);
            foreach (String Preset in RoomMessagePresets)
            {
                Response.AppendString(Preset);
            }

            /*Response.AppendInt32(0); // actionType
            Response.AppendInt32(0); // actionLen
            Response.AppendInt32(0); // action multiplier (repeat x times)
             */

            /*
            Response.AppendInt32(-1);

            Response.AppendInt32(UserMessagePresets.Count);
                foreach (String Preset in UserMessagePresets)
                {
                    Response.AppendString(Preset);
                }
            Response.AppendUInt(6); //Mod Actions Count

            Response.AppendString("Common Problems"); // modaction Cata
            Response.AppendUInt(8); // ModAction Count
            Response.AppendString("Inappropriate Actions"); // mod action Cata
            Response.AppendString("Your actions have been deemed inappropriate and adverse action may be taken on your account if you do not stop."); // Msg
            Response.AppendString("Swearing"); // Mod Action Cata
            Response.AppendString("Your language has been deemed inappropriate and adverse action may be taken on your account if you do not stop."); // Msg
            Response.AppendString("Scamming");// Mod Action Cata
            Response.AppendString("Unfortunately, action can not be taken against scammers without proof of a scam. If you believe you have proof of a scam, please post it on our forums at Habbo.vc.com/forum in the Scammers section. "); // Msg
            Response.AppendString("Staff Applications"); // Mod Cata
            Response.AppendString("When Habbo.vc is looking for staff members, an article will go up on the homepage. Please keep checking back."); // Msg
            Response.AppendString("Flooding/Spamming"); // Mod Cata
            Response.AppendString("Do not flood/spam the room with senseless speech. Doing so may cause you to be kicked or banned from the room."); // Msg
            Response.AppendString("Coins"); // Mod Cata
            Response.AppendString("150 coins are distributed every 15 minutes on Habbo.vc, you can alternatively buy more credits from Habbo.vc.com/purchases"); // Msg
            Response.AppendString("VIP/coins hasn’t arrived"); // Mod Cata
            Response.AppendString("If you have been waiting longer than 48 hours for your VIP and/or coins to arrive, please email VIP@SilverwaveIndustry.com."); // Msg
            Response.AppendString("How to get VIP"); // Mod Cata
            Response.AppendString("You can purchase VIP through PayPal or PayGol (mobile phone). Go to Habbo.vc.com/purchases for more information."); // Msg

            Response.AppendString("Bugs");// modaction Cata
            Response.AppendUInt(8); // ModAction Count
            Response.AppendString("SilverwaveEMU Bug"); // mod action Cata
            Response.AppendString("If you have found a bug with SilverwaveEMU, please report it on our forums at Habbo.vc.com/forum"); // Msg
            Response.AppendString("General Bug"); // Mod Action Cata
            Response.AppendString("If you have found a bug on the client, please report it on our forums at Habbo.vc.com/forum"); // Msg
            Response.AppendString("Something not loading");// Mod Action Cata
            Response.AppendString("If something is not loading for you on Habbo.vc, make sure you clear your browsers cache and then reload the hotel. More information on how to clear your browsers cache can be found at http://bit.ly/plusclearcache"); // Msg
            Response.AppendString("Disconnection"); // Mod Cata
            Response.AppendString("If you are constantly disconnecting make sure you do not have two clients open and also that you clear your browsers cache. More information on how to clear your browsers cache can be found at http://bit.ly/plusclearcache"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg

            Response.AppendString("Room Problems");// modaction Cata
            Response.AppendUInt(8); // ModAction Count
            Response.AppendString("Swearing"); // mod action Cata
            Response.AppendString("Please stop using abusive speech. Swearing is allowed on Habbo.vc but not when it is directed in a hateful way towards other users."); // Msg
            Response.AppendString("Room Name Problem"); // Mod Action Cata
            Response.AppendString("Please change the name of your room or your room will be shut down."); // Msg
            Response.AppendString("NILL");// Mod Action Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg

            Response.AppendString("Ban Reasons");// modaction Cata
            Response.AppendUInt(8); // ModAction Count
            Response.AppendString("Advertising"); // mod action Cata
            Response.AppendString("Advertising another retro hotel in-game (Perm IP ban)"); // Msg
            Response.AppendString("Scamming (with evidence)"); // Mod Action Cata
            Response.AppendString("Scamming (3 day ban)"); // Msg
            Response.AppendString("Constant Abuse (after warning)");// Mod Action Cata
            Response.AppendString("Abuse against hotel staff and/or players (4 hour ban)"); // Msg
            Response.AppendString("Abuse of CFH (after warning)"); // Mod Cata
            Response.AppendString("Abuse of the call for help system (2 hour ban)"); // Msg
            Response.AppendString("Jayden Rocks!"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg
            Response.AppendString("NILL"); // Mod Cata
            Response.AppendString("NILL"); // Msg

            Response.AppendString("Debug Problems - Original");// modaction Cata
            Response.AppendUInt(8); // ModAction Count
            Response.AppendString("Lag"); // mod action Cata
            Response.AppendString("We will Check the problem for you now can you give us more infomation about what's happens"); // Msg
            Response.AppendString("Disconnection"); // Mod Action Cata
            Response.AppendString("What happens and how happens please explain us"); // Msg
            Response.AppendString("
             * problem");// Mod Action Cata
            Response.AppendString("Please Contact The Player Support For this problem"); // Msg
            Response.AppendString("Char Filter"); // Mod Cata
            Response.AppendString("Can you say The usersname and explain us what happens"); // Msg
            Response.AppendString("System check"); // Mod Cata
            Response.AppendString("We already checking every debug stuff"); // Msg
            Response.AppendString("Error from WireEncoding"); // Mod Cata
            Response.AppendString("Can you say explain us what happens"); // Msg
            Response.AppendString("Error from BASE64"); // Mod Cata
            Response.AppendString("Can you explain us what happens"); // Msg
            Response.AppendString("Error from Flash player"); // Mod Cata
            Response.AppendString("Can you explain us what happens"); // Msg

            Response.AppendString("System Problems - Original");// modaction Cata
            Response.AppendUInt(8); // ModAction Count
            Response.AppendString("Version"); // mod action Cata
            Response.AppendString("Ask a Administrator For more Information"); // Msg
            Response.AppendString("Swf Version?"); // Mod Action Cata
            Response.AppendString("Currenly We use the same version like Habbo.com"); // Msg
            Response.AppendString("Freeze");// Mod Action Cata
            Response.AppendString("Please Contact The Player Support For this problem"); // Msg
            Response.AppendString("Name Filter"); // Mod Cata
            Response.AppendString("Can you say The usersname and explain us what happens"); // Msg
            Response.AppendString("Nickname Filter"); // Mod Cata
            Response.AppendString("Can you say The usersname and explain us what happens"); // Msg
            Response.AppendString("System Filter"); // Mod Cata
            Response.AppendString("Can you say The usersname and explain us what happens"); // Msg
            Response.AppendString("Cursing Filter"); // Mod Cata
            Response.AppendString("Can you say The usersname and explain us what happens"); // Msg
            Response.AppendString("Update Filter"); // Mod Cata
            Response.AppendString("We will update your words in the filter Thanks for report."); // Msg

            Response.AppendBoolean(true); // ticket_queue fuse
            Response.AppendBoolean(true); // chatlog fuse
            Response.AppendBoolean(true); // message / caution fuse
            Response.AppendBoolean(true); // kick fuse
            Response.AppendBoolean(true); // band fuse
            Response.AppendBoolean(true); // broadcastshit fuse
            Response.AppendBoolean(true); // other poop fuse

            Response.AppendInt32(RoomMessagePresets.Count);
                foreach (String Preset in RoomMessagePresets)
                {
                    Response.AppendString(Preset);
                }
            Response.AppendInt32(0); // undef
            Response.AppendString(""); // undef
            Response.AppendString(""); // undef
            Response.AppendInt32(0); // count of actions
            Response.AppendInt32(0); // count of actions

            Response.AppendString(""); // undef
            Response.AppendString(""); // undef
            /*Response.AppendInt32(0); // actionType
            Response.AppendInt32(0); // actionLen
            Response.AppendInt32(0); // action multiplier (repeat x times)
             */
            return Response;
        }

        #endregion

        #region Message Presets

        internal void LoadMessagePresets(IQueryAdapter dbClient)
        {
            UserMessagePresets.Clear();
            RoomMessagePresets.Clear();
            SupportTicketHints.Clear();

            dbClient.setQuery("SELECT type,message FROM moderation_presets WHERE enabled = 2");
            DataTable Data = dbClient.getTable();

            dbClient.setQuery("SELECT word,hint FROM moderation_tickethints");
            DataTable Hints = dbClient.getTable();

            if (Data == null || Hints == null)
                return;

            foreach (DataRow Row in Data.Rows)
            {
                String Message = (String)Row["message"];

                switch (Row["type"].ToString().ToLower())
                {
                    case "message":

                        UserMessagePresets.Add(Message);
                        break;

                    case "roommessage":

                        RoomMessagePresets.Add(Message);
                        break;
                }
            }

            foreach (DataRow Row in Hints.Rows)
            {
                SupportTicketHints.Add((string)Row[0], (string)Row[1]);
            }
        }

        #endregion

        #region Support Tickets

        internal void LoadPendingTickets(IQueryAdapter dbClient)
        {
            dbClient.runFastQuery("TRUNCATE TABLE moderation_tickets");
            //dbClient.setQuery("SELECT moderation_tickets.*, p1.username AS sender_username, p2.username AS reported_username, p3.username AS moderator_username FROM moderation_tickets LEFT OUTER JOIN users AS p1 ON moderation_tickets.sender_id = p1.id LEFT OUTER JOIN users AS p2 ON moderation_tickets.reported_id = p2.id LEFT OUTER JOIN users AS p3 ON moderation_tickets.moderator_id = p3.id WHERE moderation_tickets.status != 'resolved'");
            //DataTable Data = dbClient.getTable();

            //if (Data == null)
            //{
            //    return;
            //}

            //foreach (DataRow Row in Data.Rows)
            //{
            //    SupportTicket Ticket = new SupportTicket(Convert.ToUInt32(Row["id"]), (int)Row["score"], (int)Row["type"], Convert.ToUInt32(Row["sender_id"]), Convert.ToUInt32(Row["reported_id"]), (String)Row["message"], Convert.ToUInt32(Row["room_id"]), (String)Row["room_name"], (Double)Row["timestamp"], Row["sender_username"], Row["reported_username"], Row["moderator_username"]);

            //    if (Row["status"].ToString().ToLower() == "picked")
            //    {
            //        Ticket.Pick(Convert.ToUInt32(Row["moderator_id"]), false);
            //    }

            //    Tickets.Add(Ticket);
            //}
        }

        internal void SendNewTicket(GameClient Session, int Category, uint ReportedUser, string Message, List<string> Messages)
        {
            UInt32 Id = 0;


            if (Session.GetHabbo().CurrentRoomId <= 0)
            {
                using (IQueryAdapter DBClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    DBClient.setQuery(string.Concat(new object[]
                        {
                            "INSERT INTO moderation_tickets (score,status,sender_id,reported_id,moderator_id,message,room_id,room_name,timestamp) VALUES (1,'open','",
                            Session.GetHabbo().Id,
                            "','",
                            ReportedUser,
                            "','0'  [USER=782815]messa[/USER]ge,'0','','",
                            SilverwaveEnvironment.GetUnixTimestamp(),
                            "')"
                        }));
                    DBClient.addParameter("message", Message);
                    Id = (uint)DBClient.insertQuery();
                    DBClient.runFastQuery("UPDATE user_info SET cfhs = cfhs + 1 WHERE user_id = " + Session.GetHabbo().Id);
                }


                SupportTicket Ticket = new SupportTicket(Id, 1, Session.GetHabbo().Id, ReportedUser, Message, 0, "", (double)SilverwaveEnvironment.GetUnixTimestamp(), Messages);
                this.Tickets.Add(Ticket);
                ModerationTool.SendTicketToModerators(Ticket);
                return;
            }


            RoomData Data = SilverwaveEnvironment.GetGame().GetRoomManager().GenerateNullableRoomData(Session.GetHabbo().CurrentRoomId);
            using (IQueryAdapter DBClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
            {
                DBClient.setQuery(string.Concat(new object[]
                    {
                        "INSERT INTO moderation_tickets (score,status,sender_id,reported_id,moderator_id,message,room_id,room_name,timestamp) VALUES (1,'open','",
                        Session.GetHabbo().Id,
                        "','",
                        ReportedUser,
                        "','0'  [USER=782815]messa[/USER]ge,'",
                        Data.Id,
                        "'  [USER=1333344765]name[/USER],'",
                        SilverwaveEnvironment.GetUnixTimestamp(),
                        "')"
                    }));
                DBClient.addParameter("message", Message);
                DBClient.addParameter("name", Data.Name);
                Id = (uint)DBClient.insertQuery();
                DBClient.runFastQuery("UPDATE user_info SET cfhs = cfhs + 1 WHERE user_id = " + Session.GetHabbo().Id);
            }
            SupportTicket Ticket2 = new SupportTicket(Id, 1, Session.GetHabbo().Id, ReportedUser, Message, 0, "", (double)SilverwaveEnvironment.GetUnixTimestamp(), Messages);
            this.Tickets.Add(Ticket2);
            ModerationTool.SendTicketToModerators(Ticket2);
        }

        internal void SerializeOpenTickets(ref QueuedServerMessage serverMessages, uint userID)
        {
            ServerMessage Response = new ServerMessage(Outgoing.SerializeIssue);
            foreach (SupportTicket ticket in Tickets)
            {
                if (ticket.Status == TicketStatus.OPEN || (ticket.Status == TicketStatus.PICKED && ticket.ModeratorId == userID) || (ticket.Status == TicketStatus.PICKED && ticket.ModeratorId == 0))
                {
                    Response = ticket.Serialize(Response);
                    serverMessages.appendResponse(Response);
                }
            }
        }

        internal SupportTicket GetTicket(uint TicketId)
        {
            foreach (SupportTicket Ticket in Tickets)
            {
                if (Ticket.TicketId == TicketId)
                {
                    return Ticket;
                }
            }
            return null;
        }

        internal void PickTicket(GameClient Session, uint TicketId)
        {
            SupportTicket Ticket = GetTicket(TicketId);

            if (Ticket == null || Ticket.Status != TicketStatus.OPEN)
            {
                return;
            }

            Ticket.Pick(Session.GetHabbo().Id, true);
            SendTicketToModerators(Ticket);
        }

        internal void ReleaseTicket(GameClient Session, uint TicketId)
        {
            SupportTicket Ticket = GetTicket(TicketId);

            if (Ticket == null || Ticket.Status != TicketStatus.PICKED || Ticket.ModeratorId != Session.GetHabbo().Id)
            {
                return;
            }

            Ticket.Release(true);
            SendTicketToModerators(Ticket);
        }

        internal void CloseTicket(GameClient Session, uint TicketId, int Result)
        {
            SupportTicket Ticket = GetTicket(TicketId);

            if (Ticket == null || Ticket.Status != TicketStatus.PICKED || Ticket.ModeratorId != Session.GetHabbo().Id)
            {
                return;
            }

            GameClient Client = SilverwaveEnvironment.GetGame().GetClientManager().GetClientByUserID(Ticket.SenderId);

            TicketStatus NewStatus;
            int ResultCode = 0;
            switch (Result)
            {
                case 1:

                    ResultCode = 1;
                    NewStatus = TicketStatus.INVALID;
                    //Client.SendNotif("Your ticket has been closed as invalid.");
                    break;

                case 2:

                    ResultCode = 2;
                    NewStatus = TicketStatus.ABUSIVE;

                    using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                    {
                        dbClient.runFastQuery("UPDATE user_info SET cfhs_abusive = cfhs_abusive + 1 WHERE user_id = " + Ticket.SenderId + "");
                    }
                    //Client.SendNotif("Abusive ticket");

                    break;

                case 3:
                default:

                    ResultCode = 0;
                    NewStatus = TicketStatus.RESOLVED;
                    //Client.SendNotif("Thanks, all the issues have been resolved.");
                    break;
            }

            if (Client != null)
            {
                Client.GetMessageHandler().GetResponse().Init(Outgoing.UpdateIssue);
                Client.GetMessageHandler().GetResponse().AppendInt32(1); // size
                Client.GetMessageHandler().GetResponse().AppendInt32(Ticket.TicketId);
                Client.GetMessageHandler().GetResponse().AppendInt32(Ticket.ModeratorId);
                Client.GetMessageHandler().GetResponse().AppendString((SilverwaveEnvironment.getHabboForId(Ticket.ModeratorId) != null) ? (SilverwaveEnvironment.getHabboForId(Ticket.ModeratorId).Username) : "Undefined");
                Client.GetMessageHandler().GetResponse().AppendBoolean(false); // retryEnabled
                Client.GetMessageHandler().GetResponse().AppendInt32(0); // retryEnabled
                //Client.GetMessageHandler().SendResponse();
                Client.GetMessageHandler().GetResponse().Init(Outgoing.ModResponseTicket);
                Client.GetMessageHandler().GetResponse().AppendInt32(ResultCode);
                Client.GetMessageHandler().SendResponse();
            }
            using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                dbClient.runFastQuery("UPDATE user_stats SET tickets_answered = tickets_answered+1 WHERE id=" + Session.GetHabbo().Id + " LIMIT 1");
            Ticket.Close(NewStatus, true);
            //SendTicketUpdateToModerators(Ticket);
            SendTicketToModerators(Ticket);
        }

        internal Boolean UsersHasPendingTicket(UInt32 Id)
        {
            foreach (SupportTicket Ticket in Tickets)
            {
                if (Ticket.SenderId == Id && Ticket.Status == TicketStatus.OPEN)
                {
                    return true;
                }
            }
            return false;
        }

        internal void DeletePendingTicketForUser(UInt32 Id)
        {
            foreach (SupportTicket Ticket in Tickets)
            {
                if (Ticket.SenderId == Id)
                {
                    Ticket.Delete(true);
                    SendTicketToModerators(Ticket);
                    return;
                }
            }
        }

        internal static void SendTicketUpdateToModerators(SupportTicket Ticket)
        {
            //SilverwaveEnvironment.GetGame().GetClientManager().QueueBroadcaseMessage(Ticket.SerializeUpdate(), "fuse_mod");
        }

        internal static void SendTicketToModerators(SupportTicket Ticket)
        {
            ServerMessage Response = new ServerMessage(Outgoing.SerializeIssue);
            Response = Ticket.Serialize(Response);
            SilverwaveEnvironment.GetGame().GetClientManager().QueueBroadcaseMessage(Response, "fuse_mod");
        }


        internal void LogStaffEntry(string modName, string target, string type, string description)
        {
            using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
            {
                dbClient.setQuery("INSERT INTO staff_logs (staffuser,target,action_type,description) VALUES (@username  [USER=1333461823]Target[/USER]  [USER=1333375725]Type[/USER]  [USER=275999]des[/USER]c)");
                dbClient.addParameter("username", modName);
                dbClient.addParameter("target", target);
                dbClient.addParameter("type", type);
                dbClient.addParameter("desc", description);
                dbClient.runQuery();
            }
        }
        #endregion

        #region Room Moderation

        internal static void PerformRoomAction(GameClient ModSession, uint RoomId, Boolean KickUsers, Boolean LockRoom, Boolean InappropriateRoom, ServerMessage Message)
        {
            Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(RoomId);

            if (Room == null)
            {
                return;
            }

            if (LockRoom)
            {
                Room.State = 1;

                using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    dbClient.runFastQuery("UPDATE rooms SET state = 'locked' WHERE id = " + Room.RoomId);
                }
                Room.Name = "Inappropriate to Hotel Management";
            }

            if (InappropriateRoom)
            {
                Room.Name = LanguageLocale.GetValue("moderation.room.roomclosed");
                Room.Description = LanguageLocale.GetValue("moderation.room.roomclosed");
                Room.ClearTags();

                using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    dbClient.runFastQuery("UPDATE rooms SET caption = 'Inappropriate to Hotel Management', description = 'Inappropriate to Hotel Management', tags = '' WHERE id = " + Room.RoomId + "");
                }
            }

            if (KickUsers)
            {
                onCycleDoneDelegate kick = new onCycleDoneDelegate(Room.onRoomKick);
                Room.GetRoomUserManager().UserList.QueueDelegate(kick);
            }
        }

        internal static ServerMessage SerializeRoomTool(RoomData Data)
        {
            Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Data.Id);

            ServerMessage Message = new ServerMessage(Outgoing.RoomTool);
            Message.AppendInt32(Data.Id);
            Message.AppendInt32(Data.UsersNow); // user count

            if (Room != null)
            {
                Message.AppendBoolean((Room.GetRoomUserManager().GetRoomUserByHabbo(Data.Owner) != null));
            }
            else
            {
                Message.AppendBoolean(false);
            }
            Message.AppendInt32(Room.OwnerId);
            Message.AppendString(Data.Owner);
            Message.AppendBoolean((Room != null)); // show data?

            Message.AppendString(Data.Name);
            Message.AppendString(Data.Description);
            Message.AppendInt32(Data.TagCount);

            foreach (string Tag in Data.Tags)
            {
                Message.AppendString(Tag);
            }

            Message.AppendBoolean(false);

            return Message;
        }

        #endregion

        #region User Moderation

        internal static void KickUser(GameClient ModSession, uint UserId, String Message, Boolean Soft)
        {
            GameClient Client = SilverwaveEnvironment.GetGame().GetClientManager().GetClientByUserID(UserId);

            if (Client == null || Client.GetHabbo().CurrentRoomId < 1 || Client.GetHabbo().Id == ModSession.GetHabbo().Id)
            {
                return;
            }

            if (Client.GetHabbo().Rank >= ModSession.GetHabbo().Rank)
            {
                ModSession.SendNotif(LanguageLocale.GetValue("moderation.kick.missingrank"));
                return;
            }

            Room Room = SilverwaveEnvironment.GetGame().GetRoomManager().GetRoom(Client.GetHabbo().CurrentRoomId);

            if (Room == null)
            {
                return;
            }

            Room.GetRoomUserManager().RemoveUserFromRoom(Client, true, false);
            Client.CurrentRoomUserID = -1;

            if (!Soft)
            {
                Client.SendNotif(Message);

                using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    dbClient.runFastQuery("UPDATE user_info SET cautions = cautions + 1 WHERE user_id = " + UserId + "");
                }
            }
        }

        internal static void AlertUser(GameClient ModSession, uint UserId, String Message, Boolean Caution)
        {
            GameClient Client = SilverwaveEnvironment.GetGame().GetClientManager().GetClientByUserID(UserId);

            if (Client == null)
            {
                return;
            }

            Client.SendNotif(Message);
        }

        internal static void BanUser(GameClient ModSession, uint UserId, int Length, String Message)
        {
            GameClient Client = SilverwaveEnvironment.GetGame().GetClientManager().GetClientByUserID(UserId);

            if (Client == null || Client.GetHabbo().Id == ModSession.GetHabbo().Id)
            {
                return;
            }

            if (Client.GetHabbo().Rank >= ModSession.GetHabbo().Rank)
            {
                ModSession.SendNotif(LanguageLocale.GetValue("moderation.ban.missingrank"));
                return;
            }

            Double dLength = Length;

            SilverwaveEnvironment.GetGame().GetBanManager().BanUser(Client, ModSession.GetHabbo().Username, dLength, Message, false, false);
        }

        #endregion

        #region User Info

        internal static ServerMessage SerializeUserInfo(uint UserId)
        {
            using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
            {
                dbClient.setQuery("SELECT id, username, online, mail, ip_reg, look 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(Outgoing.UserTool);

                Message.AppendInt32(Convert.ToUInt32(User["id"]));
                Message.AppendString((string)User["username"]);
                Message.AppendString((string)User["look"]);
                if (Info != null)
                {
                    Message.AppendInt32((int)Math.Ceiling((SilverwaveEnvironment.GetUnixTimestamp() - (Double)Info["reg_timestamp"]) / 60));
                    Message.AppendInt32((int)Math.Ceiling((SilverwaveEnvironment.GetUnixTimestamp() - (Double)Info["login_timestamp"]) / 60));
                }
                else
                {
                    Message.AppendInt32(0);
                    Message.AppendInt32(0);
                }

                Message.AppendBoolean(SilverwaveEnvironment.GetGame().GetClientManager().GetClientByUserID(Convert.ToUInt32(User["id"])) != null);

                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
                }
                Message.AppendInt32(0); // trading_lock_count_txt
                Message.AppendString(""); // trade_lock_expire_txt
                Message.AppendString((string)User["ip_reg"]); // last_purchase_txt
                Message.AppendInt32(0); // identityinformationtool.url + this
                Message.AppendInt32(0); // id_bans_txt
                Message.AppendString((string)User["mail"]); // email_address_txt  
                Message.AppendString(""); // ???

                return Message;
            }
        }

        internal static ServerMessage SerializeRoomVisits(UInt32 UserId)
        {
            using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
            {
                dbClient.setQuery("SELECT room_id,hour,minute FROM user_roomvisits WHERE user_id = " + UserId + " ORDER BY entry_timestamp DESC LIMIT 50");
                DataTable Data = dbClient.getTable();

                ServerMessage Message = new ServerMessage(Outgoing.RoomVisits);
                Message.AppendInt32(UserId);
                Message.AppendString(SilverwaveEnvironment.GetGame().GetClientManager().GetNameById(UserId));

                if (Data != null)
                {
                    Message.AppendInt32(Data.Rows.Count);

                    foreach (DataRow Row in Data.Rows)
                    {
                        RoomData RoomData = SilverwaveEnvironment.GetGame().GetRoomManager().GenerateNullableRoomData(Convert.ToUInt32(Row["room_id"]));
                        Message.AppendBoolean(false); // Public room
                        Message.AppendInt32(RoomData.Id);
                        Message.AppendString(RoomData.Name);
                        Message.AppendInt32((int)Row["hour"]);
                        Message.AppendInt32((int)Row["minute"]);
                    }
                }
                else
                {
                    Message.AppendInt32(0);
                }

                return Message;
            }
        }

        #endregion

        #region Chatlogs

        internal static ServerMessage SerializeUserChatlog(UInt32 UserId)
        {
            using (IQueryAdapter dbClient = SilverwaveEnvironment.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(Outgoing.UserChatlog);
                Message.AppendInt32(UserId);
                Message.AppendString(SilverwaveEnvironment.GetGame().GetClientManager().GetNameById(UserId));
                if (Visits != null)
                {
                    Message.AppendInt32(Visits.Rows.Count);


                    foreach (DataRow Visit in Visits.Rows)
                    {
                        DataTable Chatlogs = null;
                        if ((Double)Visit["exit_timestamp"] <= 0)
                        {
                            Visit["exit_timestamp"] = SilverwaveEnvironment.GetUnixTimestamp();
                        }


                        dbClient.setQuery("SELECT user_id,timestamp,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 LIMIT 150");
                        Chatlogs = dbClient.getTable();
                        RoomData RoomData = SilverwaveEnvironment.GetGame().GetRoomManager().GenerateNullableRoomData((UInt32)Visit["room_id"]);


                        Message.AppendByte(1);
                        Message.AppendShort(2);
                        Message.AppendString("roomName");
                        Message.AppendByte(2);
                        Message.AppendString(RoomData.Name);
                        Message.AppendString("roomId");
                        Message.AppendByte(1);
                        Message.AppendInt32(RoomData.Id);
                        if (Chatlogs != null)
                        {
                            Message.AppendShort(Chatlogs.Rows.Count);
                            foreach (DataRow Log in Chatlogs.Rows)
                            {
                                Habbo Habbo = SilverwaveEnvironment.getHabboForId(Convert.ToUInt32(Log["user_id"]));
                                DateTime Time = SilverwaveEnvironment.UnixToDateTime(Convert.ToDouble(Log["timestamp"]));
                                //Message.AppendInt32(Time.Hour);
                                Message.AppendInt32(Time.Minute);
                                Message.AppendInt32(Habbo.Id);
                                Message.AppendString(Habbo.Username);
                                Message.AppendString((string)Log["message"]);
                                Message.AppendBoolean(false);
                            }
                        }
                        else
                        {
                            Message.AppendInt32(0);
                        }
                    }
                }
                else
                {
                    Message.AppendInt32(0);
                }


                return Message;
            }
        }

        internal static ServerMessage SerializeTicketChatlog(SupportTicket Ticket, RoomData RoomData, Double Timestamp)
        {
            using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
            {
                dbClient.setQuery("SELECT user_id,timestamp,message FROM chatlogs WHERE room_id = " + RoomData.Id + " AND (timestamp >= " + (Timestamp - 300) + " AND timestamp <= " + Timestamp + ") OR (timestamp >= " + (Timestamp - 300) + " AND timestamp = 0) ORDER BY timestamp DESC LIMIT 150");
                DataTable Data = dbClient.getTable();

                ServerMessage Message = new ServerMessage(Outgoing.IssueChatlog);
                Message.AppendInt32(Ticket.TicketId);
                Message.AppendInt32(Ticket.SenderId);
                Message.AppendInt32(Ticket.ReportedId);
                Message.AppendInt32(RoomData.Id);
                Message.AppendBoolean(false); // Public room
                Message.AppendInt32(RoomData.Id);
                Message.AppendString(RoomData.Name);

                if (Data != null)
                {
                    Message.AppendInt32(Data.Rows.Count);

                    foreach (DataRow Row in Data.Rows)
                    {
                        Habbo Habbo = SilverwaveEnvironment.getHabboForId(Convert.ToUInt32(Row["user_id"]));
                        DateTime Time = SilverwaveEnvironment.UnixToDateTime(Convert.ToDouble(Row["timestamp"]));
                        //Message.AppendInt32(Time.Hour);
                        Message.AppendInt32(Time.Minute);
                        Message.AppendInt32(Habbo.Id);
                        Message.AppendString(Habbo.Username);
                        Message.AppendString((String)Row["message"]);
                    }
                }
                else
                {
                    Message.AppendInt32(0);
                }

                return Message;
            }
        }


        internal static ServerMessage SerializeRoomChatlog(uint roomID)
        {
            // NEW CHATLOGS [March 2014] Coded by Finn
            // Please don't remove credits, this took me some time to do... :(
            // Credits to Itachi for the structure's "context" enigma :D




            ServerMessage Message = new ServerMessage();
            RoomData Room = SilverwaveEnvironment.GetGame().GetRoomManager().GenerateRoomData(roomID);
            if (Room == null)
            {
                throw new NullReferenceException("No room found.");
            }




            Message.Init(Outgoing.RoomChatlog);
            Message.AppendByte(1);
            Message.AppendShort(2);
            Message.AppendString("roomName");
            Message.AppendByte(2);
            Message.AppendString(Room.Name);
            Message.AppendString("roomId");
            Message.AppendByte(1);
            Message.AppendInt32(Room.Id);




            Message.AppendShort(Room.RoomChat.Count);
            Room.RoomChat.Reverse();
            foreach (Chatlog Log in Room.RoomChat)
            {
                Habbo Habbo = SilverwaveEnvironment.getHabboForId(Log.UserId);
                DateTime Date = SilverwaveEnvironment.UnixToDateTime(Log.Timestamp);
                if (Habbo == null)
                {
                    Message.AppendInt32((DateTime.Now - Date).Seconds);
                    Message.AppendInt32(Log.UserId);
                    Message.AppendString("*User not found*");
                    Message.AppendString(Log.Message);
                    Message.AppendBoolean(true);
                }
                else
                {
                    Message.AppendInt32((DateTime.Now - Date).Seconds);
                    Message.AppendInt32(Habbo.Id);
                    Message.AppendString(Habbo.Username);
                    Message.AppendString(Log.Message);
                    Message.AppendBoolean(false); // Text is bold
                }
            }
            Room.RoomChat.Reverse();
            return Message;
        }

    }
        #endregion
}

SupportTicket.cs

Code:
using System;

using Silverwave.Messages;
using Silverwave.HabboHotel.Rooms;
using Database_Manager.Database.Session_Details.Interfaces;
using Silverwave.Messages.Headers;
using Silverwave.Core;
using System.Collections.Generic;
namespace Silverwave.HabboHotel.Support
{
    enum TicketStatus
    {
        OPEN = 0,
        PICKED = 1,
        RESOLVED = 2,
        ABUSIVE = 3,
        INVALID = 4,
        DELETED = 5
    }

    class SupportTicket
    {
        private UInt32 Id;
        internal Int32 Score;
        internal Int32 Type;

        internal TicketStatus Status;

        internal UInt32 SenderId;
        internal UInt32 ReportedId;
        internal UInt32 ModeratorId;

        internal String Message;

        internal UInt32 RoomId;
        internal String RoomName;

        internal Double Timestamp;
        internal List<string> ReportedChats;

        private string SenderName;
        private string ReportedName;
        private string ModName;

        internal int TabId
        {
            get
            {
                if (Status == TicketStatus.OPEN)
                {
                    return 1;
                }

                if (Status == TicketStatus.PICKED)
                {
                    return 2;
                }

                if (Status == TicketStatus.ABUSIVE || Status == TicketStatus.INVALID || Status == TicketStatus.RESOLVED)
                    return 0;

                if (Status == TicketStatus.DELETED)
                    return 0;

                return 0;
            }
        }

        internal UInt32 TicketId
        {
            get
            {
                return Id;
            }
        }

        internal SupportTicket(uint Id, int Score, UInt32 SenderId, UInt32 ReportedId, String Message, UInt32 RoomId, String RoomName, Double Timestamp, List<string> ReportedChats)
        {
            this.Id = Id;
            this.Score = Score;
            //this.Type = Type;
            this.Status = TicketStatus.OPEN;
            this.SenderId = SenderId;
            this.ReportedId = ReportedId;
            this.ModeratorId = 0;
            this.Message = Message;
            this.RoomId = RoomId;
            this.RoomName = RoomName;
            this.Timestamp = Timestamp;
            this.ReportedChats = ReportedChats;
            this.SenderName = SilverwaveEnvironment.GetGame().GetClientManager().GetNameById(SenderId);
            this.ReportedName = SilverwaveEnvironment.GetGame().GetClientManager().GetNameById(ReportedId);
            this.ModName = SilverwaveEnvironment.GetGame().GetClientManager().GetNameById(ModeratorId);
        }

        internal void Pick(UInt32 pModeratorId, Boolean UpdateInDb)
        {
            this.Status = TicketStatus.PICKED;
            this.ModeratorId = pModeratorId;
            this.ModName = SilverwaveEnvironment.getHabboForId(pModeratorId).Username;
            if (UpdateInDb)
            {
                using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    dbClient.runFastQuery("UPDATE moderation_tickets SET status = 'picked', moderator_id = " + pModeratorId + ", timestamp = '" + SilverwaveEnvironment.GetUnixTimestamp() + "' WHERE id = " + Id + "");
                }
            }
        }

        internal void Close(TicketStatus NewStatus, Boolean UpdateInDb)
        {
            this.Status = NewStatus;

            if (UpdateInDb)
            {
                String dbType = "";

                switch (NewStatus)
                {
                    case TicketStatus.ABUSIVE:

                        dbType = "abusive";
                        break;

                    case TicketStatus.INVALID:

                        dbType = "invalid";
                        break;

                    case TicketStatus.RESOLVED:
                    default:

                        dbType = "resolved";
                        break;
                }

                using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    dbClient.runFastQuery("UPDATE moderation_tickets SET status = '" + dbType + "' WHERE id = " + Id + "");
                }
            }
        }

        internal void Release(Boolean UpdateInDb)
        {
            this.Status = TicketStatus.OPEN;

            if (UpdateInDb)
            {
                using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    dbClient.runFastQuery("UPDATE moderation_tickets SET status = 'open' WHERE id = " + Id + "");
                }
            }
        }

        internal void Delete(Boolean UpdateInDb)
        {
            this.Status = TicketStatus.DELETED;

            if (UpdateInDb)
            {
                using (IQueryAdapter dbClient = SilverwaveEnvironment.GetDatabaseManager().getQueryreactor())
                {
                    dbClient.runFastQuery("UPDATE moderation_tickets SET status = 'deleted' WHERE id = " + Id + "");
                }
            }
        }

        internal ServerMessage Serialize(ServerMessage Message)
        {
            Message.AppendInt32(this.Id);
            Message.AppendInt32(this.TabId);
            Message.AppendInt32(3); // Type
            Message.AppendInt32(114); // Category
            Message.AppendInt32((SilverwaveEnvironment.GetUnixTimestamp() - (int)this.Timestamp) * 1000);
            Message.AppendInt32(this.Score);
            Message.AppendInt32(0);
            Message.AppendInt32(this.SenderId);
            Message.AppendString(this.SenderName);
            Message.AppendInt32(this.ReportedId);
            Message.AppendString(this.ReportedName);
            Message.AppendInt32((this.Status == TicketStatus.PICKED) ? this.ModeratorId : 0u);
            Message.AppendString(this.ModName);
            Message.AppendString(this.Message);
            Message.AppendInt32(0);

            Message.AppendInt32(this.ReportedChats.Count);

            foreach (string Chat in ReportedChats)
            {
                Message.AppendString(Chat);
                Message.AppendInt32(-1);
                Message.AppendInt32(-1);
            }
            return Message;

        }
    }
}

Proof:

REMOVED IP's SHOWING

Thank you so much, I finally got it working!
 
Upvote 0
Back
Top