/*
// Author (??)
// Help added by Brian (1/28/92)
// Converted to mudlib 0.9.0 by Mobydick on 9/19/92
// Kill monster option added by Watcher on 2/19/93
// Watcher added vision check, 4/13/93
// The MudOS mudlib permits player killing by default. It is not hard to
// modify the mudlib to prevent player killing, or permit it only in special
// rooms such as arenas. Instructions for doing this are found in the file
// /doc/mudlib/player_killing.
// If you prevent player_killing you should probably prevent players from
// stealing from one another also, since fights start when the victim detetcts
// a theft.
*/
#include <config.h>
#include <mudlib.h>
inherit DAEMON ;
string help();
string get_monster();
int cmd_kill(string str) {
object victim, venv;
int i;
if(!str) {
return write(help());
}
if(str == "monster") str = get_monster();
if ((int)this_player()->query("hit_points")<=0) {
notify_fail("You're already dead!\n");
return 0;
}
str = lower_case(str);
venv = environment(this_player());
if (!venv) {
notify_fail("You can't kill anyone in the void!\n");
return 0;
}
if(!this_player()->query("vision")) {
write("Kill what? You can't see a thing!\n");
return 1; }
victim = present(str, venv);
if(!victim) {
notify_fail("I don't see that here.\n");
return 0;
}
if (!living(victim)) {
notify_fail ("That is not something you should be attacking.\n") ;
return 0 ;
}
if ((int)victim->query("no_attack")==1) {
notify_fail("You are not permitted to attack that.\n") ;
return 0 ;
}
if ((int)victim->query("ghost")==1) {
notify_fail ("I think the poor ghost has suffered enough.\n") ;
return 0 ;
}
if(victim == this_player()) {
notify_fail("Kill yourself?\n");
return 0;
}
if(victim->query("linkdead")) {
notify_fail("You cannot attack a linkdead player.\n");
return 0; }
#ifdef NO_PKILL
if(userp(victim)){
write("We don't do that here.\n");
return 1;
}
#endif
i = this_player()->kill_ob(victim) ;
if (i==0) {
write ("You are already trying to!\n") ;
#ifdef NO_PKILL
} else if (i==2) {
write("You are not allowed to attack when your no_attack property is on.\n");
#endif
} else {
write("You attack " + (string)victim->query("cap_name") + ".\n");
say(this_player()->query("cap_name") + " attacks " +
victim->query("cap_name") + ".\n", victim);
tell_object(victim,previous_object()->query("cap_name") + " attacks you!\n") ;
}
victim->set_heart_beat(1) ;
return 1 ;
}
string get_monster() {
mixed *env;
env = all_inventory( environment(this_player()) );
if(!env || !sizeof(env)) return 0;
env = filter_array(env, "filter_npc", this_object());
if(!env || !sizeof(env)) return 0;
return (string)env[0]->query("name"); }
int filter_npc(object obj) { return (int)obj->query("npc"); }
string help() {
return("Syntax: kill <monster>\n\n"+
"This command is used to initiate combat with the\n"+
"monster you specify. Once combat begins you may\n"+
"only end it by running away or if one of you dies.\n"+
"Other players may also be attacked.\n");
}
/* EOF */