ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/login.C
(Generate patch)

Comparing deliantra/server/server/login.C (file contents):
Revision 1.37 by root, Sun Dec 31 21:02:05 2006 UTC vs.
Revision 1.38 by root, Sun Dec 31 21:26:19 2006 UTC

191 pl->last_save_time = time (0); 191 pl->last_save_time = time (0);
192 192
193 pl->savebed_map = first_map_path; 193 pl->savebed_map = first_map_path;
194 194
195 /* Loop through the file, loading the rest of the values */ 195 /* Loop through the file, loading the rest of the values */
196 while (fgets (bufall, MAX_BUF, thawer)) 196 for (;;)
197 { 197 {
198 int value; 198 keyword kw = thawer.get_kv ();
199 sscanf (bufall, "%s %d\n", buf, &value);
200 199
201 if (!strcmp (buf, "endplst")) 200 switch (kw)
202 break;
203 else if (!strcmp (buf, "oid"))
204 thawer.get (pl, value);
205 else if (!strcmp (buf, "password"))
206 sscanf (bufall, "password %[^\n]", pl->password);
207 else if (!strcmp (buf, "title"))
208 sscanf (bufall, "title %[^\n]", pl->own_title);
209 else if (!strcmp (buf, "explore"))
210 pl->explore = value;
211 else if (!strcmp (buf, "gen_hp"))
212 pl->gen_hp = value;
213 else if (!strcmp (buf, "shoottype"))
214 pl->shoottype = (rangetype) value;
215 else if (!strcmp (buf, "bowtype"))
216 pl->bowtype = (bowtype_t) value;
217 else if (!strcmp (buf, "petmode"))
218 pl->petmode = (petmode_t) value;
219 else if (!strcmp (buf, "gen_sp"))
220 pl->gen_sp = value;
221 else if (!strcmp (buf, "gen_grace"))
222 pl->gen_grace = value;
223 else if (!strcmp (buf, "listening"))
224 pl->listening = value;
225 else if (!strcmp (buf, "peaceful"))
226 pl->peaceful = value;
227 else if (!strcmp (buf, "digestion"))
228 pl->digestion = value;
229 else if (!strcmp (buf, "pickup"))
230 pl->mode = value;
231 else if (!strcmp (buf, "outputs_sync"))
232 pl->outputs_sync = value;
233 else if (!strcmp (buf, "outputs_count"))
234 pl->outputs_count = value;
235 else if (!strcmp (buf, "map"))
236 { 201 {
237 //TODO: use thawer 202 case KW_ERROR:
238 char buf[8192]; 203 case KW_EOF:
239 sscanf (bufall, "map %s", buf); 204 LOG (llevError, "%s: error while reading player header\n", path);
240 pl->maplevel = buf; 205 return 0;
206
207 case KW_endplst:
208 goto done;
209
210 case KW_oid: thawer.get (pl, thawer.get_sint32 ()); break;
211 case KW_password: assign (pl->password , thawer.get_str ()); break;
212 case KW_title: assign (pl->own_title, thawer.get_str ()); break;
213 case KW_shoottype: pl->shoottype = (rangetype) thawer.get_sint32 (); break;
214 case KW_bowtype: pl->bowtype = (bowtype_t) thawer.get_sint32 (); break;
215 case KW_petmode: pl->petmode = (petmode_t) thawer.get_sint32 (); break;
216 case KW_explore: thawer.get (pl->explore); break;
217 case KW_listening: thawer.get (pl->listening); break;
218 case KW_peaceful: thawer.get (pl->peaceful); break;
219 case KW_digestion: thawer.get (pl->digestion); break;
220 case KW_pickup: thawer.get (pl->mode); break;
221 case KW_outputs_sync: thawer.get (pl->outputs_sync); break;
222 case KW_outputs_count: thawer.get (pl->outputs_count); break;
223 case KW_map: thawer.get (pl->maplevel); break;
224 case KW_savebed_map: thawer.get (pl->savebed_map); break;
225 case KW_bed_x: thawer.get (pl->bed_x); break;
226 case KW_bed_y: thawer.get (pl->bed_y); break;
227 case KW_weapon_sp: thawer.get (pl->weapon_sp); break;
228 case KW_Str: thawer.get (pl->orig_stats.Str); break;
229 case KW_Dex: thawer.get (pl->orig_stats.Dex); break;
230 case KW_Con: thawer.get (pl->orig_stats.Con); break;
231 case KW_Int: thawer.get (pl->orig_stats.Int); break;
232 case KW_Pow: thawer.get (pl->orig_stats.Pow); break;
233 case KW_Wis: thawer.get (pl->orig_stats.Wis); break;
234 case KW_Cha: thawer.get (pl->orig_stats.Cha); break;
235 case KW_gen_hp: thawer.get (pl->gen_hp); break;
236 case KW_gen_sp: thawer.get (pl->gen_sp); break;
237 case KW_gen_grace: thawer.get (pl->gen_grace); break;
238
239 case KW_usekeys:
240 if (!strcmp (thawer.get_str (), "key_inventory"))
241 pl->usekeys = key_inventory;
242 else if (!strcmp (thawer.get_str (), "keyrings"))
243 pl->usekeys = keyrings;
244 else if (!strcmp (thawer.get_str (), "containers"))
245 pl->usekeys = containers;
246 else
247 LOG (llevDebug, "load_player: got unknown usekeys type: %s\n", thawer.get_str ());
248 break;
249
250 case KW_unapply:
251 if (!strcmp (thawer.get_str (), "unapply_nochoice"))
252 pl->unapply = unapply_nochoice;
253 else if (!strcmp (thawer.get_str (), "unapply_never"))
254 pl->unapply = unapply_never;
255 else if (!strcmp (thawer.get_str (), "unapply_always"))
256 pl->unapply = unapply_always;
257 else
258 LOG (llevDebug, "load_player: got unknown unapply type: %s\n", thawer.get_str ());
259 break;
260
261 case KW_lev_array:
262 {
263 int count = thawer.get_sint32 ();
264
265 for (int i = 1; i <= count; i++)
266 {
267 char line[128];
268
269 fgets (line, 128, thawer); pl->levhp [i] = atoi (line);
270 fgets (line, 128, thawer); pl->levsp [i] = atoi (line);
271 fgets (line, 128, thawer); pl->levgrace[i] = atoi (line);
272 }
273 }
274 break;
275
276 default:
277 LOG (llevError, "%s: skipping unknown key in player header: %s\n", path, keyword_str [kw]);
278 break;
241 } 279 }
242 else if (!strcmp (buf, "savebed_map"))
243 {
244 //TODO: use thawer
245 char buf[8192];
246 sscanf (bufall, "savebed_map %s", buf);
247 pl->savebed_map = buf;
248 }
249 else if (!strcmp (buf, "bed_x"))
250 pl->bed_x = value;
251 else if (!strcmp (buf, "bed_y"))
252 pl->bed_y = value;
253 else if (!strcmp (buf, "weapon_sp"))
254 sscanf (buf, "weapon_sp %f", &pl->weapon_sp);
255 else if (!strcmp (buf, "Str"))
256 pl->orig_stats.Str = value;
257 else if (!strcmp (buf, "Dex"))
258 pl->orig_stats.Dex = value;
259 else if (!strcmp (buf, "Con"))
260 pl->orig_stats.Con = value;
261 else if (!strcmp (buf, "Int"))
262 pl->orig_stats.Int = value;
263 else if (!strcmp (buf, "Pow"))
264 pl->orig_stats.Pow = value;
265 else if (!strcmp (buf, "Wis"))
266 pl->orig_stats.Wis = value;
267 else if (!strcmp (buf, "Cha"))
268 pl->orig_stats.Cha = value;
269 else if (!strcmp (buf, "usekeys"))
270 {
271 if (!strcmp (bufall + 8, "key_inventory\n"))
272 pl->usekeys = key_inventory;
273 else if (!strcmp (bufall + 8, "keyrings\n"))
274 pl->usekeys = keyrings;
275 else if (!strcmp (bufall + 8, "containers\n"))
276 pl->usekeys = containers;
277 else
278 LOG (llevDebug, "load_player: got unknown usekeys type: %s\n", bufall + 8);
279 }
280 else if (!strcmp (buf, "unapply"))
281 {
282 if (!strcmp (bufall + 8, "unapply_nochoice\n"))
283 pl->unapply = unapply_nochoice;
284 else if (!strcmp (bufall + 8, "unapply_never\n"))
285 pl->unapply = unapply_never;
286 else if (!strcmp (bufall + 8, "unapply_always\n"))
287 pl->unapply = unapply_always;
288 else
289 LOG (llevDebug, "load_player: got unknown unapply type: %s\n", bufall + 8);
290 }
291 else if (!strcmp (buf, "lev_array"))
292 {
293 for (int i = 1; i <= value; i++)
294 {
295 char line[128];
296
297 fgets (line, 128, thawer);
298 pl->levhp[i] = atoi (line);
299 fgets (line, 128, thawer);
300 pl->levsp[i] = atoi (line);
301 fgets (line, 128, thawer);
302 pl->levgrace[i] = atoi (line);
303 }
304 /* spell_array code removed - don't know when that was last used.
305 * Even the load code below will someday be replaced by spells being
306 * objects.
307 */
308 }
309 else
310 LOG (llevDebug, "unparseable line in player file %s: %s\n", path, bufall);
311 } 280 }
312 281
282done:
313 /* this loads the standard objects values. */ 283 /* this loads the standard objects values. */
314 load_object (thawer, pl->ob, 0); 284 load_object (thawer, pl->ob, 0);
315 285
316 pl->last_save_tick = pticks; 286 pl->last_save_tick = pticks;
317 287

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines