View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000095 | WolfAdmin | Commands | public | 2019-01-27 09:18 | 2020-04-15 16:30 |
Reporter | harlekin | Assigned To | Timo | ||
Priority | normal | Severity | feature | Reproducibility | have not tried |
Status | resolved | Resolution | fixed | ||
Target Version | 1.3.0 | Fixed in Version | 1.3.0 | ||
Summary | 0000095: Spree sounds & Multikill & Multirevive & Teamkiller | ||||
Description | Please add Multikill & Multirevive announce. Add possibility to disable Spree sounds and/or option to only play sounds and show messages to caused player. Example: Killing spree (5 Kills) show and sound only to the one that caused it. That would reduce the general spam of Killing spree announce and sounds on large servers. Same to Multikill, player would still get statisfied with the announce to themself, others could stick to their objective. Add Teamkiller announce and sound for a unbelivable stupid multikill teamkill Theese features are allready coded in rspree.lua and kspree.lua (see attachment) | ||||
Tags | spree | ||||
Mod | N/A | ||||
Mod version | |||||
Standalone | no | ||||
|
|
|
in the mentioned kspree.lua script of harlekin there are a few "ranks" of multikills, it depends how many the player get killed within a short period of time: kmulti_msg = "^7!!!! ^1Multi kill ^7> ^7%s ^7< ^1Multi kill^7 !!!!" kmega_msg = "^7!!!! ^1Mega kill ^7> ^7%s ^7< ^1Mega kill^7 !!!!" kultra_msg = "^7!!! ^1ULTRA KILL ^7> ^7%s ^7< ^1ULTRA KILL^7 !!!" kmonster_msg = "^7!!! ^1MONSTER KILL ^7>>> ^7%s ^7<<< ^1MONSTER KILL^7 !!!" kludicrous_msg = "^7OMG,^1LUDICROUS KILL ^7>>> ^7%s ^7<<< ^1LUDICROUS KILL^7" kholyshit_msg = "^1H O L Y S H I T ^7>>> ^7%s ^7<<< ^1H O L Y S H I T^7" kmultitk_msg = "^7!!! ^1Multi Teamkill ^7> ^7%s ^7< ^1Multi Teamkill^7 !!!" firstbloodsound = "sound/misc/firstblood.wav" multisound = "sound/misc/multikill.wav" megasound = "sound/misc/megakill.wav" ultrasound = "sound/misc/ultrakill.wav" monstersound = "sound/misc/monsterkill.wav" ludicroussound = "sound/misc/ludicrouskill.wav" holyshitsound = "sound/misc/holyshit.wav" multitksound = "sound/misc/teamkiller.wav" killingspreesound = "sound/misc/killingspree.wav" rampagesound = "sound/misc/rampage.wav" dominatingsound = "sound/misc/dominating.wav" godlikesound = "sound/misc/godlike.wav" unstoppablesound = "sound/misc/unstoppable.wav" wickedsicksound = "sound/misc/wickedsick.wav" pottersound = "sound/misc/potter.wav" Attached I have the requiered pk3 with the sound files (wav) inside. This information can also be found on wolffiles.de |
|
mostly working rspree&kspree v56 greatshot with added name of the last killer not functional v43 sorry with added name of last teamkilled person not functional multiteamkill should be working rspree.lua (31,040 bytes)
---------------- -- Vetinari's rspree.lua -- -- $Date: 2007-03-02 13:35:49 +0100 (Fr, 02 Mär 2007) $ -- $Id: rspree.lua 181 2007-03-02 12:35:49Z vetinari $ -- $Revision: 181 $ -- version = "1.2.3" -- -- read carefully and adjust the lines to fit your needs -- between the "-- Config" and "-- END of Config" lines -- -- Thanks to the Hirntot.org admin [!!!]Harlekin and the [!!!] community -- for testing on their servers :) -- local announce_revives, revive_color, revive_pos, spree_pos local spree_color, spree_cfg, record_cfg, date_fmt, multi_revive local multi_announce, multi_sound, multi_pos, monster_pos local multi_msg, monster_msg, multi_without_death, allow_tk_revive local rspree_cmd_enabled, rspree_cmd, record_cmd local record_last_nick, stats_cmd, records_expire, R_Sprees local srv_record, save_awards, awards_file local msg_default, msg_command ----------------------------------------------------------- -- Config -- ----------------------------------------------------------- announce_revives = false -- set to true or false, "false" disables announcing of revives -- usually set to false because it influences game play too much -- this was just added for debugging revive_color = "7" -- color of announced revives revive_pos = "cpm" -- where to put the announced revive msgs, see comment below spree_color = "8" -- color of spree messages spree_cfg = "revivingspree.txt" -- all time stats are saved here.. record_cfg = "rspree-records.txt" -- all time records, see 'srv_record' date_fmt = "%Y-%m-%d, %H:%M:%S" -- for map record dates, see strftime(3) ;-> multi_revive = true -- set to true or false, "false" disables multi/monster revives multi_announce = true -- set to true or false, "false" disables the msgs below multi_sound = true -- DON'T set to true to enable, no sounds yet... SET TO false IF YOU DON'T HAVE SOUNDS FOR THIS -- "sound/spree/multirevive.wav" / "sound/spree/monsterrevive.wav" -- are played if 'multi_sound = true' :o) -- -- the %s below will be replaced by the player name multi_msg = "^7!!!! ^1Multirevive ^7> ^7%s ^7< ^1Multirevive^7 !!!!" monster_msg = "^7OMG,^1 MONSTER REVIVE ^7>>> ^7%s ^7<<< ^1MONSTER REVIVE^7 !!!!" spree_pos = "chat" multi_pos = "chat" monster_pos = "chat" -- yes, very unlikely, but you can revive, die, get revived and do -- another revive within 3 seconds.... -- hmm... probably it's worth a possible multi/monster revive if -- you manage to do that, so let the admin decide if it's honoured multi_without_death = false -- set to true to stop multi revives if medic dies allow_tk_revive = true -- if true: a revive of a tk'd team mate does not -- add a revive, but just sets the time of the last -- revive. With this you can tk one, revive someone -- else, then the tk'd and another one with max 3 secs -- between each revive instead of max 3 seconds between -- two not tk'd players -- if false: time between reviving two not tk'd players -- is used rspree_cmd_enabled = true -- set to false to ignore next line's command rspree_cmd = "!spree_record" -- same as etadmin_mod's killing spree record record_cmd = "!top" record_last_nick = true -- set to true to keep the last known nick a guid has, -- ... instead of the one seen the first time stats_cmd = "!stats" -- same as etadmin_mod's !stats command records_expire = 60*60*24*90 -- in seconds! 60*60*24*90 == 90 days save_awards = true awards_file = "awards.txt" -- same as kspree.lua's awards file, -- greetings to bennz :-) R_Sprees = { -- these numbers MUST be multiple of 5...! [5] = "is on a reviving spree", [10] = "really needs new syringes soon", [15] = "earned the bronze syringe", [20] = "earned the silver syringe", [25] = "earned the golden syringe", [30] = "is a god dressed in white", [35] = "just arrived from the 4077th M*A*S*H", } srv_record = true -- enable/show users with most multi/monster revives msg_default = true -- print rspree messages to client if true -- clients can set their default with 'setu v_rsprees 1' (or 0) msg_command = "rsprees" -- '\rsprees 1|0' to switch on / off the messages ----------------------------------------------------------- -- END of Config ----------------------------------------------------------- -- -- don't change anything below, unless you know what you're doing -- local revive_sprees = {} local max_spree = 0 local max_id = nil local alltime_stats = {} local multi = {} local map_record = false local srv_records = {} local endofmap = false local eomap_done = false local client_msg = {} local teams = { [0]="Spectator", [1]="Axis", [2]="Allies", [3]="Unknown", } local EV_GLOBAL_CLIENT_SOUND = 54 function sayClients(pos, msg) -- et.G_Printf("rspree.lua: sayClients('%s', '%s')\n", pos, msg) local message = string.format("%s \"%s^7\"", pos, msg) table.foreach(client_msg, function(id, msg_ok) if msg_ok then et.trap_SendServerCommand(id, message) end end ) -- et.trap_SendServerCommand(-1, pos.." \""..msg.."^7\"\n") end function playClients(snd) local snd_id = et.G_SoundIndex(snd) if snd_id == nil then return end table.foreach(client_msg, function(id, msg_ok) if msg_ok then local t_ent = et.G_TempEntity( et.gentity_get(id, "r.currentOrigin"), EV_GLOBAL_CLIENT_SOUND) et.gentity_set(t_ent, "s.teamNum", id) et.gentity_set(t_ent, "s.eventParm", snd_id) et.G_Sound(id, snd_id) end end ) end -- printf wrapper for debugging function et.G_Printf(...) et.G_Print(string.format(...)) end -- called when game inits function et_InitGame(levelTime, randomSeed, restart) local func_start = et.trap_Milliseconds() revive_sprees = {} max_spree = 0 max_id = nil alltime_stats = {} multi = {} map_record = false endofmap = false eomap_done = false et.RegisterModname("rspree.lua"..version.." "..et.FindSelf()) sv_maxclients = tonumber(et.trap_Cvar_Get("sv_maxclients")) local i = 0 for i=0, sv_maxclients - 1 do resetSpree(i) resetMulti(i) client_msg[i] = false end et.G_Printf("rspree.lua: running on map '%s'\n", mapName()) i = readStats(spree_cfg) et.G_Printf("rspree.lua: loaded %d alltime stats from %s\n", i, spree_cfg) if srv_record then i = readRecords(record_cfg) et.G_Printf("rspree.lua: loaded %d alltime records from %s\n", i, record_cfg) end -- et.trap_SendConsoleCommand(et.EXEC_NOW, -- "sets RSpree_mod_version "..version) et.G_Printf("rspree.lua: startup: %d ms\n", et.trap_Milliseconds() - func_start) et.G_Printf("Vetinari's rspree.lua version "..version.." activated...\n") end function mapName () return(string.lower(et.trap_Cvar_Get("mapname"))) end function getGuid (id) return(string.lower(et.Info_ValueForKey( et.trap_GetUserinfo(id), "cl_guid"))) end function teamName (t) if t < 0 or t > 3 then t = 3 end return(teams[t]) end function playerName(id) return(et.Info_ValueForKey(et.trap_GetUserinfo(id), "name")) end function findMaxSpree() local max = alltime_stats[mapName()] if max == nil then max = {} end return(max) end function readStats(file) local func_start = et.trap_Milliseconds() local fd = nil local len = -1 local count = 0 fd,len = et.trap_FS_FOpenFile(file, et.FS_READ) if len == -1 then et.G_Printf("Failed to open %s ...", file) et.G_Printf("rspree.lua: readStats(): %d ms\n", et.trap_Milliseconds() - func_start) return(0) end local str = et.trap_FS_Read(fd, len) et.trap_FS_FCloseFile(fd) local map, spree, time, nick for map, spree, time, nick in string.gfind(str, "([^;#\n]+)%;(%d+)%;(%d+)%;([^%\n]+)") do -- et.G_Printf("'%s;%s;%s;%s'\n", map, spree, time, nick); alltime_stats[map] = { tonumber(spree), tonumber(time), nick } count = count + 1 end et.G_Printf("rspree.lua: readStats(): %d ms\n", et.trap_Milliseconds() - func_start) return(count) end function saveStats(file, list) local func_start = et.trap_Milliseconds() local fd, len = et.trap_FS_FOpenFile(file, et.FS_WRITE) if len == -1 then et.G_Printf("rspree.lua: failed to open %s", file) et.G_Printf("rspree.lua: saveStats(): %d ms\n", et.trap_Milliseconds() - func_start) return(0) end local head = string.format("# %s, written %s\n", file, os.date()) et.trap_FS_Write(head, string.len(head), fd) table.foreach(list, function (first, arr) local line = first .. ";".. table.concat(arr, ";").."\n" et.trap_FS_Write(line, string.len(line), fd) -- FIXME: check for errors (i.e. ENOSPACE or sth like that)? end ) -- end table.foreach() et.trap_FS_FCloseFile(fd) et.G_Printf("rspree.lua: saveStats(): %d ms\n", et.trap_Milliseconds() - func_start) end function readRecords(file) local func_start = et.trap_Milliseconds() local fd = nil local len = -1 local count = 0 fd,len = et.trap_FS_FOpenFile(file, et.FS_READ) if len == -1 then et.G_Printf("Failed to open %s ...", file) et.G_Printf("rspree.lua: readRecords(): %d ms\n", et.trap_Milliseconds() - func_start) return(0) end local str = et.trap_FS_Read(fd, len) et.trap_FS_FCloseFile(fd) local guid, multi, monster, revive, nick, firstseen, lastseen local now = os.time(os.date("!*t")) local exp_diff = now - records_expire for guid, multi, monster, revive, nick, firstseen, lastseen in string.gfind(str, "[^%#](%x+)%;(%d*)%;(%d*)%;(%d*)%;([^;]*)%;(%d*)%;([^%\n]*)") do lastseen = tonumber(lastseen) if (records_expire == 0) or (exp_diff < lastseen) then srv_records[guid] = { tonumber(multi), tonumber(monster), tonumber(revive), nick, tonumber(firstseen), lastseen } count = count + 1 end end et.G_Printf("rspree.lua: readRecords(): %d ms\n", et.trap_Milliseconds() - func_start) return(count) end function et_Print(text) local junk1,junk2,medic,zombie = string.find(text, "^Medic_Revive:%s+(%d+)%s+(%d+)") if medic ~= nil and zombie ~= nil then medic = tonumber(medic) zombie = tonumber(zombie) if announce_revives then sayClients(revive_pos, string.format("%s ^%s was revived by ^7%s", playerName(zombie), revive_color, playerName(medic))) end if et.gentity_get(zombie, "enemy") == medic then -- tk&revive if allow_tk_revive and multi[medic][2] > 0 then multi[medic][1] = et.trap_Milliseconds() end else -- not a tk&revive revive_sprees[medic] = revive_sprees[medic] + 1 local guid = getGuid(medic) if srv_record then if type(srv_records[guid]) ~= "table" then -- guid; multi;monster;revive;nick;firstseen;lastseen srv_records[guid] = { 0, 0, 0, playerName(medic), os.time(os.date("!*t")), 0 } elseif table.getn(srv_records[guid]) ~= 6 then -- guid; multi;monster;revive;nick;firstseen;lastseen srv_records[guid] = { 0, 0, 0, playerName(medic), os.time(os.date("!*t")), 0 } end srv_records[guid][3] = srv_records[guid][3] + 1 srv_records[guid][6] = os.time(os.date("!*t")) -- if guid is seen the first time, insert the nick ... or just -- set record_last_nick to true in config section to update -- every time if record_last_nick or (srv_records[guid][4] == nil) then srv_records[guid][4] = playerName(medic) end end if revive_sprees[medic] > max_spree then max_spree = revive_sprees[medic] max_id = medic end if multi_revive then checkMultiRevive(medic, guid) end checkSprees(medic) end return(nil) end -- END if medic ~= nil and zombie ~= nil then if endofmap and string.find(text, "^WeaponStats: ") == 1 then if not eomap_done then if max_id ~= nil then -- unlikely, but you never know ... :) local longest = "" local max = findMaxSpree() -- max = { count, date, name } if table.getn(max) == 3 then if map_record then longest = " ^"..spree_color.."This is a New map record!" saveStats(spree_cfg, alltime_stats) else longest = string.format(" ^7[record: %d by %s^7 @%s]", max[1], max[3], os.date(date_fmt, max[2])) end end local msg = string.format("^7Longest reviving spree: " .."%s^7 with %d revives!%s", playerName(max_id), max_spree, longest) et.trap_SendConsoleCommand(et.EXEC_APPEND, "qsay \""..msg.."^7\"\n") -- sayClients("b 8", msg) end if srv_record then saveStats(record_cfg, srv_records) end eomap_done = true end return(nil) end -- END if endofmap and string.find(text, "^WeaponStats: ") == 1 then if text == "Exit: Timelimit hit.\n" or text == "Exit: Wolf EndRound.\n" then endofmap = true for i = 0, sv_maxclients - 1 do if revive_sprees[i] ~= nil and revive_sprees[i] > 0 then checkSpreeEnd(i, 1022, true) end end return(nil) end end function checkMultiRevive (id, guid) -- the multi/monster revive logic below was "stolen" from etadmin_mod.pl -- multi revive = 3 revives in a row with max 3 seconds -- between each revive -- monster revive = 5 revives in a row with max 3 seconds -- between each revive local lvltime = et.trap_Milliseconds() if (lvltime - multi[id][1]) < 3000 then multi[id][2] = multi[id][2] + 1 if multi[id][2] == 3 then local m_name = playerName(id) et.G_Printf("Multirevive: %d (%s)\n", id, m_name) if multi_announce then sayClients(multi_pos, string.format(multi_msg, m_name)) end if multi_sound then playClients("sound/spree/multirevive.wav") end if srv_record then srv_records[guid][1] = srv_records[guid][1] + 1 end elseif multi[id][2] == 5 then local m_name = playerName(id) et.G_Printf("Monsterrevive: %d (%s)\n", id, m_name) if multi_announce then sayClients(monster_pos, string.format(monster_msg, m_name)) end if multi_sound then playClients("sound/spree/monsterrevive.wav") end if srv_record then srv_records[guid][2] = srv_records[guid][2] + 1 end if save_awards then local fd,len = et.trap_FS_FOpenFile(awards_file, et.FS_APPEND) if len == -1 then et.G_Printf("failed to save monsterrevive award for %s\n", playerName(id)) else local msg = playerName(id).. " - Monsterrevive- " ..os.date().."\n" et.trap_FS_Write(msg, string.len(msg), fd) et.trap_FS_FCloseFile(fd) end end end else multi[id][2] = 1 end multi[id][1] = lvltime end function et_Obituary(victim, killer, mod) -- mod = MeansOfDeath local v_teamid = et.gentity_get(victim, "sess.sessionTeam") local k_teamid = et.gentity_get(killer, "sess.sessionTeam") -- yes, very unlikely, but you can revive, die, get revived and do -- another revive within 3 secs.... -- hmm... probably it's worth a possible multi/monster revive if -- you manage to do that, so let the admin decide if it's honoured if multi_without_death then resetMulti(victim) end if (victim == killer) then -- suicide checkSpreeEnd(victim, killer, false) resetSpree(victim) elseif (v_teamid == k_teamid) then -- team kill checkSpreeEnd(victim, killer, false) resetSpree(victim) else -- nomal kill if killer <= sv_maxclients then checkSpreeEnd(victim, killer, true) else checkSpreeEnd(victim, killer, false) end resetSpree(victim) end end function resetMulti(id) multi[id] = { [1]=0, [2]=0, } -- [1] => counter, [2] => last revive end function resetSpree(id) revive_sprees[id] = 0 end function checkSprees(id) -- et.G_Printf("checkSprees %d\n", id) if revive_sprees[id] ~= 0 then if math.mod(revive_sprees[id], 5) == 0 then local spree = R_Sprees[revive_sprees[id]] if revive_sprees[id] > 35 then spree = R_Sprees[35] end if spree == nil then spree = "is on a reviving spree (FIXME, spree=nil)" end sayClients(spree_pos, string.format("%s^%s %s (^7%d^%s revives in a row)", playerName(id), spree_color, spree, revive_sprees[id], spree_color)) end end end function checkSpreeEnd(id, killer, normal_kill) if revive_sprees[id] > 0 then local m_name = playerName(id) if m_name == nil or m_name == "" then -- this only happens if a player leaves / disconnects -- while on a spree. Fill with something, an empty player -- name just looks weird ;-) m_name = "(disconnected)" end local k_name = "" if killer == 1022 then k_name = "End of round" elseif killer == 1023 then k_name = "unknown reasons" else k_name = playerName(killer) end local record = false local msg = "" if max_id == id and revive_sprees[id] == max_spree then -- hmm... max_id can't be nil here... it's at least 1 local max = findMaxSpree() -- max = { count, date, name } if table.getn(max) == 3 and max_spree > max[1] then -- insert max record on death... -- then a player gets the reward, if he disconnects before EOMap alltime_stats[mapName()] = { max_spree, os.time(os.date("!*t")), m_name } map_record = true record = true elseif table.getn(max) == 0 then -- no previous record for this map alltime_stats[mapName()] = { max_spree, os.time(os.date("!*t")), m_name } map_record = true record = true end end if revive_sprees[id] >= 5 then if normal_kill then -- i.e. no TK or suicide sayClients(spree_pos, string.format("%s^%s's reviving spree ended (^7%d^%s " .."revives), killed by ^7%s^%s!", m_name, spree_color, revive_sprees[id], spree_color, k_name, spree_color)) if record then sayClients(spree_pos, "^"..spree_color.. "This is a new map record!^7") end else if record and killer <= sv_maxclients then sayClients(spree_pos, string.format("%s^%s's reviving spree ended " .."(^7%d^%s revives).", m_name, spree_color, revive_sprees[id], spree_color)) sayClients(spree_pos, "^"..spree_color .."This is a new map record!^7") end end end end end function et_ClientDisconnect(id) revive_sprees[id] = 0 client_msg[id] = false end function et_ClientCommand(id, command) local arg0 = string.lower(et.trap_Argv(0)) local arg1 = et.trap_Argv(1) if arg0 == "say" then if et.gentity_get(id, "sess.muted") == 1 then return 1 end if rspree_cmd_enabled and arg1 == rspree_cmd then local map_msg = "" local map_max = findMaxSpree() if table.getn(map_max) ~= 3 then map_max = { 0, 0, nil } end if map_max[3] ~= nil then map_msg = string.format("^1map: ^7%s^1: ^7%s^1 (^7%d^1) @ %s", mapName(), map_max[3], map_max[1], os.date(date_fmt, map_max[2])) else map_msg = string.format("^1map: ^7%s^1: ^7no record", mapName()) end local all_msg = "" local all_max = { 0, 0, nil } table.foreach(alltime_stats, function (map, arr) if arr[1] > all_max[1] then all_max = arr end end) if all_max[3] ~= nil then all_msg = string.format(" ^1[^7overall: %s^1 (^7%d^1) @ %s^1]", all_max[3], all_max[1], os.date(date_fmt, all_max[2])) end et.trap_SendConsoleCommand(et.EXEC_APPEND, "qsay \"^1rspree_record: "..map_msg..all_msg.."^7\"\n") -- sayClients(spree_pos, msg) -- no! with sayClients() it would be printed b4 the !spree_record :) elseif srv_record and arg1 == record_cmd then local rec_msg = recordMessage() et.trap_SendConsoleCommand(et.EXEC_APPEND, "qsay \"^1rspree_record: "..rec_msg.."^7\"\n") elseif srv_record and arg1 == stats_cmd then local stats_msg = statsMessage(id) et.trap_SendServerCommand( id, "chat \"^3statsme: ^7"..stats_msg.." ^7\"\n") --et.trap_SendConsoleCommand(et.EXEC_APPEND, -- "qsay \"^3stats: ^7"..stats_msg.."^7\"\n") end elseif arg0 == msg_command then if arg1 == "" then local status = "^8on^7" if client_msg[id] == false then status = "^8off^7" end et.trap_SendServerCommand(id, string.format("chat \"^#(rsprees):^7 Messages are %s\"", status)) elseif tonumber(arg1) == 0 then setRSpreeMsg(id, false) et.trap_SendServerCommand(id, "chat \"^#(rsprees):^7 Messages are now ^8off^7\"") else setRSpreeMsg(id, true) et.trap_SendServerCommand(id, "chat \"^#(rsprees):^7 Messages are now ^8on^7\"") end return(1) end return(0) end function setRSpreeMsg(id, value) client_msg[id] = value if value then value = "1" else value = "0" end et.trap_SetUserinfo(id, et.Info_SetValueForKey(et.trap_GetUserinfo(id), "v_rsprees", value) ) end function updateUInfoStatus(id) local rs = et.Info_ValueForKey(et.trap_GetUserinfo(id), "v_rsprees") if rs == "" then setRSpreeMsg(id, msg_default) elseif tonumber(rs) == 0 then client_msg[id] = false else client_msg[id] = true end end function et_ClientBegin(id) updateUInfoStatus(id) end function et_UserinfoChanged(id) updateUInfoStatus(id) end function statsMessage(id) local guid = getGuid(id) local name = playerName(id) if type(srv_records[guid]) ~= "table" then return("no reviving stats for "..name.."^7") else local done = 0 local mo_rev = "" local mu_rev = "" local rev = "" local msg = name .. "^7 has " if srv_records[guid][2] ~= 0 then mo_rev = string.format("^8%d ^7monster revives", srv_records[guid][2]) end if srv_records[guid][1] ~= 0 then mu_rev = string.format("^8%d ^7multi revives", srv_records[guid][1]) end rev = string.format("revived a total of ^8%d ^7players", srv_records[guid][3]) -- ouch, this is ugly ;> if srv_records[guid][2] == 0 and srv_records[guid][1] == 0 then msg = msg .. rev elseif srv_records[guid][2] ~= 0 and srv_records[guid][1] ~= 0 then msg = msg .. "made " .. mo_rev .. ", " .. mu_rev .. " and " ..rev else if srv_records[guid][2] ~= 0 then msg = msg .. "made " .. mo_rev .. " and " .. rev else -- srv_records[guid][1] ~= 0 msg = msg .. "made " .. mu_rev .. " and " .. rev end end return(msg .. " since "..os.date(date_fmt, srv_records[guid][5])) -- return(string.format("%s^7 has made %d monster revives, " -- .."%d multi revives and revived a total of %d " -- .."players since %s", -- name, srv_records[guid][2], srv_records[guid][1], -- srv_records[guid][3], -- os.date(date_fmt, srv_records[guid][5]))) end end function recordMessage () local func_start = et.trap_Milliseconds() local rec_arr = {} local multi_rec = { 0, nil } local monster_rec = { 0, nil } local revive_rec = { 0, nil } local oldest = 2147483647 -- 2^31 - 1 table.foreach(srv_records, function (guid, arr) if arr[2] > monster_rec[1] then monster_rec = { arr[2], arr[4] } end if arr[1] > multi_rec[1] then multi_rec = { arr[1], arr[4] } end if arr[3] > revive_rec[1] then revive_rec = { arr[3], arr[4] } end if arr[5] < oldest then oldest = arr[5] end end) if monster_rec[2] ~= nil then table.insert(rec_arr, string.format("%s ^8(^7%d monster revives^8)^7", monster_rec[2], monster_rec[1])) end if multi_rec[2] ~= nil then table.insert(rec_arr, string.format("%s ^8(^7%d multi revives^8)^7", multi_rec[2], multi_rec[1])) end if revive_rec[2] ~= nil then table.insert(rec_arr, string.format("^7%s ^8(^7%d revives^8)^7", revive_rec[2], revive_rec[1])) end et.G_Printf("rspree.lua: recordMessage(): %d ms\n", et.trap_Milliseconds() - func_start) if table.getn(rec_arr) ~= 0 then return("^7Top revivers: ".. table.concat(rec_arr, ", ")) else return("^7no records found :(") end end function et_ConsoleCommand() local cmd = et.trap_Argv(0) local i = 0 if cmd == "rsprees" then et.G_Printf("rsprees: --------------------\n") for i=0, sv_maxclients do if revive_sprees[i] ~= nil and revive_sprees[i] ~= 0 then et.G_Printf("^7rsprees: %d %s^7 (%s)^7\n", revive_sprees[i], playerName(i), teamName(tonumber(et.gentity_get(i, "sess.sessionTeam")))) end end et.G_Printf("^7rsprees: --------------------\n") if max_id ~= nil then et.G_Printf("^7Max: %s^7 with %d\n", playerName(max_id), max_spree) end return(1) elseif cmd == "rspreesall" then et.G_Printf("^7Alltime reviving sprees:\n") table.foreach(alltime_stats, function (map, arr) et.G_Printf("rspreesall: %s: %s^7 with %d revives @%s\n", map, arr[3], arr[1], os.date(date_fmt, arr[2])) end) et.G_Printf("^7Alltime reviving sprees END\n") return(1) elseif cmd == "rspreerecords" then et.G_Printf("^1rspree_records: %s\n", recordMessage()) return(1) elseif cmd == "rspreedel" then srv_records = {} saveStats(record_cfg, srv_records) et.G_Printf("^7All rspree-records has been deleted.\n") return(1) elseif cmd == "rspree_reset" then alltime_stats = {} saveStats(spree_cfg, alltime_stats) et.G_Printf("^7All sprees has been deleted.\n") return(1) end return(0) end table.foreach = function(items, callback) for key, value in pairs(items) do local result = callback(key, value) if result ~= nil then return result end end end table.getn = function(items) return #items end math.mod = math.fmod string.gfind = string.gmatch -- vim: ts=4 sw=4 expandtab syn=lua |
WolfAdmin: develop/1.2.1 217456cb 2019-02-02 19:12 Details Diff |
Added setting to disable spree sounds (entirely, or for others) |
Affected Issues 0000095 |
|
mod - config/wolfadmin.toml | Diff File | ||
mod - luascripts/wolfadmin/game/sprees.lua | Diff File | ||
mod - luascripts/wolfadmin/util/settings.lua | Diff File | ||
WolfAdmin: develop/1.3.0 f5d71d7f 2019-02-05 19:22 Details Diff |
Implemented combis for multikills/multirevives (refs 0000095) |
Affected Issues 0000095 |
|
add - config/combis.toml | Diff File | ||
mod - config/wolfadmin.toml | Diff File | ||
add - luascripts/wolfadmin/game/combis.lua | Diff File | ||
mod - luascripts/wolfadmin/main.lua | Diff File | ||
mod - luascripts/wolfadmin/util/events.lua | Diff File | ||
mod - luascripts/wolfadmin/util/settings.lua | Diff File | ||
WolfAdmin: develop/1.2.1 b2c357b0 2019-02-12 17:53 Details Diff |
Fixed trying to play unavailable spree sounds (refs 0000095) |
Affected Issues 0000095 |
|
mod - luascripts/wolfadmin/game/sprees.lua | Diff File |
Date Modified | Username | Field | Change |
---|---|---|---|
2019-01-27 09:18 | harlekin | New Issue | |
2019-01-27 09:18 | harlekin | Tag Attached: lua | |
2019-01-27 09:18 | harlekin | Tag Attached: spree | |
2019-01-27 09:18 | harlekin | File Added: spree_sound_lua.zip | |
2019-01-28 13:53 | Timo | Tag Detached: lua | |
2019-01-28 15:33 | Timo | Target Version | => 1.3.0 |
2019-01-28 15:33 | Timo | Description Updated | |
2019-01-28 15:33 | Timo | Mod | Legacy => N/A |
2019-01-31 18:29 | Timo | Relationship added | related to 0000046 |
2019-01-31 18:30 | Timo | Relationship deleted | related to 0000046 |
2019-01-31 18:30 | Timo | Relationship added | child of 0000046 |
2019-02-05 11:46 | Timo | Changeset attached | => WolfAdmin develop/1.2.1 217456cb |
2019-02-05 18:16 | Timo | Assigned To | => Timo |
2019-02-05 18:16 | Timo | Status | new => assigned |
2019-02-05 18:16 | Timo | Changeset attached | => WolfAdmin develop/1.3.0 f5d71d7f |
2019-02-12 16:47 | Timo | Changeset attached | => WolfAdmin develop/1.2.1 b2c357b0 |
2019-02-19 15:38 | estorado | File Added: kspree.pk3 | |
2019-02-19 15:38 | estorado | Note Added: 0000124 | |
2019-05-10 14:35 | harlekin | File Added: rspree.lua | |
2019-05-10 14:35 | harlekin | File Added: kspree.lua | |
2019-05-10 14:35 | harlekin | Note Added: 0000128 | |
2020-04-15 16:30 | Timo | Status | assigned => resolved |
2020-04-15 16:30 | Timo | Resolution | open => fixed |
2020-04-15 16:30 | Timo | Fixed in Version | => 1.3.0 |