/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ /*************************************************************************** * God Wars Mud copyright (C) 1994, 1995, 1996 by Richard Woolcock * * * * Legend of Chrystancia copyright (C) 1999, 2000, 2001 by Matthew Little * * This mud is NOT to be copied in whole or in part, or to be run without * * the permission of Matthew Little. Nobody else has permission to * * authorise the use of this code. * ***************************************************************************/ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <ctype.h> #include <stdio.h> #include <string.h> #include <time.h> #include "merc.h" #include "bastet.h" #if !defined(macintosh) extern int _filbuf args ((FILE *)); #endif NCLANS_DATA *nclans_table; /* * Array of containers read for proper re-nesting of objects. */ #define MAX_NEST 100 static OBJ_DATA *rgObjNest[MAX_NEST]; /* * Local functions. */ void fwrite_char_old args ((CHAR_DATA * ch, FILE * fp)); void fwrite_char args ((CHAR_DATA * ch, FILE * fp)); void fwrite_obj args ((CHAR_DATA * ch, OBJ_DATA * obj, FILE * fp, int iNest)); void fread_char_old args ((CHAR_DATA * ch, FILE * fp)); bool fread_char args ((CHAR_DATA * ch, FILE * fp)); void fread_obj args ((CHAR_DATA * ch, FILE * fp)); void save_char_obj_finger args ((CHAR_DATA * ch)); void convert_old_new args ((CHAR_DATA * ch)); /* * Save a character and inventory. * Would be cool to save NPC's too for quest purposes, * some of the infrastructure is provided. */ void save_char_obj (CHAR_DATA * ch) { char strsave[MAX_STRING_LENGTH]; char strsavetmp[MSL]; FILE *fp; if (IS_NPC (ch) || ch->level < 2) { if (ch->mkill > 4) ch->level = 2; else return; } /* A new player saved for the first time */ if (ch->pcdata->playerid == 0) ch->pcdata->playerid = get_next_playerid (); if (ch->desc != NULL && ch->desc->connected != CON_PLAYING) return; if (ch->desc != NULL && ch->desc->original != NULL) ch = ch->desc->original; ch->save_time = current_time; fclose (fpReserve); /* sprintf( strsave, "%s%s", PLAYER_DIR, capitalize( ch->name ) ); if ( ( fp = fopen( strsave, "w" ) ) == NULL ) { bug( "Save_char_obj: fopen", 0 ); perror( strsave ); } */ sprintf (strsavetmp, "%s/backup/%s", PLAYER_DIR, capitalize (ch->name)); if ((fp = fopen (strsavetmp, "w")) == NULL) { bug ("Save_char_obj: fopen", 0); perror (strsavetmp); } else { if (ch->class == -1) fwrite_char_old (ch, fp); else fwrite_char (ch, fp); if (ch->carrying != NULL) fwrite_obj (ch, ch->carrying, fp, 0); fprintf (fp, "#END\n"); } fflush (fp); fclose (fp); fpReserve = fopen (NULL_FILE, "r"); sprintf (strsave, "%s%s", PLAYER_DIR, capitalize (ch->name)); rename (strsavetmp, strsave); return; } void save_char_obj_backup( CHAR_DATA *ch, int backup_num ) { char chlevel [15]; char buf [MAX_INPUT_LENGTH]; char strsave[MAX_STRING_LENGTH]; FILE *fp; if ( IS_NPC(ch) || ch->level < 2 ) return; if ( ch->desc != NULL && ch->desc->original != NULL ) ch = ch->desc->original; fflush( fpReserve ); fclose( fpReserve ); sprintf( strsave, "%s%s.%d", BACKUP_DIR, capitalize( ch->name ), backup_num); if ( ( fp = fopen( strsave, "w" ) ) == NULL ) { bug( "Save_char_obj: fopen", 0 ); perror( strsave ); } else { ch->pcdata->curr_backup = backup_num; ch->save_time = current_time; fwrite_char( ch, fp ); if ( ch->carrying != NULL ) fwrite_obj( ch, ch->carrying, fp, 0 ); fprintf( fp, "#END\n" ); if (ch->level >= 11) sprintf(chlevel,"<Implementor>"); else if (ch->level == 10) sprintf(chlevel,"<High Judge>"); else if (ch->level == 9 ) sprintf(chlevel,"<Judge>"); else if (ch->level == 8 ) sprintf(chlevel,"<Enforcer>"); else if (ch->level == 7 ) sprintf(chlevel,"<Quest Maker>"); else if (ch->level == 6 ) sprintf(chlevel,"<Builder>"); else if (ch->level == 5 ) sprintf(chlevel,"<Avatar>"); else if (ch->level == 4 ) sprintf(chlevel,"<Avatar>"); else if (ch->level == 3 ) sprintf(chlevel,"<Avatar>"); else sprintf(chlevel,"<Mortal>"); if (strlen(ch->lasttime) > 1) sprintf(buf,"%s Last logged in on %s.\n\r", chlevel, ch->lasttime); else sprintf(buf,"%s New player logged in on %s.\n\r", chlevel, ch->createtime); fprintf( fp, buf); } fflush( fp ); fclose( fp ); fpReserve = fopen( NULL_FILE, "r" ); return; } bool reload_backup( CHAR_DATA *ch, int backup_num ) { char strsave[MAX_STRING_LENGTH]; FILE *fp; bool found = FALSE; if( IS_NPC(ch) ) return FALSE; sprintf( strsave, "%s%s.%d", BACKUP_DIR, capitalize( ch->name ),backup_num); if ( ( fp = fopen( strsave, "r" ) ) != NULL ) { int iNest; for ( iNest = 0; iNest < MAX_NEST; iNest++ ) rgObjNest[iNest] = NULL; found = TRUE; for ( ; ; ) { char letter; char *word; letter = fread_letter( fp ); if ( letter == '*' ) { fread_to_eol( fp ); continue; } if ( letter != '#' ){ bug( "Load_char_obj: # not found.", 0 ); break; } word = fread_word( fp ); if ( !str_cmp( word, "PLAYER" ) ) fread_char( ch, fp ); else if ( !str_cmp( word, "OBJECT" ) ) fread_obj( ch, fp ); else if ( !str_cmp( word, "END" ) ) break; else { bug( "Load_char_obj: bad section.", 0 ); break; } } fflush( fp ); fclose( fp ); } fpReserve = fopen( NULL_FILE, "r" ); return found; } void save_char_obj_finger (CHAR_DATA * ch) { char strsave[MAX_STRING_LENGTH]; FILE *fp; if (IS_NPC (ch) || ch->level < 2) return; if (ch->desc != NULL && ch->desc->original != NULL) ch = ch->desc->original; ch->save_time = current_time; fclose (fpReserve); sprintf (strsave, "%sbackup/%s", PLAYER_DIR, capitalize (ch->name)); if ((fp = fopen (strsave, "w")) == NULL) { bug ("Save_char_obj: fopen", 0); perror (strsave); } else { fprintf (fp, "%s~\n", ch->name); fprintf (fp, "%s~\n", ch->pcdata->title); fprintf (fp, "%s~\n", ch->lasthost); fprintf (fp, "%s~\n", ch->resolved); fprintf (fp, "%s~\n", ch->lasttime); fprintf (fp, "%d\n", ch->extra); fprintf (fp, "%d\n", ch->sex); fprintf (fp, "%s~\n", ch->pcdata->conception); fprintf (fp, "%s~\n", ch->createtime); fprintf (fp, "%d\n", ch->level); fprintf (fp, "%d\n", ch->race); fprintf (fp, "%d\n", ch->played + (int) (current_time - ch->logon)); fprintf (fp, "%s~\n", ch->pcdata->marriage); fprintf (fp, "%d\n", ch->awins); fprintf (fp, "%d\n", ch->alosses); fprintf (fp, "%d\n", ch->pkill); fprintf (fp, "%d\n", ch->pdeath); fprintf (fp, "%d\n", ch->mkill); fprintf (fp, "%d\n", ch->mdeath); fprintf (fp, "%s~\n", ch->pcdata->email); } fflush (fp); fclose (fp); fpReserve = fopen (NULL_FILE, "r"); return; } /* * Write the char. */ void fwrite_char_old (CHAR_DATA * ch, FILE * fp) { AFFECT_DATA *paf; int sn; int i; fprintf (fp, "#%s\n", IS_NPC (ch) ? "MOB" : "PLAYER"); fprintf (fp, "Name %s~\n", ch->name); fprintf (fp, "PlayerID %d\n", ch->pcdata->playerid); fprintf( fp, "Speedchar %c\n", ch->pcdata->speedchar ); fprintf (fp, "ShortDescr %s~\n", ch->short_descr); fprintf (fp, "LongDescr %s~\n", ch->long_descr); fprintf (fp, "ObjDesc %s~\n", ch->objdesc); fprintf (fp, "Description %s~\n", ch->description); fprintf (fp, "Profile %s~\n", ch->profile); fprintf (fp, "Lord %s~\n", ch->lord); fprintf (fp, "Clan %s~\n", ch->clan); fprintf (fp, "Kingdom %s~\n", ch->kingdom); fprintf (fp, "Faction %d\n", ch->pcdata->kingdom); fprintf (fp, "KingRank %d\n", ch->pcdata->kingrank); fprintf (fp, "Inducted %d\n", ch->pcdata->inducted); fprintf (fp, "Morph %s~\n", ch->morph); fprintf (fp, "Kith %d\n", ch->kith); fprintf (fp, "Extra2 %d\n", ch->extra2); fprintf (fp, "Createtime %s~\n", ch->createtime); fprintf (fp, "Lasttime %s~\n", ch->lasttime); fprintf (fp, "Resolved %s~\n", ch->resolved); fprintf (fp, "Lasthost %s~\n", ch->lasthost); fprintf (fp, "Poweraction %s~\n", ch->poweraction); fprintf (fp, "Powertype %s~\n", ch->powertype); fprintf (fp, "Prompt %s~\n", ch->prompt); fprintf (fp, "Cprompt %s~\n", ch->cprompt); fprintf (fp, "Sex %d\n", ch->sex); fprintf (fp, "Race %d\n", ch->race); fprintf (fp, "Immune %d\n", ch->immune); fprintf (fp, "Polyaff %d\n", ch->polyaff); fprintf (fp, "Itemaffect %d\n", ch->itemaffect); fprintf (fp, "Spectype %d\n", ch->spectype); fprintf (fp, "Specxtype %d\n", ch->specxtype); fprintf (fp, "Specpower %d\n", ch->specpower); fprintf (fp, "Home %d\n", ch->home); fprintf (fp, "Home2 %d\n", ch->home2); fprintf (fp, "Level %d\n", ch->level); fprintf (fp, "Trust %d\n", ch->trust); fprintf (fp, "PVersion %d\n", ch->version); fprintf (fp, "Security %d\n", ch->pcdata->security); /*OLC*/ fprintf (fp, "Paradox %d %d %d\n", ch->paradox[0], ch->paradox[1], ch->paradox[2]); fprintf (fp, "Played %d\n", ch->played + (int) (current_time - ch->logon)); fprintf (fp, "Room %d\n", (ch->in_room == get_room_index (ROOM_VNUM_LIMBO) && ch->was_in_room != NULL) ? ch->was_in_room->vnum : ch->in_room->vnum); fprintf (fp, "PkPdMkMd %d %d %d %d\n", ch->pkill, ch->pdeath, ch->mkill, ch->mdeath); fprintf (fp, "Weapons %d %d %d %d %d %d %d %d %d %d %d %d %d\n", ch->wpn[0], ch->wpn[1], ch->wpn[2], ch->wpn[3], ch->wpn[4], ch->wpn[5], ch->wpn[6], ch->wpn[7], ch->wpn[8], ch->wpn[9], ch->wpn[10], ch->wpn[11], ch->wpn[12]); fprintf (fp, "Spells %d %d %d %d %d\n", ch->spl[0], ch->spl[1], ch->spl[2], ch->spl[3], ch->spl[4]); fprintf (fp, "Combat %d %d %d %d %d %d %d %d\n", ch->cmbt[0], ch->cmbt[1], ch->cmbt[2], ch->cmbt[3], ch->cmbt[4], ch->cmbt[5], ch->cmbt[6], ch->cmbt[7]); fprintf (fp, "Stance %d %d %d %d %d %d %d %d %d %d %d %d\n", ch->stance[0], ch->stance[1], ch->stance[2], ch->stance[3], ch->stance[4], ch->stance[5], ch->stance[6], ch->stance[7], ch->stance[8], ch->stance[9], ch->stance[10], ch->stance[11]); fprintf (fp, "Locationhp %d %d %d %d %d %d %d\n", ch->loc_hp[0], ch->loc_hp[1], ch->loc_hp[2], ch->loc_hp[3], ch->loc_hp[4], ch->loc_hp[5], ch->loc_hp[6]); fprintf (fp, "HpManaMove %d %d %d %d %d %d\n", ch->hit, ch->max_hit, ch->mana, ch->max_mana, ch->move, ch->max_move); fprintf (fp, "Gold %d\n", ch->gold); fprintf (fp, "Gpoints %d\n", ch->pcdata->gpoints); fprintf (fp, "Outcast %d\n", ch->pcdata->outcast); fprintf (fp, "Voted %d\n", ch->pcdata->voted); fprintf (fp, "Whotype %d\n", ch->pcdata->whotype); fprintf (fp, "Getexp %d\n", ch->pcdata->get_exp); fprintf (fp, "Warps %d\n", ch->warp); fprintf (fp, "WarpCount %d\n", ch->warpcount); //BASTETADDITION if (IS_CLASS (ch, CLASS_BASTET)) { fprintf( fp, "BGifts %d %d %d %d %d %d %d %d %d %d %d %d\n", ch->bgifts[0],ch->bgifts[1],ch->bgifts[2],ch->bgifts[3], ch->bgifts[4],ch->bgifts[5],ch->bgifts[6],ch->bgifts[7], ch->bgifts[8],ch->bgifts[9],ch->bgifts[10],ch->bgifts[11]); } fprintf( fp, "Tokens %d %d %d %d %d %d %d %d %d %d %d %d\n", ch->tokens[0],ch->tokens[1],ch->tokens[2],ch->tokens[3], ch->tokens[4],ch->tokens[5],ch->tokens[6],ch->tokens[7], ch->tokens[8],ch->tokens[9],ch->tokens[10],ch->tokens[11]); fprintf (fp, "Cleregen %d\n", ch->cleregen); fprintf (fp, "Monkstuff %d\n", ch->monkstuff); fprintf (fp, "Monkcrap %d\n", ch->monkcrap); fprintf (fp, "Chi %d %d\n", ch->chi[0], ch->chi[1]); fprintf (fp, "Focus %d %d\n", ch->focus[0], ch->focus[1]); fprintf (fp, "Monkab %d %d %d %d\n", ch->monkab[0], ch->monkab[1], ch->monkab[2], ch->monkab[3]); fprintf (fp, "Gifts %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", ch->gifts[0], ch->gifts[1], ch->gifts[2], ch->gifts[3], ch->gifts[4], ch->gifts[5], ch->gifts[6], ch->gifts[7], ch->gifts[8], ch->gifts[9], ch->gifts[10], ch->gifts[11], ch->gifts[12], ch->gifts[13], ch->gifts[14], ch->gifts[15], ch->gifts[16], ch->gifts[17], ch->gifts[18], ch->gifts[19], ch->gifts[20]); /* Tiers */ fprintf (fp, "Tier %d\n", ch->tier); fprintf (fp, "Tpoints %d\n", ch->tpoints); fprintf (fp, "Tierxp %lli\n", ch->tierxp); fprintf (fp, "Xhitroll %d\n", ch->xhitroll); fprintf (fp, "Xdamroll %d\n", ch->xdamroll); fprintf (fp, "Xac %d\n", ch->xac); fprintf (fp, "Xdamcap %d\n", ch->xdamcap); fprintf (fp, "Xhit %d\n", ch->xhit); fprintf (fp, "Xmana %d\n", ch->xmana); fprintf (fp, "Xmove %d\n", ch->xmove); fprintf (fp, "Lstatus %d\n", ch->lstatus); fprintf (fp, "Souls %d\n", ch->pcdata->souls); fprintf (fp, "Quickening %d %d\n", ch->quickening[0], ch->quickening[1]); fprintf (fp, "HEmpower %d\n", ch->hempower); fprintf (fp, "Gnosis %d %d\n", ch->gnosis[0], ch->gnosis[1]); fprintf (fp, "Garou1 %d\n", ch->garou1); fprintf (fp, "Garou2 %d\n", ch->garou2); fprintf (fp, "Exp %lli\n", ch->exp); fprintf (fp, "Act %d\n", ch->act); fprintf (fp, "Extra %d\n", ch->extra); fprintf (fp, "AffectedBy %d\n", ch->affected_by); fprintf (fp, "Aff2 %d\n", ch->flag2); fprintf (fp, "Spheres %d %d %d %d %d %d %d %d %d\n", ch->spheres[0], ch->spheres[1], ch->spheres[2], ch->spheres[3], ch->spheres[4], ch->spheres[5], ch->spheres[6], ch->spheres[7], ch->spheres[8]); fprintf( fp, "Arcanoi %d %d %d %d %d %d %d %d %d %d %d\n", ch->arcanoi[1], ch->arcanoi[2], ch->arcanoi[3], ch->arcanoi[4], ch->arcanoi[5], ch->arcanoi[6], ch->arcanoi[7], ch->arcanoi[8], ch->arcanoi[9], ch->arcanoi[10], ch->arcanoi[11] ); fprintf (fp, "Mflags %d\n", ch->mflags); fprintf (fp, "Quint %d %d %d\n", ch->quint[0], ch->quint[1], ch->quint[2]); fprintf (fp, "Awins %d\n", ch->awins); fprintf (fp, "Alosses %d\n", ch->alosses); fprintf (fp, "Imms %d %d %d\n", ch->imms[0], ch->imms[1], ch->imms[2]); /* Bug fix from Alander */ fprintf (fp, "Position %d\n", ch->position == POS_FIGHTING ? POS_STANDING : ch->position); fprintf (fp, "Practice %d\n", ch->practice); fprintf (fp, "SavingThrow %d\n", ch->saving_throw); fprintf (fp, "Alignment %d\n", ch->alignment); fprintf (fp, "Hitroll %d\n", ch->hitroll); fprintf (fp, "Damroll %d\n", ch->damroll); fprintf (fp, "Armor %d\n", ch->armor); fprintf (fp, "Wimpy %d\n", ch->wimpy); fprintf (fp, "Deaf %d\n", ch->deaf); fprintf (fp, "LastChange %ld\n", ch->pcdata->changeplace); fprintf (fp, "ICEListen %s~\n", ch->pcdata->ice_listen); fprintf (fp, "QuestPnts %d\n", ch->questpoints); fprintf (fp, "QuestNext %d\n", ch->nextquest); fprintf (fp, "QuestNext %d\n", ch->nextquest); fprintf (fp, "QuestFail %d\n", ch->questfail); fprintf (fp, "QuestComp %d\n", ch->questcomp); fprintf (fp, "Disquiet %d\n", ch->disquiet_counter); if (IS_NPC (ch)) { fprintf (fp, "Vnum %d\n", ch->pIndexData->vnum); } else { fprintf( fp, "Backup %d\n", ch->pcdata->curr_backup ); fprintf (fp, "Password %s~\n", ch->pcdata->pwd); fprintf (fp, "Bamfin %s~\n", ch->pcdata->bamfin); fprintf (fp, "Bamfout %s~\n", ch->pcdata->bamfout); fprintf (fp, "Prefix %s~\n", ch->prefix); fprintf (fp, "Smite %s~\n", ch->pcdata->smite); fprintf (fp, "Title %s~\n", ch->pcdata->title); if(ch->pcdata->timezone != -1) fprintf(fp, "Timezone %d\n", ch->pcdata->timezone); fprintf( fp, "Questsrun %d\n", ch->pcdata->questsrun ); fprintf( fp, "Queststotal %d\n", ch->pcdata->questtotal ); fprintf (fp, "Mdecap %s~\n", ch->pcdata->mdecap); fprintf (fp, "Pagelen %d\n", ch->pcdata->pagelen); fprintf (fp, "Decapped %s~\n", ch->pcdata->decapped); fprintf (fp, "Decappedby %s~\n", ch->pcdata->decappedby); fprintf (fp, "Ienter %s~\n", ch->pcdata->ienter); fprintf (fp, "Iexit %s~\n", ch->pcdata->iexit); fprintf (fp, "Wiznet %d\n", ch->pcdata->wiznet); fprintf (fp, "Bounty %d\n", ch->pcdata->bounty); fprintf (fp, "Conception %s~\n", ch->pcdata->conception); fprintf (fp, "Parents %s~\n", ch->pcdata->parents); fprintf (fp, "Cparents %s~\n", ch->pcdata->cparents); fprintf (fp, "Marriage %s~\n", ch->pcdata->marriage); fprintf (fp, "Cinvis %d\n", ch->pcdata->cinvis); fprintf (fp, "Email %s~\n", ch->pcdata->email); fprintf (fp, "Aim %s~\n", ch->pcdata->aim); fprintf (fp, "Icq %d\n", ch->pcdata->icq); fprintf (fp, "Msn %s~\n", ch->pcdata->msn); fprintf (fp, "DenyDate %d\n", ch->pcdata->denydate); fprintf (fp, "AttrPerm %d %d %d %d %d\n", ch->pcdata->perm_str, ch->pcdata->perm_int, ch->pcdata->perm_wis, ch->pcdata->perm_dex, ch->pcdata->perm_con); fprintf (fp, "AttrMod %d %d %d %d %d\n", ch->pcdata->mod_str, ch->pcdata->mod_int, ch->pcdata->mod_wis, ch->pcdata->mod_dex, ch->pcdata->mod_con); fprintf (fp, "Quest %d\n", ch->pcdata->quest); fprintf (fp, "Wolf %d\n", ch->pcdata->wolf); fprintf (fp, "Rank %d\n", ch->pcdata->rank); /* Dragon Crap - Mac */ fprintf (fp, "Dragonaff %d\n", ch->pcdata->dragonaff); /*dragons */ fprintf (fp, "Dragonage %d\n", ch->pcdata->dragonage); /*dragons */ fprintf (fp, "Hatch %d\n", ch->pcdata->hatch); /*dragons */ fprintf (fp, "Breath1 %s~\n", ch->pcdata->breath[0]); fprintf (fp, "Breath2 %s~\n", ch->pcdata->breath[1]); fprintf (fp, "Breath3 %s~\n", ch->pcdata->breath[2]); fprintf (fp, "Breath4 %s~\n", ch->pcdata->breath[3]); fprintf (fp, "Breath5 %s~\n", ch->pcdata->breath[4]); fprintf (fp, "Absorb %d %d %d %d %d %d\n", ch->pcdata->absorb[0], ch->pcdata->absorb[1], ch->pcdata->absorb[2], ch->pcdata->absorb[3], ch->pcdata->absorb[4], ch->pcdata->absorb[5]); fprintf (fp, "Language %d %d\n", ch->pcdata->language[0], ch->pcdata->language[1]); fprintf (fp, "Stage %d %d %d\n", ch->pcdata->stage[0], ch->pcdata->stage[1], ch->pcdata->stage[2]); fprintf (fp, "Wolfform %d %d\n", ch->pcdata->wolfform[0], ch->pcdata->wolfform[1]); fprintf (fp, "Score %lli %lli %lli %lli %lli %lli\n", ch->pcdata->score[0], ch->pcdata->score[1], ch->pcdata->score[2], ch->pcdata->score[3], ch->pcdata->score[4], ch->pcdata->score[5]); fprintf (fp, "Runes %d %d %d %d\n", ch->pcdata->runes[0], ch->pcdata->runes[1], ch->pcdata->runes[2], ch->pcdata->runes[3]); fprintf (fp, "Disc %d %d %d %d %d %d %d %d %d %d %d\n", ch->pcdata->disc_a[0], ch->pcdata->disc_a[1], ch->pcdata->disc_a[2], ch->pcdata->disc_a[3], ch->pcdata->disc_a[4], ch->pcdata->disc_a[5], ch->pcdata->disc_a[6], ch->pcdata->disc_a[7], ch->pcdata->disc_a[8], ch->pcdata->disc_a[9], ch->pcdata->disc_a[10]); fprintf (fp, "Genes %d %d %d %d %d %d %d %d %d %d\n", ch->pcdata->genes[0], ch->pcdata->genes[1], ch->pcdata->genes[2], ch->pcdata->genes[3], ch->pcdata->genes[4], ch->pcdata->genes[5], ch->pcdata->genes[6], ch->pcdata->genes[7], ch->pcdata->genes[8], ch->pcdata->genes[9]); fprintf (fp, "Power %d %d\n", ch->pcdata->powers[0], ch->pcdata->powers[1]); fprintf (fp, "Powerd %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", ch->powerd[0], ch->powerd[1], ch->powerd[2], ch->powerd[3], ch->powerd[4], ch->powerd[5], ch->powerd[6], ch->powerd[7], ch->powerd[8], ch->powerd[9], ch->powerd[10], ch->powerd[11], ch->powerd[12], ch->powerd[13], ch->powerd[14], ch->powerd[15], ch->powerd[16], ch->powerd[17], ch->powerd[18], ch->powerd[19], ch->powerd[20]); fprintf (fp, "FakeCon %d %d %d %d %d %d %d %d\n", ch->pcdata->fake_skill, ch->pcdata->fake_stance, ch->pcdata->fake_hit, ch->pcdata->fake_dam, ch->pcdata->fake_ac, ch->pcdata->fake_hp, ch->pcdata->fake_mana, ch->pcdata->fake_move); if (ch->pcdata->obj_vnum != 0) fprintf (fp, "Objvnum %d\n", ch->pcdata->obj_vnum); fprintf (fp, "Condition %d %d %d\n", ch->pcdata->condition[0], ch->pcdata->condition[1], ch->pcdata->condition[2]); fprintf (fp, "StatAbility %d %d %d %d\n", ch->pcdata->stat_ability[0], ch->pcdata->stat_ability[1], ch->pcdata->stat_ability[2], ch->pcdata->stat_ability[3]); fprintf (fp, "StatAmount %d %d %d %d\n", ch->pcdata->stat_amount[0], ch->pcdata->stat_amount[1], ch->pcdata->stat_amount[2], ch->pcdata->stat_amount[3]); fprintf (fp, "StatDuration %d %d %d %d\n", ch->pcdata->stat_duration[0], ch->pcdata->stat_duration[1], ch->pcdata->stat_duration[2], ch->pcdata->stat_duration[3]); fprintf (fp, "Exhaustion %d\n", ch->pcdata->exhaustion); fprintf (fp, "Silenced %d\n", ch->pcdata->silenced); fprintf (fp, "Frozen %d\n", ch->pcdata->frozen); fprintf (fp, "Jailed %d\n", ch->pcdata->jailed); fprintf (fp, "Schallenge %d\n", ch->pcdata->schallenge); /* Save note board status */ /* Save number of boards in case that number changes */ fprintf (fp, "Boards %d ", MAX_BOARD); for (i = 0; i < MAX_BOARD; i++) fprintf (fp, "%s %ld ", boards[i].short_name, (long)ch->pcdata->last_note[i]); fprintf (fp, "\n"); fprintf (fp, "Wizinvis %d\n", ch->pcdata->wizinvis); for (sn = 0; sn < MAX_SKILL; sn++) { if (skill_table[sn].name != NULL && ch->pcdata->learned[sn] > 0) { fprintf (fp, "Skill %d '%s'\n", ch->pcdata->learned[sn], skill_table[sn].name); } } } for (paf = ch->affected; paf != NULL; paf = paf->next) { /* Thx Alander */ if (paf->type < 0 || paf->type >= MAX_SKILL) continue; fprintf (fp, "AffectData '%s' %3d %3d %3d %10d\n", skill_table[paf->type].name, paf->duration, paf->modifier, paf->location, paf->bitvector); } fprintf (fp, "End\n\n"); return; } /* * Write the char. */ void fwrite_char (CHAR_DATA * ch, FILE * fp) { AFFECT_DATA *paf; int sn; int i; fprintf (fp, "#%s\n", IS_NPC (ch) ? "MOB" : "PLAYERS"); fprintf (fp, "Name %s~\n", ch->name); fprintf (fp, "PlayerID %d\n", ch->pcdata->playerid); fprintf (fp, "ShortDescr %s~\n", ch->short_descr); fprintf (fp, "LongDescr %s~\n", ch->long_descr); fprintf (fp, "ObjDesc %s~\n", ch->objdesc); fprintf (fp, "Description %s~\n", ch->description); fprintf (fp, "Profile %s~\n", ch->profile); fprintf (fp, "Lord %s~\n", ch->lord); fprintf (fp, "Clan %s~\n", ch->clan); fprintf (fp, "Kingdom %s~\n", ch->kingdom); fprintf (fp, "Faction %d\n", ch->pcdata->kingdom); fprintf (fp, "KingRank %d\n", ch->pcdata->kingrank); fprintf (fp, "Inducted %d\n", ch->pcdata->inducted); fprintf (fp, "Class %d\n", ch->class); fprintf (fp, "Clannum %d\n", ch->clannum); fprintf (fp, "Morph %s~\n", ch->morph); fprintf (fp, "Kith %d\n", ch->kith); fprintf (fp, "Extra2 %d\n", ch->extra2); fprintf (fp, "Createtime %s~\n", ch->createtime); fprintf (fp, "Lasttime %s~\n", ch->lasttime); fprintf (fp, "Resolved %s~\n", ch->resolved); fprintf (fp, "Lasthost %s~\n", ch->lasthost); fprintf (fp, "Poweraction %s~\n", ch->poweraction); fprintf (fp, "Powertype %s~\n", ch->powertype); fprintf (fp, "Prompt %s~\n", ch->prompt); fprintf (fp, "Cprompt %s~\n", ch->cprompt); fprintf (fp, "Sex %d\n", ch->sex); fprintf (fp, "Race %d\n", ch->race); fprintf (fp, "Immune %d\n", ch->immune); fprintf (fp, "Polyaff %d\n", ch->polyaff); fprintf (fp, "Itemaffect %d\n", ch->itemaffect); fprintf (fp, "Form %d\n", ch->form); fprintf (fp, "Body %d\n", ch->body); fprintf (fp, "Beast %d\n", ch->beast); fprintf (fp, "Spectype %d\n", ch->spectype); fprintf (fp, "Specxtype %d\n", ch->specxtype); fprintf (fp, "Specpower %d\n", ch->specpower); fprintf (fp, "Home %d\n", ch->home); fprintf (fp, "Home2 %d\n", ch->home2); fprintf (fp, "Level %d\n", ch->level); fprintf (fp, "Trust %d\n", ch->trust); fprintf (fp, "PVersion %d\n", ch->version); fprintf (fp, "Security %d\n", ch->pcdata->security); /*OLC*/ fprintf (fp, "Paradox %d %d %d\n", ch->paradox[0], ch->paradox[1], ch->paradox[2]); fprintf (fp, "Played %d\n", ch->played + (int) (current_time - ch->logon)); fprintf (fp, "Room %d\n", (ch->in_room == get_room_index (ROOM_VNUM_LIMBO) && ch->was_in_room != NULL) ? ch->was_in_room->vnum : ch->in_room->vnum); fprintf (fp, "PkPdMkMd %d %d %d %d\n", ch->pkill, ch->pdeath, ch->mkill, ch->mdeath); fprintf (fp, "Weapons %d %d %d %d %d %d %d %d %d %d %d %d %d\n", ch->wpn[0], ch->wpn[1], ch->wpn[2], ch->wpn[3], ch->wpn[4], ch->wpn[5], ch->wpn[6], ch->wpn[7], ch->wpn[8], ch->wpn[9], ch->wpn[10], ch->wpn[11], ch->wpn[12]); fprintf (fp, "Spells %d %d %d %d %d\n", ch->spl[0], ch->spl[1], ch->spl[2], ch->spl[3], ch->spl[4]); fprintf (fp, "Combat %d %d %d %d %d %d %d %d\n", ch->cmbt[0], ch->cmbt[1], ch->cmbt[2], ch->cmbt[3], ch->cmbt[4], ch->cmbt[5], ch->cmbt[6], ch->cmbt[7]); fprintf (fp, "Stance %d %d %d %d %d %d %d %d %d %d %d %d\n", ch->stance[0], ch->stance[1], ch->stance[2], ch->stance[3], ch->stance[4], ch->stance[5], ch->stance[6], ch->stance[7], ch->stance[8], ch->stance[9], ch->stance[10], ch->stance[11]); fprintf (fp, "Locationhp %d %d %d %d %d %d %d\n", ch->loc_hp[0], ch->loc_hp[1], ch->loc_hp[2], ch->loc_hp[3], ch->loc_hp[4], ch->loc_hp[5], ch->loc_hp[6]); fprintf (fp, "HpManaMove %d %d %d %d %d %d\n", ch->hit, ch->max_hit, ch->mana, ch->max_mana, ch->move, ch->max_move); fprintf (fp, "Gold %d\n", ch->gold); fprintf (fp, "Gpoints %d\n", ch->pcdata->gpoints); fprintf (fp, "Outcast %d\n", ch->pcdata->outcast); fprintf (fp, "Voted %d\n", ch->pcdata->voted); fprintf (fp, "Whotype %d\n", ch->pcdata->whotype); fprintf (fp, "Getexp %d\n", ch->pcdata->get_exp); fprintf (fp, "Warps %d\n", ch->warp); fprintf (fp, "WarpCount %d\n", ch->warpcount); //BASTETADDITION if (IS_CLASS (ch, CLASS_BASTET)) { fprintf( fp, "BGifts %d %d %d %d %d %d %d %d %d %d %d %d\n", ch->bgifts[0],ch->bgifts[1],ch->bgifts[2],ch->bgifts[3], ch->bgifts[4],ch->bgifts[5],ch->bgifts[6],ch->bgifts[7], ch->bgifts[8],ch->bgifts[9],ch->bgifts[10],ch->bgifts[11]); } fprintf( fp, "Tokens %d %d %d %d %d %d %d %d %d %d %d %d\n", ch->tokens[0],ch->tokens[1],ch->tokens[2],ch->tokens[3], ch->tokens[4],ch->tokens[5],ch->tokens[6],ch->tokens[7], ch->tokens[8],ch->tokens[9],ch->tokens[10],ch->tokens[11]); fprintf (fp, "Cleregen %d\n", ch->cleregen); fprintf (fp, "Monkstuff %d\n", ch->monkstuff); fprintf (fp, "Monkcrap %d\n", ch->monkcrap); fprintf (fp, "Chi %d %d\n", ch->chi[0], ch->chi[1]); fprintf (fp, "Focus %d %d\n", ch->focus[0], ch->focus[1]); fprintf (fp, "Monkab %d %d %d %d\n", ch->monkab[0], ch->monkab[1], ch->monkab[2], ch->monkab[3]); fprintf (fp, "Gifts %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n", ch->gifts[0], ch->gifts[1], ch->gifts[2], ch->gifts[3], ch->gifts[4], ch->gifts[5], ch->gifts[6], ch->gifts[7], ch->gifts[8], ch->gifts[9], ch->gifts[10], ch->gifts[11], ch->gifts[12], ch->gifts[13], ch->gifts[14], ch->gifts[15], ch->gifts[16], ch->gifts[17], ch->gifts[18], ch->gifts[19], ch->gifts[20]); /* Tiers */ fprintf (fp, "Tier %d\n", ch->tier); fprintf (fp, "Tpoints %d\n", ch->tpoints); fprintf (fp, "Tierxp %lli\n", ch->tierxp); fprintf (fp, "Xhitroll %d\n", ch->xhitroll); fprintf (fp, "Xdamroll %d\n", ch->xdamroll); fprintf (fp, "Xac %d\n", ch->xac); fprintf (fp, "Xdamcap %d\n", ch->xdamcap); fprintf (fp, "Xhit %d\n", ch->xhit); fprintf (fp, "Xmana %d\n", ch->xmana); fprintf (fp, "Xmove %d\n", ch->xmove); fprintf (fp, "Lstatus %d\n", ch->lstatus); fprintf (fp, "Souls %d\n", ch->pcdata->souls); fprintf (fp, "Quickening %d %d\n", ch->quickening[0], ch->quickening[1]); fprintf (fp, "Hempower %d\n", ch->hempower); fprintf (fp, "Gnosis %d %d\n", ch->gnosis[0], ch->gnosis[1]); fprintf (fp, "Garou1 %d\n", ch->garou1); fprintf (fp, "Garou2 %d\n", ch->garou2); fprintf (fp, "Exp %lli\n", ch->exp); fprintf (fp, "Act %d\n", ch->act); fprintf( fp, "Wbits %d\n", ch->wbits ); fprintf (fp, "Special %d\n", ch->special); fprintf (fp, "Empower %s~\n", ch->empowered); fprintf (fp, "More %d\n", ch->more); fprintf (fp, "Tempflag %d\n", ch->pcdata->tempflag); fprintf (fp, "Screensize %d\n", ch->pcdata->vt100_size); fprintf (fp, "Newbits %d\n", ch->newbits); fprintf (fp, "Extra %d\n", ch->extra); fprintf (fp, "AffectedBy %d\n", ch->affected_by); fprintf (fp, "Aff2 %d\n", ch->flag2); fprintf (fp, "Spheres %d %d %d %d %d %d %d %d %d\n", ch->spheres[0], ch->spheres[1], ch->spheres[2], ch->spheres[3], ch->spheres[4], ch->spheres[5], ch->spheres[6], ch->spheres[7], ch->spheres[8]); fprintf( fp, "Arcanoi %d %d %d %d %d %d %d %d %d %d %d\n", ch->arcanoi[1], ch->arcanoi[2], ch->arcanoi[3], ch->arcanoi[4], ch->arcanoi[5], ch->arcanoi[6], ch->arcanoi[7], ch->arcanoi[8], ch->arcanoi[9], ch->arcanoi[10], ch->arcanoi[11] ); fprintf (fp, "Mflags %d\n", ch->mflags); fprintf (fp, "Quint %d %d %d\n", ch->quint[0], ch->quint[1], ch->quint[2]); fprintf (fp, "Awins %d\n", ch->awins); fprintf (fp, "Alosses %d\n", ch->alosses); fprintf (fp, "Imms %d %d %d\n", ch->imms[0], ch->imms[1], ch->imms[2]); /* Bug fix from Alander */ fprintf (fp, "Position %d\n", ch->position == POS_FIGHTING ? POS_STANDING : ch->position); fprintf (fp, "Practice %d\n", ch->practice); fprintf (fp, "SavingThrow %d\n", ch->saving_throw); fprintf (fp, "Alignment %d\n", ch->alignment); fprintf (fp, "Hitroll %d\n", ch->hitroll); fprintf (fp, "Damroll %d\n", ch->damroll); fprintf (fp, "Armor %d\n", ch->armor); fprintf (fp, "Wimpy %d\n", ch->wimpy); fprintf (fp, "Deaf %d\n", ch->deaf); fprintf (fp, "LastChange %ld\n", ch->pcdata->changeplace); fprintf (fp, "ICEListen %s~\n", ch->pcdata->ice_listen); fprintf (fp, "QuestPnts %d\n", ch->questpoints); fprintf (fp, "QuestNext %d\n", ch->nextquest); fprintf (fp, "QuestNext %d\n", ch->nextquest); fprintf (fp, "QuestFail %d\n", ch->questfail); fprintf (fp, "QuestComp %d\n", ch->questcomp); fprintf (fp, "Disquiet %d\n", ch->disquiet_counter); if (IS_NPC (ch)) { fprintf (fp, "Vnum %d\n", ch->pIndexData->vnum); } else { fprintf( fp, "Backup %d\n", ch->pcdata->curr_backup ); fprintf (fp, "Password %s~\n", ch->pcdata->pwd); fprintf (fp, "Bamfin %s~\n", ch->pcdata->bamfin); fprintf (fp, "Bamfout %s~\n", ch->pcdata->bamfout); fprintf (fp, "Prefix %s~\n", ch->prefix); fprintf (fp, "Smite %s~\n", ch->pcdata->smite); fprintf (fp, "Title %s~\n", ch->pcdata->title); if(ch->pcdata->timezone != -1) fprintf(fp, "Timezone %d\n", ch->pcdata->timezone); fprintf( fp, "Questsrun %d\n", ch->pcdata->questsrun ); fprintf( fp, "Queststotal %d\n", ch->pcdata->questtotal ); fprintf (fp, "Pagelen %d\n", ch->pcdata->pagelen); fprintf (fp, "Mdecap %s~\n", ch->pcdata->mdecap); fprintf (fp, "Decapped %s~\n", ch->pcdata->decapped); fprintf (fp, "Decappedby %s~\n", ch->pcdata->decappedby); fprintf (fp, "Ienter %s~\n", ch->pcdata->ienter); fprintf (fp, "Iexit %s~\n", ch->pcdata->iexit); fprintf (fp, "Wiznet %d\n", ch->pcdata->wiznet); fprintf (fp, "Bounty %d\n", ch->pcdata->bounty); fprintf (fp, "Conception %s~\n", ch->pcdata->conception); fprintf (fp, "Parents %s~\n", ch->pcdata->parents); fprintf (fp, "Cparents %s~\n", ch->pcdata->cparents); fprintf (fp, "Marriage %s~\n", ch->pcdata->marriage); fprintf (fp, "Cinvis %d\n", ch->pcdata->cinvis); fprintf( fp, "RegKey %d\n",ch->registration_key); fprintf( fp, "RegLogins %d\n",ch->registration_logins); fprintf( fp, "EmailSet %d\n",ch->email_set ); fprintf( fp, "Registerred %d\n",ch->registerred ); fprintf (fp, "Email %s~\n", ch->pcdata->email); fprintf (fp, "Aim %s~\n", ch->pcdata->aim); fprintf (fp, "Icq %d\n", ch->pcdata->icq); fprintf (fp, "Msn %s~\n", ch->pcdata->msn); fprintf (fp, "DenyDate %d\n", ch->pcdata->denydate); fprintf (fp, "AttrPerm %d %d %d %d %d\n", ch->pcdata->perm_str, ch->pcdata->perm_int, ch->pcdata->perm_wis, ch->pcdata->perm_dex, ch->pcdata->perm_con); fprintf (fp, "AttrMod %d %d %d %d %d\n", ch->pcdata->mod_str, ch->pcdata->mod_int, ch->pcdata->mod_wis, ch->pcdata->mod_dex, ch->pcdata->mod_con); fprintf (fp, "Quest %d\n", ch->pcdata->quest); fprintf (fp, "Wolf %d\n", ch->pcdata->stats[UNI_RAGE]); fprintf (fp, "Rank %d\n", ch->pcdata->rank); /* Dragon Crap - Mac */ fprintf (fp, "Dragonaff %d\n", ch->pcdata->dragonaff); /*dragons */ fprintf (fp, "Dragonage %d\n", ch->pcdata->dragonage); /*dragons */ fprintf (fp, "Hatch %d\n", ch->pcdata->hatch); /*dragons */ fprintf (fp, "Breath1 %s~\n", ch->pcdata->breath[0]); fprintf (fp, "Breath2 %s~\n", ch->pcdata->breath[1]); fprintf (fp, "Breath3 %s~\n", ch->pcdata->breath[2]); fprintf (fp, "Breath4 %s~\n", ch->pcdata->breath[3]); fprintf (fp, "Breath5 %s~\n", ch->pcdata->breath[4]); fprintf (fp, "Absorb %d %d %d %d %d %d\n", ch->pcdata->absorb[0], ch->pcdata->absorb[1], ch->pcdata->absorb[2], ch->pcdata->absorb[3], ch->pcdata->absorb[4], ch->pcdata->absorb[5]); fprintf (fp, "Language %d %d\n", ch->pcdata->language[0], ch->pcdata->language[1]); fprintf (fp, "Stage %d %d %d\n", ch->pcdata->stage[0], ch->pcdata->stage[1], ch->pcdata->stage[2]); fprintf (fp, "Disc %d %d %d %d %d %d %d %d %d %d %d\n", ch->pcdata->disc_a[0], ch->pcdata->disc_a[1], ch->pcdata->disc_a[2], ch->pcdata->disc_a[3], ch->pcdata->disc_a[4], ch->pcdata->disc_a[5], ch->pcdata->disc_a[6], ch->pcdata->disc_a[7], ch->pcdata->disc_a[8], ch->pcdata->disc_a[9], ch->pcdata->disc_a[10]); fprintf (fp, "Score %lli %lli %lli %lli %lli %lli\n", ch->pcdata->score[0], ch->pcdata->score[1], ch->pcdata->score[2], ch->pcdata->score[3], ch->pcdata->score[4], ch->pcdata->score[5]); fprintf (fp, "Genes %d %d %d %d %d %d %d %d %d %d\n", ch->pcdata->genes[0], ch->pcdata->genes[1], ch->pcdata->genes[2], ch->pcdata->genes[3], ch->pcdata->genes[4], ch->pcdata->genes[5], ch->pcdata->genes[6], ch->pcdata->genes[7], ch->pcdata->genes[8], ch->pcdata->genes[9]); fprintf (fp, "Power "); for (sn = 0; sn < 20; sn++) { fprintf (fp, "%d ", ch->pcdata->powers[sn]); } fprintf (fp, "\n"); fprintf (fp, "PowersMod "); for (sn = 0; sn < 20; sn++) { fprintf (fp, "%d ", ch->pcdata->powers_mod[sn]); } fprintf (fp, "\n"); fprintf (fp, "PowersSet "); for (sn = 0; sn < 20; sn++) { fprintf (fp, "%d ", ch->pcdata->powers_set[sn]); } fprintf (fp, "\n"); fprintf( fp, "PowersWear %d\n", ch->pcdata->powers_set_wear ); fprintf (fp, "ShadowPower "); for (sn = 0; sn < 20; sn++) { fprintf (fp, "%d ", ch->pcdata->shadow_powers[sn]); } fprintf (fp, "\n"); fprintf (fp, "Stats "); for (sn = 0; sn < 12; sn++) { fprintf (fp, "%d ", ch->pcdata->stats[sn]); } fprintf (fp, "\n"); fprintf (fp, "FakeCon %d %d %d %d %d %d %d %d\n", ch->pcdata->fake_skill, ch->pcdata->fake_stance, ch->pcdata->fake_hit, ch->pcdata->fake_dam, ch->pcdata->fake_ac, ch->pcdata->fake_hp, ch->pcdata->fake_mana, ch->pcdata->fake_move); if (ch->pcdata->obj_vnum != 0) fprintf (fp, "Objvnum %d\n", ch->pcdata->obj_vnum); fprintf (fp, "Condition %d %d %d\n", ch->pcdata->condition[0], ch->pcdata->condition[1], ch->pcdata->condition[2]); fprintf (fp, "StatAbility %d %d %d %d\n", ch->pcdata->stat_ability[0], ch->pcdata->stat_ability[1], ch->pcdata->stat_ability[2], ch->pcdata->stat_ability[3]); fprintf (fp, "StatAmount %d %d %d %d\n", ch->pcdata->stat_amount[0], ch->pcdata->stat_amount[1], ch->pcdata->stat_amount[2], ch->pcdata->stat_amount[3]); fprintf (fp, "StatDuration %d %d %d %d\n", ch->pcdata->stat_duration[0], ch->pcdata->stat_duration[1], ch->pcdata->stat_duration[2], ch->pcdata->stat_duration[3]); fprintf (fp, "Exhaustion %d\n", ch->pcdata->exhaustion); fprintf (fp, "Silenced %d\n", ch->pcdata->silenced); fprintf (fp, "Frozen %d\n", ch->pcdata->frozen); fprintf (fp, "Jailed %d\n", ch->pcdata->jailed); fprintf (fp, "Schallenge %d\n", ch->pcdata->schallenge); fprintf (fp, "Boards %d ", MAX_BOARD); for (i = 0; i < MAX_BOARD; i++) fprintf (fp, "%s %ld ", boards[i].short_name, (long)ch->pcdata->last_note[i]); fprintf (fp, "\n"); fprintf (fp, "Wizinvis %d\n", ch->pcdata->wizinvis); for (sn = 0; sn < MAX_SKILL; sn++) { if (skill_table[sn].name != NULL && ch->pcdata->learned[sn] > 0) { fprintf (fp, "Skill %d '%s'\n", ch->pcdata->learned[sn], skill_table[sn].name); } } } for (paf = ch->affected; paf != NULL; paf = paf->next) { /* Thx Alander */ if (paf->type < 0 || paf->type >= MAX_SKILL) continue; fprintf (fp, "AffectData '%s' %3d %3d %3d %10d\n", skill_table[paf->type].name, paf->duration, paf->modifier, paf->location, paf->bitvector); } fprintf (fp, "End\n\n"); return; } /* * Write an object and its contents. */ void fwrite_obj (CHAR_DATA * ch, OBJ_DATA * obj, FILE * fp, int iNest) { EXTRA_DESCR_DATA *ed; AFFECT_DATA *paf; /* int vnum = obj->pIndexData->vnum; * * Slick recursion to write lists backwards, * so loading them will load in forwards order. */ if (obj->next_content != NULL) fwrite_obj (ch, obj->next_content, fp, iNest); /* * Castrate storage characters. */ if ((obj->chobj != NULL && (!IS_NPC (obj->chobj) && obj->chobj->pcdata->obj_vnum != 0)) || obj->item_type == ITEM_KEY || obj->item_type == ITEM_PILL || obj->item_type == ITEM_SCROLL) return; fprintf (fp, "#OBJECT\n"); fprintf (fp, "Nest %d\n", iNest); fprintf (fp, "Name %s~\n", obj->name); fprintf (fp, "ShortDescr %s~\n", obj->short_descr); fprintf (fp, "Description %s~\n", obj->description); if (obj->chpoweron != NULL && strlen (obj->chpoweron) > 1 && str_cmp (obj->chpoweron, "(null)")) fprintf (fp, "Poweronch %s~\n", obj->chpoweron); if (obj->chpoweroff != NULL && strlen (obj->chpoweroff) > 1 && str_cmp (obj->chpoweroff, "(null)")) fprintf (fp, "Poweroffch %s~\n", obj->chpoweroff); if (obj->chpoweruse != NULL && strlen (obj->chpoweruse) > 1 && str_cmp (obj->chpoweruse, "(null)")) fprintf (fp, "Powerusech %s~\n", obj->chpoweruse); if (obj->victpoweron != NULL && strlen (obj->victpoweron) > 1 && str_cmp (obj->victpoweron, "(null)")) fprintf (fp, "Poweronvict %s~\n", obj->victpoweron); if (obj->victpoweroff != NULL && strlen (obj->victpoweroff) > 1 && str_cmp (obj->victpoweroff, "(null)")) fprintf (fp, "Poweroffvict %s~\n", obj->victpoweroff); if (obj->victpoweruse != NULL && strlen (obj->victpoweruse) > 1 && str_cmp (obj->victpoweruse, "(null)")) fprintf (fp, "Powerusevict %s~\n", obj->victpoweruse); if (obj->questmaker != NULL && strlen (obj->questmaker) > 1) fprintf (fp, "Questmaker %s~\n", obj->questmaker); if (obj->questowner != NULL && strlen (obj->questowner) > 1) fprintf (fp, "Questowner %s~\n", obj->questowner); /* if ( vnum < 17 || ( vnum >= 30003 && vnum <= 30037 ) ) fprintf( fp, "Vnum %d\n", obj->pIndexData->vnum ); else fprintf( fp, "Vnum 30041\n" ); */ fprintf (fp, "Vnum %d\n", obj->pIndexData->vnum); fprintf (fp, "ExtraFlags %d\n", obj->extra_flags); fprintf (fp, "WearFlags %d\n", obj->wear_flags); fprintf (fp, "WearLoc %d\n", obj->wear_loc); fprintf (fp, "ItemType %d\n", obj->item_type); fprintf (fp, "Weight %d\n", obj->weight); fprintf (fp, "WeapFlags %d\n", obj->weapflags); if (obj->spectype != 0) fprintf (fp, "Spectype %d\n", obj->spectype); if (obj->specpower != 0) fprintf (fp, "Specpower %d\n", obj->specpower); if (obj->specxtype != 0) fprintf (fp, "Specxtype %d\n", obj->specxtype); fprintf (fp, "Condition %d\n", obj->condition); fprintf (fp, "Toughness %d\n", obj->toughness); fprintf (fp, "Resistance %d\n", obj->resistance); if (obj->quest != 0) fprintf (fp, "Quest %d\n", obj->quest); if (obj->quest2 != 0) fprintf (fp, "Quest2 %d\n", obj->quest2); if (obj->points != 0) fprintf (fp, "Points %d\n", obj->points); fprintf (fp, "Level %d\n", obj->level); fprintf (fp, "Timer %d\n", obj->timer); fprintf (fp, "Cost %d\n", obj->cost); fprintf (fp, "Values %d %d %d %d\n", obj->value[0], obj->value[1], obj->value[2], obj->value[3]); fprintf(fp, "ObjVer %d\n", obj->item_ver ); switch (obj->item_type) { case ITEM_POTION: if (obj->value[1] > 0) { fprintf (fp, "Spell 1 '%s'\n", skill_table[obj->value[1]].name); } if (obj->value[2] > 0) { fprintf (fp, "Spell 2 '%s'\n", skill_table[obj->value[2]].name); } if (obj->value[3] > 0) { fprintf (fp, "Spell 3 '%s'\n", skill_table[obj->value[3]].name); } break; case ITEM_SCROLL: if (obj->value[1] > 0) { fprintf (fp, "Spell 1 '%s'\n", skill_table[obj->value[1]].name); } if (obj->value[2] > 0) { fprintf (fp, "Spell 2 '%s'\n", skill_table[obj->value[2]].name); } if (obj->value[3] > 0) { fprintf (fp, "Spell 3 '%s'\n", skill_table[obj->value[3]].name); } break; case ITEM_PILL: case ITEM_STAFF: case ITEM_WAND: if (obj->value[3] > 0) { fprintf (fp, "Spell 3 '%s'\n", skill_table[obj->value[3]].name); } break; } for (paf = obj->affected; paf != NULL; paf = paf->next) { /* if ( paf->type < 0 || paf->type >= MAX_SKILL ) continue; */ fprintf (fp, "AffectData %d %d %d\n", paf->duration, paf->modifier, paf->location); } /* if ( vnum >= 17 && ( vnum < 30003 || vnum > 30037 ) ) { for ( paf = obj->pIndexData->affected; paf != NULL; paf = paf->next ) { ** if ( paf->type < 0 || paf->type >= MAX_SKILL ) continue; ** fprintf( fp, "AffectData %d %d %d\n", paf->duration, paf->modifier, paf->location ); } } */ for (ed = obj->extra_descr; ed != NULL; ed = ed->next) { fprintf (fp, "ExtraDescr %s~ %s~\n", ed->keyword, ed->description); } /* if ( vnum >= 17 && ( vnum < 30003 || vnum > 30037 ) ) { for ( ed = obj->pIndexData->extra_descr; ed != NULL; ed = ed->next ) { fprintf( fp, "ExtraDescr %s~ %s~\n", ed->keyword, ed->description ); } } */ fprintf (fp, "End\n\n"); if (obj->contains != NULL) fwrite_obj (ch, obj->contains, fp, iNest + 1); return; } /* * Load a char and inventory into a new ch structure. */ bool load_char_obj (DESCRIPTOR_DATA * d, char *name) { static PC_DATA pcdata_zero; char strsave[MAX_STRING_LENGTH]; char *strtime; CHAR_DATA *ch; FILE *fp; bool found; int sn; if (char_free == NULL) { ch = alloc_perm (sizeof (*ch)); } else { ch = char_free; char_free = char_free->next; } clear_char (ch); if (pcdata_free == NULL) { ch->pcdata = alloc_perm (sizeof (*ch->pcdata)); } else { ch->pcdata = pcdata_free; pcdata_free = pcdata_free->next; } *ch->pcdata = pcdata_zero; d->character = ch; ch->desc = d; ch->name = str_dup (name); ch->act = PLR_BLANK | PLR_COMBINE | PLR_PROMPT; ch->pcdata->playerid = 0; ch->tier = 1; ch->extra = 0; ch->pcdata->gpoints = 0; ch->pcdata->outcast = 0; ch->pcdata->get_exp = 0; ch->version = 0; ch->pcdata->whotype = 1; ch->empowered = str_dup (""); ch->war = 0; ch->last_room = NULL; ch->special = 0; ch->more = 0; ch->pcdata->tempflag = 0; ch->pcdata->vt100_size = 0; ch->pcdata->cinvis = 0; ch->newbits = 0; ch->clannum = 0; ch->class = -1; ch->pcdata->familiar = NULL; ch->pcdata->evilchat = NULL; ch->pcdata->partner = NULL; ch->pcdata->propose = NULL; ch->pcdata->chobj = NULL; ch->pcdata->memorised = NULL; /* every characters starts at default board from login.. this board should be read_level == 0 ! */ ch->pcdata->board = &boards[DEFAULT_BOARD]; ch->pcdata->pwd = str_dup (""); ch->pcdata->bamfin = str_dup (""); ch->pcdata->bamfout = str_dup (""); ch->pcdata->title = str_dup (""); ch->pcdata->timezone = -1; ch->pcdata->speedchar = '|'; ch->profile = str_dup (""); ch->pcdata->mdecap = str_dup ("%v has been decapitated by %n"); ch->pcdata->ienter = str_dup ("#r%n #yhas joined #rChrystancia"); ch->pcdata->iexit = str_dup ("#r%n #yhas retired from #rChrystancia"); ch->prefix = str_dup (""); ch->pcdata->decapped = str_dup (""); ch->pcdata->decappedby = str_dup (""); ch->pcdata->bounty = 0; ch->pcdata->wizinvis = 0; ch->pcdata->pagelen = 30; ch->pcdata->onlinetime = 0; //bah ch->pcdata->dragonaff = 0; /*dragons */ ch->pcdata->dragonage = 0; /*dragons */ ch->pcdata->hatch = 0; /*dragons */ ch->pcdata->online = number_range (0, 2); ch->pcdata->breath[0] = str_dup (""); ch->pcdata->breath[1] = str_dup (""); ch->pcdata->breath[2] = str_dup (""); ch->pcdata->breath[3] = str_dup (""); ch->pcdata->breath[4] = str_dup (""); ch->pcdata->conception = str_dup (""); ch->pcdata->parents = str_dup (""); ch->pcdata->cparents = str_dup (""); ch->pcdata->marriage = str_dup (""); ch->pcdata->email = str_dup (""); ch->registration_logins = 0; ch->email_set = FALSE; ch->registerred = FALSE; ch->pcdata->aim = str_dup (""); ch->pcdata->msn = str_dup (""); ch->pcdata->icq = 0; ch->lord = str_dup (""); ch->clan = str_dup (""); ch->kingdom = str_dup (""); ch->pcdata->kingdom = 0; ch->pcdata->kingrank = 0; ch->pcdata->inducted = 0; ch->morph = str_dup (""); ch->pload = str_dup (""); ch->prompt = str_dup (""); ch->cprompt = str_dup (""); strtime = new_date(current_time); //strtime[strlen (strtime) - 1] = '\0'; free_string (ch->lasttime); ch->createtime = str_dup (strtime); ch->lasttime = str_dup (""); ch->resolved = str_dup (""); ch->lasthost = str_dup (""); ch->poweraction = str_dup (""); ch->powertype = str_dup (""); ch->hunting = str_dup (""); ch->pcdata->followers = 0; ch->pcdata->absorb[0] = 0; ch->pcdata->absorb[1] = 0; ch->pcdata->absorb[2] = 0; ch->pcdata->absorb[3] = 0; ch->pcdata->absorb[4] = 0; ch->pcdata->absorb[5] = 0; ch->spectype = 0; ch->specxtype = 0; ch->specpower = 0; ch->mounted = 0; ch->pcdata->denydate = 0; ch->quickening[0] = 0; ch->quickening[1] = 0; ch->hempower = 0; ch->home = 3001; ch->home2 = 3001; ch->paradox[0] = 0; /* Total paradox */ ch->paradox[1] = 0; /* Current Paradox */ ch->paradox[2] = 0; /* Paradox Ticker */ ch->combined_exp = 0; ch->combined_cp = 0; ch->damcap[0] = 1000; ch->damcap[1] = 0; ch->itemaffect = 0; ch->polyaff = 0; ch->immune = 0; ch->form = 0; ch->body = 32767; ch->beast = 15; for (sn = 0; sn < 7; sn++) ch->loc_hp[sn] = 0; for (sn = 0; sn < 13; sn++) ch->wpn[sn] = 0; for (sn = 0; sn < 5; sn++) ch->spl[sn] = 0; for (sn = 0; sn < 8; sn++) ch->cmbt[sn] = 0; for (sn = 0; sn < 11; sn++) ch->cmbt[sn] = 0; ch->pkill = 0; ch->cleregen = 0; ch->pdeath = 0; ch->mkill = 0; ch->mdeath = 0; // ch->clannum = 0; ch->class = -1; ch->pcdata->followers = 0; ch->pcdata->absorb[0] = 0; ch->pcdata->absorb[1] = 0; ch->pcdata->absorb[2] = 0; ch->pcdata->absorb[3] = 0; ch->pcdata->absorb[4] = 0; ch->pcdata->absorb[5] = 0; ch->pcdata->perm_str = 13; ch->pcdata->perm_int = 13; ch->pcdata->perm_wis = 13; ch->pcdata->perm_dex = 13; ch->pcdata->perm_con = 13; ch->pcdata->quest = 0; ch->pcdata->wolf = 0; ch->pcdata->rank = 0; ch->pcdata->language[0] = 0; ch->pcdata->language[1] = 0; ch->pcdata->stage[0] = 0; ch->pcdata->stage[1] = 0; ch->pcdata->stage[2] = 0; ch->pcdata->stage[3] = 0; ch->pcdata->wolfform[0] = 1; ch->pcdata->wolfform[1] = 1; ch->pcdata->score[0] = 0; ch->pcdata->score[1] = 0; ch->pcdata->score[2] = 0; ch->pcdata->score[3] = 0; ch->pcdata->score[4] = 0; ch->pcdata->score[5] = 0; for (sn = 0; sn < 10; sn++) ch->pcdata->genes[sn] = 0; for (sn = 0; sn < 20; sn++) { ch->pcdata->powers[sn] = 0; ch->pcdata->powers_mod[sn] = 0; ch->pcdata->powers_set[sn] = 0; ch->pcdata->shadow_powers[sn] = 0; } for (sn = 0; sn < 12; sn++) ch->pcdata->stats[sn] = 0; ch->pcdata->powers_set_wear = 0; ch->pcdata->security = 9; /* OLC */ ch->pcdata->fake_skill = 0; ch->pcdata->fake_stance = 0; ch->pcdata->fake_hit = 0; ch->pcdata->fake_dam = 0; ch->pcdata->fake_ac = 0; ch->pcdata->fake_hp = 0; ch->pcdata->fake_mana = 0; ch->pcdata->fake_move = 0; ch->pcdata->obj_vnum = 0; ch->pcdata->condition[COND_THIRST] = 48; ch->pcdata->condition[COND_FULL] = 48; ch->pcdata->stat_ability[STAT_STR] = 0; ch->pcdata->stat_ability[STAT_END] = 0; ch->pcdata->stat_ability[STAT_REF] = 0; ch->pcdata->stat_ability[STAT_FLE] = 0; ch->pcdata->stat_amount[STAT_STR] = 0; ch->pcdata->stat_amount[STAT_END] = 0; ch->pcdata->stat_amount[STAT_REF] = 0; ch->pcdata->stat_amount[STAT_FLE] = 0; ch->pcdata->stat_duration[STAT_STR] = 0; ch->pcdata->stat_duration[STAT_END] = 0; ch->pcdata->stat_duration[STAT_REF] = 0; ch->pcdata->stat_duration[STAT_FLE] = 0; ch->pcdata->exhaustion = 0; /* Set IMC Defaults */ ch->pcdata->ice_listen = str_dup (" "); found = FALSE; fclose (fpReserve); sprintf (strsave, "%s%s", PLAYER_DIR, capitalize (name)); if ((fp = fopen (strsave, "r")) != NULL) { int iNest; for (iNest = 0; iNest < MAX_NEST; iNest++) rgObjNest[iNest] = NULL; found = TRUE; for (;;) { char letter; char *word; letter = fread_letter (fp); if (letter == '*') { fread_to_eol (fp); continue; } if (letter != '#') { bug ("Load_char_obj: # not found.", 0); break; } word = fread_word (fp); if (!str_cmp (word, "PLAYER")) { fread_char_old (ch, fp); convert_old_new (ch); } else if (!str_cmp (word, "PLAYERS")) { if (!fread_char (ch, fp)) break; } else if (!str_cmp (word, "OBJECT")) fread_obj (ch, fp); else if (!str_cmp (word, "END")) break; else { bug ("Load_char_obj: bad section.", 0); break; } } fclose (fp); } fpReserve = fopen (NULL_FILE, "r"); return found; } bool load_char_short (DESCRIPTOR_DATA * d, char *name) { static PC_DATA pcdata_zero; char strsave[MAX_STRING_LENGTH]; CHAR_DATA *ch; char *strtime; FILE *fp; bool found; if (char_free == NULL) { ch = alloc_perm (sizeof (*ch)); } else { ch = char_free; char_free = char_free->next; } clear_char (ch); if (pcdata_free == NULL) { ch->pcdata = alloc_perm (sizeof (*ch->pcdata)); } else { ch->pcdata = pcdata_free; pcdata_free = pcdata_free->next; } *ch->pcdata = pcdata_zero; d->character = ch; ch->desc = d; ch->name = str_dup (name); ch->act = PLR_BLANK | PLR_COMBINE | PLR_PROMPT; ch->pcdata->smite = str_dup (""); ch->extra = 0; ch->tier = 1; ch->empowered = str_dup (""); ch->pcdata->smite = str_dup (""); ch->pcdata->familiar = NULL; ch->pcdata->evilchat = NULL; ch->pcdata->partner = NULL; ch->pcdata->propose = NULL; ch->pcdata->chobj = NULL; ch->pcdata->memorised = NULL; ch->pcdata->pwd = str_dup (""); ch->pcdata->bamfin = str_dup (""); ch->pcdata->bamfout = str_dup (""); ch->pcdata->title = str_dup (""); ch->pcdata->timezone = -1; ch->profile = str_dup (""); ch->pcdata->mdecap = str_dup ("%v has been decapitated by %n"); ch->pcdata->ienter = str_dup ("#r%n #yhas joined #rChrystancia"); ch->pcdata->iexit = str_dup ("#r%n #yhas retired from #rChrystancia"); ch->prefix = str_dup (""); ch->prefix = str_dup (""); ch->pcdata->decapped = str_dup (""); ch->pcdata->decappedby = str_dup (""); ch->pcdata->wizinvis = 0; ch->pcdata->pagelen = 30; ch->pcdata->onlinetime = 0; ch->pcdata->dragonaff = 0; /*dragons */ ch->pcdata->dragonage = 0; /*dragons */ ch->pcdata->hatch = 0; /*dragons */ ch->pcdata->breath[0] = str_dup (""); ch->pcdata->breath[1] = str_dup (""); ch->pcdata->breath[2] = str_dup (""); ch->pcdata->breath[3] = str_dup (""); ch->pcdata->breath[4] = str_dup (""); ch->pcdata->conception = str_dup (""); ch->pcdata->parents = str_dup (""); ch->pcdata->cparents = str_dup (""); ch->pcdata->marriage = str_dup (""); ch->pcdata->email = str_dup (""); ch->registration_logins = 0; ch->email_set = FALSE; ch->registerred = FALSE; ch->pcdata->aim = str_dup (""); ch->pcdata->msn = str_dup (""); ch->pcdata->icq = 0; ch->lord = str_dup (""); ch->clan = str_dup (""); ch->kingdom = str_dup (""); ch->pcdata->kingdom = 0; ch->pcdata->kingrank = 0; ch->pcdata->inducted = 0; ch->morph = str_dup (""); ch->pload = str_dup (""); ch->prompt = str_dup (""); ch->cprompt = str_dup (""); strtime = new_date (current_time); //strtime[strlen (strtime) - 1] = '\0'; free_string (ch->lasttime); ch->createtime = str_dup (strtime); ch->lasttime = str_dup (""); ch->resolved = str_dup (""); ch->lasthost = str_dup (""); ch->poweraction = str_dup (""); ch->powertype = str_dup (""); ch->hunting = str_dup (""); ch->spectype = 0; ch->specxtype = 0; ch->specpower = 0; ch->mounted = 0; ch->pcdata->denydate = 0; ch->quickening[0] = 0; ch->quickening[1] = 0; ch->hempower = 0; ch->home = 3001; ch->home2 = 3001; ch->paradox[0] = 0; /* Total paradox */ ch->paradox[1] = 0; /* Current Paradox */ ch->paradox[2] = 0; /* Paradox Ticker */ ch->damcap[0] = 1000; ch->damcap[1] = 0; ch->itemaffect = 0; ch->polyaff = 0; ch->immune = 0; ch->form = 0; ch->body = 32767; ch->beast = 15; ch->loc_hp[0] = 0; ch->loc_hp[1] = 0; ch->loc_hp[2] = 0; ch->loc_hp[3] = 0; ch->loc_hp[4] = 0; ch->loc_hp[5] = 0; ch->loc_hp[6] = 0; ch->wpn[0] = 0; ch->wpn[1] = 0; ch->wpn[2] = 0; ch->wpn[3] = 0; ch->wpn[4] = 0; ch->wpn[5] = 0; ch->wpn[6] = 0; ch->wpn[7] = 0; ch->wpn[8] = 0; ch->wpn[9] = 0; ch->wpn[10] = 0; ch->wpn[11] = 0; ch->wpn[12] = 0; ch->spl[0] = 4; ch->spl[1] = 4; ch->spl[2] = 4; ch->spl[3] = 4; ch->spl[4] = 4; ch->cmbt[0] = 0; ch->cmbt[1] = 0; ch->cmbt[2] = 0; ch->cmbt[3] = 0; ch->cmbt[4] = 0; ch->cmbt[5] = 0; ch->cmbt[6] = 0; ch->cmbt[7] = 0; ch->stance[0] = 0; ch->stance[1] = 0; ch->stance[2] = 0; ch->stance[3] = 0; ch->stance[4] = 0; ch->stance[5] = 0; ch->stance[6] = 0; ch->stance[7] = 0; ch->stance[8] = 0; ch->stance[9] = 0; ch->stance[10] = 0; ch->stance[11] = 0; ch->pkill = 0; ch->cleregen = 0; ch->pdeath = 0; ch->mkill = 0; ch->clannum = 0; ch->mdeath = 0; ch->class = -1; ch->pcdata->followers = 0; ch->pcdata->perm_str = 13; ch->pcdata->perm_int = 13; ch->pcdata->perm_wis = 13; ch->pcdata->perm_dex = 13; ch->pcdata->perm_con = 13; ch->pcdata->quest = 0; ch->pcdata->wolf = 0; ch->pcdata->rank = 0; ch->pcdata->language[0] = 0; ch->pcdata->language[1] = 0; ch->pcdata->stage[0] = 0; ch->pcdata->stage[1] = 0; ch->pcdata->stage[2] = 0; ch->pcdata->stage[3] = 0; ch->pcdata->wolfform[0] = 1; ch->pcdata->wolfform[1] = 1; ch->pcdata->score[0] = 0; ch->pcdata->score[1] = 0; ch->pcdata->score[2] = 0; ch->pcdata->score[3] = 0; ch->pcdata->score[4] = 0; ch->pcdata->score[5] = 0; ch->pcdata->runes[0] = 0; ch->pcdata->runes[1] = 0; ch->pcdata->runes[2] = 0; ch->pcdata->runes[3] = 0; ch->pcdata->disc_a[0] = 0; ch->pcdata->disc_a[1] = 0; ch->pcdata->disc_a[2] = 0; ch->pcdata->disc_a[3] = 0; ch->pcdata->disc_a[4] = 0; ch->pcdata->disc_a[5] = 0; ch->pcdata->disc_a[6] = 0; ch->pcdata->disc_a[7] = 0; ch->pcdata->disc_a[8] = 0; ch->pcdata->disc_a[9] = 0; ch->pcdata->disc_a[10] = 0; ch->pcdata->genes[0] = 0; ch->pcdata->genes[1] = 0; ch->pcdata->genes[2] = 0; ch->pcdata->genes[3] = 0; ch->pcdata->genes[4] = 0; ch->pcdata->genes[5] = 0; ch->pcdata->genes[6] = 0; ch->pcdata->genes[7] = 0; ch->pcdata->genes[8] = 0; ch->pcdata->genes[9] = 0; ch->pcdata->powers[0] = 0; ch->pcdata->powers[1] = 0; ch->pcdata->fake_skill = 0; ch->pcdata->fake_stance = 0; ch->pcdata->fake_hit = 0; ch->pcdata->fake_dam = 0; ch->pcdata->fake_ac = 0; ch->pcdata->fake_hp = 0; ch->pcdata->fake_mana = 0; ch->pcdata->fake_move = 0; ch->pcdata->obj_vnum = 0; ch->pcdata->condition[COND_THIRST] = 48; ch->pcdata->condition[COND_FULL] = 48; ch->pcdata->stat_ability[STAT_STR] = 0; ch->pcdata->stat_ability[STAT_END] = 0; ch->pcdata->stat_ability[STAT_REF] = 0; ch->pcdata->stat_ability[STAT_FLE] = 0; ch->pcdata->stat_amount[STAT_STR] = 0; ch->pcdata->stat_amount[STAT_END] = 0; ch->pcdata->stat_amount[STAT_REF] = 0; ch->pcdata->stat_amount[STAT_FLE] = 0; ch->pcdata->stat_duration[STAT_STR] = 0; ch->pcdata->stat_duration[STAT_END] = 0; ch->pcdata->stat_duration[STAT_REF] = 0; ch->pcdata->stat_duration[STAT_FLE] = 0; ch->pcdata->exhaustion = 0; /* Set IMC Defaults */ ch->pcdata->ice_listen = str_dup (" "); found = FALSE; fclose (fpReserve); sprintf (strsave, "%s%s", PLAYER_DIR, capitalize (name)); if ((fp = fopen (strsave, "r")) != NULL) { int iNest; for (iNest = 0; iNest < MAX_NEST; iNest++) rgObjNest[iNest] = NULL; found = TRUE; for (;;) { char letter; char *word; letter = fread_letter (fp); if (letter == '*') { fread_to_eol (fp); continue; } if (letter != '#') { bug ("Load_char_obj: # not found.", 0); break; } word = fread_word (fp); if (!str_cmp (word, "PLAYER")) fread_char_old (ch, fp); if (!str_cmp (word, "PLAYERS")) fread_char (ch, fp); else if (!str_cmp (word, "OBJECT")) break; else if (!str_cmp (word, "END")) break; else { bug ("Load_char_obj: bad section.", 0); break; } } fclose (fp); } fpReserve = fopen (NULL_FILE, "r"); return found; } /* * Read in a char. */ #if defined(KEY) #undef KEY #endif #define KEY( literal, field, value ) \ if ( !str_cmp( word, literal ) ) \ { \ field = value; \ fMatch = TRUE; \ break; \ } void fread_char_old (CHAR_DATA * ch, FILE * fp) { char buf[MAX_STRING_LENGTH]; char *word; bool fMatch; int dummy; for (;;) { word = feof (fp) ? "End" : fread_word (fp); fMatch = FALSE; switch (UPPER (word[0])) { default: fMatch = TRUE; fread_to_eol (fp); break; case '*': fMatch = TRUE; fread_to_eol (fp); break; case 'A': KEY ("Aim", ch->pcdata->aim, fread_string (fp)); if (!str_cmp (word, "Absorb")) { ch->pcdata->absorb[0] = fread_number (fp); ch->pcdata->absorb[1] = fread_number (fp); ch->pcdata->absorb[2] = fread_number (fp); ch->pcdata->absorb[3] = fread_number (fp); ch->pcdata->absorb[4] = fread_number (fp); ch->pcdata->absorb[5] = fread_number (fp); fMatch = TRUE; break; } if ( !str_cmp( word, "Arcanoi" ) ) { ch->arcanoi[1] = fread_number( fp ); ch->arcanoi[2] = fread_number( fp ); ch->arcanoi[3] = fread_number( fp ); ch->arcanoi[4] = fread_number( fp ); ch->arcanoi[5] = fread_number( fp ); ch->arcanoi[6] = fread_number( fp ); ch->arcanoi[7] = fread_number( fp ); ch->arcanoi[8] = fread_number( fp ); ch->arcanoi[9] = fread_number( fp ); ch->arcanoi[10] = fread_number( fp ); ch->arcanoi[11] = fread_number( fp ); fMatch = TRUE; break; } KEY ("Awins", ch->awins, fread_number (fp)); KEY ("Alosses", ch->alosses, fread_number (fp)); KEY ("Act", ch->act, fread_number (fp)); KEY ("AffectedBy", ch->affected_by, fread_number (fp)); KEY ("Alignment", ch->alignment, fread_number (fp)); KEY ("Armor", ch->armor, fread_number (fp)); KEY ("Aff2", ch->flag2, fread_number (fp)); if (!str_cmp (word, "Affect") || !str_cmp (word, "AffectData")) { AFFECT_DATA *paf; if (affect_free == NULL) { paf = alloc_perm (sizeof (*paf)); } else { paf = affect_free; affect_free = affect_free->next; } if (!str_cmp (word, "Affect")) { /* Obsolete 2.0 form. */ paf->type = fread_number (fp); } else { int sn; sn = skill_lookup (fread_word (fp)); if (sn < 0) bug ("Fread_char: unknown skill.", 0); else paf->type = sn; } paf->duration = fread_number (fp); paf->modifier = fread_number (fp); paf->location = fread_number (fp); paf->bitvector = fread_number (fp); paf->next = ch->affected; ch->affected = paf; fMatch = TRUE; break; } if (!str_cmp (word, "AttrMod")) { ch->pcdata->mod_str = fread_number (fp); ch->pcdata->mod_int = fread_number (fp); ch->pcdata->mod_wis = fread_number (fp); ch->pcdata->mod_dex = fread_number (fp); ch->pcdata->mod_con = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "AttrPerm")) { ch->pcdata->perm_str = fread_number (fp); ch->pcdata->perm_int = fread_number (fp); ch->pcdata->perm_wis = fread_number (fp); ch->pcdata->perm_dex = fread_number (fp); ch->pcdata->perm_con = fread_number (fp); fMatch = TRUE; break; } break; case 'B': if (!str_cmp (word, "BGifts")) { ch->bgifts[0] = fread_number (fp); ch->bgifts[1] = fread_number (fp); ch->bgifts[2] = fread_number (fp); ch->bgifts[3] = fread_number (fp); ch->bgifts[4] = fread_number (fp); ch->bgifts[5] = fread_number (fp); ch->bgifts[6] = fread_number (fp); ch->bgifts[7] = fread_number (fp); ch->bgifts[8] = fread_number (fp); ch->bgifts[9] = fread_number (fp); ch->bgifts[10] = fread_number (fp); ch->bgifts[11] = fread_number (fp); fMatch = TRUE; break; } KEY ("Body", ch->body, fread_number (fp)); KEY ("Bounty", ch->pcdata->bounty, fread_number (fp)); KEY ("Backup", ch->pcdata->curr_backup,fread_number(fp)); KEY ("Bamfin", ch->pcdata->bamfin, fread_string (fp)); KEY ("Bamfout", ch->pcdata->bamfout, fread_string (fp)); KEY ("Beast", ch->beast, fread_number (fp)); KEY ("Breath1", ch->pcdata->breath[0], fread_string (fp)); KEY ("Breath2", ch->pcdata->breath[1], fread_string (fp)); KEY ("Breath3", ch->pcdata->breath[2], fread_string (fp)); KEY ("Breath4", ch->pcdata->breath[3], fread_string (fp)); KEY ("Breath5", ch->pcdata->breath[4], fread_string (fp)); break; case 'C': KEY ("Cinvis", ch->pcdata->cinvis, fread_number (fp)); KEY ("Clan", ch->clan, fread_string (fp)); KEY ("Cleregen", ch->cleregen, fread_number (fp)); KEY ("Class", dummy, fread_number (fp)); if (!str_cmp (word, "Chi")) { ch->chi[0] = fread_number (fp); ch->chi[1] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "Combat")) { ch->cmbt[0] = fread_number (fp); ch->cmbt[1] = fread_number (fp); ch->cmbt[2] = fread_number (fp); ch->cmbt[3] = fread_number (fp); ch->cmbt[4] = fread_number (fp); ch->cmbt[5] = fread_number (fp); ch->cmbt[6] = fread_number (fp); ch->cmbt[7] = fread_number (fp); fMatch = TRUE; break; } KEY ("Conception", ch->pcdata->conception, fread_string (fp)); if (!str_cmp (word, "Condition")) { ch->pcdata->condition[0] = fread_number (fp); ch->pcdata->condition[1] = fread_number (fp); ch->pcdata->condition[2] = fread_number (fp); fMatch = TRUE; break; } KEY ("Cparents", ch->pcdata->cparents, fread_string (fp)); KEY ("Cprompt", ch->cprompt, fread_string (fp)); KEY ("Createtime", ch->createtime, fread_string (fp)); break; case 'D': KEY ("Damroll", ch->damroll, fread_number (fp)); KEY ("Deaf", ch->deaf, fread_number (fp)); KEY ("Demonic", ch->pcdata->demonic_a, fread_number (fp)); KEY ("Decapped", ch->pcdata->decapped, fread_string (fp)); KEY ("Decappedby", ch->pcdata->decappedby, fread_string (fp)); KEY ("Description", ch->description, fread_string (fp)); KEY ("DenyDate", ch->pcdata->denydate, fread_number (fp)); KEY ("Disquiet", ch->disquiet_counter, fread_number (fp)); KEY ("Dragonaff", ch->pcdata->dragonaff, fread_number (fp)); /*dragons */ KEY ("Dragonage", ch->pcdata->dragonage, fread_number (fp)); /*dragons */ if (!str_cmp (word, "Disc")) { ch->pcdata->disc_a[0] = fread_number (fp); ch->pcdata->disc_a[1] = fread_number (fp); ch->pcdata->disc_a[2] = fread_number (fp); ch->pcdata->disc_a[3] = fread_number (fp); ch->pcdata->disc_a[4] = fread_number (fp); ch->pcdata->disc_a[5] = fread_number (fp); ch->pcdata->disc_a[6] = fread_number (fp); ch->pcdata->disc_a[7] = fread_number (fp); ch->pcdata->disc_a[8] = fread_number (fp); ch->pcdata->disc_a[9] = fread_number (fp); ch->pcdata->disc_a[10] = fread_number (fp); fMatch = TRUE; break; } KEY ("Drowaff", dummy, fread_number (fp)); /* Drow */ KEY ("Drowpwr", dummy, fread_number (fp)); /* Drow */ KEY ("Drowmag", dummy, fread_number (fp)); /* Drow */ break; case 'E': KEY( "EmailSet", ch->email_set, fread_number( fp ) ); KEY ("Email", ch->pcdata->email, fread_string (fp)); if (!str_cmp (word, "End")) return; KEY ("Exhaustion", ch->pcdata->exhaustion, fread_number (fp)); KEY ("Exp", ch->exp, fread_long (fp)); KEY ("Extra", ch->extra, fread_number (fp)); KEY ("Extra2", ch->extra2, fread_number (fp)); KEY ("Empower", ch->empowered, fread_string (fp)); break; case 'F': KEY ("Faction", ch->pcdata->kingdom, fread_number (fp)); if (!str_cmp (word, "Focus")) { ch->focus[0] = fread_number (fp); ch->focus[1] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "FakeCon")) { ch->pcdata->fake_skill = fread_number (fp); ch->pcdata->fake_stance = fread_number (fp); ch->pcdata->fake_hit = fread_number (fp); ch->pcdata->fake_dam = fread_number (fp); ch->pcdata->fake_ac = fread_number (fp); ch->pcdata->fake_hp = fread_number (fp); ch->pcdata->fake_mana = fread_number (fp); ch->pcdata->fake_move = fread_number (fp); fMatch = TRUE; break; } KEY ("Form", ch->form, fread_number (fp)); KEY ("Frozen", ch->pcdata->frozen, fread_number (fp)); break; case 'G': if (!str_cmp (word, "Gifts")) { ch->gifts[0] = fread_number (fp); ch->gifts[1] = fread_number (fp); ch->gifts[2] = fread_number (fp); ch->gifts[3] = fread_number (fp); ch->gifts[4] = fread_number (fp); ch->gifts[5] = fread_number (fp); ch->gifts[6] = fread_number (fp); ch->gifts[7] = fread_number (fp); ch->gifts[8] = fread_number (fp); ch->gifts[9] = fread_number (fp); ch->gifts[10] = fread_number (fp); ch->gifts[11] = fread_number (fp); ch->gifts[12] = fread_number (fp); ch->gifts[13] = fread_number (fp); ch->gifts[14] = fread_number (fp); ch->gifts[15] = fread_number (fp); ch->gifts[16] = fread_number (fp); ch->gifts[17] = fread_number (fp); ch->gifts[18] = fread_number (fp); ch->gifts[19] = fread_number (fp); ch->gifts[20] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "Gnosis")) { ch->gnosis[0] = fread_number (fp); ch->gnosis[1] = fread_number (fp); fMatch = TRUE; break; } KEY ("Garou1", ch->garou1, fread_number (fp)); KEY ("Garou2", ch->garou2, fread_number (fp)); KEY ("Gpoints", ch->pcdata->gpoints, fread_number (fp)); KEY ("Getexp", ch->pcdata->get_exp, fread_number (fp)); if (!str_cmp (word, "Genes")) { ch->pcdata->genes[0] = fread_number (fp); ch->pcdata->genes[1] = fread_number (fp); ch->pcdata->genes[2] = fread_number (fp); ch->pcdata->genes[3] = fread_number (fp); ch->pcdata->genes[4] = fread_number (fp); ch->pcdata->genes[5] = fread_number (fp); ch->pcdata->genes[6] = fread_number (fp); ch->pcdata->genes[7] = fread_number (fp); ch->pcdata->genes[8] = fread_number (fp); ch->pcdata->genes[9] = fread_number (fp); fMatch = TRUE; break; } KEY ("Gold", ch->gold, fread_number (fp)); break; case 'H': KEY ("HEmpower", ch->hempower, fread_number (fp)); KEY ("Hitroll", ch->hitroll, fread_number (fp)); KEY ("Home", ch->home, fread_number (fp)); KEY ("Home2", ch->home2, fread_number (fp)); KEY ("Hatch", ch->pcdata->hatch, fread_number (fp)); if (!str_cmp (word, "HpManaMove")) { ch->hit = fread_number (fp); ch->max_hit = fread_number (fp); ch->mana = fread_number (fp); ch->max_mana = fread_number (fp); ch->move = fread_number (fp); ch->max_move = fread_number (fp); fMatch = TRUE; break; } break; case 'I': KEY ("Icq", ch->pcdata->icq, fread_number (fp)); if (!str_cmp (word, "Imms")) { ch->imms[0] = fread_number (fp); ch->imms[1] = fread_number (fp); ch->imms[2] = fread_number (fp); fMatch = TRUE; break; } KEY ("Inducted", ch->pcdata->inducted, fread_number (fp)); KEY ("Ienter", ch->pcdata->ienter, fread_string (fp)); KEY ("Iexit", ch->pcdata->iexit, fread_string (fp)); KEY ("Immune", ch->immune, fread_number (fp)); KEY ("Itemaffect", ch->itemaffect, fread_number (fp)); KEY ("ICEListen", ch->pcdata->ice_listen, fread_string (fp)); break; case 'J': KEY ("Jailed", ch->pcdata->jailed, fread_number (fp)); break; case 'K': KEY ("Kingdom", ch->kingdom, fread_string (fp)); KEY ("KingRank", ch->pcdata->kingrank, fread_number (fp)); KEY ("Kith", ch->kith, fread_number (fp)); break; case 'L': if (!str_cmp (word, "Language")) { ch->pcdata->language[0] = fread_number (fp); ch->pcdata->language[1] = fread_number (fp); fMatch = TRUE; break; } KEY ("LastChange", ch->pcdata->changeplace, fread_number (fp)); KEY ("Lstatus", ch->lstatus, fread_number (fp)); KEY ("Lasthost", ch->lasthost, fread_string (fp)); KEY ("Lasttime", ch->lasttime, fread_string (fp)); KEY ("Level", ch->level, fread_number (fp)); if (!str_cmp (word, "Locationhp")) { ch->loc_hp[0] = fread_number (fp); ch->loc_hp[1] = fread_number (fp); ch->loc_hp[2] = fread_number (fp); ch->loc_hp[3] = fread_number (fp); ch->loc_hp[4] = fread_number (fp); ch->loc_hp[5] = fread_number (fp); ch->loc_hp[6] = fread_number (fp); fMatch = TRUE; break; } KEY ("LongDescr", ch->long_descr, fread_string (fp)); KEY ("Lord", ch->lord, fread_string (fp)); break; case 'M': KEY ("Msn", ch->pcdata->msn, fread_string (fp)); KEY ("More", ch->more, fread_number (fp)); if (!str_cmp (word, "Monkab")) { ch->monkab[0] = fread_number (fp); ch->monkab[1] = fread_number (fp); ch->monkab[2] = fread_number (fp); ch->monkab[3] = fread_number (fp); fMatch = TRUE; break; } KEY ("Monkstuff", ch->monkstuff, fread_number (fp)); KEY ("Monkcrap", ch->monkcrap, fread_number (fp)); KEY ("Marriage", ch->pcdata->marriage, fread_string (fp)); KEY ("Mflags", ch->mflags, fread_number (fp)); KEY ("Morph", ch->morph, fread_string (fp)); KEY ("Mdecap", ch->pcdata->mdecap, fread_string (fp)); break; case 'N': KEY ("Newbits", ch->newbits, fread_number (fp)); if (!str_cmp (word, "Name")) { /* * Name already set externally. */ fread_to_eol (fp); fMatch = TRUE; break; } break; case 'O': KEY ("Outcast", ch->pcdata->outcast, fread_number (fp)); KEY ("Objvnum", ch->pcdata->obj_vnum, fread_number (fp)); KEY ("ObjDesc", ch->objdesc, fread_string (fp)); break; case 'P': if (!str_cmp (word, "Powerd")) { ch->powerd[0] = fread_number (fp); ch->powerd[1] = fread_number (fp); ch->powerd[2] = fread_number (fp); ch->powerd[3] = fread_number (fp); ch->powerd[4] = fread_number (fp); ch->powerd[5] = fread_number (fp); ch->powerd[6] = fread_number (fp); ch->powerd[7] = fread_number (fp); ch->powerd[8] = fread_number (fp); ch->powerd[9] = fread_number (fp); ch->powerd[10] = fread_number (fp); ch->powerd[11] = fread_number (fp); ch->powerd[12] = fread_number (fp); ch->powerd[13] = fread_number (fp); ch->powerd[14] = fread_number (fp); ch->powerd[15] = fread_number (fp); ch->powerd[16] = fread_number (fp); ch->powerd[17] = fread_number (fp); ch->powerd[18] = fread_number (fp); ch->powerd[19] = fread_number (fp); ch->powerd[20] = fread_number (fp); fMatch = TRUE; break; } KEY ("PVersion", ch->version, fread_number (fp)); KEY ("Prefix", ch->prefix, fread_string (fp)); if (!str_cmp (word, "Paradox")) { ch->paradox[0] = fread_number (fp); ch->paradox[1] = fread_number (fp); ch->paradox[2] = fread_number (fp); fMatch = TRUE; break; } KEY ("Profile", ch->profile, fread_string (fp)); KEY ("Pagelen", ch->pcdata->pagelen, fread_number (fp)); KEY ("Parents", ch->pcdata->parents, fread_string (fp)); KEY ("Password", ch->pcdata->pwd, fread_string (fp)); KEY ("PlayerID", ch->pcdata->playerid, fread_number (fp)); KEY ("Played", ch->played, fread_number (fp)); KEY ("Polyaff", ch->polyaff, fread_number (fp)); KEY ("Power_Point", dummy, fread_number (fp)); /* drow */ if (!str_cmp (word, "Power")) { ch->pcdata->powers[0] = fread_number (fp); ch->pcdata->powers[1] = fread_number (fp); fMatch = TRUE; break; } KEY ("Poweraction", ch->poweraction, fread_string (fp)); KEY ("Powertype", ch->powertype, fread_string (fp)); KEY ("Position", ch->position, fread_number (fp)); KEY ("Practice", ch->practice, fread_number (fp)); if (!str_cmp (word, "PkPdMkMd")) { ch->pkill = fread_number (fp); ch->pdeath = fread_number (fp); ch->mkill = fread_number (fp); ch->mdeath = fread_number (fp); fMatch = TRUE; break; } KEY ("Prompt", ch->prompt, fread_string (fp)); break; case 'Q': if (!str_cmp (word, "Quint")) { ch->quint[0] = fread_number (fp); ch->quint[1] = fread_number (fp); ch->quint[2] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "Quickening")) { ch->quickening[0] = fread_number (fp); ch->quickening[1] = fread_number (fp); fMatch = TRUE; break; } KEY( "Questsrun", ch->pcdata->questsrun, fread_number( fp ) ); KEY( "Queststotal", ch->pcdata->questtotal, fread_number( fp ) ); KEY ("Quest", ch->pcdata->quest, fread_number (fp)); /* New Quest Code */ KEY ("QuestPnts", ch->questpoints, fread_number (fp)); KEY ("QuestNext", ch->nextquest, fread_number (fp)); KEY ("QuestFail", ch->questfail, fread_number (fp)); KEY ("QuestComp", ch->questcomp, fread_number (fp)); break; case 'R': KEY( "RegKey", ch->registration_key, fread_number( fp ) ); KEY( "RegLogins", ch->registration_logins,fread_number( fp ) ); KEY( "Registerred", ch->registerred, fread_number( fp ) ); KEY ("Race", ch->race, fread_number (fp)); KEY ("Rank", ch->pcdata->rank, fread_number (fp)); KEY ("Resolved", ch->resolved, fread_string (fp)); if (!str_cmp (word, "Room")) { int temp = fread_number( fp ); if (temp >= 12000 && temp <= 12010) ch->in_room = get_room_index( ROOM_VNUM_ALTAR ); else ch->in_room = get_room_index( temp ); if ( ch->in_room == NULL ) ch->in_room = get_room_index( ROOM_VNUM_LIMBO ); fMatch = TRUE; break; } if (!str_cmp (word, "Runes")) { ch->pcdata->runes[0] = fread_number (fp); ch->pcdata->runes[1] = fread_number (fp); ch->pcdata->runes[2] = fread_number (fp); ch->pcdata->runes[3] = fread_number (fp); fMatch = TRUE; break; } break; case 'S': KEY ("Schallenge", ch->pcdata->schallenge, fread_number (fp)); KEY ("Screensize", ch->pcdata->vt100_size, fread_number (fp)); KEY ("SavingThrow", ch->saving_throw, fread_number (fp)); if ( !str_cmp( word, "Speedchar" ) ) { ch->pcdata->speedchar = fread_letter( fp ); fMatch = TRUE; break; } KEY ("Smite", ch->pcdata->smite, fread_string (fp)); KEY ("Security", ch->pcdata->security, fread_number (fp)); if (!str_cmp (word, "Score")) { ch->pcdata->score[0] = fread_long (fp); ch->pcdata->score[1] = fread_long (fp); ch->pcdata->score[2] = fread_long (fp); ch->pcdata->score[3] = fread_long (fp); ch->pcdata->score[4] = fread_long (fp); ch->pcdata->score[5] = fread_long (fp); fMatch = TRUE; break; } if (!str_cmp (word, "Spheres")) { ch->spheres[0] = fread_number (fp); ch->spheres[1] = fread_number (fp); ch->spheres[2] = fread_number (fp); ch->spheres[3] = fread_number (fp); ch->spheres[4] = fread_number (fp); ch->spheres[5] = fread_number (fp); ch->spheres[6] = fread_number (fp); ch->spheres[7] = fread_number (fp); ch->spheres[8] = fread_number (fp); fMatch = TRUE; break; } KEY ("Souls", ch->pcdata->souls, fread_number (fp)); KEY ("Sex", ch->sex, fread_number (fp)); KEY ("ShortDescr", ch->short_descr, fread_string (fp)); KEY ("Security", ch->pcdata->security, fread_number (fp)); KEY ("Silenced", ch->pcdata->silenced, fread_number (fp)); if (!str_cmp (word, "Skill")) { int sn; int value; value = fread_number (fp); sn = skill_lookup (fread_word (fp)); /* if ( sn < 0 ) bug( "Fread_char: unknown skill.", 0 ); else ch->pcdata->learned[sn] = value; */ if (sn >= 0) ch->pcdata->learned[sn] = value; fMatch = TRUE; } KEY ("Specpower", ch->specpower, fread_number (fp)); KEY ("Spectype", ch->spectype, fread_number (fp)); KEY ("Specxtype", ch->specxtype, fread_number (fp)); if (!str_cmp (word, "Spells")) { ch->spl[0] = fread_number (fp); ch->spl[1] = fread_number (fp); ch->spl[2] = fread_number (fp); ch->spl[3] = fread_number (fp); ch->spl[4] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "Stage")) { ch->pcdata->stage[0] = fread_number (fp); ch->pcdata->stage[1] = fread_number (fp); ch->pcdata->stage[2] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "Stance")) { ch->stance[0] = fread_number (fp); ch->stance[1] = fread_number (fp); ch->stance[2] = fread_number (fp); ch->stance[3] = fread_number (fp); ch->stance[4] = fread_number (fp); ch->stance[5] = fread_number (fp); ch->stance[6] = fread_number (fp); ch->stance[7] = fread_number (fp); ch->stance[8] = fread_number (fp); ch->stance[9] = fread_number (fp); ch->stance[10] = fread_number (fp); ch->stance[11] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "StatAbility")) { ch->pcdata->stat_ability[0] = fread_number (fp); ch->pcdata->stat_ability[1] = fread_number (fp); ch->pcdata->stat_ability[2] = fread_number (fp); ch->pcdata->stat_ability[3] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "StatAmount")) { ch->pcdata->stat_amount[0] = fread_number (fp); ch->pcdata->stat_amount[1] = fread_number (fp); ch->pcdata->stat_amount[2] = fread_number (fp); ch->pcdata->stat_amount[3] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "StatDuration")) { ch->pcdata->stat_duration[0] = fread_number (fp); ch->pcdata->stat_duration[1] = fread_number (fp); ch->pcdata->stat_duration[2] = fread_number (fp); ch->pcdata->stat_duration[3] = fread_number (fp); fMatch = TRUE; break; } break; case 'T': KEY ("Tier", ch->tier, fread_number (fp)); KEY ("Tpoints", ch->tpoints, fread_number (fp)); KEY ("Tierxp", ch->tierxp, fread_long (fp)); KEY ("Tempflag", ch->pcdata->tempflag, fread_number (fp)); KEY ("Trust", ch->trust, fread_number (fp)); KEY("Timezone", ch->pcdata->timezone, fread_number(fp)); if (!str_cmp (word, "Title")) { ch->pcdata->title = fread_string (fp); if (isalpha (ch->pcdata->title[0]) || isdigit (ch->pcdata->title[0]) || (ch->pcdata->title[0] == '#')) { sprintf (buf, " %s", ch->pcdata->title); free_string (ch->pcdata->title); ch->pcdata->title = str_dup (buf); } fMatch = TRUE; break; } if (!str_cmp (word, "Tokens")) { ch->tokens[0] = fread_number (fp); ch->tokens[1] = fread_number (fp); ch->tokens[2] = fread_number (fp); ch->tokens[3] = fread_number (fp); ch->tokens[4] = fread_number (fp); ch->tokens[5] = fread_number (fp); ch->tokens[6] = fread_number (fp); ch->tokens[7] = fread_number (fp); ch->tokens[8] = fread_number (fp); ch->tokens[9] = fread_number (fp); ch->tokens[10] = fread_number (fp); ch->tokens[11] = fread_number (fp); fMatch = TRUE; break; } break; case 'V': KEY ("Voted", ch->pcdata->voted, fread_number (fp)); if (!str_cmp (word, "Vnum")) { ch->pIndexData = get_mob_index (fread_number (fp)); fMatch = TRUE; break; } break; case 'W': KEY ("Whotype", ch->pcdata->whotype, fread_number (fp)); KEY ("Warps", ch->warp, fread_number (fp)); KEY ("WarpCount", ch->warpcount, fread_number (fp)); KEY( "Wbits", ch->wbits, fread_number( fp ) ); if (!str_cmp (word, "Weapons")) { ch->wpn[0] = fread_number (fp); ch->wpn[1] = fread_number (fp); ch->wpn[2] = fread_number (fp); ch->wpn[3] = fread_number (fp); ch->wpn[4] = fread_number (fp); ch->wpn[5] = fread_number (fp); ch->wpn[6] = fread_number (fp); ch->wpn[7] = fread_number (fp); ch->wpn[8] = fread_number (fp); ch->wpn[9] = fread_number (fp); ch->wpn[10] = fread_number (fp); ch->wpn[11] = fread_number (fp); ch->wpn[12] = fread_number (fp); fMatch = TRUE; break; } KEY ("Wimpy", ch->wimpy, fread_number (fp)); KEY ("Wiznet", ch->pcdata->wiznet, fread_number (fp)); KEY ("Wizinvis", ch->pcdata->wizinvis, fread_number (fp)); KEY ("Wolf", ch->pcdata->wolf, fread_number (fp)); if (!str_cmp (word, "Wolfform")) { ch->pcdata->wolfform[0] = fread_number (fp); ch->pcdata->wolfform[1] = fread_number (fp); fMatch = TRUE; break; } break; case 'X': KEY ("Xhitroll", ch->xhitroll, fread_number (fp)); KEY ("Xdamroll", ch->xdamroll, fread_number (fp)); KEY ("Xac", ch->xac, fread_number (fp)); KEY ("Xdamcap", ch->xdamcap, fread_number (fp)); KEY ("Xhit", ch->xhit, fread_number (fp)); KEY ("Xmana", ch->xmana, fread_number (fp)); KEY ("Xmove", ch->xmove, fread_number (fp)); break; } if (!fMatch) { sprintf (buf, "Fread_char: no match. WORD: %s", word); bug (buf, 0); write_to_descriptor (ch->desc, "*****************************************************************\n\r" "** Your player file has become corrupted since you last played **\n\r" "** Email legend@wolfpaw.net explaining that your player file **\n\r" "** is bugged. Someone shall try and fix it as soon as **\n\r" "** possible **\n\r" "*****************************************************************\n\r", 0); close_socket (ch->desc); return; fread_to_eol (fp); } } } void fread_obj (CHAR_DATA * ch, FILE * fp) { char buf[MSL]; static OBJ_DATA obj_zero; OBJ_DATA *obj; char *word; int iNest; bool fMatch; bool fNest; bool fVnum; if (obj_free == NULL) { obj = alloc_perm (sizeof (*obj)); } else { obj = obj_free; obj_free = obj_free->next; } *obj = obj_zero; obj->name = str_dup (""); obj->short_descr = str_dup (""); obj->description = str_dup (""); obj->chpoweron = str_dup ("(null)"); obj->chpoweroff = str_dup ("(null)"); obj->chpoweruse = str_dup ("(null)"); obj->victpoweron = str_dup ("(null)"); obj->victpoweroff = str_dup ("(null)"); obj->victpoweruse = str_dup ("(null)"); obj->questmaker = str_dup (""); obj->questowner = str_dup (""); obj->spectype = 0; obj->specpower = 0; obj->specxtype = 0; obj->condition = 100; obj->toughness = 0; obj->resistance = 100; obj->quest = 0; obj->quest2 = 0; obj->points = 0; fNest = FALSE; fVnum = TRUE; iNest = 0; for (;;) { word = feof (fp) ? "End" : fread_word (fp); fMatch = FALSE; switch (UPPER (word[0])) { case '*': fMatch = TRUE; fread_to_eol (fp); break; case 'A': if (!str_cmp (word, "Affect") || !str_cmp (word, "AffectData")) { AFFECT_DATA *paf; if (affect_free == NULL) { paf = alloc_perm (sizeof (*paf)); } else { paf = affect_free; affect_free = affect_free->next; } paf->type = 0; paf->duration = fread_number (fp); paf->modifier = fread_number (fp); paf->location = fread_number (fp); paf->bitvector = 0; paf->next = obj->affected; obj->affected = paf; fMatch = TRUE; break; } break; case 'C': KEY ("Condition", obj->condition, fread_number (fp)); KEY ("Cost", obj->cost, fread_number (fp)); break; case 'D': KEY ("Description", obj->description, fread_string (fp)); break; case 'E': KEY ("ExtraFlags", obj->extra_flags, fread_number (fp)); if (!str_cmp (word, "ExtraDescr")) { EXTRA_DESCR_DATA *ed; if (extra_descr_free == NULL) { ed = alloc_perm (sizeof (*ed)); } else { ed = extra_descr_free; extra_descr_free = extra_descr_free->next; } ed->keyword = fread_string (fp); ed->description = fread_string (fp); ed->next = obj->extra_descr; obj->extra_descr = ed; fMatch = TRUE; } if (!str_cmp (word, "End")) { if (!fNest || !fVnum) { bug ("Fread_obj: incomplete object.", 0); free_string (obj->name); free_string (obj->description); free_string (obj->short_descr); obj->next = obj_free; obj_free = obj; return; } else { if (IS_OBJ_STAT (obj, ITEM_APPLYT)) { AFFECT_DATA *paf; AFFECT_DATA *paf_next; AFFECT_DATA *prev; bool paffound = FALSE; char pafbuf[MAX_STRING_LENGTH]; for ( paf = obj->affected; paf != NULL; paf = paf_next ) { paf_next = paf->next; if ((paf->location != APPLY_HITROLL || paf->modifier != 20) && (paf->location != APPLY_DAMROLL || paf->modifier != 20) && (paf->location != APPLY_AC || paf->modifier != -100) && (paf->location != APPLY_HIT || paf->modifier != -100) && (paf->location != APPLY_MANA || paf->modifier != -100) && (paf->location != APPLY_MOVE || paf->modifier != -100)) continue; if ( paf == obj->affected ) obj->affected = paf->next; else { for ( prev = obj->affected; prev != NULL; prev = prev->next ) { if ( prev->next == paf ) { prev->next = paf->next; break; } } if ( prev == NULL ) continue; } paf->next = affect_free; affect_free = paf; paffound = TRUE; sprintf(pafbuf, "%d modifier removed from %d on %s's %s", paf->modifier, paf->location, ch->name, obj->name); log_string(pafbuf, NULL); } if (paffound) { REMOVE_BIT(obj->extra_flags, ITEM_APPLYT); /* if (ch && !IS_NPC(ch)) ch->pcdata->quest += 250000;*/ } } obj->next = object_list; object_list = obj; obj->pIndexData->count++; if (iNest == 0 || rgObjNest[iNest] == NULL) obj_to_char (obj, ch); else obj_to_obj (obj, rgObjNest[iNest - 1]); if ( OBJ_ARTIFACT(obj) && WizConfig->artifacts == ARTIFACTS_OFF ) { extract_obj (obj); REMOVE_BIT (ch->itemaffect, ITEMA_ARTIFACT); } return; } } break; case 'I': KEY ("ItemType", obj->item_type, fread_number (fp)); break; case 'L': KEY ("Level", obj->level, fread_number (fp)); break; case 'N': KEY ("Name", obj->name, fread_string (fp)); if (!str_cmp (word, "Nest")) { iNest = fread_number (fp); if (iNest < 0 || iNest >= MAX_NEST) { bug ("Fread_obj: bad nest %d.", iNest); } else { rgObjNest[iNest] = obj; fNest = TRUE; } fMatch = TRUE; } break; case 'O': KEY( "ObjVer", obj->item_ver, fread_number( fp ) ); break; case 'P': KEY ("Points", obj->points, fread_number (fp)); KEY ("Poweronch", obj->chpoweron, fread_string (fp)); KEY ("Poweroffch", obj->chpoweroff, fread_string (fp)); KEY ("Powerusech", obj->chpoweruse, fread_string (fp)); KEY ("Poweronvict", obj->victpoweron, fread_string (fp)); KEY ("Poweroffvict", obj->victpoweroff, fread_string (fp)); KEY ("Powerusevict", obj->victpoweruse, fread_string (fp)); break; case 'Q': KEY ("Quest", obj->quest, fread_number (fp)); KEY ("Quest2", obj->quest2, fread_number (fp)); KEY ("Questmaker", obj->questmaker, fread_string (fp)); KEY ("Questowner", obj->questowner, fread_string (fp)); break; case 'R': KEY ("Resistance", obj->resistance, fread_number (fp)); break; case 'S': KEY ("ShortDescr", obj->short_descr, fread_string (fp)); KEY ("Spectype", obj->spectype, fread_number (fp)); KEY ("Specpower", obj->specpower, fread_number (fp)); KEY ("Specxtype", obj->specxtype, fread_number (fp)); if (!str_cmp (word, "Spell")) { int iValue; int sn; iValue = fread_number (fp); sn = skill_lookup (fread_word (fp)); if (iValue < 0 || iValue > 3) { bug ("Fread_obj: bad iValue %d.", iValue); } else if (sn < 0) { bug ("Fread_obj: unknown skill.", 0); } else { obj->value[iValue] = sn; } fMatch = TRUE; break; } break; case 'T': KEY ("Timer", obj->timer, fread_number (fp)); KEY ("Toughness", obj->toughness, fread_number (fp)); break; case 'V': if (!str_cmp (word, "Values")) { obj->value[0] = fread_number (fp); obj->value[1] = fread_number (fp); obj->value[2] = fread_number (fp); obj->value[3] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "Vnum")) { int vnum; vnum = fread_number (fp); if ((obj->pIndexData = get_obj_index (vnum)) == NULL) { vnum = 30041; if ((obj->pIndexData = get_obj_index (vnum)) == NULL) bug ("Fread_obj: bad vnum %d.", vnum); else fVnum = TRUE; } else fVnum = TRUE; fMatch = TRUE; break; } break; case 'W': KEY ("WeapFlags", obj->weapflags, fread_number (fp)); KEY ("WearFlags", obj->wear_flags, fread_number (fp)); KEY ("WearLoc", obj->wear_loc, fread_number (fp)); KEY ("Weight", obj->weight, fread_number (fp)); break; } if (!fMatch) { sprintf (buf, "Fread_obj: no match. WORD: %s PLAYER: %s", word, ch->name ? ch->name : "UNKNOWN"); bug (buf, 0); write_to_descriptor (ch->desc, "*****************************************************************\n\r" "** Your player file has become corrupted since you last played **\n\r" "** Email legend@wolfpaw.net explaining that your player file **\n\r" "** is bugged. Someone shall try and fix it as soon as **\n\r" "** possible **\n\r" "*****************************************************************\n\r", 0); close_socket (ch->desc); return; fread_to_eol (fp); } /* if ( !fMatch ) { bug( "Fread_obj: no match.", 0 ); fread_to_eol( fp ); } */ } } bool fread_char (CHAR_DATA * ch, FILE * fp) { char buf[MAX_STRING_LENGTH]; char *word; bool fMatch; int dummy; int sn; for (;;) { word = feof (fp) ? "End" : fread_word (fp); fMatch = FALSE; switch (UPPER (word[0])) { case '*': fMatch = TRUE; fread_to_eol (fp); break; case 'A': KEY ("Aim", ch->pcdata->aim, fread_string (fp)); if (!str_cmp (word, "Absorb")) { ch->pcdata->absorb[0] = fread_number (fp); ch->pcdata->absorb[1] = fread_number (fp); ch->pcdata->absorb[2] = fread_number (fp); ch->pcdata->absorb[3] = fread_number (fp); ch->pcdata->absorb[4] = fread_number (fp); ch->pcdata->absorb[5] = fread_number (fp); fMatch = TRUE; break; } if ( !str_cmp( word, "Arcanoi" ) ) { ch->arcanoi[1] = fread_number( fp ); ch->arcanoi[2] = fread_number( fp ); ch->arcanoi[3] = fread_number( fp ); ch->arcanoi[4] = fread_number( fp ); ch->arcanoi[5] = fread_number( fp ); ch->arcanoi[6] = fread_number( fp ); ch->arcanoi[7] = fread_number( fp ); ch->arcanoi[8] = fread_number( fp ); ch->arcanoi[9] = fread_number( fp ); ch->arcanoi[10] = fread_number( fp ); ch->arcanoi[11] = fread_number( fp ); fMatch = TRUE; break; } KEY ("Awins", ch->awins, fread_number (fp)); KEY ("Alosses", ch->alosses, fread_number (fp)); KEY ("Act", ch->act, fread_number (fp)); KEY ("AffectedBy", ch->affected_by, fread_number (fp)); KEY ("Alignment", ch->alignment, fread_number (fp)); KEY ("Armor", ch->armor, fread_number (fp)); KEY ("Aff2", ch->flag2, fread_number (fp)); if (!str_cmp (word, "Affect") || !str_cmp (word, "AffectData")) { AFFECT_DATA *paf; if (affect_free == NULL) { paf = alloc_perm (sizeof (*paf)); } else { paf = affect_free; affect_free = affect_free->next; } if (!str_cmp (word, "Affect")) { /* Obsolete 2.0 form. */ paf->type = fread_number (fp); } else { int sn; sn = skill_lookup (fread_word (fp)); if (sn < 0) bug ("Fread_char: unknown skill.", 0); else paf->type = sn; } paf->duration = fread_number (fp); paf->modifier = fread_number (fp); paf->location = fread_number (fp); paf->bitvector = fread_number (fp); paf->next = ch->affected; ch->affected = paf; fMatch = TRUE; break; } if (!str_cmp (word, "AttrMod")) { ch->pcdata->mod_str = fread_number (fp); ch->pcdata->mod_int = fread_number (fp); ch->pcdata->mod_wis = fread_number (fp); ch->pcdata->mod_dex = fread_number (fp); ch->pcdata->mod_con = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "AttrPerm")) { ch->pcdata->perm_str = fread_number (fp); ch->pcdata->perm_int = fread_number (fp); ch->pcdata->perm_wis = fread_number (fp); ch->pcdata->perm_dex = fread_number (fp); ch->pcdata->perm_con = fread_number (fp); fMatch = TRUE; break; } break; case 'B': if (!str_cmp (word, "BGifts")) { ch->bgifts[0] = fread_number (fp); ch->bgifts[1] = fread_number (fp); ch->bgifts[2] = fread_number (fp); ch->bgifts[3] = fread_number (fp); ch->bgifts[4] = fread_number (fp); ch->bgifts[5] = fread_number (fp); ch->bgifts[6] = fread_number (fp); ch->bgifts[7] = fread_number (fp); ch->bgifts[8] = fread_number (fp); ch->bgifts[9] = fread_number (fp); ch->bgifts[10] = fread_number (fp); ch->bgifts[11] = fread_number (fp); fMatch = TRUE; break; } KEY ("Body", ch->body, fread_number (fp)); KEY ("Bounty", ch->pcdata->bounty, fread_number (fp)); KEY ("Backup", ch->pcdata->curr_backup,fread_number(fp)); KEY ("Bamfin", ch->pcdata->bamfin, fread_string (fp)); KEY ("Bamfout", ch->pcdata->bamfout, fread_string (fp)); KEY ("Beast", ch->beast, fread_number (fp)); KEY ("Breath1", ch->pcdata->breath[0], fread_string (fp)); KEY ("Breath2", ch->pcdata->breath[1], fread_string (fp)); KEY ("Breath3", ch->pcdata->breath[2], fread_string (fp)); KEY ("Breath4", ch->pcdata->breath[3], fread_string (fp)); KEY ("Breath5", ch->pcdata->breath[4], fread_string (fp)); /* Read in board status */ if (!str_cmp (word, "Boards")) { int i, num = fread_number (fp); /* number of boards saved */ char *boardname; for (; num; num--) /* for each of the board saved */ { boardname = fread_word (fp); i = board_lookup (boardname); /* find board number */ if (i == BOARD_NOTFOUND) /* Does board still exist ? */ { sprintf (buf, "fread_char: %s had unknown board name: %s. Skipped.", ch->name, boardname); log_string (buf, NULL); fread_number (fp); /* read last_note and skip info */ } else /* Save it */ ch->pcdata->last_note[i] = fread_number (fp); } /* for */ fMatch = TRUE; } /* Boards */ break; case 'C': KEY ("Cinvis", ch->pcdata->cinvis, fread_number (fp)); KEY ("Clan", ch->clan, fread_string (fp)); KEY ("Cleregen", ch->cleregen, fread_number (fp)); KEY ("Class", ch->class, fread_number (fp)); KEY ("Clannum", ch->clannum, fread_number (fp)); if (!str_cmp (word, "Combat")) { ch->cmbt[0] = fread_number (fp); ch->cmbt[1] = fread_number (fp); ch->cmbt[2] = fread_number (fp); ch->cmbt[3] = fread_number (fp); ch->cmbt[4] = fread_number (fp); ch->cmbt[5] = fread_number (fp); ch->cmbt[6] = fread_number (fp); ch->cmbt[7] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "Chi")) { ch->chi[0] = fread_number (fp); ch->chi[1] = fread_number (fp); fMatch = TRUE; break; } KEY ("Conception", ch->pcdata->conception, fread_string (fp)); if (!str_cmp (word, "Condition")) { ch->pcdata->condition[0] = fread_number (fp); ch->pcdata->condition[1] = fread_number (fp); ch->pcdata->condition[2] = fread_number (fp); fMatch = TRUE; break; } KEY ("Cparents", ch->pcdata->cparents, fread_string (fp)); KEY ("Cprompt", ch->cprompt, fread_string (fp)); KEY ("Createtime", ch->createtime, fread_string (fp)); break; case 'D': KEY ("Damroll", ch->damroll, fread_number (fp)); KEY ("Deaf", ch->deaf, fread_number (fp)); KEY ("Demonic", dummy, fread_number (fp)); KEY ("Decapped", ch->pcdata->decapped, fread_string (fp)); KEY ("Decappedby", ch->pcdata->decappedby, fread_string (fp)); KEY ("Description", ch->description, fread_string (fp)); KEY ("DenyDate", ch->pcdata->denydate, fread_number (fp)); KEY ("Disquiet", ch->disquiet_counter, fread_number (fp)); KEY ("Dragonaff", ch->pcdata->dragonaff, fread_number (fp)); /*dragons */ KEY ("Dragonage", ch->pcdata->dragonage, fread_number (fp)); /*dragons */ if (!str_cmp (word, "Disc")) { ch->pcdata->disc_a[0] = fread_number (fp); ch->pcdata->disc_a[1] = fread_number (fp); ch->pcdata->disc_a[2] = fread_number (fp); ch->pcdata->disc_a[3] = fread_number (fp); ch->pcdata->disc_a[4] = fread_number (fp); ch->pcdata->disc_a[5] = fread_number (fp); ch->pcdata->disc_a[6] = fread_number (fp); ch->pcdata->disc_a[7] = fread_number (fp); ch->pcdata->disc_a[8] = fread_number (fp); ch->pcdata->disc_a[9] = fread_number (fp); ch->pcdata->disc_a[10] = fread_number (fp); fMatch = TRUE; break; } KEY ("Drowaff", dummy, fread_number (fp)); /* Drow */ KEY ("Drowpwr", dummy, fread_number (fp)); /* Drow */ KEY ("Drowmag", dummy, fread_number (fp)); /* Drow */ break; case 'E': KEY( "EmailSet", ch->email_set, fread_number( fp ) ); KEY ("Email", ch->pcdata->email, fread_string (fp)); if (!str_cmp (word, "End")) return TRUE; KEY ("Exhaustion", ch->pcdata->exhaustion, fread_number (fp)); KEY ("Exp", ch->exp, fread_long (fp)); KEY ("Extra", ch->extra, fread_number (fp)); KEY ("Extra2", ch->extra2, fread_number (fp)); KEY ("Empower", ch->empowered, fread_string (fp)); break; case 'F': KEY ("Faction", ch->pcdata->kingdom, fread_number (fp)); if (!str_cmp (word, "Focus")) { ch->focus[0] = fread_number (fp); ch->focus[1] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "FakeCon")) { ch->pcdata->fake_skill = fread_number (fp); ch->pcdata->fake_stance = fread_number (fp); ch->pcdata->fake_hit = fread_number (fp); ch->pcdata->fake_dam = fread_number (fp); ch->pcdata->fake_ac = fread_number (fp); ch->pcdata->fake_hp = fread_number (fp); ch->pcdata->fake_mana = fread_number (fp); ch->pcdata->fake_move = fread_number (fp); fMatch = TRUE; break; } KEY ("Form", ch->form, fread_number (fp)); KEY ("Frozen", ch->pcdata->frozen, fread_number (fp)); break; case 'G': if (!str_cmp (word, "Genes")) { ch->pcdata->genes[0] = fread_number (fp); ch->pcdata->genes[1] = fread_number (fp); ch->pcdata->genes[2] = fread_number (fp); ch->pcdata->genes[3] = fread_number (fp); ch->pcdata->genes[4] = fread_number (fp); ch->pcdata->genes[5] = fread_number (fp); ch->pcdata->genes[6] = fread_number (fp); ch->pcdata->genes[7] = fread_number (fp); ch->pcdata->genes[8] = fread_number (fp); ch->pcdata->genes[9] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "Gifts")) { ch->gifts[0] = fread_number (fp); ch->gifts[1] = fread_number (fp); ch->gifts[2] = fread_number (fp); ch->gifts[3] = fread_number (fp); ch->gifts[4] = fread_number (fp); ch->gifts[5] = fread_number (fp); ch->gifts[6] = fread_number (fp); ch->gifts[7] = fread_number (fp); ch->gifts[8] = fread_number (fp); ch->gifts[9] = fread_number (fp); ch->gifts[10] = fread_number (fp); ch->gifts[11] = fread_number (fp); ch->gifts[12] = fread_number (fp); ch->gifts[13] = fread_number (fp); ch->gifts[14] = fread_number (fp); ch->gifts[15] = fread_number (fp); ch->gifts[16] = fread_number (fp); ch->gifts[17] = fread_number (fp); ch->gifts[18] = fread_number (fp); ch->gifts[19] = fread_number (fp); ch->gifts[20] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "Gnosis")) { ch->gnosis[0] = fread_number (fp); ch->gnosis[1] = fread_number (fp); fMatch = TRUE; break; } KEY ("Garou1", ch->garou1, fread_number (fp)); KEY ("Garou2", ch->garou2, fread_number (fp)); KEY ("Gpoints", ch->pcdata->gpoints, fread_number (fp)); KEY ("Getexp", ch->pcdata->get_exp, fread_number (fp)); KEY ("Gold", ch->gold, fread_number (fp)); break; case 'H': KEY ("HEmpower", ch->hempower, fread_number (fp)); KEY ("Hitroll", ch->hitroll, fread_number (fp)); KEY ("Home", ch->home, fread_number (fp)); KEY ("Home2", ch->home2, fread_number (fp)); KEY ("Hatch", ch->pcdata->hatch, fread_number (fp)); if (!str_cmp (word, "HpManaMove")) { ch->hit = fread_number (fp); ch->max_hit = fread_number (fp); ch->mana = fread_number (fp); ch->max_mana = fread_number (fp); ch->move = fread_number (fp); ch->max_move = fread_number (fp); fMatch = TRUE; break; } break; case 'I': KEY ("Icq", ch->pcdata->icq, fread_number (fp)); if (!str_cmp (word, "Imms")) { ch->imms[0] = fread_number (fp); ch->imms[1] = fread_number (fp); ch->imms[2] = fread_number (fp); fMatch = TRUE; break; } KEY ("Inducted", ch->pcdata->inducted, fread_number (fp)); KEY ("Ienter", ch->pcdata->ienter, fread_string (fp)); KEY ("Iexit", ch->pcdata->iexit, fread_string (fp)); KEY ("Immune", ch->immune, fread_number (fp)); KEY ("Itemaffect", ch->itemaffect, fread_number (fp)); KEY ("ICEListen", ch->pcdata->ice_listen, fread_string (fp)); break; case 'J': KEY ("Jailed", ch->pcdata->jailed, fread_number (fp)); break; case 'K': KEY ("Kingdom", ch->kingdom, fread_string (fp)); KEY ("KingRank", ch->pcdata->kingrank, fread_number (fp)); KEY ("Kith", ch->kith, fread_number (fp)); break; case 'L': if (!str_cmp (word, "Language")) { ch->pcdata->language[0] = fread_number (fp); ch->pcdata->language[1] = fread_number (fp); fMatch = TRUE; break; } KEY ("LastChange", ch->pcdata->changeplace, fread_number (fp)); KEY ("Lstatus", ch->lstatus, fread_number (fp)); KEY ("Lasthost", ch->lasthost, fread_string (fp)); KEY ("Lasttime", ch->lasttime, fread_string (fp)); KEY ("Level", ch->level, fread_number (fp)); if (!str_cmp (word, "Locationhp")) { ch->loc_hp[0] = fread_number (fp); ch->loc_hp[1] = fread_number (fp); ch->loc_hp[2] = fread_number (fp); ch->loc_hp[3] = fread_number (fp); ch->loc_hp[4] = fread_number (fp); ch->loc_hp[5] = fread_number (fp); ch->loc_hp[6] = fread_number (fp); fMatch = TRUE; break; } KEY ("LongDescr", ch->long_descr, fread_string (fp)); KEY ("Lord", ch->lord, fread_string (fp)); break; case 'M': KEY ("Msn", ch->pcdata->msn, fread_string (fp)); KEY ("More", ch->more, fread_number (fp)); if (!str_cmp (word, "Monkab")) { ch->monkab[0] = fread_number (fp); ch->monkab[1] = fread_number (fp); ch->monkab[2] = fread_number (fp); ch->monkab[3] = fread_number (fp); fMatch = TRUE; break; } KEY ("Monkstuff", ch->monkstuff, fread_number (fp)); KEY ("Monkcrap", ch->monkcrap, fread_number (fp)); KEY ("Marriage", ch->pcdata->marriage, fread_string (fp)); KEY ("Mflags", ch->mflags, fread_number (fp)); KEY ("Morph", ch->morph, fread_string (fp)); KEY ("Mdecap", ch->pcdata->mdecap, fread_string (fp)); break; case 'N': KEY ("Newbits", ch->newbits, fread_number (fp)); if (!str_cmp (word, "Name")) { /* * Name already set externally. */ fread_to_eol (fp); fMatch = TRUE; break; } break; case 'O': KEY ("Outcast", ch->pcdata->outcast, fread_number (fp)); KEY ("Objvnum", ch->pcdata->obj_vnum, fread_number (fp)); KEY ("ObjDesc", ch->objdesc, fread_string (fp)); break; case 'P': if (!str_cmp (word, "Powerd")) { ch->powerd[0] = fread_number (fp); ch->powerd[1] = fread_number (fp); ch->powerd[2] = fread_number (fp); ch->powerd[3] = fread_number (fp); ch->powerd[4] = fread_number (fp); ch->powerd[5] = fread_number (fp); ch->powerd[6] = fread_number (fp); ch->powerd[7] = fread_number (fp); ch->powerd[8] = fread_number (fp); ch->powerd[9] = fread_number (fp); ch->powerd[10] = fread_number (fp); ch->powerd[11] = fread_number (fp); ch->powerd[12] = fread_number (fp); ch->powerd[13] = fread_number (fp); ch->powerd[14] = fread_number (fp); ch->powerd[15] = fread_number (fp); ch->powerd[16] = fread_number (fp); ch->powerd[17] = fread_number (fp); ch->powerd[18] = fread_number (fp); ch->powerd[19] = fread_number (fp); ch->powerd[20] = fread_number (fp); fMatch = TRUE; break; } KEY ("PVersion", ch->version, fread_number (fp)); KEY ("Prefix", ch->prefix, fread_string (fp)); if (!str_cmp (word, "Paradox")) { ch->paradox[0] = fread_number (fp); ch->paradox[1] = fread_number (fp); ch->paradox[2] = fread_number (fp); fMatch = TRUE; break; } KEY ("Profile", ch->profile, fread_string (fp)); KEY ("Pagelen", ch->pcdata->pagelen, fread_number (fp)); KEY ("Parents", ch->pcdata->parents, fread_string (fp)); KEY ("Password", ch->pcdata->pwd, fread_string (fp)); KEY ("Played", ch->played, fread_number (fp)); KEY ("PlayerID", ch->pcdata->playerid, fread_number (fp)); KEY ("Polyaff", ch->polyaff, fread_number (fp)); KEY ("Power_Point", dummy, fread_number (fp)); /* drow */ if (!str_cmp (word, "Power")) { for (sn = 0; sn < 20; sn++) ch->pcdata->powers[sn] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "PowersMod")) { for (sn = 0; sn < 20; sn++) ch->pcdata->powers_mod[sn] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "PowersSet")) { for (sn = 0; sn < 20; sn++) ch->pcdata->powers_set[sn] = fread_number (fp); fMatch = TRUE; break; } KEY( "PowersWear", ch->pcdata->powers_set_wear,fread_number( fp ) ); KEY ("Poweraction", ch->poweraction, fread_string (fp)); KEY ("Powertype", ch->powertype, fread_string (fp)); KEY ("Position", ch->position, fread_number (fp)); KEY ("Practice", ch->practice, fread_number (fp)); if (!str_cmp (word, "PkPdMkMd")) { ch->pkill = fread_number (fp); ch->pdeath = fread_number (fp); ch->mkill = fread_number (fp); ch->mdeath = fread_number (fp); fMatch = TRUE; break; } KEY ("Prompt", ch->prompt, fread_string (fp)); break; case 'Q': if (!str_cmp (word, "Quint")) { ch->quint[0] = fread_number (fp); ch->quint[1] = fread_number (fp); ch->quint[2] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "Quickening")) { ch->quickening[0] = fread_number (fp); ch->quickening[1] = fread_number (fp); fMatch = TRUE; break; } KEY ("Quest", ch->pcdata->quest, fread_number (fp)); KEY( "Questsrun", ch->pcdata->questsrun, fread_number( fp ) ); KEY( "Queststotal", ch->pcdata->questtotal, fread_number( fp ) ); KEY ("QuestPnts", ch->questpoints, fread_number (fp)); KEY ("QuestNext", ch->nextquest, fread_number (fp)); KEY ("QuestFail", ch->questfail, fread_number (fp)); KEY ("QuestComp", ch->questcomp, fread_number (fp)); break; case 'R': KEY( "RegKey", ch->registration_key, fread_number( fp ) ); KEY( "RegLogins", ch->registration_logins,fread_number( fp ) ); KEY( "Registerred", ch->registerred, fread_number( fp ) ); KEY ("Resolved", ch->resolved, fread_string (fp)); KEY ("Race", ch->race, fread_number (fp)); KEY ("Rank", ch->pcdata->rank, fread_number (fp)); if (!str_cmp (word, "Room")) { ch->in_room = get_room_index (fread_number (fp)); if (ch->in_room == NULL) ch->in_room = get_room_index (ROOM_VNUM_LIMBO); fMatch = TRUE; break; } if (!str_cmp (word, "Runes")) { dummy = fread_number (fp); dummy = fread_number (fp); dummy = fread_number (fp); dummy = fread_number (fp); fMatch = TRUE; break; } break; case 'S': KEY ("Schallenge", ch->pcdata->schallenge, fread_number (fp)); KEY ("Screensize", ch->pcdata->vt100_size, fread_number (fp)); KEY ("SavingThrow", ch->saving_throw, fread_number (fp)); KEY ("Smite", ch->pcdata->smite, fread_string (fp)); if ( !str_cmp( word, "Speedchar" ) ) { ch->pcdata->speedchar = fread_letter( fp ); fMatch = TRUE; break; } KEY ("Security", ch->pcdata->security, fread_number (fp)); KEY ("Silenced", ch->pcdata->silenced, fread_number (fp)); if (!str_cmp (word, "Score")) { ch->pcdata->score[0] = fread_long (fp); ch->pcdata->score[1] = fread_long (fp); ch->pcdata->score[2] = fread_long (fp); ch->pcdata->score[3] = fread_long (fp); ch->pcdata->score[4] = fread_long (fp); ch->pcdata->score[5] = fread_long (fp); fMatch = TRUE; break; } if (!str_cmp (word, "ShadowPower")) { for (sn = 0; sn < 20; sn++) ch->pcdata->shadow_powers[sn] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "Spheres")) { ch->spheres[0] = fread_number (fp); ch->spheres[1] = fread_number (fp); ch->spheres[2] = fread_number (fp); ch->spheres[3] = fread_number (fp); ch->spheres[4] = fread_number (fp); ch->spheres[5] = fread_number (fp); ch->spheres[6] = fread_number (fp); ch->spheres[7] = fread_number (fp); ch->spheres[8] = fread_number (fp); fMatch = TRUE; break; } KEY ("Souls", ch->pcdata->souls, fread_number (fp)); KEY ("Sex", ch->sex, fread_number (fp)); KEY ("ShortDescr", ch->short_descr, fread_string (fp)); KEY ("Security", ch->pcdata->security, fread_number (fp)); if (!str_cmp (word, "Skill")) { int sn; int value; value = fread_number (fp); sn = skill_lookup (fread_word (fp)); /* if ( sn < 0 ) bug( "Fread_char: unknown skill.", 0 ); else ch->pcdata->learned[sn] = value; */ if (sn >= 0) ch->pcdata->learned[sn] = value; fMatch = TRUE; } KEY ("Specpower", ch->specpower, fread_number (fp)); KEY ("Spectype", ch->spectype, fread_number (fp)); KEY ("Specxtype", ch->specxtype, fread_number (fp)); KEY ("Special", ch->special, fread_number (fp)); if (!str_cmp (word, "Spells")) { ch->spl[0] = fread_number (fp); ch->spl[1] = fread_number (fp); ch->spl[2] = fread_number (fp); ch->spl[3] = fread_number (fp); ch->spl[4] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "Stage")) { ch->pcdata->stage[0] = fread_number (fp); ch->pcdata->stage[1] = fread_number (fp); ch->pcdata->stage[2] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "Stance")) { ch->stance[0] = fread_number (fp); ch->stance[1] = fread_number (fp); ch->stance[2] = fread_number (fp); ch->stance[3] = fread_number (fp); ch->stance[4] = fread_number (fp); ch->stance[5] = fread_number (fp); ch->stance[6] = fread_number (fp); ch->stance[7] = fread_number (fp); ch->stance[8] = fread_number (fp); ch->stance[9] = fread_number (fp); ch->stance[10] = fread_number (fp); ch->stance[11] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "StatAbility")) { ch->pcdata->stat_ability[0] = fread_number (fp); ch->pcdata->stat_ability[1] = fread_number (fp); ch->pcdata->stat_ability[2] = fread_number (fp); ch->pcdata->stat_ability[3] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "StatAmount")) { ch->pcdata->stat_amount[0] = fread_number (fp); ch->pcdata->stat_amount[1] = fread_number (fp); ch->pcdata->stat_amount[2] = fread_number (fp); ch->pcdata->stat_amount[3] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "StatDuration")) { ch->pcdata->stat_duration[0] = fread_number (fp); ch->pcdata->stat_duration[1] = fread_number (fp); ch->pcdata->stat_duration[2] = fread_number (fp); ch->pcdata->stat_duration[3] = fread_number (fp); fMatch = TRUE; break; } if (!str_cmp (word, "Stats")) { for (sn = 0; sn < 12; sn++) ch->pcdata->stats[sn] = fread_number (fp); fMatch = TRUE; break; } break; case 'T': KEY ("Tier", ch->tier, fread_number (fp)); KEY ("Tpoints", ch->tpoints, fread_number (fp)); KEY ("Tierxp", ch->tierxp, fread_long (fp)); KEY ("Tempflag", ch->pcdata->tempflag, fread_number (fp)); KEY ("Trust", ch->trust, fread_number (fp)); KEY("Timezone", ch->pcdata->timezone, fread_number(fp)); if (!str_cmp (word, "Title")) { ch->pcdata->title = fread_string (fp); if (isalpha (ch->pcdata->title[0]) || isdigit (ch->pcdata->title[0]) || (ch->pcdata->title[0] == '#')) { sprintf (buf, " %s", ch->pcdata->title); free_string (ch->pcdata->title); ch->pcdata->title = str_dup (buf); } fMatch = TRUE; break; } if (!str_cmp (word, "Tokens")) { ch->tokens[0] = fread_number (fp); ch->tokens[1] = fread_number (fp); ch->tokens[2] = fread_number (fp); ch->tokens[3] = fread_number (fp); ch->tokens[4] = fread_number (fp); ch->tokens[5] = fread_number (fp); ch->tokens[6] = fread_number (fp); ch->tokens[7] = fread_number (fp); ch->tokens[8] = fread_number (fp); ch->tokens[9] = fread_number (fp); ch->tokens[10] = fread_number (fp); ch->tokens[11] = fread_number (fp); fMatch = TRUE; break; } break; case 'V': KEY ("Voted", ch->pcdata->voted, fread_number (fp)); KEY ("Vampaff", dummy, fread_number (fp)); if (!str_cmp (word, "Vnum")) { ch->pIndexData = get_mob_index (fread_number (fp)); fMatch = TRUE; break; } break; case 'W': KEY ("Whotype", ch->pcdata->whotype, fread_number (fp)); KEY ("Warps", ch->warp, fread_number (fp)); KEY ("WarpCount", ch->warpcount, fread_number (fp)); KEY( "Wbits", ch->wbits, fread_number( fp ) ); if (!str_cmp (word, "Weapons")) { ch->wpn[0] = fread_number (fp); ch->wpn[1] = fread_number (fp); ch->wpn[2] = fread_number (fp); ch->wpn[3] = fread_number (fp); ch->wpn[4] = fread_number (fp); ch->wpn[5] = fread_number (fp); ch->wpn[6] = fread_number (fp); ch->wpn[7] = fread_number (fp); ch->wpn[8] = fread_number (fp); ch->wpn[9] = fread_number (fp); ch->wpn[10] = fread_number (fp); ch->wpn[11] = fread_number (fp); ch->wpn[12] = fread_number (fp); fMatch = TRUE; break; } KEY ("Wimpy", ch->wimpy, fread_number (fp)); KEY ("Wizinvis", ch->pcdata->wizinvis, fread_number (fp)); KEY ("Wiznet", ch->pcdata->wiznet, fread_number (fp)); KEY ("Wolf", dummy, fread_number (fp)); if (!str_cmp (word, "Wolfform")) { dummy = fread_number (fp); dummy = fread_number (fp); fMatch = TRUE; break; } break; case 'X': KEY ("Xhitroll", ch->xhitroll, fread_number (fp)); KEY ("Xdamroll", ch->xdamroll, fread_number (fp)); KEY ("Xac", ch->xac, fread_number (fp)); KEY ("Xdamcap", ch->xdamcap, fread_number (fp)); KEY ("Xhit", ch->xhit, fread_number (fp)); KEY ("Xmana", ch->xmana, fread_number (fp)); KEY ("Xmove", ch->xmove, fread_number (fp)); break; } if (!fMatch) { sprintf (buf, "Fread_char: no match. WORD: %s PLAYER: %s", word, ch->name ? ch->name : "UNKNOWN"); bug (buf, 0); write_to_descriptor (ch->desc, "*****************************************************************\n\r" "** Your player file has become corrupted since you last played **\n\r" "** Email legend@wolfpaw.net explaining that your player file **\n\r" "** is bugged. Someone shall try and fix it as soon as **\n\r" "** possible **\n\r" "*****************************************************************\n\r", 0); close_socket (ch->desc); return FALSE; fread_to_eol (fp); } } } void convert_old_new (CHAR_DATA * ch) { char buf[MAX_STRING_LENGTH]; if (IS_SET (ch->act, OLD_PLR_DEMON) || IS_SET (ch->act, OLD_PLR_CHAMPION)) { ch->pcdata->stats[DEMON_CURRENT] = ch->pcdata->powers[0]; ch->pcdata->stats[DEMON_TOTAL] = ch->pcdata->powers[1]; ch->pcdata->stats[DEMON_POWER] = ch->pcdata->demonic_a; ch->pcdata->powers[0] = ch->pcdata->disc_a[OLD_C_POWERS]; ch->pcdata->powers[1] = ch->pcdata->disc_a[OLD_C_CURRENT]; ch->pcdata->powers[2] = ch->pcdata->disc_a[OLD_C_HEAD]; ch->pcdata->powers[3] = ch->pcdata->disc_a[OLD_C_TAIL]; ch->pcdata->powers[4] = ch->pcdata->disc_a[10]; if (IS_SET (ch->pcdata->disc_a[OLD_O_POWERS], OLD_DEM_MOVE)) SET_BIT (ch->pcdata->stats[DEMON_TOTAL], DEM_MOVE); if (IS_SET (ch->pcdata->disc_a[OLD_O_POWERS], OLD_DEM_LEAP)) SET_BIT (ch->pcdata->stats[DEMON_TOTAL], DEM_LEAP); if (IS_SET (ch->pcdata->disc_a[OLD_O_POWERS], OLD_DEM_MAGIC)) SET_BIT (ch->pcdata->stats[DEMON_TOTAL], DEM_MAGIC); if (IS_SET (ch->pcdata->disc_a[OLD_O_POWERS], OLD_DEM_LIFESPAN)) SET_BIT (ch->pcdata->stats[DEMON_TOTAL], DEM_LIFESPAN); ch->class = CLASS_DEMON; if (IS_SET (ch->act, OLD_PLR_DEMON)) REMOVE_BIT (ch->act, OLD_PLR_DEMON); /* if (!str_cmp(ch->name,"Antilles")) SET_BIT(ch->special, SPC_DEMON_LORD); */ if (IS_SET (ch->act, OLD_PLR_CHAMPION)) { REMOVE_BIT (ch->act, OLD_PLR_CHAMPION); SET_BIT (ch->special, SPC_CHAMPION); } if (IS_SET (ch->extra, OLD_EXTRA_SIRE)) { REMOVE_BIT (ch->extra, OLD_EXTRA_SIRE); SET_BIT (ch->special, SPC_SIRE); } if (IS_SET (ch->extra, OLD_EXTRA_PRINCE)) { REMOVE_BIT (ch->extra, OLD_EXTRA_PRINCE); SET_BIT (ch->special, SPC_PRINCE); } sprintf (buf, "%s has been demon upgraded!", ch->name); log_string (buf, ch); return; } if (IS_SET (ch->act, OLD_PLR_WEREWOLF) || IS_SET (ch->act, OLD_PLR_WOLFMAN)) { ch->class = CLASS_WEREWOLF; /* * Convert totems :P */ ch->pcdata->powers[WPOWER_MANTIS] = ch->pcdata->disc_a[OLD_TOTEM_MANTIS]; ch->pcdata->powers[WPOWER_BEAR] = ch->pcdata->disc_a[OLD_TOTEM_BEAR]; ch->pcdata->powers[WPOWER_LYNX] = ch->pcdata->disc_a[OLD_TOTEM_LYNX]; ch->pcdata->powers[WPOWER_BOAR] = ch->pcdata->disc_a[OLD_TOTEM_BOAR]; ch->pcdata->powers[WPOWER_OWL] = ch->pcdata->disc_a[OLD_TOTEM_OWL]; ch->pcdata->powers[WPOWER_SPIDER] = ch->pcdata->disc_a[OLD_TOTEM_SPIDER]; ch->pcdata->powers[WPOWER_WOLF] = ch->pcdata->disc_a[OLD_TOTEM_WOLF]; ch->pcdata->powers[WPOWER_HAWK] = ch->pcdata->disc_a[OLD_TOTEM_HAWK]; ch->pcdata->powers[WPOWER_SILVER] = ch->pcdata->disc_a[OLD_TOTEM_SILVER]; ch->pcdata->stats[UNI_FORM0] = ch->pcdata->wolfform[0]; ch->pcdata->stats[UNI_FORM1] = ch->pcdata->wolfform[1]; ch->pcdata->stats[UNI_RAGE] = ch->pcdata->wolf; if (IS_SET (ch->extra, OLD_EXTRA_PRINCE)) { REMOVE_BIT (ch->extra, OLD_EXTRA_PRINCE); SET_BIT (ch->special, SPC_PRINCE); } if (IS_SET (ch->act, OLD_PLR_WEREWOLF)) REMOVE_BIT (ch->act, OLD_PLR_WEREWOLF); if (IS_SET (ch->act, OLD_PLR_WOLFMAN)) { REMOVE_BIT (ch->act, OLD_PLR_WOLFMAN); SET_BIT (ch->special, SPC_WOLFMAN); } sprintf (buf, "%s has been werewolf upgraded!", ch->name); log_string (buf, ch); return; } if (ch->trust >= 4 && ch->trust <= 6) { /* Mage Converter */ ch->class = CLASS_MAGE; ch->special = 0; ch->pcdata->powers[MPOWER_RUNE0] = ch->pcdata->runes[0]; ch->pcdata->powers[MPOWER_RUNE1] = ch->pcdata->runes[1]; ch->pcdata->powers[MPOWER_RUNE2] = ch->pcdata->runes[2]; ch->pcdata->powers[MPOWER_RUNE3] = ch->pcdata->runes[3]; sprintf (buf, "%s has been mage upgraded!", ch->name); log_string (buf, ch); return; } if (IS_SET (ch->act, OLD_PLR_VAMPIRE)) { ch->class = CLASS_VAMPIRE; ch->pcdata->stats[UNI_FORM0] = ch->pcdata->wolfform[0]; ch->pcdata->stats[UNI_FORM1] = ch->pcdata->wolfform[1]; ch->pcdata->stats[UNI_RAGE] = ch->pcdata->wolf; if (IS_SET (ch->extra, OLD_EXTRA_SIRE)) { REMOVE_BIT (ch->extra, OLD_EXTRA_SIRE); SET_BIT (ch->special, SPC_SIRE); } if (IS_SET (ch->extra, OLD_EXTRA_PRINCE)) { REMOVE_BIT (ch->extra, OLD_EXTRA_PRINCE); SET_BIT (ch->special, SPC_PRINCE); } if (IS_SET (ch->extra, OLD_EXTRA_ANARCH)) { REMOVE_BIT (ch->extra, OLD_EXTRA_ANARCH); SET_BIT (ch->special, SPC_ANARCH); } if (IS_SET (ch->extra, OLD_EXTRA_INCONNU)) { REMOVE_BIT (ch->extra, OLD_EXTRA_INCONNU); SET_BIT (ch->special, SPC_INCONNU); } if (IS_SET (ch->act, OLD_PLR_VAMPIRE)) REMOVE_BIT (ch->act, OLD_PLR_VAMPIRE); sprintf (buf, "%s has been vampire upgraded!", ch->name); log_string (buf, ch); return; } if (IS_SET (ch->extra, OLD_EXTRA_HIGHLANDER)) { ch->class = CLASS_HIGHLANDER; ch->pcdata->powers[HPOWER_WPNSKILL] = ch->pcdata->disc_a[0]; ch->pcdata->stats[UNI_FORM0] = ch->pcdata->wolfform[0]; ch->pcdata->stats[UNI_FORM1] = ch->pcdata->wolfform[1]; ch->pcdata->stats[UNI_RAGE] = ch->pcdata->wolf; if (IS_SET (ch->extra, OLD_EXTRA_HIGHLANDER)) REMOVE_BIT (ch->extra, OLD_EXTRA_HIGHLANDER); if (IS_SET (ch->extra, OLD_EXTRA_PRINCE)) { REMOVE_BIT (ch->extra, OLD_EXTRA_PRINCE); SET_BIT (ch->special, SPC_PRINCE); } if (IS_SET (ch->extra, OLD_EXTRA_ANARCH)) { REMOVE_BIT (ch->extra, OLD_EXTRA_ANARCH); SET_BIT (ch->special, SPC_ANARCH); } if (IS_SET (ch->extra, OLD_EXTRA_INCONNU)) { REMOVE_BIT (ch->extra, OLD_EXTRA_INCONNU); SET_BIT (ch->special, SPC_INCONNU); } if (IS_SET (ch->act, OLD_PLR_VAMPIRE)) REMOVE_BIT (ch->act, OLD_PLR_VAMPIRE); sprintf (buf, "%s has been highlander upgraded!", ch->name); log_string (buf, ch); return; } ch->class = 0; ch->room = 3054; sprintf (buf, "%s has been avatar upgraded!", ch->name); log_string (buf, ch); return; } void do_finger (CHAR_DATA * ch, char *argument) { bool online = FALSE; // MEMBER_DATA *m; // int rank = 0; int onhours; // char kname[MSL]; char strsave[MAX_INPUT_LENGTH]; char status[MAX_STRING_LENGTH]; char buf[MAX_STRING_LENGTH]; char letter; CHAR_DATA *victim; CHAR_DATA *vict; FILE *fp; char *word; bool fMatch; bool drop_out = FALSE; int hours; int minutes; int seconds; char *f_name = capitalize (argument); char *f_title = ""; char *f_lasthost = ""; char *f_resolved = "UNRESOLVED"; char *f_lasttime = ""; int f_extra = 0; int f_time = -1; int f_cinvis = 0; int f_sex = 0; char *f_conception = ""; char *f_createtime = 0; int f_level = 0; int f_race = 0; char *f_marriage = ""; int f_akill = 0; int f_adeath = 0; int f_pkill = 0; int f_pdeath = 0; int f_mkill = 0; int f_mdeath = 0; int f_icq = 0; char *f_email = ""; char *f_msn = ""; char *f_aim = ""; int f_played = 0; int f_class = 0; int f_clannum = 0; char *f_clan = ""; char *f_profile = ""; int f_version = 0; int f_logon = 0; int f_legend = 0; if (IS_NPC (ch)) return; if (argument[0] == '\0') { stc ("Finger who?\n\r", ch); return; } if (!check_parse_name (argument)) { send_to_char ("Thats an illegal name.\n\r", ch); return; } if ((vict = get_char_world(ch, argument) ) != NULL) { if (!IS_IMMORTAL(vict)) online = TRUE; } if ((victim = get_char_finger (ch, argument)) != NULL) { /* Just point directly to the string, no str_dup needed */ f_legend = victim->lstatus; f_title = victim->pcdata->title; f_logon = victim->logon; f_lasthost = victim->lasthost; f_resolved = victim->resolved; f_lasttime = victim->lasttime; f_extra = victim->extra; f_time = victim->pcdata->timezone; f_cinvis = victim->pcdata->cinvis; f_sex = victim->sex; f_conception = victim->pcdata->conception; f_createtime = victim->createtime; f_level = victim->level; f_race = victim->race; f_marriage = victim->pcdata->marriage; f_akill = victim->awins; f_adeath = victim->alosses; f_pkill = victim->pkill; f_pdeath = victim->pdeath; f_mkill = victim->mkill; f_mdeath = victim->mdeath; f_email = victim->pcdata->email; f_msn = victim->pcdata->msn; f_aim = victim->pcdata->aim; f_icq = victim->pcdata->icq; if (IS_IMMORTAL (victim) && !can_see (ch, victim)) f_played = victim->played; else f_played = victim->played + (int) (current_time - victim->logon); f_class = victim->class; f_clan = victim->clan; f_clannum = victim->clannum; f_profile = victim->profile; f_version = victim->version; } else { if (!char_exists (FALSE, argument)) { send_to_char ("That player doesn't exist.\n\r", ch); return; } fflush (fpReserve); fclose (fpReserve); sprintf (strsave, "%s%s", PLAYER_DIR, capitalize(argument)); if ((fp = fopen (strsave, "r")) != NULL) { if ((letter = fread_letter (fp)) == EOF) { send_to_char ("Their playerfile has been corrupted.\n\r", ch); fflush (fp); fclose (fp); fpReserve = fopen (NULL_FILE, "r"); return; } fread_to_eol (fp); while (!drop_out) { word = feof (fp) ? "End" : fread_word (fp); fMatch = FALSE; switch (UPPER (word[0])) { default: case '*': fMatch = TRUE; fread_to_eol (fp); break; case 'A': KEY ("Aim", f_aim, fread_string (fp)); KEY ("Awins", f_akill, fread_number (fp)); KEY ("Alosses", f_adeath, fread_number (fp)); break; case 'C': KEY ("Cinvis", f_cinvis, fread_number (fp)); KEY ("Class", f_class, fread_number (fp)); KEY ("Clan", f_clan, fread_string (fp)); KEY ("Clannum", f_clannum, fread_number (fp)); KEY ("Createtime", f_createtime, fread_string (fp)); KEY ("Conception", f_conception, fread_string (fp)); break; case 'E': KEY ("Email", f_email, fread_string (fp)); if (!str_cmp (word, "End")) drop_out = TRUE; KEY ("Extra", f_extra, fread_number (fp)); break; case 'I': KEY ("Icq", f_icq, fread_number (fp)); break; case 'M': KEY ("Msn", f_msn, fread_string (fp)); KEY ("Marriage", f_marriage, fread_string (fp)); break; case 'L': KEY ("Lasthost", f_lasthost, fread_string (fp)); KEY ("Lasttime", f_lasttime, fread_string (fp)); KEY ("Level", f_level, fread_number (fp)); KEY ("Lstatus", f_legend, fread_number (fp)); break; case 'P': KEY ("Profile", f_profile, fread_string (fp)); KEY ("Played", f_played, fread_number (fp)); if (!str_cmp (word, "PkPdMkMd")) { f_pkill = fread_number (fp); f_pdeath = fread_number (fp); f_mkill = fread_number (fp); f_mdeath = fread_number (fp); fMatch = TRUE; break; } KEY ("PVersion", f_version, fread_number (fp)); break; case 'R': KEY ("Race", f_race, fread_number (fp)); KEY ("Resolved", f_resolved, fread_string (fp)); break; case 'S': KEY ("Sex", f_sex, fread_number (fp)); break; case 'T': KEY ("Timezone", f_time, fread_number(fp)); if (!str_cmp (word, "Title")) { f_title = fread_string (fp); if (isalpha (ch->pcdata->title[0]) || isdigit (ch->pcdata->title[0])) { sprintf (buf, " %s", f_title); free_string (f_title); f_title = str_dup (buf); } fMatch = TRUE; break; } break; } if (!fMatch) fread_to_eol (fp); } } else { bug ("Do_finger: fopen", 0); perror (strsave); } fflush (fp); fclose (fp); fpReserve = fopen (NULL_FILE, "r"); } /* if (f_version != PVERSION && !IS_IMMORTAL(ch)) { stc("Their pfile hasnt been updated yet!\n\r", ch); return; } */ /* m = get_kingdom_char (f_name); if (m != NULL) { char buf[MAX_STRING_LENGTH]; rank = m->rank; if (f_sex == SEX_MALE) strcpy (buf, m->kingdom->ranks[rank - 1]); else if (m->kingdom->ranks[rank + 4][0] == '\0') strcpy (buf, m->kingdom->ranks[rank - 1]); else strcpy (buf, m->kingdom->ranks[rank + 4]); sprintf (kname, "%s%s of %s%s", m->kingdom->open, bash_color(buf), m->kingdom->descr, m->kingdom->close); } else sprintf (kname, "%s", ""); */ loc_to_char(ch); //Name & Title sprintf (buf, " #wName:#n %s%s%s.\n\r", f_name, drop_out ? " " : "", f_title); send_to_char (buf, ch); divide7_to_char(ch); //Total Played Time hours = 0; minutes = 0; seconds = 0; if (f_played > 0) { hours = ((f_played / 3600)); minutes = ((f_played / 60) % 60); seconds = (f_played % 60); } sprintf (buf, " #w%-15.15s#n %d hour%s, %d minute%s, and %d second%s\n\r", "Played:", hours, hours == 1 ? "" : "s", minutes, minutes == 1 ? "" : "s", seconds, seconds == 1 ? "" : "s"); send_to_char (buf, ch); if (online) { onhours = (int) (current_time - f_logon); if (onhours > 0) { hours = ((onhours/3600)); minutes = ((onhours/60)%60); seconds = (onhours % 60); } sprintf( buf, " #wOnline for: #n%2.2d:%2.2d:%2.2d\n\r",hours, minutes, seconds); stc(buf, ch); } sprintf (buf, " #w%-15.15s#n %s.\n\r", "Created:", (f_createtime)); stc (buf, ch); //Last Connected if (IS_JUDGE (ch) && ch->level >= f_level) { sprintf (buf, " #wLast host: #n%s\n\r #wOn: #n%s\n\r", f_lasthost, f_lasttime); send_to_char (buf, ch); } else { if (get_trust (ch) < f_level && f_level > 6) sprintf (buf, " #wLast host: #n######.######.######.######\n\r #wOn: #nsometime.\n\r"); else sprintf (buf, " #wLast host: #n######.######.######.######\n\r #wOn: #n %s.\n\r", f_lasttime); send_to_char (buf, ch); } //Sex sprintf (buf, "#w %-15.15s#n %-12.12s\n\r", "Sex:", f_sex == SEX_MALE ? "Male" : f_sex == SEX_FEMALE ? "Female" : "None"); send_to_char (buf, ch); //Are they Pregnant? if (IS_SET (f_extra, EXTRA_PREGNANT)) other_age (ch, f_extra, TRUE, f_conception, f_sex); other_age (ch, f_extra, FALSE, f_createtime, f_sex); //Class if (strlen (f_marriage) >= 3) { sprintf (buf, "#w %-15.15s#n ", IS_SET (f_extra, EXTRA_MARRIED) ? "Married:" : "Engaged:"); stc (buf, ch); sprintf (buf, "%-12s\n\r", f_marriage); stc (buf, ch); } stc ("#w Class: #n", ch); switch (f_class) { default: send_to_char ("None ", ch); break; case CLASS_FAE: send_to_char ("Fae ", ch); break; case CLASS_PHOENIX: send_to_char ("Phoenix ", ch); break; case CLASS_DRAGON: send_to_char ("Dragon ", ch); break; case CLASS_GARGOYLE: send_to_char ("Gargoyle ", ch); break; case CLASS_WRAITH: send_to_char ("Wraith ", ch); break; //BASTETADDITION case CLASS_BASTET: send_to_char ("Bastet ", ch); break; case CLASS_VAMPIRE: send_to_char ("Vampire ", ch); break; case CLASS_WEREWOLF: send_to_char ("Werewolf ", ch); break; case CLASS_DEMON: send_to_char ("Demon ", ch); break; case CLASS_MAGE: send_to_char ("Mage ", ch); break; case CLASS_HIGHLANDER: send_to_char ("Highlander ", ch); break; case CLASS_MONK: send_to_char ("Monk ", ch); break; case CLASS_DROW: send_to_char ("Drow ", ch); break; case CLASS_NINJA: send_to_char ("Ninja ", ch); } stc("\n\r", ch); if (f_clannum > 0) { sprintf (buf, "#w Clan: #n %s\n\r", nclans_table[f_clannum].display); stc (buf, ch); } /* if (strlen(kname) > 3) { sprintf (buf, "#w Kingdom: #n %s\n\r", kname); stc(buf, ch); }*/ //Level/Status switch (f_level) { default: stc ("#w Level: #nMortal ", ch); break; case LEVEL_AVATAR: case LEVEL_APPRENTICE: case LEVEL_MAGE: case LEVEL_ARCHMAGE: { sprintf (buf, " #w%-15.15s#n ", "Status:"); stc (buf, ch); switch (f_race) { default: if (f_sex == SEX_FEMALE) sprintf (status, "Queen (%d) ", f_race); else sprintf (status, "King (%d) ", f_race); break; case 0: sprintf (status, "Avatar "); break; case 1: case 2: case 3: case 4: sprintf (status, "Peasant (%d) ", f_race); break; case 5: case 6: case 7: case 8: case 9: sprintf (status, "Page (%d) ", f_race); break; case 10: case 11: case 12: case 13: case 14: sprintf (status, "Apprentice (%d) ", f_race); break; case 15: case 16: case 17: case 18: case 19: sprintf (status, "Scout (%d) ", f_race); break; case 20: case 21: case 22: case 23: case 24: sprintf (status, "Soldier (%d) ", f_race); break; case 25: case 26: case 27: case 28: case 29: sprintf (status, "Lieutenant (%d) ", f_race); break; case 30: case 31: case 32: case 33: case 34: sprintf (status, "Captain (%d) ", f_race); break; case 35: case 36: case 37: case 38: case 39: sprintf (status, "Major (%d) ", f_race); break; case 40: case 41: case 42: case 43: case 44: sprintf (status, "General (%d) ", f_race); break; case 45: case 46: case 47: case 48: case 49: sprintf (status, "Knight (%d) ", f_race); break; case 50: case 51: case 52: case 53: case 54: if (f_sex == SEX_FEMALE) sprintf (status, "Lady (%d) ", f_race); else sprintf (status, "Lord (%d) ", f_race); break; case 55: case 56: case 57: case 58: case 59: if (f_sex == SEX_FEMALE) sprintf (status, "Baroness (%d) ", f_race); else sprintf (status, "Baron (%d) ", f_race); break; case 60: case 61: case 62: case 63: case 64: if (f_sex == SEX_FEMALE) sprintf (status, "Viscountess (%d) ", f_race); else sprintf (status, "Viscount (%d) ", f_race); break; case 65: case 66: case 67: case 68: case 69: if (f_sex == SEX_FEMALE) sprintf (status, "Countess (%d) ", f_race); else sprintf (status, "Earl (%d) ", f_race); break; case 70: case 71: case 72: case 73: case 74: if (f_sex == SEX_FEMALE) sprintf (status, "Duchess (%d) ", f_race); else sprintf (status, "Duke (%d) ", f_race); break; case 75: case 76: case 77: case 78: case 79: if (f_sex == SEX_FEMALE) sprintf (status, "Princess (%d) ", f_race); else sprintf (status, "Prince (%d) ", f_race); } sprintf (buf, "%s", status); stc (buf, ch); break; } case LEVEL_NEWBIEHELPER: sprintf (buf, " #w%-15.15s#n %s\n\r", "Level:", "Newbie Helper"); stc (buf, ch); break; case LEVEL_BUILDER: if (!str_cmp(f_name, "Unique")) stc ("#w Level: #n #rLEGEND\n\r", ch); else { sprintf (buf, "#w %-15.15s#n %-s\n\r", "Level:", "Builder"); stc (buf, ch); } break; case LEVEL_ENFORCER: send_to_char ("#w Level: #n Enforcer\n\r", ch); break; case LEVEL_JUDGE: send_to_char ("#w Level: #n Judge\n\r", ch); break; case LEVEL_HIGHJUDGE: send_to_char ("#w Level: #n High Judge\n\r", ch); break; case LEVEL_IMPLEMENTOR: if (!str_cmp( f_name, "Tiopon") ) stc ("#w Level: #r Coder\n\r", ch); else send_to_char ("#w Level: #n Implementor\n\r", ch); break; case LEVEL_OWNER: stc("#w Level: #n #rCo-Owner\n\r", ch); break; case 14: if (!str_cmp( f_name, "Graham") ) stc ("#w Level: #n #rOWNER\n\r", ch); else if (!str_cmp( f_name, "Tijer") ) stc ("#w Level: #n #rOWNER/CODER/CREATOR\n\r", ch); else stc (" #wLevel: #n #rOWNER\n\r", ch); break; } if (f_level < LEVEL_IMMORTAL) { switch (f_legend) { default: stc (" #wLegend: #n Unknown\n\r", ch); break; case 1: stc (" #wLegend: #n Citizen\n\r", ch); break; case 2: stc (" #wLegend: #n Savior\n\r", ch); break; case 3: stc (" #wLegend: #n Myth\n\r", ch); break; case 4: stc (" #wLegend: #n Legend\n\r", ch); break; case 5: stc (" #wLegend: #n Titan\n\r", ch); break; case 6: stc (" #wLegend: #n Immortal\n\r", ch); break; case 7: stc (" #wLegend: #n Oracle\n\r", ch); break; case 8: stc (" #wLegend: #n Demigod\n\r", ch); break; case 9: stc (" #wLegend: #n Deity\n\r", ch); break; case 10: stc (" #wLegend: #n Almighty\n\r", ch); break; case 11: stc (" #wLegend: #n Supreme\n\r", ch); break; } } if (IS_IMMORTAL(ch)) { if (strlen(f_email) > 2 && (!IS_SET(f_cinvis, INVIS_EMAIL) || IS_IMMORTAL(ch)) ) { sprintf (buf, "#w Email: #n %s\n\r", f_email); stc (buf, ch); } if (strlen(f_aim) > 2 && (!IS_SET(f_cinvis, INVIS_AIM) || IS_IMMORTAL(ch)) ) { sprintf (buf, "#w AIM: #n %s\n\r", f_aim); stc (buf, ch); } if (strlen(f_msn) > 2 && (!IS_SET(f_cinvis, INVIS_MSN) || IS_IMMORTAL(ch)) ) { sprintf (buf, "#w MSN: #n %s\n\r", f_msn); stc (buf, ch); } if (f_icq > 0 && (!IS_SET(f_cinvis, INVIS_ICQ) || IS_IMMORTAL(ch)) ) { sprintf (buf, "#w ICQ: #n %d\n\r", f_icq); stc (buf, ch); } } divide7_to_char(ch); sprintf (buf, "#w Arena Kills: #n %-12d #wArena Deaths: #n %-12d\n\r", f_akill, f_adeath); send_to_char (buf, ch); sprintf (buf, "#w Player kills: #n %-12d #wPlayer Deaths:#n %-12d\n\r", f_pkill, f_pdeath); send_to_char (buf, ch); sprintf (buf, "#w Mob kills: #n %-12d #wMob Deaths: #n %-12d\n\r", f_mkill, f_mdeath); send_to_char (buf, ch); if (strlen (f_profile) > 2 && !IS_SET(ch->pcdata->cinvis, INVIS_PROFILE) ) { divide7_to_char(ch); sprintf (buf, "%s", f_profile); send_to_char (buf, ch); } divide8_to_char(ch); return; }