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. */

/*
** get.c
*/

#include <mudlib.h>
#include <move.h>
#include <setbit.h>

inherit VERB_OB;

private nomask void get_one(object ob, object with_ob, string rel)
{
  mixed msg = ( with_ob ? ob->get_with(with_ob) : ob->get() );
  mixed tmp;
  string where;
  string * aliases;

  if(rel)
  {
    tmp = environment(ob);
// ADD ERROR CHECK FOR NO ENV ?
    where = tmp->query_relation(ob);
// ADD ERROR CHECK FOR NO RELATION
    if(where!=rel)
    {
      aliases=tmp->query_relation_aliases(rel);
      if(!sizeof(aliases) || (member_array(where, aliases) <0))
      {
        write("It's not " + rel + " there.\n");
        return;
      }
    }
  }
  if (!msg)
    msg = "You aren't able to take it.\n";
  if (stringp(msg))
  {
    write(msg);
    return;
  }

  if(msg == MOVE_NO_ERROR)
    return;

  tmp = ob->move(this_body());
  if (tmp == MOVE_OK)
  {
    write("Taken.\n");
    ob->set_flag(TOUCHED);
    this_body()->other_action("$N $vtake a $o.", ob);
    return;
  }
  if (tmp == MOVE_NO_ERROR)
    return;

  if (tmp == MOVE_NO_ROOM)
    tmp = "Your load is too heavy.\n";
  if (!tmp)
    tmp = "That doesn't seem possible.\n";
  write(tmp);
}

void do_get_obj(object ob){ get_one(ob, 0, 0); }

void do_get_obs(object array info)
{
  handle_obs(info, (: get_one :));
}

void do_get_obj_from_obj(object ob1, object ob2)
{
  get_one(ob1, 0, 0);
}

void do_get_obs_from_obj(array info, object ob2)
{
  handle_obs(info, (: get_one :));
}

void do_get_obj_from_wrd_obj(object ob1, string rel, object ob2)
{
  get_one(ob1, 0, rel);
}

void do_get_obs_from_wrd_obj(array info, string rel, object ob2)
{
  handle_obs(info, (: get_one :), rel);
}

void do_get_obj_out_of_obj(object ob1, object ob2)
{
  get_one(ob1, 0, 0);
}

void do_get_obs_out_of_obj(array info, object ob2)
{
  handle_obs(info, (: get_one :));
}

void do_get_obj_with_obj(object ob1, object ob2)
{
  get_one(ob1, ob2, 0);
}

void do_get_wrd_obj(string prep,object ob)
{
  ob->do_verb_rule("get", "WRD OBJ",prep,ob);
}

mixed can_get_wrd_str(string amount, string str)
{
  int z;
  string s1, s2;

  sscanf(amount, "%d%s", z, s1);
  if (s1 != "" && amount != "all")
    return 0;

  sscanf(str, "%s %s", s1, s2);
  if (s2)
  {
    if (s2 != "coin" && s2 != "coins")
      return 0;
    return MONEY_D->is_denomination(s1);
  }
  return str == "coin" || str == "coins" || MONEY_D->is_denomination(str);
}

mixed can_get_wrd_str_from_obj(string amount, string str, object obj)
{
  return can_get_wrd_str(amount, str);
}        

void do_get_wrd_str_from_obj(string amount, string str, object obj)
{
  string s;
// If there are two words, we want the first
  sscanf(str, "%s %s", str, s); 
// direct_get_wrd_str_from_obj() or do_get_wrd_str() tested if
// there is money there already
  present("money", obj)->get(amount, str); 
}

void do_get_wrd_str(string amount, string str)
{
  object obj;

  if (obj = present("money", environment(this_body())))
    do_get_wrd_str_from_obj(amount, str, environment(this_body()));
  else
    write("There are no coins here.\n");
}

mixed can_get_wrd(string prep)
{
  if(!prep)
    return 0;
  if(!environment(this_body()))
    return 0;
  if(environment(this_body())->has_method(sprintf("get %s", prep)))
    return 1;
  return 0;
}

void do_get_wrd(string prep)
{
  environment(this_body())->do_verb_rule("get","WRD",prep);
}

void create()
{
  add_rules( ({ "OBS", "WRD STR", "OBS from OBJ", "OBS out of OBJ",
      "OBJ with OBJ", "WRD STR from OBJ", "WRD OBJ", "OBS from WRD OBJ" }),
      ({ "take", "carry", "pick up" }) );
  add_rules( ({ "WRD" }) );
}