/* Filename : ring.c
* Description : a magical ring with spellpower
*
* written : 02-10-1996 - Gunner
* last modified : 26-05-1998 - Gunner
* HTML-Version : 02-02-2000 - Ghorwin
*/
#include <mudlib.h>
inherit I_ARMOUR;
#define FUNC "/doc/crashcourse/course05/ringfuncs"
create()
{
::create();
set_light(1);
set_name("ruby ring");
add_id(({"ring","shining ring"}));
set_short("A ruby ring");
set_long("It's a shining ring made out of ruby.\n");
set_weight(1);
set_ac(1);
set_type("ring");
set_value(200+random(100));
// hidden = when sold in a shop, the item vanishes
// stone = It's made out of some kind of stone
add_property(({"hidden","stone"}));
set_info("This ring will keep account of your killings. But, "
"you may only wear it if you have the right kind of soul.\n");
// Let's check out a blocking hook this time
add_hook("__bwear",(:call_other,FUNC,"wear_ring",this_object():));
add_hook("__remove",(:call_other,FUNC,"remove_ring",this_object():));
replace_program(I_ARMOUR);
}
/* Filename : ringfuncs.c
* Description : the functionfile for ring.c
*
* written : 02-10-1996 - Gunner
* last modified : 05-11-1997 - Gunner
* HTML-Version : 02-02-2000 - Ghorwin
*/
#include <mudlib.h>
#include "/doc/crashcourse/defs.h"
inherit I_DAEMON;
/*
* wear_ring : This function is called whenever someone tries to wear
* the ring.
*/
int
wear_ring(object ring)
{
object wearer = environment(ring);
// Only players with nasty or worse alignment may wear it
if (wearer->query_alignment() > -40)
{
tell_object(TP,"The ring just doesn't fit on your finger.\n");
return 1;
}
// Let's add a kill hook in the player
wearer->add_hook("__kill",(:call_other,TO,"player_kill",wearer:));
tell_object(wearer,"As you wear the ring, you feel a slight tingeling "
"sensation in your finger.\n");
return 0; // To allow the wear to complete.
}
/*
* player_kill : The player has killed something! Cheers!
*/
void
player_kill(object player)
{
player->add_tmp_prop("ring_kills",1);
}
/*
* remove_ring : The player removes the ring and the ring tells him/her/it
* how many kills he/she/it has made
*/
void
remove_ring(object ring)
{
int kills = 0;
object wearer = environment(ring);
kills = wearer->query_tmp_prop("ring_kills");
wearer->remove_tmp_prop("ring_kills");
tell_object(wearer,"The ring shivers slightly as you hear a voice "
"inside your head: 'You have taken " + kills + " lives!'\n");
}