Skip to content

Instantly share code, notes, and snippets.

@BadgerCode
Last active August 14, 2022 15:20
Show Gist options
  • Save BadgerCode/54cd56a155857dda4b537b658e9a9425 to your computer and use it in GitHub Desktop.
Save BadgerCode/54cd56a155857dda4b537b658e9a9425 to your computer and use it in GitHub Desktop.
Helps with testing damage logs. Requires at least one bot/player connected alongside you
-- Put this in lua/autorun
-- E.g. garrysmod/garrysmod/addons/test-damage-logs/lua/autorun/test-damagelogs.lua
-- Adds the following console commands:
-- damagelog_test_go - Creates a report from you against another player and simulates a response from that player
-- damagelog_test_report_me player_name - Simulates a report against you by the player with the name player_name
-- damagelog_test_report_me_multiple - Simulates multiple players reporting you
-- If the window to Keep/Cancel a report isn't appearing after you make an edit to the damage logs:
-- try disconnecting from the server & starting a new local server from the main menu
-- Report a player and get them to simulate their response
if CLIENT then
local reportedPlayers = {}
concommand.Add( "damagelog_test_go", function( ply, cmd, args )
print("Testing damaging logs...")
local playerToReport = nil
for _, v in ipairs(player.GetAll()) do
if(v != LocalPlayer()) then
if(table.HasValue(reportedPlayers, v) == false) then
playerToReport = v
break;
end
end
end
table.insert(reportedPlayers, playerToReport)
print("Reporting " .. playerToReport:Nick())
local data = {
targetEntIndex = playerToReport:EntIndex(),
reportType = 1, -- DAMAGELOG_REPORT_STANDARD = 1
message = "This player has RDMed me"
}
local payload = util.Compress(util.TableToJSON(data))
net.Start("DL_ReportPlayer")
net.WriteUInt(string.len(payload), 32)
net.WriteData(payload, string.len(payload))
net.SendToServer()
timer.Simple(3, function()
print("Simulating response")
net.Start("DamageLogTest_RequestSimulateAttackerResponse")
net.WriteEntity(playerToReport)
net.SendToServer()
end)
end)
elseif SERVER then
util.AddNetworkString("DamageLogTest_RequestSimulateAttackerResponse")
net.Receive("DamageLogTest_RequestSimulateAttackerResponse", function(len, ply)
local attacker = net.ReadEntity()
local index = #Damagelog.Reports.Current -- Assume the report we're using is the latest one
print("[SERVER] Simulating response")
HandleReportedPlayerAnswer(attacker, 1, "I am very sorry", index)
end)
end
-- Get players to report ME
if CLIENT then
concommand.Add( "damagelog_test_report_me_multiple", function( ply, cmd, args )
print("Testing damaging logs...")
local playersRequested = 0
for _, v in ipairs(player.GetAll()) do
if(v != LocalPlayer()) then
print("Requesting server to ask player " .. v:Nick() .. " to report myself ")
net.Start("DamageLogTest_RequestServerToGenerateReport")
net.WriteEntity(v)
net.SendToServer()
playersRequested = playersRequested + 1
end
if(playersRequested >= 2) then break end
end
end)
concommand.Add("damagelog_test_report_me", function(ply, cmd, args)
local requestedPlayer = string.lower(args[1])
for _, v in ipairs(player.GetAll()) do
if(v != LocalPlayer()) then
local lowername = string.lower(v:Nick())
if(lowername == requestedPlayer) then
print("Requesting server to ask player " .. v:Nick() .. " to report myself ")
net.Start("DamageLogTest_RequestServerToGenerateReport")
net.WriteEntity(v)
net.SendToServer()
end
end
end
end)
elseif SERVER then
util.AddNetworkString("DamageLogTest_RequestServerToGenerateReport")
net.Receive("DamageLogTest_RequestServerToGenerateReport", function(len, ply)
local reportingPlayer = net.ReadEntity()
print("Getting " .. reportingPlayer:Nick() .. " to report " .. ply:Nick())
reportingPlayer.CanReport = true
reportingPlayer.Reported = {}
HandlePlayerReport(reportingPlayer, ply, "This player has RDMed me", 1)
end)
-- hook.Add("PostPlayerDeath", "DamageLogTest_PostPlayerDeath", function(ply)
-- end)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment