/**************************************************************************** * Eldhamud Codebase V2.0 * * ------------------------------------------------------------------------ * * EldhaMUD code (C) 2003-2008 by Robert Powell (Tommi) * * ------------------------------------------------------------------------ * * Random Armor Drop Module * ****************************************************************************/ #include "./Headers/mud.h" #define OBJ_VNUM_RND_ARMOR 92 #define PRE_LAST_ROW 0 #define ARM_LAST_ROW 6 #define SUF_LAST_ROW 0 struct random_armor_prefix { short row_number; /* row number in the table */ char *name; /* Name, keywords */ int anti_1; /* anti flags */ int anti_2; int anti_3; }; const struct random_armor_prefix random_armor_prefix_table[] = { //Row Name Anti_1 Anti_2 Anti_3 {0, "ring armor", ITEM_ANTI_LIFE, ITEM_ANTI_DECAY, ITEM_ANTI_GROWTH}, }; struct random_armor { short row_number; /* row number in the table */ char *prefix; /* Prefix, keywords */ char *prefix2; /* Prefix, keywords */ char *name; /* Name, keywords */ int wear_loc; /* Wear Location */ short cost; /* Base cost of item */ short weight; /* Base weight of item */ }; const struct random_armor random_armor_table[] = { //Row Prefixes Name Wear Cost Weight {0, "A", "a", "helmet", ITEM_WEAR_HEAD, 100, 10}, {1, "A", "a", "chestplate", ITEM_WEAR_BODY, 100, 10}, {2, "A pair of", "a pair of", "sleeves", ITEM_WEAR_ARMS, 100, 10}, {3, "A pair of", "a pair of", "gloves", ITEM_WEAR_HANDS, 100, 10}, {4, "A", "a", "shield", ITEM_WEAR_SHIELD, 100, 10}, {5, "A pair of", "a pair of", "leggings", ITEM_WEAR_LEGS, 100, 10}, {6, "A pair of", "a pair of", "boots", ITEM_WEAR_FEET, 100, 10}, }; struct random_armor_suffix { short row_number; /* row number in the table */ char *suffix; /* Suffix, keywords */ }; const struct random_armor_suffix random_armor_suffix_table[] = { //Row Name {0, "of the warrior"}, }; void do_random_armor( CHAR_DATA * ch ) { OBJ_DATA *created_armor; char buf[MAX_INPUT_LENGTH]; short prefix_rownumber, armor_rownumber, suffix_rownumber, random_number; prefix_rownumber = number_range( 0, PRE_LAST_ROW ); armor_rownumber = number_range( 0, ARM_LAST_ROW ); suffix_rownumber = number_range( 0, SUF_LAST_ROW ); created_armor = create_object( get_obj_index( OBJ_VNUM_RND_ARMOR ), ch->level);//random_armor_table[armor_rownumber].level ); sprintf( buf, "%s %s %s", random_armor_prefix_table[prefix_rownumber].name, random_armor_table[armor_rownumber].name, random_armor_suffix_table[suffix_rownumber].suffix ); STRFREE( created_armor->name ); created_armor->name = STRALLOC( buf ); sprintf( buf, "%s %s %s of the %s", random_armor_table[armor_rownumber].prefix2, random_armor_prefix_table[prefix_rownumber].name, random_armor_table[armor_rownumber].name, random_armor_suffix_table[suffix_rownumber].suffix ); STRFREE( created_armor->short_descr ); created_armor->short_descr = STRALLOC( buf ); sprintf( buf, "%s %s %s of the %s.", random_armor_table[armor_rownumber].prefix, random_armor_prefix_table[prefix_rownumber].name, random_armor_table[armor_rownumber].name, random_armor_suffix_table[suffix_rownumber].suffix ); STRFREE( created_armor->description ); created_armor->description = STRALLOC( buf ); created_armor->value[3] = 13; created_armor->value[1] = ch->level; created_armor->value[0] = ch->level; created_armor->cost = ch->level * 100; created_armor->weight = random_armor_table[armor_rownumber].weight; SET_BIT( created_armor->wear_flags, random_armor_table[armor_rownumber].wear_loc ); xSET_BIT( created_armor->extra_flags, random_armor_prefix_table[prefix_rownumber].anti_1 ); xSET_BIT( created_armor->extra_flags, random_armor_prefix_table[prefix_rownumber].anti_2 ); xSET_BIT( created_armor->extra_flags, random_armor_prefix_table[prefix_rownumber].anti_3 ); random_number = number_range( 0, 100 ); if( random_number > 65 && random_number < 85 ) { xSET_BIT( created_armor->extra_flags, ITEM_REFINED ); created_armor->value[0] += 2; created_armor->value[1] += 2; } else if( random_number > 84 && random_number < 95 ) { xSET_BIT( created_armor->extra_flags, ITEM_UNIQUE ); created_armor->value[0] += 4; created_armor->value[1] += 4; } else if( random_number > 94 && random_number < 101 ) { xSET_BIT( created_armor->extra_flags, ITEM_ELITE ); created_armor->value[0] += 8; created_armor->value[1] += 8; } obj_to_char( created_armor, ch ); return; }