Dragonji Posted November 17, 2011 Share Posted November 17, 2011 I have a little problem with my kspree.lua As you know, there are defined sprees from 5 to 35 (5, 10, 15... 35) and for each number of kills, the server shows a specific message + plays a sound. The problem is that by default announcements about sprees are endless which means the server doesn't stop announcing about sprees even when the last one (35) is reached. Let me explain this a bit more: The message for 35 spree is: "<name> is outstanding!!! (35 kills)". And for example, when the player reaches 40 kills, the server again "says" the same message as for 35, but with another number (40 in this case - "<name> is outstanding!!! (40 kills)"). The server keeps repeating this announcement for every 5 kills (40, 45, 50...). My question is what should I change in the script to stop announcing when the last defined spree is reached? My kspree.lua: -- -- kspree.lua -- -- $Id: kspree.lua 174 2007-02-28 19:17:56Z bennz $ -- $Date: 2007-02-28 20:17:56 +0100 (Wed, 28 Feb 2007) $ -- $Revision: 174 $ -- version = "1.0.4" -- kspree.lua logic "stolen" from Vetinari's rspree.lua, who "stole" from etadmin_mod.pl and so on -- CONSOLE COMMANDS : ksprees, kspeesall, kspreerecords -- added: new readRecords() function -- added: First Blood + Last Blood -- added: Greatshot option, display last killers name v56 -- added: Sorry option, display last TKed's name v45 -- added: spree announcement can be disabled -- FIXME: recordMessage() does not work everytime -- FIXED !!! -- FIXME: use wait_table[id] ~= nil --FIXED mmmhhh :/ ??? -- -- If you run etadmin_mod, change the following lines in "etadmin.cfg" -- spree_detector = 0 -- longest_spree_display = 0 -- persistent_spree_record = 0 -- persistent_map_spree_record = 0 -- first_blood = 0 -- multikill_detector = 0 -- monsterkill_detector = 0 -- last_blood = 0 -- ------------------------------------------------------------------------------------- -------------------------------CONFIG START------------------------------------------ kspree_cfg = "kspree.txt" record_cfg = "kspree-records.txt" date_fmt = "%Y-%m-%d, %H:%M:%S" kmultitk_announce = true -- announce multi TK kmulti_announce = true -- announce multi(mega-/ultra-)kill kspree_announce = true -- announce sprees kmulti_sound = false -- multi-sounds kspree_sound = false -- spree-sounds first_blood = true -- display First Blood last_blood = true -- display Last Blood kmulti_pos = "chat" -- multi + megakill - position kmonster_pos = "chat" -- ultra + monster + ludicrous + holy shit - position kmultitk_pos = "chat" -- multi TK - position kspree_pos = "bp" -- killing spree position endspree_pos = "chat" -- spree end position kspree_color = "8" -- killing spree color, do NOT change 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 ^7OMG" kholyshit_msg = "^1M A S S A C R E ^7->>> ^7%s ^7<<<- ^1M A S S A C R E^7" kmultitk_msg = "^7OMFG ^1Multi TEAMKILL ^7-> ^7%s ^7<- ^1Multi TEAMKILL ^7OMFG" firstbloodsound = "sound/silent/firstblood.wav" multisound = "sound/announces/multikill.wav" megasound = "sound/announces/megakill.wav" ultrasound = "sound/announces/ultrakill.wav" monstersound = "sound/announces/monsterkill.wav" ludicroussound = "sound/announces/ludicrouskill.wav" holyshitsound = "sound/announces/holyshit.wav" multitksound = "sound/announces/tk.wav" killingspreesound = "sound/announces/spree5.wav" rampagesound = "sound/announces/spree10.wav" dominatingsound = "sound/announces/spree15.wav" godlikesound = "sound/announces/spree20.wav" unstoppablesound = "sound/announces/spree25.wav" wickedsicksound = "sound/announces/spree30.wav" pottersound = "sound/announces/spree35.wav" killingspree_private = false -- send killingspree message + sound to client only, if set to true -- (You are on a killing spree), all other messages are global messages, like rampage and so on kspree_cmd_enabled = true -- set to false to ignore the "kspree_cmd" kspree_cmd = "!spree_record" record_cmd = "!ksprees" -- command to print players with most multi,mega,ultra... kills stats_cmd = "!stats" -- same as etadmin_mod's "!stats", prints personal killing records (i.e. multi,mega,ultra... kills) statsme_cmd = "!statsme" -- shows ur personal killing stats (private) srv_record = true -- set to true, if u want to save killing stats record_last_nick = true -- set to true to keep the last known nick a guid has records_expire = 60*60*24*5 -- in seconds! 60*60*24*90 == 90 days allow_spree_sk = false -- allow new killing spree record, even if he killed himself great_shot = false -- name of ur killer will be added if u vsay "GreatShot" within "great_shot_time" ms great_shot_time = 5000 -- 5000 = 5 seconds = Five SECONDS great_shot_repeat = false -- set to true, name will be added everytime u vsay Greatshot within "great_shot_time" ms sorry = false -- name of ur last tk will be added if u vsay_team "Sorry" within "sorry_time" ms sorry_time = 9000 -- 9000 = 9 seconds = Nine SECONDS sorry_repeat = false -- set to true, name will be added everytime u vsay_team "sorry" within "sorry_time" ms save_awards = true -- save Ludicrouskill + Holy Shit + Multi TK in textfile "awards_file" awards_file = "awards.txt" msg_command = "ksprees" -- '\ksprees 1|0' to switch on / off the messages and sounds -- clients can set their default with 'setu b_ksprees 1' (or 0) msg_default = true -- print kspree messages to client if true K_Sprees = { -- adjust them to ur needs [5] = "is on a ^2killing spree^8.", [10] = "is on a ^2rampage^8!", [15] = "is ^2dominating^8!", [20] = "is ^2unstoppable^8!", [25] = "is ^2godlike^8!!!", [30] = "is ^2wicked sick^8!!!", [35] = "is ^2outstanding^8!!!", } -------------------------------CONFIG END ------------------------------------------- ------------------------------------------------------------------------------------- et.MAX_WEAPONS = 50 EV_GLOBAL_CLIENT_SOUND = 54 killing_sprees = {} kmax_spree = 0 kmax_id = nil alltime_stats = {} kmulti = {} kmultitk = {} wait_table = {} kmap_record = false srv_records = {} kendofmap = false keomap_done = false gamestate = -1 last_b = "" last_killer = {} last_tk = {} client_msg = {} kteams = { [0]="Spectator", [1]="Axis", [2]="Allies", [3]="Unknown", } function et_InitGame(levelTime, randomSeed, restart) local func_start = et.trap_Milliseconds() et.RegisterModname("kspree.lua "..version.." "..et.FindSelf()) sv_maxclients = tonumber(et.trap_Cvar_Get("sv_maxclients")) local i = 0 for i=0, sv_maxclients-1 do killing_sprees[i] = 0 kmulti[i] = { [1]=0, [2]=0, } client_msg[i] = false if kmultitk_announce then kmultitk[i] = { [1]=0, [2]=0, } end end i = readStats(kspree_cfg) et.G_Printf("kspree.lua: loaded %d alltime stats from %s\n", i, kspree_cfg) if srv_record then i = readRecords(record_cfg) et.G_Printf("kspree.lua: loaded %d alltime records from %s\n", i, record_cfg) end et.trap_SendConsoleCommand(et.EXEC_NOW,"sets KSpree_version "..version) et.G_Printf("bennz's kspree.lua version "..version.." activated...\n") et.G_Printf("kspree.lua: startup: %d ms\n", et.trap_Milliseconds() - func_start) end function sayClients(pos, msg) --et.G_Printf("kspree.lua: sayClients('%s', '%s')\n", pos, msg) --et.trap_SendServerCommand(-1, pos.." \""..msg.."^7\"\n") 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 ) end function soundClients(which_sound) table.foreach(client_msg, function(id, msg_ok) if msg_ok then et.G_ClientSound(id, which_sound) end end ) end -- printf wrapper for debugging function et.G_Printf(...) et.G_Print(string.format(unpack(arg))) end function et.G_ClientSound(clientnum, soundfile) local tempentity = et.G_TempEntity(et.gentity_get(clientnum, "r.currentOrigin"), EV_GLOBAL_CLIENT_SOUND) et.gentity_set(tempentity, "s.teamNum", clientnum) et.gentity_set(tempentity, "s.eventParm", et.G_SoundIndex(soundfile)) end function mapName () return(string.lower(et.trap_Cvar_Get("mapname"))) end function teamName (t) if t < 0 or t > 3 then t = 3 end return(kteams[t]) end function getGuid (id) return(string.lower(et.Info_ValueForKey(et.trap_GetUserinfo(id), "cl_guid"))) end function playerName(id) return(et.Info_ValueForKey(et.trap_GetUserinfo(id), "name")) end function findMaxKSpree() local max = alltime_stats[mapName()] if max == nil then max = {} end return(max) end function saveStats(file, list) local fd, len = et.trap_FS_FOpenFile(file, et.FS_WRITE) if len == -1 then et.G_Printf("kspree.lua: failed to open %s", file) 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) end ) et.trap_FS_FCloseFile(fd) end function readStats(file) local fd,len = et.trap_FS_FOpenFile( file, et.FS_READ ) local count = 0 if len == -1 then et.G_Printf("kspree.lua: no killingspree.txt\n") return(0) end local filestr = et.trap_FS_Read( fd, len ) et.trap_FS_FCloseFile( fd ) local map, frags, zwiebel, naim for map, frags, zwiebel, naim in string.gfind(filestr,"[^%#]([%_%w]*)%;(%d*)%;(%d*)%;([^%\n]*)") do alltime_stats[map] = { tonumber(frags), tonumber(zwiebel), naim } count = count + 1 end return(count) end function readRecords(file) local func_start = et.trap_Milliseconds() local fd,len = et.trap_FS_FOpenFile( file, et.FS_READ ) local count = 0 if len == -1 then et.G_Printf("kspree.lua: no Spree Records \n") et.G_Printf("rspree.lua: readRecords(): %d ms\n", et.trap_Milliseconds() - func_start) return(0) end local guid,multi,mega,ultra,monster,ludic,kills,name,first,last local now = tonumber(os.date("%s")) local exp_diff = now - records_expire local filestr = et.trap_FS_Read( fd, len ) et.trap_FS_FCloseFile( fd ) for guid,multi,mega,ultra,monster,ludic,kills,name,first,last in string.gfind(filestr, "[^%#](%x+)%;(%d*)%;(%d*)%;(%d*)%;(%d*)%;(%d*)%;(%d*)%;([^;]*)%;(%d*)%;([^%\n]*)") do local seen = tonumber(last) if (records_expire == 0) or (exp_diff < seen) then srv_records[guid] = { tonumber(multi), tonumber(mega), tonumber(ultra), tonumber(monster), tonumber(ludic), tonumber(kills), name, tonumber(first), seen } count = count + 1 end end et.G_Printf("kspree.lua: readRecords(): %d ms\n", et.trap_Milliseconds() - func_start) return(count) end function et_Print(text) if kendofmap and string.find(text, "^WeaponStats: ") == 1 then if not keomap_done then if kmax_id ~= nil then local re_name = playerName(kmax_id) if re_name == "" then re_name = "^0MIA" -- missing in action end local longest = "" local max = findMaxKSpree() if table.getn(max) == 3 then if kmap_record then longest = " ^"..kspree_color.."This is a New map record!" saveStats(kspree_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 killing spree: %s^7 with %d kills!%s", re_name, kmax_spree, longest) if kspree_announce then et.trap_SendConsoleCommand(et.EXEC_APPEND, "qsay \""..msg.."^7\"\n") end end if srv_record then saveStats(record_cfg, srv_records) end keomap_done = true end return(nil) end if text == "Exit: Timelimit hit.\n" or text == "Exit: Wolf EndRound.\n" then kendofmap = true for i = 0, sv_maxclients-1 do if killing_sprees[i] > 0 then checkKSpreeEnd(i, 1022, true) end end if last_b ~= "" and last_blood then msg = string.format("^7And the final kill of this round goes to: %s ^7!", last_b ) et.trap_SendConsoleCommand(et.EXEC_APPEND, "qsay \""..msg.."^7\"\n") end return(nil) end end function checkMultiKill (id) local lvltime = et.trap_Milliseconds() local guid = getGuid(id) if (lvltime - kmulti[id][1]) < 3000 then kmulti[id][2] = kmulti[id][2] + 1 if kmulti[id][2] == 3 then wait_table[id] = {lvltime, 1} elseif kmulti[id][2] == 4 then wait_table[id] = {lvltime, 2} elseif kmulti[id][2] == 5 then wait_table[id] = {lvltime, 3} elseif kmulti[id][2] == 6 then wait_table[id] = {lvltime, 4} elseif kmulti[id][2] == 7 then wait_table[id] = {lvltime, 5} if save_awards then add_qwnage(id, 1) end elseif kmulti[id][2] == 8 then wait_table[id] = {lvltime, 6} if save_awards then add_qwnage(id, 2) end end else kmulti[id][2] = 1 end kmulti[id][1] = lvltime end function checkMultiTk(id) local lvltime = et.trap_Milliseconds() if (lvltime - kmultitk[id][1]) < 3000 then kmultitk[id][2] = kmultitk[id][2] + 1 if kmultitk[id][2] == 3 then sayClients(kmultitk_pos, string.format(kmultitk_msg, playerName(id))) et.G_globalSound(multitksound) if save_awards then add_qwnage(id, 3) end end else kmultitk[id][2] = 1 end kmultitk[id][1] = lvltime end function et_Obituary(victim, killer, mod) if gamestate == 0 then local v_teamid = et.gentity_get(victim, "sess.sessionTeam") local k_teamid = et.gentity_get(killer, "sess.sessionTeam") local weapon = et.gentity_get(victim, "s.weapon") if (victim == killer) then -- suicide if mod == 37 then if not allow_spree_sk then local max = findMaxKSpree() if table.getn(max) == 3 then if killing_sprees[victim] > max[1] and kspree_announce then sayClients(endspree_pos, string.format("^%sWhat a pity! ^7%s^%s killed himself. This would have been a new ^qspree record ^%s!", kspree_color, playerName(victim), kspree_color, kspree_color)) end end else checkKSpreeEnd(victim, killer, false) end end killing_sprees[victim] = 0 elseif (v_teamid == k_teamid) then -- team kill if kmultitk_announce then checkMultiTk(killer) end if sorry then last_tk[killer] = {playerName(victim) , et.trap_Milliseconds()} end checkKSpreeEnd(victim, killer, false) killing_sprees[victim] = 0 else -- nomal kill if killer ~= 1022 and killer ~= 1023 then -- no world / unknown kills killing_sprees[killer] = killing_sprees[killer] + 1 local guid = getGuid(killer) if srv_record and guid ~= "" then -- guid;multi;mega;ultra;monster;ludicrous;revive;nick;firstseen;lastseen if type(srv_records[guid]) ~= "table" then srv_records[guid] = { 0, 0, 0, 0, 0, 0, playerName(killer), tonumber(os.date("%s")), 0 } elseif table.getn(srv_records[guid]) ~= 9 then srv_records[guid] = { 0, 0, 0, 0, 0, 0, playerName(killer), tonumber(os.date("%s")), 0 } end srv_records[guid][6] = srv_records[guid][6] + 1 srv_records[guid][9] = tonumber(os.date("%s")) if record_last_nick or (srv_records[guid][7] == nil) then srv_records[guid][7] = playerName(killer) end end if killing_sprees[killer] > kmax_spree then kmax_spree = killing_sprees[killer] kmax_id = killer end if great_shot then last_killer[victim] = { playerName(killer), et.trap_Milliseconds() } end if first_blood then sayClients(kmonster_pos, string.format("%s ^1drew first BLOOD ^7!", playerName(killer) )) --et.G_globalSound(firstbloodsound) soundClients(firstbloodsound) first_blood = false end if last_blood then last_b = playerName(killer) end checkMultiKill(killer) if kspree_announce then checkKSprees(killer) end checkKSpreeEnd(victim, killer, true) else checkKSpreeEnd(victim, killer, false) end killing_sprees[victim] = 0 end end -- gamestate end function checkKSpreeEnd(id, killer, normal_kill) if killing_sprees[id] > 0 then local m_name = playerName(id) if m_name == "" then m_name = "^0MIA" -- missing in action 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 krecord = false local msg = "" if kmax_id == id and killing_sprees[id] == kmax_spree then local max = findMaxKSpree() if table.getn(max) == 3 and kmax_spree > max[1] then alltime_stats[mapName()] = { kmax_spree, os.date("%s"), m_name } kmap_record = true krecord = true elseif table.getn(max) == 0 then alltime_stats[mapName()] = { kmax_spree, os.date("%s"), m_name } kmap_record = true krecord = true end end if killing_sprees[id] >= 5 and kspree_announce then if normal_kill then -- i.e. no TK or suicide sayClients(endspree_pos, string.format("%s^%s's killing spree ended (^7%d kills^%s), killed by ^7%s^%s!", m_name, kspree_color, killing_sprees[id], kspree_color, k_name, kspree_color)) if krecord then sayClients(endspree_pos, "^"..kspree_color.."This is a new map record!^7") end else if krecord and killer <= sv_maxclients then sayClients(endspree_pos, string.format("%s^%s's killing spree ended (^7%d kills^%s).", m_name, kspree_color, killing_sprees[id], kspree_color)) sayClients(endspree_pos, "^"..kspree_color.."This is a new map record !^7") end end end end end function checkKSprees(id) if killing_sprees[id] ~= 0 then if math.mod(killing_sprees[id], 5) == 0 then local spree_id = killing_sprees[id] local spree = K_Sprees[killing_sprees[id]] if killing_sprees[id] > 35 then spree = K_Sprees[35] end if spree == nil then spree = "is on a Killing spree" et.G_Printf("kspree: Killing spree = nil\n") end if spree_id == 5 then if killingspree_private and client_msg[id] then local craap = string.format("%s ^%s: You are on a killing spree! (^75 kills^%s)", playerName(id), kspree_color, kspree_color) et.trap_SendServerCommand( id, "b 8 \" "..craap.." \"\n") --et.G_Sound( id , et.G_SoundIndex("sound/misc/killingspree.wav")) et.G_ClientSound(id, killingspreesound) else sayClients(kspree_pos, string.format("%s^%s %s (^7%d kills^%s)", playerName(id), kspree_color, spree, killing_sprees[id], kspree_color)) if kspree_sound then soundClients(killingspreesound) --et.G_globalSound(killingspreesound) end end else sayClients(kspree_pos, string.format("%s^%s %s (^7%d kills^%s)", playerName(id), kspree_color, spree, killing_sprees[id], kspree_color)) if spree_id == 10 and kspree_sound then --et.G_globalSound(rampagesound) soundClients(rampagesound) elseif spree_id == 15 and kspree_sound then --et.G_globalSound(dominatingsound) soundClients(dominatingsound) elseif spree_id == 20 and kspree_sound then --et.G_globalSound(unstoppablesound) soundClients(unstoppablesound) elseif spree_id == 25 and kspree_sound then --et.G_globalSound(godlikesound) soundClients(godlikesound) elseif spree_id == 30 and kspree_sound then --et.G_globalSound(wickedsicksound) soundClients(wickedsicksound) elseif spree_id == 35 and kspree_sound then --et.G_globalSound(pottersound) soundClients(pottersound) end end --spree_id == 5 end end end function et_RunFrame(levelTime) if math.mod(levelTime, 500) ~= 0 then return end local ltm = et.trap_Milliseconds() gamestate = tonumber(et.trap_Cvar_Get("gamestate")) if gamestate == 0 then -- wait before display multi/mega/monster/ludicrous-kill AND display highest -- wait_table[id] = {lvltime, 2} table.foreach(wait_table, function(id, arr) local guid = getGuid(id) local m_name = playerName(id) local startpause = tonumber(arr[1]) local whichkill = arr[2] if whichkill == 1 and (startpause + 3100) < ltm then if kmulti_announce then sayClients(kmulti_pos, string.format(kmulti_msg, m_name)) if kmulti_sound then --et.G_globalSound(multisound) soundClients(multisound) end end if srv_record and guid ~= "" then srv_records[guid][1] = srv_records[guid][1] + 1 end wait_table[id] = nil end if whichkill == 2 and (startpause + 3100) < ltm then if kmulti_announce then sayClients(kmulti_pos, string.format(kmega_msg, m_name)) if kmulti_sound then --et.G_globalSound(megasound) soundClients(megasound) end end if srv_record and guid ~= "" then srv_records[guid][2] = srv_records[guid][2] + 1 end wait_table[id] = nil end if whichkill == 3 and (startpause + 3100) < ltm then if kmulti_announce then sayClients(kmonster_pos, string.format(kultra_msg, m_name)) if kmulti_sound then --et.G_globalSound(ultrasound) soundClients(ultrasound) end end if srv_record and guid ~= "" then srv_records[guid][3] = srv_records[guid][3] + 1 end wait_table[id] = nil end if whichkill == 4 and (startpause + 3100) < ltm then if kmulti_announce then sayClients(kmonster_pos, string.format(kmonster_msg, m_name)) if kmulti_sound then --et.G_globalSound(monstersound) soundClients(monstersound) end end if srv_record and guid ~= "" then srv_records[guid][4] = srv_records[guid][4] + 1 end wait_table[id] = nil end if whichkill == 5 and (startpause + 3100) < ltm then if kmulti_announce then sayClients(kmonster_pos, string.format(kludicrous_msg, m_name)) if kmulti_sound then --et.G_globalSound(ludicroussound) soundClients(ludicroussound) end end if srv_record and guid ~= "" then srv_records[guid][5] = srv_records[guid][5] + 1 end wait_table[id] = nil end if whichkill == 6 and (startpause + 900) < ltm then if kmulti_announce then sayClients(kmonster_pos, string.format(kholyshit_msg, m_name)) if kmulti_sound then --et.G_globalSound(holyshitsound) soundClients(holyshitsound) end end wait_table[id] = nil end end) --end table.foreach end -- gamestate end function et_ClientBegin(id) updateUInfoStatus(id) end function et_ClientDisconnect(id) killing_sprees[id] = 0 client_msg[id] = false if great_shot and last_killer[id] ~= nil then last_killer[id] = nil end if sorry and last_tk[id] ~= nil then last_tk[id] = nil end if wait_table[id] ~= nil then wait_table[id] = nil end end function et_ClientCommand(id, command) if et.trap_Argv(0) == "say" then if kspree_cmd_enabled and et.trap_Argv(1) == kspree_cmd then local map_msg = "" local map_max = findMaxKSpree() 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 \"^1kspree_record: "..map_msg..all_msg.."^7\"\n") elseif et.trap_Argv(1) == record_cmd and srv_record then local rec_msg = recordMessage() et.trap_SendConsoleCommand(et.EXEC_APPEND, "qsay \"^1kspree_record: "..rec_msg.."^7\"\n") elseif et.trap_Argv(1) == stats_cmd and srv_record then local stats_msg = statsMessage(id) et.trap_SendConsoleCommand(et.EXEC_APPEND, "qsay \"^3stats: ^7"..stats_msg.."^7\"\n") elseif et.trap_Argv(1) == statsme_cmd and srv_record then local statsme_msg = statsMessage(id) et.trap_SendServerCommand( id, "b 8 \"^3statsme: ^7"..statsme_msg.." ^7\"\n") return(1) end -- end elseif... end -- et.trap_Argv(0) == "say" if et.trap_Argv(0) == msg_command then if et.trap_Argv(1) == "" then local status = "^8on^7" if client_msg[id] == false then status = "^8off^7" end et.trap_SendServerCommand(id, string.format("b 8 \"^#(ksprees):^7 Messages are %s\"", status)) elseif tonumber(et.trap_Argv(1)) == 0 then setKSpreeMsg(id, false) et.trap_SendServerCommand(id, "b 8 \"^#(ksprees):^7 Messages are now ^8off^7\"") else setKSpreeMsg(id, true) et.trap_SendServerCommand(id, "b 8 \"^#(ksprees):^7 Messages are now ^8on^7\"") end return(1) end if et.trap_Argv(0) == "vsay" then if not great_shot then return end local vsaystring = ParseString(et.trap_Argv(1)) if string.lower(vsaystring[1]) == "greatshot" and last_killer[id] ~= nil and table.getn(vsaystring) < 2 then if (et.trap_Milliseconds() - tonumber(last_killer[id][2])) < great_shot_time then local vsaymessage = "Great shot, ^7"..last_killer[id][1].."^r!" et.trap_SendServerCommand(-1, "vchat 0 "..id.." 50 GreatShot "..math.random(1, 2).." \""..vsaymessage.."\"") if not great_shot_repeat then last_killer[id] = nil end return(1) else return(0) end end -- end lower end -- vsay if et.trap_Argv(0) == "vsay_team" then if not sorry then return end local vsaystring = ParseString(et.trap_Argv(1)) if string.lower(vsaystring[1]) == "sorry" and last_tk[id] ~= nil and table.getn(vsaystring) < 2 then if (et.trap_Milliseconds() - tonumber(last_tk[id][2])) < sorry_time then local vsaymessage = "^5Sorry, ^7"..last_tk[id][1].."^5!" local ppos = et.gentity_get(id,"r.currentOrigin") local TKer_team = et.gentity_get(id, "sess.sessionTeam") local cmd = string.format("vtchat 0 %d 50 Sorry %d %d %d %d \"%s\"", id, ppos[1], ppos[2], ppos[3], math.random(1,3), vsaymessage) for t=0, sv_maxclients-1, 1 do if et.gentity_get(t, "sess.sessionTeam") == TKer_team then et.trap_SendServerCommand(t, cmd) end end if not sorry_repeat then last_tk[id] = nil end return(1) else return(0) end end -- end lower end -- vsay_team return(0) end function setKSpreeMsg(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), "b_ksprees", value) ) end function updateUInfoStatus(id) local rs = et.Info_ValueForKey(et.trap_GetUserinfo(id), "b_ksprees") if rs == "" then setKSpreeMsg(id, msg_default) elseif tonumber(rs) == 0 then client_msg[id] = false else client_msg[id] = true end end function ParseString(inputString) local i = 1 local t = {} for w in string.gfind(inputString, "([^%s]+)%s*") do t[i]=w i=i+1 end return t end function statsMessage(id) local guid = getGuid(id) local stats_arr = {} local name = playerName(id) if type(srv_records[guid]) ~= "table" then return("no killing stats for "..name.."^7") else local i = 1 for i=1, 5 do if srv_records[guid][i] > 0 then local whatkill = "" if i == 1 then whatkill = "Multikills," elseif i == 2 then whatkill = "Megakills," elseif i == 3 then whatkill = "Ultrakills," elseif i == 4 then whatkill = "Monsterkills," elseif i == 5 then whatkill = "Ludicrouskills" end table.insert(stats_arr, string.format("^8%d ^7%s", srv_records[guid][i], whatkill)) end end local whathedid = "" if table.getn(stats_arr) ~= 0 then table.insert(stats_arr, 1, string.format("^7 has made:")) table.insert(stats_arr, string.format("^7and")) whathedid = table.concat(stats_arr, " ") end return(string.format("%s^7%s killed a total of ^8%d ^7players since %s", name, whathedid ,srv_records[guid][6], os.date(date_fmt, srv_records[guid][8]))) end end function recordMessage () local rec_arr = {} local multi_rec = { 0, nil } local mega_rec = { 0, nil } local ultra_rec = { 0, nil } local monster_rec = { 0, nil } local ludicrous_rec = { 0, nil } local kill_rec = { 0, nil } --multikill table.foreach(srv_records, function (guid, arr) if arr[1] > multi_rec[1] then multi_rec = { arr[1], arr[7] } end if arr[2] > mega_rec[1] then mega_rec = { arr[2], arr[7] } end if arr[3] > ultra_rec[1] then ultra_rec = { arr[3], arr[7] } end if arr[4] > monster_rec[1] then monster_rec = { arr[4], arr[7] } end if arr[5] > ludicrous_rec[1] then ludicrous_rec = { arr[5], arr[7] } end if arr[6] > kill_rec[1] then kill_rec = { arr[6], arr[7] } end end) if multi_rec[2] ~= nil then table.insert(rec_arr, string.format("^7%s ^8(^7%d Multikills^8)^7", multi_rec[2], multi_rec[1])) end if mega_rec[2] ~= nil then table.insert(rec_arr, string.format("^7%s ^8(^7%d Megakills^8)^7", mega_rec[2], mega_rec[1])) end if ultra_rec[2] ~= nil then table.insert(rec_arr, string.format("^7%s ^8(^7%d Ultrakills^8)^7", ultra_rec[2], ultra_rec[1])) end if monster_rec[2] ~= nil then table.insert(rec_arr, string.format("^7%s ^8(^7%d Monsterkills^8)^7", monster_rec[2], monster_rec[1])) end if ludicrous_rec[2] ~= nil then table.insert(rec_arr, string.format("^7%s ^8(^7%d Ludicrouskills^8)^7", ludicrous_rec[2], ludicrous_rec[1])) end if kill_rec[2] ~= nil then table.insert(rec_arr, string.format("^7%s ^7with a total of ^8%d ^7kills^7", kill_rec[2], kill_rec[1])) end if table.getn(rec_arr) ~= 0 then local oldest = 2147483647 -- 2^31 - 1 table.foreach(srv_records, function(guid, arr) if arr[8] < oldest then oldest = arr[8] end end) return("^7Top killers since "..os.date(date_fmt, oldest).. " are: "..table.concat(rec_arr, ", ")) else return("^7no records found ") end end function add_qwnage(id, woot) local fdqwnage,len = et.trap_FS_FOpenFile( "awards.txt", et.FS_APPEND ) if len == -1 then et.G_Printf("kspree.lua: failed to save awards for %s\n", playerName(id)) else if woot == 1 then qwnage = playerName(id).. " - Ludicrous Kill - "..os.date().."\n" elseif woot == 2 then qwnage = playerName(id).. " - Holy Shit - "..os.date().."\n" elseif woot == 3 then qwnage = playerName(id).. " - Multi TK - "..os.date().."\n" end et.trap_FS_Write( qwnage, string.len(qwnage) ,fdqwnage ) et.trap_FS_FCloseFile( fdqwnage ) end return(1) end function et_ConsoleCommand() local cmd = et.trap_Argv(0) local i = 0 if cmd == "ksprees" then et.G_Printf("ksprees: --------------------\n") for i=0, sv_maxclients-1 do if killing_sprees[i] ~= nil and killing_sprees[i] ~= 0 then et.G_Printf("^7ksprees: %d %s^7 (%s)^7\n", killing_sprees[i], playerName(i), teamName(tonumber(et.gentity_get(i, "sess.sessionTeam")))) end end et.G_Printf("^7ksprees: --------------------\n") if kmax_id ~= nil then et.G_Printf("^7Max: %s^7 with %d\n", playerName(kmax_id), kmax_spree) end return(1) elseif cmd == "kspreesall" then et.G_Printf("^7Alltime killing sprees:\n") table.foreach(alltime_stats, function (map, arr) et.G_Printf("kspreesall: %s: %s^7 with %d kills @%s\n", map, arr[3], arr[1], os.date(date_fmt, arr[2])) end ) et.G_Printf("^7Alltime killing sprees END\n") return(1) elseif cmd == "kspreerecords" then et.G_Printf("^1kspree_records: %s\n", recordMessage()) return(1) end return(0) end Quote Link to comment Share on other sites More sharing options...
Management gaoesa Posted November 17, 2011 Management Share Posted November 17, 2011 I don't know, and I didn't test at all, but you could try replacing the spree = K_Sprees[35] with return. In function checkKSprees(id) Quote Link to comment Share on other sites More sharing options...
=EMP=Avery13 Posted November 17, 2011 Share Posted November 17, 2011 Where do you find the kspree.lua? Quote Link to comment Share on other sites More sharing options...
Management hellreturn Posted November 17, 2011 Management Share Posted November 17, 2011 Dragon, once you get it working, can you please submit it here? http://mygamingtalk.com/forums/files/category/8-lua/ So other admins can download from their if needed? Thanks Quote Link to comment Share on other sites More sharing options...
Dragonji Posted December 5, 2011 Author Share Posted December 5, 2011 Download section doesn't want to accept *.lua files. Quote Link to comment Share on other sites More sharing options...
Management TheSilencerPL Posted December 5, 2011 Management Share Posted December 5, 2011 Add it as a zip file. I've already told Sol about it. Greets Quote Link to comment Share on other sites More sharing options...
=EMP=Avery13 Posted January 14, 2012 Share Posted January 14, 2012 Are you still planning on downloading this to the download section Dragon? Would love to have it on my server. Quote Link to comment Share on other sites More sharing options...
Dragonji Posted January 14, 2012 Author Share Posted January 14, 2012 Are you still planning on downloading this to the download section Dragon? Would love to have it on my server.I don't want to upload it right now because it's still not a final version, but since it works good so far, I will send you the current version through PM tomorrow. There are still few things to tweak and that's why I don't want to upload the lua to the download section at the moment. Quote Link to comment Share on other sites More sharing options...
=EMP=Avery13 Posted January 14, 2012 Share Posted January 14, 2012 That is fine and I respect that. I just don't understand lua and me creating one would not be such a good idea... lol Quote Link to comment Share on other sites More sharing options...
Management TheSilencerPL Posted January 14, 2012 Management Share Posted January 14, 2012 I don't want to upload it right now because it's still not a final versionYou can add it anyway, just describe it that it's a beta version, might not be fully functional and it's not finished yet.I think that would do. Quote Link to comment Share on other sites More sharing options...
Zer0o0 Posted April 25, 2012 Share Posted April 25, 2012 (edited) I think youre not using the last version of kspree i have it here and its the revision 239It works flawless in my server.kspree.zip Edited April 25, 2012 by Zer0o0 Dragonji 1 Quote Link to comment Share on other sites More sharing options...
Dragonji Posted April 29, 2012 Author Share Posted April 29, 2012 I think youre not using the last version of kspree i have it here and its the revision 239It works flawless in my server.kspree.zipThanks for this! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.