mystickdreamer

Untitled

Dec 1st, 2014
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 13.28 KB | None | 0 0
  1. /* Stuff related to the save/load player system. */
  2.  
  3. /* New load_char reads ASCII Player Files. Load a char, TRUE if loaded, FALSE
  4.  * if not. */
  5. int load_char(const char *name, struct char_data *ch) {
  6.     int id, i;
  7.     FILE *fl;
  8.     char filename[40];
  9.     char buf[128], buf2[128], line[MAX_INPUT_LENGTH + 1], tag[6];
  10.     char f1[128], f2[128], f3[128], f4[128];
  11.     trig_data *t = NULL;
  12.     trig_rnum t_rnum = NOTHING;
  13.  
  14.     if ((id = get_ptable_by_name(name)) < 0)
  15.         return (-1);
  16.     else {
  17.         if (!get_filename(filename, sizeof (filename), PLR_FILE, player_table[id].name))
  18.             return (-1);
  19.         if (!(fl = fopen(filename, "r"))) {
  20.             mudlog(NRM, ADMLVL_GOD, TRUE, "SYSERR: Couldn't open player file %s", filename);
  21.             return (-1);
  22.         }
  23.  
  24.         /* Character initializations. Necessary to keep some things straight. */
  25.         ch->affected = NULL;
  26.         for (i = 1; i <= SK_ARRAY_MAX; i++) {
  27.             SET_SKILL(ch, i, 0);
  28.         }
  29.         GET_CRAFTING_TYPE(ch) = PFDEF_CRAFTING_TYPE;
  30.         GET_CLASS(ch) = CLASS_ARTISAN;
  31.         GET_SEX(ch) = PFDEF_SEX;
  32.         GET_CLASS(ch) = PFDEF_CLASS;
  33.         GET_ADMLEVEL(ch) = PFDEF_LEVEL;
  34.         GET_LEVEL(ch) = PFDEF_LEVEL;
  35.         GET_HEIGHT(ch) = PFDEF_HEIGHT;
  36.         GET_WEIGHT(ch) = PFDEF_WEIGHT;
  37.         GET_ALIGNMENT(ch) = PFDEF_ALIGNMENT;
  38.         for (i = 0; i < NUM_OF_SAVING_THROWS; i++)
  39.             GET_SAVE(ch, i) = PFDEF_SAVETHROW;
  40.         GET_LOADROOM(ch) = PFDEF_LOADROOM;
  41.         GET_INVIS_LEV(ch) = PFDEF_INVISLEV;
  42.         GET_FREEZE_LEV(ch) = PFDEF_FREEZELEV;
  43.         GET_WIMP_LEV(ch) = PFDEF_WIMPLEV;
  44.         GET_COND(ch, HUNGER) = PFDEF_HUNGER;
  45.         GET_COND(ch, THIRST) = PFDEF_THIRST;
  46.         GET_COND(ch, DRUNK) = PFDEF_DRUNK;
  47.         GET_BAD_PWS(ch) = PFDEF_BADPWS;
  48.         GET_PRACTICES(ch) = PFDEF_PRACTICES;
  49.         GET_GOLD(ch) = PFDEF_GOLD;
  50.         GET_BANK_GOLD(ch) = PFDEF_BANK;
  51.         GET_EXP(ch) = PFDEF_EXP;
  52.         //        GET_ARTISAN_EXP(ch) = 0;
  53.         //        GET_ARTISAN_TYPE(ch) = 0;
  54.         GET_HITROLL(ch) = PFDEF_HITROLL;
  55.         GET_DAMROLL(ch) = PFDEF_DAMROLL;
  56.         GET_AC(ch) = PFDEF_AC;
  57.         ch->real_abils.str = PFDEF_STR;
  58.         ch->real_abils.str_add = PFDEF_STRADD;
  59.         ch->real_abils.dex = PFDEF_DEX;
  60.         ch->real_abils.intel = PFDEF_INT;
  61.         ch->real_abils.wis = PFDEF_WIS;
  62.         ch->real_abils.con = PFDEF_CON;
  63.         ch->real_abils.cha = PFDEF_CHA;
  64.         ch->real_abils.per = PFDEF_PER;
  65.         GET_HIT(ch) = PFDEF_HIT;
  66.         GET_MAX_HIT(ch) = PFDEF_MAXHIT;
  67.         GET_MANA(ch) = PFDEF_MANA;
  68.         GET_MAX_MANA(ch) = PFDEF_MAXMANA;
  69.         GET_MOVE(ch) = PFDEF_MOVE;
  70.         GET_MAX_MOVE(ch) = PFDEF_MAXMOVE;
  71.         GET_OLC_ZONE(ch) = PFDEF_OLC;
  72.         GET_PAGE_LENGTH(ch) = PFDEF_PAGELENGTH;
  73.         GET_SCREEN_WIDTH(ch) = PFDEF_SCREENWIDTH;
  74.         GET_ALIASES(ch) = NULL;
  75.         SITTING(ch) = NULL;
  76.         NEXT_SITTING(ch) = NULL;
  77.         GET_QUESTPOINTS(ch) = PFDEF_QUESTPOINTS;
  78.         GET_QUEST_COUNTER(ch) = PFDEF_QUESTCOUNT;
  79.         GET_QUEST(ch) = PFDEF_CURRQUEST;
  80.         GET_NUM_QUESTS(ch) = PFDEF_COMPQUESTS;
  81.         GET_LAST_MOTD(ch) = PFDEF_LASTMOTD;
  82.         GET_LAST_NEWS(ch) = PFDEF_LASTNEWS;
  83.         GET_RACE(ch) = PFDEF_RACE;
  84.  
  85.         for (i = 0; i < AF_ARRAY_MAX; i++)
  86.             AFF_FLAGS(ch)[i] = PFDEF_AFFFLAGS;
  87.         for (i = 0; i < PM_ARRAY_MAX; i++)
  88.             PLR_FLAGS(ch)[i] = PFDEF_PLRFLAGS;
  89.         for (i = 0; i < PR_ARRAY_MAX; i++)
  90.             PRF_FLAGS(ch)[i] = PFDEF_PREFFLAGS;
  91.         for (i = 0; i < AD_ARRAY_MAX; i++)
  92.             ADM_FLAGS(ch)[i] = 0;
  93.         /*        for (i = 0; i < SK_ARRAY_MAX; i++)
  94.                     GET_SKILL_RANK(ch)[i] = 0;
  95.                 for (i = 0; i < SK_ARRAY_MAX; i++)
  96.                     GET_SKILL_XP(ch)[i] = 0;
  97.          */
  98.         while (get_line(fl, line)) {
  99.             tag_argument(line, tag);
  100.  
  101.             switch (*tag) {
  102.                 case 'A':
  103.                     if (!strcmp(tag, "Ac  ")) GET_AC(ch) = atoi(line);
  104.                     else if (!strcmp(tag, "AdmL")) GET_ADMLEVEL(ch) = atoi(line);
  105.                     else if (!strcmp(tag, "AdmF")) {
  106.                         sscanf(line, "%s %s %s %s", f1, f2, f3, f4);
  107.                         ADM_FLAGS(ch)[0] = asciiflag_conv(f1);
  108.                         ADM_FLAGS(ch)[1] = asciiflag_conv(f2);
  109.                         ADM_FLAGS(ch)[2] = asciiflag_conv(f3);
  110.                         ADM_FLAGS(ch)[3] = asciiflag_conv(f4);
  111.                     } else if (!strcmp(tag, "Act ")) {
  112.                         if (sscanf(line, "%s %s %s %s", f1, f2, f3, f4) == 4) {
  113.                             PLR_FLAGS(ch)[0] = asciiflag_conv(f1);
  114.                             PLR_FLAGS(ch)[1] = asciiflag_conv(f2);
  115.                             PLR_FLAGS(ch)[2] = asciiflag_conv(f3);
  116.                             PLR_FLAGS(ch)[3] = asciiflag_conv(f4);
  117.                         } else
  118.                             PLR_FLAGS(ch)[0] = asciiflag_conv(line);
  119.                     }//else if (!strcmp(tag, "ArXp")) GET_ARTISAN_EXP(ch) = atof(line);
  120.                         //else if (!strcmp(tag, "ArTy")) GET_ARTISAN_TYPE(ch) = atoi(line);
  121.                     else if (!strcmp(tag, "Aff ")) {
  122.                         if (sscanf(line, "%s %s %s %s", f1, f2, f3, f4) == 4) {
  123.                             AFF_FLAGS(ch)[0] = asciiflag_conv(f1);
  124.                             AFF_FLAGS(ch)[1] = asciiflag_conv(f2);
  125.                             AFF_FLAGS(ch)[2] = asciiflag_conv(f3);
  126.                             AFF_FLAGS(ch)[3] = asciiflag_conv(f4);
  127.                         } else
  128.                             AFF_FLAGS(ch)[0] = asciiflag_conv(line);
  129.                     }
  130.                     if (!strcmp(tag, "Affs")) load_affects(fl, ch);
  131.                     else if (!strcmp(tag, "Alin")) GET_ALIGNMENT(ch) = atoi(line);
  132.                     else if (!strcmp(tag, "Alis")) read_aliases_ascii(fl, ch, atoi(line));
  133.                     break;
  134.  
  135.                 case 'B':
  136.                     if (!strcmp(tag, "Badp")) GET_BAD_PWS(ch) = atoi(line);
  137.                     else if (!strcmp(tag, "Bank")) GET_BANK_GOLD(ch) = atoi(line);
  138.                     else if (!strcmp(tag, "Brth")) ch->player.time.birth = atol(line);
  139.                     break;
  140.  
  141.                 case 'C':
  142.                     if (!strcmp(tag, "Cha ")) ch->real_abils.cha = atoi(line);
  143.                     else if (!strcmp(tag, "Clas")) GET_CLASS(ch) = atoi(line);
  144.                     else if (!strcmp(tag, "Con ")) ch->real_abils.con = atoi(line);
  145.                     break;
  146.  
  147.                 case 'D':
  148.                     if (!strcmp(tag, "Desc")) ch->player.description = fread_string(fl, buf2);
  149.                     else if (!strcmp(tag, "Dex ")) ch->real_abils.dex = atoi(line);
  150.                     else if (!strcmp(tag, "Drnk")) GET_COND(ch, DRUNK) = atoi(line);
  151.                     else if (!strcmp(tag, "Drol")) GET_DAMROLL(ch) = atoi(line);
  152.                     break;
  153.  
  154.                 case 'E':
  155.                     if (!strcmp(tag, "Exp ")) GET_EXP(ch) = atoi(line);
  156.                     break;
  157.  
  158.                 case 'F':
  159.                     if (!strcmp(tag, "Frez")) GET_FREEZE_LEV(ch) = atoi(line);
  160.                     break;
  161.  
  162.                 case 'G':
  163.                     if (!strcmp(tag, "Gold")) GET_GOLD(ch) = atoi(line);
  164.                     break;
  165.  
  166.                 case 'H':
  167.                     if (!strcmp(tag, "Hit ")) load_HMVS(ch, line, LOAD_HIT);
  168.                     else if (!strcmp(tag, "Hite")) GET_HEIGHT(ch) = atoi(line);
  169.                     else if (!strcmp(tag, "Host")) {
  170.                         if (GET_HOST(ch))
  171.                             free(GET_HOST(ch));
  172.                         GET_HOST(ch) = strdup(line);
  173.                     } else if (!strcmp(tag, "Hrol")) GET_HITROLL(ch) = atoi(line);
  174.                     else if (!strcmp(tag, "Hung")) GET_COND(ch, HUNGER) = atoi(line);
  175.                     break;
  176.  
  177.                 case 'I':
  178.                     if (!strcmp(tag, "Id  ")) GET_IDNUM(ch) = atol(line);
  179.                     else if (!strcmp(tag, "Int ")) ch->real_abils.intel = atoi(line);
  180.                     else if (!strcmp(tag, "Invs")) GET_INVIS_LEV(ch) = atoi(line);
  181.                     break;
  182.  
  183.                 case 'L':
  184.                     if (!strcmp(tag, "Last")) ch->player.time.logon = atol(line);
  185.                     else if (!strcmp(tag, "Lern")) GET_PRACTICES(ch) = atoi(line);
  186.                     else if (!strcmp(tag, "Levl")) GET_LEVEL(ch) = atoi(line);
  187.                     else if (!strcmp(tag, "Lmot")) GET_LAST_MOTD(ch) = atoi(line);
  188.                     else if (!strcmp(tag, "Lnew")) GET_LAST_NEWS(ch) = atoi(line);
  189.                     break;
  190.  
  191.                 case 'M':
  192.                     if (!strcmp(tag, "Mana")) load_HMVS(ch, line, LOAD_MANA);
  193.                     else if (!strcmp(tag, "Move")) load_HMVS(ch, line, LOAD_MOVE);
  194.                     break;
  195.  
  196.                 case 'N':
  197.                     if (!strcmp(tag, "Name")) GET_PC_NAME(ch) = strdup(line);
  198.                     break;
  199.  
  200.                 case 'O':
  201.                     if (!strcmp(tag, "Olc ")) GET_OLC_ZONE(ch) = atoi(line);
  202.                     break;
  203.  
  204.                 case 'P':
  205.                     if (!strcmp(tag, "Page")) GET_PAGE_LENGTH(ch) = atoi(line);
  206.                     else if (!strcmp(tag, "Pass")) strcpy(GET_PASSWD(ch), line);
  207.                     else if (!strcmp(tag, "Per ")) ch->real_abils.per = atoi(line);
  208.                     else if (!strcmp(tag, "Plyd")) ch->player.time.played = atoi(line);
  209.                     else if (!strcmp(tag, "PfIn")) POOFIN(ch) = strdup(line);
  210.                     else if (!strcmp(tag, "PfOt")) POOFOUT(ch) = strdup(line);
  211.                     else if (!strcmp(tag, "Pref")) {
  212.                         if (sscanf(line, "%s %s %s %s", f1, f2, f3, f4) == 4) {
  213.                             PRF_FLAGS(ch)[0] = asciiflag_conv(f1);
  214.                             PRF_FLAGS(ch)[1] = asciiflag_conv(f2);
  215.                             PRF_FLAGS(ch)[2] = asciiflag_conv(f3);
  216.                             PRF_FLAGS(ch)[3] = asciiflag_conv(f4);
  217.                         } else
  218.                             PRF_FLAGS(ch)[0] = asciiflag_conv(f1);
  219.                     }
  220.                     break;
  221.  
  222.                 case 'Q':
  223.                     if (!strcmp(tag, "Qstp")) GET_QUESTPOINTS(ch) = atoi(line);
  224.                     else if (!strcmp(tag, "Qpnt")) GET_QUESTPOINTS(ch) = atoi(line); /* Backward compatibility */
  225.                     else if (!strcmp(tag, "Qcur")) GET_QUEST(ch) = atoi(line);
  226.                     else if (!strcmp(tag, "Qcnt")) GET_QUEST_COUNTER(ch) = atoi(line);
  227.                     else if (!strcmp(tag, "Qest")) load_quests(fl, ch);
  228.                     break;
  229.  
  230.                 case 'R':
  231.                     if (!strcmp(tag, "Race")) GET_RACE(ch) = atoi(line);
  232.                     else if (!strcmp(tag, "Room")) GET_LOADROOM(ch) = atoi(line);
  233.                     break;
  234.  
  235.                 case 'S':
  236.                     if (!strcmp(tag, "Sex ")) GET_SEX(ch) = atoi(line);
  237.                     else if (!strcmp(tag, "ScrW")) GET_SCREEN_WIDTH(ch) = atoi(line);
  238.                     else if (!strcmp(tag, "Skil"))load_skills(ch, line, LOAD_SKILL);//GET_SKILL_RANK(ch, i) = atoi(line);//load_skills(fl, ch);
  239.                     else if (!strcmp(tag, "Str ")) load_HMVS(ch, line, LOAD_STRENGTH);
  240.                     break;
  241.  
  242.                 case 'T':
  243.                     if (!strcmp(tag, "Thir")) GET_COND(ch, THIRST) = atoi(line);
  244.                     else if (!strcmp(tag, "Thr1")) GET_SAVE(ch, 0) = atoi(line);
  245.                     else if (!strcmp(tag, "Thr2")) GET_SAVE(ch, 1) = atoi(line);
  246.                     else if (!strcmp(tag, "Thr3")) GET_SAVE(ch, 2) = atoi(line);
  247.                     else if (!strcmp(tag, "Thr4")) GET_SAVE(ch, 3) = atoi(line);
  248.                     else if (!strcmp(tag, "Thr5")) GET_SAVE(ch, 4) = atoi(line);
  249.                     else if (!strcmp(tag, "Titl")) GET_TITLE(ch) = strdup(line);
  250.                     else if (!strcmp(tag, "Trig") && CONFIG_SCRIPT_PLAYERS) {
  251.                         if ((t_rnum = real_trigger(atoi(line))) != NOTHING) {
  252.                             t = read_trigger(t_rnum);
  253.                             if (!SCRIPT(ch))
  254.                                 CREATE(SCRIPT(ch), struct script_data, 1);
  255.                             add_trigger(SCRIPT(ch), t, -1);
  256.                         }
  257.                     }
  258.                     break;
  259.  
  260.                 case 'V':
  261.                     if (!strcmp(tag, "Vars")) read_saved_vars_ascii(fl, ch, atoi(line));
  262.                     break;
  263.  
  264.                 case 'W':
  265.                     if (!strcmp(tag, "Wate")) GET_WEIGHT(ch) = atoi(line);
  266.                     else if (!strcmp(tag, "Wimp")) GET_WIMP_LEV(ch) = atoi(line);
  267.                     else if (!strcmp(tag, "Wis ")) ch->real_abils.wis = atoi(line);
  268.                     break;
  269.  
  270.                 default:
  271.                     sprintf(buf, "SYSERR: Unknown tag %s in pfile %s", tag, name);
  272.             }
  273.         }
  274.     }
  275.  
  276.     affect_total(ch);
  277.  
  278.     /* initialization for imms */
  279.     if (GET_ADMLEVEL(ch) >= ADMLVL_IMMORT) {
  280.         //       for (i = 1; i <= SK_ARRAY_MAX; i++)
  281.         //           SET_SKILL(ch, skill, i, 5000);
  282.         GET_COND(ch, HUNGER) = -1;
  283.         GET_COND(ch, THIRST) = -1;
  284.         GET_COND(ch, DRUNK) = -1;
  285.     }
  286.     fclose(fl);
  287.     return (id);
  288. }
Advertisement
Add Comment
Please, Sign In to add comment