#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <malloc.h>
#include "merc.h"
#include "recycle.h"
#include "tables.h"
#include "lookup.h"
Include dependency graph for save.c:

Go to the source code of this file.
Defines | |
| #define | KEY(literal, field, value) |
| #define | KEYS(literal, field, value) |
| #define | MAX_NEST 100 |
Functions | |
| void fwrite_pet | args ((CHAR_DATA *pet, FILE *fp)) |
| void fwrite_obj | args ((CHAR_DATA *ch, OBJ_DATA *obj, FILE *fp, int iNest)) |
| void fwrite_char | args ((CHAR_DATA *ch, FILE *fp)) |
| int _filbuf | args ((FILE *)) |
| void | do_save_class (char *ch, char *argument) |
| void | fread_char (CHAR_DATA *ch, FILE *fp) |
| void | fread_obj (CHAR_DATA *ch, FILE *fp) |
| void | fread_pet (CHAR_DATA *ch, FILE *fp) |
| void | fwrite_char (CHAR_DATA *ch, FILE *fp) |
| void | fwrite_obj (CHAR_DATA *ch, OBJ_DATA *obj, FILE *fp, int iNest) |
| void | fwrite_pet (CHAR_DATA *pet, FILE *fp) |
| bool | load_char_obj (DESCRIPTOR_DATA *d, char *name) |
| void | load_game_conf () |
| char * | print_flags (int flag) |
| void | save_char_obj (CHAR_DATA *ch) |
| void | save_clan_data () |
| void | save_game_conf () |
| void | save_kingdom_data () |
| void | save_socials () |
Variables | |
| OBJ_DATA * | obj_free |
| static OBJ_DATA * | rgObjNest [MAX_NEST] |
|
|
Value: |
|
|
Value: if ( !str_cmp( word, literal ) ) \ { \ free_string(field); \ field = value; \ fMatch = TRUE; \ break; \ } Definition at line 992 of file save.c. Referenced by fread_char(). |
|
|
Definition at line 83 of file save.c. Referenced by fread_obj(), and load_char_obj(). |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
Definition at line 2060 of file save.c. References class_table, LEVEL_IMMORTAL, MAX_CLASS, MAX_SKILL, MAX_STRING_LENGTH, and skill_table. Referenced by do_setskill(), and null_class(). 02061 {
02062 FILE *fp;
02063 char buf[MAX_STRING_LENGTH];
02064 int i,sn;
02065 for( i = 0; i < MAX_CLASS; i++ )
02066 {
02067 sprintf( buf, "./class/%s.class", class_table[i].name );
02068 fp = fopen( buf, "w" );
02069 fprintf( fp, "#CLASS\n" );
02070 fprintf( fp, "Name %s~\n", class_table[i].name );
02071 fprintf( fp, "WhoN %s\n", class_table[i].who_name );
02072 fprintf( fp, "Prime %d\n", class_table[i].attr_prime );
02073 fprintf( fp, "Weapon %d\n", class_table[i].weapon );
02074 fprintf( fp, "Guild1 %d\n", class_table[i].guild[0] );
02075 fprintf( fp, "Guild2 %d\n", class_table[i].guild[1] );
02076 fprintf( fp, "Skill %d\n", class_table[i].skill_adept );
02077 fprintf( fp, "Thac00 %d\n", class_table[i].thac0_00 );
02078 fprintf( fp, "Thac32 %d\n", class_table[i].thac0_32 );
02079 fprintf( fp, "HPMin %d\n", class_table[i].hp_min );
02080 fprintf( fp, "HPMax %d\n", class_table[i].hp_max );
02081 fprintf( fp, "FMana %d\n", class_table[i].fMana );
02082 fprintf( fp, "Pick %d\n", class_table[i].pick );
02083 fprintf( fp, "Base %s~\n", class_table[i].base_group );
02084 fprintf( fp, "Default %s~\n", class_table[i].default_group );
02085 fprintf( fp, "End\n" );
02086 fprintf( fp, "#SKILLS\n" );
02087 for( sn = 0; sn < MAX_SKILL; sn++ )
02088 {
02089 if ( skill_table[sn].name == NULL )
02090 break;
02091 if ( skill_table[sn].skill_level[i] < LEVEL_IMMORTAL )
02092 {
02093 fprintf( fp, "%s~\n%d %d\n", skill_table[sn].name, skill_table[sn].skill_level[i],
02094 skill_table[sn].rating[i] );
02095 }
02096 }
02097 fprintf( fp, "End~\n" );
02098 fprintf( fp, "#END\n" );
02099 fclose( fp );
02100 }
02101
02102 } /* save_classes */
|
|
||||||||||||
|
Definition at line 1001 of file save.c. References AFF_PLAGUE, AFF_POISON, pc_data::alias, pc_data::alias_sub, affect_data::bitvector, bug(), clan_lookup(), current_time, affect_data::duration, FALSE, fread_flag(), fread_number(), fread_string(), fread_to_eol(), fread_word(), free_string(), get_mob_index(), get_room_index(), gn_add(), group_lookup(), IS_AFFECTED, KEY, KEYS, kingdom_lookup(), affect_data::level, affect_data::location, log_string(), MAX_ALIAS, MAX_CLASS, MAX_STATS, MAX_STRING_LENGTH, affect_data::modifier, new_affect(), affect_data::next, char_data::pcdata, race_lookup(), ROOM_VNUM_LIMBO, skill_lookup(), str_cmp(), str_dup(), TRUE, affect_data::type, UMIN, UPPER, and affect_data::where. Referenced by load_char_obj(). 01002 {
01003 char buf[MAX_STRING_LENGTH];
01004 char *word;
01005 bool fMatch;
01006 int count = 0;
01007 int lastlogoff = current_time;
01008 int percent;
01009
01010 sprintf (buf, "Loading %s.", ch->name);
01011 log_string (buf);
01012
01013 for (;;)
01014 {
01015 word = feof (fp) ? "End" : fread_word (fp);
01016 fMatch = FALSE;
01017
01018 switch (UPPER (word[0]))
01019 {
01020 case '*':
01021 fMatch = TRUE;
01022 fread_to_eol (fp);
01023 break;
01024
01025 case 'A':
01026 KEY ("Act", ch->act, fread_flag (fp));
01027 KEY ("AffectedBy", ch->affected_by, fread_flag (fp));
01028 KEY ("AfBy", ch->affected_by, fread_flag (fp));
01029 KEY ("Age", ch->pcdata->plr_age, fread_number (fp));
01030 KEY ("Alignment", ch->alignment, fread_number (fp));
01031 KEY ("Alig", ch->alignment, fread_number (fp));
01032
01033 if (!str_cmp (word, "Alia"))
01034 {
01035 if (count >= MAX_ALIAS)
01036 {
01037 fread_to_eol (fp);
01038 fMatch = TRUE;
01039 break;
01040 }
01041
01042 ch->pcdata->alias[count] = str_dup (fread_word (fp));
01043 ch->pcdata->alias_sub[count] = str_dup (fread_word (fp));
01044 count++;
01045 fMatch = TRUE;
01046 break;
01047 }
01048
01049 if (!str_cmp (word, "Alias"))
01050 {
01051 if (count >= MAX_ALIAS)
01052 {
01053 fread_to_eol (fp);
01054 fMatch = TRUE;
01055 break;
01056 }
01057
01058 ch->pcdata->alias[count] = str_dup (fread_word (fp));
01059 ch->pcdata->alias_sub[count] = fread_string (fp);
01060 count++;
01061 fMatch = TRUE;
01062 break;
01063 }
01064
01065 if (!str_cmp (word, "AC") || !str_cmp (word, "Armor"))
01066 {
01067 fread_to_eol (fp);
01068 fMatch = TRUE;
01069 break;
01070 }
01071
01072 if (!str_cmp (word, "ACs"))
01073 {
01074 int i;
01075
01076 for (i = 0; i < 4; i++)
01077 ch->armor[i] = fread_number (fp);
01078 fMatch = TRUE;
01079 break;
01080 }
01081
01082 if (!str_cmp (word, "AffD"))
01083 {
01084 AFFECT_DATA *paf;
01085 int sn;
01086
01087 paf = new_affect ();
01088
01089 sn = skill_lookup (fread_word (fp));
01090 if (sn < 0)
01091 bug ("Fread_char: unknown skill.", 0);
01092 else
01093 paf->type = sn;
01094
01095 paf->level = fread_number (fp);
01096 paf->duration = fread_number (fp);
01097 paf->modifier = fread_number (fp);
01098 paf->location = fread_number (fp);
01099 paf->bitvector = fread_number (fp);
01100 paf->next = ch->affected;
01101 ch->affected = paf;
01102 fMatch = TRUE;
01103 break;
01104 }
01105
01106 if (!str_cmp (word, "Affc"))
01107 {
01108 AFFECT_DATA *paf;
01109 int sn;
01110
01111 paf = new_affect ();
01112
01113 sn = skill_lookup (fread_word (fp));
01114 if (sn < 0)
01115 bug ("Fread_char: unknown skill.", 0);
01116 else
01117 paf->type = sn;
01118
01119 paf->where = fread_number (fp);
01120 paf->level = fread_number (fp);
01121 paf->duration = fread_number (fp);
01122 paf->modifier = fread_number (fp);
01123 paf->location = fread_number (fp);
01124 paf->bitvector = fread_number (fp);
01125 paf->next = ch->affected;
01126 ch->affected = paf;
01127 fMatch = TRUE;
01128 break;
01129 }
01130
01131 if (!str_cmp (word, "AttrMod") || !str_cmp (word, "AMod"))
01132 {
01133 int stat;
01134 for (stat = 0; stat < MAX_STATS; stat++)
01135 ch->mod_stat[stat] = fread_number (fp);
01136 fMatch = TRUE;
01137 break;
01138 }
01139
01140 if (!str_cmp (word, "AttrPerm") || !str_cmp (word, "Attr"))
01141 {
01142 int stat;
01143
01144 for (stat = 0; stat < MAX_STATS; stat++)
01145 ch->perm_stat[stat] = fread_number (fp);
01146 fMatch = TRUE;
01147 break;
01148 }
01149 break;
01150
01151 case 'B':
01152 KEY ("Bamfin", ch->pcdata->bamfin, fread_string (fp));
01153 KEY ("Bamfout", ch->pcdata->bamfout, fread_string (fp));
01154 KEY ("Bin", ch->pcdata->bamfin, fread_string (fp));
01155 KEY ("Bout", ch->pcdata->bamfout, fread_string (fp));
01156 KEY ("Bodytype", ch->pcdata->bodytype, fread_string(fp));
01157
01158 break;
01159
01160 case 'C':
01161 KEY ("Class", ch->class, fread_number (fp));
01162 KEY ("Cla", ch->class, fread_number (fp));
01163 /*f (ch->class != 0)
01164 {
01165 if (class_lookup[ch->class] == -1 || (ch->class > MAX_CLASS))
01166 ch->class = 1;
01167 }*/
01168 KEY ("Clan", ch->clan, clan_lookup (fread_string (fp)));
01169 KEY ("Comm", ch->comm, fread_flag (fp));
01170 KEY ("Chann", ch->chann, fread_flag (fp));
01171 KEY ("CClan", ch->cclan, fread_flag (fp));
01172 if (!str_cmp (word, "Condition") || !str_cmp (word, "Cond"))
01173 {
01174 ch->pcdata->condition[0] = fread_number (fp);
01175 ch->pcdata->condition[1] = fread_number (fp);
01176 ch->pcdata->condition[2] = fread_number (fp);
01177 fMatch = TRUE;
01178 break;
01179 }
01180 if (!str_cmp (word, "Cnd"))
01181 {
01182 ch->pcdata->condition[0] = fread_number (fp);
01183 ch->pcdata->condition[1] = fread_number (fp);
01184 ch->pcdata->condition[2] = fread_number (fp);
01185 ch->pcdata->condition[3] = fread_number (fp);
01186 fMatch = TRUE;
01187 break;
01188 }
01189
01190 /*if (!str_cmp (word, "Coloura"))
01191 {
01192 LOAD_COLOUR (text)
01193 LOAD_COLOUR (auction)
01194 LOAD_COLOUR (gossip)
01195 LOAD_COLOUR (music)
01196 LOAD_COLOUR (question) fMatch = TRUE;
01197 break;
01198 }
01199 if (!str_cmp (word, "Colourb"))
01200 {
01201 LOAD_COLOUR (answer)
01202 LOAD_COLOUR (quote)
01203 LOAD_COLOUR (quote_text)
01204 LOAD_COLOUR (immtalk_text)
01205 LOAD_COLOUR (immtalk_type) fMatch = TRUE;
01206 break;
01207 }
01208 if (!str_cmp (word, "Colourc"))
01209 {
01210 LOAD_COLOUR (info)
01211 LOAD_COLOUR (tell)
01212 LOAD_COLOUR (reply)
01213 LOAD_COLOUR (gtell_text)
01214 LOAD_COLOUR (gtell_type) fMatch = TRUE;
01215 break;
01216 }
01217 if (!str_cmp (word, "Colourd"))
01218 {
01219 LOAD_COLOUR (room_title)
01220 LOAD_COLOUR (room_text)
01221 LOAD_COLOUR (room_exits)
01222 LOAD_COLOUR (room_things)
01223 LOAD_COLOUR (prompt) fMatch = TRUE;
01224 break;
01225 }
01226 if (!str_cmp (word, "Coloure"))
01227 {
01228 LOAD_COLOUR (fight_death)
01229 LOAD_COLOUR (fight_yhit)
01230 LOAD_COLOUR (fight_ohit)
01231 LOAD_COLOUR (fight_thit)
01232 LOAD_COLOUR (fight_skill) fMatch = TRUE;
01233 break;
01234 }
01235 if (!str_cmp (word, "Colourf"))
01236 {
01237 LOAD_COLOUR (wiznet)
01238 LOAD_COLOUR (say)
01239 LOAD_COLOUR (say_text)
01240 LOAD_COLOUR (tell_text)
01241 LOAD_COLOUR (reply_text) fMatch = TRUE;
01242 break;
01243 }
01244 if (!str_cmp (word, "Colourg"))
01245 {
01246 LOAD_COLOUR (auction_text)
01247 LOAD_COLOUR (gossip_text)
01248 LOAD_COLOUR (music_text)
01249 LOAD_COLOUR (question_text)
01250 LOAD_COLOUR (answer_text) fMatch = TRUE;
01251 break;
01252 }*/
01253
01254 break;
01255
01256 case 'D':
01257 KEY ("Damroll", ch->damroll, fread_number (fp));
01258 KEY ("Dam", ch->damroll, fread_number (fp));
01259 KEY ("Description", ch->description, fread_string (fp));
01260 KEY ("Desc", ch->description, fread_string (fp));
01261 break;
01262
01263 case 'E':
01264 if (!str_cmp (word, "End"))
01265 {
01266 /* adjust hp mana move up -- here for speed's sake */
01267 percent =
01268 (current_time - lastlogoff) * 25 / (2 * 60 * 60);
01269
01270 percent = UMIN (percent, 100);
01271
01272 if (percent > 0 && !IS_AFFECTED (ch, AFF_POISON)
01273 && !IS_AFFECTED (ch, AFF_PLAGUE))
01274 {
01275 ch->hit += (ch->max_hit - ch->hit) * percent / 100;
01276 ch->mana += (ch->max_mana - ch->mana) * percent / 100;
01277 ch->move += (ch->max_move - ch->move) * percent / 100;
01278 }
01279 if (ch->class > MAX_CLASS)
01280 {
01281 ch->class = 1;
01282 bug ("Fread_char: Class bigger then MAX_CLASS.",0);
01283 }
01284 return;
01285 }
01286 KEY ("Eyecolor", ch->pcdata->eyecolor, fread_string(fp));
01287 KEY ("Exp", ch->exp, fread_number (fp));
01288 break;
01289 case 'F':
01290 KEY ("Facialhair", ch->pcdata->facialhair, fread_string(fp));
01291 break;
01292
01293 case 'G':
01294 KEY ("Gold", ch->gold, fread_number (fp));
01295 if (!str_cmp (word, "Group") || !str_cmp (word, "Gr"))
01296 {
01297 int gn;
01298 char *temp;
01299
01300 temp = fread_word (fp);
01301 gn = group_lookup (temp);
01302 /* gn = group_lookup( fread_word( fp ) ); */
01303 if (gn < 0)
01304 {
01305 fprintf (stderr, "%s", temp);
01306 bug ("Fread_char: unknown group. ", 0);
01307 }
01308 else
01309 gn_add (ch, gn);
01310 fMatch = TRUE;
01311 }
01312 break;
01313
01314 case 'H':
01315 KEY ("Hairtype", ch->pcdata->hairtype, fread_string(fp));
01316 KEY ("Haircolor", ch->pcdata->haircolor, fread_string(fp));
01317 KEY ("Hairlength", ch->pcdata->hairlength, fread_string(fp));
01318 KEY ("Hitroll", ch->hitroll, fread_number (fp));
01319 KEY ("Hit", ch->hitroll, fread_number (fp));
01320
01321 if (!str_cmp (word, "HpManaMove") || !str_cmp (word, "HMV"))
01322 {
01323 ch->hit = fread_number (fp);
01324 ch->max_hit = fread_number (fp);
01325 ch->mana = fread_number (fp);
01326 ch->max_mana = fread_number (fp);
01327 ch->move = fread_number (fp);
01328 ch->max_move = fread_number (fp);
01329 fMatch = TRUE;
01330 break;
01331 }
01332
01333 if (!str_cmp (word, "HpManaMovePerm")
01334 || !str_cmp (word, "HMVP"))
01335 {
01336 ch->pcdata->perm_hit = fread_number (fp);
01337 ch->pcdata->perm_mana = fread_number (fp);
01338 ch->pcdata->perm_move = fread_number (fp);
01339 fMatch = TRUE;
01340 break;
01341 }
01342
01343 break;
01344
01345 case 'I':
01346 KEY ("Id", ch->id, fread_number (fp));
01347 KEY ("InvisLevel", ch->invis_level, fread_number (fp));
01348 KEY ("Inco", ch->incog_level, fread_number (fp));
01349 KEY ("Invi", ch->invis_level, fread_number (fp));
01350 KEY ("Immtitle", ch->pcdata->imm_title, fread_string(fp));
01351 KEY ("Immort", ch->pcdata->immortal, fread_flag(fp));
01352 break;
01353
01354 case 'K':
01355 KEY ("King", ch->king, kingdom_lookup (fread_string (fp)));
01356 KEY ("KKing", ch->kking, fread_flag (fp));
01357 break;
01358
01359 case 'L':
01360 KEY ("LastLevel", ch->pcdata->last_level, fread_number (fp));
01361 KEY ("Lastnote", ch->pcdata->last_note, fread_number(fp));
01362 KEY ("Lastidea", ch->pcdata->last_idea, fread_number(fp));
01363 KEY ("Lastpena", ch->pcdata->last_penalty, fread_number(fp));
01364 KEY ("Lastnews", ch->pcdata->last_news, fread_number(fp));
01365 KEY ("Lastchan", ch->pcdata->last_changes, fread_number(fp));
01366 KEY ("Lasthist", ch->pcdata->last_history, fread_number(fp));
01367 KEY ("LLev", ch->pcdata->last_level, fread_number (fp));
01368 KEY ("Level", ch->level, fread_number (fp));
01369 KEY ("Lev", ch->level, fread_number (fp));
01370 KEY ("Levl", ch->level, fread_number (fp));
01371 KEY ("LogO", lastlogoff, fread_number (fp));
01372 KEY ("LongDescr", ch->long_descr, fread_string (fp));
01373 KEY ("LnD", ch->long_descr, fread_string (fp));
01374 break;
01375
01376 case 'N':
01377 KEYS ("Name", ch->name, fread_string (fp));
01378 break;
01379
01380 case 'P':
01381 // KEY ("Password", ch->pcdata->pwd, fread_string (fp));
01382 KEY ("Pass", ch->pcdata->pwd, fread_string (fp));
01383 KEY ("Played", ch->played, fread_number (fp));
01384 KEY ("Plyd", ch->played, fread_number (fp));
01385 KEY ("Points", ch->pcdata->points, fread_number (fp));
01386 KEY ("Pnts", ch->pcdata->points, fread_number (fp));
01387 KEY ("Position", ch->position, fread_number (fp));
01388 KEY ("Pos", ch->position, fread_number (fp));
01389 KEY ("Practice", ch->practice, fread_number (fp));
01390 KEY ("Prac", ch->practice, fread_number (fp));
01391 KEYS ("Prompt", ch->prompt, fread_string (fp));
01392 KEY ("Prom", ch->prompt, fread_string (fp));
01393 break;
01394
01395 case 'R':
01396 KEY ("Race", ch->race, race_lookup (fread_string (fp)));
01397
01398 if (!str_cmp (word, "Room"))
01399 {
01400 ch->in_room = get_room_index (fread_number (fp));
01401 if (ch->in_room == NULL)
01402 ch->in_room = get_room_index (ROOM_VNUM_LIMBO);
01403 fMatch = TRUE;
01404 break;
01405 }
01406
01407 break;
01408
01409 case 'S':
01410 KEY ("SavingThrow", ch->saving_throw, fread_number (fp));
01411 KEY ("Save", ch->saving_throw, fread_number (fp));
01412 KEY ("Scro", ch->lines, fread_number (fp));
01413 KEY ("Sex", ch->sex, fread_number (fp));
01414 KEY ("ShortDescr", ch->short_descr, fread_string (fp));
01415 KEY ("ShD", ch->short_descr, fread_string (fp));
01416 KEY ("Sec", ch->pcdata->security, fread_number (fp)); /* OLC */
01417 KEY ("Silv", ch->silver, fread_number (fp));
01418
01419
01420 if (!str_cmp (word, "Skill") || !str_cmp (word, "Sk"))
01421 {
01422 int sn;
01423 int value;
01424 char *temp;
01425
01426 value = fread_number (fp);
01427 temp = fread_word (fp);
01428 sn = skill_lookup (temp);
01429 /* sn = skill_lookup( fread_word( fp ) ); */
01430 if (sn < 0)
01431 {
01432 fprintf (stderr, "%s", temp);
01433 bug ("Fread_char: unknown skill. ", 0);
01434 }
01435 else
01436 ch->pcdata->learned[sn] = value;
01437 fMatch = TRUE;
01438 }
01439
01440 break;
01441
01442 case 'T':
01443 KEY ("TrueSex", ch->pcdata->true_sex, fread_number (fp));
01444 KEY ("TSex", ch->pcdata->true_sex, fread_number (fp));
01445 KEY ("Trai", ch->train, fread_number (fp));
01446 KEY ("Trust", ch->trust, fread_number (fp));
01447 KEY ("Tru", ch->trust, fread_number (fp));
01448
01449 if (!str_cmp (word, "Title") || !str_cmp (word, "Titl"))
01450 {
01451 ch->pcdata->title = fread_string (fp);
01452 if (ch->pcdata->title[0] != '.'
01453 && ch->pcdata->title[0] != ','
01454 && ch->pcdata->title[0] != '!'
01455 && ch->pcdata->title[0] != '?')
01456 {
01457 sprintf (buf, " %s", ch->pcdata->title);
01458 free_string (ch->pcdata->title);
01459 ch->pcdata->title = str_dup (buf);
01460 }
01461 fMatch = TRUE;
01462 break;
01463 }
01464
01465 break;
01466
01467 case 'V':
01468 KEY ("Version", ch->version, fread_number (fp));
01469 KEY ("Vers", ch->version, fread_number (fp));
01470 if (!str_cmp (word, "Vnum"))
01471 {
01472 ch->pIndexData = get_mob_index (fread_number (fp));
01473 fMatch = TRUE;
01474 break;
01475 }
01476 break;
01477
01478 case 'W':
01479 KEY ("Wimpy", ch->wimpy, fread_number (fp));
01480 KEY ("Wimp", ch->wimpy, fread_number (fp));
01481 KEY ("Wizn", ch->wiznet, fread_flag (fp));
01482 break;
01483 }
01484
01485 if (!fMatch)
01486 {
01487 bug ("Fread_char: no match.", 0);
01488 bug (word, 0);
01489 fread_to_eol (fp);
01490 }
01491 }
01492 }
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 1722 of file save.c. References obj_data::affected, affect_data::bitvector, bug(), obj_data::condition, obj_data::cost, obj_index_data::count, create_object(), extra_descr_data::description, obj_data::description, affect_data::duration, obj_data::enchanted, obj_data::extra_descr, obj_data::extra_flags, extract_obj(), FALSE, fread_number(), fread_string(), fread_to_eol(), fread_word(), free_obj(), free_string(), get_obj_index(), ITEM_ARMOR, obj_data::item_type, ITEM_WEAPON, KEY, extra_descr_data::keyword, obj_data::level, affect_data::level, affect_data::location, MAX_NEST, affect_data::modifier, obj_data::name, new_affect(), new_extra_descr(), obj_index_data::new_format, new_obj(), obj_data::next, extra_descr_data::next, affect_data::next, obj_free, obj_to_char(), obj_to_obj(), OBJ_VNUM_DUMMY, object_list, obj_data::pIndexData, rgObjNest, obj_data::short_descr, skill_lookup(), str_cmp(), str_dup(), obj_data::timer, TRUE, affect_data::type, UPPER, obj_index_data::value, obj_data::value, obj_data::wear_flags, obj_data::wear_loc, obj_data::weight, and affect_data::where. Referenced by load_char_obj(). 01723 {
01724 OBJ_DATA *obj;
01725 char *word;
01726 int iNest;
01727 bool fMatch;
01728 bool fNest;
01729 bool fVnum;
01730 bool first;
01731 bool new_format; /* to prevent errors */
01732 bool make_new; /* update object */
01733
01734 fVnum = FALSE;
01735 obj = NULL;
01736 first = TRUE; /* used to counter fp offset */
01737 new_format = FALSE;
01738 make_new = FALSE;
01739
01740 word = feof (fp) ? "End" : fread_word (fp);
01741 if (!str_cmp (word, "Vnum"))
01742 {
01743 int vnum;
01744 first = FALSE; /* fp will be in right place */
01745
01746 vnum = fread_number (fp);
01747 if (get_obj_index (vnum) == NULL)
01748 {
01749 bug ("Fread_obj: bad vnum %d.", vnum);
01750 }
01751 else
01752 {
01753 obj = create_object (get_obj_index (vnum), -1);
01754 new_format = TRUE;
01755 }
01756
01757 }
01758
01759 if (obj == NULL)
01760 { /* either not found or old style */
01761 obj = new_obj ();
01762 obj->name = str_dup ("");
01763 obj->short_descr = str_dup ("");
01764 obj->description = str_dup ("");
01765 }
01766
01767 fNest = FALSE;
01768 fVnum = TRUE;
01769 iNest = 0;
01770
01771 for (;;)
01772 {
01773 if (first)
01774 first = FALSE;
01775 else
01776 word = feof (fp) ? "End" : fread_word (fp);
01777 fMatch = FALSE;
01778
01779 switch (UPPER (word[0]))
01780 {
01781 case '*':
01782 fMatch = TRUE;
01783 fread_to_eol (fp);
01784 break;
01785
01786 case 'A':
01787 if (!str_cmp (word, "AffD"))
01788 {
01789 AFFECT_DATA *paf;
01790 int sn;
01791
01792 paf = new_affect ();
01793
01794 sn = skill_lookup (fread_word (fp));
01795 if (sn < 0)
01796 bug ("Fread_obj: unknown skill.", 0);
01797 else
01798 paf->type = sn;
01799
01800 paf->level = fread_number (fp);
01801 paf->duration = fread_number (fp);
01802 paf->modifier = fread_number (fp);
01803 paf->location = fread_number (fp);
01804 paf->bitvector = fread_number (fp);
01805 paf->next = obj->affected;
01806 obj->affected = paf;
01807 fMatch = TRUE;
01808 break;
01809 }
01810 if (!str_cmp (word, "Affc"))
01811 {
01812 AFFECT_DATA *paf;
01813 int sn;
01814
01815 paf = new_affect ();
01816
01817 sn = skill_lookup (fread_word (fp));
01818 if (sn < 0)
01819 bug ("Fread_obj: unknown skill.", 0);
01820 else
01821 paf->type = sn;
01822
01823 paf->where = fread_number (fp);
01824 paf->level = fread_number (fp);
01825 paf->duration = fread_number (fp);
01826 paf->modifier = fread_number (fp);
01827 paf->location = fread_number (fp);
01828 paf->bitvector = fread_number (fp);
01829 paf->next = obj->affected;
01830 obj->affected = paf;
01831 fMatch = TRUE;
01832 break;
01833 }
01834 break;
01835
01836 case 'C':
01837 KEY ("Cond", obj->condition, fread_number (fp));
01838 KEY ("Cost", obj->cost, fread_number (fp));
01839 break;
01840
01841 case 'D':
01842 KEY ("Description", obj->description, fread_string (fp));
01843 KEY ("Desc", obj->description, fread_string (fp));
01844 break;
01845
01846 case 'E':
01847
01848 if (!str_cmp (word, "Enchanted"))
01849 {
01850 obj->enchanted = TRUE;
01851 fMatch = TRUE;
01852 break;
01853 }
01854
01855 KEY ("ExtraFlags", obj->extra_flags, fread_number (fp));
01856 KEY ("ExtF", obj->extra_flags, fread_number (fp));
01857
01858 if (!str_cmp (word, "ExtraDescr") || !str_cmp (word, "ExDe"))
01859 {
01860 EXTRA_DESCR_DATA *ed;
01861
01862 ed = new_extra_descr ();
01863
01864 ed->keyword = fread_string (fp);
01865 ed->description = fread_string (fp);
01866 ed->next = obj->extra_descr;
01867 obj->extra_descr = ed;
01868 fMatch = TRUE;
01869 }
01870
01871 if (!str_cmp (word, "End"))
01872 {
01873 if (!fNest || (fVnum && obj->pIndexData == NULL))
01874 {
01875 bug ("Fread_obj: incomplete object.", 0);
01876 //free_obj (obj);
01877 free_string( obj->name );
01878 free_string( obj->description );
01879 free_string( obj->short_descr );
01880 obj->next = obj_free;
01881 obj_free = obj;
01882 return;
01883 }
01884 else
01885 {
01886 if (!fVnum)
01887 {
01888 free_obj (obj);
01889 obj =
01890 create_object (get_obj_index (OBJ_VNUM_DUMMY),
01891 0);
01892 }
01893
01894 if (!new_format)
01895 {
01896 obj->next = object_list;
01897 object_list = obj;
01898 obj->pIndexData->count++;
01899 }
01900
01901 if (!obj->pIndexData->new_format
01902 && obj->item_type == ITEM_ARMOR
01903 && obj->value[1] == 0)
01904 {
01905 obj->value[1] = obj->value[0];
01906 obj->value[2] = obj->value[0];
01907 }
01908 if (make_new)
01909 {
01910 int wear;
01911
01912 wear = obj->wear_loc;
01913 extract_obj (obj);
01914
01915 obj = create_object (obj->pIndexData, 0);
01916 obj->wear_loc = wear;
01917 }
01918 if (iNest == 0 || rgObjNest[iNest] == NULL)
01919 obj_to_char (obj, ch);
01920 else
01921 obj_to_obj (obj, rgObjNest[iNest - 1]);
01922 return;
01923 }
01924 }
01925 break;
01926
01927 case 'I':
01928 KEY ("ItemType", obj->item_type, fread_number (fp));
01929 KEY ("Ityp", obj->item_type, fread_number (fp));
01930 break;
01931
01932 case 'L':
01933 KEY ("Level", obj->level, fread_number (fp));
01934 KEY ("Lev", obj->level, fread_number (fp));
01935 break;
01936
01937 case 'N':
01938 KEY ("Name", obj->name, fread_string (fp));
01939
01940 if (!str_cmp (word, "Nest"))
01941 {
01942 iNest = fread_number (fp);
01943 if (iNest < 0 || iNest >= MAX_NEST)
01944 {
01945 bug ("Fread_obj: bad nest %d.", iNest);
01946 }
01947 else
01948 {
01949 rgObjNest[iNest] = obj;
01950 fNest = TRUE;
01951 }
01952 fMatch = TRUE;
01953 }
01954 break;
01955
01956 case 'O':
01957 if (!str_cmp (word, "Oldstyle"))
01958 {
01959 if (obj->pIndexData != NULL
01960 && obj->pIndexData->new_format)
01961 make_new = TRUE;
01962 fMatch = TRUE;
01963 }
01964 break;
01965
01966
01967 case 'S':
01968 KEY ("ShortDescr", obj->short_descr, fread_string (fp));
01969 KEY ("ShD", obj->short_descr, fread_string (fp));
01970
01971 if (!str_cmp (word, "Spell"))
01972 {
01973 int iValue;
01974 int sn;
01975
01976 iValue = fread_number (fp);
01977 sn = skill_lookup (fread_word (fp));
01978 if (iValue < 0 || iValue > 3)
01979 {
01980 bug ("Fread_obj: bad iValue %d.", iValue);
01981 }
01982 else if (sn < 0)
01983 {
01984 bug ("Fread_obj: unknown skill.", 0);
01985 }
01986 else
01987 {
01988 obj->value[iValue] = sn;
01989 }
01990 fMatch = TRUE;
01991 break;
01992 }
01993
01994 break;
01995
01996 case 'T':
01997 KEY ("Timer", obj->timer, fread_number (fp));
01998 KEY ("Time", obj->timer, fread_number (fp));
01999 break;
02000
02001 case 'V':
02002 if (!str_cmp (word, "Values") || !str_cmp (word, "Vals"))
02003 {
02004 obj->value[0] = fread_number (fp);
02005 obj->value[1] = fread_number (fp);
02006 obj->value[2] = fread_number (fp);
02007 obj->value[3] = fread_number (fp);
02008 if (obj->item_type == ITEM_WEAPON && obj->value[0] == 0)
02009 obj->value[0] = obj->pIndexData->value[0];
02010 fMatch = TRUE;
02011 break;
02012 }
02013
02014 if (!str_cmp (word, "Val"))
02015 {
02016 obj->value[0] = fread_number (fp);
02017 obj->value[1] = fread_number (fp);
02018 obj->value[2] = fread_number (fp);
02019 obj->value[3] = fread_number (fp);
02020 obj->value[4] = fread_number (fp);
02021 fMatch = TRUE;
02022 break;
02023 }
02024
02025 if (!str_cmp (word, "Vnum"))
02026 {
02027 int vnum;
02028
02029 vnum = fread_number (fp);
02030 if ((obj->pIndexData = get_obj_index (vnum)) == NULL)
02031
02032 bug ("Fread_obj: bad vnum %d.", vnum);
02033
02034
02035 else
02036 fVnum = TRUE;
02037 fMatch = TRUE;
02038 break;
02039 }
02040 break;
02041
02042 case 'W':
02043 KEY ("WearFlags", obj->wear_flags, fread_number (fp));
02044 KEY ("WeaF", obj->wear_flags, fread_number (fp));
02045 KEY ("WearLoc", obj->wear_loc, fread_number (fp));
02046 KEY ("Wear", obj->wear_loc, fread_number (fp));
02047 KEY ("Weight", obj->weight, fread_number (fp));
02048 KEY ("Wt", obj->weight, fread_number (fp));
02049 break;
02050
02051 }
02052
02053 if (!fMatch)
02054 {
02055 bug ("Fread_obj: no match.", 0);
02056 fread_to_eol (fp);
02057 }
02058 }
02059 }
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 1495 of file save.c. References char_data::act, AFF_PLAGUE, AFF_POISON, char_data::affected, char_data::affected_by, char_data::alignment, char_data::armor, affect_data::bitvector, bug(), check_pet_affected(), char_data::clan, clan_lookup(), char_data::comm, create_mobile(), current_time, char_data::damroll, char_data::description, affect_data::duration, char_data::exp, FALSE, fread_flag(), fread_number(), fread_string(), fread_to_eol(), fread_word(), free_affect(), get_mob_index(), char_data::gold, char_data::hit, char_data::hitroll, IS_AFFECTED, KEY, char_data::leader, char_data::level, affect_data::level, affect_data::location, char_data::long_descr, char_data::mana, char_data::master, char_data::max_hit, char_data::max_mana, char_data::max_move, MAX_STATS, MOB_VNUM_FIDO, char_data::mod_stat, affect_data::modifier, char_data::move, char_data::name, new_affect(), affect_data::next, char_data::perm_stat, char_data::pet, char_data::position, char_data::race, race_lookup(), char_data::saving_throw, char_data::sex, char_data::short_descr, char_data::silver, skill_lookup(), str_cmp(), TRUE, affect_data::type, UMIN, UPPER, and affect_data::where. Referenced by load_char_obj(). 01496 {
01497 char *word;
01498 CHAR_DATA *pet;
01499 bool fMatch;
01500 int lastlogoff = current_time;
01501 int percent;
01502 int vnum = 0;
01503
01504 /* first entry had BETTER be the vnum or we barf */
01505 word = feof (fp) ? "END" : fread_word (fp);
01506 if (!str_cmp (word, "Vnum"))
01507 {
01508
01509 vnum = fread_number (fp);
01510 if (get_mob_index (vnum) == NULL)
01511 {
01512 bug ("Fread_pet: bad vnum %d.", vnum);
01513 pet = create_mobile (get_mob_index (MOB_VNUM_FIDO));
01514 }
01515 else
01516 pet = create_mobile (get_mob_index (vnum));
01517 }
01518 else
01519 {
01520 bug ("Fread_pet: no vnum in file.", 0);
01521 pet = create_mobile (get_mob_index (MOB_VNUM_FIDO));
01522 }
01523
01524 for (;;)
01525 {
01526 word = feof (fp) ? "END" : fread_word (fp);
01527 fMatch = FALSE;
01528
01529 switch (UPPER (word[0]))
01530 {
01531 case '*':
01532 fMatch = TRUE;
01533 fread_to_eol (fp);
01534 break;
01535
01536 case 'A':
01537 KEY ("Act", pet->act, fread_flag (fp));
01538 KEY ("AfBy", pet->affected_by, fread_flag (fp));
01539 KEY ("Alig", pet->alignment, fread_number (fp));
01540
01541 if (!str_cmp (word, "ACs"))
01542 {
01543 int i;
01544
01545 for (i = 0; i < 4; i++)
01546 pet->armor[i] = fread_number (fp);
01547 fMatch = TRUE;
01548 break;
01549 }
01550
01551 if (!str_cmp (word, "AffD"))
01552 {
01553 AFFECT_DATA *paf;
01554 int sn;
01555
01556 paf = new_affect ();
01557
01558 sn = skill_lookup (fread_word (fp));
01559 if (sn < 0)
01560 bug ("Fread_char: unknown skill.", 0);
01561 else
01562 paf->type = sn;
01563
01564 paf->level = fread_number (fp);
01565 paf->duration = fread_number (fp);
01566 paf->modifier = fread_number (fp);
01567 paf->location = fread_number (fp);
01568 paf->bitvector = fread_number (fp);
01569 paf->next = pet->affected;
01570 pet->affected = paf;
01571 fMatch = TRUE;
01572 break;
01573 }
01574
01575 if (!str_cmp (word, "Affc"))
01576 {
01577 AFFECT_DATA *paf;
01578 int sn;
01579
01580 paf = new_affect ();
01581
01582 sn = skill_lookup (fread_word (fp));
01583 if (sn < 0)
01584 bug ("Fread_char: unknown skill.", 0);
01585 else
01586 paf->type = sn;
01587
01588 paf->where = fread_number (fp);
01589 paf->level = fread_number (fp);
01590 paf->duration = fread_number (fp);
01591 paf->modifier = fread_number (fp);
01592 paf->location = fread_number (fp);
01593 paf->bitvector = fread_number (fp);
01594 /* Added here after Chris Litchfield (The Mage's Lair)
01595 * pointed out a bug with duplicating affects in saved
01596 * pets. -- JR 2002/01/31
01597 */
01598 if (!check_pet_affected(vnum,paf))
01599 {
01600 paf->next = pet->affected;
01601 pet->affected = paf;
01602 } else{
01603 free_affect(paf);
01604 }
01605 fMatch = TRUE;
01606 break;
01607 }
01608
01609 if (!str_cmp (word, "AMod"))
01610 {
01611 int stat;
01612
01613 for (stat = 0; stat < MAX_STATS; stat++)
01614 pet->mod_stat[stat] = fread_number (fp);
01615 fMatch = TRUE;
01616 break;
01617 }
01618
01619 if (!str_cmp (word, "Attr"))
01620 {
01621 int stat;
01622
01623 for (stat = 0; stat < MAX_STATS; stat++)
01624 pet->perm_stat[stat] = fread_number (fp);
01625 fMatch = TRUE;
01626 break;
01627 }
01628 break;
01629
01630 case 'C':
01631 KEY ("Clan", pet->clan, clan_lookup (fread_string (fp)));
01632 KEY ("Comm", pet->comm, fread_flag (fp));
01633 break;
01634
01635 case 'D':
01636 KEY ("Dam", pet->damroll, fread_number (fp));
01637 KEY ("Desc", pet->description, fread_string (fp));
01638 break;
01639
01640 case 'E':
01641 if (!str_cmp (word, "End"))
01642 {
01643 pet->leader = ch;
01644 pet->master = ch;
01645 ch->pet = pet;
01646 /* adjust hp mana move up -- here for speed's sake */
01647 percent =
01648 (current_time - lastlogoff) * 25 / (2 * 60 * 60);
01649
01650 if (percent > 0 && !IS_AFFECTED (ch, AFF_POISON)
01651 && !IS_AFFECTED (ch, AFF_PLAGUE))
01652 {
01653 percent = UMIN (percent, 100);
01654 pet->hit += (pet->max_hit - pet->hit) * percent / 100;
01655 pet->mana +=
01656 (pet->max_mana - pet->mana) * percent / 100;
01657 pet->move +=
01658 (pet->max_move - pet->move) * percent / 100;
01659 }
01660 return;
01661 }
01662 KEY ("Exp", pet->exp, fread_number (fp));
01663 break;
01664
01665 case 'G':
01666 KEY ("Gold", pet->gold, fread_number (fp));
01667 break;
01668
01669 case 'H':
01670 KEY ("Hit", pet->hitroll, fread_number (fp));
01671
01672 if (!str_cmp (word, "HMV"))
01673 {
01674 pet->hit = fread_number (fp);
01675 pet->max_hit = fread_number (fp);
01676 pet->mana = fread_number (fp);
01677 pet->max_mana = fread_number (fp);
01678 pet->move = fread_number (fp);
01679 pet->max_move = fread_number (fp);
01680 fMatch = TRUE;
01681 break;
01682 }
01683 break;
01684
01685 case 'L':
01686 KEY ("Levl", pet->level, fread_number (fp));
01687 KEY ("LnD", pet->long_descr, fread_string (fp));
01688 KEY ("LogO", lastlogoff, fread_number (fp));
01689 break;
01690
01691 case 'N':
01692 KEY ("Name", pet->name, fread_string (fp));
01693 break;
01694
01695 case 'P':
01696 KEY ("Pos", pet->position, fread_number (fp));
01697 break;
01698
01699 case 'R':
01700 KEY ("Race", pet->race, race_lookup (fread_string (fp)));
01701 break;
01702
01703 case 'S':
01704 KEY ("Save", pet->saving_throw, fread_number (fp));
01705 KEY ("Sex", pet->sex, fread_number (fp));
01706 KEY ("ShD", pet->short_descr, fread_string (fp));
01707 KEY ("Silv", pet->silver, fread_number (fp));
01708 break;
01709
01710 if (!fMatch)
01711 {
01712 bug ("Fread_pet: no match.", 0);
01713 fread_to_eol (fp);
01714 }
01715
01716 }
01717 }
01718 }
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 175 of file save.c. References affect_data::bitvector, clan_table, current_time, affect_data::duration, get_room_index(), group_table, IS_NPC, kingdom_table, affect_data::level, affect_data::location, MAX_ALIAS, MAX_GROUP, MAX_SKILL, affect_data::modifier, skill_type::name, kingdom_type::name, clan_type::name, pc_race_type::name, affect_data::next, pc_race_table, POS_FIGHTING, POS_STANDING, print_flags(), ROOM_VNUM_LIMBO, skill_table, STAT_CON, STAT_DEX, STAT_INT, STAT_STR, STAT_WIS, str_cmp(), affect_data::type, and affect_data::where. Referenced by save_char_obj(). 00176 {
00177 AFFECT_DATA *paf;
00178 int sn, gn, pos, i;
00179
00180 fprintf (fp, "#%s\n", IS_NPC (ch) ? "MOB" : "PLAYER");
00181
00182 fprintf (fp, "Name %s~\n", ch->name);
00183 fprintf (fp, "Id %ld\n", ch->id);
00184 fprintf (fp, "LogO %ld\n", current_time);
00185 fprintf (fp, "Vers %d\n", 5);
00186 if (ch->sh |