Atrinik Server  4.0
firewall.c
Go to the documentation of this file.
1 /*************************************************************************
2  * Atrinik, a Multiplayer Online Role Playing Game *
3  * *
4  * Copyright (C) 2009-2014 Alex Tokar and Atrinik Development Team *
5  * *
6  * Fork from Crossfire (Multiplayer game for X-windows). *
7  * *
8  * This program is free software; you can redistribute it and/or modify *
9  * it under the terms of the GNU General Public License as published by *
10  * the Free Software Foundation; either version 2 of the License, or *
11  * (at your option) any later version. *
12  * *
13  * This program is distributed in the hope that it will be useful, *
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16  * GNU General Public License for more details. *
17  * *
18  * You should have received a copy of the GNU General Public License *
19  * along with this program; if not, write to the Free Software *
20  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
21  * *
22  * The author can be reached at admin@atrinik.org *
23  ************************************************************************/
24 
32 #include <global.h>
33 #include <object.h>
34 #include <object_methods.h>
35 
37 static void
38 process_func (object *op)
39 {
40  HARD_ASSERT(op != NULL);
41 
42  if (op->last_eat == 0 || op->map == NULL) {
43  return;
44  }
45 
46  cast_spell(op, op, op->direction, op->stats.dam, 1, CAST_NPC, op->race);
47 }
48 
50 static int
51 trigger_func (object *op, object *cause, int state)
52 {
53  HARD_ASSERT(op != NULL);
54  HARD_ASSERT(cause != NULL);
55 
56  if (cause->last_eat != 0) {
57  op->last_eat = !op->last_eat;
58  } else if (op->stats.maxsp != 0) {
59  op->direction = absdir(op->direction + op->stats.maxsp);
60  animate_turning(op);
61  }
62 
63  return OBJECT_METHOD_OK;
64 }
65 
70 {
71  OBJECT_METHODS(FIREWALL)->process_func = process_func;
72  OBJECT_METHODS(FIREWALL)->trigger_func = trigger_func;
73 }
const char * race
Definition: object.h:174
static void process_func(object *op)
Definition: firewall.c:38
static int absdir(int d)
Definition: define.h:1838
OBJECT_TYPE_INIT_DEFINE(firewall)
Definition: firewall.c:69
int16_t maxsp
Definition: living.h:81
int cast_spell(object *op, object *caster, int dir, int type, int ability, int item, const char *stringarg)
Definition: spell_util.c:192
int8_t direction
Definition: object.h:350
#define CAST_NPC
Definition: spells.h:288
struct mapdef * map
Definition: object.h:139
int16_t dam
Definition: living.h:87
int16_t last_eat
Definition: object.h:319
#define FIREWALL
Definition: define.h:304
living stats
Definition: object.h:481
#define OBJECT_METHODS(type)
void animate_turning(object *op)
Definition: anim.c:216
static int trigger_func(object *op, object *cause, int state)
Definition: firewall.c:51
#define OBJECT_METHOD_OK