/* -*- LPC -*- */ /* * $Locker: $ * $Id: mon_actions.c,v 1.3 1998/06/09 21:31:31 ceres Exp $ * $Log: mon_actions.c,v $ * Revision 1.3 1998/06/09 21:31:31 ceres * Commented out some logging to improve performance. * * Revision 1.2 1998/03/12 09:18:29 pinkfish * Added documentaiotn. * * Revision 1.1 1998/01/06 04:29:08 ceres * Initial revision * */ /** * This is the old method of handling npc actions. Effects should now * always be used instead of these functions. * <p> * Do not use there functions! * @author Pinkfish */ #include "monster.h" #undef DEBUG mixed *mon_actions; void create() { mon_actions = ({ }); } /** @ignore yes */ void do_shadow() { int i; object ob; string fname; /* do we wint the sleaze of the year award???? */ this_object()->shadow_death(); fname = (string)MONSTER_HAND->query_shadow_name(); rm(fname+".c"); for (i=0;i<sizeof(mon_actions);i+=2) write_file(fname+".c", "inherit \"/std/trigger/"+mon_actions[i]+"\";\n"); write_file(fname+".c", read_file("/std/living/mon-shadow.c")); ob = clone_object(fname); ob->setup_shadow(this_object()); rm(fname+".c"); } /** * Do not use this method! Use effects instead. */ int add_triggered_action(string name, string trigger, mixed ob, string func) { int i, j; #ifdef DEBUG log_file("TRIGGERED", ctime(time())+": "+ file_name(this_object())+" prev: "+ implode( map_array( previous_object( -1 ), (: file_name( $1 ) :) ), ", " ) +"\n" ); #endif if ((i=member_array(trigger, mon_actions)) == -1) { mon_actions += ({ trigger, ({ name, ({ ob, func }) }) }); do_shadow(); } else if ((j=member_array(name, mon_actions[i+1])) == -1) mon_actions[i+1] += ({ name, ({ ob, func }) }); else mon_actions[i+1][j+1] = ({ ob, func }); } /** @ignore yes */ int remove_trigger(string name) { int i; if ((i=member_array(name, mon_actions)) == -1) return 0; mon_actions = delete(mon_actions, i, 2); if (!sizeof(mon_actions)) this_object()->shadow_death(); else do_shadow(); return 1; } /** @ignore yes */ int remove_triggered_action(string trigger, string name) { int i, j; if ((i=member_array(trigger, mon_actions)) == -1) return 0; if ((j=member_array(name, mon_actions[i+1])) == -1) return 0; mon_actions[i+1] = delete(mon_actions[i+1], i, 2); if (!sizeof(mon_actions[i+1])) remove_trigger(trigger); return 1; } /** @ignore yes */ mixed *query_actions(string trigger) { int i; if ((i=member_array(trigger, mon_actions)) == -1) return ({ }); return mon_actions[i+1]; } /** @ignore yes */ mixed *query_mon_actions() { return mon_actions; }