diff --git a/config/wolfadmin.toml b/config/wolfadmin.toml index d800ac1..62fe27f 100644 --- a/config/wolfadmin.toml +++ b/config/wolfadmin.toml @@ -57,6 +57,3 @@ file = "rules.toml" file = "greetings.toml" area = 3 bots = 1 - -[records] -bots = 0 diff --git a/luascripts/wolfadmin/commands/admin/readconfig.lua b/luascripts/wolfadmin/commands/admin/readconfig.lua index aab7a4f..e1993d4 100644 --- a/luascripts/wolfadmin/commands/admin/readconfig.lua +++ b/luascripts/wolfadmin/commands/admin/readconfig.lua @@ -22,8 +22,6 @@ local auth = wolfa_requireModule("auth.auth") local commands = wolfa_requireModule("commands.commands") -local sprees = wolfa_requireModule("game.sprees") - local greetings = wolfa_requireModule("players.greetings") local settings = wolfa_requireModule("util.settings") @@ -33,9 +31,8 @@ function commandReadconfig(clientId, command) 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 "..bannersCount.." banners, "..rulesCount.." rules, "..greetingsCount.." greetings, "..spreesCount.." sprees\";") + et.trap_SendConsoleCommand(et.EXEC_APPEND, "csay "..clientId.." \"readconfig: loaded "..bannersCount.." banners, "..rulesCount.." rules, "..greetingsCount.." greetings\";") return false end @@ -46,9 +43,8 @@ function commandReadconfig(clientId, command) 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 "..bannersCount.." banners, "..rulesCount.." rules, "..greetingsCount.." greetings, "..spreesCount.." sprees\";") + et.trap_SendConsoleCommand(et.EXEC_APPEND, "csay "..clientId.." \"readconfig: loaded "..bannersCount.." banners, "..rulesCount.." rules, "..greetingsCount.." greetings\";") return false end diff --git a/luascripts/wolfadmin/commands/admin/resetsprees.lua b/luascripts/wolfadmin/commands/admin/resetsprees.lua deleted file mode 100644 index 3320b05..0000000 --- a/luascripts/wolfadmin/commands/admin/resetsprees.lua +++ /dev/null @@ -1,48 +0,0 @@ - --- WolfAdmin module for Wolfenstein: Enemy Territory servers. --- Copyright (C) 2015-2020 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 auth = wolfa_requireModule("auth.auth") - -local db = wolfa_requireModule("db.db") - -local commands = wolfa_requireModule("commands.commands") - -local game = wolfa_requireModule("game.game") -local sprees = wolfa_requireModule("game.sprees") - -local settings = wolfa_requireModule("util.settings") - -function commandResetSprees(clientId, command, map) - if not db.isConnected() then - et.trap_SendConsoleCommand(et.EXEC_APPEND, "csay "..clientId.." \"^dsprees: ^9spree records are disabled.\";") - - return true - end - - if map and map == "all" then - sprees.reset(true) - - et.trap_SendConsoleCommand(et.EXEC_APPEND, "cchat -1 \"^dresetsprees: ^9all spree records have been reset.\";") - else - sprees.reset() - - et.trap_SendConsoleCommand(et.EXEC_APPEND, "cchat -1 \"^dresetsprees: ^9spree records have been reset for map '^7"..game.getMap().."^9'.\";") - end - - return true -end -commands.addadmin("resetsprees", commandResetSprees, auth.PERM_READCONFIG, "resets the spree records", nil, (settings.get("g_spreeRecords") == 0)) diff --git a/luascripts/wolfadmin/commands/admin/sprees.lua b/luascripts/wolfadmin/commands/admin/sprees.lua deleted file mode 100644 index cd0aca9..0000000 --- a/luascripts/wolfadmin/commands/admin/sprees.lua +++ /dev/null @@ -1,47 +0,0 @@ - --- WolfAdmin module for Wolfenstein: Enemy Territory servers. --- Copyright (C) 2015-2020 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 auth = wolfa_requireModule("auth.auth") - -local commands = wolfa_requireModule("commands.commands") - -local db = wolfa_requireModule("db.db") - -local sprees = wolfa_requireModule("game.sprees") - -function commandShowSprees(clientId, command) - if not db.isConnected() then - et.trap_SendConsoleCommand(et.EXEC_APPEND, "csay "..clientId.." \"^dsprees: ^9spree records are disabled.\";") - - return true - end - - local records = sprees.get() - - if #records == 0 then - et.trap_SendConsoleCommand(et.EXEC_APPEND, "csay "..clientId.." \"^dsprees: ^9there are no records for this map yet.\"") - else - for i = 0, sprees.TYPE_NUM - 1 do - if records[i] and records[i]["record"] > 0 then - et.trap_SendConsoleCommand(et.EXEC_APPEND, "cchat -1 \"^dsprees: ^9longest "..sprees.getRecordNameByType(i).." spree (^7"..records[i]["record"].."^9) by ^7"..db.getLastAlias(records[i]["player"])["alias"].."^9.\";") - end - end - end - - return true -end -commands.addadmin("sprees", commandShowSprees, auth.PERM_LISTSPREES, "display the current spree records") diff --git a/luascripts/wolfadmin/game/sprees.lua b/luascripts/wolfadmin/game/sprees.lua deleted file mode 100644 index 300774b..0000000 --- a/luascripts/wolfadmin/game/sprees.lua +++ /dev/null @@ -1,394 +0,0 @@ - --- WolfAdmin module for Wolfenstein: Enemy Territory servers. --- Copyright (C) 2015-2020 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 db = wolfa_requireModule("db.db") - -local game = wolfa_requireModule("game.game") - -local players = wolfa_requireModule("players.players") - -local bits = wolfa_requireModule("util.bits") -local constants = wolfa_requireModule("util.constants") -local events = wolfa_requireModule("util.events") -local files = wolfa_requireModule("util.files") -local settings = wolfa_requireModule("util.settings") - -local toml = wolfa_requireLib("toml") - -local sprees = {} - -sprees.RECORD_BOTS_PLAYING = 1 -sprees.RECORD_BOTS = 2 - -sprees.SOUND_PLAY_SELF = 0 -sprees.SOUND_PLAY_PUBLIC = 1 - -sprees.TYPE_KILL = 0 -sprees.TYPE_DEATH = 1 -sprees.TYPE_REVIVE = 2 -sprees.TYPE_NUM = 3 - -sprees.TYPE_KILL_NAME = "kill" -sprees.TYPE_DEATH_NAME = "death" -sprees.TYPE_REVIVE_NAME = "revive" - -local spreeNames = { - [sprees.TYPE_KILL] = sprees.TYPE_KILL_NAME, - [sprees.TYPE_DEATH] = sprees.TYPE_DEATH_NAME, - [sprees.TYPE_REVIVE] = sprees.TYPE_REVIVE_NAME -} - -local spreeTypes = { - [sprees.TYPE_KILL_NAME] = sprees.TYPE_KILL, - [sprees.TYPE_DEATH_NAME] = sprees.TYPE_DEATH, - [sprees.TYPE_REVIVE_NAME] = sprees.TYPE_REVIVE -} - -local spreeMessages = {} -local spreeMessagesByType = {} - -local playerSprees = {} -local currentRecords = {} -- cached version -local currentMapId - -function sprees.getRecordNameByType(type) - return spreeNames[type] -end - -function sprees.getRecordTypeByName(name) - return spreeTypes[name] -end - -function sprees.get() - return currentRecords -end - -function sprees.reset(truncate) - if truncate then - db.removeAllRecords() - else - db.removeRecords(currentMapId) - end - - currentRecords = {} -end - -function sprees.load() - if db.isConnected() and settings.get("g_spreeRecords") ~= 0 then - local map = db.getMap(game.getMap()) - - if map then - currentMapId = map["id"] - db.updateMap(currentMapId, os.time()) - else - db.addMap(game.getMap(), os.time()) - currentMapId = db.getMap(game.getMap())["id"] - end - - local records = db.getRecords(currentMapId) - - for _, record in ipairs(records) do - currentRecords[record["type"]] = { - ["player"] = tonumber(record["player_id"]), - ["record"] = tonumber(record["record"]) - } - end - end - - for i = 0, sprees.TYPE_NUM - 1 do - spreeMessages[i] = {} - spreeMessagesByType[i] = {} - end - - local fileName = settings.get("g_fileSprees") - - if fileName == "" then - return 0 - end - - if string.find(fileName, ".toml") == string.len(fileName) - 4 then - local fileDescriptor, fileLength = et.trap_FS_FOpenFile(fileName, et.FS_READ) - - if fileLength == -1 then - return 0 - end - - local fileString = et.trap_FS_Read(fileDescriptor, fileLength) - - et.trap_FS_FCloseFile(fileDescriptor) - - local fileTable = toml.parse(fileString) - - local amount = 0 - - for name, block in pairs(fileTable) do - for _, spree in ipairs(block) do - if spree["msg"] then - table.insert(spreeMessagesByType[sprees.getRecordTypeByName(name)], spree) - - spreeMessages[sprees.getRecordTypeByName(name)][spree["amount"]] = spree - - amount = amount + 1 - end - end - end - - return amount - else - -- compatibility for 1.1.* and lower - outputDebug("Using .cfg files is deprecated as of 1.2.0. Please consider updating to .toml files.", 3) - - local amount, array = files.loadFromCFG(fileName, "[a-z]+") - - for name, block in pairs(array) do - for _, spree in ipairs(block) do - if spree["msg"] then - for k, v in pairs(spree) do - if k == "amount" then - spree[k] = tonumber(v) - end - end - table.insert(spreeMessagesByType[sprees.getRecordTypeByName(name)], spree) - - spreeMessages[sprees.getRecordTypeByName(name)][spree["amount"]] = spree - end - end - end - - return amount - end - - return 0 -end - -function sprees.save() - if db.isConnected() and settings.get("g_spreeRecords") ~= 0 then - for i = 0, sprees.TYPE_NUM - 1 do - if currentRecords[i] and currentRecords[i]["record"] > 0 then - if db.getRecord(currentMapId, i) then - db.updateRecord(currentMapId, os.time(), i, currentRecords[i]["record"], currentRecords[i]["player"]) - else - db.addRecord(currentMapId, os.time(), i, currentRecords[i]["record"], currentRecords[i]["player"]) - end - end - end - end -end - -function sprees.printRecords() - if db.isConnected() and settings.get("g_spreeRecords") ~= 0 then - for i = 0, sprees.TYPE_NUM - 1 do - if currentRecords[i] and currentRecords[i]["record"] > 0 then - et.trap_SendConsoleCommand(et.EXEC_APPEND, "cchat -1 \"^dsprees: ^9longest "..sprees.getRecordNameByType(i).." spree (^7"..currentRecords[i]["record"].."^9) by ^7"..db.getLastAlias(currentRecords[i]["player"])["alias"].."^9.\";") - end - end - end -end - -function sprees.onGameInit(levelTime, randomSeed, restartMap) - sprees.load() - - events.handle("onGameStateChange", sprees.onGameStateChange) -end -events.handle("onGameInit", sprees.onGameInit) - -function sprees.onClientConnect(clientId, firstTime, isBot) - playerSprees[clientId] = {} - - for i = 0, sprees.TYPE_NUM - 1 do - playerSprees[clientId][i] = 0 - end -end -events.handle("onClientConnect", sprees.onClientConnect) - -function sprees.onClientDisconnect(clientId) - playerSprees[clientId] = nil -end -events.handle("onClientDisconnect", sprees.onClientDisconnect) - -function sprees.onClientTeamChange(clientId, old, new) - events.trigger("onPlayerSpreeEnd", clientId, clientId) -end - -function sprees.onGameStateChange(gameState) - if gameState == constants.GAME_STATE_RUNNING then - events.handle("onClientTeamChange", sprees.onClientTeamChange) - events.handle("onPlayerDeath", sprees.onPlayerDeath) - events.handle("onPlayerRevive", sprees.onPlayerRevive) - events.handle("onPlayerSpree", sprees.onPlayerSpree) - events.handle("onPlayerSpreeEnd", sprees.onPlayerSpreeEnd) - elseif gameState == constants.GAME_STATE_INTERMISSION then - sprees.save() - sprees.printRecords() - end -end - -function sprees.onPlayerSpree(clientId, causeId, type) - playerSprees[clientId][type] = playerSprees[clientId][type] + 1 - - local currentSpree = playerSprees[clientId][type] - - if db.isConnected() and settings.get("g_spreeRecords") ~= 0 and - (bits.hasbit(settings.get("g_botRecords"), sprees.RECORD_BOTS_PLAYING) or tonumber(et.trap_Cvar_Get("omnibot_playing")) == 0) and - (bits.hasbit(settings.get("g_botRecords"), sprees.RECORD_BOTS) or not players.isBot(clientId)) and - (bits.hasbit(settings.get("g_botRecords"), sprees.RECORD_BOTS) or not players.isBot(causeId)) and - (not currentRecords[type] or currentSpree > currentRecords[type]["record"]) - then - currentRecords[type] = { - ["player"] = db.getPlayerId(clientId), - ["record"] = currentSpree - } - end - - if sprees.isSpreeEnabled(type) and #spreeMessagesByType[type] > 0 then - local spreeMessage = spreeMessages[type][currentSpree] - local maxSpreeMessage = spreeMessagesByType[type][#spreeMessagesByType[type]] - - if spreeMessage then - local msg = string.format("^1%s SPREE! ^*%s ^*%s ^d(^3%d ^d%ss in a row!)", - string.upper(spreeNames[type]), - players.getName(clientId), - spreeMessage["msg"], - currentSpree, - spreeNames[type]) - - if settings.get("g_spreeSounds") > 0 and spreeMessage["sound"] and spreeMessage["sound"] ~= "" and files.exists("sound/spree/"..spreeMessage["sound"]) then - if bits.hasbit(settings.get("g_spreeSounds"), sprees.SOUND_PLAY_PUBLIC) then - et.trap_SendConsoleCommand(et.EXEC_APPEND, "playsound \"sound/spree/"..spreeMessage["sound"].."\";") - else - et.trap_SendConsoleCommand(et.EXEC_APPEND, "playsound "..clientId.." \"sound/spree/"..spreeMessage["sound"].."\";") - end - end - - et.trap_SendConsoleCommand(et.EXEC_APPEND, "cchat -1 \""..msg.."\";") - elseif currentSpree % 5 == 0 and currentSpree > maxSpreeMessage["amount"] then - local msg = string.format("^1%s SPREE! ^*%s ^*%s ^d(^3%d ^d%ss in a row!)", - string.upper(spreeNames[type]), - players.getName(clientId), - maxSpreeMessage["msg"], - currentSpree, - spreeNames[type]) - - if settings.get("g_spreeSounds") > 0 and maxSpreeMessage["sound"] and maxSpreeMessage["sound"] ~= "" and files.exists("sound/spree/"..maxSpreeMessage["sound"]) then - if bits.hasbit(settings.get("g_spreeSounds"), sprees.SOUND_PLAY_PUBLIC) then - et.trap_SendConsoleCommand(et.EXEC_APPEND, "playsound \"sound/spree/"..maxSpreeMessage["sound"].."\";") - else - et.trap_SendConsoleCommand(et.EXEC_APPEND, "playsound "..clientId.." \"sound/spree/"..maxSpreeMessage["sound"].."\";") - end - end - - et.trap_SendConsoleCommand(et.EXEC_APPEND, "cchat -1 \""..msg.."\";") - end - end -end - -function sprees.onPlayerSpreeEnd(clientId, causeId, type) - if type == sprees.TYPE_DEATH then - if sprees.isSpreeEnabled(type) and sprees.isPlayerOnSpree(clientId, sprees.TYPE_DEATH) then - local msg = string.format("^7%s^d was the first victim of ^7%s ^dafter ^3%d ^d%ss!", - players.getName(causeId), - players.getName(clientId), - playerSprees[clientId][sprees.TYPE_DEATH], - spreeNames[sprees.TYPE_DEATH]) - - et.trap_SendConsoleCommand(et.EXEC_APPEND, "cchat -1 \""..msg.."\";") - end - - playerSprees[clientId][sprees.TYPE_DEATH] = 0 - elseif type == nil then - for i = 0, sprees.TYPE_NUM - 1 do - if i ~= sprees.TYPE_DEATH then - if sprees.isSpreeEnabled(i) and sprees.isPlayerOnSpree(clientId, i) then - local msg = "" - - if clientId == causeId then - msg = string.format("^7%s^d's spree (^3%d ^d%ss) was brought to an end by ^1himself^d!", - players.getName(clientId), - playerSprees[clientId][i], - spreeNames[i]) - elseif causeId then - local prefix = "" - - if et.gentity_get(clientId, "sess.sessionTeam") == et.gentity_get(causeId, "sess.sessionTeam") then - prefix = "^1TEAMMATE " - end - - msg = string.format("^7%s^d's spree (^3%d ^d%ss) was brought to an end by %s^7%s^d!", - players.getName(clientId), - playerSprees[clientId][i], - spreeNames[i], - prefix, - players.getName(causeId)) - else - msg = string.format("^7%s^d's spree (^3%d ^d%ss) was brought to an end.", - players.getName(clientId), - playerSprees[clientId][i], - spreeNames[i]) - end - - et.trap_SendConsoleCommand(et.EXEC_APPEND, "cchat -1 \""..msg.."\";") - end - - playerSprees[clientId][i] = 0 - end - end - end -end - -function sprees.onPlayerDeath(victimId, killerId, mod) - if killerId == 1022 then -- killed by map - events.trigger("onPlayerSpreeEnd", victimId) - events.trigger("onPlayerSpree", victimId, nil, sprees.TYPE_DEATH) - elseif victimId == killerId then -- suicides - -- happens when a bot disconnects, it selfkills before leaving, thus emptying the - -- player data table, resulting in errors. I'm sorry for your spree records, bots. - if not players.isConnected(victimId) then return end - - events.trigger("onPlayerSpreeEnd", victimId, killerId) - events.trigger("onPlayerSpree", victimId, killerId, sprees.TYPE_DEATH) - else -- regular kills - if et.gentity_get(victimId, "sess.sessionTeam") == et.gentity_get(killerId, "sess.sessionTeam") then - -- teamkill handling - events.trigger("onPlayerSpreeEnd", victimId, killerId) - events.trigger("onPlayerSpree", victimId, killerId, sprees.TYPE_DEATH) - else - events.trigger("onPlayerSpreeEnd", killerId, victimId, sprees.TYPE_DEATH) - events.trigger("onPlayerSpree", killerId, victimId, sprees.TYPE_KILL) - - -- happens when a bot disconnects, it selfkills before leaving, thus emptying the - -- player data table, resulting in errors. I'm sorry for your spree records, bots. - if not players.isConnected(victimId) then return end - - events.trigger("onPlayerSpreeEnd", victimId, killerId) - events.trigger("onPlayerSpree", victimId, killerId, sprees.TYPE_DEATH) - end - end -end - -function sprees.onPlayerRevive(clientMedic, clientVictim) - events.trigger("onPlayerSpree", clientMedic, clientVictim, sprees.TYPE_REVIVE) -end - -function sprees.isSpreeEnabled(type) - return bits.hasbit(settings.get("g_spreeMessages"), 2^type) -end - -function sprees.isPlayerOnSpree(clientId, type) - return spreeMessagesByType[type][1] and playerSprees[clientId][type] >= spreeMessagesByType[type][1]["amount"] -end - -return sprees diff --git a/luascripts/wolfadmin/main.lua b/luascripts/wolfadmin/main.lua index 9506229..9f7860f 100644 --- a/luascripts/wolfadmin/main.lua +++ b/luascripts/wolfadmin/main.lua @@ -32,7 +32,6 @@ local commands local bots local fireteams local game -local sprees local teams local voting @@ -123,7 +122,6 @@ function et_InitGame(levelTime, randomSeed, restartMap) bots = wolfa_requireModule("game.bots") game = wolfa_requireModule("game.game") fireteams = wolfa_requireModule("game.fireteams") - sprees = wolfa_requireModule("game.sprees") teams = wolfa_requireModule("game.teams") voting = wolfa_requireModule("game.voting") diff --git a/luascripts/wolfadmin/util/events.lua b/luascripts/wolfadmin/util/events.lua index 0867d63..aae7e1e 100644 --- a/luascripts/wolfadmin/util/events.lua +++ b/luascripts/wolfadmin/util/events.lua @@ -130,9 +130,6 @@ events.add("onPlayerRevive") events.add("onPlayerSkillUpdate") -events.add("onPlayerSpree") -events.add("onPlayerSpreeEnd") - events.add("onServerCommand") return events diff --git a/luascripts/wolfadmin/util/settings.lua b/luascripts/wolfadmin/util/settings.lua index 55d5fb4..ea779b0 100644 --- a/luascripts/wolfadmin/util/settings.lua +++ b/luascripts/wolfadmin/util/settings.lua @@ -26,12 +26,7 @@ local data = { ["g_fileBanners"] = "banners.toml", ["g_fileGreetings"] = "greetings.toml", ["g_fileRules"] = "rules.toml", - ["g_fileSprees"] = "sprees.toml", ["g_playerHistory"] = 1, - ["g_spreeMessages"] = 7, - ["g_spreeSounds"] = 3, - ["g_spreeRecords"] = 1, - ["g_botRecords"] = 1, ["g_announceRevives"] = 1, ["g_greetingArea"] = 3, ["g_botGreetings"] = 1, @@ -109,15 +104,6 @@ local cfgStructure = { ["file"] = "g_fileGreetings", ["area"] = "g_greetingsArea", ["bots"] = "g_botGreetings" - }, - ["records"] = { - ["bots"] = "g_botRecords" - }, - ["sprees"] = { - ["file"] = "g_fileSprees", - ["messages"] = "g_spreeMessages", - ["sounds"] = "g_spreeSounds", - ["records"] = "g_spreeRecords" } }