// _give.c
// Mostly the _give.c from the TMI distribution mudlib.
// Written by Sulam 12.12.91
// Help added 1.28.92 by Brian
// Fixed for the Nightmare monetary system by Descartes of Borg
// 31 October 1992
// Light checking added by Hanse 4/11/92 :P
#include "move.h"
#include <std.h>
inherit DAEMON;
int
help();
cmd_give(string str) {
object ob, to;
string what, who, type;
int i, amount;
int dummy;
object *inv;
if (!stringp(str)) return help();
dummy = total_light(this_player());
if(dummy < -1) {
write("It is too dark.\n");
return 1;
}
if (sscanf(str,"%s to %s", what, who) != 2) {
return help();
}
to = present(who, environment(this_player()));
if (!to) {
notify_fail("Give "+what+" to who?\n");
return 0;
}
ob = present(what, this_player());
if (!ob) {
ob = parse_objects(this_player(), what);
if(!ob) {
if(sscanf(what, "%d %s coins", amount, type) !=2) {
notify_fail("You must have an object to give it away!\n");
return 0;
}
if (amount<0) {
notify_fail("Yeah, right.\n");
return 0;
}
if(amount > (int)this_player()->query_money(type)) {
notify_fail("You don't have that much!\n");
return 0;
}
this_player()->add_money(type, -amount);
to->add_money(type, amount);
write("You give " + amount + " " + type + " coins to " +
to->query_cap_name() + ".");
tell_room(environment(this_player()), this_player()->query_cap_name()
+ " gives some money to " + to->query_cap_name() + ".", ({ this_player(), to }) );
tell_object(to, this_player()->query_cap_name() +
" gives you " + amount + " " + type + " coins.");
return 1;
}
}
if (!living(to)) {
notify_fail("Only living objects can accept items.\n");
return 0;
}
if(to->query_ghost()) {
notify_fail(to->query_cap_name()+" is unable to hold anything in that state!\n");
return 0;
}
if(!ob->get()) {
notify_fail("You cannot give that away!\n");
return 0;
}
i = (int) ob->move(to);
switch(i) {
case MOVE_OK: {
write("You give " + ob->query_short() + " to " +
to->query_cap_name() + ".");
say(this_player()->query_cap_name()+" gives "+ob->query_short()+
" to " + to->query_cap_name() + ".", to);
tell_object(to,this_player()->query_cap_name()+" gives you "+
ob->query_short() + ".");
return 1;
}
case MOVE_NO_ROOM: {
notify_fail(to->query_short()+" can't carry any more.\n");
return 0;
}
default: {
notify_fail("Oops, can't do that.\n");
return 0;
}
}
}
int
help() {
message("help","Syntax: give <item> to <player>\n\n"
"This command will make you give an item in your inventory "
"to the player specified. You must be in the same room for "
"this to occur.",this_player());
return 1;
}