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
}