void do_consecrate(CHAR_DATA *ch, char *argument) { OBJ_DATA *obj; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_STRING_LENGTH]; char buf[MAX_STRING_LENGTH]; int livingweap_needed = 0; int arti_needed = 0; int hitroll = 0; int damroll = 0; int hp = 0; int mana = 0; int move = 0; // int wear = 0; // int armor = 0; // int value; argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); strcpy(arg3,argument); if (arg1[0] == '\0') { send_to_char("Which item do you wish to consecrate?\n\r", ch); return; } if ( (obj = get_obj_carry(ch, arg1, ch)) == NULL) { send_to_char("You are not carrying that item.\n\r", ch); return; } if (obj->item_type != ITEM_WEAPON && obj->item_type != ITEM_ARMOR) { send_to_char("You may only Consecrate weapons and armor.\n\r",ch); return; } if (!IS_OBJ_STAT (obj, ITEM_RELIC) && !IS_OBJ_STAT (obj, ITEM_ARTIFACT)) { send_to_char("You may only Consecrate Relics and Artifacts.\n\r",ch); return; } if (obj->item_type == ITEM_ARMOR && arg2[0] == '\0') { send_to_char("{b[{r**********{b[{wConsecrate Menu{b]{r**********{b]{x.\n\r",ch); sprintf( buf, "Artifact Name: %s \n\r", obj->short_descr ); send_to_char( buf, ch ); sprintf( buf, "Artifact Level: %d, Artifact Points: %d \n\r", obj->weapon_level, obj->weapon_points); send_to_char( buf, ch ); arti_needed = 20000; sprintf( buf, "Artifact Experiance: %d, EXP til next Level: %d \n\r", obj->weapon_currentxp, (arti_needed - obj->weapon_currentxp)); send_to_char( buf, ch ); stc( "10 Artifact Points are redeamable for:\n\r", ch ); stc( "Hitroll: 10\n\r", ch ); stc( "Damroll: 10\n\r", ch ); stc( "HP: 1000\n\r", ch ); stc( "Mana: 1000\n\r", ch ); stc( "Move: 1000\n\r", ch ); send_to_char("{b[{r**********{b[{wConsecrate Menu{b]{r**********{b]{x.\n\r",ch); } if (obj->item_type == ITEM_ARMOR) { hitroll = 10; damroll = 10; hp = 1000; mana = 1000; move = 1000; if (obj->weapon_points == 10) { if (!str_cmp(arg2,"hitroll")) { add_affect( obj, APPLY_HITROLL, hitroll ); stc( "Hitroll + 10\n\r", ch ); obj->weapon_points = 0; return; } if (!str_cmp(arg2,"damroll")) { add_affect( obj, APPLY_DAMROLL, damroll ); stc( "Damroll + 10\n\r", ch ); obj->weapon_points = 0; return; } if (!str_cmp(arg2,"hp")) { add_affect( obj, APPLY_HIT, hp ); stc( "HP + 1000\n\r", ch ); obj->weapon_points = 0; return; } if (!str_cmp(arg2,"mana")) { add_affect( obj, APPLY_MANA, mana ); stc( "Mana + 1000\n\r", ch ); obj->weapon_points = 0; return; } if (!str_cmp(arg2,"move")) { add_affect( obj, APPLY_MOVE, move ); stc( "Move + 1000\n\r", ch ); obj->weapon_points = 0; return; } } return; } if (obj->item_type == ITEM_WEAPON && arg2[0] == '\0') { send_to_char("{b[{r**********{b[{wConsecrate Menu{b]{r**********{b]{x.\n\r",ch); sprintf( buf, "Weapon Name: %s \n\r", obj->short_descr ); send_to_char( buf, ch ); sprintf( buf, "Weapon Attack Type: %s \n\r", attack_table[obj->value[3]].name ); send_to_char( buf, ch ); send_to_char ("Weapon type is ", ch); switch (obj->value[0]) { case (WEAPON_EXOTIC): send_to_char ("exotic.\n\r", ch); break; case (WEAPON_SWORD): send_to_char ("sword.\n\r", ch); break; case (WEAPON_DAGGER): send_to_char ("dagger.\n\r", ch); break; case (WEAPON_SPEAR): send_to_char ("spear/staff.\n\r", ch); break; case (WEAPON_MACE): send_to_char ("mace/club.\n\r", ch); break; case (WEAPON_AXE): send_to_char ("axe.\n\r", ch); break; case (WEAPON_FLAIL): send_to_char ("flail.\n\r", ch); break; case (WEAPON_WHIP): send_to_char ("whip.\n\r", ch); break; case (WEAPON_POLEARM): send_to_char ("polearm.\n\r", ch); break; default: send_to_char ("unknown.\n\r", ch); break; } sprintf( buf, "Weapon Damage: %d d %d \n\r", obj->value[1], obj->value[2]); send_to_char( buf, ch ); sprintf( buf, "Weapon Level: %d, Weapon Points: %d \n\r", obj->weapon_level, obj->weapon_points); send_to_char( buf, ch ); livingweap_needed = 1500; sprintf( buf, "Weapon Experiance: %d, EXP til next Level: %d \n\r", obj->weapon_currentxp, (livingweap_needed - obj->weapon_currentxp)); send_to_char( buf, ch ); if (IS_WEAPON_STAT (obj, WEAPON_POISON)) send_to_char("This Weapon is Poisoned.\n\r",ch); if (IS_WEAPON_STAT (obj, WEAPON_VAMPIRIC)) send_to_char("This Weapon is Vampiric.\n\r",ch); if (IS_WEAPON_STAT (obj, WEAPON_FLAMING)) send_to_char("This Weapon is Enchanted with Fire.\n\r",ch); if (IS_WEAPON_STAT (obj, WEAPON_FROST)) send_to_char("This Weapon is Enchanted with Frost.\n\r",ch); if (IS_WEAPON_STAT (obj, WEAPON_SHOCKING)) send_to_char("This Weapon is Enchanted with Electricity.\n\r",ch); if (IS_WEAPON_STAT (obj, WEAPON_SHARP)) send_to_char("This Weapon is Sharp.\n\r",ch); if (IS_WEAPON_STAT (obj, WEAPON_TWO_HANDS)) send_to_char("This Weapon is Two-Handed\n\r",ch); send_to_char("{b[{r**********{b[{wConsecrate Menu{b]{r**********{b]{x.\n\r",ch); send_to_char("Upgrade Costs:\n\r",ch); if (!IS_WEAPON_STAT (obj, WEAPON_POISON)) send_to_char("Poison(5)",ch); if (!IS_WEAPON_STAT (obj, WEAPON_VAMPIRIC)) send_to_char(" Vampiric(5)",ch); if (!IS_WEAPON_STAT (obj, WEAPON_FLAMING)) send_to_char(" Flaming(5)",ch); if (!IS_WEAPON_STAT (obj, WEAPON_FROST)) send_to_char(" Frost(5)",ch); if (!IS_WEAPON_STAT (obj, WEAPON_SHOCKING)) send_to_char(" Shocking(5)",ch); if (!IS_WEAPON_STAT (obj, WEAPON_SHARP)) send_to_char(" Sharp(5)",ch); send_to_char("\n\rNumber of Die +1 (5)",ch); send_to_char("\n\rDamage ammount of Die +1 (1)",ch); send_to_char("\n\rName - Short",ch); send_to_char("\n\rWeapon Type (weapon)",ch); send_to_char("\n\r{b[{r**********{b[{wConsecrate Menu{b]{r**********{b]{x.\n\r",ch); } if (!str_cmp(arg2,"name")) { free_string(obj->name); obj->name = str_dup(arg3); } if (!str_cmp(arg2,"short")) { free_string(obj->short_descr); obj->short_descr=str_dup(arg3); } if (!str_cmp(arg2,"weapon")) { if (arg3[0] == '\0') { send_to_char("exotic sword dagger spear mace axe flail whip polearm\n\r",ch); return; } if (!str_cmp(arg3,"exotic")) obj->value[0] = WEAPON_EXOTIC; if (!str_cmp(arg3,"sword")) obj->value[0] = WEAPON_SWORD; if (!str_cmp(arg3,"dagger")) obj->value[0] = WEAPON_DAGGER; if (!str_cmp(arg3,"spear")) obj->value[0] = WEAPON_SPEAR; if (!str_cmp(arg3,"mace")) obj->value[0] = WEAPON_MACE; if (!str_cmp(arg3,"axe")) obj->value[0] = WEAPON_AXE; if (!str_cmp(arg3,"flail")) obj->value[0] = WEAPON_FLAIL; if (!str_cmp(arg3,"whip")) obj->value[0] = WEAPON_WHIP; if (!str_cmp(arg3,"polearm")) obj->value[0] = WEAPON_POLEARM; return; } if (!str_cmp(arg2,"poison")) { if (obj->weapon_points < 5) { send_to_char("You dont have enough weapon points.\n\r",ch); return; } else { sprintf(buf,"%s is coated with poisonous venom!\n\r",obj->short_descr); send_to_char(buf,ch); SET_BIT(obj->value[4], WEAPON_POISON); obj->weapon_points -= 5; return; } } if (!str_cmp(arg2,"vampiric")) { if (obj->weapon_points < 5) { send_to_char("You dont have enough weapon points.\n\r",ch); return; } else { sprintf(buf,"%s has become Vampyric!\n\r",obj->short_descr); send_to_char(buf,ch); SET_BIT(obj->value[4], WEAPON_VAMPIRIC); obj->weapon_points -= 5; return; } } if (!str_cmp(arg2,"flaming")) { if (obj->weapon_points < 5) { send_to_char("You dont have enough weapon points.\n\r",ch); return; } else { sprintf(buf,"%s becomes enveloped with Fire!\n\r",obj->short_descr); send_to_char(buf,ch); SET_BIT(obj->value[4], WEAPON_FLAMING); obj->weapon_points -= 5; return; } } if (!str_cmp(arg2,"frost")) { if (obj->weapon_points < 5) { send_to_char("You dont have enough weapon points.\n\r",ch); return; } else { sprintf(buf,"%s is enveloped with Frost!\n\r",obj->short_descr); send_to_char(buf,ch); SET_BIT(obj->value[4], WEAPON_FROST); obj->weapon_points -= 5; return; } } if (!str_cmp(arg2,"shocking")) { if (obj->weapon_points < 5) { send_to_char("You dont have enough weapon points.\n\r",ch); return; } else { sprintf(buf,"%s is surrounded with electricity!\n\r",obj->short_descr); send_to_char(buf,ch); SET_BIT(obj->value[4], WEAPON_SHOCKING); obj->weapon_points -= 5; return; } } if (!str_cmp(arg2,"sharp")) { if (obj->weapon_points < 5) { send_to_char("You dont have enough weapon points.\n\r",ch); return; } else { sprintf(buf,"%s is honed to Razor Sharpness!\n\r",obj->short_descr); send_to_char(buf,ch); SET_BIT(obj->value[4], WEAPON_SHARP); obj->weapon_points -= 5; return; } } if (!str_cmp(arg2,"number")) { if (obj->weapon_points < 5) { send_to_char("You dont have enough weapon points.\n\r",ch); return; } else { sprintf(buf,"%s gains an additional Number of Damage Die!\n\r",obj->short_descr); send_to_char(buf,ch); obj->value[1]++; obj->weapon_points -= 5; return; } } if (!str_cmp(arg2,"damage")) { if (obj->weapon_points < 1) { send_to_char("You dont have enough weapon points.\n\r",ch); return; } else { sprintf(buf,"%s gains an additional Damage Die!\n\r",obj->short_descr); send_to_char(buf,ch); obj->value[2]++; obj->weapon_points -= 1; return; } } return; } save.c fprintf( fp, "WeaponCurrentXP %d\n", obj->weapon_currentxp); fprintf( fp, "WeaponLevel %d\n", obj->weapon_level); fprintf( fp, "WeaponPoints %d\n", obj->weapon_points); KEY ("WeaponCurrentXP", obj->weapon_currentxp, fread_number (fp) ); KEY ("WeaponLevel", obj->weapon_level, fread_number (fp)); KEY ("WeaponPoints", obj->weapon_points, fread_number (fp)); merc.h obj_index_data/obj_data int weapon_level; int weapon_points; int weapon_currentxp; interp.h DECLARE_DO_FUN( do_consecrate ); interp.c {"consecrate", do_consecrate, POS_DEAD, 0, LOG_NORMAL, 1}, fight.c void group_gain OBJ_DATA *wield; OBJ_DATA *wield2; int livingweap_exp = 0; int livingweap_needed = 0; wield = get_eq_char( ch, WEAR_WIELD ); wield2 = get_eq_char( ch, WEAR_HOLD ); int arti_exp = 0; int arti_needed = 0; Put The Following Code under gain_exp (gch, xp); wield = get_eq_char( ch, WEAR_WIELD ); wield2 = get_eq_char( ch, WEAR_HOLD ); if (wield != NULL) { livingweap_needed = (wield->weapon_level * 100); if (wield->weapon_level >= 100) return; livingweap_exp = (xp * .5); xp -= (livingweap_exp); sprintf(buf, "{b- {gYour Weapon receives {w%d {gexperience points.{x\n\r", livingweap_exp); stc(buf, gch); wield->weapon_currentxp += livingweap_exp; if (wield->weapon_currentxp >= livingweap_needed ) { wield->weapon_level++; send_to_char("{wYour {rweapon {whas gained a Level{x\n\r", gch); wield->weapon_currentxp -= livingweap_needed; wield->weapon_points++; } } if (wield2 != NULL) { livingweap_needed = (wield2->weapon_level * 100); if (wield2->weapon_level >= 100) return; livingweap_exp = (xp * .5); xp -= (livingweap_exp); sprintf(buf, "{b- {gYour Weapon receives {w%d {gexperience points.{x\n\r", livingweap_exp); stc(buf, gch); wield2->weapon_currentxp += livingweap_exp; if (wield2->weapon_currentxp >= livingweap_needed ) { wield2->weapon_level++; send_to_char("{wYour {rweapon {whas gained a Level{x\n\r", gch); wield2->weapon_currentxp -= livingweap_needed; wield2->weapon_points++; } } for (obj = ch->carrying; obj != NULL; obj = obj_next) { obj_next = obj->next_content; if (obj->wear_loc == WEAR_NONE) continue; if (obj != NULL) { arti_needed = 20000; if (IS_OBJ_STAT (obj, ITEM_ARTIFACT)) { if (obj->weapon_level < 10) { arti_exp = (xp * .2); xp -= (arti_exp); sprintf(buf, "{gYour Artifact receives {w%d {gexperience points.{x\n\r", arti_exp); stc(buf, gch); obj->weapon_currentxp += arti_exp; } if (obj->weapon_currentxp >= arti_needed ) { obj->weapon_level++; obj->value[0] += 10; obj->value[1] += 10; obj->value[2] += 10; obj->value[3] += 10; send_to_char("{wYour {rArtifact {whas gained a Level{x\n\r", gch); obj->weapon_currentxp -= arti_needed; obj->weapon_points++; } } } } handler.c char *extra_bit_name (int extra_flags) if (extra_flags & ITEM_RELIC) strcat (buf, " relic"); if (extra_flags & ITEM_ARTIFACT) strcat (buf, " artifact"); merc.h /* * Extra flags. * Used in #OBJECTS. */ #define ITEM_RELIC (aa) #define ITEM_ARTIFACT (bb) tables.c const struct flag_type extra_flags[] = { {"relic", ITEM_RELIC, TRUE}, {"artifact", ITEM_ARTIFACT, TRUE},