#
# file:: spawn.rb
# Author: Craig Smith
# This source code copyright (C) 2009 Craig Smith
# All rights reserved.
#
# Released under the terms of the TeensyMUD Public License
# See LICENSE file for additional information.
#
$:.unshift "lib" if !$:.include? "lib"
require 'storage/properties'
# A Spawn object is used to spawn a new game object or mobile in a given
# Room.
class Spawn < Root
logger 'DEBUG'
property :targetid, :max, :frequency, :inv, :wear, :wield, :location, :max_in_room
attr_accessor :tickcnt
# [+targetid+] TargetID of what to spawn
# [+owner+] The displayed name of the Container.
# [+return+] A handle to the new Container.
def initialize(targetid, owner)
super(nil, owner)
self.targetid = targetid
self.max = 1 # Max that can exists in the game
self.max_in_room = 1 # Max that can exist in a room at a time
self.frequency=12 # Game ticks until spawn
@tickcnt=0 # Current tick count
self.inv = [] # List of items in inventory
self.wear = [] # List of items worn
self.wield = [] # List of items weilded
self.location = nil # Where is this spawn point
end
# Loads the target object
# [+return+] Returns the loaded object
def load
@tickcnt = 0 if not @tickcnt
@tickcnt += 1
if @tickcnt < frequency
return nil
else
@tickcnt = 0
end
live = world.find_active_objects(targetid)
return nil if not live
return nil if live.size >= max
o = world.load_object(targetid)
if o
inv.each do |i|
obj = world.load_object(i)
obj.location = o.id
o.add_contents obj.id
end
wear.each do |a|
obj = world.load_object(a)
obj.location = o.id
o.wear obj.id
end
wield.each do |w|
obj = world.load_object(w)
obj.location = o.id
o.wield obj.id
end
else
log.error "Could not spawn object id #{targetid}"
end
o
end
end