/* FORGE SYSTEM */ #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <ctype.h> #include "mud.h" void do_forge args ( ( CHAR_DATA *ch, char *argument ) ); void ore_alter args ( ( CHAR_DATA *ch, OBJ_DATA *obj, OBJ_DATA *slab ) ); char *const weapon_race[MAX_RACE] = { "Human", "Elven", "Dwarven", "Ogre", "Hobbit", "Fairy" }; int get_forge_type(char *argument) { char buf[MSL]; sprintf(buf, argument); if (!str_prefix(buf, "Swords")) return 0; if (!str_prefix(buf, "Axes")) return 1; if (!str_prefix(buf, "PoleArms")) return 2; if (!str_prefix(buf, "Blunt")) return 3; if (!str_prefix(buf, "Staves")) return 4; if (!str_prefix(buf, "Daggers")) return 5; if (!str_prefix(buf, "Chest")) return 6; if (!str_prefix(buf, "Arms")) return 7; if (!str_prefix(buf, "Legs")) return 8; if (!str_prefix(buf, "Head")) return 9; if (!str_prefix(buf, "Neck")) return 10; if (!str_prefix(buf, "Shield")) return 11; if (!str_prefix(buf, "Projectile")) return 12; return -1; } char *get_forge_type_name(int type) { switch(type) { default: return "Unknown"; case 0: return "Swords"; case 1: return "Axes"; case 2: return "PoleArms"; case 3: return "Blunt"; case 4: return "Staves"; case 5: return "Daggers"; case 6: return "Chest"; case 7: return "Arms"; case 8: return "Legs"; case 9: return "Head"; case 10: return "Neck"; case 11: return "Shield"; case 12: return "Projectile"; } } void alter_forge_obj(CHAR_DATA *ch, OBJ_DATA *fobj, OBJ_DATA *first_obj, SLAB_DATA *slab) { char rstr1[MIL]; char rstr2[MIL]; char race[20]; char rstr3[MIL]; char objname[MIL]; char buf[MIL]; if(fobj->item_type == ITEM_WEAPON || (fobj->item_type == ITEM_ARMOR && IS_SET(fobj->wear_flags, ITEM_WEAR_SHIELD)) || fobj->item_type == ITEM_PROJECTILE) { if(slab->adj[0] == 'A' || slab->adj[0] == 'a' || slab->adj[0] == 'E' || slab->adj[0] == 'E' || slab->adj[0] == 'I' || slab->adj[0] == 'i' || slab->adj[0] == 'O' || slab->adj[0] == 'o' || slab->adj[0] == 'U' || slab->adj[0] == 'U') { sprintf(rstr1, "An"); sprintf(rstr2, "Someone has left their"); sprintf(rstr3, "here."); } else { sprintf(rstr1, "A"); sprintf(rstr2, "Someone has left their"); sprintf(rstr3, "here"); } } else if(fobj->item_type == ITEM_ARMOR) { if (fobj->short_descr[0] == 'S' || fobj->short_descr[0] == 's') sprintf(rstr1, "Some"); else { if(slab->adj[0] == 'A' || slab->adj[0] == 'a' || slab->adj[0] == 'E' || slab->adj[0] == 'E' || slab->adj[0] == 'I' || slab->adj[0] == 'i' || slab->adj[0] == 'O' || slab->adj[0] == 'o' || slab->adj[0] == 'U' || slab->adj[0] == 'U') { sprintf(rstr1, "An"); } else { sprintf(rstr1, "A"); } } sprintf(rstr2, "Someone has left their"); sprintf(rstr3, "here!"); } sprintf(race, weapon_race[ch->race]); sprintf(objname, fobj->name); objname[0] = UPPER(objname[0]); STRFREE(fobj->name); sprintf(buf, "%s %s %s", slab->adj, race, objname); fobj->name = STRALLOC(buf); STRFREE(fobj->short_descr); sprintf(buf, "%s %s %s %s", rstr1, slab->adj, race, objname); fobj->short_descr = STRALLOC(buf); STRFREE(fobj->description); sprintf(buf, "%s %s %s %s %s", rstr2, slab->adj, race, objname, rstr3); fobj->description = STRALLOC(buf); if(fobj->item_type == ITEM_WEAPON && !strcmp(slab->adj, "ainalear")) { xTOGGLE_BIT(fobj->extra_flags, ITEM_SANCTIFIED); } if(!strcmp(slab->adj, "adamant")) { xTOGGLE_BIT(fobj->extra_flags, ITEM_NOBREAK); } ore_alter(ch, fobj, first_obj); } //alter an object in your inventory to change it to a forge item void do_forgealter(CHAR_DATA *ch, char *argument) { char arg1[MIL]; char arg2[MIL]; OBJ_DATA *obj; OBJ_DATA *nobj; OBJ_DATA *sobj; SLAB_DATA *slab; int cnt = 1; int race; int oldrace; if (argument[0] == '\0') { send_to_char("Syntax: forgealter <obj name> <ore type> [race value]\n\r", ch); return; } argument = one_argument(argument, arg1); argument = one_argument(argument, arg2); if ((obj = get_obj_here(ch, arg1)) == NULL) { ch_printf(ch, "You cannot seem to find %s", arg1); return; } if (!xIS_SET(obj->extra_flags, ITEM_FORGEABLE)) { send_to_char("That item is not forgeable.\n\r", ch); return; } if (isdigit(arg2[0])) { for (slab = first_slab; slab ; slab = slab->next) { if (atoi(arg2) == cnt) break; cnt++; } if (!slab) { send_to_char("There is no such ore (type forge ores)\n\r", ch); return; } } else { send_to_char("You need to specify a number, use forge ores to get such a number.\n\r", ch); return; } if (argument[0] != '\0') { race = get_npc_race(argument); if (race < 0) race = atoi(argument); if (race < 0 || race >= MAX_RACE) { send_to_char("That is not a valid race, you can only use PC races (ex: Human, Elf, Dwarf)\n\r", ch); return; } oldrace = ch->race; } else { oldrace = ch->race; race = ch->race; } //execute change... ch->race = race; separate_obj(obj); obj_from_char(obj); nobj = create_object(get_obj_index(obj->pIndexData->vnum), 1); obj_to_char(nobj, ch); extract_obj(obj); sobj = create_object(get_obj_index(slab->vnum), 1); alter_forge_obj(ch, nobj, sobj, slab); extract_obj(sobj); ch->race = oldrace; send_to_char("Done.\n\r", ch); return; } char *const kingdoms_race[MAX_RACE] = { "Human", "Elven", "Dwarven", "Ogre", "Hobbit", "Fairy" }; int is_kingdom_race(OBJ_DATA *obj, CHAR_DATA *ch) { char *wbuf; char wname[100]; wbuf = obj->name; wbuf = one_argument(wbuf, wname); wbuf = one_argument(wbuf, wname); if (!str_cmp(wname, kingdoms_race[kingdom_table[ch->pcdata->hometown]->race])) return 1; else return 0; } void do_depository(CHAR_DATA *ch, char *argument) { DEPO_ORE_DATA *dore; DEPO_WEAPON_DATA *dweapon; DEPO_WEAPON_DATA *dsweapon; DEPO_WEAPON_DATA *d1weapon = NULL; DEPO_WEAPON_DATA *dsearch; OBJ_INDEX_DATA *iobj; OBJ_INDEX_DATA *oobj; SLAB_DATA *slab; OBJ_DATA *obj; OBJ_DATA *sobj; char arg1[MIL]; char arg2[MIL]; char arg3[MIL]; char arg4[MIL]; char buf[70]; char buf2[100]; char line[150]; char *name; int cnt = 0; int first = 0; int num = 0; int last = 0; OBJ_DATA *slabobj; if (ch->pcdata->caste < kingdom_table[ch->pcdata->hometown]->mindepository) { send_to_char("Huh?\n\r", ch); return; } if (!kingdom_table[ch->pcdata->hometown]->first_ore) { bug("Kingdom number %d does not have a first ore.", ch->pcdata->hometown); send_to_char("There has been an error with this command, tell an immortal.\n\r", ch); return; } if (!ch->pcdata->town) { send_to_char("You have to belong to a town to use this command.\n\r", ch); return; } if (ch->coord->x != ch->pcdata->town->barracks[0] || ch->coord->y != ch->pcdata->town->barracks[1] || ch->map != ch->pcdata->town->barracks[2]) { send_to_char("You can only do this in the barracks room.\n\r", ch); return; } if (argument[0] == '\0') { if (ch->pcdata->caste < kingdom_table[ch->pcdata->hometown]->mindepository) { send_to_char("Syntax: depository give <item/ore>\n\r", ch); send_to_char("Syntax: depository give inventory\n\r", ch); } else { send_to_char("Syntax: depository save\n\r", ch); send_to_char("Syntax: depository all\n\r", ch); send_to_char("Syntax: depository item <item name>\n\r", ch); send_to_char("Syntax: depository ore <ore name>\n\r", ch); send_to_char("Syntax: depository slab [slab name]\n\r", ch); send_to_char("Syntax: depository give <item/ore>\n\r", ch); send_to_char("Syntax: depository give inventory\n\r", ch); send_to_char("Syntax: depository take ore <name> [number]\n\r", ch); send_to_char("Syntax: depository take item <ore> <name> [number]\n\r", ch); return; } } argument = one_argument(argument, arg1); argument = one_argument(argument, arg2); dsweapon = kingdom_table[ch->pcdata->hometown]->first_ore->first_weapon; if (!str_cmp(arg1, "give")) { if (!str_cmp(arg2, "inventory")) { for (obj = ch->first_carrying; obj; obj = sobj) { sobj = obj->next_content; if (xIS_SET(obj->extra_flags, ITEM_FORGEABLE) && (obj->wear_loc == WEAR_NONE) && is_kingdom_race(obj, ch)) { sprintf(buf2, "give %s", obj->name); do_depository(ch, buf2); } for (dore = kingdom_table[ch->pcdata->hometown]->first_ore; dore; dore = dore->next) { if (dore->vnum == obj->pIndexData->vnum) { sprintf(buf2, "give %s", obj->name); do_depository(ch, buf2); } } } return; } else { for (obj = ch->first_carrying; obj; obj = obj->next_content) { if (!str_cmp(arg2, obj->name)) break; } for (obj = ch->first_carrying; obj; obj = obj->next_content) { if (nifty_is_name(arg2, obj->name)) break; } for (obj = ch->first_carrying; obj; obj = obj->next_content) { if (nifty_is_name_prefix(arg2, obj->name)) break; } if (!obj) { send_to_char("You are not carrying that.\n\r", ch); return; } if (obj->wear_loc != WEAR_NONE) { send_to_char("You can only put items that you are not wearing in the depo.\n\r", ch); return; } if (xIS_SET(obj->extra_flags, ITEM_FORGEABLE) && (obj->wear_loc == WEAR_NONE) && !is_kingdom_race(obj, ch)) { send_to_char("That object is not of the same race of your kingdom.\n\r", ch); return; } for (dore = kingdom_table[ch->pcdata->hometown]->first_ore; dore; dore = dore->next) { if (dore->vnum == obj->pIndexData->vnum) //slab { ch_printf(ch, "You add [%d] %s%s to the depository.\n\r", obj->count, obj->name, obj->count > 1 ? "s" : ""); dore->count += obj->count; write_depo_list(); extract_obj(obj); return; } } if (!xIS_SET(obj->extra_flags, ITEM_FORGEABLE)) { send_to_char("That item is not a forge item.\n\r", ch); return; } if (obj->item_type == ITEM_WEAPON) { if (obj->value[0] != 1000) { send_to_char("You can only place completed repaired weapons in the depo.\n\r", ch); return; } } if (obj->item_type == ITEM_ARMOR) { if (IS_SET(obj->wear_flags, ITEM_WEAR_SHIELD)) { if (obj->value[0] != obj->value[1]) { send_to_char("You can only place completed repaired shields in the depo.\n\r", ch); return; } } else { if (obj->value[3] != 1000) { send_to_char("You can only place completed repaired shields in the depo.\n\r", ch); return; } } } for(slab = first_slab; slab; slab = slab->next) { if(is_name(slab->adj, obj->name) ) break; } if (!slab) { send_to_char("There has been an error with that item, tell an immortal.\n\r", ch); return; } for (dore = kingdom_table[ch->pcdata->hometown]->first_ore; dore; dore = dore->next) { if (dore->vnum == slab->vnum) break; } if (!dore) { send_to_char("There has been an error, tell an immortal.\n\r", ch); bug("depository give has a problem with an item %s has not being on the depo ore list.", ch->name); return; } for (dweapon = dore->first_weapon; dweapon; dweapon = dweapon->next) { if (dweapon->vnum == obj->pIndexData->vnum) { ch_printf(ch, "You add [%d] %s%s to the depository.\n\r", obj->count, obj->name, obj->count > 1 ? "s" : ""); dweapon->count += obj->count; write_depo_list(); extract_obj(obj); return; } } if (!dweapon) { send_to_char("There has been an error, tell an immortal.\n\r", ch); bug("depository give has a problem with an item %s has not being on the depo weapon list.", ch->name); return; } } } if (!str_cmp(arg1, "save")) { write_depo_list(); send_to_char("Done.\n\r", ch); return; } if (!str_cmp(arg1, "take")) { argument = one_argument(argument, arg3); if (!str_cmp(arg2, "item")) { argument = one_argument(argument, arg4); for (dore = kingdom_table[ch->pcdata->hometown]->first_ore; dore; dore = dore->next) { oobj = get_obj_index(dore->vnum); if (!oobj) { send_to_char("There has been an error, tell an immortal.\n\r", ch); bug("Ore %d does not exist, but it is in the depo ore list.\n\r", dore->vnum); return; } if (nifty_is_name(arg3, oobj->name)) { for (slab = first_slab; slab; slab = slab->next) { if (slab->vnum == dore->vnum) break; } if (!slab) { send_to_char("There has been an error, tell an immortal.\n\r", ch); bug("Ore %d does not exist in the actual slab list.", dore->vnum); return; } for (dweapon = dore->first_weapon; dweapon; dweapon = dweapon->next) { int oldrace; iobj = get_obj_index(dweapon->vnum); if (!iobj) { send_to_char("There has been an error, tell an immortal.\n\r", ch); bug("Weapon %d does not exist, but it is in the depo weapon list.\n\r", dore->vnum); return; } if (!str_cmp(arg4, iobj->name)) { if (atoi(argument) > 0) num = atoi(argument); else num = 1; if (num > dweapon->count) { ch_printf(ch, "You only have %d of those.\n\r", dweapon->count); return; } ch_printf(ch, "You take [%d] %s %s%s from the depository.\n\r", num, slab->adj, iobj->name, num > 1 ? "s" : ""); for (cnt = 1; cnt <= num; cnt++) { obj = create_object(iobj, 1); oldrace = ch->race; ch->race = kingdom_table[ch->pcdata->hometown]->race; slabobj = create_object(get_obj_index(slab->vnum), 1); alter_forge_obj(ch, obj, slabobj, slab); ch->race = oldrace; extract_obj(slabobj); obj_to_char(obj, ch); } dweapon->count -= num; write_depo_list(); return; } } send_to_char("That is not an actual item with that name.\n\r", ch); return; } } send_to_char("There is no ore with that name.\n\r", ch); return; } if (!str_cmp(arg2, "ore")) { for (dore = kingdom_table[ch->pcdata->hometown]->first_ore; dore; dore = dore->next) { iobj = get_obj_index(dore->vnum); if (!iobj) { send_to_char("There has been an error, tell an immortal.\n\r", ch); bug("Ore %d does not exist, but it is in the depo ore list.\n\r", dore->vnum); return; } if (nifty_is_name(arg3, iobj->name)) { if (atoi(argument) > 0) num = atoi(argument); else num = 1; if (num > dore->count) { ch_printf(ch, "You only have %d of those.\n\r", dore->count); return; } ch_printf(ch, "You take [%d] %s%s from the depository.\n\r", num, iobj->name, num > 1 ? "s" : ""); for (cnt = 1; cnt <= num; cnt++) { obj = create_object(iobj, 1); obj_to_char(obj, ch); } dore->count -= num; write_depo_list(); return; } } send_to_char("There is no ore with that name.\n\r", ch); return; } } if (!str_cmp(arg1, "slab")) { if (arg2[0] != '\0') { for (dore = kingdom_table[ch->pcdata->hometown]->first_ore; dore; dore = dore->next) { iobj = get_obj_index(dore->vnum); if (!iobj) { send_to_char("There has been an error, tell an immortal.\n\r", ch); bug("Vnum %d in the ore list of a forge does not exist.", dore->vnum); return; } if (nifty_is_name(arg2, iobj->name)) break; } if (!dore) { send_to_char("That is not a valid ore.\n\r", ch); return; } ch_printf(ch, "Ore Name Slab"); send_to_char("\n\r----------------------------------------------------------------------------------------------------\n\r", ch); iobj = get_obj_index(dore->vnum); name = iobj->name; name = one_argument(name, buf); buf[0] = UPPER(buf[0]); ch_printf(ch, "%-15s %d\n\r", buf, dore->count); return; } else { ch_printf(ch, "Ore Name Slab"); send_to_char("\n\r----------------------------------------------------------------------------------------------------\n\r", ch); for (dore = kingdom_table[ch->pcdata->hometown]->first_ore; dore; dore = dore->next) { iobj = get_obj_index(dore->vnum); if (!iobj) { send_to_char("There has been an error, tell an immortal.\n\r", ch); bug("Vnum %d in the ore list of a forge does not exist.", dore->vnum); return; } iobj = get_obj_index(dore->vnum); name = iobj->name; name = one_argument(name, buf); buf[0] = UPPER(buf[0]); ch_printf(ch, "%-15s %d\n\r", buf, dore->count); } return; } } if (!str_cmp(arg1, "ore")) { for (dore = kingdom_table[ch->pcdata->hometown]->first_ore; dore; dore = dore->next) { iobj = get_obj_index(dore->vnum); if (!iobj) { send_to_char("There has been an error, tell an immortal.\n\r", ch); bug("Vnum %d in the ore list of a forge does not exist.", dore->vnum); return; } if (nifty_is_name(arg2, iobj->name)) break; } if (!dore) { send_to_char("That is not a valid ore.\n\r", ch); return; } for (;;) { cnt = 0; sprintf(line, "Ore Name "); if (first == 0) { cnt++; sprintf(buf2, "Slabs "); strcat(line, buf2); } for (dweapon = dsweapon; dweapon; dweapon = dweapon->next) { if (cnt == 4) { d1weapon = dsweapon; //first on the list dsweapon = dweapon; //last on the list send_to_char(line, ch); send_to_char("\n\r----------------------------------------------------------------------------------------------------\n\r", ch); break; } iobj = get_obj_index(dweapon->vnum); sprintf(buf, iobj->name); sprintf(buf2, "%-20s ", buf); strcat(line, buf2); cnt++; if (dweapon->next == NULL) { d1weapon = dsweapon; //first on the list dsweapon = NULL; //last on the list send_to_char(line, ch); send_to_char("\n\r----------------------------------------------------------------------------------------------------\n\r", ch); last = 1; break; } } iobj = get_obj_index(dore->vnum); name = iobj->name; name = one_argument(name, buf); sprintf(line, "%-15s ", buf); line[0] = UPPER(line[0]); if (first == 0) { sprintf(buf, "%-20d ", dore->count); strcat(line, buf); } for (dsearch = dore->first_weapon; dsearch->vnum != d1weapon->vnum; dsearch = dsearch->next) { ; } if (dsearch) { dweapon = dsearch; } if (dsweapon != NULL) { for (dsearch = dore->first_weapon; dsearch->vnum != dsweapon->vnum; dsearch = dsearch->next) { ; } if (dsearch) { dsweapon = dsearch; } } for (;; dweapon = dweapon->next) { if (dweapon && dsweapon) { if (dweapon->vnum == dsweapon->vnum) break; } if (!dsweapon) { if (dweapon == NULL) break; } sprintf(buf, "%-20d ", dweapon->count); strcat(line, buf); } send_to_char(line, ch); send_to_char("\n\r\n\r", ch); if (last == 1) break; if (first == 0) first = 1; } return; } if (!str_cmp(arg1, "item")) { for (dweapon = dsweapon; dweapon; dweapon = dweapon->next) { iobj = get_obj_index(dweapon->vnum); if (!iobj) { send_to_char("There has been an error, tell an immortal.\n\r", ch); bug("Vnum %d in the weapon list of a forge does not exist.", dweapon->vnum); return; } if (nifty_is_name(arg2, iobj->name)) { sprintf(line, "Ore Name "); sprintf(buf, iobj->name); sprintf(buf2, "%-20s ", buf); strcat(line, buf2); send_to_char(line, ch); send_to_char("\n\r----------------------------------------------------------------------------------------------------\n\r", ch); for (dore = kingdom_table[ch->pcdata->hometown]->first_ore; dore; dore = dore->next) { for (dsweapon = dore->first_weapon; dsweapon; dsweapon = dsweapon->next) { if (dsweapon->vnum == dweapon->vnum) { iobj = get_obj_index(dore->vnum); name = iobj->name; name = one_argument(name, buf); sprintf(line, "%-15s ", buf); line[0] = UPPER(line[0]); sprintf(buf, "%-20d ", dsweapon->count); strcat(line, buf); send_to_char(line, ch); send_to_char("\n\r", ch); } } } return; } } for (dweapon = dsweapon; dweapon; dweapon = dweapon->next) { iobj = get_obj_index(dweapon->vnum); if (!iobj) { send_to_char("There has been an error, tell an immortal.\n\r", ch); bug("Vnum %d in the weapon list of a forge does not exist.", dweapon->vnum); return; } if (nifty_is_name_prefix(arg2, iobj->name)) { sprintf(line, "Ore Name "); sprintf(buf, iobj->name); sprintf(buf2, "%-20s ", buf); strcat(line, buf2); send_to_char(line, ch); send_to_char("\n\r----------------------------------------------------------------------------------------------------\n\r", ch); for (dore = kingdom_table[ch->pcdata->hometown]->first_ore; dore; dore = dore->next) { iobj = get_obj_index(dore->vnum); name = iobj->name; name = one_argument(name, buf); sprintf(line, "%-15s ", buf); line[0] = UPPER(line[0]); sprintf(buf, "%-20d ", dweapon->count); strcat(line, buf); send_to_char(line, ch); send_to_char("\n\r", ch); } return; } } send_to_char("That is not an item that is in the depository.\n\r", ch); return; } if (!str_cmp(arg1, "all")) { for (;;) { cnt = 0; sprintf(line, "Ore Name "); if (first == 0) { cnt++; sprintf(buf2, "Slabs "); strcat(line, buf2); } for (dweapon = dsweapon; dweapon; dweapon = dweapon->next) { if (cnt == 4) { d1weapon = dsweapon; //first on the list dsweapon = dweapon; //last on the list send_to_char(line, ch); send_to_char("\n\r----------------------------------------------------------------------------------------------------\n\r", ch); break; } iobj = get_obj_index(dweapon->vnum); sprintf(buf, iobj->name); sprintf(buf2, "%-20s ", buf); strcat(line, buf2); cnt++; if (dweapon->next == NULL) { d1weapon = dsweapon; //first on the list dsweapon = NULL; //last on the list send_to_char(line, ch); send_to_char("\n\r----------------------------------------------------------------------------------------------------\n\r", ch); last = 1; break; } } for (dore = kingdom_table[ch->pcdata->hometown]->first_ore; dore; dore = dore->next) { iobj = get_obj_index(dore->vnum); name = iobj->name; name = one_argument(name, buf); sprintf(line, "%-15s ", buf); line[0] = UPPER(line[0]); if (first == 0) { sprintf(buf, "%-20d ", dore->count); strcat(line, buf); } for (dsearch = dore->first_weapon; dsearch->vnum != d1weapon->vnum; dsearch = dsearch->next) { ; } if (dsearch) { dweapon = dsearch; } if (dsweapon != NULL) { for (dsearch = dore->first_weapon; dsearch->vnum != dsweapon->vnum; dsearch = dsearch->next) { ; } if (dsearch) { dsweapon = dsearch; } } for (;; dweapon = dweapon->next) { if (dweapon && dsweapon) { if (dweapon->vnum == dsweapon->vnum) break; } if (!dsweapon) { if (dweapon == NULL) break; } sprintf(buf, "%-20d ", dweapon->count); strcat(line, buf); } send_to_char(line, ch); send_to_char("\n\r", ch); } if (last == 1) break; if (first == 0) first = 1; send_to_char("\n\r", ch); } return; } do_depository(ch, ""); return; } void do_forge(CHAR_DATA *ch, char *argument) { OBJ_DATA *first_obj, *second_obj; OBJ_INDEX_DATA *wobj; OBJ_DATA *fobj; FORGE_DATA *forge; SLAB_DATA *slab; int x; int race; int slabs; int cnt; int sln; //race slab nums char *wbuf; char wname[MIL]; //for stripping to check race char arg1[MIL]; char arg2[MIL]; char arg3[MIL]; slabs = 0; sln= 0; first_obj=NULL; argument = one_argument(argument, arg1); argument = one_argument(argument, arg2); argument = one_argument(argument, arg3); if(arg1[0] == '\0') { send_to_char( "Syntax: forge slab <ore #>\n\r", ch); send_to_char( "Syntax: forge create <ore #> <weapon #>\n\r", ch); send_to_char( "Syntax: forge break <weapon/armor name>\n\r", ch); send_to_char( "Syntax: forge list [type] (to see a list of forgeable types)\n\r", ch); send_to_char( "Syntax: forge ores (to see a list of ore slabs that can be done here.\n\r", ch); send_to_char( "Syntax: forge appraise <weapon/armor name>\n\r", ch); send_to_char( "Syntax: forge sell <ore #>\n\r", ch); return; } if (!str_cmp(arg1, "ores")) { cnt = 1; send_to_char("Ores.\n\r--------------------\n\r", ch); for (slab = first_slab; slab ; slab = slab->next) { ch_printf(ch, "&c&w[%-2d] &G&W%-20s\n\r", cnt, slab->adj); cnt++; } return; } if (!str_cmp(arg1, "list")) { FORGE_DATA *oforge; int type = -1; int num = 0; int maxcnt = 3; //to break this into two groups. cnt = 1; if (arg2[0] != '\0') { type = get_forge_type(arg2); if (type == -1) { send_to_char("That is not a valid type, type forge list to get an idea.\n\r", ch); return; } } for (forge = first_forge; forge; forge = forge->next) { maxcnt++; } for (oforge = first_forge; oforge; oforge = oforge->next) { num++; if (maxcnt / 2 == num) break; } send_to_char("Item Name Slabs Slots Hand Type Item Name Slabs Slots Hand Type\n\r----------------------------------------------------------------------------------------------\n\r", ch); for (forge = first_forge; forge; forge = forge->next) { int needslabs; wobj = get_obj_index(forge->vnum); if (ch->race == 5) //Fairy needslabs = forge->slabnum * 4 / 10; else if (ch->race == 4) //Hobbit needslabs = forge->slabnum * 6 / 10; else if (ch->race == 1) //Elf needslabs = forge->slabnum * 85 / 100; else if (ch->race == 2) //Dwarf needslabs = forge->slabnum * 12 / 10; else if (ch->race == 3) //Ogre needslabs = forge->slabnum * 15 / 10; else needslabs = forge->slabnum; //Human if (needslabs < 1) needslabs = 1; if (type >= 0) { if (type == forge->type) { ch_printf(ch, "&c&w[" MXPTAG("forge '%d'") "%-2d" MXPTAG("/forge") "] &G&W%-16s &c&R%-2d &c&z%-2d &c&w%-3s &C%-8s \n\r", cnt, cnt, wobj->name, needslabs, wobj->imbueslots, xIS_SET(wobj->extra_flags, ITEM_TWOHANDED) ? "TWO" : "ONE", get_forge_type_name(forge->type)); } cnt++; continue; } else { ch_printf(ch, "&c&w[" MXPTAG("forge '%d'") "%-2d" MXPTAG("/forge") "] &G&W%-16s &c&R%-2d &c&z%-2d &c&w%-3s &C%-8s ", cnt, cnt, wobj->name, needslabs, wobj->imbueslots, xIS_SET(wobj->extra_flags, ITEM_TWOHANDED) ? "TWO" : "ONE", get_forge_type_name(forge->type)); } cnt++; //do the other side of the list now, evilness if (oforge) { wobj = get_obj_index(oforge->vnum); if (ch->race == 5) //Fairy needslabs = oforge->slabnum * 4 / 10; else if (ch->race == 4) //Hobbit needslabs = oforge->slabnum * 6 / 10; else if (ch->race == 1) //Elf needslabs = oforge->slabnum * 85 / 100; else if (ch->race == 2) //Dwarf needslabs = oforge->slabnum * 12 / 10; else if (ch->race == 3) //Ogre needslabs = oforge->slabnum * 15 / 10; else needslabs = oforge->slabnum; //Human if (needslabs < 1) needslabs = 1; ch_printf(ch, "&c&w[" MXPTAG("forge '%d'") "%-2d" MXPTAG("/forge") "] &G&W%-16s &c&R%-2d &c&z%-2d &c&w%-3s &C%-10s\n\r", num, num, wobj->name, needslabs, wobj->imbueslots, xIS_SET(wobj->extra_flags, ITEM_TWOHANDED) ? "TWO" : "ONE", get_forge_type_name(oforge->type)); num++; oforge = oforge->next; if (!oforge && maxcnt % 2 == 1) return; } else { send_to_char("\n\r", ch); return; } } return; } if (!str_prefix(arg1, "slabs")) { cnt = 1; if (!isdigit(arg2[0])) { send_to_char("Need to pick a value for the slab (type forge ores)\n\r", ch); return; } for (slab = first_slab; slab ; slab = slab->next) { if (atoi(arg2) == cnt) break; cnt++; } if (!slab) { send_to_char("There is no such ore (type forge ores)\n\r", ch); return; } for(first_obj = ch->first_carrying; first_obj; first_obj = first_obj->next_content) { if (slab->vnum-1 == first_obj->pIndexData->vnum) break; } if(first_obj == NULL) { send_to_char("You don't have any ore of that type...\n\r", ch); return; } for(second_obj = ch->first_carrying; second_obj; second_obj = second_obj->next_content) { if (IS_OBJ_STAT(second_obj, ITEM_COAL)) break; } if (!second_obj) { send_to_char("You need some charcoal to start the fire.\n\r", ch); return; } if(!xIS_SET(ch->in_room->room_flags, ROOM_FORGEROOM) && !wIS_SET(ch, ROOM_FORGEROOM) ) { send_to_char( "You need to find a forge first!\n\r", ch); return; } if (number_range(1, 100) <= 70) { wobj = get_obj_index(first_obj->pIndexData->vnum+1); wobj->vnum = first_obj->pIndexData->vnum+1; fobj = (create_object(wobj, ch->level)); separate_obj(first_obj); extract_obj(first_obj); separate_obj(second_obj); extract_obj(second_obj); obj_to_room(fobj, ch->in_room, ch); REMOVE_BIT(fobj->wear_flags, ITEM_TAKE); add_obj_timer(fobj, TIMER_COOLING, 2, NULL, 0); send_to_char("You drop the ore into the forges crucible and\n\rr", ch); send_to_char("add in the charcoal. Then, lighting the forge,\n\r", ch); send_to_char("you proceed to watch the metal melt, then start\n\r", ch); send_to_char("to bubble. You start to work the bellows, and the\n\r", ch); send_to_char("metal and charcoal react with the air... a large\n\r", ch); send_to_char("cloud of steam rises and when it clears a glowing\n\r", ch); send_to_char("slab of metal sits in front of you. It is definately\n\r", ch); send_to_char("to hot to touch... you better wait till it cools.\n\r", ch); return; } else { separate_obj(first_obj); extract_obj(first_obj); separate_obj(second_obj); extract_obj(second_obj); send_to_char("You drop the ore into the forges crucible and\n\r", ch); send_to_char("add in the charcoal. Then, lighting the forge,\n\r", ch); send_to_char("you proceed to watch the metal melt, then start\n\r", ch); send_to_char("to bubble. You start to work the bellows, and the\n\r", ch); send_to_char("metal and charcoal react with the air... a large\n\r", ch); send_to_char("cloud of steam rises and when it clears yout notice\n\r", ch); send_to_char("the slab is did not shape properply. The blacksmith laughs\n\r", ch); send_to_char("and removes the slab and throws it somewhere in the back.\n\r", ch); return; } } if(!str_prefix(arg1, "appraise")) { char objname[MSL]; char *pobjname = objname; char objarg[MSL]; for(first_obj = ch->first_carrying; first_obj; first_obj = first_obj->next_content) { if( is_name(arg2, first_obj->name) && xIS_SET(first_obj->extra_flags, ITEM_FORGEABLE) && first_obj->wear_loc == WEAR_NONE ) break; } if (!first_obj) { send_to_char("You do not have that in your inventory.\n\r", ch); return; } if (first_obj->item_type == ITEM_PROJECTILE) { send_to_char("You cannot break down arrows.\n\r", ch); return; } for (forge = first_forge; forge; forge = forge->next) { if (forge->vnum == first_obj->pIndexData->vnum) break; } sprintf(objname, first_obj->name); pobjname = one_argument(pobjname, objarg); pobjname = one_argument(pobjname, objarg); if (!forge && first_obj->pIndexData->vnum >= START_STATICQUEST_VNUM && first_obj->pIndexData->vnum <= END_STATICQUEST_VNUM) { for (forge = first_forge; forge; forge = forge->next) { if (!str_cmp(forge->name, pobjname)) break; } } if (!forge) { send_to_char("Error: Error with the weapon/armor, tell an immotal.\n\r", ch); bug("Forge(appraise): Could not find the weapon/armor in the forge list"); return; } wbuf = first_obj->name; wbuf = one_argument(wbuf, wname); wbuf = one_argument(wbuf, wname); wname[0] = UPPER(wname[0]); if (!str_prefix(wname, "Fairy")) race = 5; else if (!str_prefix(wname, "Hobbit")) race = 4; else if (!str_prefix(wname, "Ogre")) race = 3; else if (!str_prefix(wname, "Dwarven")) race = 2; else if (!str_prefix(wname, "Elven")) race = 1; else if (!str_prefix(wname, "Human")) race = 0; else { bug("Invalid Race Name %s, on player %s", wname, ch->name); send_to_char("Error: Invalid Race Name, tell an immortal.\n\r", ch); return; } if (race == 5) //Fairy slabs = forge->slabnum * 4 / 10; else if (race == 4) //Hobbit slabs = forge->slabnum * 6 / 10; else if (race == 1) //Elf slabs = forge->slabnum * 85 / 100; else if (race == 2) //Dwarf slabs = forge->slabnum * 12 / 10; else if (race == 3) //Ogre slabs = forge->slabnum * 15 / 10; else //Human slabs = forge->slabnum; slabs = slabs * .66; if (slabs < 1) slabs = 1; ch_printf(ch, "The Forge will produce %d slabs for %s\n\r", slabs, first_obj->short_descr); return; } if(!str_prefix(arg1, "break")) { int scnt; char objname[MSL]; char *pobjname = objname; char objarg[MSL]; for(first_obj = ch->first_carrying; first_obj; first_obj = first_obj->next_content) { if( is_name(arg2, first_obj->name) && xIS_SET(first_obj->extra_flags, ITEM_FORGEABLE) && first_obj->wear_loc == WEAR_NONE ) break; } if (!first_obj) { send_to_char("You do not have that in your inventory.\n\r", ch); return; } if (first_obj->item_type == ITEM_PROJECTILE) { send_to_char("You cannot break down arrows.\n\r", ch); return; } if (IS_OBJ_STAT(first_obj, ITEM_KINGDOMEQ)) { send_to_char("Cannot break this item, it is kingdom eq\n\r", ch); return; } for(slab = first_slab; slab; slab = slab->next) { if(is_name(slab->adj, first_obj->name) ) break; } if (!slab) { send_to_char("Error: Did not find the Ore, tell an immortal.\n\r", ch); bug("forge: Forgeable has an invalid ore."); return; } sprintf(objname, first_obj->name); pobjname = one_argument(pobjname, objarg); pobjname = one_argument(pobjname, objarg); for (forge = first_forge; forge; forge = forge->next) { if (forge->vnum == first_obj->pIndexData->vnum) break; } if (!forge && first_obj->pIndexData->vnum >= START_STATICQUEST_VNUM && first_obj->pIndexData->vnum <= END_STATICQUEST_VNUM) { for (forge = first_forge; forge; forge = forge->next) { if (!str_cmp(forge->name, pobjname)) break; } } if (!forge) { send_to_char("Error: Error with the weapon/armor, tell an immotal.\n\r", ch); bug("Forge: Could not find the weapon/armor in the forge list"); return; } if( !xIS_SET(ch->in_room->room_flags, ROOM_FORGEROOM) && !wIS_SET(ch, ROOM_FORGEROOM) ) { send_to_char( "You need to find a forge first!\n\r", ch); return; } wbuf = first_obj->name; wbuf = one_argument(wbuf, wname); wbuf = one_argument(wbuf, wname); wname[0] = UPPER(wname[0]); if (!str_prefix(wname, "Fairy")) race = 5; else if (!str_prefix(wname, "Hobbit")) race = 4; else if (!str_prefix(wname, "Ogre")) race = 3; else if (!str_prefix(wname, "Dwarven")) race = 2; else if (!str_prefix(wname, "Elven")) race = 1; else if (!str_prefix(wname, "Human")) race = 0; else { bug("Invalid Race Name %s, on player %s", wname, ch->name); send_to_char("Error: Invalid Race Name, tell an immortal.\n\r", ch); return; } if (race == 5) //Fairy slabs = forge->slabnum * 4 / 10; else if (race == 4) //Hobbit slabs = forge->slabnum * 6 / 10; else if (race == 1) //Elf slabs = forge->slabnum * 85 / 100; else if (race == 2) //Dwarf slabs = forge->slabnum * 12 / 10; else if (race == 3) //Ogre slabs = forge->slabnum * 15 / 10; else //Human slabs = forge->slabnum; slabs = slabs * .66; if (slabs < 1) slabs = 1; for (scnt = 0; scnt < slabs; scnt++) { fobj = create_object(get_obj_index(slab->vnum), 1); obj_to_room(fobj, ch->in_room, ch); } separate_obj(first_obj); extract_obj(first_obj); send_to_char("You hand over the item to the blacksmith. He smiles and starts hammering\n\r", ch); send_to_char("away at the metal trying to break it down into slabs. He does a pretty good\n\r", ch); send_to_char("job of breaking it down, but there was a few metal pieces that went flying in\n\r", ch); send_to_char("in all directions. The rest is on the ground waiting for you to pick it up.\n\r", ch); return; } if(!str_prefix(arg1, "Sell")) { OBJ_DATA *sobj; int gold; if (!isdigit(arg2[0])) { send_to_char("Need to pick a value for the slab (type forge ores)\n\r", ch); return; } if (atoi(arg3) == 0) { sprintf(arg3, "1"); } cnt = 1; for (slab = first_slab; slab ; slab = slab->next) { if (atoi(arg2) == cnt) break; cnt++; } if (!slab) { send_to_char("There is no such ore (type forge ores)\n\r", ch); return; } if( !xIS_SET(ch->in_room->room_flags, ROOM_FORGEROOM) && !wIS_SET(ch, ROOM_FORGEROOM)) { send_to_char( "You need to find a forge first!\n\r", ch); return; } for(sobj = ch->first_carrying; sobj; sobj = sobj->next_content) { if (slab->vnum == sobj->pIndexData->vnum) { slabs += sobj->count; first_obj = sobj; } } for(sobj = ch->in_room->first_content; sobj; sobj = sobj->next_content) { if (slab->vnum == sobj->pIndexData->vnum) { slabs += sobj->count; first_obj = sobj; } } if (!first_obj) { send_to_char("You don't have any slabs of that type here.\n\r", ch); return; } if (slabs < atoi(arg3)) { sprintf(arg3, "%d", slabs); } gold = atoi(arg3) * first_obj->cost/10; sln = atoi(arg3); //check in inventory first for(sobj = ch->first_carrying; sobj; sobj = sobj->next_content) { if (slab->vnum == sobj->pIndexData->vnum && sln > 0) { if (sln >= sobj->count) { sln -= sobj->count; extract_obj(sobj); } else { sobj->count -= sln; sln = 0; } } } //check on the ground if (sln > 0) { for (sobj = ch->in_room->first_content; sobj; sobj = sobj->next_content) { if (slab->vnum == sobj->pIndexData->vnum && sln > 0) { if (sln >= sobj->count) { sln -= sobj->count; extract_obj(sobj); } else { sobj->count -= sln; sln = 0; } } } } ch_printf(ch, "You quickly hand over %d slabs to the blacksmith and received %d gold in return.\n\r", atoi(arg3), gold); ch->gold += gold; return; } if(!str_prefix(arg1, "Create")) { int icnt = 0; OBJ_DATA *sobj; if (!isdigit(arg2[0])) { send_to_char("Need to pick a value for the slab (type forge ores)\n\r", ch); return; } cnt = 1; for (slab = first_slab; slab ; slab = slab->next) { if (atoi(arg2) == cnt) break; cnt++; } if (!slab) { send_to_char("There is no such ore (type forge ores)\n\r", ch); return; } if (!isdigit(arg3[0])) { send_to_char("Need to pick a value for the weapon (type forge weapons)\n\r", ch); return; } cnt = 1; for (forge = first_forge; forge; forge = forge->next) { if (atoi(arg3) == cnt) break; cnt++; } if (!forge) { send_to_char("There is no such weapon (type forge weapons)\n\r", ch); return; } for(sobj = ch->first_carrying; sobj; sobj = sobj->next_content) { if (slab->vnum == sobj->pIndexData->vnum) { slabs += sobj->count; first_obj = sobj; } } for(sobj = ch->in_room->first_content; sobj; sobj = sobj->next_content) { if (slab->vnum == sobj->pIndexData->vnum) { first_obj = sobj; slabs += sobj->count; } } if (!first_obj) { send_to_char("You don't have any slabs of that type here.\n\r", ch); return; } if( !xIS_SET(ch->in_room->room_flags, ROOM_FORGEROOM) && !wIS_SET(ch, ROOM_FORGEROOM)) { send_to_char( "You need to find a forge first!\n\r", ch); return; } if (ch->race == 5) //Fairy sln = forge->slabnum * 4 / 10; else if (ch->race == 4) //Hobbit sln = forge->slabnum * 6 / 10; else if (ch->race == 1) //Elf sln = forge->slabnum * 85 / 100; else if (ch->race == 2) //Dwarf sln = forge->slabnum * 12 / 10; else if (ch->race == 3) //Ogre sln = forge->slabnum * 15 / 10; else //Human sln = forge->slabnum; if (sln < 1) sln = 1; if (slabs < sln) { send_to_char("You do not have enough slabs to do that!!\n\r", ch); return; } if( !xIS_SET(ch->in_room->room_flags, ROOM_FORGEROOM) && !wIS_SET(ch, ROOM_FORGEROOM)) { send_to_char("You need to find a forge first!\n\r", ch); return; } //check in inventory first for(sobj = ch->first_carrying; sobj; sobj = sobj->next_content) { if (slab->vnum == sobj->pIndexData->vnum && sln > 0) { if (sln >= sobj->count) { sln -= sobj->count; extract_obj(sobj); } else { icnt += sln; sobj->count -= sln; sln = 0; } } } //check on the ground if (sln > 0) { for (sobj = ch->in_room->first_content; sobj; sobj = sobj->next_content) { if (slab->vnum == sobj->pIndexData->vnum && sln > 0) { if (sln >= sobj->count) { sln -= sobj->count; extract_obj(sobj); } else { sobj->count -= sln; sln = 0; } } } } //1 ore - 10 arrows if (forge->type == 12) //Projectiles { for (x = 1; x <= 10; x++) { fobj = create_object(get_obj_index(forge->vnum), 1); alter_forge_obj(ch, fobj, first_obj, slab); obj_to_room(fobj, ch->in_room, ch); REMOVE_BIT(fobj->wear_flags, ITEM_TAKE); add_obj_timer(fobj, TIMER_COOLING, number_range(5, 8), NULL, 0); //20 seconds to 32 seconds } } else { fobj = create_object(get_obj_index(forge->vnum), 1); alter_forge_obj(ch, fobj, first_obj, slab); obj_to_room(fobj, ch->in_room, ch); REMOVE_BIT(fobj->wear_flags, ITEM_TAKE); add_obj_timer(fobj, TIMER_COOLING, number_range(5, 8), NULL, 0); //20 seconds to 32 seconds } send_to_char("You hand over the slabs over to the Blacksmith and he smiles as he shoves\n\r", ch); send_to_char("the slabs above the fire to begin to heat. It only takes a few moments and\n\r", ch); send_to_char("the heat quickly makes the metal glow red, softly at first, then brighter.\n\r", ch); send_to_char("Soon it is bendable and the Blacksmith bends it into shapes and drops it before\n\r", ch); send_to_char("your feet to cool.\n\r", ch); return; } do_forge(ch, ""); } void ore_alter( CHAR_DATA *ch, OBJ_DATA *obj, OBJ_DATA *slab ) { if( ch == NULL ) { bug("ore_alter: ch = NULL.", 0); return; } if( obj == NULL ) { bug("ore_alter: obj = NULL.", 0); return; } if( slab == NULL ) { bug("ore_alter: obj = NULL.", 0); return; } obj->sworthrestrict = slab->value[7]; if(obj->item_type == ITEM_ARMOR && IS_SET(obj->wear_flags, ITEM_WEAR_SHIELD)) { obj->value[1] = obj->pIndexData->value[1] * slab->value[0] ; //Bash armor mod if (obj->value[1] < obj->pIndexData->value[1]) obj->value[1] = obj->pIndexData->value[1]; obj->value[0] = obj->value[1]; obj->cost = obj->pIndexData->cost * slab->value[6] / 100; obj->weight = UMAX(.01,obj->pIndexData->weight * (float)slab->value[4] / 100); if(ch->race == 5) { obj->weight = obj->weight * .4; if (obj->weight < .01) obj->weight = .01; } if(ch->race == 4) { obj->weight = obj->weight * .6; if (obj->weight < .01) obj->weight = .01; } if(ch->race == 1) { obj->weight = obj->weight * .85; if (obj->weight < .01) obj->weight = .01; } if(ch->race == 0) { //essentially do nothing... this is just here in case //we change human base stats obj->weight = obj->weight * 1; if (obj->weight < .01) obj->weight = .01; } if(ch->race == 2) { obj->weight = obj->weight * 1.2; if (obj->weight < .01) obj->weight = .01; } if(ch->race == 3) { obj->weight = obj->weight * 1.5; if (obj->weight < .01) obj->weight = .01; } } if(obj->item_type == ITEM_ARMOR && !IS_SET(obj->wear_flags, ITEM_WEAR_SHIELD)) { obj->value[0] = obj->pIndexData->value[0] + slab->value[0]; //bashmod obj->value[1] = obj->pIndexData->value[1] + slab->value[1]; //slashmod obj->value[2] = obj->pIndexData->value[2] + slab->value[2]; //stabmod obj->value[4] = obj->pIndexData->value[4] + slab->value[5]; //durability obj->cost = obj->pIndexData->cost * slab->value[6] / 100; obj->weight = UMAX(.01,obj->pIndexData->weight * (float)slab->value[4] / 100); if(ch->race == 5) { obj->weight = obj->weight * .4; if (obj->weight < .01) obj->weight = .01; } if(ch->race == 4) { obj->weight = obj->weight * .6; if (obj->weight < .01) obj->weight = .01; } if(ch->race == 1) { obj->weight = obj->weight * .85; if (obj->weight < .01) obj->weight = .01; } if(ch->race == 0) { //essentially do nothing... this is just here in case //we change human base stats obj->weight = obj->weight * 1; if (obj->weight < .01) obj->weight = .01; } if(ch->race == 2) { obj->weight = obj->weight * 1.2; if (obj->weight < .01) obj->weight = .01; } if(ch->race == 3) { obj->weight = obj->weight * 1.5; if (obj->weight < .01) obj->weight = .01; } } if(obj->item_type == ITEM_PROJECTILE) { obj->value[1] = obj->pIndexData->value[1] + slab->value[3]; //dam mod obj->value[2] = obj->pIndexData->value[2] + slab->value[3]; //dam mod obj->value[9] = obj->pIndexData->value[9] + slab->value[2]; //stab mod obj->weight = UMAX(.01,obj->pIndexData->weight * (float)slab->value[4] / 100); //weight mod obj->cost = obj->pIndexData->cost * slab->value[6] / 100; //An arrow is an arrow for the time being.... } if(obj->item_type == ITEM_WEAPON) { obj->value[1] = obj->pIndexData->value[1] + slab->value[3]; //dam mod obj->value[2] = obj->pIndexData->value[2] + slab->value[3]; //dam mod obj->value[3] = race_table[ch->race]->weaponmin + obj->pIndexData->value[3]; obj->value[7] = obj->pIndexData->value[7] + slab->value[0]; //bash mod obj->value[8] = obj->pIndexData->value[8] + slab->value[1]; //slash mod obj->value[9] = obj->pIndexData->value[9] + slab->value[2]; //stab mod obj->weight = UMAX(1, obj->pIndexData->weight * (float)slab->value[4] / 100); //weight mod obj->cost = obj->pIndexData->cost * slab->value[6] / 100; obj->value[10] = obj->pIndexData->value[10] + slab->value[5]; //weapon durability if(ch->race == 5) { obj->value[1] = obj->value[1] * .7; obj->value[2] = obj->value[2] * .7; if (obj->value[1] < 1) obj->value[1] = 1; if (obj->value[2] < 2) obj->value[2] = 2; obj->weight = obj->weight * .5; if (obj->weight < .01) obj->weight = .01; } if(ch->race == 4) { obj->value[1] = obj->value[1] * .8; obj->value[2] = obj->value[2] * .8; if (obj->value[1] < 1) obj->value[1] = 1; if (obj->value[2] < 2) obj->value[2] = 2; obj->weight = obj->weight * .65; if (obj->weight < .01) obj->weight = .01; } if(ch->race == 1) { obj->value[1] = obj->value[1] * .9; obj->value[2] = obj->value[2] * .9; if (obj->value[1] < 1) obj->value[1] = 1; if (obj->value[2] < 2) obj->value[2] = 2; obj->weight = obj->weight * .85; if (obj->weight < .01) obj->weight = .01; } if(ch->race == 0) { //essentially do nothing... this is just here in case //we change human base stats } if(ch->race == 2) { obj->value[1] = obj->value[1] * 1.1; obj->value[2] = obj->value[2] * 1.1; if (obj->value[1] < 1) obj->value[1] = 1; if (obj->value[2] < 2) obj->value[2] = 2; obj->weight = obj->weight * 1.2; if (obj->weight < .01) obj->weight = .01; } if(ch->race == 3) { obj->value[1] = obj->value[1] * 1.3; obj->value[2] = obj->value[2] * 1.3; if (obj->value[1] < 1) obj->value[1] = 1; if (obj->value[2] < 2) obj->value[2] = 2; obj->weight = obj->weight * 1.5; if (obj->weight < .01) obj->weight = .01; } } }