// _drop.c
// Mostly the _drop.c from the TMI distribution mudlib
// Originally written by Brian Leet
// Adapted 12.13.91 by Sulam
// Help added by Brian 1.28.92
// Messages improved by Brian 2.5.92
// Money handling added by Descartes of Borg Halloween 1992
#include "move.h"
#include <std.h>
#include <objects.h>
inherit DAEMON;
int help();
int
cmd_drop(string str) {
object ob;
int res, i;
string tmp, type;
int ammount;
if (!str) {
return help();
}
if(sscanf(str, "%d %s %s", ammount, type, tmp) != 3)
if(sscanf(str, "%d %s", ammount, type) != 2) {
if(str == "all"){
object *inv;
inv = all_inventory(this_player());
if (sizeof(inv) == 0) {
write("Nothing to drop!");
return 1;
}
write("You drop your whole inventory on the ground.");
for(i=0;i<sizeof(inv); i++ ){
ob = present(inv[i], this_player());
tmp = (string)ob->query_short();
if(ob->drop()) continue;
res = (int)ob->move(environment(this_player()));
if (res == MOVE_OK) {
say(previous_object()->query_cap_name()+" drops "+tmp+".");
}
}
return 1;
}
ob = present(str, this_player());
if (!ob) {
notify_fail("What " + str + "?\n");
return 0;
}
if(ob->drop()) return 1;
tmp = (string)ob->query_short();
res = (int)ob->move(environment(this_player()));
if (res == MOVE_OK) {
say(this_player()->query_cap_name()+" drops "+tmp+".\n", this_player());
write("You drop "+tmp+".");
return 1;
}
if (res == MOVE_NOT_ALLOWED)
notify_fail("You can't do that.\n");
else if (res == MOVE_NO_ROOM)
notify_fail("Not enough room.\n");
return 0;
}
type = lower_case(type);
if(ammount < 1) {
notify_fail("You can only drop positive ammounts of money.\n");
return 0;
}
if((int)this_player()->query_money(type) < 0) {
notify_fail("That type of currency doesn't exist.\n");
return 0;
}
if(this_player()->query_money(type) < ammount) {
notify_fail("There is not that much "+type+" in your purse.\n");
return 0;
}
if(ammount > 1000)
log_file("money", this_player()->query_name()+" dropped "+ammount+" "+type+" ("+ctime(time())+")\n");
ob = present("pile of coins", environment(this_player()));
if(!ob) {
ob = new(OB_COINS);
}
ob->add_money(type, ammount);
this_player()->add_money(type, -ammount);
write("You drop "+ammount+" "+type+" pieces.");
say(this_player()->query_cap_name()+" drops some "+type+".");
ob->move(environment(this_player()));
return 1;
}
int
help() {
write("Command: drop\nSyntax: drop <item | all>\n"+
"This makes your character try to drop the specified\n"+
"item. If all is used then your character drops all\n"+
"items carried.\n");
return 1;
}
/* EOF */