1 | /* |
1 | /* |
2 | * CrossFire, A Multiplayer game for X-windows |
2 | * CrossFire, A Multiplayer game |
3 | * |
3 | * |
4 | * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team |
4 | * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team |
5 | * Copyright (C) 2002 Mark Wedel & Crossfire Development Team |
5 | * Copyright (C) 2002 Mark Wedel & Crossfire Development Team |
6 | * Copyright (C) 1992 Frank Tore Johansen |
6 | * Copyright (C) 1992 Frank Tore Johansen |
7 | * |
7 | * |
… | |
… | |
45 | * of the dragon race. |
45 | * of the dragon race. |
46 | */ |
46 | */ |
47 | int |
47 | int |
48 | is_dragon_pl (const object *op) |
48 | is_dragon_pl (const object *op) |
49 | { |
49 | { |
50 | if (op != NULL && op->type == PLAYER && op->arch != NULL && op->arch->clone.race != NULL && strcmp (op->arch->clone.race, "dragon") == 0) |
50 | if (op |
|
|
51 | && op->type == PLAYER |
|
|
52 | && op->arch |
|
|
53 | && op->arch->clone.race |
|
|
54 | && !strcmp (op->arch->clone.race, "dragon")) |
51 | return 1; |
55 | return 1; |
52 | |
56 | |
53 | return 0; |
|
|
54 | } |
|
|
55 | |
|
|
56 | /* Returns TRUE if the range specified (int r) is legal - that is, |
|
|
57 | * the character has an item that is equipped for that range type. |
|
|
58 | * return 0 if there is no item of that range type that is usable. |
|
|
59 | * This function could probably be simplified, eg, everything |
|
|
60 | * should index into the ranges[] array. |
|
|
61 | */ |
|
|
62 | bool |
|
|
63 | player::legal_range (rangetype r) const |
|
|
64 | { |
|
|
65 | switch (r) |
|
|
66 | { |
|
|
67 | case range_none: /* "Nothing" is always legal */ |
|
|
68 | return 1; |
|
|
69 | |
|
|
70 | case range_bow: |
|
|
71 | case range_misc: |
|
|
72 | case range_magic: /* cast spells */ |
|
|
73 | case range_golem: |
|
|
74 | return !!ranges [r]; |
|
|
75 | |
|
|
76 | case range_skill: |
|
|
77 | return !!ob->chosen_skill; |
|
|
78 | } |
|
|
79 | |
|
|
80 | /* No match above, must not be valid */ |
|
|
81 | return 0; |
57 | return 0; |
82 | } |
58 | } |
83 | |
59 | |
84 | /* |
60 | /* |
85 | * If final is set, it a clean/final save, not a backup, ie dont remove objects from inventory |
61 | * If final is set, it a clean/final save, not a backup, ie dont remove objects from inventory |
… | |
… | |
105 | PL_OUT2 (title, own_title); |
81 | PL_OUT2 (title, own_title); |
106 | PL_OUT (gen_hp); |
82 | PL_OUT (gen_hp); |
107 | PL_OUT (gen_sp); |
83 | PL_OUT (gen_sp); |
108 | PL_OUT (gen_grace); |
84 | PL_OUT (gen_grace); |
109 | PL_OUT (listening); |
85 | PL_OUT (listening); |
110 | PL_OUT (shoottype); |
|
|
111 | PL_OUT (bowtype); |
86 | PL_OUT (bowtype); |
112 | PL_OUT (petmode); |
87 | PL_OUT (petmode); |
113 | PL_OUT (peaceful); |
88 | PL_OUT (peaceful); |
114 | PL_OUT (digestion); |
89 | PL_OUT (digestion); |
115 | PL_OUT2 (pickup, mode); |
90 | PL_OUT2 (pickup, mode); |
… | |
… | |
212 | return pl; |
187 | return pl; |
213 | |
188 | |
214 | case KW_oid: f.get (pl, f.get_sint32 ()); break; |
189 | case KW_oid: f.get (pl, f.get_sint32 ()); break; |
215 | case KW_password: assign (pl->password , f.get_str ()); break; |
190 | case KW_password: assign (pl->password , f.get_str ()); break; |
216 | case KW_title: assign (pl->own_title, f.get_str ()); break; |
191 | case KW_title: assign (pl->own_title, f.get_str ()); break; |
217 | case KW_shoottype: pl->shoottype = (rangetype) f.get_sint32 (); break; |
|
|
218 | case KW_bowtype: pl->bowtype = (bowtype_t) f.get_sint32 (); break; |
192 | case KW_bowtype: pl->bowtype = (bowtype_t) f.get_sint32 (); break; |
219 | case KW_petmode: pl->petmode = (petmode_t) f.get_sint32 (); break; |
193 | case KW_petmode: pl->petmode = (petmode_t) f.get_sint32 (); break; |
220 | case KW_listening: f.get (pl->listening); break; |
194 | case KW_listening: f.get (pl->listening); break; |
221 | case KW_peaceful: f.get (pl->peaceful); break; |
195 | case KW_peaceful: f.get (pl->peaceful); break; |
222 | case KW_digestion: f.get (pl->digestion); break; |
196 | case KW_digestion: f.get (pl->digestion); break; |