/**************************************************************************** * Eldhamud Codebase V2.2 * * ------------------------------------------------------------------------ * * EldhaMUD code (C) 2003-2008 by Robert Powell (Tommi) * * ------------------------------------------------------------------------ * * Random Weapons Drop Module * ****************************************************************************/ #include "./Headers/mud.h" #define OBJ_VNUM_RND_WEAPON 96 #define PRE_LAST_ROW 0 #define SUF_LAST_ROW 0 #define LAST_ROW 3 struct random_weapon_prefix { short row_number; /* row number in the table */ char *prefix_up; /* upper case suffix for long desc */ char *prefix_lo; /* lower case suffix for short desc*/ char *prefix_name; /* prefix, keywords */ }; const struct random_weapon_prefix random_weapon_prefix_table[] = { //Row Up Lo Name {0,"An", "an", "Iron"}, }; struct random_weapon_suffix { short row_number; /* row number in the table */ char *suffix_name; /* prefix, keywords */ }; const struct random_weapon_suffix random_weapon_suffix_table[] = { //Row Name {0, "of the Mantis"}, }; struct random_weapons { short row_number; /* row number in the table */ char *name; /* Name, keywords */ short itemvalue4; /* Weapon Type */ short itemvalue3; /* Damge Type */ short weight; /* Base weight of item */ }; const struct random_weapons random_weapons_table[] = { // row name V4 V3 Weight {0, "Dagger", 2, 6, 5 }, {1, "Sword", 1, 1, 10}, {2, "War Hammer", 5, 4, 15}, {3, "Polearm", 12, 0, 15}, }; void do_random_weapon( CHAR_DATA * ch ) { OBJ_DATA *created_weapon; char buf[MAX_INPUT_LENGTH]; short rownumber, pre_rownumber, suf_rownumber, random_number; pre_rownumber = number_range( 0, PRE_LAST_ROW ); suf_rownumber = number_range( 0, SUF_LAST_ROW ); rownumber = number_range( 0, LAST_ROW ); created_weapon = create_object( get_obj_index( OBJ_VNUM_RND_WEAPON ), ch->level ); sprintf( buf, "%s %s %s", random_weapon_prefix_table[pre_rownumber].prefix_name, random_weapons_table[rownumber].name, random_weapon_suffix_table[suf_rownumber].suffix_name ); STRFREE( created_weapon->name ); created_weapon->name = STRALLOC( buf ); sprintf( buf, "%s %s %s %s", random_weapon_prefix_table[pre_rownumber].prefix_lo, random_weapon_prefix_table[pre_rownumber].prefix_name, random_weapons_table[rownumber].name, random_weapon_suffix_table[suf_rownumber].suffix_name ); STRFREE( created_weapon->short_descr ); created_weapon->short_descr = STRALLOC( buf ); sprintf( buf, "%s %s %s %s", random_weapon_prefix_table[pre_rownumber].prefix_up, random_weapon_prefix_table[pre_rownumber].prefix_name, random_weapons_table[rownumber].name, random_weapon_suffix_table[suf_rownumber].suffix_name ); STRFREE( created_weapon->description ); created_weapon->description = STRALLOC( buf ); created_weapon->value[4] = random_weapons_table[rownumber].itemvalue4; created_weapon->value[3] = random_weapons_table[rownumber].itemvalue3; created_weapon->value[2] = number_fuzzy( 6 + ch->level * 2 ); created_weapon->value[1] = number_fuzzy( 2 + ch->level ); created_weapon->value[0] = 13; created_weapon->cost = number_fuzzy(ch->level * 100); created_weapon->weight = random_weapons_table[rownumber].weight; random_number = number_range( 0, 100 ); if( random_number > 65 && random_number < 85 ) { xSET_BIT( created_weapon->extra_flags, ITEM_REFINED ); created_weapon->value[1] += 1; created_weapon->value[2] += 2; } else if( random_number > 84 && random_number < 95 ) { xSET_BIT( created_weapon->extra_flags, ITEM_UNIQUE ); created_weapon->value[1] += 2; created_weapon->value[2] += 4; } else if( random_number > 94 && random_number < 101 ) { xSET_BIT( created_weapon->extra_flags, ITEM_ELITE ); created_weapon->value[1] += 4; created_weapon->value[2] += 8; } obj_to_char( created_weapon, ch ); return; }