155 lines
4 KiB
Lua
155 lines
4 KiB
Lua
--[[
|
|
© 2017 Thriving Ventures Limited do not share, re-distribute or modify
|
|
|
|
without permission of its author (gustaf@thrivingventures.com).
|
|
]]
|
|
|
|
serverguard.AddFolder("advertisements");
|
|
|
|
local plugin = plugin;
|
|
|
|
plugin:IncludeFile("shared.lua", SERVERGUARD.STATE.SHARED);
|
|
plugin:IncludeFile("cl_panel.lua", SERVERGUARD.STATE.CLIENT);
|
|
|
|
local advertisements = {};
|
|
|
|
local function SAVE_ADVERTISEMENTS()
|
|
file.Write("serverguard/advertisements/advertisements.txt", serverguard.von.serialize(advertisements), "DATA");
|
|
end;
|
|
|
|
plugin:Hook("InitPostEntity", "advertisement.InitPostEntity", function()
|
|
local data = file.Read("serverguard/advertisements/advertisements.txt", "DATA")
|
|
|
|
if (data) then
|
|
local advertisementList = serverguard.von.deserialize(data)
|
|
|
|
-- backwards compatibility with old advertisement format
|
|
for k, v in pairs(advertisementList) do
|
|
if (type(v) == "table") then
|
|
advertisements[#advertisements + 1] = v
|
|
continue;
|
|
end
|
|
|
|
advertisements[#advertisements + 1] = {
|
|
text = v,
|
|
interval = 120,
|
|
color = Color(200, 30, 30, 255)
|
|
}
|
|
end
|
|
else
|
|
file.Write("serverguard/advertisements/advertisements.txt", serverguard.von.serialize(advertisements), "DATA")
|
|
end
|
|
end)
|
|
|
|
plugin:Hook("Tick", "advertisement.Tick", function()
|
|
for k, v in pairs(advertisements) do
|
|
if (!v.nextTime or CurTime() >= v.nextTime) then
|
|
if (hook.Call("serverguard.advertisement.Show", nil, v)) then continue; end;
|
|
|
|
util.PrintAllColor(v.color, v.text)
|
|
|
|
v.nextTime = CurTime() + v.interval
|
|
end
|
|
end
|
|
end)
|
|
|
|
--
|
|
-- Sends the advertisements to the player.
|
|
--
|
|
|
|
serverguard.netstream.Hook("sgRequestAdvertisements", function(player, data)
|
|
if (serverguard.player:HasPermission(player, "Manage Advertisements")) then
|
|
for k, v in ipairs(advertisements) do
|
|
serverguard.netstream.Start(player, "sgGetAdvertisement", {
|
|
v.text, v.interval, v.color
|
|
});
|
|
end;
|
|
end;
|
|
end);
|
|
|
|
--
|
|
-- Creates an advertisement.
|
|
--
|
|
|
|
serverguard.netstream.Hook("sgCreateAdvertisement", function(player, data)
|
|
if (serverguard.player:HasPermission(player, "Manage Advertisements")) then
|
|
local text = string.sub(data[1], 1, 256)
|
|
local interval = math.Clamp(data[2], 10, 86400)
|
|
local color = data[3];
|
|
|
|
table.insert(advertisements, {
|
|
text = text,
|
|
interval = interval,
|
|
color = Color(color.r, color.g, color.b, 255)
|
|
});
|
|
|
|
serverguard.Notify(player, SERVERGUARD.NOTIFY.GREEN, "Added advertisement \"" .. text .. "\".");
|
|
|
|
for k, v in ipairs(advertisements) do
|
|
serverguard.netstream.Start(player, "sgGetAdvertisement", {
|
|
v.text, v.interval, v.color
|
|
});
|
|
end;
|
|
|
|
SAVE_ADVERTISEMENTS();
|
|
end;
|
|
end);
|
|
|
|
--
|
|
-- Changes or creates an advertisement.
|
|
--
|
|
|
|
serverguard.netstream.Hook("sgChangeAdvertisement", function(player, data)
|
|
if (serverguard.player:HasPermission(player, "Manage Advertisements")) then
|
|
local id = data[1];
|
|
local text = string.sub(data[2], 1, 256);
|
|
local interval = math.Round(math.Clamp(data[3], 10, 86400));
|
|
local color = data[4];
|
|
|
|
if (id > 0) then
|
|
advertisements[id] = {
|
|
text = text,
|
|
interval = interval,
|
|
color = Color(color.r, color.g, color.b, 255)
|
|
};
|
|
|
|
serverguard.Notify(player, SERVERGUARD.NOTIFY.GREEN, "Changed advertisement to \"" .. text .. "\".");
|
|
end;
|
|
|
|
for k, v in ipairs(advertisements) do
|
|
serverguard.netstream.Start(player, "sgGetAdvertisement", {
|
|
v.text, v.interval, v.color
|
|
});
|
|
end
|
|
|
|
SAVE_ADVERTISEMENTS();
|
|
end;
|
|
end);
|
|
|
|
--
|
|
-- Removes an advertisement.
|
|
--
|
|
|
|
serverguard.netstream.Hook("sgRemoveAdvertisement", function(player, data)
|
|
if (serverguard.player:HasPermission(player, "Manage Advertisements")) then
|
|
local id = data;
|
|
|
|
if (id) then
|
|
local data = advertisements[id];
|
|
|
|
if (data) then
|
|
serverguard.Notify(player, SERVERGUARD.NOTIFY.RED, "Removed advertisement \"" .. data.text .. "\".");
|
|
|
|
table.remove(advertisements, id);
|
|
|
|
for k, v in ipairs(advertisements) do
|
|
serverguard.netstream.Start(player, "sgGetAdvertisement", {
|
|
v.text, v.interval, v.color
|
|
});
|
|
end;
|
|
|
|
SAVE_ADVERTISEMENTS();
|
|
end;
|
|
end;
|
|
end;
|
|
end);
|