/* Do not remove the headers from this file! see /USAGE for more info. */

#include <move.h>

inherit VERB_OB;

mixed can_drop_obj() {
    // give a better message for this case, since all the errors generated
    // will be nonsense.
    if (!first_inventory(this_body()))
	return "You don't have anything.\n";
    return default_checks();
}

private nomask void drop_one(object ob)
{
    mixed tmp = ob->drop();

    if (!tmp) tmp = "You aren't able to drop it.\n";
    if (stringp(tmp)) {
	write(tmp);
	return tmp;
    }

    tmp = ob->move(environment(this_body()),environment(this_body())->query_relation(this_body()));
    if (tmp == MOVE_OK) {
	write("Done.\n");
        if(ob)
  	this_body()->other_action("$N $vdrop a $o.", ob);
    } else
	write(tmp);
}

void do_drop_obj(object ob)
{
    drop_one(ob);
}

void do_drop_obs(array info)
{
    foreach (mixed item in info)
    {
	if (stringp(item))
	    write(item);
	else
	{
	    write(item->short() + ": ");
	    drop_one(item);
	}
    }
}

mixed can_drop_wrd_str(string amount, string str) {
    int z;
    string s1, s2;
    
    sscanf(amount, "%d%s", z, s1);
    if (s1 != "" && amount != "all") 
        return 0;
    sscanf(str, "%s %s", s1, s2);
    if (s2) {
	if (s2 != "coin" && s2 != "coins")
	    return 0;
	return MONEY_D->is_denomination(s1);
    }
    return MONEY_D->is_denomination(str);
}

void do_drop_wrd_str(string amount_str, string type)
{
    string s;
    object ob;
    int amount;

    sscanf(type, "%s %s", type, s);
    type = MONEY_D->singular_name(type);
    if (amount_str == "all")
        amount = this_body()->query_amt_money(type);
    else
        amount = to_int(amount_str);
    if (amount < 0) {
	write("Nice try.\n");
	return;
    }
    if(this_body()->query_amt_money(type) < amount) {
	write("You don't have "
	      +MONEY_D->denomination_to_string(amount, type)+".\n");
	return;
    } else {
	this_body()->subtract_money(type, amount);
	if(ob = present("money", environment(this_body())))
#ifdef USE_MONEY
	    ob->merge_money(amount, type);
	else
	    new(MONEY, amount, type)->move(environment(this_body()));
#else
	    ob->merge_coins(amount, type);
	else
	    new(COINS, amount, type)->move(environment(this_body()));
#endif
	this_body()->simple_action("$N $vdrop "
		       +MONEY_D->denomination_to_string(amount, type)+".");
    }
}

void create()
{
    add_rules( ({ "OBS", "WRD STR" }), ({ "put down" }) );
}
