--scripts/modtools/projectile-trigger.lua --author expwnent --based on Putnam's projectileExpansion --TODO: trigger based on contaminants 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)