lima-1.0b5/
lima-1.0b5/driver/
lima-1.0b5/driver/ChangeLog.old/
lima-1.0b5/driver/Win32/
lima-1.0b5/driver/compat/
lima-1.0b5/driver/include/
lima-1.0b5/driver/testsuite/
lima-1.0b5/driver/testsuite/clone/
lima-1.0b5/driver/testsuite/command/
lima-1.0b5/driver/testsuite/data/
lima-1.0b5/driver/testsuite/etc/
lima-1.0b5/driver/testsuite/include/
lima-1.0b5/driver/testsuite/inherit/
lima-1.0b5/driver/testsuite/inherit/master/
lima-1.0b5/driver/testsuite/log/
lima-1.0b5/driver/testsuite/single/
lima-1.0b5/driver/testsuite/single/tests/compiler/
lima-1.0b5/driver/testsuite/single/tests/efuns/
lima-1.0b5/driver/testsuite/single/tests/operators/
lima-1.0b5/driver/testsuite/u/
lima-1.0b5/driver/tmp/
lima-1.0b5/etc/
lima-1.0b5/lib/WWW/help/
lima-1.0b5/lib/cmds/
lima-1.0b5/lib/cmds/create/
lima-1.0b5/lib/cmds/player/attic/
lima-1.0b5/lib/contrib/bboard/
lima-1.0b5/lib/contrib/boards/
lima-1.0b5/lib/contrib/marriage/
lima-1.0b5/lib/contrib/roommaker/
lima-1.0b5/lib/contrib/transient_effect/
lima-1.0b5/lib/daemons/channel/
lima-1.0b5/lib/daemons/imud/
lima-1.0b5/lib/data/
lima-1.0b5/lib/data/config/
lima-1.0b5/lib/data/links/
lima-1.0b5/lib/data/news/
lima-1.0b5/lib/data/players/
lima-1.0b5/lib/data/secure/
lima-1.0b5/lib/domains/
lima-1.0b5/lib/domains/std/2.4.5/maze1/
lima-1.0b5/lib/domains/std/2.4.5/npc/
lima-1.0b5/lib/domains/std/2.4.5/post_dir/
lima-1.0b5/lib/domains/std/2.4.5/sub/
lima-1.0b5/lib/domains/std/camera/
lima-1.0b5/lib/domains/std/config/
lima-1.0b5/lib/domains/std/cult/
lima-1.0b5/lib/domains/std/effects/
lima-1.0b5/lib/domains/std/misc/
lima-1.0b5/lib/domains/std/monsters/
lima-1.0b5/lib/domains/std/recorder/
lima-1.0b5/lib/domains/std/rooms/
lima-1.0b5/lib/domains/std/rooms/beach/
lima-1.0b5/lib/domains/std/rooms/labyrinth/
lima-1.0b5/lib/domains/std/school/
lima-1.0b5/lib/domains/std/school/O/
lima-1.0b5/lib/domains/std/spells/
lima-1.0b5/lib/domains/std/spells/stock-mage/
lima-1.0b5/lib/domains/std/spells/stock-priest/
lima-1.0b5/lib/help/
lima-1.0b5/lib/help/admin/
lima-1.0b5/lib/help/hints/General_Questions/
lima-1.0b5/lib/help/hints/Pirate_Quest/
lima-1.0b5/lib/help/player/
lima-1.0b5/lib/help/player/bin/
lima-1.0b5/lib/help/player/quests/
lima-1.0b5/lib/help/wizard/
lima-1.0b5/lib/help/wizard/coding/guilds/
lima-1.0b5/lib/help/wizard/coding/rooms/
lima-1.0b5/lib/help/wizard/lib/daemons/
lima-1.0b5/lib/help/wizard/lib/lfun/
lima-1.0b5/lib/help/wizard/lib/std/
lima-1.0b5/lib/help/wizard/mudos_doc/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/interactive/
lima-1.0b5/lib/help/wizard/mudos_doc/applies/parsing/
lima-1.0b5/lib/help/wizard/mudos_doc/concepts/
lima-1.0b5/lib/help/wizard/mudos_doc/driver/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/arrays/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/buffers/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/compile/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/filesystem/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/floats/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/functions/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/general/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/mappings/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/mixed/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/numbers/
lima-1.0b5/lib/help/wizard/mudos_doc/efuns/parsing/
lima-1.0b5/lib/help/wizard/mudos_doc/lpc/constructs/
lima-1.0b5/lib/help/wizard/mudos_doc/lpc/types/
lima-1.0b5/lib/include/driver/
lima-1.0b5/lib/log/
lima-1.0b5/lib/obj/admtool/
lima-1.0b5/lib/obj/admtool/internal/
lima-1.0b5/lib/obj/admtool/mudinfo/
lima-1.0b5/lib/obj/admtool/secure/
lima-1.0b5/lib/obj/secure/
lima-1.0b5/lib/obj/secure/cmd/
lima-1.0b5/lib/obj/secure/mailers/
lima-1.0b5/lib/obj/secure/shell/
lima-1.0b5/lib/obj/secure/shell/classes/
lima-1.0b5/lib/obj/tasktool/
lima-1.0b5/lib/obj/tasktool/internal/
lima-1.0b5/lib/open/
lima-1.0b5/lib/secure/
lima-1.0b5/lib/secure/cgi/
lima-1.0b5/lib/secure/modules/
lima-1.0b5/lib/secure/simul_efun/
lima-1.0b5/lib/std/adversary/
lima-1.0b5/lib/std/adversary/advancement/
lima-1.0b5/lib/std/adversary/armor/
lima-1.0b5/lib/std/adversary/blows/
lima-1.0b5/lib/std/adversary/death/
lima-1.0b5/lib/std/adversary/formula/
lima-1.0b5/lib/std/adversary/health/
lima-1.0b5/lib/std/adversary/pulse/
lima-1.0b5/lib/std/adversary/wield/
lima-1.0b5/lib/std/classes/event_info/
lima-1.0b5/lib/std/container/
lima-1.0b5/lib/std/living/
lima-1.0b5/lib/std/modules/contrib/
lima-1.0b5/lib/std/patterns/
lima-1.0b5/lib/std/race/
lima-1.0b5/lib/std/race/restricted/
lima-1.0b5/lib/std/room/
lima-1.0b5/lib/tmp/
lima-1.0b5/lib/trans/
lima-1.0b5/lib/trans/admincmds/
lima-1.0b5/lib/trans/obj/
lima-1.0b5/lib/wiz/
/* Do not remove the headers from this file! see /USAGE for more info. */

// m_lightable - Handles verb interaction for lightable objects.
// 26 June, 1998: Iizuka seperated into m_lightable and m_light_source.

#include <flags.h>
#include <hooks.h>

string lighting_extra_short();
void set_light(int);
mixed call_hooks(string, int);
void hook_state(string, mixed, int);
string the_short();
int test_flag(int);
void clear_flag(int);
void assign_flag(int, int);

varargs mixed light(object);   // From m_light_source.c
mixed extinguish();

private string		light_msg = "$N $vlight a $o.";
private string		light_with_msg = "$N $vlight a $o with a $o1.";
private string		extinguish_msg = "$N $vextinguish a $o.";
private nosave function light_hook = (: lighting_extra_short :);
private mixed           source_filter;

int query_is_lit()
{
   return test_flag(F_LIGHTED);
}

void set_extinguish_msg(string x)
{
   extinguish_msg = x;
}

void set_light_msgs(string x, string y)
{
   light_msg = x;
   light_with_msg = y;
}

//:FUNCTION set_source
//set_source(function f) makes it so that the object can only be lit by
//objects for which evaluate(f, ob) returns 1.  f may return a string
//error message on failure.  If f is a string, any object with that string
//as an id is a valid source.  set_source(0) makes any object a valid source.
void set_source(mixed f)
{
   source_filter = f;
}

mixed query_source()
{
   return source_filter;
}

string lighted_attributes()
{
   return "(providing adequate light)";
}

protected void set_lit(int x)
{
   assign_flag(F_LIGHTED, x);
   hook_state("extra_short", light_hook, x);
}

void do_extinguish()
{
   mixed tmp = extinguish();
   if(!tmp)
      tmp = "That doesn't seem possible.\n";
   if(stringp(tmp))
   {
      write(tmp);
      return;
   }
   clear_flag(F_LIGHTED);
   this_body()->simple_action(extinguish_msg, this_object());
}

varargs void do_light(object with)
{
   mixed tmp = light(with);
   if(!tmp) tmp = "That doesn't seem possible.\n";
   if(stringp(tmp))
   {
      write(tmp);
      return;
   }
   if(with)
      this_body()->simple_action(light_with_msg, this_object(), with);
   else
      this_body()->simple_action(light_msg, this_object());
}

mixed direct_light_obj()
{
   if(query_is_lit())
      return "It is already lit.\n";
   if(source_filter)
      return "You need to light it with something.\n";
   return 1;
}

mixed direct_extinguish_obj()
{
   if(!query_is_lit())
      return "It isn't lit.\n";
   return 1;
}

mixed direct_light_obj_with_obj(object ob, object with) {
   if(query_is_lit())
      return "It is already lit.\n";
   if(!source_filter)
      return 1;
   if(!with)
      return 1;
   if(stringp(source_filter))
      return with->id(source_filter);
   return evaluate(source_filter, with);
}

mixed indirect_light_obj_with_obj(object ob, object with) {
   mixed sf;
   if(ob)
      sf = ob->query_source();
   if(with->query_is_lit())
   {
      if(!sf)
         return 1;
      if(stringp(sf))
         return with->id(sf);
      return evaluate(sf, with);
   }
   return capitalize(with->the_short()) + " isn't lit.\n";
}

int need_to_see()
{
   return 0;
}

mapping lpscript_attributes()
{
   return ([
      "light_msgs" : ({ LPSCRIPT_SPECIAL, (: ({ "special", "set_light_msgs(\"" + $1[0] + "\", \"" + (sizeof($1) > 1 ? $1[1] : $1[0]) + "\")" }) :) }),
      "fuel" : ({ LPSCRIPT_INT, "setup", "set_fuel" }),
   ]);
}