Crossfire Server, Branches 1.12
R18729
|
Go to the source code of this file.
Macros | |
#define | ARCH_SACRIFICE(xyz) ((xyz)->slaying) |
#define | NROF_SACRIFICE(xyz) ((uint32)(xyz)->stats.food) |
Functions | |
void | add_button_link (object *button, mapstruct *map, int connected) |
void | animate_turning (object *op) |
int | check_altar_sacrifice (const object *altar, const object *sacrifice, int remove_others, int *toremove) |
void | check_inv (object *op, object *trig) |
object * | check_inv_recursive (object *op, const object *trig) |
int | check_trigger (object *op, object *cause) |
static objectlink * | get_button_links (const object *button) |
int | get_button_value (const object *button) |
static int | matches_sacrifice (const object *altar, const object *sacrifice) |
int | operate_altar (object *altar, object **sacrifice) |
void | push_button (object *op) |
void | remove_button_link (object *op) |
void | trigger_connected (objectlink *ol, object *cause, const int state) |
static void | trigger_move (object *op, int state) |
void | update_button (object *op) |
void | update_buttons (mapstruct *m) |
void | use_trigger (object *op) |
void | verify_button_links (const mapstruct *map) |
This handles triggers, buttons, altars and associated objects.
Definition in file button.c.
#define ARCH_SACRIFICE | ( | xyz | ) | ((xyz)->slaying) |
Definition at line 291 of file button.c.
Referenced by check_altar_sacrifice(), and matches_sacrifice().
#define NROF_SACRIFICE | ( | xyz | ) | ((uint32)(xyz)->stats.food) |
Definition at line 292 of file button.c.
Referenced by check_altar_sacrifice().
Links specified object in the map.
button | object to link. Must not be NULL. |
map | map we are on. Should not be NULL. |
connected | connection value for the item. |
Definition at line 663 of file button.c.
References mapdef::buttons, obj::count, FLAG_IS_LINKED, free_objectlink(), get_objectlink(), get_objectlinkpt(), oblnk::id, oblinkpt::link, llevError, LOG(), oblnk::next, oblinkpt::next, oblnk::ob, SET_FLAG, and oblinkpt::value.
Referenced by apply_builder_item(), and include_map_in_map().
void animate_turning | ( | object * | op | ) |
Animates one step of object.
op | object to animate. |
Definition at line 284 of file button.c.
References NUM_ANIMATIONS, SET_ANIMATION, liv::sp, obj::state, obj::stats, UP_OBJ_FACE, and update_object().
Referenced by legacy_ob_process(), and trigger_connected().
int check_altar_sacrifice | ( | const object * | altar, |
const object * | sacrifice, | ||
int | remove_others, | ||
int * | toremove | ||
) |
Checks whether the altar has enough to sacrifice.
Function put in (0.92.1) so that identify altars won't grab money unnecessarily - we can see if there is sufficient money, see if something needs to be identified, and then remove money if needed.
0.93.4: Linked objects (ie, objects that are connected) can not be sacrificed. This fixes a bug of trying to put multiple altars/related objects on the same space that take the same sacrifice.
The function will now check for all items sitting on the altar, so that the player can put various matching but non merging items on the altar.
This function can potentially remove other items, if remove_others is set.
altar | item to which there is a sacrifice | |
sacrifice | object that may be sacrifed | |
remove_others | if 1, will remove enough items apart sacrifice to compensate for not having enough in sacrifice itself. | |
[out] | toremove | will contain the nrof of sacrifice to really remove to finish operating. Will be set if not NULL only if the function returns 1. |
Definition at line 355 of file button.c.
References obj::above, ARCH_SACRIFICE, decrease_ob_nr(), FLAG_UNPAID, llevError, LOG(), obj::map, matches_sacrifice(), obj::nrof, NROF_SACRIFICE, mapdef::path, QUERY_FLAG, remove_ob(), and obj::value.
Referenced by identify_altar_type_move_on(), and operate_altar().
Function to search the inventory, of a player and then based on a set of conditions, the square will activate connected items.
Monsters can't trigger this square (for now) Values are: last_sp = 1/0 obj/no obj triggers last_heal = 1/0 remove/dont remove obj if triggered -b.t. (thoma s@no mad.a stro .psu. edu
op | object to check. Must be a player. |
trig | trigger object that may be activated. |
Definition at line 828 of file button.c.
References check_inv_recursive(), decrease_ob, obj::last_heal, obj::last_sp, PLAYER, obj::type, and use_trigger().
Referenced by cfapi_object_check_inventory(), and check_inv_type_move_on().
Checks object and its inventory for specific item.
It will descend through containers to find the object. slaying = match object slaying flag race = match object archetype name flag hp = match object type (excpt type '0'== PLAYER) title = match object title Searching by title only is not recommended, as it can be a rather slow operation; use it in combination with archetype or type.
op | object of which to search inventory |
trig | what to search |
Definition at line 788 of file button.c.
References obj::arch, obj::below, check_inv_recursive(), liv::hp, obj::inv, archt::name, obj::race, obj::slaying, obj::stats, obj::title, and obj::type.
Referenced by blocked_link(), cast_create_town_portal(), cfapi_object_check_inventory(), check_inv(), and check_inv_recursive().
cause == NULL: nothing has moved, we have been called from animate_trigger().
TRIGGER_ALTAR: Returns 1 if 'cause' was destroyed, 0 if not.
TRIGGER: Returns 1 if handle could be moved, 0 if not.
TRIGGER_BUTTON, TRIGGER_PEDESTAL: Returns 0.
Definition at line 525 of file button.c.
References obj::above, liv::ac, obj::carrying, obj::head, obj::last_sp, llevDebug, LOG(), obj::move_on, obj::move_type, obj::name, obj::nrof, NUM_ANIMATIONS, operate_altar(), PLAYER, push(), obj::race, SET_ANIMATION, obj::slaying, obj::speed, obj::stats, TRIGGER, TRIGGER_ALTAR, TRIGGER_BUTTON, trigger_move(), TRIGGER_PEDESTAL, obj::type, UP_OBJ_FACE, update_ob_speed(), update_object(), obj::value, liv::wc, and obj::weight.
Referenced by animate_trigger(), cfapi_object_check_trigger(), do_auto_apply(), fix_auto_apply(), trigger_altar_type_move_on(), trigger_button_type_move_on(), trigger_pedestal_type_move_on(), trigger_type_apply(), and trigger_type_process().
|
static |
Return the first objectlink in the objects linked to this one
button | object to check. Must not be NULL. |
Definition at line 734 of file button.c.
References mapdef::buttons, obj::count, oblnk::id, oblinkpt::link, obj::map, oblnk::next, oblinkpt::next, and oblnk::ob.
Referenced by push_button(), and update_button().
int get_button_value | ( | const object * | button | ) |
Returns the first value linked to this button. Made as a separate function to increase efficiency
button | object to check. Must not be NULL. |
Definition at line 756 of file button.c.
References mapdef::buttons, obj::count, oblnk::id, oblinkpt::link, obj::map, oblnk::next, oblinkpt::next, oblnk::ob, and oblinkpt::value.
Helper function to check if the item matches altar's requested sacrifice. The number of objects is not taken into account.
altar | altar we're checking for. Can't be NULL. |
sacrifice | what object to check for. Can't be NULL. |
Definition at line 305 of file button.c.
References obj::arch, ARCH_SACRIFICE, FLAG_ALIVE, FLAG_IS_LINKED, MAX_BUF, MONEY, obj::name, archt::name, PLAYER, query_base_name(), QUERY_FLAG, obj::slaying, and obj::type.
Referenced by check_altar_sacrifice().
Checks if sacrifice was accepted and removes sacrificed objects. Might be better to call check_altar_sacrifice (above) than depend on the return value, since operate_altar will remove the sacrifice also.
If this function returns 1, '*sacrifice' is modified to point to the remaining sacrifice, or is set to NULL if the sacrifice was used up.
altar | item to which there is a sacrifice |
sacrifice | object that may be sacrifed |
Definition at line 470 of file button.c.
References check_altar_sacrifice(), decrease_ob_nr(), ext_info_map(), llevError, LOG(), obj::map, obj::msg, MSG_TYPE_DIALOG, MSG_TYPE_DIALOG_ALTAR, NDI_BLACK, obj::slaying, and obj::value.
Referenced by altar_type_move_on(), check_trigger(), and identify_altar_type_move_on().
void push_button | ( | object * | op | ) |
Push the specified object. This can affect other buttons/gates/handles altars/pedestals/holes in the whole map. Changed the routine to loop through all linked objects. Better hurry with that linked list...
op | object to push. |
Definition at line 165 of file button.c.
References get_button_links(), trigger_connected(), and obj::value.
Referenced by altar_type_move_on(), cf_handle_type_apply(), move_detector(), update_button(), and use_trigger().
void remove_button_link | ( | object * | op | ) |
Remove the object from the linked lists of buttons in the map. This is only needed by editors.
op | object to remove. Must be on a map, and linked. |
Definition at line 700 of file button.c.
References mapdef::buttons, CLEAR_FLAG, FLAG_IS_LINKED, oblinkpt::link, llevError, LOG(), obj::map, oblnk::next, oblinkpt::next, oblnk::ob, and QUERY_FLAG.
Referenced by apply_builder_remove(), clean_object(), and delete_unique_items().
void trigger_connected | ( | objectlink * | ol, |
object * | cause, | ||
const int | state | ||
) |
Trigger every object in an objectlink. This was originally part of push_button but has been extracted to make it possible to trigger the connected object on a map from a plugin without requiring a source object. This method will take care of calling EVENT_TRIGGER of all elligible object in list (see state parameter)
ol | the objectlink to trigger. This can be acquire from map |
cause | the object that cause this path to trigger, may be NULL |
state | which object to apply. 0=all object with FLAG_ACTIVATE_ON_PUSH other=all object with FLAG_ACTIVATE_ON_RELEASE |
Definition at line 52 of file button.c.
References ALTAR, animate_turning(), obj::arch, BUTTON, CF_HANDLE, archt::clone, obj::count, DIRECTOR, EVENT_TRIGGER, execute_event(), ext_info_map(), FIREWALL, FLAG_ACTIVATE_ON_PUSH, FLAG_ACTIVATE_ON_RELEASE, FLAG_ANIMATE, FLAG_FREED, liv::food, GATE, obj::head, HOLE, liv::hp, oblnk::id, obj::last_eat, llevError, LOG(), obj::map, liv::maxhp, liv::maxsp, obj::more, move_firewall(), obj::msg, MSG_SUBTYPE_NONE, MSG_TYPE_SIGN, obj::name, NDI_NAVY, NDI_UNIQUE, oblnk::next, oblnk::ob, ob_trigger(), PEDESTAL, QUERY_FLAG, SCRIPT_FIX_ALL, SET_ANIMATION, SIGN, liv::sp, obj::speed, obj::stats, TIMED_GATE, obj::type, UP_OBJ_FACE, update_ob_speed(), update_object(), and obj::value.
Referenced by cfapi_map_trigger_connected(), and push_button().
|
static |
Definition at line 495 of file button.c.
References liv::exp, obj::speed, obj::speed_left, obj::stats, update_ob_speed(), use_trigger(), and liv::wc.
Referenced by check_trigger().
void update_button | ( | object * | op | ) |
Updates everything connected with the button op. After changing the state of a button, this function must be called to make sure that all gates and other buttons connected to the button reacts to the (eventual) change of state.
op | object to update. |
Definition at line 178 of file button.c.
References obj::above, BUTTON, obj::carrying, obj::count, get_button_links(), obj::head, oblnk::id, llevDebug, LOG(), obj::move_on, obj::move_type, obj::name, oblnk::next, obj::nrof, oblnk::ob, PEDESTAL, PLAYER, push_button(), obj::race, SET_ANIMATION, obj::slaying, SPECIAL_KEY, obj::type, UP_OBJ_FACE, update_object(), obj::value, and obj::weight.
Referenced by button_type_move_on(), pedestal_type_move_on(), and update_buttons().
void update_buttons | ( | mapstruct * | m | ) |
Updates every button on the map (by calling update_button() for them).
Definition at line 241 of file button.c.
References BUTTON, mapdef::buttons, obj::count, oblnk::id, oblinkpt::link, llevError, LOG(), obj::name, oblnk::next, oblinkpt::next, oblnk::ob, PEDESTAL, obj::type, update_button(), oblinkpt::value, obj::x, and obj::y.
Referenced by load_original_map().
void use_trigger | ( | object * | op | ) |
Toggles the state of specified button.
op | object to toggle. |
Definition at line 268 of file button.c.
References push_button(), and obj::value.
Referenced by check_inv(), do_talk_npc(), spring_trap(), and trigger_move().
void verify_button_links | ( | const mapstruct * | map | ) |
This does a minimal check of the button link consistency for object map. All it really does it much sure the object id link that is set matches what the object has.
Will log to error level.
map | map to check. |
Definition at line 853 of file button.c.
References mapdef::buttons, obj::count, oblnk::id, oblinkpt::link, llevError, LOG(), obj::name, oblnk::next, oblinkpt::next, and oblnk::ob.