diff --git a/config/banners.toml b/config/banners.toml
new file mode 100644
index 0000000..567a736
--- /dev/null
+++ b/config/banners.toml
@@ -0,0 +1,16 @@
+[[banner]]
+welcome = true
+text = "This server is running WolfAdmin."
+
+[[banner]]
+welcome = true
+text = "Type ^7/wolfadmin ^9for more information."
+
+[[banner]]
+welcome = true
+info = true
+text = "Type ^7!help ^9to view your available commands."
+
+[[banner]]
+info = true
+text = "Remember to have fun!"
diff --git a/config/wolfadmin.toml b/config/wolfadmin.toml
index cf52af7..41a7abb 100644
--- a/config/wolfadmin.toml
+++ b/config/wolfadmin.toml
@@ -45,7 +45,9 @@ timeout = 0
restricted = []
[banners]
-welcome = "^dwolfadmin: ^9This server is running WolfAdmin, type ^7/wolfadmin ^9for more information."
+file = "banners.toml"
+interval = 120
+random = 1
area = 3
[rules]
diff --git a/luascripts/wolfadmin/admin/banners.lua b/luascripts/wolfadmin/admin/banners.lua
new file mode 100644
index 0000000..94cf257
--- /dev/null
+++ b/luascripts/wolfadmin/admin/banners.lua
@@ -0,0 +1,116 @@
+
+-- WolfAdmin module for Wolfenstein: Enemy Territory servers.
+-- Copyright (C) 2015-2019 Timo 'Timothy' Smit
+
+-- This program is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation, either version 3 of the License, or
+-- at your option any later version.
+
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see .
+
+local bits = wolfa_requireModule("util.bits")
+local events = wolfa_requireModule("util.events")
+local settings = wolfa_requireModule("util.settings")
+local timers = wolfa_requireModule("util.timers")
+
+local toml = wolfa_requireLib("toml")
+
+local banners = {}
+
+banners.RANDOM_START = 1
+banners.RANDOM_ALL = 2
+
+local nextBannerId = 0
+local bannerTimer
+
+local welcomeBanners = {}
+local infoBanners = {}
+
+function banners.print(clientId, banner)
+ local target = clientId and clientId or -1
+
+ et.trap_SendConsoleCommand(et.EXEC_APPEND, "cchat "..target.." \"^dbanner: ^9"..banner["text"].."\";")
+end
+
+function banners.autoprint()
+ if bits.hasbit(settings.get("g_bannerRandomize"), banners.RANDOM_ALL) then
+ nextBannerId = math.random(#infoBanners)
+ elseif nextBannerId ~= #infoBanners then
+ nextBannerId = nextBannerId + 1
+ else
+ nextBannerId = 0
+ end
+
+ banners.print(nil, infoBanners[nextBannerId])
+end
+
+function banners.load()
+ local fileName = settings.get("g_fileBanners")
+
+ if fileName == "" then
+ return 0
+ end
+
+ local fileDescriptor, fileLength = et.trap_FS_FOpenFile(fileName, et.FS_READ)
+
+ if fileLength == -1 then
+ return 0
+ end
+
+ -- in case someone issued a !readconfig, make sure the old data is removed
+ banners.clear()
+
+ local fileString = et.trap_FS_Read(fileDescriptor, fileLength)
+
+ et.trap_FS_FCloseFile(fileDescriptor)
+
+ local fileTable = toml.parse(fileString)
+
+ if fileTable["banner"] then
+ for _, banner in ipairs(fileTable["banner"]) do
+ if banner["welcome"] and banner["welcome"] == true then
+ table.insert(welcomeBanners, banner)
+ end
+
+ if banner["info"] and banner["info"] == true then
+ table.insert(infoBanners, banner)
+ end
+ end
+ end
+
+ return #welcomeBanners + #infoBanners
+end
+
+function banners.clear()
+ welcomeBanners = {}
+ infoBanners = {}
+end
+
+function banners.onPlayerReady(clientId, firstTime)
+ if firstTime then
+ for _, banner in ipairs(welcomeBanners) do
+ banners.print(clientId, banner)
+ end
+ end
+end
+events.handle("onPlayerReady", banners.onPlayerReady)
+
+function banners.onGameInit(levelTime, randomSeed, restartMap)
+ banners.load()
+
+ if bits.hasbit(settings.get("g_bannerRandomize"), banners.RANDOM_START) then
+ nextBannerId = math.random(#infoBanners)
+ end
+
+ bannerTimer = timers.add(banners.autoprint, settings.get("g_bannerInterval") * 1000, 0)
+end
+events.handle("onGameInit", banners.onGameInit)
+
+return banners
diff --git a/luascripts/wolfadmin/commands/admin/readconfig.lua b/luascripts/wolfadmin/commands/admin/readconfig.lua
index a144900..8387ddf 100644
--- a/luascripts/wolfadmin/commands/admin/readconfig.lua
+++ b/luascripts/wolfadmin/commands/admin/readconfig.lua
@@ -15,6 +15,7 @@
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see .
+local banners = wolfa_requireModule("admin.banners")
local rules = wolfa_requireModule("admin.rules")
local auth = wolfa_requireModule("auth.auth")
@@ -29,11 +30,12 @@ local settings = wolfa_requireModule("util.settings")
function commandReadconfig(clientId, command)
settings.load()
+ local bannersCount = banners.load()
local rulesCount = rules.load()
local greetingsCount = greetings.load()
local spreesCount = sprees.load()
- et.trap_SendConsoleCommand(et.EXEC_APPEND, "csay "..clientId.." \"readconfig: loaded "..greetingsCount.." greetings, "..rulesCount.." rules, "..spreesCount.." sprees\";")
+ et.trap_SendConsoleCommand(et.EXEC_APPEND, "csay "..clientId.." \"readconfig: loaded "..bannersCount.." banners, "..rulesCount.." rules, "..greetingsCount.." greetings, "..spreesCount.." sprees\";")
return false
end
@@ -41,11 +43,12 @@ commands.addadmin("readconfig", commandReadconfig, auth.PERM_READCONFIG, "reload
function commandReadconfig(clientId, command)
settings.load()
+ local bannersCount = banners.load()
local rulesCount = rules.load()
local greetingsCount = greetings.load()
local spreesCount = sprees.load()
- et.trap_SendConsoleCommand(et.EXEC_APPEND, "csay "..clientId.." \"readconfig: loaded "..greetingsCount.." greetings, "..rulesCount.." rules, "..spreesCount.." sprees\";")
+ et.trap_SendConsoleCommand(et.EXEC_APPEND, "csay "..clientId.." \"readconfig: loaded "..bannersCount.." banners, "..rulesCount.." rules, "..greetingsCount.." greetings, "..spreesCount.." sprees\";")
return false
end
diff --git a/luascripts/wolfadmin/game/game.lua b/luascripts/wolfadmin/game/game.lua
index 92226aa..df79cc5 100644
--- a/luascripts/wolfadmin/game/game.lua
+++ b/luascripts/wolfadmin/game/game.lua
@@ -108,11 +108,4 @@ function game.onrevive(clientMedic, clientVictim)
end
events.handle("onPlayerRevive", game.onrevive)
-function game.onready(clientId, firstTime)
- if firstTime and settings.get("g_welcomeMessage") ~= "" then
- et.trap_SendConsoleCommand(et.EXEC_APPEND, "cchat "..clientId.." \""..settings.get("g_welcomeMessage").."\";")
- end
-end
-events.handle("onPlayerReady", game.onready)
-
return game
diff --git a/luascripts/wolfadmin/main.lua b/luascripts/wolfadmin/main.lua
index 0ccdaeb..c04b006 100644
--- a/luascripts/wolfadmin/main.lua
+++ b/luascripts/wolfadmin/main.lua
@@ -17,6 +17,7 @@
local admin
local balancer
+local banners
local bans
local history
local mutes
@@ -107,6 +108,7 @@ function et_InitGame(levelTime, randomSeed, restartMap)
admin = wolfa_requireModule("admin.admin")
balancer = wolfa_requireModule("admin.balancer")
+ banners = wolfa_requireModule("admin.banners")
bans = wolfa_requireModule("admin.bans")
history = wolfa_requireModule("admin.history")
mutes = wolfa_requireModule("admin.mutes")
diff --git a/luascripts/wolfadmin/util/settings.lua b/luascripts/wolfadmin/util/settings.lua
index a2b64f8..0806eba 100644
--- a/luascripts/wolfadmin/util/settings.lua
+++ b/luascripts/wolfadmin/util/settings.lua
@@ -23,6 +23,7 @@ local settings = {}
local data = {
["g_logChat"] = "chat.log",
["g_logAdmin"] = "admin.log",
+ ["g_fileBanners"] = "banners.toml",
["g_fileGreetings"] = "greetings.toml",
["g_fileRules"] = "rules.toml",
["g_fileSprees"] = "sprees.toml",
@@ -34,7 +35,8 @@ local data = {
["g_announceRevives"] = 1,
["g_greetingArea"] = 3,
["g_botGreetings"] = 1,
- ["g_welcomeMessage"] = "^dwolfadmin: ^9This server is running WolfAdmin, type ^7/wolfadmin ^9for more information.",
+ ["g_bannerInterval"] = 120,
+ ["g_bannerRandomize"] = 1,
["g_welcomeArea"] = 3,
["g_evenerMinDifference"] = 2,
["g_evenerMaxDifference"] = 5,
@@ -95,7 +97,9 @@ local cfgStructure = {
["restricted"] = "g_restrictedVotes"
},
["banners"] = {
- ["welcome"] = "g_welcomeMessage",
+ ["file"] = "g_fileBanners",
+ ["interval"] = "g_bannerInterval",
+ ["random"] = "g_bannerRandomize",
["area"] = "g_welcomeArea"
},
["rules"] = {