projectile-trigger.lua
parent
1815b09f19
commit
4be41eb1ed
@ -0,0 +1,101 @@
|
||||
--scripts/modtools/projectile-trigger.lua
|
||||
--author expwnent
|
||||
--based on Putnam's projectileExpansion
|
||||
|
||||
local eventful = require 'plugins.eventful'
|
||||
local utils = require 'utils'
|
||||
|
||||
materialTriggers = materialTriggers or {}
|
||||
|
||||
eventful.enableEvent(eventful.eventType.UNLOAD,1)
|
||||
eventful.onUnload.projectileTrigger = function()
|
||||
materialTriggers = {}
|
||||
end
|
||||
|
||||
function processTrigger(args)
|
||||
local command2 = {}
|
||||
for _,arg in ipairs(args.command) do
|
||||
if arg == '\\LOCATION' then
|
||||
table.insert(command2,args.pos.x)
|
||||
table.insert(command2,args.pos.y)
|
||||
table.insert(command2,args.pos.z)
|
||||
elseif arg == '\\PROJECTILE_ID' then
|
||||
table.insert(command2,args.projectile.id)
|
||||
elseif arg == '\\FIRER_ID' then
|
||||
table.insert(command2,args.projectile.firer.id)
|
||||
elseif string.sub(arg,1,1) == '\\' then
|
||||
table.insert(command2,string.sub(arg,2))
|
||||
else
|
||||
table.insert(command2,arg)
|
||||
end
|
||||
end
|
||||
dfhack.run_command(table.unpack(command2))
|
||||
end
|
||||
|
||||
eventful.onProjItemCheckImpact.expansion = function(projectile)
|
||||
local matStr = dfhack.matinfo.decode(projectile.item):getToken()
|
||||
local table = {}
|
||||
table.pos = projectile.cur_pos
|
||||
table.projectile = projectile
|
||||
table.item = projectile.item
|
||||
for _,args in ipairs(materialTriggers[matStr] or {}) do
|
||||
utils.fillTable(args,table)
|
||||
processTrigger(args)
|
||||
utils.unfillTable(args,table)
|
||||
end
|
||||
end
|
||||
|
||||
validArgs = validArgs or utils.invert({
|
||||
'help',
|
||||
'clear',
|
||||
'command',
|
||||
'material',
|
||||
})
|
||||
|
||||
local args = utils.processArgs({...}, validArgs)
|
||||
|
||||
if args.help then
|
||||
print([[scripts/modtools/projectile-trigger.lua
|
||||
arguments
|
||||
-help
|
||||
print this help message
|
||||
-clear
|
||||
unregister all triggers
|
||||
-material
|
||||
specify a material for projectiles that will trigger the command
|
||||
examples:
|
||||
INORGANIC:IRON
|
||||
CREATURE_MAT:DWARF:BRAIN
|
||||
PLANT_MAT:MUSHROOM_HELMET_PLUMP:DRINK
|
||||
-command [ commandList ]
|
||||
\\LOCATION
|
||||
\\PROJECTILE_ID
|
||||
\\FIRER_ID
|
||||
\\anything -> anything
|
||||
anything -> anything
|
||||
]])
|
||||
return
|
||||
end
|
||||
|
||||
if args.clear then
|
||||
materialTriggers = {}
|
||||
end
|
||||
|
||||
if not args.command then
|
||||
return
|
||||
end
|
||||
|
||||
if not args.material then
|
||||
error 'specify a material'
|
||||
end
|
||||
|
||||
if not dfhack.matinfo.find(args.material) then
|
||||
error ('invalid material: ' .. args.material)
|
||||
end
|
||||
|
||||
if not materialTriggers[args.material] then
|
||||
materialTriggers[args.material] = {}
|
||||
end
|
||||
table.insert(materialTriggers[args.material], args)
|
||||
|
||||
|
Loading…
Reference in New Issue