1 | /* |
1 | /* |
2 | * CrossFire, A Multiplayer game |
2 | * This file is part of Crossfire TRT, the Multiplayer Online Role Playing Game. |
3 | * |
3 | * |
4 | * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team |
4 | * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team |
5 | * Copyright (C) 2002 Mark Wedel & Crossfire Development Team |
5 | * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team |
6 | * Copyright (C) 1992 Frank Tore Johansen |
6 | * Copyright (©) 1992,2007 Frank Tore Johansen |
7 | * |
7 | * |
8 | * This program is free software; you can redistribute it and/or modify |
8 | * Crossfire TRT is free software; you can redistribute it and/or modify it |
9 | * it under the terms of the GNU General Public License as published by |
9 | * under the terms of the GNU General Public License as published by the Free |
10 | * the Free Software Foundation; either version 2 of the License, or |
10 | * Software Foundation; either version 2 of the License, or (at your option) |
11 | * (at your option) any later version. |
11 | * any later version. |
12 | * |
12 | * |
13 | * This program is distributed in the hope that it will be useful, |
13 | * This program is distributed in the hope that it will be useful, but |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 | * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
16 | * GNU General Public License for more details. |
16 | * for more details. |
17 | * |
17 | * |
18 | * You should have received a copy of the GNU General Public License |
18 | * You should have received a copy of the GNU General Public License along |
19 | * along with this program; if not, write to the Free Software |
19 | * with Crossfire TRT; if not, write to the Free Software Foundation, Inc. 51 |
20 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
20 | * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
21 | * |
21 | * |
22 | * The authors can be reached via e-mail at <crossfire@schmorp.de> |
22 | * The authors can be reached via e-mail to <crossfire@schmorp.de> |
23 | */ |
23 | */ |
24 | |
24 | |
25 | #include <global.h> |
25 | #include <global.h> |
26 | #include <funcpoint.h> |
26 | #include <funcpoint.h> |
27 | |
27 | |
… | |
… | |
316 | int |
316 | int |
317 | check_altar_sacrifice (const object *altar, const object *sacrifice) |
317 | check_altar_sacrifice (const object *altar, const object *sacrifice) |
318 | { |
318 | { |
319 | if (!QUERY_FLAG (sacrifice, FLAG_ALIVE) && !QUERY_FLAG (sacrifice, FLAG_IS_LINKED) && sacrifice->type != PLAYER) |
319 | if (!QUERY_FLAG (sacrifice, FLAG_ALIVE) && !QUERY_FLAG (sacrifice, FLAG_IS_LINKED) && sacrifice->type != PLAYER) |
320 | { |
320 | { |
321 | if ((ARCH_SACRIFICE (altar) == sacrifice->arch->name || |
321 | if ((ARCH_SACRIFICE (altar) == sacrifice->arch->archname |
322 | ARCH_SACRIFICE (altar) == sacrifice->name || |
322 | || ARCH_SACRIFICE (altar) == sacrifice->name |
323 | ARCH_SACRIFICE (altar) == sacrifice->slaying || |
323 | || ARCH_SACRIFICE (altar) == sacrifice->slaying |
324 | (!strcmp (ARCH_SACRIFICE (altar), query_base_name (sacrifice, 0)))) |
324 | || (!strcmp (ARCH_SACRIFICE (altar), query_base_name (sacrifice, 0)))) |
325 | && NROF_SACRIFICE (altar) <= (sacrifice->nrof ? sacrifice->nrof : 1)) |
325 | && NROF_SACRIFICE (altar) <= (sacrifice->nrof ? sacrifice->nrof : 1)) |
326 | return 1; |
326 | return 1; |
327 | |
327 | |
328 | if (strcmp (ARCH_SACRIFICE (altar), "money") == 0 |
328 | if (strcmp (ARCH_SACRIFICE (altar), "money") == 0 |
329 | && sacrifice->type == MONEY && sacrifice->nrof * sacrifice->value >= NROF_SACRIFICE (altar)) |
329 | && sacrifice->type == MONEY && sacrifice->nrof * sacrifice->value >= NROF_SACRIFICE (altar)) |
… | |
… | |
820 | object *tmp, *ret = NULL; |
820 | object *tmp, *ret = NULL; |
821 | |
821 | |
822 | /* First check the object itself. */ |
822 | /* First check the object itself. */ |
823 | if ((trig->stats.hp && (op->type == trig->stats.hp)) |
823 | if ((trig->stats.hp && (op->type == trig->stats.hp)) |
824 | || (trig->slaying && (op->slaying == trig->slaying)) |
824 | || (trig->slaying && (op->slaying == trig->slaying)) |
825 | || (trig->race && (op->arch->name == trig->race))) |
825 | || (trig->race && (op->arch->archname == trig->race))) |
826 | return op; |
826 | return op; |
827 | |
827 | |
828 | for (tmp = op->inv; tmp; tmp = tmp->below) |
828 | for (tmp = op->inv; tmp; tmp = tmp->below) |
829 | { |
829 | { |
830 | if (tmp->inv) |
830 | if (tmp->inv) |
… | |
… | |
833 | if (ret) |
833 | if (ret) |
834 | return ret; |
834 | return ret; |
835 | } |
835 | } |
836 | else if ((trig->stats.hp && (tmp->type == trig->stats.hp)) |
836 | else if ((trig->stats.hp && (tmp->type == trig->stats.hp)) |
837 | || (trig->slaying && (tmp->slaying == trig->slaying)) |
837 | || (trig->slaying && (tmp->slaying == trig->slaying)) |
838 | || (trig->race && (tmp->arch->name == trig->race))) |
838 | || (trig->race && (tmp->arch->archname == trig->race))) |
839 | return tmp; |
839 | return tmp; |
840 | } |
840 | } |
841 | return NULL; |
841 | return NULL; |
842 | } |
842 | } |
843 | |
843 | |