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.18 by root, Wed Sep 20 21:53:50 2006 UTC vs.
Revision 1.35 by root, Mon Dec 25 11:25:49 2006 UTC

1
2/* 1/*
3 CrossFire, A Multiplayer game for X-windows 2 CrossFire, A Multiplayer game for X-windows
4 3
5 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 4 Copyright (C) 2002 Mark Wedel & Crossfire Development Team
6 Copyright (C) 1992 Frank Tore Johansen 5 Copyright (C) 1992 Frank Tore Johansen
17 16
18 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
19 along with this program; if not, write to the Free Software 18 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 20
22 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
23*/ 22*/
24 23
25#define NUM_OUTPUT_BUFS 5 24#define NUM_OUTPUT_BUFS 5
26struct Output_Buf 25struct Output_Buf
27{ 26{
107#endif 106#endif
108 sint64 total_exp; 107 sint64 total_exp;
109 uint32 kills; 108 uint32 kills;
110}; 109};
111 110
111#define for_all_players(var) for (player *var = first_player; var; var = var->next)
112
112ACC_CLASS (player) 113INTERFACE_CLASS (player)
113 114struct player : zero_initialised, attachable
114// memsettable part of player
115struct player_pod
116{ 115{
116 player *ACC (RW, next); /* Pointer to next player, NULL if this is last */
117 client_ptr ACC (RO, ns); /* Socket information for this player */
117 object_ptr ACC (RW, ob); /* The object representing the player */ 118 object_ptr ACC (RW, ob); /* The object representing the player */
118 maptile *loading; /* When entering a map in progress of loading, not really used */ 119 maptile *loading; /* When entering a map in progress of loading, not really used */
119 rangetype shoottype; /* Which range-attack is being used by player */ 120 rangetype ACC (RW, shoottype); /* Which range-attack is being used by player */
120 bowtype_t bowtype; /* which firemode? */ 121 bowtype_t ACC (RW, bowtype); /* which firemode? */
121 petmode_t petmode; /* which petmode? */ 122 petmode_t ACC (RW, petmode); /* which petmode? */
122 object_ptr ranges[range_size]; /* object for each range. Set up in fix player. Note */ 123 object_ptr ACC (RW, ranges[range_size]); /* object for each range. Set up in fix player. Note */
123 /* That not all are used, it is just nice to map this 1:1 */ 124 /* That not all are used, it is just nice to map this 1:1 */
124 /* With the range names */ 125 /* With the range names */
125 uint32 ACC (RW, golem_count); /* To track the golem */
126 usekeytype usekeys; /* Method for finding keys for doors */ 126 usekeytype ACC (RW, usekeys); /* Method for finding keys for doors */
127 unapplymode unapply; /* Method for auto unapply */ 127 unapplymode ACC (RW, unapply); /* Method for auto unapply */
128 uint32 ACC (RW, count); /* Any numbers typed before a command */ 128 uint32 ACC (RW, count); /* Any numbers typed before a command */
129 uint32 ACC (RW, mode); /* Mode of player for pickup. */ 129 uint32 ACC (RW, mode); /* Mode of player for pickup. */
130 130
131 sint8 ACC (RW, digestion); /* Any bonuses/penalties to digestion */ 131 sint8 ACC (RW, digestion); /* Any bonuses/penalties to digestion */
132 sint8 ACC (RW, gen_hp); /* Bonuses to regeneration speed of hp */ 132 sint8 ACC (RW, gen_hp); /* Bonuses to regeneration speed of hp */
133 sint8 ACC (RW, gen_sp); /* Bonuses to regeneration speed of sp */ 133 sint8 ACC (RW, gen_sp); /* Bonuses to regeneration speed of sp */
134 sint8 ACC (RW, gen_sp_armour); /* Penalty to sp regen from armour */ 134 sint8 ACC (RW, gen_sp_armour); /* Penalty to sp regen from armour */
135 sint8 ACC (RW, gen_grace); /* Bonuses to regeneration speed of grace */ 135 sint8 ACC (RW, gen_grace); /* Bonuses to regeneration speed of grace */
136 sint16 ACC (RW, item_power); /* Total item power of objects equipped */ 136 sint16 ACC (RW, item_power); /* Total item power of objects equipped */
137 uint8 ACC (RW, state); /* Input state of the player (name, password, etc */
138 uint8 ACC (RW, listening); /* Which priority will be used in info_all */ 137 uint8 ACC (RW, listening); /* Which priority will be used in info_all */
139 sint8 ACC (RW, last_level); /* Last level we sent to client */ 138 sint8 ACC (RW, last_level); /* Last level we sent to client */
140 139
141 /* 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 */
142 uint32 ACC (RO, braced):1; /* Will not move if braced, only attack */ 141 uint32 ACC (RO, braced):1; /* Will not move if braced, only attack */
143 uint32 ACC (RO, tmp_invis):1; /* Will invis go away when we attack ? */ 142 uint32 ACC (RO, tmp_invis):1; /* Will invis go away when we attack ? */
144 uint32 ACC (RO, 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 */
145 uint32 ACC (RO, fire_on):1; /* Player should fire object, not move */ 144 uint32 ACC (RO, fire_on):1; /* Player should fire object, not move */
146 uint32 ACC (RO, 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 */
147 uint32 ACC (RO, 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 */
148 uint32 ACC (RO, name_changed):1; /* If true, the player has set a name. */
149 uint32 ACC (RO, peaceful):1; /* If set, won't attack friendly creatures */ 147 uint32 ACC (RO, peaceful):1; /* If set, won't attack friendly creatures */
150 uint32 ACC (RO, hidden):1; /* If True, player (DM) is hidden from view */ 148 uint32 ACC (RO, hidden):1; /* If True, player (DM) is hidden from view */
151 uint32 ACC (RO, explore):1; /* if True, player is in explore mode */ 149 uint32 ACC (RO, explore):1; /* if True, player is in explore mode */
152 uint32 ACC (RO, no_shout):1; /* if True, player is *not* able to use shout command */
153 150
154 object_ptr last_skill_ob[NUM_SKILLS]; /* the exp object */ 151 object_ptr last_skill_ob[NUM_SKILLS]; /* the exp object */
155 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 */
156 153
157 float ACC (RW, 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 */
163 uint32 ACC (RW, last_path_repelled); /* Last spell repelled sent to client */ 160 uint32 ACC (RW, last_path_repelled); /* Last spell repelled sent to client */
164 uint32 ACC (RW, last_path_denied); /* Last spell denied sent to client */ 161 uint32 ACC (RW, last_path_denied); /* Last spell denied sent to client */
165 living ACC (RO, orig_stats); /* Permanent real stats of player */ 162 living ACC (RO, orig_stats); /* Permanent real stats of player */
166 living ACC (RO, last_stats); /* Last stats as sent to client */ 163 living ACC (RO, last_stats); /* Last stats as sent to client */
167 float ACC (RW, last_speed); /* Last speed as sent to client */ 164 float ACC (RW, last_speed); /* Last speed as sent to client */
168 sint16 last_resist[NROFATTACKS]; /* last resist values sent to client */ 165 sint16 ACC (RW, last_resist[NROFATTACKS]); /* last resist values sent to client */
169 int Swap_First; /* First stat player has selected to swap */
170 object_ptr ACC (RW, last_used); /* Pointer to object last picked or applied */ 166 object_ptr ACC (RW, last_used); /* Pointer to object last picked or applied */
171 uint32 last_used_id; /* Safety measures to be sure it's the same */
172 167
173 sint16 ACC (RW, bed_x), ACC (RW, bed_y); /* x,y - coordinates of respawn (savebed) */ 168 sint16 ACC (RW, bed_x), ACC (RW, bed_y); /* x,y - coordinates of respawn (savebed) */
174 char ACC (RW, savebed_map)[MAX_BUF]; /* map where player will respawn after death */ 169 char ACC (RW, savebed_map)[MAX_BUF]; /* map where player will respawn after death */
175 char ACC (RW, maplevel)[MAX_BUF]; /* On which level is the player? */ 170 char ACC (RW, maplevel)[MAX_BUF]; /* On which level is the player? */
176 char ACC (RW, spellparam)[MAX_BUF]; /* What param to add to spells */ 171 char ACC (RW, spellparam)[MAX_BUF]; /* What param to add to spells */
177 172
178 char ACC (RW, own_title)[MAX_NAME]; /* Title the player has chosen for themself */ 173 char ACC (RW, own_title)[MAX_NAME]; /* Title the player has chosen for themself */
179 /* Note that for dragon players, this is filled in for them */ 174 /* Note that for dragon players, this is filled in for them */
180 char ACC (RW, title)[BIG_NAME]; /* Default title, like fighter, wizard, etc */ 175 char ACC (RW, title)[64]; /* Default title, like fighter, wizard, etc */
181 176
182 sint8 levhp[11]; /* What the player gained on that level */ 177 sint8 ACC (RW, levhp[11]); /* What the player gained on that level */
183 sint8 levsp[11]; /* Same for sp */ 178 sint8 ACC (RW, levsp[11]); /* Same for sp */
184 sint8 levgrace[11]; /* And same for grace */ 179 sint8 ACC (RW, levgrace[11]); /* And same for grace */
185 180
186 char ACC (RW, killer)[BIG_NAME]; /* Who killed this player. */ 181 char ACC (RW, killer)[64]; /* Who killed this player. */
187 182
188 char write_buf[MAX_BUF]; /* Holds arbitrary input from client */ 183 char write_buf[MAX_BUF]; /* Holds arbitrary input from client */ /* should go */
189 char input_buf[MAX_BUF]; /* Holds command to run */
190 char ACC (RW, password)[16]; /* 2 (seed) + 11 (crypted) + 1 (EOS) + 2 (safety) = 16 */ 184 char ACC (RW, password)[16]; /* 2 (seed) + 11 (crypted) + 1 (EOS) + 2 (safety) = 16 */
191 185
192 time_t ACC (RW, last_save_time); 186 time_t ACC (RW, last_save_time);
193 uint32 ACC (RW, last_save_tick); 187 uint32 ACC (RW, last_save_tick);
194 partylist *ACC (RW, party); /* Party this player is part of */ 188 partylist *ACC (RW, party); /* Party this player is part of */
203 object_ptr ACC (RW, mark); /* marked object */ 197 object_ptr ACC (RW, mark); /* marked object */
204 /* Special DM fields */ 198 /* Special DM fields */
205 tag_t *stack_items; /* Item stack for patch/dump/... commands */ 199 tag_t *stack_items; /* Item stack for patch/dump/... commands */
206 int ACC (RW, stack_position); /* Current stack position, 0 for no item */ 200 int ACC (RW, stack_position); /* Current stack position, 0 for no item */
207 sint8 blocked_los[MAP_CLIENT_X][MAP_CLIENT_Y]; /* array showing what spaces */ 201 sint8 blocked_los[MAP_CLIENT_X][MAP_CLIENT_Y]; /* array showing what spaces */
208 /* the player can see. For maps smaller than */ 202 /* the player can see. For maps smaller than */
209 /* MAP_CLIENT_.., the upper left is used */ 203 /* MAP_CLIENT_.., the upper left is used */
210};
211 204
212struct player : zero_initialised, attachable<player>, player_pod 205 shstr ACC (RW, invis_race); /* What race invisible to? */
213{ 206 bool ACC (RW, enable_save);
214 player *next; /* Pointer to next player, NULL if this is last */
215 NewSocket socket; /* Socket information for this player */
216 Output_Buf outputs[NUM_OUTPUT_BUFS]; /* holds output strings to client */ 207 Output_Buf outputs[NUM_OUTPUT_BUFS]; /* holds output strings to client */
217 shstr invis_race; /* What race invisible to? */
218 208
219 void clear () 209 static player *create ();
220 { 210 static player *load (const char *path);
221 memset (static_cast < player_pod * >(this), 0, sizeof (player_pod)); 211 void save (bool final = false);
222 attachable_clear (); 212 void do_destroy ();
223 invis_race = 0; 213 void gather_callbacks (AV *&callbacks, event_type event) const;
224 214
225 for (int i = 0; i < NUM_OUTPUT_BUFS; i++) 215 void connect (client *ns);
226 outputs[i].buf = 0; 216 void disconnect ();
227 }
228};
229 217
218 ~player ();
219
220private:
221 void set_object (object *op);
222 player ();
223};
224

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines