// /std/deputy.c
// from the Nightmare mudlib
// a monster to assist the victim of a PK attack
// by Aleas
#include <std.h>
#include <rooms.h>
#include <deputies.h>
inherit MONSTER;
int query_deputy() { return 1; }
object currvict, currfoe;
object query_pk_victim() { return currvict; }
object query_pk_attacker() { return currfoe; }
void create()
{
::create();
set_properties( ([
"no bump":1,
"no paralyze":1,
]) );
set_name("deputy");
set_race(({"kender","elf","human","gnone","halfling"})[random(5)]);
set_gender(({"male","female"})[random(2)]);
set_alignment(0);
set_body_type("human");
set_class("fighter");
set_id( ({"deputy"}) );
set_short("deputy");
currvict = 0;
currfoe = 0;
}
void launch_deputy(object victim, object attacker, int nr) {
int alevel, i, j, tmp, * deps;
currvict = victim;
currfoe = attacker;
if (nr)
{
set_short(possessive_noun(victim->query_name())+ " " + (nr == 1 ? "first" : "second")+" deputy");
set_id( ({"deputy", (nr == 1 ? "first" : "second")+" deputy" }) );
}
else
set_short(possessive_noun(victim->query_name())+" deputy");
set_long("You remember the face of this strong "+query_gender()+" "+query_race()+" fighter "
"from the Praxis sheriff's office. "+capitalize(nominative(query_gender()))+" looks very angry. ");
set_emotes(10,({"%^BOLD%^%^BLUE%^"+capitalize(query_short())+" shouts:%^RESET%^ "+
attacker->query_cap_name()+"! How dare you attack "+victim->query_cap_name()+"?"}),1);
alevel = attacker->query_level();
if (alevel <= 20)
deps = DEPUTIES_LOW;
else
deps = DEPUTIES_HIGH;
alevel <<= 1;
j = deps[0];
if ( (tmp = sizeof(deps)) > 1 )
for (i = 1; i < tmp; i++)
if ( absolute_value( deps[i] - alevel ) < absolute_value( j - alevel ) )
j = deps[i];
set_level(j);
// BALANCE: adjust here!
set_stats("constitution",j * 2);
set_stats("strength", j * 2);
set_stats("intelligence", j * 2);
set_stats("wisdom", j * 2);
set_stats("dexterity", j * 2);
set_stats("charisma", j * 2);
set_skill("melee", j * 5);
set_skill("attack", j * 5);
set_skill("defense", j * 5);
this_object()->kill_ob(attacker,0);
}
void heart_beat() {
object env;
::heart_beat();
env = environment(this_object());
if (this_object()->query_current_attacker() == 0) {
if (env)
message("mout",capitalize(query_short())+" leaves for the sheriff.",env);
// attention! change ROOM_VOID's go_back callout to check for this_player() != 0
// otherwise this fails
this_object()->move(ROOM_VOID);
this_object()->remove();
return;
}
if (env) {
if (!currvict || !objectp(currvict) || !interactive(currvict) ||
environment(currvict) != env || currvict->query_ghost()) {
message("mout",capitalize(query_short())+" leaves for the sheriff.",env);
this_object()->move(ROOM_VOID);
this_object()->remove();
}
}
}