--- deliantra/server/common/button.C 2009/01/08 19:23:43 1.53 +++ deliantra/server/common/button.C 2009/10/11 18:18:03 1.54 @@ -319,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) @@ -351,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) { @@ -362,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 @@ -421,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; @@ -509,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) {