LPMUD/
LPMUD/BIN/
LPMUD/DOC/
LPMUD/MUDLIB/
LPMUD/MUDLIB/BANISH/
LPMUD/MUDLIB/D/
LPMUD/MUDLIB/DOC/
LPMUD/MUDLIB/DOC/DOMAINS/
LPMUD/MUDLIB/DOC/EFUN/
LPMUD/MUDLIB/DOC/EXAMPLES/
LPMUD/MUDLIB/DOC/EXAMPLES/ARMOUR/
LPMUD/MUDLIB/DOC/EXAMPLES/CONTAIN/
LPMUD/MUDLIB/DOC/EXAMPLES/FOOD/
LPMUD/MUDLIB/DOC/EXAMPLES/MAGIC/
LPMUD/MUDLIB/DOC/EXAMPLES/MONSTER/
LPMUD/MUDLIB/DOC/EXAMPLES/ROOM/
LPMUD/MUDLIB/DOC/EXAMPLES/WEAPONS/
LPMUD/MUDLIB/FUNCTION/
LPMUD/MUDLIB/INCLUDE/
LPMUD/MUDLIB/INCLUDE/FN_SPECS/
LPMUD/MUDLIB/INCLUDE/SKILLS/
LPMUD/MUDLIB/INFO/
LPMUD/MUDLIB/INHERIT/BASE/
LPMUD/MUDLIB/LOG/
LPMUD/MUDLIB/MANUALS/312/
LPMUD/MUDLIB/NEWS/
LPMUD/MUDLIB/OBJ/PARTY/
LPMUD/MUDLIB/OBJ/SHADOWS/
LPMUD/MUDLIB/OBJECTS/COMPONEN/
LPMUD/MUDLIB/OPEN/
LPMUD/MUDLIB/OPEN/LIBRARY/
LPMUD/MUDLIB/OPEN/PARTY/
LPMUD/MUDLIB/PLAYERS/
LPMUD/MUDLIB/PLAYERS/ZIL/
LPMUD/MUDLIB/ROOM/
LPMUD/MUDLIB/ROOM/CITY/ARENA/
LPMUD/MUDLIB/ROOM/CITY/CREATOR/
LPMUD/MUDLIB/ROOM/CITY/GARDEN/MONST/
LPMUD/MUDLIB/ROOM/CITY/OBJ/
LPMUD/MUDLIB/ROOM/CITY/PUB/
LPMUD/MUDLIB/ROOM/CITY/SHOP/
LPMUD/MUDLIB/ROOM/DEATH/
LPMUD/MUDLIB/ROOM/REGISTRY/
LPMUD/MUDLIB/SECURE/
LPMUD/MUDLIB/SECURE/UDP_CMD_/
LPMUD/MUDLIB/SKILLS/
LPMUD/MUDLIB/SKILLS/FIGHTER/
LPMUD/MUDLIB/SKILLS/THIEF/
LPMUD/MUDLIB/USR/
LPMUD/MUDLIB/USR/CREATORS/
LPMUD/MUDLIB/USR/PLAYERS/
 
#include <mudlib.h>
 
#define NAME        (string)this_player()->query_name()
#define MY_STAT     (int)this_player()->query_steal()
#define CLOSE_ENUF  3
 
string tmp1, tmp2;
object victim, obj, *env;
int mystat, yourstat, i, money;
 
steal(string str) {
  money = 0;
 
  if(!str) {
    write("Steal from who?\n");
    return 1;
  }
  if(this_player()->query_attack()) {
    write("You cannot steal from someone while engaged in combat!\n");
    return 1;
  }
  if((status)environment(this_player())->query_no_fight() == 1){
     write("You cannot steal here.\n");
     return 1;
}
  if(!sscanf(str, "%s from %s", tmp1, tmp2)) {
    write("Steal what from who?\n");
    return 1;
  }
  
  env = all_inventory(environment(this_player()));
  victim = present(lower_case(tmp2), environment(this_player()));
  if(!victim) {
    write("That person is not here.\n");
    return 1;
  }
 
  if(sscanf(tmp1, "%d coins", money) || sscanf(tmp1, "%d coin", money)) {
    if(money > 50) money = 50;
    if(victim -> query_money() < money) {
      write("You don't think "+ victim -> query_name() +" has that "+
      "many coins.\n");
      money = 0;
      return 1;
     }
   }
 
  if(!money) { 
    obj = present(lower_case(tmp1), victim);
    if(!obj) {
      write(victim -> query_name() +" has no "+ tmp1 +" on "+ 
      victim -> query_pronoun() +"\n");
      return 1;
    }
    if(!obj -> get() || obj -> query_auto_load()) {
      write("You cannot steal "+ obj->query_name() +" from "+
      victim -> query_name() +"!\n");
      return 1;
    }
  }
  if(money) {
    obj = clone_object("obj/money");
    obj -> set_money(money);
  }
 
  mystat = random(MY_STAT);
  yourstat = random((int)victim->query_intelligence());
 
  /* IF I WIN !! */
  if(mystat > yourstat) {   
    if(this_player()->query_attack() == 1){
       write("You cannot steal while engaged in combat!\n");
    }
    if(!this_player()->add_weight(obj->query_weight())) {
      write(obj -> query_name() +" is too heavy for you to carry!\n");
 
      return 1;
    }
 
    if(obj -> query_worn()) {
      write("You manage to remove the "+ obj -> query_name() +" that "+
      victim -> query_name() +" is wearing, without "+victim -> query_pronoun()
      +" noticing.\n");
      obj -> drop(1);  /* silently */
      return 1;
    }
 
    if(obj -> query_wielded()) {
      write("You manage to remove the "+ obj -> query_name() +" that "+
      victim -> query_name() +" is wielding without "+victim -> query_pronoun()
      +" noticing.\n");
      obj -> drop(1);  /* silently */
      return 1;
    }
 
    check_env(this_player());
    write("You steal "+ obj -> short() +" from "+ 
    victim -> query_name() +"'s pockets.\n");
    if(money) {
      this_player()->add_money(money);
      victim -> add_money(-money);
      money = 0;
      destruct(obj);
    }
    else {
      move_object(obj, this_player());    
      victim -> steal();
    }
    return 1;
  }
 
 
  /* a close attempt, but not quite */
  if(MY_STAT > 19 && ((yourstat - mystat) < CLOSE_ENUF)) {  
    if(!this_player()->add_weight(obj->query_weight())) {
      write(obj -> query_name() +" is too heavy. You cannot carry any more!\n");
 
    }
    if(obj -> query_worn()) {
      write("You manage to remove the "+ obj -> query_name() +" that "+
      victim -> query_name() +" is wearing.\n");
      obj -> drop(1);  /* silently */
    }
    if(obj -> query_wielded()) {
      write("You manage to remove the "+ obj -> query_name() +" that "+
      victim -> query_name() +" is wielding.\n");
      obj -> drop(1);  /* silently */
    }
    else {
      write("You manage to steal "+ obj -> short() +" from "+
      victim -> query_name() +"!!\n");
    }
    if(money) {
      this_player()->add_money(money);
      destruct(obj);
    }
    else {
      move_object(obj, this_player());
      victim -> steal();
      write("However, "+ victim -> query_name() +" catches you in the act!\n");
    }
  }
 
 
  /* here's where we fail totally !!! */
  else {
    write("You fail to steal "+ obj -> short() +" from "+ 
         victim -> query_name() +"\n");
  }
  check_env(this_player());
  if(money) destruct(obj);  /* gets rid of tmp money object cloned */
  if(victim -> query_npc()) {
    write(victim -> query_name() +" becomes enraged and begins to attack!\n");
    victim -> hit_player(0);
  }
  else {
    write(victim -> query_name() +" gets angry with you!\n");
    tell_object(victim, this_player()->query_name()+" attempted to steal "+
      " from you!\n");
  }
  return 1;
}
 
 
/* To see if anyone else notices this dastardly feat! */
check_env(object player) {
  for(i=0; i<sizeof(env); i++) {
    if((env[i] != victim) && (env[i] != player)) {
      if(mystat < (env[i]->query_intelligence())) {
        tell_object(env[i], "You notice "+player -> query_name()+" stealing "+
        obj -> short() +" from "+ victim -> query_name() +"!!\n");
      }
    }
  }
}

/* Native Mode Move */

#include <move.h>