--- deliantra/server/common/button.C 2009/01/08 04:35:03 1.52 +++ deliantra/server/common/button.C 2009/10/11 18:18:03 1.54 @@ -35,7 +35,7 @@ * the originator is the player or monster who did something. */ static void -activate_connection_link (objectlink *ol, bool state, object *activator, object *originator) +activate_connection_link (objectlink *ol, int state, object *activator, object *originator) { for (; ol; ol = ol->next) { @@ -137,9 +137,7 @@ move_firewall (tmp); else { - if ((tmp->stats.sp += tmp->stats.maxsp) > 8) /* next direction */ - tmp->stats.sp = ((tmp->stats.sp - 1) % 8) + 1; - + tmp->stats.sp = absdir (tmp->stats.sp + tmp->stats.maxsp); /* next direction */ animate_turning (tmp); } break; @@ -201,7 +199,7 @@ * */ void -maptile::trigger (shstr_tmp id, bool state, object *activator, object *originator) +maptile::trigger (shstr_tmp id, int state, object *activator, object *originator) { if (INVOKE_MAP (TRIGGER, this, ARG_STRING (&id), ARG_INT (state), ARG_OBJECT (originator))) return; @@ -321,8 +319,14 @@ */ int -check_altar_sacrifice (const object *altar, const object *sacrifice) +check_altar_sacrifice (object *altar, object *sacrifice, object *originator) { + if (sacrifice->flag [FLAG_UNPAID]) + return 0; + + if (is_match_expr (ARCH_SACRIFICE (altar))) + return match (ARCH_SACRIFICE (altar), altar, originator); + if (!QUERY_FLAG (sacrifice, FLAG_ALIVE) && !QUERY_FLAG (sacrifice, FLAG_IS_LINKED) && sacrifice->type != PLAYER) @@ -353,7 +357,7 @@ * remaining sacrifice, or is set to NULL if the sacrifice was used up. */ int -operate_altar (object *altar, object **sacrifice) +operate_altar (object *altar, object **sacrifice, object *originator) { if (!altar->map) { @@ -364,7 +368,7 @@ if (!altar->slaying || altar->value) return 0; - if (!check_altar_sacrifice (altar, *sacrifice)) + if (!check_altar_sacrifice (altar, *sacrifice, originator)) return 0; /* check_altar_sacrifice should have already verified that enough money @@ -423,7 +427,7 @@ * TRIGGER_BUTTON, TRIGGER_PEDESTAL: Returns 0. */ int -check_trigger (object *op, object *cause) +check_trigger (object *op, object *cause, object *originator) { object *tmp; int push = 0, tot = 0; @@ -511,7 +515,7 @@ if (in_movement) return 0; - if (operate_altar (op, &cause)) + if (operate_altar (op, &cause)) /* TODO: originator? */ { if (NUM_ANIMATIONS (op) > 1) {