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.9 by root, Tue Aug 29 07:33:58 2006 UTC vs.
Revision 1.29 by root, Wed Dec 20 09:14:22 2006 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines