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