Eldhamud_2.5.83/clans/
Eldhamud_2.5.83/classes/
Eldhamud_2.5.83/doc/
Eldhamud_2.5.83/doc/DIKU/
Eldhamud_2.5.83/doc/MERC/
Eldhamud_2.5.83/doc/mudprogs/
Eldhamud_2.5.83/houses/
/****************************************************************************
 *			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  15
#define PRE_LAST_ROW 4
#define SUF_LAST_ROW 39
#define LAST_ROW 41

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"},
	{4, "A",   "a","bamboo"}
};

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},
	{40, "tiger talon", 	 4, 8, 5},
	{41, "whip", 		 3, 5, 10},
};


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->level = ch->level;
	created_weapon->value[5] = ch->level;
	created_weapon->value[4] = random_weapons_table[rownumber].itemvalue4;
	created_weapon->value[3] = random_weapons_table[rownumber].itemvalue3;
	created_weapon->value[2] = number_fuzzy ( 8 + created_weapon->level * 3 );
	created_weapon->value[1] = number_fuzzy ( 3 + created_weapon->level * 1.5 );
	created_weapon->value[0] = 13;
	created_weapon->timer = 5;

	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_room ( created_weapon, ch->in_room, ch );
	return;
}