ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/player.h
(Generate patch)

Comparing deliantra/server/include/player.h (file contents):
Revision 1.12 by root, Mon Sep 4 11:07:59 2006 UTC vs.
Revision 1.28 by root, Sat Dec 16 17:16:51 2006 UTC

1
1/* 2/*
2 CrossFire, A Multiplayer game for X-windows 3 CrossFire, A Multiplayer game for X-windows
3 4
4 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 5 Copyright (C) 2002 Mark Wedel & Crossfire Development Team
5 Copyright (C) 1992 Frank Tore Johansen 6 Copyright (C) 1992 Frank Tore Johansen
16 17
17 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
18 along with this program; if not, write to the Free Software 19 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 21
21 The authors can be reached via e-mail at crossfire-devel@real-time.com 22 The authors can be reached via e-mail at crossfire@schmorp.de
22*/ 23*/
23 24
24#define NUM_OUTPUT_BUFS 5 25#define NUM_OUTPUT_BUFS 5
25typedef struct { 26struct Output_Buf
27{
26 shstr buf; /* Actual string pointer */ 28 shstr buf; /* Actual string pointer */
27 uint32 first_update; /* First time this message was stored */ 29 uint32 first_update; /* First time this message was stored */
28 uint16 count; /* How many times we got this message */ 30 uint16 count; /* How many times we got this message */
29} Output_Buf; 31};
30
31 32
32/* wand/rod/horn rolled into range_misc. They all use the same body location 33/* wand/rod/horn rolled into range_misc. They all use the same body location
33 * anyways. 34 * anyways.
34 */ 35 */
35enum rangetype { 36enum rangetype
37{
36 range_bottom = -1, 38 range_bottom = -1,
37 range_none = 0, 39 range_none = 0,
38 range_bow = 1, 40 range_bow = 1,
39 range_magic = 2, 41 range_magic = 2,
40 range_misc = 3, 42 range_misc = 3,
41 range_golem = 4, 43 range_golem = 4,
42 range_skill = 5, 44 range_skill = 5,
43 range_builder = 6, 45 range_builder = 6,
44 range_size = 7 46 range_size = 7
45}; 47};
46 48
47enum bowtype_t { 49enum bowtype_t
50{
48 bow_normal = 0, 51 bow_normal = 0,
49 bow_threewide = 1, 52 bow_threewide = 1,
50 bow_spreadshot = 2, 53 bow_spreadshot = 2,
51 bow_n = 3, /* must stay at 3 */ 54 bow_n = 3, /* must stay at 3 */
52 bow_ne = 4, 55 bow_ne = 4,
53 bow_e = 5, 56 bow_e = 5,
54 bow_se = 6, 57 bow_se = 6,
55 bow_s = 7, 58 bow_s = 7,
56 bow_sw = 8, 59 bow_sw = 8,
57 bow_w = 9, 60 bow_w = 9,
58 bow_nw = 10, /* must stay at 10 */ 61 bow_nw = 10, /* must stay at 10 */
59 bow_bestarrow = 11 62 bow_bestarrow = 11
60}; 63};
61 64
62typedef enum _petmode { 65enum petmode_t
66{
63 pet_normal = 0, 67 pet_normal = 0,
64 pet_sad = 1, 68 pet_sad = 1,
65 pet_defend = 2, 69 pet_defend = 2,
66 pet_arena = 3 70 pet_arena = 3
67} petmode_t; 71};
68 72
69typedef enum usekeytype { 73enum usekeytype
74{
70 key_inventory=0, 75 key_inventory = 0,
71 keyrings=1, 76 keyrings = 1,
72 containers=2 77 containers = 2
73} usekeytype; 78};
74 79
75/* This is used to control what to do when we need to unapply 80/* This is used to control what to do when we need to unapply
76 * an object before we can apply another one. 81 * an object before we can apply another one.
77 */ 82 */
78typedef enum unapplymode { 83enum unapplymode
84{
79 unapply_nochoice=0, /* Will unapply objects when there no choice to unapply */ 85 unapply_nochoice = 0, /* Will unapply objects when there no choice to unapply */
80 unapply_never=1, /* will not unapply objects automatically */ 86 unapply_never = 1, /* will not unapply objects automatically */
81 unapply_always=2 /* Will unapply whatever is necessary - this goes beyond */ 87 unapply_always = 2 /* Will unapply whatever is necessary - this goes beyond */
82 /* no choice - if there are multiple ojbect of the same type */ 88 /* no choice - if there are multiple ojbect of the same type */
83 /* that need to be unapplied, there is no way for the player */ 89 /* that need to be unapplied, there is no way for the player */
84 /* to control which of these will be unapplied. */ 90 /* to control which of these will be unapplied. */
85} unapplymode; 91};
86 92
87/* not really the player, but tied pretty closely */ 93/* not really the player, but tied pretty closely */
88typedef struct party_struct { 94struct partylist
95{
89 char * partyleader; 96 char *partyleader;
90 char passwd[9]; 97 char passwd[9];
91 struct party_struct *next; 98 partylist *next;
92 char *partyname; 99 char *partyname;
93 100
94#ifdef PARTY_KILL_LOG 101#ifdef PARTY_KILL_LOG
95 struct party_kill { 102 struct party_kill
103 {
96 char killer[MAX_NAME+1],dead[MAX_NAME+1]; 104 char killer[MAX_NAME + 1], dead[MAX_NAME + 1];
97 sint64 exp; 105 sint64 exp;
98 } party_kills[PARTY_KILL_LOG]; 106 } party_kills[PARTY_KILL_LOG];
99#endif 107#endif
100 sint64 total_exp; 108 sint64 total_exp;
101 uint32 kills; 109 uint32 kills;
102} partylist; 110};
111
112ACC_CLASS (player)
103 113
104// memsettable part of player 114// memsettable part of player
105struct player_pod 115struct player_pod
106{ 116{
107 object *ob; /* The object representing the player */ 117 object_ptr ACC (RW, ob); /* The object representing the player */
108 mapstruct *loading; /* When entering a map in progress of loading, not really used */ 118 maptile *loading; /* When entering a map in progress of loading, not really used */
109 rangetype shoottype; /* Which range-attack is being used by player */ 119 rangetype shoottype; /* Which range-attack is being used by player */
110 bowtype_t bowtype; /* which firemode? */ 120 bowtype_t bowtype; /* which firemode? */
111 petmode_t petmode; /* which petmode? */ 121 petmode_t petmode; /* which petmode? */
112 object *ranges[range_size];/* object for each range. Set up in fix player. Note */ 122 object_ptr ranges[range_size]; /* object for each range. Set up in fix player. Note */
113 /* That not all are used, it is just nice to map this 1:1 */ 123 /* That not all are used, it is just nice to map this 1:1 */
114 /* With the range names */ 124 /* With the range names */
115 uint32 golem_count; /* To track the golem */
116 usekeytype usekeys; /* Method for finding keys for doors */ 125 usekeytype usekeys; /* Method for finding keys for doors */
117 unapplymode unapply; /* Method for auto unapply */ 126 unapplymode unapply; /* Method for auto unapply */
118 uint32 count; /* Any numbers typed before a command */ 127 uint32 ACC (RW, count); /* Any numbers typed before a command */
119 uint32 mode; /* Mode of player for pickup. */ 128 uint32 ACC (RW, mode); /* Mode of player for pickup. */
120 129
121 sint8 digestion; /* Any bonuses/penalties to digestion */ 130 sint8 ACC (RW, digestion); /* Any bonuses/penalties to digestion */
122 sint8 gen_hp; /* Bonuses to regeneration speed of hp */ 131 sint8 ACC (RW, gen_hp); /* Bonuses to regeneration speed of hp */
123 sint8 gen_sp; /* Bonuses to regeneration speed of sp */ 132 sint8 ACC (RW, gen_sp); /* Bonuses to regeneration speed of sp */
124 sint8 gen_sp_armour; /* Penalty to sp regen from armour */ 133 sint8 ACC (RW, gen_sp_armour); /* Penalty to sp regen from armour */
125 sint8 gen_grace; /* Bonuses to regeneration speed of grace */ 134 sint8 ACC (RW, gen_grace); /* Bonuses to regeneration speed of grace */
126 sint16 item_power; /* Total item power of objects equipped */ 135 sint16 ACC (RW, item_power); /* Total item power of objects equipped */
127 uint8 state; /* Input state of the player (name, password, etc */ 136 uint8 ACC (RW, state); /* Input state of the player (name, password, etc */
128 uint8 listening; /* Which priority will be used in info_all */ 137 uint8 ACC (RW, listening); /* Which priority will be used in info_all */
129 sint8 last_level; /* Last level we sent to client */ 138 sint8 ACC (RW, last_level); /* Last level we sent to client */
130 139
131 /* Try to put all the bitfields together - saves some small amount of memory */ 140 /* Try to put all the bitfields together - saves some small amount of memory */
132 uint32 braced:1; /* Will not move if braced, only attack */ 141 uint32 ACC (RO, braced):1; /* Will not move if braced, only attack */
133 uint32 tmp_invis:1; /* Will invis go away when we attack ? */ 142 uint32 ACC (RO, tmp_invis):1; /* Will invis go away when we attack ? */
134 shstr invis_race; /* What race invisible to? */
135 uint32 do_los:1; /* If true, need to call update_los() in draw(), and clear */ 143 uint32 ACC (RO, do_los):1; /* If true, need to call update_los() in draw(), and clear */
136 uint32 fire_on:1; /* Player should fire object, not move */ 144 uint32 ACC (RO, fire_on):1; /* Player should fire object, not move */
137 uint32 run_on:1; /* Player should keep moving in dir until run is off */ 145 uint32 ACC (RO, run_on):1; /* Player should keep moving in dir until run is off */
138 uint32 has_hit:1; /* If set, weapon_sp instead of speed will count */ 146 uint32 ACC (RO, has_hit):1; /* If set, weapon_sp instead of speed will count */
139 uint32 name_changed:1; /* If true, the player has set a name. */ 147 uint32 ACC (RO, name_changed):1; /* If true, the player has set a name. */
140 uint32 peaceful:1; /* If set, won't attack friendly creatures */ 148 uint32 ACC (RO, peaceful):1; /* If set, won't attack friendly creatures */
141 uint32 hidden:1; /* If True, player (DM) is hidden from view */ 149 uint32 ACC (RO, hidden):1; /* If True, player (DM) is hidden from view */
142 uint32 explore:1; /* if True, player is in explore mode */ 150 uint32 ACC (RO, explore):1; /* if True, player is in explore mode */
143 uint32 no_shout:1; /* if True, player is *not* able to use shout command */
144 151
145 object *last_skill_ob[NUM_SKILLS]; /* the exp object */ 152 object_ptr last_skill_ob[NUM_SKILLS]; /* the exp object */
146 sint64 last_skill_exp[NUM_SKILLS]; /* shadow register. if != exp. obj update client */ 153 sint64 last_skill_exp[NUM_SKILLS]; /* shadow register. if != exp. obj update client */
147 154
148 float weapon_sp; /* Penalties to speed when fighting w speed >ws/10*/ 155 float ACC (RW, weapon_sp); /* Penalties to speed when fighting w speed >ws/10 */
149 float last_weapon_sp; /* if diff than weapon_sp, update client */ 156 float ACC (RW, last_weapon_sp); /* if diff than weapon_sp, update client */
150 uint16 last_flags; /* fire/run on flags for last tick */ 157 uint16 ACC (RW, last_flags); /* fire/run on flags for last tick */
151 sint32 last_weight; /* Last weight as sent to client; -1 means do not send weight */ 158 sint32 ACC (RW, last_weight); /* Last weight as sent to client; -1 means do not send weight */
152 sint32 last_weight_limit; /* Last weight limit transmitted to client */ 159 sint32 ACC (RW, last_weight_limit); /* Last weight limit transmitted to client */
153 uint32 last_path_attuned; /* Last spell attunment sent to client */ 160 uint32 ACC (RW, last_path_attuned); /* Last spell attunment sent to client */
154 uint32 last_path_repelled; /* Last spell repelled sent to client */ 161 uint32 ACC (RW, last_path_repelled); /* Last spell repelled sent to client */
155 uint32 last_path_denied; /* Last spell denied sent to client */ 162 uint32 ACC (RW, last_path_denied); /* Last spell denied sent to client */
156 living orig_stats; /* Permanent real stats of player */ 163 living ACC (RO, orig_stats); /* Permanent real stats of player */
157 living last_stats; /* Last stats as sent to client */ 164 living ACC (RO, last_stats); /* Last stats as sent to client */
158 float last_speed; /* Last speed as sent to client */ 165 float ACC (RW, last_speed); /* Last speed as sent to client */
159 sint16 last_resist[NROFATTACKS]; /* last resist values sent to client */ 166 sint16 last_resist[NROFATTACKS]; /* last resist values sent to client */
160 int Swap_First; /* First stat player has selected to swap */ 167 int Swap_First; /* First stat player has selected to swap */
161 object *last_used; /* Pointer to object last picked or applied */ 168 object_ptr ACC (RW, last_used); /* Pointer to object last picked or applied */
162 uint32 last_used_id; /* Safety measures to be sure it's the same */
163 sint8 blocked_los[MAP_CLIENT_X][MAP_CLIENT_Y]; /* array showing what spaces */
164 /* the player can see. For maps smaller than */
165 /* MAP_CLIENT_.., the upper left is used */
166 169
167 sint16 bed_x, bed_y; /* x,y - coordinates of respawn (savebed) */ 170 sint16 ACC (RW, bed_x), ACC (RW, bed_y); /* x,y - coordinates of respawn (savebed) */
168 char savebed_map[MAX_BUF]; /* map where player will respawn after death */ 171 char ACC (RW, savebed_map)[MAX_BUF]; /* map where player will respawn after death */
169 char maplevel[MAX_BUF]; /* On which level is the player? */ 172 char ACC (RW, maplevel)[MAX_BUF]; /* On which level is the player? */
170 char spellparam[MAX_BUF]; /* What param to add to spells */ 173 char ACC (RW, spellparam)[MAX_BUF]; /* What param to add to spells */
171 174
172 char own_title[MAX_NAME]; /* Title the player has chosen for themself */ 175 char ACC (RW, own_title)[MAX_NAME]; /* Title the player has chosen for themself */
173 /* Note that for dragon players, this is filled in for them */ 176 /* Note that for dragon players, this is filled in for them */
174 char title[BIG_NAME]; /* Default title, like fighter, wizard, etc */ 177 char ACC (RW, title)[64]; /* Default title, like fighter, wizard, etc */
175 178
176 sint8 levhp[11]; /* What the player gained on that level */ 179 sint8 levhp[11]; /* What the player gained on that level */
177 sint8 levsp[11]; /* Same for sp */ 180 sint8 levsp[11]; /* Same for sp */
178 sint8 levgrace[11]; /* And same for grace */ 181 sint8 levgrace[11]; /* And same for grace */
179 182
180 char killer[BIG_NAME]; /* Who killed this player. */ 183 char ACC (RW, killer)[64]; /* Who killed this player. */
181 char last_tell[MAX_NAME]; /* last player that told you something [mids 01/14/2002] */
182 184
183 char write_buf[MAX_BUF]; /* Holds arbitrary input from client */ 185 char write_buf[MAX_BUF]; /* Holds arbitrary input from client */
184 char input_buf[MAX_BUF]; /* Holds command to run */ 186 char input_buf[MAX_BUF]; /* Holds command to run */
185 char password[16]; /* 2 (seed) + 11 (crypted) + 1 (EOS) + 2 (safety) = 16 */ 187 char ACC (RW, password)[16]; /* 2 (seed) + 11 (crypted) + 1 (EOS) + 2 (safety) = 16 */
186 188
187#ifdef SAVE_INTERVAL
188 time_t last_save_time; 189 time_t ACC (RW, last_save_time);
189#endif /* SAVE_INTERVAL */
190#ifdef AUTOSAVE
191 uint32 last_save_tick; 190 uint32 ACC (RW, last_save_tick);
192#endif
193 partylist *party; /* Party this player is part of */ 191 partylist *ACC (RW, party); /* Party this player is part of */
194 partylist *party_to_join; /* used when player wants to join a party */ 192 partylist *ACC (RW, party_to_join); /* used when player wants to join a party */
195 /* but we will have to get password first */ 193 /* but we will have to get password first */
196 /* so we have to remember which party to */ 194 /* so we have to remember which party to */
197 /* join */ 195 /* join */
198 char search_str[MAX_BUF]; /* Item we are looking for */ 196 char ACC (RW, search_str)[MAX_BUF]; /* Item we are looking for */
199 sint16 encumbrance; /* How much our player is encumbered */ 197 sint16 ACC (RW, encumbrance); /* How much our player is encumbered */
198 uint16 ACC (RW, outputs_sync); /* How often to print, no matter what */
199 uint16 ACC (RW, outputs_count); /* Print if this count is exceeded */
200 object_ptr ACC (RW, mark); /* marked object */
201 /* Special DM fields */
202 tag_t *stack_items; /* Item stack for patch/dump/... commands */
203 int ACC (RW, stack_position); /* Current stack position, 0 for no item */
204 sint8 blocked_los[MAP_CLIENT_X][MAP_CLIENT_Y]; /* array showing what spaces */
205 /* the player can see. For maps smaller than */
206 /* MAP_CLIENT_.., the upper left is used */
207};
208
209struct player : zero_initialised, attachable<player>, player_pod
210{
211 player *next; /* Pointer to next player, NULL if this is last */
212 client *ACC (RO, socket); /* Socket information for this player */
200 Output_Buf outputs[NUM_OUTPUT_BUFS]; /* holds output strings to client */ 213 Output_Buf outputs[NUM_OUTPUT_BUFS]; /* holds output strings to client */
201 uint16 outputs_sync; /* How often to print, no matter what */ 214 shstr invis_race; /* What race invisible to? */
202 uint16 outputs_count; /* Print if this count is exceeded */
203 object *mark; /* marked object */
204 uint32 mark_count; /* count of mark object */
205 /* Special DM fields */
206 tag_t* stack_items; /* Item stack for patch/dump/... commands */
207 int stack_position; /* Current stack position, 0 for no item */
208};
209 215
210typedef struct pl : zero_initialised, attachable<struct pl>, player_pod 216 void clear ()
211{ 217 {
212 struct pl *next; /* Pointer to next player, NULL if this is last */ 218 memset (static_cast < player_pod * >(this), 0, sizeof (player_pod));
213 NewSocket socket; /* Socket information for this player */ 219 attachable_clear ();
214} player; 220 invis_race = 0;
215 221
222 for (int i = 0; i < NUM_OUTPUT_BUFS; i++)
223 outputs[i].buf = 0;
224 }
225};
226

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines