Your Filebase for Games like Return to Castle Wolfenstein , Enemy Territory and more ...
---------------- -- dynamite.lua -- $Date: 2007-02-10 21:35:12 +0100 (Sat, 10 Feb 2007) $ -- $Id: dynamite.lua 66 2007-02-10 20:35:12Z etpro $ -- $Revision: 66 $ -- -- Config: -- where to place the timer message, see -- http://wolfwiki.anime.net/index.php/SendServerCommand#Printing -- for valid locations local announce_pos = "b 8" -- print "Dynamite planted at LOCATION"? local announce_plant = false -- for 20, 10, 5, 3, 2, 1, BOOM use: local first_step = 20 local steps = { -- [step] = { next step, diff to next step } [20] = { 10, 10 }, [10] = { 5, 5 }, [5] = { 3, 2 }, [3] = { 2, 1 }, [2] = { 1, 1 }, [1] = { 0, 1 }, [0] = { 0, 0 } -- delete if diff to next == 0 } -- -- for 25, 15, 5, 3, 2, 1 use: -- local first_step = 25 -- local steps = { -- [25]={15,10}, -- [15]={5,10}, -- [5]={3,2}, -- [3]={2,1}, -- [2]={1,1}, -- [1]={0,0} -- no "Dynamite at %s exploding now" message -- } -- -- I think you got the idea now ...oh setting first_step = 30 will print -- -- everything one (server) frame too late ;-) -- end Config local version = "1.0" local timers = {} local levelTime local ST_NEXT = 1 local ST_DIFF = 2 local T_TIME = 1 local T_STEP = 2 local T_LOCATION = 3 -- called when game inits function et_InitGame(levelTime, randomSeed, restart) et.RegisterModname( "dynamite.lua" .. version .. " " .. et.FindSelf() ) et.G_Print("Vetinari's dynamite.lua version " .. version .. " activated...\n") end function sayClients(pos, msg) et.trap_SendServerCommand(-1, string.format("%s \"%s^7\"", pos, msg)) end function et_Print(text) -- etpro popup: allies planted "the Old City Wall" -- etpro popup: axis defused "the Old City Wall" local pattern = "^etpro%s+popup:%s+(%w+)%s+(%w+)%s+\"(.+)\"" local junk1,junk2,team,action,location = string.find(text, pattern) if team ~= nil and action ~= nil and location ~= nil then if action == "planted" then if announce_plant then sayClients(announce_pos, string.format("Dynamite planted at ^8%s^7", location)) end addTimer(location) end if action == "defused" then sayClients(announce_pos, string.format("Dynamite defused at ^8%s^7", location)) removeTimer(location) end end if text == "Exit: Timelimit hit.\n" or text == "Exit: Wolf EndRound.\n" then -- stop countdowns on intermission timers = {} end end function printTimer(seconds, loc) local when = string.format("in ^8%d^7 seconds", seconds) if seconds == 0 then when = "^8now^7" elseif seconds == 1 then when = "in ^81^7 second" end sayClients(announce_pos, string.format("Dynamite at ^8%s^7 exploding %s", loc, when)) end function addTimer(location) -- local diff = ((30 - first_step) * 1000) - 25 -- move one frame earlier local diff = (30 - first_step) * 1000 table.insert(timers, { levelTime + diff, first_step, location }) end function removeTimer(location) local delete = table.foreach(timers, function(i, timer) -- problem with 2 or more planted dynas at one location -- ... remove the one which was planted first if timer[T_LOCATION] == location then return(i) end end ) if delete ~= nil then table.remove(timers, delete) end end function et_RunFrame(lvltime) levelTime = lvltime table.foreach(timers, function(i, timer) if timer[T_TIME] <= levelTime then printTimer(timer[T_STEP], timer[T_LOCATION]) local step = steps[timer[T_STEP]] if step[ST_DIFF] == 0 then removeTimer(timer[T_LOCATION]) else timer[T_STEP] = step[ST_NEXT] timer[T_TIME] = levelTime + (step[ST_DIFF] * 1000) end end end ) end -- vim: ts=4 sw=4 expandtab syn=lua
File size: 0 MB