/****************************************************************************
* 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;
}