tmi2_fluffos_v2/
tmi2_fluffos_v2/bin/
tmi2_fluffos_v2/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/ChangeLog.old/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/Win32/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/compat/simuls/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/clone/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/command/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/data/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/etc/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/include/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/inherit/master/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/log/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/compiler/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/efuns/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/single/tests/operators/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/testsuite/u/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/tmp/
tmi2_fluffos_v2/fluffos-2.7-ds2.018/windows/
tmi2_fluffos_v2/lib/
tmi2_fluffos_v2/lib/adm/
tmi2_fluffos_v2/lib/adm/daemons/languages/
tmi2_fluffos_v2/lib/adm/daemons/network/I3/
tmi2_fluffos_v2/lib/adm/daemons/virtual/
tmi2_fluffos_v2/lib/adm/daemons/virtual/template/
tmi2_fluffos_v2/lib/adm/news/
tmi2_fluffos_v2/lib/adm/obj/
tmi2_fluffos_v2/lib/adm/obj/master/
tmi2_fluffos_v2/lib/adm/priv/
tmi2_fluffos_v2/lib/adm/shell/
tmi2_fluffos_v2/lib/adm/tmp/
tmi2_fluffos_v2/lib/cmds/
tmi2_fluffos_v2/lib/d/
tmi2_fluffos_v2/lib/d/Conf/
tmi2_fluffos_v2/lib/d/Conf/adm/
tmi2_fluffos_v2/lib/d/Conf/boards/
tmi2_fluffos_v2/lib/d/Conf/cmds/
tmi2_fluffos_v2/lib/d/Conf/data/
tmi2_fluffos_v2/lib/d/Conf/logs/
tmi2_fluffos_v2/lib/d/Conf/obj/
tmi2_fluffos_v2/lib/d/Conf/text/help/
tmi2_fluffos_v2/lib/d/Fooland/adm/
tmi2_fluffos_v2/lib/d/Fooland/data/
tmi2_fluffos_v2/lib/d/Fooland/data/attic/
tmi2_fluffos_v2/lib/d/Fooland/items/
tmi2_fluffos_v2/lib/d/TMI/
tmi2_fluffos_v2/lib/d/TMI/adm/
tmi2_fluffos_v2/lib/d/TMI/boards/
tmi2_fluffos_v2/lib/d/TMI/data/
tmi2_fluffos_v2/lib/d/TMI/rooms/
tmi2_fluffos_v2/lib/d/grid/
tmi2_fluffos_v2/lib/d/grid/adm/
tmi2_fluffos_v2/lib/d/grid/data/
tmi2_fluffos_v2/lib/d/std/
tmi2_fluffos_v2/lib/d/std/adm/
tmi2_fluffos_v2/lib/data/adm/
tmi2_fluffos_v2/lib/data/adm/daemons/
tmi2_fluffos_v2/lib/data/adm/daemons/doc_d/
tmi2_fluffos_v2/lib/data/adm/daemons/emoted/
tmi2_fluffos_v2/lib/data/adm/daemons/network/http/
tmi2_fluffos_v2/lib/data/adm/daemons/network/services/mail_q/
tmi2_fluffos_v2/lib/data/adm/daemons/network/smtp/
tmi2_fluffos_v2/lib/data/adm/daemons/news/archives/
tmi2_fluffos_v2/lib/data/attic/connection/
tmi2_fluffos_v2/lib/data/attic/user/
tmi2_fluffos_v2/lib/data/std/connection/b/
tmi2_fluffos_v2/lib/data/std/connection/l/
tmi2_fluffos_v2/lib/data/std/user/a/
tmi2_fluffos_v2/lib/data/std/user/b/
tmi2_fluffos_v2/lib/data/std/user/d/
tmi2_fluffos_v2/lib/data/std/user/f/
tmi2_fluffos_v2/lib/data/std/user/l/
tmi2_fluffos_v2/lib/data/std/user/x/
tmi2_fluffos_v2/lib/data/u/d/dm/working/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/doc_d/
tmi2_fluffos_v2/lib/data/u/l/leto/smtp/
tmi2_fluffos_v2/lib/doc/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/
tmi2_fluffos_v2/lib/doc/driverdoc/applies/interactive/
tmi2_fluffos_v2/lib/doc/driverdoc/concepts/
tmi2_fluffos_v2/lib/doc/driverdoc/driver/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/arrays/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/buffers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/compile/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/ed/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/filesystem/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/floats/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/functions/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/general/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/mappings/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/numbers/
tmi2_fluffos_v2/lib/doc/driverdoc/efuns/parsing/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/constructs/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/preprocessor/
tmi2_fluffos_v2/lib/doc/driverdoc/lpc/types/
tmi2_fluffos_v2/lib/doc/driverdoc/platforms/
tmi2_fluffos_v2/lib/doc/mudlib/
tmi2_fluffos_v2/lib/ftp/
tmi2_fluffos_v2/lib/include/driver/
tmi2_fluffos_v2/lib/log/
tmi2_fluffos_v2/lib/log/driver/
tmi2_fluffos_v2/lib/obj/net/
tmi2_fluffos_v2/lib/obj/shells/
tmi2_fluffos_v2/lib/obj/tools/
tmi2_fluffos_v2/lib/std/adt/
tmi2_fluffos_v2/lib/std/board/
tmi2_fluffos_v2/lib/std/body/
tmi2_fluffos_v2/lib/std/fun/
tmi2_fluffos_v2/lib/std/living/
tmi2_fluffos_v2/lib/std/object/
tmi2_fluffos_v2/lib/std/shop/
tmi2_fluffos_v2/lib/std/socket/
tmi2_fluffos_v2/lib/std/user/
tmi2_fluffos_v2/lib/std/virtual/
tmi2_fluffos_v2/lib/student/
tmi2_fluffos_v2/lib/student/kalypso/
tmi2_fluffos_v2/lib/student/kalypso/armor/
tmi2_fluffos_v2/lib/student/kalypso/rooms/
tmi2_fluffos_v2/lib/student/kalypso/weapons/
tmi2_fluffos_v2/lib/u/l/leto/
tmi2_fluffos_v2/lib/u/l/leto/cmds/
tmi2_fluffos_v2/lib/www/errors/
tmi2_fluffos_v2/lib/www/gateways/
tmi2_fluffos_v2/lib/www/images/
tmi2_fluffos_v2/old/
tmi2_fluffos_v2/win32/
// File: /cmds/std/_drop.c
// based on TMI-2 version
// completely rewritten...cleaned up...modified
// by Zeus, 13-03-1993
// Fixed dropping nothing (no objs or no droppable objs)
// Leto 26/5/95

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

#define CAP_NAME this_player()->query("cap_name")

inherit DAEMON;

string help();

int cmd_drop(string str) {
     mapping coins;
     object *inv, ob, env;
     int res, amount, capac, i, money, dropped;
     string short, *types, type, word, tmp;

     if(!str) return write(help());
     if (!(env = environment(this_player()))) {
          notify_fail("You can't drop anything in the void!\n");
          return 0;
     }
     this_player()->block_attack(2);
     if(sscanf(str, "%d %s %s", amount, type, tmp) == 3 ||     
     sscanf(str, "%d %s", amount, type) == 2) {
          money = this_player()->query("wealth/"+type);
	  if (amount<1) {
	    notify_fail ("You can't do that.\n") ;
	    return 0 ;
	  }
          if(money < amount) {
               notify_fail("You don't have that much "+type+".\n");
               return 0;
          }
          this_player()->set("wealth/"+type, money-amount);
          capac = this_player()->query("capacity");
          this_player()->set("capacity", capac+amount);
          ob = clone_object(COINS);
          ob->set_type(type);
          ob->set_number(amount);
          res = ob->move(environment(this_player()));
          if(res != MOVE_OK) {
               this_player()->set("wealth/"+type, money);
               this_player()->set("capacity", capac);
               ob->remove();
               notify_fail("You can't drop that.\n");
               return 0;
          }
          if(amount == 1) word = "coin"; else word = "coins";
          write("You drop "+amount+" "+type+" "+word+".\n");
          say(CAP_NAME+" drops some "+type+" "+word+".\n");
          return 1;
     }
     if(str == "all") {
          inv = all_inventory(this_player());
    //if(!pointerp(inv) && sizeof(inv) < 1) {
         if(sizeof(inv) < 1) {
               notify_fail("You are not carrying anything.\n");
               return 0;
          }
          for(i = 0; i < sizeof(inv); i++) {
		if(!inv[i] || inv[i]->query("prevent_drop"))  continue;
               res = inv[i]->move(environment(this_player()));
               if(res != MOVE_OK) continue;
		if(inv[i])
		short = (string)inv[i]->query("short");
               if(!short) short = "something";
               say(CAP_NAME+" drops "+short+".\n");
               dropped++;
          }
       if(dropped)
      {
          write("You drop your whole inventory on the ground.\n");
        return 1;
       }
          else notify_fail("You are not carrying anything you wish to part with.\n");
        return 0;
     }
     if(str == "all coins") {
          coins = this_player()->query("wealth");
          if(!mapp(coins) || sizeof(coins) == 0) {
               notify_fail("You have no coins in your purse.\n");
               return 0;
          }
          types = keys(coins);
          if(!pointerp(types) || sizeof(types) == 0) {
               notify_fail("You have no coins in your purse.\n");
               return 0;
          }
          for(i = 0; i < sizeof(types); i++) {
               if(coins[types[i]] == 0) continue;
               this_player()->set("wealth/"+types[i], 0);
               capac = this_player()->query("capacity");
               this_player()->set("capacity", capac+coins[types[i]]);
               ob = clone_object(COINS);
               ob->set_type(types[i]);
               ob->set_number(coins[types[i]]);
               res = ob->move(environment(this_player()));
               if(res != MOVE_OK) {
                    this_player()->set("wealth/"+types[i], coins[types[i]]);
                    this_player()->set("capacity", capac);
                    ob->remove();
                    continue;
               }
               if(coins[types[i]] == 1) word = "coin"; else word = "coins";
               write("You drop "+coins[types[i]]+" "+types[i]+" "+word+".\n");
               say(CAP_NAME+" drops some "+types[i]+" "+word+".\n");
          }
          return 1;
     }
     if(sscanf(str, "all %s", type) == 1) {
          money = this_player()->query("wealth/"+type);
          if(!money) {
               notify_fail("You don't have any "+type+".\n");
               return 0;
          }
          this_player()->set("wealth/"+type, 0);
          capac = this_player()->query("capacity");
          this_player()->set("capacity", capac+money);
          ob = clone_object(COINS);
          ob->set_type(type);
          ob->set_number(money);
          res = ob->move(environment(this_player()));
          if(res != MOVE_OK) {
               this_player()->set("wealth/"+type, money);
               this_player()->set("capacity", capac);
               ob->remove();
               notify_fail("You can't drop that.\n");
               return 0;
          }
          write("You drop all your "+type+" coins.\n");
          say(CAP_NAME+" drops some "+type+" coins.\n");
          return 1;
     }
     ob = present(str, this_player());
     if(!ob) {
          notify_fail("You don't have that on you.\n");
          return 0;
     }
 
    if(ob->query("prevent_drop")) {
 	notify_fail("You can't drop that object.\n");
    return 0; }
 
     res = ob->move(environment(this_player()));
     if(res != MOVE_OK) {
          notify_fail("You can't drop that.\n");
          return 0;
     }
      short = (string)ob->query("short") ;
     if(!short) short = "something";
     write("You drop "+short+".\n");
     say(CAP_NAME+" drops "+short+".\n");
     return 1;
}

string help() {
     return("Syntax: drop <item | all>\n\n"+
           "This makes your character try to drop the specified\n"+
           "item.  If all is used then your character drops all\n"+
           "items carried. If you type \"drop all gold\" or other\n"+
           "type, then all of your coins of that type are dropped.\n"+
           "\"Drop all coins\" drops all your money.\n"+
           "\nSee also: get, put\n");
}