/* Slay Living. Drakken, January 1994 */
#define NAME "@@query_name:$this_player()$@@" /* gives greater flexibilty */
#define TARG "@@query_name:$this_object()$@@"
status slay(string targ, mixed alt_type) {
int dam, i;
string file;
file = file_name(this_object());
sscanf(file,"%s#%d",file,i);
if(!targ || !(targ == "living" || sscanf(targ,"living %s", targ))) {
notify_fail("slay living?\n");
return 0;
}
if((status)environment(this_player())->query_no_fight() == 1){
write("You are not allowed to cast spells here.\n");
return 1;
}
if(targ == "living") targ = (string)this_player()->query_attacker();
if(!targ) {
notify_fail("slay living <who>?\n");
return 0;
}
if(!alt_type) alt_type = "necromancy_sphere";
dam = (objectp(alt_type))
? (int)alt_type->query_cast_level()
: (int)call_other(this_player(),"query_"+alt_type);
dam *= (random(6) + 1);
if(dam > 60) dam = 60;
file = file_name(this_object());
sscanf(file,"%s#%d",file,i);
this_player()->load_spell(({
"target", targ,
"name", "Slay Living",
"sphere", alt_type,
"cost", 35,
"damage", dam,
"immune", "death",
"level", 30,
"cast time", 4,
"casting msg", ({
"You call upon the gods of evil to bring death to your opponent.\n",
"You stare deeply into the eyes of "+ targ +".\n",
}),
"casting msg room", ({
NAME+" calls upon the gods, to bring death to "+capitalize(targ)+".\n",
NAME+" stares deeply into the eyes of "+capitalize(targ)+".\n",
}),
"spell object", file,
}));
return 1;
}
/****************************************************************/
/* when cloned to target */
status cast_spell(object caster,object target,object prev,int dmg) {
#ifndef PLAYERKILL
if(!(caster->query_npc() || target->query_npc())){
tell_room(environment(target),"Nothing happens...\n");
destruct(this_object());
return 1;
}
#endif
if(target == caster) {
destruct(this_object());
return 1;
}
if(target->query_level() <= 18){
if(target != caster) {
tell_object(caster,(string)target->query_name()+
" falls to the ground, dead...\n");
}
tell_object(target, "You fall to the ground, dead...!\n");
say((string)target->query_name()+
" falls to the ground, dead!\n", target);
target->death();
destruct(this_object());
return 1; /* do not do damage */
}
destruct(this_object());
return 0; /* do damage */
}
/* Native Mode Move */
#include <move.h>