#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
#include <sys/types.h>
#include <sys/time.h>
#include "merc.h"
#include "db.h"
#include "tables.h"
#include "lookup.h"
Include dependency graph for db2.c:

Go to the source code of this file.
Functions | |
| int flag_lookup | args ((const char *name, const struct flag_type *flag_table)) |
| void | convert_mobile (MOB_INDEX_DATA *pMobIndex) |
| void | convert_object (OBJ_INDEX_DATA *pObjIndex) |
| void | convert_objects (void) |
| void | load_clan_data () |
| void | load_classes (void) |
| void | load_kingdom_data () |
| void | load_mobiles (FILE *fp) |
| void | load_objects (FILE *fp) |
| void | load_socials (FILE *fp) |
Variables | |
| unsigned long int | m_count |
| unsigned long int | o_count |
| unsigned long int | r_count |
| unsigned long int | reset_count |
| unsigned long int | s_count |
| unsigned long int | so_count |
| int | social_count |
| social_type | social_table [MAX_SOCIALS] |
|
|
|
|
|
Definition at line 904 of file db2.c. References mob_index_data::ac, mob_index_data::act, ACT_WARRIOR, mob_index_data::dam_type, mob_index_data::damage, DICE_BONUS, DICE_NUMBER, DICE_TYPE, mob_index_data::hit, interpolate(), mob_index_data::level, mob_index_data::mana, mob_index_data::material, mob_index_data::new_format, newmobs, number_range(), mob_index_data::size, SIZE_MEDIUM, str_dup(), TRUE, UMAX, UMIN, and mob_index_data::wealth. Referenced by load_old_mob(). 00905 {
00906 int i;
00907 int type, number, bonus;
00908 int level;
00909
00910 if (!pMobIndex || pMobIndex->new_format)
00911 return;
00912
00913 level = pMobIndex->level;
00914
00915 pMobIndex->act |= ACT_WARRIOR;
00916
00917 /*
00918 * Calculate hit dice. Gives close to the hitpoints
00919 * of old format mobs created with create_mobile() (db.c)
00920 * A high number of dice makes for less variance in mobiles
00921 * hitpoints.
00922 * (might be a good idea to reduce the max number of dice)
00923 *
00924 * The conversion below gives:
00925
00926 level: dice min max diff mean
00927 1: 1d2+6 7( 7) 8( 8) 1( 1) 8( 8)
00928 2: 1d3+15 16( 15) 18( 18) 2( 3) 17( 17)
00929 3: 1d6+24 25( 24) 30( 30) 5( 6) 27( 27)
00930 5: 1d17+42 43( 42) 59( 59) 16( 17) 51( 51)
00931 10: 3d22+96 99( 95) 162( 162) 63( 67) 131( )
00932 15: 5d30+161 166(159) 311( 311) 145( 150) 239( )
00933 30: 10d61+416 426(419) 1026(1026) 600( 607) 726( )
00934 50: 10d169+920 930(923) 2610(2610) 1680(1688) 1770( )
00935
00936 The values in parenthesis give the values generated in create_mobile.
00937 Diff = max - min. Mean is the arithmetic mean.
00938 (hmm.. must be some roundoff error in my calculations.. smurfette got
00939 1d6+23 hp at level 3 ? -- anyway.. the values above should be
00940 approximately right..)
00941 */
00942 type = level * level * 27 / 40;
00943 number = UMIN (type / 40 + 1, 10); /* how do they get 11 ??? */
00944 type = UMAX (2, type / number);
00945 bonus = UMAX (0, level * (8 + level) * .9 - number * type);
00946
00947 pMobIndex->hit[DICE_NUMBER] = number;
00948 pMobIndex->hit[DICE_TYPE] = type;
00949 pMobIndex->hit[DICE_BONUS] = bonus;
00950
00951 pMobIndex->mana[DICE_NUMBER] = level;
00952 pMobIndex->mana[DICE_TYPE] = 10;
00953 pMobIndex->mana[DICE_BONUS] = 100;
00954
00955 /*
00956 * Calculate dam dice. Gives close to the damage
00957 * of old format mobs in damage() (fight.c)
00958 */
00959 type = level * 7 / 4;
00960 number = UMIN (type / 8 + 1, 5);
00961 type = UMAX (2, type / number);
00962 bonus = UMAX (0, level * 9 / 4 - number * type);
00963
00964 pMobIndex->damage[DICE_NUMBER] = number;
00965 pMobIndex->damage[DICE_TYPE] = type;
00966 pMobIndex->damage[DICE_BONUS] = bonus;
00967
00968 switch (number_range (1, 3))
00969 {
00970 case (1):
00971 pMobIndex->dam_type = 3;
00972 break; /* slash */
00973 case (2):
00974 pMobIndex->dam_type = 7;
00975 break; /* pound */
00976 case (3):
00977 pMobIndex->dam_type = 11;
00978 break; /* pierce */
00979 }
00980
00981 for (i = 0; i < 3; i++)
00982 pMobIndex->ac[i] = interpolate (level, 100, -100);
00983 pMobIndex->ac[3] = interpolate (level, 100, 0); /* exotic */
00984
00985 pMobIndex->wealth /= 100;
00986 pMobIndex->size = SIZE_MEDIUM;
00987 pMobIndex->material = str_dup ("none");
00988
00989 pMobIndex->new_format = TRUE;
00990 ++newmobs;
00991
00992 return;
00993 }
|
Here is the call graph for this function:

|
|
Definition at line 798 of file db2.c. References bug(), ITEM_ARMOR, ITEM_BOAT, ITEM_CLOTHING, ITEM_CONTAINER, ITEM_CORPSE_NPC, ITEM_CORPSE_PC, ITEM_DRINK_CON, ITEM_FOOD, ITEM_FOUNTAIN, ITEM_FURNITURE, ITEM_KEY, ITEM_LIGHT, ITEM_MAP, ITEM_MONEY, ITEM_PILL, ITEM_POTION, ITEM_SCROLL, ITEM_STAFF, ITEM_TRASH, ITEM_TREASURE, ITEM_WAND, ITEM_WEAPON, mob_index_data::level, mob_index_data::new_format, newobjs, TRUE, UMAX, and UMIN. Referenced by convert_objects(). 00799 {
00800 int level;
00801 int number, type; /* for dice-conversion */
00802
00803 if (!pObjIndex || pObjIndex->new_format)
00804 return;
00805
00806 level = pObjIndex->level;
00807
00808 pObjIndex->level = UMAX (0, pObjIndex->level); /* just to be sure */
00809 pObjIndex->cost = 10 * level;
00810
00811 switch (pObjIndex->item_type)
00812 {
00813 default:
00814 bug ("Obj_convert: vnum %d bad type.", pObjIndex->item_type);
00815 break;
00816
00817 case ITEM_LIGHT:
00818 case ITEM_TREASURE:
00819 case ITEM_FURNITURE:
00820 case ITEM_TRASH:
00821 case ITEM_CONTAINER:
00822 case ITEM_DRINK_CON:
00823 case ITEM_KEY:
00824 case ITEM_FOOD:
00825 case ITEM_BOAT:
00826 case ITEM_CORPSE_NPC:
00827 case ITEM_CORPSE_PC:
00828 case ITEM_FOUNTAIN:
00829 case ITEM_MAP:
00830 case ITEM_CLOTHING:
00831 case ITEM_SCROLL:
00832 break;
00833
00834 case ITEM_WAND:
00835 case ITEM_STAFF:
00836 pObjIndex->value[2] = pObjIndex->value[1];
00837 break;
00838
00839 case ITEM_WEAPON:
00840
00841 /*
00842 * The conversion below is based on the values generated
00843 * in one_hit() (fight.c). Since I don't want a lvl 50
00844 * weapon to do 15d3 damage, the min value will be below
00845 * the one in one_hit, and to make up for it, I've made
00846 * the max value higher.
00847 * (I don't want 15d2 because this will hardly ever roll
00848 * 15 or 30, it will only roll damage close to 23.
00849 * I can't do 4d8+11, because one_hit there is no dice-
00850 * bounus value to set...)
00851 *
00852 * The conversion below gives:
00853
00854 level: dice min max mean
00855 1: 1d8 1( 2) 8( 7) 5( 5)
00856 2: 2d5 2( 3) 10( 8) 6( 6)
00857 3: 2d5 2( 3) 10( 8) 6( 6)
00858 5: 2d6 2( 3) 12(10) 7( 7)
00859 10: 4d5 4( 5) 20(14) 12(10)
00860 20: 5d5 5( 7) 25(21) 15(14)
00861 30: 5d7 5(10) 35(29) 20(20)
00862 50: 5d11 5(15) 55(44) 30(30)
00863
00864 */
00865
00866 number = UMIN (level / 4 + 1, 5);
00867 type = (level + 7) / number;
00868
00869 pObjIndex->value[1] = number;
00870 pObjIndex->value[2] = type;
00871 break;
00872
00873 case ITEM_ARMOR:
00874 pObjIndex->value[0] = level / 5 + 3;
00875 pObjIndex->value[1] = pObjIndex->value[0];
00876 pObjIndex->value[2] = pObjIndex->value[0];
00877 break;
00878
00879 case ITEM_POTION:
00880 case ITEM_PILL:
00881 break;
00882
00883 case ITEM_MONEY:
00884 pObjIndex->value[0] = pObjIndex->cost;
00885 break;
00886 }
00887
00888 pObjIndex->new_format = TRUE;
00889 ++newobjs;
00890
00891 return;
00892 }
|
Here is the call graph for this function:

|
|
Definition at line 647 of file db2.c. References area_first, reset_data::arg1, reset_data::arg3, bug(), reset_data::command, convert_object(), get_mob_index(), get_obj_index(), get_room_index(), ITEM_ARMOR, ITEM_PILL, ITEM_POTION, ITEM_SCROLL, ITEM_STAFF, ITEM_TREASURE, obj_index_data::item_type, ITEM_WAND, ITEM_WEAPON, mob_index_data::level, obj_index_data::level, area_data::min_vnum, obj_index_data::new_format, newobjs, reset_data::next, area_data::next, mob_index_data::pShop, room_index_data::reset_first, top_obj_index, UMAX, and UMIN. Referenced by boot_db(). 00648 {
00649 int vnum;
00650 AREA_DATA *pArea;
00651 RESET_DATA *pReset;
00652 MOB_INDEX_DATA *pMob = NULL;
00653 OBJ_INDEX_DATA *pObj;
00654 ROOM_INDEX_DATA *pRoom;
00655
00656 if (newobjs == top_obj_index)
00657 return; /* all objects in new format */
00658
00659 for (pArea = area_first; pArea; pArea = pArea->next)
00660 {
00661 for (vnum = pArea->min_vnum; vnum <= pArea->max_vnum; vnum++)
00662 {
00663 if (!(pRoom = get_room_index (vnum)))
00664 continue;
00665
00666 for (pReset = pRoom->reset_first; pReset; pReset = pReset->next)
00667 {
00668 switch (pReset->command)
00669 {
00670 case 'M':
00671 if (!(pMob = get_mob_index (pReset->arg1)))
00672 bug ("Convert_objects: 'M': bad vnum %d.",
00673 pReset->arg1);
00674 break;
00675
00676 case 'O':
00677 if (!(pObj = get_obj_index (pReset->arg1)))
00678 {
00679 bug ("Convert_objects: 'O': bad vnum %d.",
00680 pReset->arg1);
00681 break;
00682 }
00683
00684 if (pObj->new_format)
00685 continue;
00686
00687 if (!pMob)
00688 {
00689 bug ("Convert_objects: 'O': No mob reset yet.",
00690 0);
00691 break;
00692 }
00693
00694 pObj->level = pObj->level < 1 ? pMob->level - 2
00695 : UMIN (pObj->level, pMob->level - 2);
00696 break;
00697
00698 case 'P':
00699 {
00700 OBJ_INDEX_DATA *pObj, *pObjTo;
00701
00702 if (!(pObj = get_obj_index (pReset->arg1)))
00703 {
00704 bug ("Convert_objects: 'P': bad vnum %d.",
00705 pReset->arg1);
00706 break;
00707 }
00708
00709 if (pObj->new_format)
00710 continue;
00711
00712 if (!(pObjTo = get_obj_index (pReset->arg3)))
00713 {
00714 bug ("Convert_objects: 'P': bad vnum %d.",
00715 pReset->arg3);
00716 break;
00717 }
00718
00719 pObj->level = pObj->level < 1 ? pObjTo->level
00720 : UMIN (pObj->level, pObjTo->level);
00721 }
00722 break;
00723
00724 case 'G':
00725 case 'E':
00726 if (!(pObj = get_obj_index (pReset->arg1)))
00727 {
00728 bug ("Convert_objects: 'E' or 'G': bad vnum %d.",
00729 pReset->arg1);
00730 break;
00731 }
00732
00733 if (!pMob)
00734 {
00735 bug
00736 ("Convert_objects: 'E' or 'G': null mob for vnum %d.",
00737 pReset->arg1);
00738 break;
00739 }
00740
00741 if (pObj->new_format)
00742 continue;
00743
00744 if (pMob->pShop)
00745 {
00746 switch (pObj->item_type)
00747 {
00748 default:
00749 pObj->level = UMAX (0, pObj->level);
00750 break;
00751 case ITEM_PILL:
00752 case ITEM_POTION:
00753 pObj->level = UMAX (5, pObj->level);
00754 break;
00755 case ITEM_SCROLL:
00756 case ITEM_ARMOR:
00757 case ITEM_WEAPON:
00758 pObj->level = UMAX (10, pObj->level);
00759 break;
00760 case ITEM_WAND:
00761 case ITEM_TREASURE:
00762 pObj->level = UMAX (15, pObj->level);
00763 break;
00764 case ITEM_STAFF:
00765 pObj->level = UMAX (20, pObj->level);
00766 break;
00767 }
00768 }
00769 else
00770 pObj->level = pObj->level < 1 ? pMob->level
00771 : UMIN (pObj->level, pMob->level);
00772 break;
00773 } /* switch ( pReset->command ) */
00774 }
00775 }
00776 }
00777
00778 /* do the conversion: */
00779
00780 for (pArea = area_first; pArea; pArea = pArea->next)
00781 for (vnum = pArea->min_vnum; vnum <= pArea->max_vnum; vnum++)
00782 if ((pObj = get_obj_index (vnum)))
00783 if (!pObj->new_format)
00784 convert_object (pObj);
00785
00786 return;
00787 }
|
Here is the call graph for this function:

|
|
Definition at line 1223 of file db2.c. References bug(), clan_data, clan_table, FALSE, fread_number(), fread_string(), fread_word(), clan_data_1::leader, MAX_CLAN, clan_data_1::member_count, MSL, clan_data_1::rank, str_cmp(), TRUE, and twiddle(). Referenced by boot_db(). 01224 {
01225 int clan=0;
01226 int runner=1;
01227 char buf[MSL];
01228 FILE *fp;
01229 bool opened;
01230
01231 for (clan=0;clan < MAX_CLAN;clan++)
01232 {
01233 twiddle();
01234 if (clan_table[clan].config == NULL)
01235 {
01236 opened = FALSE;
01237 continue;
01238 }
01239 sprintf(buf, "clan/%s", clan_table[clan].config);
01240 if ((fp = fopen(buf, "r")) == NULL)
01241 {
01242 sprintf(buf, "Unable to open %s for reading\n\r", clan_table[clan].config);
01243 bug(buf,0);
01244 opened = FALSE;
01245 continue;
01246 }
01247 if (feof(fp))
01248 continue;
01249 opened = TRUE;
01250 if (!str_cmp(fread_word(fp), "Leader"))
01251 clan_data[clan].leader = fread_string(fp);
01252 if (!str_cmp(fread_word(fp), "Members"))
01253 clan_data[clan].member_count = fread_number(fp);
01254 for (runner=1;runner <=10;runner++)
01255 {
01256 sprintf(buf, "Rank%d", runner);
01257 if (!str_cmp(fread_word(fp), buf))
01258 clan_data[clan].rank[runner] = fread_string(fp);
01259 if (feof(fp))
01260 continue;
01261 }
01262 if (opened)
01263 fclose (fp);
01264 }
01265 // fclose (fp);
01266 }
|
Here is the call graph for this function:

|
|
Definition at line 994 of file db2.c. References class_type::attr_prime, class_type::base_group, bug(), class_table, class_type::default_group, class_type::fMana, fread_letter(), fread_number(), fread_string(), fread_to_eol(), fread_word(), class_type::guild, class_type::hp_max, class_type::hp_min, LEVEL_IMMORTAL, log_string(), MAX_CLASS, MAX_SKILL, MAX_STRING_LENGTH, class_type::name, class_type::pick, skill_type::rating, send_to_all_copyover(), class_type::skill_adept, skill_type::skill_level, skill_table, str_cmp(), class_type::thac0_00, class_type::thac0_32, twiddle(), class_type::weapon, and class_type::who_name. Referenced by boot_db(). 00995 {
00996 FILE *fp;
00997 char buf[MAX_STRING_LENGTH];
00998 int class, i;
00999
01000 /* Initialize Skill levels */
01001 {
01002 int sn, i;
01003 for ( sn = 0; sn < MAX_SKILL; sn++ )
01004 {
01005 twiddle();
01006 if ( skill_table[sn].name == NULL )
01007 break;
01008
01009 for( i = 0; i < MAX_CLASS; i++ )
01010 {
01011 skill_table[sn].skill_level[i] = LEVEL_IMMORTAL;
01012 skill_table[sn].rating[i] = 0;
01013 }
01014 }
01015 }
01016
01017 for (class = 0; class < MAX_CLASS; class++)
01018 {
01019 switch(class)
01020 {
01021 case (0):
01022 sprintf(buf, "./class/mage.class");
01023
01024 break;
01025 case (1):
01026 sprintf( buf, "./class/cleric.class");
01027
01028 break;
01029 case (2):
01030 sprintf( buf, "./class/thief.class");
01031
01032 break;
01033 case (3):
01034 sprintf( buf, "./class/warrior.class");
01035
01036 break;
01037 case (4):
01038 sprintf(buf, "./class/knight.class");
01039
01040 break;
01041 case (5):
01042 sprintf(buf, "./class/citizen.class");
01043
01044 break;
01045 case (6):
01046 sprintf(buf, "./class/Psionic.class");
01047
01048 break;
01049 case (7):
01050 sprintf(buf, "./class/Priest.class");
01051
01052 break;
01053 //case (7):
01054 // sprintf(buf, "./class/Spellsword.class");
01055 // send_to_all_copyover("Spellsword ");
01056 // break;
01057
01058
01059 }
01060
01061 if ( (fp = fopen( buf, "r" )) == NULL )
01062 {
01063 log_string( "Error opening class file." );
01064 exit(1);
01065 }
01066
01067 printf("Opening class: %s\n\r", buf);
01068
01069 for ( ;; )
01070 {
01071 char letter;
01072 char *word;
01073
01074 letter = fread_letter( fp );
01075 if ( letter == '*' )
01076 {
01077 fread_to_eol( fp );
01078 continue;
01079 }
01080 if ( letter != '#' )
01081 {
01082 bug( "Load_classes: # not found.", 0 );
01083 break;
01084 }
01085
01086 word = fread_word( fp );
01087
01088 if ( !str_cmp( word, "CLASS" ) )
01089 {
01090 char *field;
01091
01092 for ( ;; )
01093 {
01094 field = fread_word( fp );
01095 if ( !str_cmp( field, "Name" ) )
01096 class_table[class].name = fread_string( fp );
01097 else if ( !str_cmp( field, "WhoN" ) )
01098 {
01099 for( i = 0; i < 3; i++ )
01100 class_table[class].who_name[i] = fread_letter( fp );
01101 }
01102 else if( !str_cmp( field, "Prime" ) )
01103 class_table[class].attr_prime = fread_number( fp );
01104 else if ( !str_cmp( field, "Weapon" ) )
01105 class_table[class].weapon = fread_number( fp );
01106 else if ( !str_cmp( field, "Guild1" ) )
01107 class_table[class].guild[0] = fread_number( fp );
01108 else if ( !str_cmp( field, "Guild2" ) )
01109 class_table[class].guild[1] = fread_number( fp );
01110 else if ( !str_cmp( field, "Skill" ) )
01111 class_table[class].skill_adept = fread_number( fp );
01112 else if ( !str_cmp( field, "Thac00" ) )
01113 class_table[class].thac0_00 = fread_number( fp );
01114 else if ( !str_cmp( field, "Thac32" ) )
01115 class_table[class].thac0_32 = fread_number( fp );
01116 else if ( !str_cmp( field, "HPMin" ) )
01117 class_table[class].hp_min = fread_number( fp );
01118 else if ( !str_cmp( field, "HPMax" ) )
01119 class_table[class].hp_max = fread_number( fp );
01120 else if ( !str_cmp( field, "FMana" ) )
01121 class_table[class].fMana = fread_number( fp );
01122 else if ( !str_cmp( field, "Pick" ) )
01123 class_table[class].pick = fread_number( fp );
01124 else if ( !str_cmp( field, "Base" ) )
01125 class_table[class].base_group = fread_string( fp );
01126 else if ( !str_cmp( field, "Default" ) )
01127 class_table[class].default_group = fread_string( fp );
01128 else if ( !str_cmp( field, "End" ) )
01129 break;
01130 }
01131 }
01132 else if ( !str_cmp( word, "SKILLS" ) )
01133 {
01134 int sn;
01135 char *spell;
01136
01137 for ( ;; )
01138 {
01139 spell = fread_string( fp );
01140
01141 if ( !str_cmp( spell, "End" ) )
01142 {
01143 // send_to_all_copyover("Done.\n\r");
01144 break;
01145 }
01146
01147
01148 for ( sn = 0; sn < MAX_SKILL; sn++ )
01149 {
01150 if ( skill_table[sn].name == NULL )
01151 break;
01152
01153 if ( !str_cmp( spell, skill_table[sn].name ) )
01154 {
01155 skill_table[sn].skill_level[class] = fread_number( fp );
01156 skill_table[sn].rating[class] = fread_number( fp );
01157 break;
01158 }
01159 }
01160 }
01161 }
01162 else if ( !str_cmp( word, "END" ) )
01163 {
01164 // send_to_all_copyover("Done.\n\r");
01165 fclose( fp );
01166 break;
01167 }
01168 }
01169 }
01170 send_to_all_copyover("\bDone.\n\r");
01171 }
|
Here is the call graph for this function:

|
|
Definition at line 1173 of file db2.c. References bug(), FALSE, fread_number(), fread_string(), fread_word(), kingdom_data, kingdom_table, kingdom_data_1::leader, MAX_KINGDOM, kingdom_data_1::member_count, MSL, kingdom_data_1::rank, str_cmp(), kingdom_data_1::tithe, kingdom_data_1::tithe_account, TRUE, and twiddle(). Referenced by boot_db(). 01174 {
01175 int king=0;
01176 int runner=1;
01177 char buf[MSL];
01178 FILE *fp;
01179 bool opened;
01180
01181 for (king=0;king < MAX_KINGDOM;king++)
01182 {
01183 twiddle();
01184 if (kingdom_table[king].config == NULL)
01185 {
01186 opened = FALSE;
01187 continue;
01188 }
01189 sprintf(buf, "kingdom/%s", kingdom_table[king].config);
01190 if ((fp = fopen(buf, "r")) == NULL)
01191 {
01192 sprintf(buf, "Unable to open %s for reading\n\r", kingdom_table[king].config);
01193 bug (buf,0);
01194 opened = FALSE;
01195 continue;
01196 }
01197 /* Sanity checking */
01198 opened = TRUE;
01199 if (feof(fp))
01200 continue;
01201 if (!str_cmp(fread_word(fp), "Leader"))
01202 kingdom_data[king].leader = fread_string(fp);
01203 if (!str_cmp(fread_word(fp), "Members"))
01204 kingdom_data[king].member_count = fread_number(fp);
01205 for (runner=0;runner <=9;runner++)
01206 {
01207 sprintf(buf, "Rank%d", runner+1);
01208 if (!str_cmp(fread_word(fp), buf))
01209 kingdom_data[king].rank[runner] = fread_string(fp);
01210 if (feof(fp))
01211 continue;
01212 }
01213 if (!str_cmp(fread_word(fp), "Tithe"))
01214 kingdom_data[king].tithe = fread_number(fp);
01215 if (!str_cmp(fread_word(fp), "Taccount"))
01216 kingdom_data[king].tithe_account = (float)fread_number(fp);
01217 if (opened)
01218 fclose (fp);
01219 }
01220 // fclose (fp);
01221 }
|
Here is the call graph for this function:

|
|
Definition at line 223 of file db2.c. References mob_index_data::ac, AC_BASH, AC_EXOTIC, AC_PIERCE, AC_SLASH, race_type::act, mob_index_data::act, ACT_IS_NPC, race_type::aff, mob_index_data::affected_by, mob_index_data::alignment, alloc_perm(), mob_index_data::area, area_last, assign_area_vnum(), attack_lookup(), bug(), CHECK_POS, mob_index_data::dam_type, mob_index_data::damage, mob_index_data::default_pos, mob_index_data::description, DICE_BONUS, DICE_NUMBER, DICE_TYPE, FALSE, fBootDb, flag_lookup(), race_type::form, mob_index_data::form, fread_flag(), fread_letter(), fread_number(), fread_string(), fread_word(), get_mob_index(), mob_index_data::group, mob_index_data::hit, mob_index_data::hitroll, race_type::imm, mob_index_data::imm_flags, kill_table, mob_index_data::level, mob_index_data::long_descr, m_count, mob_index_data::mana, mob_index_data::material, MAX_KEY_HASH, MAX_LEVEL, mob_index_hash, mob_index_data::mprog_flags, mprog_flags, mob_index_data::mprogs, mob_index_data::new_format, newmobs, mob_index_data::next, mprog_list::next, NO_FLAG, kill_data::number, race_type::off, mob_index_data::off_flags, race_type::parts, mob_index_data::parts, mob_index_data::player_name, position_lookup(), mob_index_data::pShop, mob_index_data::race, race_lookup(), race_table, REMOVE_BIT, race_type::res, mob_index_data::res_flags, SET_BIT, mob_index_data::sex, sex_lookup(), mob_index_data::short_descr, mob_index_data::size, size_lookup(), mob_index_data::start_pos, str_dup(), str_prefix(), top_mob_index, top_vnum_mob, mprog_list::trig_phrase, mprog_list::trig_type, TRUE, UPPER, URANGE, mprog_list::vnum, mob_index_data::vnum, race_type::vuln, mob_index_data::vuln_flags, and mob_index_data::wealth. Referenced by boot_db(). 00224 {
00225 MOB_INDEX_DATA *pMobIndex;
00226
00227 if (!area_last)
00228 { /* OLC */
00229 bug ("Load_mobiles: no #AREA seen yet.", 0);
00230 exit (1);
00231 }
00232
00233 for (;;)
00234 {
00235 int vnum;
00236 char letter;
00237 int iHash;
00238
00239 letter = fread_letter (fp);
00240 if (letter != '#')
00241 {
00242 bug ("Load_mobiles: # not found.", 0);
00243 exit (1);
00244 }
00245
00246 vnum = fread_number (fp);
00247 if (vnum == 0)
00248 break;
00249
00250 fBootDb = FALSE;
00251 if (get_mob_index (vnum) != NULL)
00252 {
00253 bug ("Load_mobiles: vnum %d duplicated.", vnum);
00254 exit (1);
00255 }
00256 fBootDb = TRUE;
00257
00258 pMobIndex = alloc_perm (sizeof (*pMobIndex));
00259 pMobIndex->vnum = vnum;
00260 pMobIndex->area = area_last; /* OLC */
00261 pMobIndex->new_format = TRUE;
00262 newmobs++;
00263 pMobIndex->player_name = fread_string (fp);
00264 pMobIndex->short_descr = fread_string (fp);
00265 pMobIndex->long_descr = fread_string (fp);
00266 pMobIndex->description = fread_string (fp);
00267 pMobIndex->race = race_lookup (fread_string (fp));
00268
00269 pMobIndex->long_descr[0] = UPPER (pMobIndex->long_descr[0]);
00270 pMobIndex->description[0] = UPPER (pMobIndex->description[0]);
00271
00272 pMobIndex->act = fread_flag (fp) | ACT_IS_NPC
00273 | race_table[pMobIndex->race].act;
00274 pMobIndex->affected_by = fread_flag (fp)
00275 | race_table[pMobIndex->race].aff;
00276 pMobIndex->pShop = NULL;
00277 pMobIndex->alignment = fread_number (fp);
00278 pMobIndex->group = fread_number (fp);
00279
00280 pMobIndex->level = fread_number (fp);
00281 pMobIndex->hitroll = fread_number (fp);
00282
00283 /* read hit dice */
00284 pMobIndex->hit[DICE_NUMBER] = fread_number (fp);
00285 /* 'd' */ fread_letter (fp);
00286 pMobIndex->hit[DICE_TYPE] = fread_number (fp);
00287 /* '+' */ fread_letter (fp);
00288 pMobIndex->hit[DICE_BONUS] = fread_number (fp);
00289
00290 /* read mana dice */
00291 pMobIndex->mana[DICE_NUMBER] = fread_number (fp);
00292 fread_letter (fp);
00293 pMobIndex->mana[DICE_TYPE] = fread_number (fp);
00294 fread_letter (fp);
00295 pMobIndex->mana[DICE_BONUS] = fread_number (fp);
00296
00297 /* read damage dice */
00298 pMobIndex->damage[DICE_NUMBER] = fread_number (fp);
00299 fread_letter (fp);
00300 pMobIndex->damage[DICE_TYPE] = fread_number (fp);
00301 fread_letter (fp);
00302 pMobIndex->damage[DICE_BONUS] = fread_number (fp);
00303 pMobIndex->dam_type = attack_lookup (fread_word (fp));
00304
00305 /* read armor class */
00306 pMobIndex->ac[AC_PIERCE] = fread_number (fp) * 10;
00307 pMobIndex->ac[AC_BASH] = fread_number (fp) * 10;
00308 pMobIndex->ac[AC_SLASH] = fread_number (fp) * 10;
00309 pMobIndex->ac[AC_EXOTIC] = fread_number (fp) * 10;
00310
00311 /* read flags and add in data from the race table */
00312 pMobIndex->off_flags = fread_flag (fp)
00313 | race_table[pMobIndex->race].off;
00314 pMobIndex->imm_flags = fread_flag (fp)
00315 | race_table[pMobIndex->race].imm;
00316 pMobIndex->res_flags = fread_flag (fp)
00317 | race_table[pMobIndex->race].res;
00318 pMobIndex->vuln_flags = fread_flag (fp)
00319 | race_table[pMobIndex->race].vuln;
00320
00321 /* vital statistics */
00322 pMobIndex->start_pos = position_lookup (fread_word (fp));
00323 pMobIndex->default_pos = position_lookup (fread_word (fp));
00324 pMobIndex->sex = sex_lookup (fread_word (fp));
00325
00326 pMobIndex->wealth = fread_number (fp);
00327
00328 pMobIndex->form = fread_flag (fp) | race_table[pMobIndex->race].form;
00329 pMobIndex->parts = fread_flag (fp)
00330 | race_table[pMobIndex->race].parts;
00331 /* size */
00332 CHECK_POS (pMobIndex->size, size_lookup (fread_word (fp)), "size");
00333 /* pMobIndex->size = size_lookup(fread_word(fp)); */
00334 pMobIndex->material = str_dup (fread_word (fp));
00335
00336 for (;;)
00337 {
00338 letter = fread_letter (fp);
00339
00340 if (letter == 'F')
00341 {
00342 char *word;
00343 long vector;
00344
00345 word = fread_word (fp);
00346 vector = fread_flag (fp);
00347
00348 if (!str_prefix (word, "act"))
00349 REMOVE_BIT (pMobIndex->act, vector);
00350 else if (!str_prefix (word, "aff"))
00351 REMOVE_BIT (pMobIndex->affected_by, vector);
00352 else if (!str_prefix (word, "off"))
00353 REMOVE_BIT (pMobIndex->off_flags, vector);
00354 else if (!str_prefix (word, "imm"))
00355 REMOVE_BIT (pMobIndex->imm_flags, vector);
00356 else if (!str_prefix (word, "res"))
00357 REMOVE_BIT (pMobIndex->res_flags, vector);
00358 else if (!str_prefix (word, "vul"))
00359 REMOVE_BIT (pMobIndex->vuln_flags, vector);
00360 else if (!str_prefix (word, "for"))
00361 REMOVE_BIT (pMobIndex->form, vector);
00362 else if (!str_prefix (word, "par"))
00363 REMOVE_BIT (pMobIndex->parts, vector);
00364 else
00365 {
00366 bug ("Flag remove: flag not found.", 0);
00367 exit (1);
00368 }
00369 }
00370 else if (letter == 'M')
00371 {
00372 MPROG_LIST *pMprog;
00373 char *word;
00374 int trigger = 0;
00375
00376 pMprog = alloc_perm (sizeof (*pMprog));
00377 word = fread_word (fp);
00378 if ((trigger = flag_lookup (word, mprog_flags)) == NO_FLAG)
00379 {
00380 bug ("MOBprogs: invalid trigger.", 0);
00381 exit (1);
00382 }
00383 SET_BIT (pMobIndex->mprog_flags, trigger);
00384 pMprog->trig_type = trigger;
00385 pMprog->vnum = fread_number (fp);
00386 pMprog->trig_phrase = fread_string (fp);
00387 pMprog->next = pMobIndex->mprogs;
00388 pMobIndex->mprogs = pMprog;
00389 }
00390 else
00391 {
00392 ungetc (letter, fp);
00393 break;
00394 }
00395 }
00396
00397 iHash = vnum % MAX_KEY_HASH;
00398 pMobIndex->next = mob_index_hash[iHash];
00399 mob_index_hash[iHash] = pMobIndex;
00400 top_mob_index++;
00401 top_vnum_mob = top_vnum_mob < vnum ? vnum : top_vnum_mob; /* OLC */
00402 assign_area_vnum (vnum); /* OLC */
00403 kill_table[URANGE (0, pMobIndex->level, MAX_LEVEL - 1)].number++;
00404 m_count+=1;
00405 }
00406
00407 return;
00408 }
|
Here is the call graph for this function:

|
|
Definition at line 413 of file db2.c. References obj_index_data::affected, alloc_perm(), obj_index_data::area, area_last, assign_area_vnum(), attack_lookup(), affect_data::bitvector, bug(), CHECK_POS, obj_index_data::condition, obj_index_data::cost, extra_descr_data::description, obj_index_data::description, affect_data::duration, obj_index_data::extra_descr, obj_index_data::extra_flags, FALSE, fBootDb, fread_flag(), fread_letter(), fread_number(), fread_string(), fread_word(), get_obj_index(), ITEM_CONTAINER, ITEM_DRINK_CON, ITEM_FOUNTAIN, item_lookup(), ITEM_PILL, ITEM_POTION, ITEM_SCROLL, ITEM_STAFF, obj_index_data::item_type, ITEM_WAND, ITEM_WEAPON, extra_descr_data::keyword, affect_data::level, obj_index_data::level, liq_lookup(), affect_data::location, obj_index_data::material, MAX_KEY_HASH, affect_data::modifier, obj_index_data::name, obj_index_data::new_format, newobjs, obj_index_data::next, extra_descr_data::next, affect_data::next, o_count, obj_index_hash, obj_index_data::reset_num, obj_index_data::short_descr, skill_lookup(), TO_AFFECTS, TO_IMMUNE, TO_OBJECT, TO_RESIST, TO_VULN, top_affect, top_ed, top_obj_index, top_vnum_obj, TRUE, affect_data::type, obj_index_data::value, obj_index_data::vnum, weapon_type(), obj_index_data::wear_flags, obj_index_data::weight, and affect_data::where. Referenced by boot_db(). 00414 {
00415 OBJ_INDEX_DATA *pObjIndex;
00416
00417 if (!area_last)
00418 { /* OLC */
00419 bug ("Load_objects: no #AREA seen yet.", 0);
00420 exit (1);
00421 }
00422
00423 for (;;)
00424 {
00425 int vnum;
00426 char letter;
00427 int iHash;
00428
00429 letter = fread_letter (fp);
00430 if (letter != '#')
00431 {
00432 bug ("Load_objects: # not found.", 0);
00433 exit (1);
00434 }
00435
00436 vnum = fread_number (fp);
00437 if (vnum == 0)
00438 break;
00439
00440 fBootDb = FALSE;
00441 if (get_obj_index (vnum) != NULL)
00442 {
00443 bug ("Load_objects: vnum %d duplicated.", vnum);
00444 exit (1);
00445 }
00446 fBootDb = TRUE;
00447
00448 pObjIndex = alloc_perm (sizeof (*pObjIndex));
00449 pObjIndex->vnum = vnum;
00450 pObjIndex->area = area_last; /* OLC */
00451 pObjIndex->new_format = TRUE;
00452 pObjIndex->reset_num = 0;
00453 newobjs++;
00454 pObjIndex->name = fread_string (fp);
00455 pObjIndex->short_descr = fread_string (fp);
00456 pObjIndex->description = fread_string (fp);
00457 pObjIndex->material = fread_string (fp);
00458
00459 CHECK_POS (pObjIndex->item_type, item_lookup (fread_word (fp)),
00460 "item_type");
00461 pObjIndex->extra_flags = fread_flag (fp);
00462 pObjIndex->wear_flags = fread_flag (fp);
00463 switch (pObjIndex->item_type)
00464 {
00465 case ITEM_WEAPON:
00466 pObjIndex->value[0] = weapon_type (fread_word (fp));
00467 pObjIndex->value[1] = fread_number (fp);
00468 pObjIndex->value[2] = fread_number (fp);
00469 pObjIndex->value[3] = attack_lookup (fread_word (fp));
00470 pObjIndex->value[4] = fread_flag (fp);
00471 break;
00472 case ITEM_CONTAINER:
00473 pObjIndex->value[0] = fread_number (fp);
00474 pObjIndex->value[1] = fread_flag (fp);
00475 pObjIndex->value[2] = fread_number (fp);
00476 pObjIndex->value[3] = fread_number (fp);
00477 pObjIndex->value[4] = fread_number (fp);
00478 break;
00479 case ITEM_DRINK_CON:
00480 case ITEM_FOUNTAIN:
00481 pObjIndex->value[0] = fread_number (fp);
00482 pObjIndex->value[1] = fread_number (fp);
00483 CHECK_POS (pObjIndex->value[2], liq_lookup (fread_word (fp)),
00484 "liq_lookup");
00485 pObjIndex->value[3] = fread_number (fp);
00486 pObjIndex->value[4] = fread_number (fp);
00487 break;
00488 case ITEM_WAND:
00489 case ITEM_STAFF:
00490 pObjIndex->value[0] = fread_number (fp);
00491 pObjIndex->value[1] = fread_number (fp);
00492 pObjIndex->value[2] = fread_number (fp);
00493 pObjIndex->value[3] = skill_lookup (fread_word (fp));
00494 pObjIndex->value[4] = fread_number (fp);
00495 break;
00496 case ITEM_POTION:
00497 case ITEM_PILL:
00498 case ITEM_SCROLL:
00499 pObjIndex->value[0] = fread_number (fp);
00500 pObjIndex->value[1] = skill_lookup (fread_word (fp));
00501 pObjIndex->value[2] = skill_lookup (fread_word (fp));
00502 pObjIndex->value[3] = skill_lookup (fread_word (fp));
00503 pObjIndex->value[4] = skill_lookup (fread_word (fp));
00504 break;
00505 default:
00506 pObjIndex->value[0] = fread_flag (fp);
00507 pObjIndex->value[1] = fread_flag (fp);
00508 pObjIndex->value[2] = fread_flag (fp);
00509 pObjIndex->value[3] = fread_flag (fp);
00510 pObjIndex->value[4] = fread_flag (fp);
00511 break;
00512 }
00513 pObjIndex->level = fread_number (fp);
00514 pObjIndex->weight = fread_number (fp);
00515 pObjIndex->cost = fread_number (fp);
00516
00517 /* condition */
00518 letter = fread_letter (fp);
00519 switch (letter)
00520 {
00521 case ('P'):
00522 pObjIndex->condition = 100;
00523 break;
00524 case ('G'):
00525 pObjIndex->condition = 90;
00526 break;
00527 case ('A'):
00528 pObjIndex->condition = 75;
00529 break;
00530 case ('W'):
00531 pObjIndex->condition = 50;
00532 break;
00533 case ('D'):
00534 pObjIndex->condition = 25;
00535 break;
00536 case ('B'):
00537 pObjIndex->condition = 10;
00538 break;
00539 case ('R'):
00540 pObjIndex->condition = 0;
00541 break;
00542 default:
00543 pObjIndex->condition = 100;
00544 break;
00545 }
00546
00547 for (;;)
00548 {
00549 char letter;
00550
00551 letter = fread_letter (fp);
00552
00553 if (letter == 'A')
00554 {
00555 AFFECT_DATA *paf;
00556
00557 paf = alloc_perm (sizeof (*paf));
00558 paf->where = TO_OBJECT;
00559 paf->type = -1;
00560 paf->level = pObjIndex->level;
00561 paf->duration = -1;
00562 paf->location = fread_number (fp);
00563 paf->modifier = fread_number (fp);
00564 paf->bitvector = 0;
00565 paf->next = pObjIndex->affected;
00566 pObjIndex->affected = paf;
00567 top_affect++;
00568 }
00569
00570 else if (letter == 'F')
00571 {
00572 AFFECT_DATA *paf;
00573
00574 paf = alloc_perm (sizeof (*paf));
00575 letter = fread_letter (fp);
00576 switch (letter)
00577 {
00578 case 'A':
00579 paf->where = TO_AFFECTS;
00580 break;
00581 case 'I':
00582 paf->where = TO_IMMUNE;
00583 break;
00584 case 'R':
00585 paf->where = TO_RESIST;
00586 break;
00587 case 'V':
00588 paf->where = TO_VULN;
00589 break;
00590 default:
00591 bug ("Load_objects: Bad where on flag set.", 0);
00592 exit (1);
00593 }
00594 paf->type = -1;
00595 paf->level = pObjIndex->level;
00596 paf->duration = -1;
00597 paf->location = fread_number (fp);
00598 paf->modifier = fread_number (fp);
00599 paf->bitvector = fread_flag (fp);
00600 paf->next = pObjIndex->affected;
00601 pObjIndex->affected = paf;
00602 top_affect++;
00603 }
00604
00605 else if (letter == 'E')
00606 {
00607 EXTRA_DESCR_DATA *ed;
00608
00609 ed = alloc_perm (sizeof (*ed));
00610 ed->keyword = fread_string (fp);
00611 ed->description = fread_string (fp);
00612 ed->next = pObjIndex->extra_descr;
00613 pObjIndex->extra_descr = ed;
00614 top_ed++;
00615 }
00616
00617 else
00618 {
00619 ungetc (letter, fp);
00620 break;
00621 }
00622 }
00623
00624 iHash = vnum % MAX_KEY_HASH;
00625 pObjIndex->next = obj_index_hash[iHash];
00626 obj_index_hash[iHash] = pObjIndex;
00627 top_obj_index++;
00628 top_vnum_obj = top_vnum_obj < vnum ? vnum : top_vnum_obj; /* OLC */
00629 assign_area_vnum (vnum); /* OLC */
00630 o_count+=1;
00631 }
00632
00633 return;
00634 }
|
Here is the call graph for this function:

|
|
Definition at line 64 of file db2.c. References add_social(), bug(), social_list::char_auto, social_list::char_found, social_list::char_no_arg, social_list::char_not_found, fread_string_eol(), fread_to_eol(), fread_word(), social_list::name, new_social(), social_list::others_auto, social_list::others_found, social_list::others_no_arg, so_count, str_dup(), and social_list::vict_found. Referenced by boot_db(). 00065 {
00066 SOCIAL_LIST *social;
00067 for (;;)
00068 {
00069 social = new_social();
00070 so_count+=1;
00071 if (social == NULL)
00072 {
00073 bug("Social is null!", 1);
00074 return;
00075 }
00076
00077 char *temp;
00078 /* clear social */
00079 social->char_no_arg = NULL;
00080 social->others_no_arg = NULL;
00081 social->char_found = NULL;
00082 social->others_found = NULL;
00083 social->vict_found = NULL;
00084 social->char_not_found = NULL;
00085 social->char_auto = NULL;
00086 social->others_auto = NULL;
00087
00088 temp = fread_word (fp);
00089 if (!strcmp (temp, "#0"))
00090 return; /* done */
00091 #if defined(social_debug)
00092 else
00093 fprintf (stderr, "%s\n\r", temp);
00094 #endif
00095
00096 //strcpy (social.name, temp);
00097
00098
00099 //strcpy(socia |