/
lib/banish/
lib/d/
lib/doc/
lib/doc/domains/
lib/doc/efun/
lib/doc/examples/
lib/doc/examples/armour/
lib/doc/examples/contain/
lib/doc/examples/food/
lib/doc/examples/magic/
lib/doc/examples/monster/
lib/doc/examples/room/
lib/doc/examples/weapons/
lib/include/
lib/include/fn_specs/
lib/include/skills/
lib/info/
lib/inherit/base/
lib/log/
lib/manuals/312/
lib/news/
lib/obj/party/
lib/objects/components/
lib/open/
lib/open/library/
lib/open/party/
lib/players/
lib/players/zilanthius/
lib/room/
lib/room/city/arena/
lib/room/city/creator/
lib/room/city/garden/monst/
lib/room/city/obj/
lib/room/city/shop/
lib/room/death/
lib/room/registry/
lib/secure/
lib/secure/UDP_CMD_DIR/
lib/skills/
lib/skills/fighter/
lib/skills/thief/
lib/usr/
lib/usr/creators/
lib/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>