/**************************************************************************** * 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 3 #define SUF_LAST_ROW 39 #define LAST_ROW 39 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"}, {1, "A", "a","Steel"}, {2, "A", "a","Bronze"}, {3, "A", "a","Gold"} }; 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"}, {1, "of the Ox"}, {2, "of the Tiger"}, {3, "of the Monkey"}, {4, "of the Tiger"}, {5, "of the Snake"}, {6, "of the Crane"}, {7, "of the Bear"}, {8, "of the Dragon"}, {9, "of the Crab"}, {10, "of the Horse"}, {11, "of the Eagle"}, {12, "of Thunder"}, {13, "of the Sun"}, {14, "of Wind"}, {15, "of Rain"}, {16, "of Stars"}, {17, "of Death"}, {18, "of Life"}, {19, "of Earthquakes"}, {20, "of Ghouls"}, {21, "of Fire"}, {22, "of Nature"}, {23, "of Water"}, {24, "of Air"}, {25, "of Night"}, {26, "of Day"}, {27, "of War"}, {28, "of Truth"}, {29, "of Glory"}, {30, "of the Panda"}, {31, "of Fate"}, {32, "of Ascendance"}, {33, "of the Fist"}, {34, "of the Foot"}, {35, "of Heart"}, {36, "of Battle"}, {37, "of the Gods"}, {38, "of the Lion"}, {39, "of the Scorpian"}, }; 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, "Sai", 2, 6, 5}, {2, "Tanto", 2, 6, 5}, {3, "Emi Peircers", 2, 6, 5}, {4, "Tamo Daggers", 2, 6, 5}, {5, "Butterfly Knives", 2, 6, 5}, {6, "Sacrificial Dagger", 2, 6, 5}, {7, "Knife", 2, 6, 5}, {8, "Blade", 2, 6, 5}, {9, "Dagger", 2, 6, 10}, {10, "Sword", 1, 1, 10}, {11, "Katana", 1, 1, 10}, {12, "Twin Hook Sword", 1, 1, 10}, {13, "Archaic Sword", 1, 1, 10}, {14, "Kang Si Sword", 1, 1, 10}, {15, "Dadao", 1, 1, 10}, {16, "Odachi", 1, 1, 10}, {17, "9 Ring Sword", 1, 1, 10}, {18, "Wakizashi", 1, 1, 10}, {19, "Jintachi", 1, 1, 10}, {20, "Hammer", 5, 4, 15}, {21, "Mace", 5, 4, 15}, {22, "War Hammer", 5, 4, 15}, {23, "Jitte", 5, 4, 15}, {24, "Masakari", 5, 4, 15}, {25, "War Scythe", 5, 4, 15}, {26, "Muck Rake", 5, 4, 15}, {27, "Monk Cudgel", 5, 4, 15}, {28, "Hammer", 5, 4, 15}, {29, "Hammer", 5, 4, 15}, {30, "Polearm", 12, 0, 15}, {31, "Bo Stick", 12, 0, 15}, {32, "Jo Stick", 12, 0, 15}, {33, "Escrima Stick", 12, 0, 15}, {34, "Naginata", 12, 0, 15}, {35, "Sodegarami", 12, 0, 15}, {36, "Long Yari", 12, 0, 15}, {37, "Wushu Kwadao", 12, 0, 15}, {38, "Water Staff", 12, 0, 15}, {39, "Short Yari", 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; }