#
# file:: cmd_goto.rb
#
# Released under the terms of the TeensyMUD Public License
# See LICENSE file for additional information.
#
module Cmd
bindtextdomain("cmd")
# Priv. command that allows teleporting
# Can teleport to a room number or to a players name
def cmd_goto(args)
case args
when /(\d+)/ # Room number
found = false
r = get_object($1.to_i)
if r
if r.is_a? Room and r.id != location
found = true
get_object(location).say(_("%{name} vanished into a puff of smoke!" % {:name => name}), id)
get_object(location).delete_contents(id)
self.location = r.id
get_object(r.id).add_contents(id)
get_object(location).say(_("%{name} arrives out of thin air!" % {:name => name}), id)
parse(_("look"))
end
end
sendto _("That is not a room id") if not found
when /^mob\s+(.+)/
who = $1
mobs = []
world.find_objects(who).each do |o|
if o.location
mobs << o if o.is_a? Mobile and o.location > 0
end
end
case mobs.size
when 0
sendto _("You are unable to locate an active mobile with that name")
when 1
get_object(location).say(_("%{name} vanished into a puff of smoke!" % {:name => name}), id)
get_object(location).delete_contents(id)
self.location = mobs[0].location
get_object(mobs[0].location).add_contents(id)
get_object(location).say(_("%{name} arrives out of thin air!" % {:name => name}), id)
parse(_("look"))
else
msg = ""
mobs.each do |mob|
mobroom = get_object(mob.location)
msg << " #{mob.name} - #{mobroom.name} (#{mob.location})\n"
end
msg << "Too many to pick from, choose the room number.\n"
sendto(msg)
end
when /(\w+)/ # Players name
targetname = $1
found = false
world.connected_characters.each do |pid|
if get_object(pid).name =~ /#{targetname}/i
found = true
target = get_object(pid)
if target.location == location
sendto _("%{pronoun} is standing right in front of you." % {:pronoun => target.pronoun.ucfirst})
else
get_object(location).say(_("%{name} vanished into a puff of smoke!" % {:name => name}), id)
get_object(location).delete_contents(id)
self.location = target.location
get_object(target.location).add_contents(id)
get_object(location).say(_("%{name} arrives out of thin air!" % {:name => name}), id)
parse(_("look"))
end
end
end
sendto(_("Player %{name} not found" % {:name => targetname})) if not found
else
sendto _("Usage: @goto (room# | playername | mob mobilename)")
end
end
end