#
# file:: cmd_spawn.rb
#
# 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.
#
module Cmd
bindtextdomain("cmd")
# Creates a spawning point
# Syntax:
# spawn #<objectid> max=1
# spawn add #<spawnid> inv=#11 wear=#12 wield=#13 max=3 freq=15
# spawn del #<spawnid>
def cmd_spawn(args)
case args
when /^\s*del\s*#(\d+)\s*(.*)/
loc = get_object(location)
sid = $1.to_i
args = $2
if args.size > 0
inv = []
wear = []
wield = []
inv << $1.to_i if args=~/inv=#*(\d+)/
wear << $1.to_i if args=~/wear=#*(\d+)/
wield << $1.to_i if args=~/wield=#*(\d+)/
if loc.spawns.include? sid
spawn = get_object(sid)
inv.each do |oid|
spawn.inv.delete oid if spawn.inv.include? oid
end
wear.each do |oid|
spawn.wear.delete oid if spawn.wear.include? oid
end
wield.each do |oid|
spawn.wield.delete oid if spawn.wield.include? oid
end
sendto _("Spawn item modified ... probably ;)")
else
sendto _("Could not find spawn with id of %{sid}" % {:sid => sid})
end
else
if loc.spawns.include? sid
loc.spawns.delete sid
sendto _("Removed spawn point")
else
sendto _("Could not find spawn with id of %{sid}" % {:sid => sid})
end
end
when /^\s*#(\d+)\s*(.*)/
loc = get_object(location)
oid = $1.to_i
args = $2
max = 1
freq = nil
max_in_room = nil
inv = []
wear = []
wield = []
# Saftey checks
o = get_object(oid)
if not valid_spawn_oid? oid
sendto _("Not a valid OID.")
return
end
max = $1.to_i if args=~/max=(\d+)/
max_in_room = $1.to_i if args=~/max_in_room=(\d+)/
freq = $1.to_i if args=~/freq=(\d+)/
inv << $1.to_i if args=~/inv=#*(\d+)/
wear << $1.to_i if args=~/wear=#*(\d+)/
wield << $1.to_i if args=~/wield=#*(\d+)/
sp = Spawn.new(oid, id)
sp.max = max
sp.max_in_room = max_in_room if max_in_room
sp.location = location
sp.frequency = freq if freq
inv.each { |i| sp.inv.push i }
wear.each { |w| sp.wear.push w }
wield.each { |w| sp.wield.push w }
put_object(sp)
loc.spawns = [] if not loc.spawns
loc.spawns << sp.id
sendto _("Added new spawn point #%{spid} (%{name})" % {:spid => sp.id, :name => get_object(oid).name})
when /^\s*add\s+#(\d+)\s*(.*)/
sid = $1.to_i
args = $2
inv = []
wear = []
wield = []
max = nil
max_in_room = nil
freq = nil
loc = get_object(location)
if loc.spawns.include? sid
sp = get_object(sid)
max = $1.to_i if args=~/max=(\d+)/
max_in_room = $1.to_i if args=~/max_in_room=(\d+)/
freq = $1.to_i if args=~/freq=(\d+)/
inv << $1.to_i if args=~/inv=#*(\d+)/
wear << $1.to_i if args=~/wear=#*(\d+)/
wield << $1.to_i if args=~/wield=#*(\d+)/
sp.max = max if max
sp.max_in_room = max_in_room if max_in_room
sp.frequency = freq if freq
inv.each { |i| sp.inv.push i }
wear.each { |w| sp.wear.push w }
wield.each { |w| sp.wield.push w }
sendto _("Spawn object adjusted.")
else
sendto _("No spawn object with id of %{sid}" % {:sid => sid})
end
else
loc = get_object(location)
if loc.spawns
if loc.spawns.size > 0
loc.spawns.each do |sid|
add_event(sid,id,:describespawn)
end
else
sendto _("This room has no spawn points")
end
else
sendto _("This room has no spawn points")
end
end
end
def valid_spawn_oid?(oid)
o = get_object(oid)
if o.isclone or o.is_a? Spawn or o.is_a? Account or o.is_a? World or
o.is_a? Room or o.is_a? Body or o.is_a? Exit or o.class.to_s == "Character"
return false
end
true
end
end