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/_give.c
// based on TMI-2 version
// completely rewritten...cleaned up...modified
// added give all to <player>
// added give all <gold | coins> to <player>
// by Zeus, 13/03/1993

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

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

inherit DAEMON;

string help();

int cmd_give(string str) {
     object *inv, ob, target;
     int res, amount, i, money, capac;
     string short, who, item, word, *types, type;
     mapping coins;

     if(!str) return write(help());
     if(!this_player()->query_vision()) {
          notify_fail("It is dark and you can't see anything.\n");
          return 0;
     }
     this_player()->block_attack(2);
     if(sscanf(str, "%d %s to %s", amount, type, who) == 3) {
	if (amount<1) {
	    notify_fail ("You can't do that.\n") ;
	    return 0 ;
	}
          money = this_player()->query("wealth/"+type);
          if(money < amount) {
               notify_fail("You don't have that much "+type+".\n");
               return 0;
          }
          target = present(who, environment(this_player()));
          if(!target || !living(target)) {
               notify_fail("There's no one here by that name.\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(target);
          if(res != MOVE_OK) {
               this_player()->set("wealth/"+type, money);
               this_player()->set("capacity", capac);
               notify_fail(target->query("cap_name")+" can't carry that.\n");
               return 0;
          }
          if(amount == 1) word = "coin"; else word = "coins";
          write("You give "+target->query("cap_name")+" "+amount+" "+type+
               " "+word+".\n");
          say(CAP_NAME+" gives "+target->query("cap_name")+" some "+type+
               " "+word+".\n", target);
          tell_object(target, CAP_NAME+" gives you "+amount+" "+type+
               " "+word+".\n");
          return 1;
     }
     if(sscanf(str, "all %s to %s", type, who) == 2) {
          target = present(who, environment(this_player()));
          if(!target || !living(target)) {
               notify_fail("There's no one here by that name.\n");
               return 0;
          }
          if(type == "coins" || type == "coin") {
               coins = this_player()->query("wealth");
               if(!mapp(coins) || sizeof(coins) == 0) {
                    notify_fail("You have no coins.\n");
                    return 0;
               }
               types = keys(coins);
               if(!pointerp(types) || sizeof(types) == 0) {
                    notify_fail("You have no coins.\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(target);
                    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";
                    tell_object(target, CAP_NAME+" gives you "+coins[types[i]]+" "+
                         types[i]+" "+word+".\n");
                    say(CAP_NAME+" gives "+target->query("cap_name")+" some "+
                         types[i]+" "+word+".\n", target);
               }
               write("You give all your coins to "+target->query("cap_name")+
                    ".\n");
               return 1;
          }
          money = this_player()->query("wealth/"+type);
          if(money < 1) {
               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(target);
          if(res != MOVE_OK) {
               this_player()->set("wealth/"+type, money);
               this_player()->set("capacity", capac);
               ob->remove();
               notify_fail(target->query("cap_name")+" can't carry any more "+
                    type+".\n");
               return 0;
          }
          if(money == 1) word = "coin"; else word = "coins";
          write("You give "+target->query("cap_name")+" all your "+type+
               " coins.\n");
          tell_object(target, CAP_NAME+" gives you "+money+" "+type+" "+word+".\n");
          say(CAP_NAME+" gives "+target->query("cap_name")+" some "+type+
               " "+word+".\n", target);
          return 1;
     }
     if(sscanf(str, "all to %s", who) == 1) {
          target = present(who, environment(this_player()));
          if(!target || !living(target)) {
               notify_fail("There's no one here by that name.\n");
               return 0;
          }
          inv = all_inventory(this_player());
          for(i = 0; i < sizeof(inv); i++) {
		if(!inv[i] || inv[i]->query("prevent_drop"))  continue;
               res = inv[i]->move(target);
               if(res == MOVE_OK) {
		    short = (string)inv[i]->query("short") ;
                    if(!short) short = "something";
                    write("You give "+target->query("cap_name")+" "+short+".\n");
                    say(CAP_NAME+" gives "+target->query("cap_name")+" "+
                         short+".\n", target);
                    tell_object(target, CAP_NAME+" gives you "+short+".\n");
               } else write(target->query("cap_name")+" can't carry that.\n");
          }
          return 1;
     }
     if(sscanf(str, "%s to %s", item, who) == 2) {
          ob = present(item, this_player());
          if(!ob) {
               notify_fail("I don't see that here.\n");
               return 0;
          }
	 
	if(ob->query("prevent_drop")) {
		notify_fail("You can't give that object away.\n");
	return 0; }

          target = present(who, environment(this_player()));
          if(!target || !living(target)) {
               notify_fail("There's no one here by that name.\n");
               return 0;
          }
          res = ob->move(target);
          if(res == MOVE_OK) {
	       short = (string)ob->query("short") ;
               if(!short) short = "something";
               write("You give "+target->query("cap_name")+" "+short+".\n");
               say(CAP_NAME+" gives "+target->query("cap_name")+" "+
                    short+".\n", target);
               tell_object(target, CAP_NAME+" gives you "+short+".\n");
               return 1;
          }
          notify_fail(target->query("cap_name")+" can't carry that.\n");
          return 0;
     }
     return write(help());
}

string help() {
     return("Syntax: give <item | all> to <player>\n\n"+
           "This command will make you give an item in your inventory\n"+
           "to the player specified.  You must be in the same room for\n"+
           "this to occur.\n"+
           "\nSee also: drop\n");
}