//  /domains/Praxis/obj/misc/stone.c
//  Stone for throwing at criminals and stuff.
//  For the Nightmare mortal law system
//  Created by Manny@Nightmare 940901

#include <lib.h>

inherit LIB_ITEM;

object target;
void set_target(object who);

create() {
    ::create();
    SetKeyName("stone");
    SetId( ({ "stone", "throwing stone" }) );
    SetShort("a throwing stone");
    SetLong( (: "long_func" :) );
    SetMass(2);
    SetValue(0);
}

void long_func() {
    if(target) {
	message("say", "A throwing stone just waiting to be thrown at "+
	  target->query_cap_name()+"'s forehead.", this_player());
    } else {
	message("say", "A throwing stone whithout direction.", 
	  this_player());
    }
}

void init() {
    ::init();
    add_action("throw_stone", "throw");
}

int throw_stone(string str) {
    string what, who;
    string limb;

    if(!str) {
	notify_fail("Throw what?\n");
	return 0;
    }
    if(!sscanf(str, "%s at %s", what, who) == 2) {
	notify_fail("Throw what at whom?\n");
	return 0;
    }
    if(!id(what)) {
	notify_fail("Throw what?\n");
	return 0;
    }
    if(who != (string)target->query_name()) {
	message("say", "The stone misses completely.", this_player());
	message("say", this_player()->query_cap_name()+" throws a "
	  "stone in some random direction.", environment(this_player()),
	  this_player());
	return 1;
    }
    switch(random(4)) {
    case 0:
	message("say", "You hit "+target->query_cap_name()+" square "
	  "in the forehead!!", this_player());
	message("say", this_player()->query_cap_name()+" hits "+
	  target->query_cap_name()+" in the forehead with a stone.",
	  environment(this_player()), ({ this_player(), target }) );
	message("say", this_player()->query_cap_name()+" hits "
	  "you squarely in the head with a small stone!!", target); 
	limb = "head";
	break;
    case 1:
	message("say", target->query_cap_name()+" screams in agony "
	  "as you hit "+target->query_possessive()+" squarely in "
	  "the nose!", this_player());
	message("say", target->query_cap_name()+" screams in agony "
	  "as "+this_player()->query_cap_name()+" hits "
	  +target->query_possessive()+" squarely in "
	  "the nose!", environment(this_player()),
	  ({ this_player(), target }) );
	message("say", "You scream in agony as a stone plows into your "
	  "nose!!", target);
	limb = "head";
	break;
    case 2:
	message("say", "OUCH! You stone lands right on "+
	  target->query_possessive()+" nards!!", this_player());
	message("say", this_player()->query_cap_name()+" is quite "
	  "a good shot with those stones...", 
	  environment(this_player()), ({ this_player(), target }));
	message("say", this_player()->query_cap_name()+" pegs you "
	  "right in the nards!! OUCH!", target);
	limb = "torso";
	break;
    case 3:
	message("say", "You plant a stone right in "+
	  target->query_possessive()+" stomach.", this_player());
	message("say", this_player()->query_cap_name()+" mercilessly "
	  "beats on "+target->query_cap_name()+" with the stones.",
	  environment(this_player()), ({ this_player(), target }));
	message("say", this_player()->query_cap_name()+" plugs a stone "
	  "into your stomach, knocking your breath from you.", target);
	limb = "torso";
	break;
    }
    target->do_damage(limb, random(50)+10);
    if(((int)target->check_on_limb(limb) == 2) || (target->query_hp() < 0)) 
	target->die();
    return 1;
}

void set_target(object who) { target = who; }
