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.20 by root, Sat Dec 9 16:11:09 2006 UTC vs.
Revision 1.44 by root, Mon Jan 8 18:18:35 2007 UTC

1
2/* 1/*
3 CrossFire, A Multiplayer game for X-windows 2 CrossFire, A Multiplayer game for X-windows
4 3
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
8 This program is free software; you can redistribute it and/or modify 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 9 it under the terms of the GNU General Public License as published by
17 17
18 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
19 along with this program; if not, write to the Free Software 19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 21
22 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
23*/ 23*/
24 24
25#define NUM_OUTPUT_BUFS 5 25#define NUM_OUTPUT_BUFS 5
26struct Output_Buf 26struct Output_Buf
27{ 27{
89 /* 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 */
90 /* to control which of these will be unapplied. */ 90 /* to control which of these will be unapplied. */
91}; 91};
92 92
93/* not really the player, but tied pretty closely */ 93/* not really the player, but tied pretty closely */
94INTERFACE_CLASS (partylist)
94struct partylist 95struct partylist
95{ 96{
96 char *partyleader; 97 char *ACC (RW, partyleader);
97 char passwd[9]; 98 char ACC (RW, passwd)[9];
98 partylist *next; 99 partylist *ACC (RW, next);
99 char *partyname; 100 char *ACC (RW, partyname);
100 101
101#ifdef PARTY_KILL_LOG
102 struct party_kill 102 struct party_kill
103 { 103 {
104 char killer[MAX_NAME + 1], dead[MAX_NAME + 1]; 104 char killer[MAX_NAME + 1], dead[MAX_NAME + 1];
105 sint64 exp; 105 sint64 exp;
106 } party_kills[PARTY_KILL_LOG]; 106 } party_kills[PARTY_KILL_LOG];
107#endif 107
108 sint64 total_exp; 108 sint64 ACC (RW, total_exp);
109 uint32 kills; 109 uint32 ACC (RW, kills);
110}; 110};
111 111
112ACC_CLASS (player) 112INTERFACE_CLASS (player)
113 113struct player : zero_initialised, attachable
114// memsettable part of player
115struct player_pod
116{ 114{
115 client *ACC (RO, ns); /* Socket information for this player */
117 object_ptr ACC (RW, ob); /* The object representing the player */ 116 object *ACC (RW, ob); /* The object representing the player */
118 maptile *loading; /* When entering a map in progress of loading, not really used */ 117 int ACC (RO, active);
118
119 rangetype shoottype; /* Which range-attack is being used by player */ 119 rangetype ACC (RW, shoottype); /* Which range-attack is being used by player */
120 bowtype_t bowtype; /* which firemode? */ 120 bowtype_t ACC (RW, bowtype); /* which firemode? */
121 petmode_t petmode; /* which petmode? */ 121 petmode_t ACC (RW, petmode); /* which petmode? */
122 object_ptr ranges[range_size]; /* object for each range. Set up in fix player. Note */ 122 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 */ 123 /* That not all are used, it is just nice to map this 1:1 */
124 /* With the range names */ 124 /* With the range names */
125 usekeytype usekeys; /* Method for finding keys for doors */ 125 usekeytype ACC (RW, usekeys); /* Method for finding keys for doors */
126 unapplymode unapply; /* Method for auto unapply */ 126 unapplymode ACC (RW, unapply); /* Method for auto unapply */
127 uint32 ACC (RW, count); /* Any numbers typed before a command */ 127 uint32 ACC (RW, count); /* Any numbers typed before a command */
128 uint32 ACC (RW, mode); /* Mode of player for pickup. */ 128 uint32 ACC (RW, mode); /* Mode of player for pickup. */
129 129
130 sint8 ACC (RW, digestion); /* Any bonuses/penalties to digestion */ 130 sint8 ACC (RW, digestion); /* Any bonuses/penalties to digestion */
131 sint8 ACC (RW, gen_hp); /* Bonuses to regeneration speed of hp */ 131 sint8 ACC (RW, gen_hp); /* Bonuses to regeneration speed of hp */
132 sint8 ACC (RW, gen_sp); /* Bonuses to regeneration speed of sp */ 132 sint8 ACC (RW, gen_sp); /* Bonuses to regeneration speed of sp */
133 sint8 ACC (RW, gen_sp_armour); /* Penalty to sp regen from armour */ 133 sint8 ACC (RW, gen_sp_armour); /* Penalty to sp regen from armour */
134 sint8 ACC (RW, gen_grace); /* Bonuses to regeneration speed of grace */ 134 sint8 ACC (RW, gen_grace); /* Bonuses to regeneration speed of grace */
135 sint16 ACC (RW, item_power); /* Total item power of objects equipped */ 135 sint16 ACC (RW, item_power); /* Total item power of objects equipped */
136 uint8 ACC (RW, state); /* Input state of the player (name, password, etc */
137 uint8 ACC (RW, listening); /* Which priority will be used in info_all */ 136 uint8 ACC (RW, listening); /* Which priority will be used in info_all */
138 sint8 ACC (RW, last_level); /* Last level we sent to client */
139 137
140 /* Try to put all the bitfields together - saves some small amount of memory */ 138 /* Try to put all the bitfields together - saves some small amount of memory */
141 uint32 ACC (RO, braced):1; /* Will not move if braced, only attack */ 139 bool ACC (RW, braced); /* Will not move if braced, only attack */
142 uint32 ACC (RO, tmp_invis):1; /* Will invis go away when we attack ? */ 140 bool ACC (RW, tmp_invis); /* Will invis go away when we attack ? */
143 uint32 ACC (RO, do_los):1; /* If true, need to call update_los() in draw(), and clear */ 141 bool ACC (RW, do_los); /* If true, need to call update_los() in draw(), and clear */
144 uint32 ACC (RO, fire_on):1; /* Player should fire object, not move */ 142 bool ACC (RW, fire_on); /* Player should fire object, not move */
145 uint32 ACC (RO, run_on):1; /* Player should keep moving in dir until run is off */ 143 bool ACC (RW, run_on); /* Player should keep moving in dir until run is off */
146 uint32 ACC (RO, has_hit):1; /* If set, weapon_sp instead of speed will count */ 144 bool ACC (RW, has_hit); /* If set, weapon_sp instead of speed will count */
147 uint32 ACC (RO, name_changed):1; /* If true, the player has set a name. */
148 uint32 ACC (RO, peaceful):1; /* If set, won't attack friendly creatures */ 145 bool ACC (RW, peaceful); /* If set, won't attack friendly creatures */
149 uint32 ACC (RO, hidden):1; /* If True, player (DM) is hidden from view */ 146 bool ACC (RW, hidden); /* If True, player (DM) is hidden from view */
150 uint32 ACC (RO, explore):1; /* if True, player is in explore mode */
151 uint32 ACC (RO, no_shout):1; /* if True, player is *not* able to use shout command */
152
153 object_ptr last_skill_ob[NUM_SKILLS]; /* the exp object */
154 sint64 last_skill_exp[NUM_SKILLS]; /* shadow register. if != exp. obj update client */
155 147
156 float ACC (RW, weapon_sp); /* Penalties to speed when fighting w speed >ws/10 */ 148 float ACC (RW, weapon_sp); /* Penalties to speed when fighting w speed >ws/10 */
157 float ACC (RW, last_weapon_sp); /* if diff than weapon_sp, update client */
158 uint16 ACC (RW, last_flags); /* fire/run on flags for last tick */
159 sint32 ACC (RW, last_weight); /* Last weight as sent to client; -1 means do not send weight */
160 sint32 ACC (RW, last_weight_limit); /* Last weight limit transmitted to client */
161 uint32 ACC (RW, last_path_attuned); /* Last spell attunment sent to client */
162 uint32 ACC (RW, last_path_repelled); /* Last spell repelled sent to client */
163 uint32 ACC (RW, last_path_denied); /* Last spell denied sent to client */
164 living ACC (RO, orig_stats); /* Permanent real stats of player */ 149 living ACC (RO, orig_stats); /* Permanent real stats of player */
165 living ACC (RO, last_stats); /* Last stats as sent to client */ 150 object_ptr last_skill_ob[NUM_SKILLS]; /* the exp object */
166 float ACC (RW, last_speed); /* Last speed as sent to client */
167 sint16 last_resist[NROFATTACKS]; /* last resist values sent to client */
168 int Swap_First; /* First stat player has selected to swap */
169 object_ptr ACC (RW, last_used); /* Pointer to object last picked or applied */ 151 object_ptr ACC (RW, last_used); /* Pointer to object last picked or applied */
170 uint32 last_used_id; /* Safety measures to be sure it's the same */
171 152
172 sint16 ACC (RW, bed_x), ACC (RW, bed_y); /* x,y - coordinates of respawn (savebed) */ 153 sint16 ACC (RW, bed_x), ACC (RW, bed_y); /* x,y - coordinates of respawn (savebed) */
173 char ACC (RW, savebed_map)[MAX_BUF]; /* map where player will respawn after death */ 154 shstr ACC (RW, savebed_map); /* map where player will respawn after death */
174 char ACC (RW, maplevel)[MAX_BUF]; /* On which level is the player? */ 155 shstr ACC (RW, maplevel); /* On which level is the player? */
175 char ACC (RW, spellparam)[MAX_BUF]; /* What param to add to spells */ 156 char ACC (RW, spellparam)[MAX_BUF]; /* What param to add to spells */
176 157
177 char ACC (RW, own_title)[MAX_NAME]; /* Title the player has chosen for themself */ 158 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 */ 159 /* Note that for dragon players, this is filled in for them */
179 char ACC (RW, title)[64]; /* Default title, like fighter, wizard, etc */ 160 char ACC (RW, title)[64]; /* Default title, like fighter, wizard, etc */
180 161
181 sint8 levhp[11]; /* What the player gained on that level */ 162 sint8 ACC (RW, levhp[11]); /* What the player gained on that level */
182 sint8 levsp[11]; /* Same for sp */ 163 sint8 ACC (RW, levsp[11]); /* Same for sp */
183 sint8 levgrace[11]; /* And same for grace */ 164 sint8 ACC (RW, levgrace[11]); /* And same for grace */
184 165
185 char ACC (RW, killer)[64]; /* Who killed this player. */ 166 char ACC (RW, killer)[64]; /* Who killed this player. */
186 167
187 char write_buf[MAX_BUF]; /* Holds arbitrary input from client */ 168 char write_buf[MAX_BUF]; /* Holds arbitrary input from client */ /* should go */
188 char input_buf[MAX_BUF]; /* Holds command to run */
189 char ACC (RW, password)[16]; /* 2 (seed) + 11 (crypted) + 1 (EOS) + 2 (safety) = 16 */ 169 char ACC (RW, password)[16]; /* 2 (seed) + 11 (crypted) + 1 (EOS) + 2 (safety) = 16 */
190 170
191 time_t ACC (RW, last_save_time);
192 uint32 ACC (RW, last_save_tick);
193 partylist *ACC (RW, party); /* Party this player is part of */ 171 partylist *ACC (RW, party); /* Party this player is part of */
194 partylist *ACC (RW, party_to_join); /* used when player wants to join a party */ 172 partylist *ACC (RW, party_to_join); /* used when player wants to join a party */
195 /* but we will have to get password first */ 173 /* but we will have to get password first */
196 /* so we have to remember which party to */ 174 /* so we have to remember which party to */
197 /* join */ 175 /* join */
202 object_ptr ACC (RW, mark); /* marked object */ 180 object_ptr ACC (RW, mark); /* marked object */
203 /* Special DM fields */ 181 /* Special DM fields */
204 tag_t *stack_items; /* Item stack for patch/dump/... commands */ 182 tag_t *stack_items; /* Item stack for patch/dump/... commands */
205 int ACC (RW, stack_position); /* Current stack position, 0 for no item */ 183 int ACC (RW, stack_position); /* Current stack position, 0 for no item */
206 sint8 blocked_los[MAP_CLIENT_X][MAP_CLIENT_Y]; /* array showing what spaces */ 184 sint8 blocked_los[MAP_CLIENT_X][MAP_CLIENT_Y]; /* array showing what spaces */
207 /* the player can see. For maps smaller than */ 185 /* the player can see. For maps smaller than */
208 /* MAP_CLIENT_.., the upper left is used */ 186 /* MAP_CLIENT_.., the upper left is used */
209};
210 187
211struct player : zero_initialised, attachable<player>, player_pod 188 shstr ACC (RW, invis_race); /* What race invisible to? */
212{
213 player *next; /* Pointer to next player, NULL if this is last */
214 NewSocket socket; /* Socket information for this player */
215 Output_Buf outputs[NUM_OUTPUT_BUFS]; /* holds output strings to client */ 189 Output_Buf outputs[NUM_OUTPUT_BUFS]; /* holds output strings to client */
216 shstr invis_race; /* What race invisible to? */
217 190
218 void clear () 191 MTH static player *create ();
219 {
220 memset (static_cast < player_pod * >(this), 0, sizeof (player_pod));
221 attachable_clear ();
222 invis_race = 0;
223 192
224 for (int i = 0; i < NUM_OUTPUT_BUFS; i++) 193 static player *load_pl (object_thawer &thawer);
225 outputs[i].buf = 0; 194 MTH static player *load_pl (const char *path);
226 }
227};
228 195
196 bool save_pl (object_freezer &freezer);
197 MTH bool save_pl (const char *path);
198
199 void do_destroy ();
200 void gather_callbacks (AV *&callbacks, event_type event) const;
201
202 MTH void connect (client *ns);
203 MTH void disconnect ();
204
205 MTH void activate ();
206 MTH void deactivate ();
207
208 // enters the initial map, after login or creation
209 MTH void enter_map ();
210
211 ~player ();
212
213private:
214 void set_object (object *op);
215 player ();
216};
217
218typedef object_vector<player, &player::active> playervec;
219
220extern playervec players;
221
222#define for_all_players(var) \
223 for (int _i = 0; _i < players.size (); ++_i) \
224 declvar (player *, var, players [_i])
225

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines