PKINFO_TYPE * pkupdate(CHAR_DATA * ch) { static PKINFO_TYPE pk_zero; PKINFO_TYPE * pk; if (pkranks == NULL) { pk = alloc_perm(sizeof(*pk)); pkranks = pk; pk->character = str_dup(ch->name); pk->pk_count = ch->pk_count; pk->pk_death_count = ch->pk_died_count; pk->next = NULL; pk_zero = *pk; } else { //pk = &pk_zero; pk = pkranks; PKINFO_TYPE * prior; prior = pk; while (pk && strcmp(pk->character,ch->name)) { prior = pk; pk = pk->next; } if (!pk) { pk = alloc_perm(sizeof(*pk)); prior->next = pk; pk->next = NULL; pk->character = str_dup(ch->name); pk->pk_count = ch->pk_count; pk->pk_death_count = ch->pk_died_count; } else if (pk && !strcmp(pk->character, ch->name)) { pk->pk_count = ch->pk_count; pk->pk_death_count = ch->pk_died_count; } } FILE * fp = fopen(PKRANK_FILE,"w"); if (fp) { PKINFO_TYPE * tmp = &pk_zero; while(tmp) { fprintf(fp,"%s~\n",tmp->character); fprintf(fp,"%d %d\n",tmp->pk_count, tmp->pk_death_count); tmp = tmp->next; } fprintf(fp,"END~\n"); fclose(fp); } return pk; }
void read_trivia(void) { FILE *fp; TRIVIA *strivia = 0; HINT *hint; char *word; if((fp = fopen(TRIVIA_FILE, "r")) == 0) { bug("read_trivia: unable to open file ro reading!", 0); return; } while(1) { word = fread_word(fp); if(!str_cmp(word, "end")) break; if(!str_cmp(word, "trivia")) { strivia = alloc_perm(sizeof(*strivia)); strivia->question = fread_string(fp); strivia->answer = fread_string(fp); strivia->character = fread_string(fp); strivia->winner = fread_string(fp); strivia->guesses = fread_number(fp); strivia->time = fread_number(fp); strivia->timeleft = fread_number(fp); strivia->reward = fread_number(fp); strivia->next = trivia_list; trivia_list = strivia; continue; } if(!str_cmp(word, "hint")) { if(!strivia) { bug("read_trivia: hint read before trivia laoded!", 0); exit(1); } hint = alloc_perm(sizeof(*hint)); hint->hint = fread_string(fp); hint->next = strivia->hints; strivia->hints = hint; continue; } bug("read_trivia: wrong word!", 0); break; } return; }
ROOM_INDEX_DATA *new_room_index( void ) { ROOM_INDEX_DATA *pRoom; int door; pRoom = alloc_perm( sizeof( *pRoom ) ); top_room++; pRoom->next = NULL; pRoom->people = NULL; pRoom->contents = NULL; pRoom->extra_descr = NULL; pRoom->area = NULL; for ( door = 0; door < MAX_DIR; door++ ) pRoom->exit[door] = NULL; pRoom->name = &str_empty[0]; pRoom->description = &str_empty[0]; pRoom->vnum = 0; pRoom->room_flags[0]= 0; pRoom->room_flags[1]= 0; pRoom->light = 0; pRoom->sector_type = 0; return pRoom; }
AREA_DATA *new_area( void ) { AREA_DATA *pArea; char buf[ MAX_INPUT_LENGTH ]; pArea = alloc_perm( sizeof( *pArea ) ); top_area++; pArea->next = NULL; pArea->name = str_dup( "New area" ); pArea->recall = ROOM_VNUM_TEMPLE; pArea->area_flags = AREA_ADDED; pArea->security = 1; pArea->builders = str_dup( "None" ); pArea->lvnum = 0; pArea->uvnum = 0; pArea->age = 0; pArea->nplayer = 0; pArea->vnum = top_area - 1; sprintf( buf, "area%d.are", pArea->vnum ); pArea->filename = str_dup( buf ); return pArea; }
MOB_INDEX_DATA *new_mob_index( void ) { MOB_INDEX_DATA *pMob; int count; pMob = alloc_perm( sizeof( *pMob ) ); top_mob_index++; pMob->next = NULL; pMob->spec_fun = NULL; pMob->pShop = NULL; pMob->area = NULL; pMob->player_name = str_dup( "no name" ); pMob->short_descr = str_dup( "(no short description)" ); pMob->long_descr = str_dup( "(no long description)\r\n" ); pMob->description = &str_empty[0]; pMob->vnum = 0; pMob->count = 0; pMob->killed = 0; pMob->sex = 0; pMob->level = 0; pMob->act = ACT_IS_NPC; for( count = 0; count < NUM_AFFECT_VECTORS; count++ ) { pMob->affected_by[count] = 0; } pMob->alignment = 0; return pMob; }
OBJ_INDEX_DATA *new_obj_index( void ) { OBJ_INDEX_DATA *pObj; int value; int count; pObj = alloc_perm( sizeof( *pObj ) ); top_obj_index++; pObj->next = NULL; pObj->extra_descr = NULL; pObj->affected = NULL; pObj->area = NULL; pObj->name = str_dup( "no name" ); pObj->short_descr = str_dup( "(no short description)" ); pObj->description = str_dup( "(no description)" ); pObj->vnum = 0; pObj->item_type = TYPE_TRASH; for( count = 0; count < NUM_ITEM_EXTRA_VECTORS; count++) pObj->extra_flags[count] = 0; pObj->wear_flags = 0; pObj->count = 0; pObj->weight = 0; pObj->cost = 0; for ( value = 0; value < 5; value++ ) pObj->value[value] = 0; return pObj; }
ORGANIZATION *new_org(void) { static ORGANIZATION relg_zero; ORGANIZATION *pRlg; int rank;//, faction, iClass; if (org_free == NULL) pRlg = alloc_perm(sizeof(*pRlg)); else { pRlg = org_free; org_free = org_free->next; } *pRlg = relg_zero; STRING_NEW(pRlg->pmt_msg); STRING_NEW(pRlg->dmt_msg); STRING_NEW(pRlg->chan_name); STRING_NEW(pRlg->sac_msg ); STRING_NEW(pRlg->patron); STRING_NEW(pRlg->name ); for(rank = 0; rank < MAX_RELG_RANK ; rank++ ) { free_string(pRlg->rank[rank]); pRlg->rank[rank] = str_dup(orgrank_table[rank].name ); } VALIDATE(pRlg); return pRlg; }
HELP_DATA *new_help(void) { HELP_DATA *pHelp; pHelp = alloc_perm( sizeof(*pHelp)); pHelp->level = 0; return pHelp; }
/* * Snarf a help section. */ void load_helps( FILE *fp ) { HELP_DATA *pHelp; for ( ; ; ) { pHelp = alloc_perm( sizeof(*pHelp) ); pHelp->level = fread_number( fp ); pHelp->keyword = fread_string( fp ); if ( pHelp->keyword[0] == '$' ) break; pHelp->text = fread_string( fp ); if ( !str_cmp( pHelp->keyword, "greeting" ) ) help_greeting = pHelp->text; if ( help_first == NULL ) help_first = pHelp; if ( help_last != NULL ) help_last->next = pHelp; help_last = pHelp; pHelp->next = NULL; top_help++; } return; }
/* Inutilizzata */ BUFFER *new_buf_size(int size) { BUFFER *buffer; if (buf_free == NULL) buffer = alloc_perm(sizeof(*buffer)); else { buffer = buf_free; buf_free = buf_free->next; } buffer->next = NULL; buffer->state = BUFFER_SAFE; buffer->size = get_size(size); if (buffer->size == -1) { bug("new_buf: buffer size %d too large.",size); exit(1); } buffer->string = alloc_mem(buffer->size); buffer->string[0] = '\0'; VALIDATE(buffer); return buffer; }
DESCRIPTOR_DATA *new_descriptor(void) { static DESCRIPTOR_DATA d_zero; DESCRIPTOR_DATA *d; if (descriptor_free == NULL) d = alloc_perm(sizeof(*d)); else { d = descriptor_free; descriptor_free = descriptor_free->next; } *d = d_zero; VALIDATE(d); d->connected = CON_GET_NAME; d->showstr_head = NULL; d->showstr_point = NULL; d->outsize = 2000; d->outtop = 0; d->pEdit = NULL; /* OLC */ d->pString = NULL; /* OLC */ d->editor = 0; /* OLC */ d->outbuf = alloc_mem( d->outsize ); return d; }
void note_attach( CHAR_DATA *ch ) { NOTE_DATA *pnote; if ( ch->pnote ) return; if ( !note_free ) { pnote = alloc_perm( sizeof( *ch->pnote ) ); } else { pnote = note_free; note_free = note_free->next; } pnote->next = NULL; pnote->sender = str_dup( ch->name ); pnote->date = str_dup( "" ); pnote->to_list = str_dup( "" ); pnote->subject = str_dup( "" ); pnote->text = str_dup( "" ); ch->pnote = pnote; return; }
AREA_DATA *new_area (void) { AREA_DATA *pArea; char buf[MAX_INPUT_LENGTH]; if (!area_free) { pArea = alloc_perm (sizeof (*pArea)); top_area++; } else { pArea = area_free; area_free = area_free->next; } pArea->next = NULL; pArea->name = str_dup ("New area"); /* pArea->recall = ROOM_VNUM_TEMPLE; ROM OLC */ pArea->area_flags = AREA_ADDED; pArea->security = 1; pArea->builders = str_dup ("None"); pArea->min_vnum = 0; pArea->max_vnum = 0; pArea->age = 0; pArea->nplayer = 0; pArea->empty = TRUE; /* ROM patch */ sprintf (buf, "area%d.are", pArea->vnum); pArea->file_name = str_dup (buf); pArea->vnum = top_area - 1; return pArea; }
EXIT_DATA *new_exit (void) { EXIT_DATA *pExit; if (!exit_free) { pExit = alloc_perm (sizeof (*pExit)); top_exit++; } else { pExit = exit_free; exit_free = exit_free->next; } pExit->u1.to_room = NULL; /* ROM OLC */ pExit->next = NULL; /* pExit->vnum = 0; ROM OLC */ pExit->exit_info = 0; pExit->key = 0; pExit->keyword = &str_empty[0]; pExit->description = &str_empty[0]; pExit->rs_flags = 0; return pExit; }
SHOP_DATA *new_shop (void) { SHOP_DATA *pShop; int buy; if (!shop_free) { pShop = alloc_perm (sizeof (*pShop)); top_shop++; } else { pShop = shop_free; shop_free = shop_free->next; } pShop->next = NULL; pShop->keeper = 0; for (buy = 0; buy < MAX_TRADE; buy++) pShop->buy_type[buy] = 0; pShop->profit_buy = 100; pShop->profit_sell = 100; pShop->open_hour = 0; pShop->close_hour = 23; return pShop; }
PROG_PAUSE_DATA *new_pause( void ) { static PROG_PAUSE_DATA pause_zero; PROG_PAUSE_DATA *tmp; int count; if (pause_free == NULL) tmp = alloc_perm(sizeof(*tmp)); else { tmp = pause_free; pause_free = pause_free->next; } *tmp = pause_zero; tmp->room = NULL; tmp->obj = NULL; tmp->actor = NULL; tmp->player = NULL; tmp->pause = 0; tmp->vnum = 0; tmp->code = str_dup(""); tmp->arg1 = NULL; tmp->arg2 = NULL; tmp->lines = 0; for (count = 0; count < MAX_NESTED_LEVEL; count++) { tmp->state[count] = 0; tmp->cond[count] = FALSE; } tmp->level = 0; tmp->set = FALSE; VALIDATE (tmp); return tmp; }
/* * Snarf a shop section. */ void load_shops( FILE *fp ) { SHOP_DATA *pShop; for ( ; ; ) { MOB_INDEX_DATA *pMobIndex; int iTrade; pShop = alloc_perm( sizeof(*pShop) ); pShop->keeper = fread_number( fp ); if ( pShop->keeper == 0 ) break; for ( iTrade = 0; iTrade < MAX_TRADE; iTrade++ ) pShop->buy_type[iTrade] = fread_number( fp ); pShop->profit_buy = fread_number( fp ); pShop->profit_sell = fread_number( fp ); pShop->open_hour = fread_number( fp ); pShop->close_hour = fread_number( fp ); fread_to_eol( fp ); pMobIndex = get_mob_index( pShop->keeper ); pMobIndex->pShop = pShop; if ( shop_first == NULL ) shop_first = pShop; if ( shop_last != NULL ) shop_last->next = pShop; shop_last = pShop; pShop->next = NULL; top_shop++; } return; }
/* * Allocate some ordinary memory, * with the expectation of freeing it someday. */ void *alloc_mem( int sMem ) { void *pMem; int iList; for ( iList = 0; iList < MAX_MEM_LIST; iList++ ) { if ( sMem <= rgSizeList[iList] ) break; } if ( iList == MAX_MEM_LIST ) { bug( "Alloc_mem: size %d too large.", sMem ); exit( 1 ); } if ( rgFreeList[iList] == NULL ) { pMem = alloc_perm( rgSizeList[iList] ); } else { pMem = rgFreeList[iList]; rgFreeList[iList] = * ((void **) rgFreeList[iList]); } return pMem; }
PC_DATA *new_pcdata( void ) { static PC_DATA pcdata_zero; PC_DATA *pcdata; int alias; /*~~~~~~~~~~~~~~~~~~~~~~~~*/ if ( pcdata_free == NULL ) pcdata = alloc_perm( sizeof(*pcdata) ); else { pcdata = pcdata_free; pcdata_free = pcdata_free->next; } *pcdata = pcdata_zero; for ( alias = 0; alias < MAX_ALIAS; alias++ ) { pcdata->alias[alias] = NULL; pcdata->alias_sub[alias] = NULL; } pcdata->buffer = new_buf( ); VALIDATE( pcdata ); return( pcdata ); }
GEN_DATA *new_gen_data(void) { static GEN_DATA gen_zero; bool * tempgendata; GEN_DATA *gen; if (gen_data_free == NULL) gen = alloc_perm(sizeof(*gen)); else { gen = gen_data_free; gen_data_free = gen_data_free->next; } *gen = gen_zero; tempgendata = realloc( gen->skill_chosen, sizeof( bool ) * MAX_SKILL ); gen->skill_chosen = tempgendata; gen->skill_chosen[MAX_SKILL-1] = 0; tempgendata = realloc( gen->group_chosen, sizeof( bool ) * MAX_GROUP ); gen->group_chosen = tempgendata; gen->group_chosen[MAX_GROUP-1] = 0; VALIDATE(gen); return gen; }
/* * Allocate some ordinary memory, * with the expectation of freeing it someday. */ void *alloc_mem(int sMem) { void *pMem; int *magic; int iList; sMem += sizeof(*magic); for (iList = 0; iList < MAX_MEM_LIST; iList++) { if (sMem <= rgSizeList[iList]) break; } if (iList == MAX_MEM_LIST) { bug("Alloc_mem: size %d too large.", sMem); exit(1); } if (rgFreeList[iList] == NULL) { pMem = alloc_perm(rgSizeList[iList]); } else { pMem = rgFreeList[iList]; rgFreeList[iList] = * ((void **) rgFreeList[iList]); } magic = (int *) pMem; *magic = MAGIC_NUM; pMem += sizeof(*magic); return pMem; }
PC_DATA *new_pcdata(void) { int cnt; static PC_DATA pcdata_zero; PC_DATA *pcdata; if (pcdata_free == NULL) pcdata = alloc_perm(sizeof(*pcdata)); else { pcdata = pcdata_free; pcdata_free = pcdata_free->next; } *pcdata = pcdata_zero; for (cnt = 0; cnt < MAX_ALIAS; cnt++) { pcdata->alias[cnt] = NULL; pcdata->alias_sub[cnt] = NULL; } for (cnt = 0; cnt < MAX_IGNORE; cnt++) { pcdata->ignore[cnt] = NULL; } for (cnt = 0; cnt < MAX_DISGUISE; cnt++) { pcdata->disguise[cnt] = NULL; } pcdata->buffer = new_buf(); pcdata->polls = str_dup(""); #if !defined(FIRST_BOOT) pcdata->learned = new_learned(); pcdata->group_known = new_gknown(); #endif pcdata->reward_multiplier = 0; pcdata->reward_time = current_time; pcdata->keepoldstats = FALSE; pcdata->referrer = str_dup(""); pcdata->forcespark = 0; pcdata->forceinsanity = 0; pcdata->timeoutstamp = 0; pcdata->rprewardtimer = 0; pcdata->rpbonus = 0; pcdata->bondcount = 0; pcdata->bondedbysex = 0; pcdata->createangrealcount = 0; pcdata->next_24hourangreal = 0; pcdata->next_createangreal = 0; pcdata->keys = NULL; VALIDATE(pcdata); return pcdata; }
MOB_INDEX_DATA *new_mob_index(void) { MOB_INDEX_DATA *pMob; if (!mob_index_free) { pMob = alloc_perm(sizeof(*pMob)); top_mob_index++; } else { pMob = mob_index_free; mob_index_free = mob_index_free->next; } pMob->next = NULL; pMob->spec_fun = NULL; pMob->pShop = NULL; pMob->area = NULL; pMob->player_name = str_dup("no name"); pMob->short_descr = str_dup("(no short description)"); pMob->long_descr = str_dup("(no long description)\r\n"); pMob->description = &str_empty[0]; pMob->vnum = 0; pMob->count = 0; pMob->killed = 0; pMob->sex = 0; pMob->level = 0; pMob->act = ACT_IS_NPC; pMob->affected_by = 0; pMob->alignment = 2; pMob->hitroll = 0; pMob->race = race_lookup("human"); /* - Hugin */ pMob->form = 0; /* ROM patch -- Hugin */ pMob->parts = 0; /* ROM patch -- Hugin */ pMob->imm_flags = 0; /* ROM patch -- Hugin */ pMob->res_flags = 0; /* ROM patch -- Hugin */ pMob->vuln_flags = 0; /* ROM patch -- Hugin */ pMob->material = str_dup("unknown"); /* -- Hugin */ pMob->off_flags = 0; /* ROM patch -- Hugin */ pMob->size = SIZE_MEDIUM; /* ROM patch -- Hugin */ pMob->ac[AC_PIERCE] = 0; /* ROM patch -- Hugin */ pMob->ac[AC_BASH] = 0; /* ROM patch -- Hugin */ pMob->ac[AC_SLASH] = 0; /* ROM patch -- Hugin */ pMob->ac[AC_EXOTIC] = 0; /* ROM patch -- Hugin */ pMob->hit[DICE_NUMBER] = 0; /* ROM patch -- Hugin */ pMob->hit[DICE_TYPE] = 0; /* ROM patch -- Hugin */ pMob->hit[DICE_BONUS] = 0; /* ROM patch -- Hugin */ pMob->mana[DICE_NUMBER] = 0; /* ROM patch -- Hugin */ pMob->mana[DICE_TYPE] = 0; /* ROM patch -- Hugin */ pMob->mana[DICE_BONUS] = 0; /* ROM patch -- Hugin */ pMob->damage[DICE_NUMBER] = 0; /* ROM patch -- Hugin */ pMob->damage[DICE_TYPE] = 0; /* ROM patch -- Hugin */ pMob->damage[DICE_NUMBER] = 0; /* ROM patch -- Hugin */ pMob->start_pos = POS_STANDING; /* -- Hugin */ pMob->default_pos = POS_STANDING; /* -- Hugin */ pMob->wealth = 0; return pMob; }
/* * Take a social data from the free list and clean it out. */ SOC_INDEX_DATA *new_social( void ) { SOC_INDEX_DATA *soc; soc = (SOC_INDEX_DATA *) alloc_perm( sizeof( SOC_INDEX_DATA ) ); clear_social( soc ); return soc; }
HELP_DATA * new_help ( void ) { HELP_DATA * help; help = alloc_perm( sizeof( *help ) ); help->level = 0; help->keyword = str_dup(""); help->text = str_dup(""); help->next = NULL; return help; }
CHAR_DATA *new_char( void ) { static CHAR_DATA ch_zero; CHAR_DATA *ch; int i; /*~~~~~~~~~~~~~~~~~~~~~~~~*/ if ( char_free == NULL ) ch = alloc_perm( sizeof(*ch) ); else { ch = char_free; char_free = char_free->next; } *ch = ch_zero; VALIDATE( ch ); ch->name = &str_empty[0]; ch->short_descr = &str_empty[0]; ch->long_descr = &str_empty[0]; ch->description = &str_empty[0]; ch->prompt = &str_empty[0]; ch->prefix = &str_empty[0]; ch->logon = current_time; ch->lines = PAGELEN; for ( i = 0; i < 4; i++ ) ch->armor[i] = 100; ch->position = POS_STAND; ch->point[LIFE] = 20; ch->max_point[LIFE] = 20; ch->point[MANA] = 100; ch->max_point[MANA] = 100; ch->point[MOVE] = 100; ch->max_point[MOVE] = 100; ch->ethos = 0; ch->cabal = 0; ch->hometown = 0; ch->guarded_by = NULL; ch->guarding = NULL; ch->doppel = NULL; ch->language = LANG_COMMON; for ( i = 0; i < MAX_STATS; i++ ) { ch->perm_stat[i] = 13; ch->mod_stat[i] = 0; } return( ch ); }
NOTE_DATA *new_note() { NOTE_DATA *note; if (note_free == NULL) note = alloc_perm(sizeof(*note)); else { note = note_free; note_free = note_free->next; } VALIDATE(note); return note; }
/* * Create an instance of a mobile. */ CHAR_DATA *create_mobile( MOB_INDEX_DATA *pMobIndex ) { CHAR_DATA *mob; if ( pMobIndex == NULL ) { bug( "Create_mobile: NULL pMobIndex.", 0 ); exit( 1 ); } if ( char_free == NULL ) { mob = alloc_perm( sizeof(*mob) ); } else { mob = char_free; char_free = char_free->next; } clear_char( mob ); mob->pIndexData = pMobIndex; mob->name = pMobIndex->player_name; mob->short_descr = pMobIndex->short_descr; mob->long_descr = pMobIndex->long_descr; mob->description = pMobIndex->description; mob->spec_fun = pMobIndex->spec_fun; mob->level = number_fuzzy( pMobIndex->level ); mob->act = pMobIndex->act; mob->affected_by = pMobIndex->affected_by; mob->alignment = pMobIndex->alignment; mob->sex = pMobIndex->sex; mob->armor = interpolate( mob->level, 100, -100 ); mob->max_hit = mob->level * 8 + number_range( mob->level * mob->level / 4, mob->level * mob->level ); mob->hit = mob->max_hit; /* * Insert in list. */ mob->next = char_list; char_list = mob; pMobIndex->count++; return mob; }
HELP_DATA * new_help ( void ) { HELP_DATA * help; if ( help_free ) { help = help_free; help_free = help_free->next; } else help = alloc_perm( sizeof( *help ) ); return help; }
RESET_DATA *new_reset_data( void ) { RESET_DATA *pReset; pReset = alloc_perm( sizeof( *pReset ) ); top_reset++; pReset->next = NULL; pReset->command = 'X'; pReset->arg1 = 0; pReset->arg2 = 0; pReset->arg3 = 0; return pReset; }