// 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; }