require 'tempfile' class Progs attr_accessor :list def initialize @list = [] end def include?(name) @list.each{|prog| return true if prog.name == name } end def <<(prog) @list << prog end def [](name) return find(name) end def find(name) @list.each{|prog| return prog if prog.name == name } end def run(trigger, doer, args = nil) @list.each{|prog| if prog.trigger == trigger if trigger == "roomenter" prog.exec(prog.method, doer, args) if prog.owner.location.rid == doer.location.rid end end } end end class Prog attr_accessor :config, :trigger, :carryover, :method, :name, :owner def initialize(cfname, owner) @config = CFile.new(cfname) @trigger = @config['@trigger'] @method = @config['@method'] @name = @method.delete("doprog_") f = Tempfile.new(@method) f.open @config['codeblock'].each{|line| f.print(line + "\n") } f.close load(f.path) @owner = owner f.close(true) return self end def exec(method, doer, args) @carryover = Progs.send(method, @owner, doer, args, @carryover) end end Logger.log("Prog code initialized.")