2018-08-13 17:36:21 +02:00
|
|
|
local Module = {}
|
|
|
|
|
2018-08-13 17:04:02 +02:00
|
|
|
local Gui = require("utils.gui")
|
|
|
|
local Utils = require("utils.utils");
|
|
|
|
local report_frame_name = Gui.uid_name()
|
|
|
|
local report_close_button_name = Gui.uid_name()
|
|
|
|
local report_tab_button_name = Gui.uid_name()
|
|
|
|
local report_body_name = Gui.uid_name()
|
2018-08-13 19:52:21 +02:00
|
|
|
|
2018-08-13 17:04:02 +02:00
|
|
|
global.reports = {}
|
|
|
|
global.player_report_data = {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
local function draw_report(parent, report_id)
|
|
|
|
local report = global.reports[report_id]
|
2018-08-15 14:08:01 +02:00
|
|
|
if report_id == 0 or not report then
|
|
|
|
parent.add {type = "label", caption="No reports yet."}
|
|
|
|
return
|
|
|
|
end
|
2018-08-13 17:04:02 +02:00
|
|
|
local reported_player_name = game.players[report.reported_player_index].name
|
|
|
|
local reporting_player_name = game.players[report.reporting_player_index].name
|
|
|
|
local time = Utils.format_time(report.tick)
|
|
|
|
local time_ago = Utils.format_time(game.tick - report.tick)
|
|
|
|
|
|
|
|
local message = report.message
|
2018-08-15 01:24:24 +02:00
|
|
|
Gui.clear(parent)
|
2018-08-13 17:04:02 +02:00
|
|
|
|
|
|
|
parent.add {type="label", caption="Offender: " .. reported_player_name}
|
2018-08-13 20:53:23 +02:00
|
|
|
local msg_label_pane = parent.add {type="scroll-pane", vertical_scroll_policy = "auto-and-reserve-space", horizontal_scroll_policy="never"}
|
|
|
|
msg_label_pane.style.maximal_height = 400
|
|
|
|
local msg_label = msg_label_pane.add {type="label", caption="Message: " .. message}
|
2018-08-13 17:04:02 +02:00
|
|
|
msg_label.style.single_line = false
|
|
|
|
msg_label.style.maximal_width = 680
|
|
|
|
parent.add {type="label", caption=string.format("Time: %s (%s ago)", time, time_ago)}
|
|
|
|
parent.add {type="label", caption="Reported by: " .. reporting_player_name}
|
|
|
|
end
|
|
|
|
|
2018-08-15 14:15:03 +02:00
|
|
|
Module.show_reports = function(player)
|
2018-08-13 17:08:24 +02:00
|
|
|
local reports = global.reports or {}
|
2018-08-13 17:04:02 +02:00
|
|
|
|
2018-08-15 01:24:24 +02:00
|
|
|
local center = player.gui.center
|
2018-08-13 17:04:02 +02:00
|
|
|
|
2018-08-15 14:20:27 +02:00
|
|
|
if center[report_frame_name] then
|
|
|
|
Gui.clear(center)
|
|
|
|
end
|
2018-08-13 19:52:21 +02:00
|
|
|
local report_frame = center.add {
|
|
|
|
type = 'frame',
|
|
|
|
name = report_frame_name,
|
|
|
|
direction = 'vertical',
|
|
|
|
caption = 'User reports'
|
|
|
|
}
|
|
|
|
report_frame.style.maximal_width = 700
|
|
|
|
player.opened = report_frame
|
|
|
|
|
|
|
|
if #reports > 1 then
|
|
|
|
local scroll_pane = report_frame.add{type = "scroll-pane", horizontal_scroll_policy = "auto-and-reserve-space", vertical_scroll_policy="never"}
|
|
|
|
local tab_flow = scroll_pane.add{type="flow"}
|
|
|
|
for k,report in pairs(reports) do
|
|
|
|
local button_cell = tab_flow.add{type="flow", caption="reportuid" .. k}
|
|
|
|
button_cell.add {
|
|
|
|
type="button",
|
|
|
|
name=report_tab_button_name,
|
2018-08-15 14:08:01 +02:00
|
|
|
caption = game.players[report.reported_player_index].name
|
2018-08-13 19:52:21 +02:00
|
|
|
}
|
2018-08-13 17:08:24 +02:00
|
|
|
end
|
2018-08-13 19:52:21 +02:00
|
|
|
end
|
2018-08-13 17:08:24 +02:00
|
|
|
local report_body = report_frame.add {type = "scroll-pane", name = report_body_name, horizontal_scroll_policy = "never", vertical_scroll_policy="never"}
|
|
|
|
report_frame.add {type = 'button', name = report_close_button_name, caption = 'Close'}
|
2018-08-15 14:08:01 +02:00
|
|
|
|
|
|
|
draw_report(report_body, #reports)
|
2018-08-13 17:04:02 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
local function report(reporting_player, reported_player, message)
|
2018-08-13 17:08:24 +02:00
|
|
|
table.insert(global.reports, {reporting_player_index = reporting_player.index, reported_player_index = reported_player.index, message = message, tick = game.tick})
|
2018-08-13 17:04:02 +02:00
|
|
|
|
2018-08-13 17:08:24 +02:00
|
|
|
local notified = false
|
2018-08-13 17:04:02 +02:00
|
|
|
for _,p in pairs(game.players) do
|
2018-08-13 17:08:24 +02:00
|
|
|
if p.admin and p.connected then
|
2018-08-15 14:15:03 +02:00
|
|
|
Module.show_reports(p)
|
2018-08-13 17:08:24 +02:00
|
|
|
if p.afk_time < 3600 then notified = true end
|
2018-08-13 17:04:02 +02:00
|
|
|
end
|
2018-08-13 17:08:24 +02:00
|
|
|
end
|
|
|
|
if not notified then
|
|
|
|
for _,p in pairs(game.players) do
|
|
|
|
if p.admin then
|
2018-08-15 14:15:03 +02:00
|
|
|
Module.show_reports(p)
|
2018-08-13 17:08:24 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2018-08-13 17:04:02 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
Gui.on_custom_close(
|
|
|
|
report_frame_name,
|
|
|
|
function(event)
|
|
|
|
Gui.remove_data_recursivly(event.element)
|
|
|
|
event.element.destroy()
|
|
|
|
end
|
|
|
|
)
|
|
|
|
|
|
|
|
Gui.on_click(
|
|
|
|
report_close_button_name,
|
|
|
|
function(event)
|
2018-08-13 19:52:21 +02:00
|
|
|
Gui.remove_data_recursivly(event.element.parent)
|
2018-08-13 17:04:02 +02:00
|
|
|
event.element.parent.destroy()
|
|
|
|
end
|
|
|
|
)
|
|
|
|
|
|
|
|
Gui.on_click(
|
|
|
|
report_tab_button_name,
|
|
|
|
function(event)
|
2018-08-13 17:08:24 +02:00
|
|
|
local center = event.player.gui.center
|
|
|
|
local report_frame = center[report_frame_name]
|
|
|
|
local report_uid_str = string.sub(event.element.parent.caption, 10)
|
|
|
|
local report_uid = tonumber(report_uid_str)
|
|
|
|
draw_report(report_frame[report_body_name], report_uid)
|
2018-08-13 17:04:02 +02:00
|
|
|
end
|
|
|
|
)
|
|
|
|
|
2018-08-13 17:36:21 +02:00
|
|
|
|
2018-08-13 19:52:21 +02:00
|
|
|
local reporting_popup_name = Gui.uid_name()
|
|
|
|
local reporting_cancel_button_name = Gui.uid_name()
|
|
|
|
local reporting_submit_button_name = Gui.uid_name()
|
|
|
|
local reporting_input_name = Gui.uid_name()
|
|
|
|
|
2018-08-13 20:04:45 +02:00
|
|
|
Module.spawn_reporting_popup = function(player, reported_player)
|
2018-08-13 19:52:21 +02:00
|
|
|
|
2018-08-15 01:24:24 +02:00
|
|
|
local center = player.gui.center
|
2018-08-13 19:52:21 +02:00
|
|
|
|
2018-08-15 14:20:27 +02:00
|
|
|
|
|
|
|
if center[reporting_popup_name] then
|
|
|
|
Gui.clear(center)
|
|
|
|
end
|
2018-08-13 19:52:21 +02:00
|
|
|
local reporting_popup = center.add {
|
|
|
|
type = 'frame',
|
|
|
|
name = reporting_popup_name,
|
|
|
|
direction = 'vertical',
|
|
|
|
caption = 'Report player ' .. reported_player.name
|
|
|
|
}
|
|
|
|
Gui.set_data(reporting_popup, {reported_player_index = reported_player.index})
|
|
|
|
|
|
|
|
reporting_popup.style.maximal_width = 500
|
|
|
|
player.opened = reporting_popup
|
|
|
|
reporting_popup.add {
|
|
|
|
type = 'label',
|
|
|
|
caption = 'Report message:'
|
2018-08-13 20:53:23 +02:00
|
|
|
}
|
2018-08-13 19:52:21 +02:00
|
|
|
local input = reporting_popup.add {type = 'text-box', name=reporting_input_name}
|
|
|
|
input.style.width = 400
|
|
|
|
input.style.height = 85
|
|
|
|
local button_flow = reporting_popup.add {type = "flow"}
|
|
|
|
submit_button = button_flow.add {type = "button", name = reporting_submit_button_name, caption="Submit"}
|
|
|
|
button_flow.add {type = "button", name = reporting_cancel_button_name, caption="Cancel"}
|
2018-08-13 17:36:21 +02:00
|
|
|
|
|
|
|
end
|
|
|
|
|
2018-08-13 19:52:21 +02:00
|
|
|
Gui.on_custom_close(
|
|
|
|
reporting_popup_name,
|
|
|
|
function(event)
|
|
|
|
Gui.remove_data_recursivly(event.element)
|
|
|
|
event.element.destroy()
|
|
|
|
end
|
|
|
|
)
|
|
|
|
|
|
|
|
Gui.on_click(
|
|
|
|
reporting_cancel_button_name,
|
|
|
|
function(event)
|
|
|
|
local frame = event.element.parent.parent
|
|
|
|
Gui.remove_data_recursivly(frame)
|
|
|
|
frame.destroy()
|
|
|
|
end
|
|
|
|
)
|
|
|
|
|
|
|
|
Gui.on_click(
|
|
|
|
reporting_submit_button_name,
|
|
|
|
function(event)
|
|
|
|
local frame = event.element.parent.parent
|
|
|
|
local msg = frame[reporting_input_name].text
|
|
|
|
local data = Gui.get_data(frame)
|
|
|
|
local reported_player_index = data["reported_player_index"]
|
|
|
|
|
|
|
|
Gui.remove_data_recursivly(frame)
|
|
|
|
frame.destroy()
|
|
|
|
report(event.player, game.players[reported_player_index], msg)
|
|
|
|
|
|
|
|
event.player.print("Sucessfully reported " .. game.players[reported_player_index].name)
|
|
|
|
end
|
|
|
|
)
|
|
|
|
|
2018-08-13 17:36:21 +02:00
|
|
|
return Module
|