Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Stuff related to the save/load player system. */
- /* New load_char reads ASCII Player Files. Load a char, TRUE if loaded, FALSE
- * if not. */
- int load_char(const char *name, struct char_data *ch) {
- int id, i;
- FILE *fl;
- char filename[40];
- char buf[128], buf2[128], line[MAX_INPUT_LENGTH + 1], tag[6];
- char f1[128], f2[128], f3[128], f4[128];
- trig_data *t = NULL;
- trig_rnum t_rnum = NOTHING;
- if ((id = get_ptable_by_name(name)) < 0)
- return (-1);
- else {
- if (!get_filename(filename, sizeof (filename), PLR_FILE, player_table[id].name))
- return (-1);
- if (!(fl = fopen(filename, "r"))) {
- mudlog(NRM, ADMLVL_GOD, TRUE, "SYSERR: Couldn't open player file %s", filename);
- return (-1);
- }
- /* Character initializations. Necessary to keep some things straight. */
- ch->affected = NULL;
- for (i = 1; i <= SK_ARRAY_MAX; i++) {
- SET_SKILL(ch, i, 0);
- }
- GET_CRAFTING_TYPE(ch) = PFDEF_CRAFTING_TYPE;
- GET_CLASS(ch) = CLASS_ARTISAN;
- GET_SEX(ch) = PFDEF_SEX;
- GET_CLASS(ch) = PFDEF_CLASS;
- GET_ADMLEVEL(ch) = PFDEF_LEVEL;
- GET_LEVEL(ch) = PFDEF_LEVEL;
- GET_HEIGHT(ch) = PFDEF_HEIGHT;
- GET_WEIGHT(ch) = PFDEF_WEIGHT;
- GET_ALIGNMENT(ch) = PFDEF_ALIGNMENT;
- for (i = 0; i < NUM_OF_SAVING_THROWS; i++)
- GET_SAVE(ch, i) = PFDEF_SAVETHROW;
- GET_LOADROOM(ch) = PFDEF_LOADROOM;
- GET_INVIS_LEV(ch) = PFDEF_INVISLEV;
- GET_FREEZE_LEV(ch) = PFDEF_FREEZELEV;
- GET_WIMP_LEV(ch) = PFDEF_WIMPLEV;
- GET_COND(ch, HUNGER) = PFDEF_HUNGER;
- GET_COND(ch, THIRST) = PFDEF_THIRST;
- GET_COND(ch, DRUNK) = PFDEF_DRUNK;
- GET_BAD_PWS(ch) = PFDEF_BADPWS;
- GET_PRACTICES(ch) = PFDEF_PRACTICES;
- GET_GOLD(ch) = PFDEF_GOLD;
- GET_BANK_GOLD(ch) = PFDEF_BANK;
- GET_EXP(ch) = PFDEF_EXP;
- // GET_ARTISAN_EXP(ch) = 0;
- // GET_ARTISAN_TYPE(ch) = 0;
- GET_HITROLL(ch) = PFDEF_HITROLL;
- GET_DAMROLL(ch) = PFDEF_DAMROLL;
- GET_AC(ch) = PFDEF_AC;
- ch->real_abils.str = PFDEF_STR;
- ch->real_abils.str_add = PFDEF_STRADD;
- ch->real_abils.dex = PFDEF_DEX;
- ch->real_abils.intel = PFDEF_INT;
- ch->real_abils.wis = PFDEF_WIS;
- ch->real_abils.con = PFDEF_CON;
- ch->real_abils.cha = PFDEF_CHA;
- ch->real_abils.per = PFDEF_PER;
- GET_HIT(ch) = PFDEF_HIT;
- GET_MAX_HIT(ch) = PFDEF_MAXHIT;
- GET_MANA(ch) = PFDEF_MANA;
- GET_MAX_MANA(ch) = PFDEF_MAXMANA;
- GET_MOVE(ch) = PFDEF_MOVE;
- GET_MAX_MOVE(ch) = PFDEF_MAXMOVE;
- GET_OLC_ZONE(ch) = PFDEF_OLC;
- GET_PAGE_LENGTH(ch) = PFDEF_PAGELENGTH;
- GET_SCREEN_WIDTH(ch) = PFDEF_SCREENWIDTH;
- GET_ALIASES(ch) = NULL;
- SITTING(ch) = NULL;
- NEXT_SITTING(ch) = NULL;
- GET_QUESTPOINTS(ch) = PFDEF_QUESTPOINTS;
- GET_QUEST_COUNTER(ch) = PFDEF_QUESTCOUNT;
- GET_QUEST(ch) = PFDEF_CURRQUEST;
- GET_NUM_QUESTS(ch) = PFDEF_COMPQUESTS;
- GET_LAST_MOTD(ch) = PFDEF_LASTMOTD;
- GET_LAST_NEWS(ch) = PFDEF_LASTNEWS;
- GET_RACE(ch) = PFDEF_RACE;
- for (i = 0; i < AF_ARRAY_MAX; i++)
- AFF_FLAGS(ch)[i] = PFDEF_AFFFLAGS;
- for (i = 0; i < PM_ARRAY_MAX; i++)
- PLR_FLAGS(ch)[i] = PFDEF_PLRFLAGS;
- for (i = 0; i < PR_ARRAY_MAX; i++)
- PRF_FLAGS(ch)[i] = PFDEF_PREFFLAGS;
- for (i = 0; i < AD_ARRAY_MAX; i++)
- ADM_FLAGS(ch)[i] = 0;
- /* for (i = 0; i < SK_ARRAY_MAX; i++)
- GET_SKILL_RANK(ch)[i] = 0;
- for (i = 0; i < SK_ARRAY_MAX; i++)
- GET_SKILL_XP(ch)[i] = 0;
- */
- while (get_line(fl, line)) {
- tag_argument(line, tag);
- switch (*tag) {
- case 'A':
- if (!strcmp(tag, "Ac ")) GET_AC(ch) = atoi(line);
- else if (!strcmp(tag, "AdmL")) GET_ADMLEVEL(ch) = atoi(line);
- else if (!strcmp(tag, "AdmF")) {
- sscanf(line, "%s %s %s %s", f1, f2, f3, f4);
- ADM_FLAGS(ch)[0] = asciiflag_conv(f1);
- ADM_FLAGS(ch)[1] = asciiflag_conv(f2);
- ADM_FLAGS(ch)[2] = asciiflag_conv(f3);
- ADM_FLAGS(ch)[3] = asciiflag_conv(f4);
- } else if (!strcmp(tag, "Act ")) {
- if (sscanf(line, "%s %s %s %s", f1, f2, f3, f4) == 4) {
- PLR_FLAGS(ch)[0] = asciiflag_conv(f1);
- PLR_FLAGS(ch)[1] = asciiflag_conv(f2);
- PLR_FLAGS(ch)[2] = asciiflag_conv(f3);
- PLR_FLAGS(ch)[3] = asciiflag_conv(f4);
- } else
- PLR_FLAGS(ch)[0] = asciiflag_conv(line);
- }//else if (!strcmp(tag, "ArXp")) GET_ARTISAN_EXP(ch) = atof(line);
- //else if (!strcmp(tag, "ArTy")) GET_ARTISAN_TYPE(ch) = atoi(line);
- else if (!strcmp(tag, "Aff ")) {
- if (sscanf(line, "%s %s %s %s", f1, f2, f3, f4) == 4) {
- AFF_FLAGS(ch)[0] = asciiflag_conv(f1);
- AFF_FLAGS(ch)[1] = asciiflag_conv(f2);
- AFF_FLAGS(ch)[2] = asciiflag_conv(f3);
- AFF_FLAGS(ch)[3] = asciiflag_conv(f4);
- } else
- AFF_FLAGS(ch)[0] = asciiflag_conv(line);
- }
- if (!strcmp(tag, "Affs")) load_affects(fl, ch);
- else if (!strcmp(tag, "Alin")) GET_ALIGNMENT(ch) = atoi(line);
- else if (!strcmp(tag, "Alis")) read_aliases_ascii(fl, ch, atoi(line));
- break;
- case 'B':
- if (!strcmp(tag, "Badp")) GET_BAD_PWS(ch) = atoi(line);
- else if (!strcmp(tag, "Bank")) GET_BANK_GOLD(ch) = atoi(line);
- else if (!strcmp(tag, "Brth")) ch->player.time.birth = atol(line);
- break;
- case 'C':
- if (!strcmp(tag, "Cha ")) ch->real_abils.cha = atoi(line);
- else if (!strcmp(tag, "Clas")) GET_CLASS(ch) = atoi(line);
- else if (!strcmp(tag, "Con ")) ch->real_abils.con = atoi(line);
- break;
- case 'D':
- if (!strcmp(tag, "Desc")) ch->player.description = fread_string(fl, buf2);
- else if (!strcmp(tag, "Dex ")) ch->real_abils.dex = atoi(line);
- else if (!strcmp(tag, "Drnk")) GET_COND(ch, DRUNK) = atoi(line);
- else if (!strcmp(tag, "Drol")) GET_DAMROLL(ch) = atoi(line);
- break;
- case 'E':
- if (!strcmp(tag, "Exp ")) GET_EXP(ch) = atoi(line);
- break;
- case 'F':
- if (!strcmp(tag, "Frez")) GET_FREEZE_LEV(ch) = atoi(line);
- break;
- case 'G':
- if (!strcmp(tag, "Gold")) GET_GOLD(ch) = atoi(line);
- break;
- case 'H':
- if (!strcmp(tag, "Hit ")) load_HMVS(ch, line, LOAD_HIT);
- else if (!strcmp(tag, "Hite")) GET_HEIGHT(ch) = atoi(line);
- else if (!strcmp(tag, "Host")) {
- if (GET_HOST(ch))
- free(GET_HOST(ch));
- GET_HOST(ch) = strdup(line);
- } else if (!strcmp(tag, "Hrol")) GET_HITROLL(ch) = atoi(line);
- else if (!strcmp(tag, "Hung")) GET_COND(ch, HUNGER) = atoi(line);
- break;
- case 'I':
- if (!strcmp(tag, "Id ")) GET_IDNUM(ch) = atol(line);
- else if (!strcmp(tag, "Int ")) ch->real_abils.intel = atoi(line);
- else if (!strcmp(tag, "Invs")) GET_INVIS_LEV(ch) = atoi(line);
- break;
- case 'L':
- if (!strcmp(tag, "Last")) ch->player.time.logon = atol(line);
- else if (!strcmp(tag, "Lern")) GET_PRACTICES(ch) = atoi(line);
- else if (!strcmp(tag, "Levl")) GET_LEVEL(ch) = atoi(line);
- else if (!strcmp(tag, "Lmot")) GET_LAST_MOTD(ch) = atoi(line);
- else if (!strcmp(tag, "Lnew")) GET_LAST_NEWS(ch) = atoi(line);
- break;
- case 'M':
- if (!strcmp(tag, "Mana")) load_HMVS(ch, line, LOAD_MANA);
- else if (!strcmp(tag, "Move")) load_HMVS(ch, line, LOAD_MOVE);
- break;
- case 'N':
- if (!strcmp(tag, "Name")) GET_PC_NAME(ch) = strdup(line);
- break;
- case 'O':
- if (!strcmp(tag, "Olc ")) GET_OLC_ZONE(ch) = atoi(line);
- break;
- case 'P':
- if (!strcmp(tag, "Page")) GET_PAGE_LENGTH(ch) = atoi(line);
- else if (!strcmp(tag, "Pass")) strcpy(GET_PASSWD(ch), line);
- else if (!strcmp(tag, "Per ")) ch->real_abils.per = atoi(line);
- else if (!strcmp(tag, "Plyd")) ch->player.time.played = atoi(line);
- else if (!strcmp(tag, "PfIn")) POOFIN(ch) = strdup(line);
- else if (!strcmp(tag, "PfOt")) POOFOUT(ch) = strdup(line);
- else if (!strcmp(tag, "Pref")) {
- if (sscanf(line, "%s %s %s %s", f1, f2, f3, f4) == 4) {
- PRF_FLAGS(ch)[0] = asciiflag_conv(f1);
- PRF_FLAGS(ch)[1] = asciiflag_conv(f2);
- PRF_FLAGS(ch)[2] = asciiflag_conv(f3);
- PRF_FLAGS(ch)[3] = asciiflag_conv(f4);
- } else
- PRF_FLAGS(ch)[0] = asciiflag_conv(f1);
- }
- break;
- case 'Q':
- if (!strcmp(tag, "Qstp")) GET_QUESTPOINTS(ch) = atoi(line);
- else if (!strcmp(tag, "Qpnt")) GET_QUESTPOINTS(ch) = atoi(line); /* Backward compatibility */
- else if (!strcmp(tag, "Qcur")) GET_QUEST(ch) = atoi(line);
- else if (!strcmp(tag, "Qcnt")) GET_QUEST_COUNTER(ch) = atoi(line);
- else if (!strcmp(tag, "Qest")) load_quests(fl, ch);
- break;
- case 'R':
- if (!strcmp(tag, "Race")) GET_RACE(ch) = atoi(line);
- else if (!strcmp(tag, "Room")) GET_LOADROOM(ch) = atoi(line);
- break;
- case 'S':
- if (!strcmp(tag, "Sex ")) GET_SEX(ch) = atoi(line);
- else if (!strcmp(tag, "ScrW")) GET_SCREEN_WIDTH(ch) = atoi(line);
- else if (!strcmp(tag, "Skil"))load_skills(ch, line, LOAD_SKILL);//GET_SKILL_RANK(ch, i) = atoi(line);//load_skills(fl, ch);
- else if (!strcmp(tag, "Str ")) load_HMVS(ch, line, LOAD_STRENGTH);
- break;
- case 'T':
- if (!strcmp(tag, "Thir")) GET_COND(ch, THIRST) = atoi(line);
- else if (!strcmp(tag, "Thr1")) GET_SAVE(ch, 0) = atoi(line);
- else if (!strcmp(tag, "Thr2")) GET_SAVE(ch, 1) = atoi(line);
- else if (!strcmp(tag, "Thr3")) GET_SAVE(ch, 2) = atoi(line);
- else if (!strcmp(tag, "Thr4")) GET_SAVE(ch, 3) = atoi(line);
- else if (!strcmp(tag, "Thr5")) GET_SAVE(ch, 4) = atoi(line);
- else if (!strcmp(tag, "Titl")) GET_TITLE(ch) = strdup(line);
- else if (!strcmp(tag, "Trig") && CONFIG_SCRIPT_PLAYERS) {
- if ((t_rnum = real_trigger(atoi(line))) != NOTHING) {
- t = read_trigger(t_rnum);
- if (!SCRIPT(ch))
- CREATE(SCRIPT(ch), struct script_data, 1);
- add_trigger(SCRIPT(ch), t, -1);
- }
- }
- break;
- case 'V':
- if (!strcmp(tag, "Vars")) read_saved_vars_ascii(fl, ch, atoi(line));
- break;
- case 'W':
- if (!strcmp(tag, "Wate")) GET_WEIGHT(ch) = atoi(line);
- else if (!strcmp(tag, "Wimp")) GET_WIMP_LEV(ch) = atoi(line);
- else if (!strcmp(tag, "Wis ")) ch->real_abils.wis = atoi(line);
- break;
- default:
- sprintf(buf, "SYSERR: Unknown tag %s in pfile %s", tag, name);
- }
- }
- }
- affect_total(ch);
- /* initialization for imms */
- if (GET_ADMLEVEL(ch) >= ADMLVL_IMMORT) {
- // for (i = 1; i <= SK_ARRAY_MAX; i++)
- // SET_SKILL(ch, skill, i, 5000);
- GET_COND(ch, HUNGER) = -1;
- GET_COND(ch, THIRST) = -1;
- GET_COND(ch, DRUNK) = -1;
- }
- fclose(fl);
- return (id);
- }
Advertisement
Add Comment
Please, Sign In to add comment