… | |
… | |
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 | |
|
|
282 | done: |
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 | |