/** * The base inherit for all plans. * @author Pinkfish * @started Wed Aug 5 15:39:52 PDT 1998 */ #include <npc/plan.h> private nosave int _sutability; private nosave mapping _hooked_events; /** @ignore yes */ void setup() { } /* setup() */ void create() { _sutability = PLAN_INVALID_SUTABILITY; _hooked_events = ([ ]); setup(); } /* create() */ /** * The precondition to the plan starting. * The default is to never let it start and always let them be finished. * @return always returns 0 */ int pre_condition(object npc, string goal, mixed goal_info, string event, mixed *data) { return 0; } /* pre_condition() */ /** * This method determines if the plan has been finished. * @return always returns 1 */ int finished(object npc, mixed *data) { return 1; } /* finished() */ /** * This method should return a number saying how sutiable this plan is * for this operation., * @return the sutability level, always invalid * @see set_sutability() */ int query_sutability(object npc, string goal, mixed goal_info, string event, mixed *data) { return _sutability; } /* query_sutability() */ /** * This method sets the sutability of the plan. This is the default * sutability level, if you wish to make the sutability more complicate than * a simple number then the query_sutability method should be overridden. * @param sutability the new sutability * @see query_sutability() */ void set_sutability(int sutability) { _sutability = sutability; } /* set_sutability() */ /** * This method should return any extra data needed to be passed onto the * plan. * @return the needed data, always 0 */ int query_data(object npc, string goal, mixed goal_info, string event, mixed *data) { return 0; } /* query_data() */ /** * This method creates the plan control information, if any is needed. * If this is not setup with the plan then the default values will be * used. * @return the plan data */ mixed create_plan_data() { return 0; } /* create_plan_data() */ /** * This method sets up a hooked event, the function will be called if the * event is called. Thus things like completion events and followon stuff * can be done. The function will be called with 4 arguments, the * arguments are:<br> * func(npc, plan_data, event, data) * @param event the event to call * @param func the function to call with the event */ void add_hooked_event(string event, function func) { _hooked_events[event] = func; } /* add_hooked_event() */ /** * This method removes a hooked event. * @param event the event to remove the data for */ void remove_hooked_event(string event) { map_delete(_hooked_events, event); } /* remove_hooked_event() */ /** * This method will be called when an event is setup. * @param npc the npc that called the event * @param plan_data the data associated with the plan * @param event the event which is called * @param data the data associated with the event */ int notify_event(object npc, mixed plan_data, string event, mixed *data) { if (_hooked_events[event]) { return evaluate(_hooked_events[event], npc, plan_data, event, data); } return 0; } /* notify_event() */