/**
* This inheritable allows broadcasting of shop events to whoever
* wants to hear them. The most useful case of this is broadcasting
* to yourself so you can tell when shops do specific things. The
* shop event will always be called 'event_shop' + type. For example
* 'event_shop_failed_buy'. Each specific
* shop will setup different parameters to the shop event, except
* the first three parameters will always be the event name,
* shop object and the third is the player.
* @author Pinkfish
* @started Mon Oct 23 12:23:41 PDT 2000
*/
private nosave object* _events;
void create() {
_events = ({ });
} /* create() */
/**
* This method adds an object into the list to receive shop events.
* @param observer the observer to add
*/
void add_shop_observer(object observer) {
if (!_events) {
_events = ({ });
}
if (member_array(observer, _events) == -1) {
_events += ({ observer });
}
} /* add_shop_observer() */
/**
* This method removes an object from the list to recieve shop events.
* @param observer the observer to remove
*/
void remove_shop_observer(object observer) {
_events -= ({ observer });
} /* remove_shop_observer() */
/**
* This method sends the event to all the people who have been set to
* receive shop events. The shop event function is called
* event_shop(object shop, ...).
* <p>
* If this method returns 1 then the default messages are supressed.
* @param type the type of the event
* @param player the player in the event
* @param args the arguements in the event
* @return 1 to supress the default messages
*/
int broadcast_shop_event(string type, object player, mixed args ...) {
debug_printf("Calling %O on %O\n", "event_shop_" + type, _events);
if (sizeof(filter(call_other(_events, "event_shop_" + type, this_object(),
player, args ...),
(: $1 :)))) {
return 1;
}
return 0;
} /* broadcast_shop_event() */