// Petrarch
// Merentha Lib 1.0
// monster.c
#include <std.h>
#include "monster.h"
inherit LIVING;
void create() {
::create();
enable_commands();
add_action("commandHook", "", 1);
}
void init() {
::init();
}
int force_me(string str) {
return command(str);
}
void receive_message(string msgclass, string message) {
catch_tell(message);
}
varargs int commandHook(string arg) {
object cobj;
mapping nicks, als;
string *args, *paths;
string cmd_path, verb;
int i,j,k;
paths=({"/cmds/actions/", "/cmds/player/", "/cmds/abilities/", "/cmds/spells/"});
if(verb=query_verb()) cmd_path=verb;
else {
cmd_path = arg;
arg=0;
}
i=sizeof(paths);
while(i--)
if(file_exists(paths[i]+cmd_path+".c"))
cobj = load_object(paths[i]+cmd_path);
if (cobj) return (int)cobj->command(arg);
if (verb=="'") return "/cmds/actions/say"->command(arg);
if (verb==":") return "/cmds/actions/emote"->command(arg);
if (cobj=environment(this_object()))
if (member_array(verb, cobj->query_exits())!=-1) {
command("go "+verb);
return 1;
}
if(CHAT_D->send_message(this_object()->query_cap_name(),verb,arg)) return 1;
if(SOCIAL_D->get_message(verb+(arg?" "+arg:""))) return 1;
return 0;
}
int move_player(mixed dest) {
object env=environment(this_object());
string *exits=({}), dir=".", odir=" an unknown direction.";
int i;
if(!move(dest)) {
if(env) {
i=sizeof(exits=env->query_exits());
while (i--)
if (env->query_exit(exits[i])==file_name(find_object(dest))) {
dir=" "+exits[i]+".";
switch(exits[i]) {
case "north": odir=" the south."; break;
case "south": odir=" the north."; break;
case "east": odir=" the west."; break;
case "west": odir=" the east."; break;
case "northwest": odir=" the southeast."; break;
case "northeast": odir=" the southwest."; break;
case "southwest": odir=" the northeast."; break;
case "southeast": odir=" the northwest."; break;
case "up": odir=" below."; break;
case "down": odir=" above."; break;
case "enter": odir=" the entrance."; break;
default: odir=" the "+exits[i]; break;
}
}
message("move",this_object()->query_cap_name()+" leaves"+dir,env);
}
env=environment(this_object());
message("move", this_object()->query_cap_name()+" enters from"+odir,env, this_object());
return 1;
}
return 0;
}
void says(string str) { force_me("say "+str); }
void emotes(string str) { force_me("emote "+str); }
varargs void catch_tell(mixed args) {} ;
int is_monster() { return 1; }