#
# file:: cmd_look.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")
# Look command displays the contents of a room
def cmd_look(args)
if @position == :sleeping
sendto _("All you see is dreams...")
return
end
look_inside = false
in_keyword = _("in")
place = get_object(location)
if args=~/#{in_keyword}\s+(.*)/i
look_inside = true
args= $1
end
case args
when nil, ""
add_event(id,location,:describe)
if cansee? :dark
place.objects.each do |x|
add_event(id,x.id,:describe)
end
place.people(id).each do |x|
if x.has_attribute? :invisible
add_event(id,x.id,:describe) if cansee? :invisible
else
add_event(id,x.id,:describe)
end
end
add_event(id,location,:describe_exits)
else
add_event(id,id,:show, _("Something is moving around here.")) if place.people(id).size > 0
end
else
if cansee? :dark
# First look for object by that name
objs = place.find_objects(args)
case objs.size
when 0
# No objects found, look for ppl
ppl = peopleinroom(args)
case ppl.size
when 0
# Check inventory
objs = find_inv(args)
case objs.size
when 0
sendto("You do not see that here.")
when 1
o = objs[0]
if look_inside
if o.has_val? :fountain
sendto _("It is filled with %{liquid}." % {:liquid => get_object(o.has_val?(:fountain)).name})
elsif o.kind_of? Container
add_event(id,o.id,:describe_contents)
else
sendto _("You can not look inside that.")
end
return
end
if o.desc.size > 0
add_event(o.id,id,:show,"#{o.desc}")
elsif o.is_a? BodyPart
has_something = false
if o.worn.size > 0
has_something = true
o.worn.each do |loc, w|
wobj = get_object(w)
sendto _("%{obj} on its %{part}." % {:obj => wobj.shortname, :part => loc})
end
end
if o.wield
has_something = true
wobj = get_object(o.wield)
sendto _("It is still weilding %{obj}." % {:obj => wobj.shortname})
end
if get_object(o.owner)
sendto _("It is the %{part} of %{owner}." % {:part => o.name, :owner => get_object(o.owner).shortname }) if not has_something
else
sendto _("It's a severed %{part}." % {:part => o.name})
end
else
sendto _("You see nothing special.")
end
else
sendto _("Which one?")
end
when 1
player = ppl[0]
if player.has_attribute? :invisible
if not cansee? :invisible
sendto _("You do not see that here.")
return
end
end
msg = String.new
msg << "#{player.desc}\n" if player.desc.size > 0
# If admin (or perhaps a thief) can see inventory
if world.is_admin? id and player.contents.size > 0
msg << _("Carrying...\n")
player.contents.each do |oid|
msg << get_object(oid).shortname << "\n"
end
end
# Describe body clothes and condition
if player.body
if player.body.wearing.size > 0
player.body.wearing.each do |oid|
o = get_object(oid)
msg << _("Wearing %{what} on %{where}\n" % {:what => o.shortname, :where => o.val["worn"]})
end
else
msg << _("You see nothing special.\n")
end
weapons = player.body.wielding?
if weapons.size > 0
weapon = get_object(weapons[0])
wmsg = _("%{pronoun} is wielding %{weapon}" % {:pronoun => player.pronoun.ucfirst, :weapon => weapon.shortname})
if weapons.size == 2
weapon = get_object(weapons[1])
wmsg << _(" and %{weapon}" % {:weapon => weapon.shortname})
end
msg << wmsg << "\n"
end
if player.body.severed
player.body.severed.each do |bid|
part = get_object(bid)
msg << _("%{pronoun} has a severed %{part}.\n" % {:pronoun => pronoun.ucfirst, :part => part.name})
end
end
end # EndIf palyer.body
if world.is_admin? id
msg << _("Health: %{hp}/%{maxhp}\n" % {:hp => player.health, :maxhp => player.stats[:maxhp]})
msg << _("Infected.\n") if player.has_attribute? :infected
msg << _("Infection percent: %{per}\%\n" % {:per => player.stats[:infection]}) if player.stats[:infection] > 0
else
msg << player.describe_health(true) << "\n"
end
msg << _("%{pronoun} is glowing with a brilliant aura!" % {:pronoun => pronoun.ucfirst}) if world.can_build? player.id
sendto(msg)
else
sendto _("Which one?")
end
when 1 # Only one object matched...good
o = objs[0]
if look_inside
if o.has_val? :fountain
sendto _("It is filled with %{liquid}." % {:liquid => get_object(o.has_val?(:fountain)).name})
elsif o.kind_of? Container
add_event(id,o.id,:describe_contents)
else
sendto _("You can not look inside that.")
end
return
end
if o.desc.size > 0
add_event(o.id,id,:show,"#{o.desc}")
else
sendto _("You see nothing special.")
end
else
sendto _("You need to be more specific on which object you want to examine")
end
else
sendto _("You don't see that.")
end
end
end
end