diff --git a/INSTALL b/INSTALL
index 54504a1..1d0c476 100644
--- a/INSTALL
+++ b/INSTALL
@@ -16,7 +16,7 @@ REQUIREMENTS
INSTRUCTIONS (NEW)
- * Unpack the /luascripts folder into your /nq directory
+ * Unpack the /luascripts folder into /nq/luascripts/wolfadmin
* Unpack the contents of the /config folder into your /nq directory (or
/.etwolf/nq on Linux systems)
* Optionally, copy the contents of the cvars.cfg to your own server
diff --git a/luascripts/commands.lua b/luascripts/commands.lua
index 8114f51..e12ac40 100644
--- a/luascripts/commands.lua
+++ b/luascripts/commands.lua
@@ -15,6 +15,8 @@
-- You should have received a copy of the GNU General Public License
-- along with this program. If not, see .
+require "luascripts.wolfadmin.util.debug"
+
local util = require "luascripts.wolfadmin.util.util"
local events = require "luascripts.wolfadmin.util.events"
local files = require "luascripts.wolfadmin.util.files"
@@ -187,7 +189,44 @@ function commands.onclientcommand(clientId, cmdText)
local shrubArguments = {}
local shrubArgumentsOffset = 0
- if wolfCmd == "adminchat" or wolfCmd == "ac" then
+ if wolfCmd == "m" or wolfCmd == "pm" then
+ if et.trap_Argc() > 2 then
+ local cmdClient
+
+ if tonumber(et.trap_Argv(1)) == nil then
+ cmdClient = et.ClientNumberFromString(et.trap_Argv(1))
+ else
+ cmdClient = tonumber(et.trap_Argv(1))
+ end
+
+ if cmdClient ~= -1 and et.gentity_get(cmdClient, "pers.netname") then
+ stats.set(cmdClient, "lastMessageFrom", clientId)
+
+ et.trap_SendConsoleCommand(et.EXEC_APPEND, "csay "..cmdClient.." \"^9reply: ^7r [^2message^7]\";")
+ end
+ end
+ elseif wolfCmd == "r" then
+ if et.trap_Argc() == 1 then
+ et.trap_SendConsoleCommand(et.EXEC_APPEND, "csay "..clientId.." \"^9usage: ^7"..wolfCmd.." [^2message^7]\";")
+ else
+ local recipient = stats.get(clientId, "lastMessageFrom")
+
+ if et.gentity_get(recipient, "pers.netname") then
+ local message = {}
+
+ for i = 1, et.trap_Argc() - 1 do
+ message[i] = et.trap_Argv(i)
+ end
+
+ stats.set(recipient, "lastMessageFrom", clientId)
+
+ et.trap_SendConsoleCommand(et.EXEC_APPEND, "cchat "..recipient.." \"^7"..et.gentity_get(clientId, "pers.netname").."^7 -> "..recipient.." (1 recipients): ^3"..table.concat(message, " ").."\";")
+ et.trap_SendConsoleCommand(et.EXEC_APPEND, "csay "..recipient.." \"^9reply: ^7r [^2message^7]\";")
+ end
+ end
+
+ return 1
+ elseif wolfCmd == "adminchat" or wolfCmd == "ac" then
if et.G_shrubbot_permission(clientId, "~") == 1 then
if et.trap_Argc() == 1 then
et.trap_SendConsoleCommand(et.EXEC_APPEND, "csay "..clientId.." \"^9usage: ^7"..wolfCmd.." [^2message^7]\";")
diff --git a/luascripts/commands/greeting.lua b/luascripts/commands/greeting.lua
index 58939af..e984563 100644
--- a/luascripts/commands/greeting.lua
+++ b/luascripts/commands/greeting.lua
@@ -21,9 +21,9 @@ local settings = require "luascripts.wolfadmin.util.settings"
local greetings = require "luascripts.wolfadmin.players.greetings"
function commandGreeting(clientId, cmdArguments)
- local greetingText = greetings.get(clientId)
+ local greeting = greetings.get(clientId)
- if greetingText then
+ if greeting then
greetings.show(clientId)
else
et.trap_SendConsoleCommand(et.EXEC_APPEND, "csay "..clientId.." \"^dgreeting: ^9you do not have a personal greeting.\";")
diff --git a/luascripts/commands/resetsprees.lua b/luascripts/commands/resetsprees.lua
index 3a1eaf9..d6d8825 100644
--- a/luascripts/commands/resetsprees.lua
+++ b/luascripts/commands/resetsprees.lua
@@ -16,12 +16,19 @@
-- along with this program. If not, see .
local commands = require "luascripts.wolfadmin.commands"
+local game = require "luascripts.wolfadmin.game.game"
local sprees = require "luascripts.wolfadmin.game.sprees"
function commandResetSprees(clientId, cmdArguments)
- sprees.reset()
-
- et.trap_SendConsoleCommand(et.EXEC_APPEND, "chat \"^dresetsprees: ^9spree records have been reset.\";")
+ if cmdArguments[1] and cmdArguments[1] == "all" then
+ sprees.reset(true)
+
+ et.trap_SendConsoleCommand(et.EXEC_APPEND, "chat \"^dresetsprees: ^9all spree records have been reset.\";")
+ else
+ sprees.reset()
+
+ et.trap_SendConsoleCommand(et.EXEC_APPEND, "chat \"^dresetsprees: ^9spree records have been reset for map '^7"..game.getMap().."^9'.\";")
+ end
return true
end
diff --git a/luascripts/db/cfg.lua b/luascripts/db/cfg.lua
index 37f0a07..4e455b5 100644
--- a/luascripts/db/cfg.lua
+++ b/luascripts/db/cfg.lua
@@ -63,6 +63,10 @@ function cfg.updaterecord(mapid, recorddate, recordtype, record, playerid)
records[mapid][typestr.."name"] = playerid
end
+function cfg.removeallrecords()
+ records = {}
+end
+
function cfg.removerecords(mapid)
records[mapid] = {
["map"] = records[mapid]["map"],
diff --git a/luascripts/db/mysql.lua b/luascripts/db/mysql.lua
index 8aa418f..e1c6e8e 100644
--- a/luascripts/db/mysql.lua
+++ b/luascripts/db/mysql.lua
@@ -55,6 +55,10 @@ function mysql.updaterecord(mapid, recorddate, recordtype, record, playerid)
cur = assert(con:execute("UPDATE `records` SET `date`="..tonumber(recorddate)..", `record`="..tonumber(record)..", `player`="..tonumber(playerid).." WHERE `mapid`="..tonumber(mapid).." AND `type`="..tonumber(recordtype)..""))
end
+function mysql.removeallrecords()
+ cur = assert(con:execute("TRUNCATE `records`"))
+end
+
function mysql.removerecords(mapid)
cur = assert(con:execute("DELETE FROM `records` WHERE `mapid`="..tonumber(mapid)..""))
end
@@ -130,10 +134,6 @@ function mysql.getplayerid(clientid)
return mysql.getplayer(stats.get(clientid, "playerGUID"))["id"]
end
-function mysql.isplayerbot(clientid)
- return mysql.getplayer(stats.get(clientid, "playerGUID"))["bot"] == 1
-end
-
function mysql.getplayer(guid)
cur = assert(con:execute("SELECT * FROM `players` WHERE `guid`='"..util.escape(guid).."'"))
diff --git a/luascripts/game/sprees.lua b/luascripts/game/sprees.lua
index b74003a..1be19d1 100644
--- a/luascripts/game/sprees.lua
+++ b/luascripts/game/sprees.lua
@@ -63,8 +63,12 @@ function sprees.get()
return records
end
-function sprees.reset()
- db.removerecords(currentMapId)
+function sprees.reset(truncate)
+ if truncate then
+ db.removeallrecords()
+ else
+ db.removerecords(currentMapId)
+ end
currentRecords = db.getrecords(currentMapId)
end
@@ -86,12 +90,13 @@ function sprees.load()
end
function sprees.oninit(levelTime, randomSeed, restartMap)
- if (settings.get("db_type") == "cfg" and settings.get("g_fileSprees") ~= "") or (settings.get("db_type") ~= "cfg" and settings.get("g_spreeRecords") ~= 0) then
+ if
+ (settings.get("db_type") == "cfg" and settings.get("g_fileSprees") ~= "") or
+ (settings.get("db_type") ~= "cfg" and settings.get("g_spreeRecords") ~= 0)
+ then
sprees.load()
events.handle("onGameStateChange", sprees.ongamestatechange)
- events.handle("onPlayerDeath", sprees.ondeath)
- events.handle("onPlayerRevive", sprees.onrevive)
end
end
events.handle("onGameInit", sprees.oninit)
@@ -107,7 +112,10 @@ end
events.handle("onClientConnect", sprees.onconnect)
function sprees.ongamestatechange(gameState)
- if gameState == 3 then
+ if gameState == constants.GAME_RUNNING then
+ events.handle("onPlayerDeath", sprees.ondeath)
+ events.handle("onPlayerRevive", sprees.onrevive)
+ elseif gameState == constants.GAME_INTERMISSION then
if currentRecords["ksrecord"] and currentRecords["ksrecord"] > 0 then
if db.getrecord(currentMapId, constants.RECORD_KILL) then
db.updaterecord(currentMapId, os.time(), constants.RECORD_KILL, currentRecords["ksrecord"], currentRecords["ksplayer"])
@@ -156,7 +164,7 @@ function sprees.ondeath(victimId, killerId, mod)
stats.set(victimId, "longestDeathSpree", stats.get(victimId, "currentDeathSpree") > stats.get(victimId, "longestDeathSpree") and stats.get(victimId, "currentDeathSpree") or stats.get(victimId, "longestDeathSpree"))
- if (settings.get("g_botRecords") == 1 or not db.isplayerbot(victimId)) and (not currentRecords["dsrecord"] or stats.get(victimId, "longestDeathSpree") > currentRecords["dsrecord"]) then
+ if (settings.get("g_botRecords") == 1 or not stats.get(victimId, "isBot")) and (not currentRecords["dsrecord"] or stats.get(victimId, "longestDeathSpree") > currentRecords["dsrecord"]) then
currentRecords["dsplayer"] = db.getplayerid(victimId)
currentRecords["dsrecord"] = stats.get(victimId, "longestDeathSpree")
end
@@ -169,7 +177,7 @@ function sprees.ondeath(victimId, killerId, mod)
stats.set(killerId, "longestKillSpree", stats.get(killerId, "currentKillSpree") > stats.get(killerId, "longestKillSpree") and stats.get(killerId, "currentKillSpree") or stats.get(killerId, "longestKillSpree"))
- if (settings.get("g_botRecords") == 1 or not db.isplayerbot(killerId)) and (not currentRecords["ksrecord"] or stats.get(killerId, "longestKillSpree") > currentRecords["ksrecord"]) then
+ if (settings.get("g_botRecords") == 1 or not stats.get(killerId, "isBot")) and (not currentRecords["ksrecord"] or stats.get(killerId, "longestKillSpree") > currentRecords["ksrecord"]) then
currentRecords["ksplayer"] = db.getplayerid(killerId)
currentRecords["ksrecord"] = stats.get(killerId, "longestKillSpree")
end
@@ -184,7 +192,7 @@ function sprees.ondeath(victimId, killerId, mod)
stats.set(victimId, "longestDeathSpree", stats.get(victimId, "currentDeathSpree") > stats.get(victimId, "longestDeathSpree") and stats.get(victimId, "currentDeathSpree") or stats.get(victimId, "longestDeathSpree"))
- if (settings.get("g_botRecords") == 1 or not db.isplayerbot(victimId)) and (not currentRecords["dsrecord"] or stats.get(victimId, "longestDeathSpree") > currentRecords["dsrecord"]) then
+ if (settings.get("g_botRecords") == 1 or not stats.get(victimId, "isBot")) and (not currentRecords["dsrecord"] or stats.get(victimId, "longestDeathSpree") > currentRecords["dsrecord"]) then
currentRecords["dsplayer"] = db.getplayerid(victimId)
currentRecords["dsrecord"] = stats.get(victimId, "longestDeathSpree")
end
@@ -200,7 +208,7 @@ function sprees.onrevive(clientMedic, clientVictim)
et.trap_SendConsoleCommand(et.EXEC_APPEND, "chat \"^1REVIVE SPREE! ^*"..stats.get(clientMedic, "playerName").." ^*"..revivespreeMessages[stats.get(clientMedic, "currentReviveSpree")]["msg"].." ^d(^3"..stats.get(clientMedic, "currentReviveSpree").." ^drevives in a row!)\";")
end
- if (settings.get("g_botRecords") == 1 or not db.isplayerbot(clientMedic)) and (not currentRecords["rsrecord"] or stats.get(clientMedic, "longestReviveSpree") > currentRecords["rsrecord"]) then
+ if (settings.get("g_botRecords") == 1 or not stats.get(clientMedic, "isBot")) and (not currentRecords["rsrecord"] or stats.get(clientMedic, "longestReviveSpree") > currentRecords["rsrecord"]) then
currentRecords["rsplayer"] = db.getplayerid(clientMedic)
currentRecords["rsrecord"] = stats.get(clientMedic, "longestReviveSpree")
end
diff --git a/luascripts/main.lua b/luascripts/main.lua
index d9b2b21..1880d7d 100644
--- a/luascripts/main.lua
+++ b/luascripts/main.lua
@@ -40,8 +40,8 @@ local voting = require "luascripts.wolfadmin.game.voting"
local stats = require "luascripts.wolfadmin.players.stats"
local greetings = require "luascripts.wolfadmin.players.greetings"
-local version = "1.0.0"
-local release = "25 January 2016"
+local version = "1.0.1"
+local release = "8 February 2016"
local basepath = nil
diff --git a/luascripts/players/greetings.lua b/luascripts/players/greetings.lua
index c14dcd4..d5312fa 100644
--- a/luascripts/players/greetings.lua
+++ b/luascripts/players/greetings.lua
@@ -45,31 +45,35 @@ function greetings.get(clientId)
end
function greetings.show(clientId)
- local greetingText = greetings.get(clientId)
+ local greeting = greetings.get(clientId)
- if greetingText then
+ if greeting then
local prefix = (util.getAreaName(settings.get("g_greetingArea")) ~= "cp") and "^dgreeting: ^9" or "^7"
- local greeting = prefix..greetingText:gsub("%[N%]", et.gentity_get(clientId, "pers.netname"))
+ local text = prefix..greeting["text"]:gsub("%[N%]", et.gentity_get(clientId, "pers.netname"))
local out = ""
- while util.getAreaName(settings.get("g_greetingArea")) == "cp" and string.len(greeting) > constants.MAX_LENGTH_CP do
- local sub = greeting:sub(1, constants.MAX_LENGTH_CP)
+ while util.getAreaName(settings.get("g_greetingArea")) == "cp" and string.len(text) > constants.MAX_LENGTH_CP do
+ local sub = text:sub(1, constants.MAX_LENGTH_CP)
local rev = sub:reverse()
local pos = rev:find(" [^^]") -- some epic smiley exclusion here
if pos then
pos = constants.MAX_LENGTH_CP - pos
- out = out..greeting:sub(1, pos).."\\n"
- greeting = greeting:sub(pos + 2)
+ out = out..text:sub(1, pos).."\\n"
+ text = text:sub(pos + 2)
else
pos = sub:len()
- out = out..greeting:sub(1, pos).."\\n"
- greeting = greeting:sub(pos + 1)
+ out = out..text:sub(1, pos).."\\n"
+ text = text:sub(pos + 1)
end
end
- et.trap_SendConsoleCommand(et.EXEC_APPEND, util.getAreaName(settings.get("g_greetingArea")).." \""..out..greeting.."\";")
+ if greeting["sound"] then
+ et.trap_SendConsoleCommand(et.EXEC_APPEND, "playsound \"/sound/"..greeting["sound"].."\";")
+ end
+
+ et.trap_SendConsoleCommand(et.EXEC_APPEND, util.getAreaName(settings.get("g_greetingArea")).." \""..out..text.."\";")
end
end
@@ -81,11 +85,17 @@ function greetings.load()
if amount == 0 then return 0 end
for id, greeting in ipairs(array["level"]) do
- levelGreetings[tonumber(greeting["level"])] = greeting["greeting"]
+ levelGreetings[tonumber(greeting["level"])] = {
+ ["text"] = greeting["greeting"],
+ ["sound"] = greeting["sound"],
+ }
end
for id, greeting in ipairs(array["user"]) do
- userGreetings[greeting["guid"]] = greeting["greeting"]
+ userGreetings[greeting["guid"]] = {
+ ["text"] = greeting["greeting"],
+ ["sound"] = greeting["sound"],
+ }
end
return amount
diff --git a/luascripts/util/constants.lua b/luascripts/util/constants.lua
index 645bdac..03ce332 100644
--- a/luascripts/util/constants.lua
+++ b/luascripts/util/constants.lua
@@ -17,6 +17,10 @@
local constants = {}
+constants.GAME_RUNNING = 0
+constants.GAME_WARMUP = 1
+constants.GAME_STATE_INTERMISSION = 3
+
constants.COLOR_MAIN = "^7"
constants.MAX_LENGTH_CP = 56