diff --git a/lua/damagelogs/client/tabs/rdm_manager.lua b/lua/damagelogs/client/tabs/rdm_manager.lua index 7b39e3f3..9230477e 100644 --- a/lua/damagelogs/client/tabs/rdm_manager.lua +++ b/lua/damagelogs/client/tabs/rdm_manager.lua @@ -64,7 +64,8 @@ end) local status = { [RDM_MANAGER_WAITING] = TTTLogTranslate(GetDMGLogLang, "RDMWaiting"), [RDM_MANAGER_PROGRESS] = TTTLogTranslate(GetDMGLogLang, "RDMInProgress"), - [RDM_MANAGER_FINISHED] = TTTLogTranslate(GetDMGLogLang, "RDMFinished") + [RDM_MANAGER_FINISHED] = TTTLogTranslate(GetDMGLogLang, "RDMFinished"), + [RDM_MANAGER_READYFORSTAFF] = TTTLogTranslate(GetDMGLogLang, "RDMReadyForStaff"), } RDM_MANAGER_STATUS = status @@ -72,7 +73,8 @@ RDM_MANAGER_STATUS = status local icons = { [RDM_MANAGER_WAITING] = "icon16/clock.png", [RDM_MANAGER_PROGRESS] = "icon16/arrow_refresh.png", - [RDM_MANAGER_FINISHED] = "icon16/accept.png" + [RDM_MANAGER_FINISHED] = "icon16/accept.png", + [RDM_MANAGER_READYFORSTAFF] = "icon16/user_suit.png", } RDM_MANAGER_ICONS = icons @@ -80,7 +82,8 @@ RDM_MANAGER_ICONS = icons local colors = { [RDM_MANAGER_PROGRESS] = Color(0, 0, 190), [RDM_MANAGER_FINISHED] = Color(0, 190, 0), - [RDM_MANAGER_WAITING] = Color(100, 100, 100) + [RDM_MANAGER_WAITING] = Color(100, 100, 100), + [RDM_MANAGER_READYFORSTAFF] = Color(245, 0, 192), } local function TakeAction() @@ -313,7 +316,7 @@ local function TakeAction() if ulx and mode == 2 then txt = TTTLogTranslate(GetDMGLogLang, "RemoveAutoJails") - elseif sam or serverguard then + elseif serverguard then txt = TTTLogTranslate(GetDMGLogLang, "RemoveOneAutoSlay") end @@ -326,7 +329,7 @@ local function TakeAction() if ulx then RunConsoleCommand("ulx", mode == 1 and "aslayid" or "ajailid", report.attacker, "0") elseif sam then - RunConsoleCommand("sam", mode == 1 and "aslayid" or "ajailid", report.attacker, "0") + RunConsoleCommand("sam", mode == 1 and "aslayid" or "ajailid", report.attacker, "0", " ") elseif serverguard then serverguard.command.Run("raslay", false, attacker:Nick()) end @@ -334,7 +337,7 @@ local function TakeAction() if ulx then RunConsoleCommand("ulx", mode == 1 and "aslayid" or "ajailid", report.attacker, "0") elseif sam then - RunConsoleCommand("sam", mode == 1 and "aslayid" or "ajailid", report.attacker, "0") + RunConsoleCommand("sam", mode == 1 and "aslayid" or "ajailid", report.attacker, "0", " ") else Damagelog:Notify(DAMAGELOG_NOTIFY_ALERT, TTTLogTranslate(GetDMGLogLang, "VictimReportedDisconnected"), 2, "buttons/weapon_cant_buy.wav") end @@ -346,7 +349,7 @@ local function TakeAction() if ulx then RunConsoleCommand("ulx", mode == 1 and "aslayid" or "ajailid", report.victim, "0") elseif sam then - RunConsoleCommand("sam", mode == 1 and "aslayid" or "ajailid", report.victim, "0") + RunConsoleCommand("sam", mode == 1 and "aslayid" or "ajailid", report.victim, "0", " ") elseif serverguard then serverguard.command.Run("raslay", false, victim:Nick()) end @@ -354,7 +357,7 @@ local function TakeAction() if ulx then RunConsoleCommand("ulx", mode == 1 and "aslayid" or "ajailid", report.victim, "0") elseif sam then - RunConsoleCommand("sam", mode == 1 and "aslayid" or "ajailid", report.victim, "0") + RunConsoleCommand("sam", mode == 1 and "aslayid" or "ajailid", report.victim, "0", " ") else Damagelog:Notify(DAMAGELOG_NOTIFY_ALERT, TTTLogTranslate(GetDMGLogLang, "VictimReportedDisconnected"), 2, "buttons/weapon_cant_buy.wav") end @@ -427,6 +430,7 @@ function PANEL:UpdateReport(index) local cancelledIcon = report.status == RDM_MANAGER_WAITING and "icon16/exclamation.png" + or report.status == RDM_MANAGER_READYFORSTAFF and "icon16/user_suit.png" or (report.canceled and "icon16/tick.png" or "icon16/cross.png") if not self.Reports[index] then @@ -731,6 +735,7 @@ function Damagelog:DrawRDMManager(x, y) local menu = DermaMenu() local attacker = player.GetBySteamID(Damagelog.SelectedReport.attacker) DrawStatusMenuOption(RDM_MANAGER_WAITING, menu) + DrawStatusMenuOption(RDM_MANAGER_READYFORSTAFF, menu) DrawStatusMenuOption(RDM_MANAGER_PROGRESS, menu) DrawStatusMenuOption(RDM_MANAGER_FINISHED, menu) menu:Open() @@ -1072,7 +1077,8 @@ function PANEL:SetPlayer(reported, ply, steamid, report) if ulx then RunConsoleCommand("ulx", mode == 1 and "aslayid" or "ajailid", ply:SteamID(), tostring(self.NumSlays), self.CurrentReason) elseif sam then - RunConsoleCommand("sam", mode == 1 and "aslayid" or "ajailid", ply:SteamID(), tostring(self.NumSlays), self.CurrentReason) + local reason = self.CurrentReason ~= "" and self.CurrentReason or " " + RunConsoleCommand("sam", mode == 1 and "aslayid" or "ajailid", ply:SteamID(), tostring(self.NumSlays), reason) elseif serverguard then serverguard.command.Run("aslay", false, ply:Nick(), self.NumSlays, self.CurrentReason) end @@ -1083,7 +1089,8 @@ function PANEL:SetPlayer(reported, ply, steamid, report) RunConsoleCommand("ulx", mode == 1 and "aslayid" or "ajailid", (reported and report.attacker) or (not reported and report.victim), tostring(self.NumSlays), self.CurrentReason) self.SetConclusion((reported and report.attacker_nick) or (not reported and report.victim_nick), self.NumSlays, self.CurrentReason) elseif sam then - RunConsoleCommand("sam", mode == 1 and "aslayid" or "ajailid", (reported and report.attacker) or (not reported and report.victim), tostring(self.NumSlays), self.CurrentReason) + local reason = self.CurrentReason ~= "" and self.CurrentReason or " " + RunConsoleCommand("sam", mode == 1 and "aslayid" or "ajailid", (reported and report.attacker) or (not reported and report.victim), tostring(self.NumSlays), reason) self.SetConclusion((reported and report.attacker_nick) or (not reported and report.victim_nick), self.NumSlays, self.CurrentReason) else Damagelog:Notify(DAMAGELOG_NOTIFY_ALERT, TTTLogTranslate(GetDMGLogLang, "VictimReportedDisconnected"), 2, "buttons/weapon_cant_buy.wav") diff --git a/lua/damagelogs/server/autoslay.lua b/lua/damagelogs/server/autoslay.lua index 89f2527f..f744ea8e 100644 --- a/lua/damagelogs/server/autoslay.lua +++ b/lua/damagelogs/server/autoslay.lua @@ -160,7 +160,8 @@ function Damagelog:SetSlays(admin, steamid, slays, reason, target) end if slays == 0 then - Damagelog.SQLiteDatabase.Query("DELETE FROM damagelog_autoslay WHERE ply = '" .. (target and target:SteamID() or steamid) .. "';") + + Damagelog.SQLiteDatabase.Query("DELETE FROM damagelog_autoslay WHERE ply = '" .. (IsValid(target) and target:SteamID() or steamid) .. "';") if ulx then if target then @@ -271,13 +272,14 @@ function Damagelog:SetSlays(admin, steamid, slays, reason, target) ulx.fancyLogAdmin(admin, "#A " .. (difference > 0 and "added " or "removed ") .. math.abs(difference) .. msg .. old_slays .. " time(s) by #s.", target, reason, list) elseif sam then - sam.player.send_message(nil, "{A} {V_1} {V} {V_2} {T} for {R}. They were previously {V_3} {V_4} time(s) by {V_5}.", { + + sam.player.send_message(nil, "{A} {V_1} {V} {V_2} {T} for {A_2}. They were previously {V_3} {V_4} time(s) by {V_5}.", { A = admin_nick, V_1 = difference > 0 and "added " or "removed ", V = math.abs(difference), V_2 = aslay and " autoslays to " or " autojails to ", - T = target, - R = reason, + T = target:Nick(), + A_2 = reason, V_3 = aslay and " autoslain " or " autojailed ", V_4 = old_slays, V_5 = list @@ -293,13 +295,13 @@ function Damagelog:SetSlays(admin, steamid, slays, reason, target) ulx.fancyLogAdmin(admin, "#A " .. (difference > 0 and "added " or "removed ") .. math.abs(difference) .. msg .. old_slays .. " time(s) by #s.", steamid, reason, list) elseif sam then - sam.player.send_message(nil, "{A} {V_1} {V} {V_2} {T} for {R}. They were previously {V_3} {V_4} time(s) by {V_5}.", { + sam.player.send_message(nil, "{A} {V_1} {V} {V_2} {T} for {A_2}. They were previously {V_3} {V_4} time(s) by {V_5}.", { A = admin_nick, V_1 = difference > 0 and "added " or "removed ", V = math.abs(difference), V_2 = aslay and " autoslays to " or " autojails to ", T = steamid, - R = reason, + A_2 = reason, V_3 = aslay and " autoslain " or " autojailed ", V_4 = old_slays, V_5 = list @@ -635,4 +637,4 @@ if Damagelog.ULX_Autoslay_ForceRole then end end end) -end \ No newline at end of file +end diff --git a/lua/damagelogs/server/rdm_manager.lua b/lua/damagelogs/server/rdm_manager.lua index 596dee84..03f0cd3b 100644 --- a/lua/damagelogs/server/rdm_manager.lua +++ b/lua/damagelogs/server/rdm_manager.lua @@ -519,7 +519,7 @@ net.Receive("DL_UpdateStatus", function(_len, ply) hook.Run("RDMManagerStatusUpdated", ply, index, status, previous) - if status == RDM_MANAGER_WAITING then + if status == RDM_MANAGER_WAITING or status == RDM_MANAGER_READYFORSTAFF then msg = string_format(TTTLogTranslate(ply.DMGLogLang, "HasSetReport"), ply:Nick(), index, TTTLogTranslate(ply.DMGLogLang, "RDMWaiting")) local syncEnt = Damagelog:GetSyncEnt() @@ -537,15 +537,19 @@ net.Receive("DL_UpdateStatus", function(_len, ply) local syncEnt = Damagelog:GetSyncEnt() - if IsValid(syncEnt) and previousStatus == RDM_MANAGER_WAITING and not tbl.adminReport then - syncEnt:SetPendingReports(syncEnt:GetPendingReports() - 1) + if IsValid(syncEnt) and not tbl.adminReport then + if previousStatus == RDM_MANAGER_WAITING or previousStatus == RDM_MANAGER_READYFORSTAFF then + syncEnt:SetPendingReports(syncEnt:GetPendingReports() - 1) + end end elseif status == RDM_MANAGER_FINISHED then msg = string_format(TTTLogTranslate(ply.DMGLogLang, "HasSetReport"), ply:Nick(), index, TTTLogTranslate(ply.DMGLogLang, "Finished")) local syncEnt = Damagelog:GetSyncEnt() - if IsValid(syncEnt) and previousStatus == RDM_MANAGER_WAITING and not tbl.adminReport then - syncEnt:SetPendingReports(syncEnt:GetPendingReports() - 1) + if IsValid(syncEnt) and not tbl.adminReport then + if previousStatus == RDM_MANAGER_WAITING or previousStatus == RDM_MANAGER_READYFORSTAFF then + syncEnt:SetPendingReports(syncEnt:GetPendingReports() - 1) + end end end @@ -773,6 +777,9 @@ net.Receive("DL_GetForgive", function(_, ply) end end else + if tbl.status == RDM_MANAGER_WAITING then + tbl.status = RDM_MANAGER_READYFORSTAFF + end tbl.handedOffToAdminsAt = os.time() end diff --git a/lua/damagelogs/shared/autoslay.lua b/lua/damagelogs/shared/autoslay.lua index 9cf6ea34..d663ee19 100644 --- a/lua/damagelogs/shared/autoslay.lua +++ b/lua/damagelogs/shared/autoslay.lua @@ -139,181 +139,237 @@ local function CreateCommand() return elseif sam then - function sam.autoslay(calling_ply, target, rounds, reason) - Damagelog:SetSlays(calling_ply, target:SteamID(), rounds, reason, target) - end + + -- SAM may run the below functions within a zero timer, to ensure they are overridden, we need a delay for reliability. + timer.Simple(1, function() + + function sam.autoslay(calling_ply, target, rounds, reason) + Damagelog:SetSlays(calling_ply, target:SteamID(), rounds, reason, target) + end - function sam.autoslayid(calling_ply, target, rounds, reason) - if sam.is_steamid(target) then - for _, v in ipairs(player.GetHumans()) do - if v:SteamID() == target then - sam.autoslay(calling_ply, v, rounds, reason) + function sam.autoslayid(calling_ply, target, rounds, reason) + if sam.is_steamid(target) then + for _, v in ipairs(player.GetHumans()) do + if v:SteamID() == target then + sam.autoslay(calling_ply, v, rounds, reason) - return + return + end end + + Damagelog:SetSlays(calling_ply, target, rounds, reason, false) + else + sam.player.send_message(calling_ply, "{V_1} is an invalid steamid.", { + V_1 = target + }) end + end - Damagelog:SetSlays(calling_ply, target, rounds, reason, false) - else - sam.player.send_message(calling_ply, "{V_1} is an invalid steamid.", { - V_1 = target - }) + function sam.cslays(calling_ply, target) + + -- TODO: Support MySQL + local data = Damagelog.SQLiteDatabase.QuerySingle(string.format("SELECT * FROM damagelog_autoslay WHERE ply = %s", sql.SQLStr(target:SteamID()))) + local txt = "slays" + local p = "has" + local t = target:Name() + + if calling_ply == target then + p = "have" + t = "You" + end + + if data then + sam.player.send_message(calling_ply, "{T} {V_1} {V} {V_2} left with the reason : {V_3}", { + T = t, + V_1 = p, + V = data.slays, + V_2 = txt, + V_3 = data.reason + }) + else + sam.player.send_message(calling_ply, "{T} {V_1} no {V_2} left.", { + T = t, + V_1 = p, + V_2 = txt + }) + end end - end - function sam.cslays(calling_ply, target) - -- TODO: Support MySQL - local data = Damagelog.SQLiteDatabase.QuerySingle(string.format("SELECT * FROM damagelog_autoslay WHERE ply = %s", sql.SQLStr(target:SteamID()))) - local txt = aslay and "slays" or "jails" - local p = "has" - local t = target:Name() + function sam.cslaysid(calling_ply, steamid) + if not sam.is_steamid(steamid) then + sam.player.send_message(calling_ply, "{V_1} is an invalid steamid.", { + V_1 = steamid + }) - if calling_ply == target then - p = "have" - t = "You" + return + end + + -- TODO: Support MySQL + local data = Damagelog.SQLiteDatabase.QuerySingle(string.format("SELECT * FROM damagelog_autoslay WHERE ply = %s", sql.SQLStr(steamid))) + local txt = "slays" + + if data then + sam.player.send_message(calling_ply, "{T} has {V} {V_1} left with the reason : {V_2}", { + T = steamid, + V = data.slays, + V_1 = txt, + V_2 = data.reason + }) + else + sam.player.send_message(calling_ply, "{T} has no {V_1} left.", { + T = steamid, + V_1 = txt + }) + end end - if data then - sam.player.send_message(calling_ply, "{T} {V_1} {V} {V_2} left with the reason : {V_3}", { - T = t, - V_1 = p, - V = data.slays, - V_2 = txt, - V_3 = data.reason + local command = sam.command + command.set_category("TTT") + + command.new("setslays") + :SetPermission("setslays", "operator") + + :AddArg("player", { + single_target = true }) - else - sam.player.send_message(calling_ply, "{T} {V_1} no {V_2} left.", { - T = t, - V_1 = p, - V_2 = txt + + :AddArg("number", { + hint = "amount", + optional = true, + default = 1, + round = true }) - end - end - function sam.cslaysid(calling_ply, steamid) - if not sam.is_steamid(steamid) then - sam.player.send_message(calling_ply, "{V_1} is an invalid steamid.", { - V_1 = steamid + :AddArg("text", { + hint = "reason", + optional = true, + default = "Reason" }) - return - end + :Help("Set slays to a person") + :OnExecute(function(admin, targets, slays, reason) + local target = targets[1] + Damagelog:SetSlays(admin, target:SteamID(), slays, reason, target) + end) + :End() - -- TODO: Support MySQL - local data = Damagelog.SQLiteDatabase.QuerySingle(string.format("SELECT * FROM damagelog_autoslay WHERE ply = %s", sql.SQLStr(steamid))) - local txt = aslay and "slays" or "jails" + command.new("aslay") + :SetPermission("aslay", "operator") - if data then - sam.player.send_message(calling_ply, "{T} has {V} {V_1} left with the reason : {V_2}", { - T = steamid, - V = data.slays, - V_1 = txt, - V_2 = data.reason + :AddArg("player", { + single_target = true }) - else - sam.player.send_message(calling_ply, "{T} has no {V_1} left.", { - T = steamid, - V_1 = txt + + :AddArg("number", { + hint = "amount", + optional = true, + default = 1, + round = true }) - end - end - local command = sam.command - command.set_category("TTT") + :AddArg("text", { + hint = "reason", + optional = true, + default = "Reason" + }) - command.new("aslay") - :SetPermission("aslay", "operator") + :Help("Set slays to a person") + :OnExecute(function(admin, targets, slays, reason) + local target = targets[1] + Damagelog:SetSlays(admin, target:SteamID(), slays , reason, target) + end) + :End() - :AddArg("player", { - single_target = true - }) + command.new("aslayid") + :SetPermission("aslayid", "operator") + :AddArg("steamid") - :AddArg("number", { - hint = "amount", - optional = true, - default = 1, - round = true - }) + :AddArg("number", { + hint = "amount", + default = 1, + round = true + }) - :AddArg("text", { - hint = "reason", - optional = true, - default = "Reason" - }) + :AddArg("text", { + hint = "reason", + default = "Reason" + }) - :Help("Add slays to a person") - :OnExecute(function(admin, targets, slays, reason) - local target = targets[1] - Damagelog:SetSlays(admin, target:SteamID(), slays, reason, target) - end) - :End() + :Help("Sets slays to a steamid.") - command.new("aslayid") - :SetPermission("aslayid", "operator") - :AddArg("steamid") + :GetRestArgs(true) - :AddArg("number", { - hint = "amount", - default = 1, - round = true - }) + :OnExecute(function(admin, promise, slays, reason) + promise:done(function(data) + local steamid, target = data[1], data[2] -- target will be "nil" if player is not online -- target will be "nil" if player is not online + Damagelog:SetSlays(admin, steamid, slays, reason, target) + end) + end) + :End() - :AddArg("text", { - hint = "reason", - default = "Reason" - }) + command.new("removeslays") + :SetPermission("removeslays", "operator") - :Help("Add slays to a steamid.") + :AddArg("player", { + single_target = true + }) - :GetRestArgs(true) + :Help("Remove slays from a person") - :OnExecute(function(admin, promise, slays, reason) - promise:done(function(data) - local steamid, target = data[1], data[2] -- target will be "nil" if player is not online -- target will be "nil" if player is not online - Damagelog:SetSlays(admin, steamid, slays, reason, target) + :OnExecute(function(ply, targets) + local target = targets[1] + Damagelog:SetSlays(ply, target:SteamID(), 0, "Removed", target) end) - end) - :End() + :End() - command.new("removeslays") - :SetPermission("removeslays", "operator") + command.new("removeslaysid") + :SetPermission("removeslaysid", "operator") - :AddArg("player", { - single_target = true + :AddArg("text", { + hint = "steamid/steamid64", }) - :Help("Remove slays from a person") + :Help("remove slays from a steamid.") - :OnExecute(function(ply, targets) - local target = targets[1] - Damagelog:SetSlays(ply, target:SteamID(), 0, "Removed", target) - end) - :End() + :OnExecute(function(admin, steamid) + + local steamid64 = util.SteamIDFrom64( steamid ) + local steamid = steamid64 ~= "STEAM_0:0:0" and steamid64 or steamid - command.new("cslay") - :SetPermission("cslay", "operator") - :AddArg("player", { - single_target = true - }) - :Help("Get slays of a person.") - :OnExecute(function(admin, targets, amount, reason) - local target = targets[1] - sam.cslays(admin, target) + Damagelog:SetSlays(admin, steamid, 0, "Removed") end) :End() - command.new("cslayid") - :SetPermission("cslayid", "operator") + command.new("cslay") + :SetPermission("cslay", "operator") + :AddArg("player", { + single_target = true + }) + :Help("Get slays of a person.") + :OnExecute(function(admin, targets, amount, reason) + local target = targets[1] + sam.cslays(admin, target) + end) + :End() - :AddArg("steamid") + command.new("cslayid") + :SetPermission("cslayid", "operator") - :Help("Get slays of a person.") + :AddArg("text", { + hint = "steamid/steamid64", + }) - :OnExecute(function(admin, targets, amount, reason) - local steamid = targets[1] - sam.cslaysid(admin, steamid) - end) - :End() + :Help("Get slays of a person.") + + :OnExecute(function(admin, steamid) + + local steamid64 = util.SteamIDFrom64( steamid ) + local steamid = steamid64 ~= "STEAM_0:0:0" and steamid64 or steamid + + sam.cslaysid(admin, steamid) + end) + :End() + end) end end diff --git a/lua/damagelogs/shared/lang/english.lua b/lua/damagelogs/shared/lang/english.lua index b0d2c131..3bb58fa1 100644 --- a/lua/damagelogs/shared/lang/english.lua +++ b/lua/damagelogs/shared/lang/english.lua @@ -58,6 +58,7 @@ DamagelogLang.english = { RDMResponded = "Attacker responded", RDMInProgress = "In progress", RDMFinished = "Finished", + RDMReadyForStaff = "Waiting for staff", RDMCanceled = "Canceled by the victim", RDMNotFinished = "This report is not finished!", RDMSetConclusion = "Set conclusion", diff --git a/lua/damagelogs/shared/rdm_manager.lua b/lua/damagelogs/shared/rdm_manager.lua index f1c8e406..6bb31037 100644 --- a/lua/damagelogs/shared/rdm_manager.lua +++ b/lua/damagelogs/shared/rdm_manager.lua @@ -1,7 +1,8 @@ RDM_MANAGER_WAITING = 1 RDM_MANAGER_PROGRESS = 2 RDM_MANAGER_FINISHED = 3 +RDM_MANAGER_READYFORSTAFF = 4 DAMAGELOG_REPORT_STANDARD = 1 DAMAGELOG_REPORT_ADMIN = 2 DAMAGELOG_REPORT_FORCE = 3 -DAMAGELOG_REPORT_CHAT = 4 \ No newline at end of file +DAMAGELOG_REPORT_CHAT = 4