/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Thanks to abaddon for proof-reading our comm.c and pointing out bugs. * * Any remaining bugs are, of course, our work, not his. :) * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ /*************************************************************************** * ROM 2.4 is copyright 1993-1996 Russ Taylor * * ROM has been brought to you by the ROM consortium * * Russ Taylor (rtaylor@pacinfo.com) * * Gabrielle Taylor (gtaylor@pacinfo.com) * * Brian Moore (rom@rom.efn.org) * * By using this code, you have agreed to follow the terms of the * * ROM license, in the file Tartarus/doc/rom.license * ***************************************************************************/ /*************************************************************************** * Tartarus code is copyright (C) 1997-1998 by Daniel Graham * * In using this code you agree to comply with the Tartarus license * * found in the file /Tartarus/doc/tartarus.doc * ***************************************************************************/ #include "include.h" void do_redeeminfo ( CHAR_DATA *ch, char *argument ) { int looper; bool found = FALSE; if (argument[0] == '\0') return send_to_char("Redeeminfo what?\n\r",ch); if (ch->in_room->vnum != ROOM_VNUM_ALTAR) return send_to_char("You must be at the altar in Midgaard to access the Quest Store.\n\r",ch); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (!str_cmp(argument,quest_reward_table[looper].keyword)) { int raceClassLooper, raceCount = 0, classCount = 0; char buf[MSL], buf2[MSL]; sprintf(buf,"============================================================================\nKEYWORD: {B%-20s{xPRICE: {R%d{x quest credits\n============================================================================\n", quest_reward_table[looper].keyword, quest_reward_table[looper].price ); strcat(buf,"CLASSES: \n"); for (raceClassLooper = 0; raceClassLooper < MAX_CLASS; raceClassLooper++) { if (raceClassLooper != MAX_CLASS - 2) { sprintf(buf2, "%12s [%c] ", capitalize(class_table[raceClassLooper].name), quest_reward_table[looper].acc_class[raceClassLooper] ? 'X' : ' '); classCount++; strcat(buf,buf2); if (classCount % 4 == 0) strcat(buf,"\n"); } } strcat(buf,"\nRACES: \n"); for (raceClassLooper = 1; raceClassLooper < MAX_PC_RACE; raceClassLooper++) { if (str_cmp(race_table[raceClassLooper].name,"ruugrah") && str_cmp(race_table[raceClassLooper].name,"vuuhu") && str_cmp(race_table[raceClassLooper].name,"malefisti") && str_cmp(race_table[raceClassLooper].name,"changeling") && str_cmp(race_table[raceClassLooper].name,"angel")) { sprintf(buf2, "%12s [%c] ", capitalize(race_table[raceClassLooper].name), quest_reward_table[looper].acc_race[raceClassLooper] ? 'X' : ' '); raceCount++; strcat(buf,buf2); if (raceCount % 4 == 0) strcat(buf,"\n"); } } strcat(buf,"\nALIGNS: "); if (quest_reward_table[looper].acc_align == ALIGN_G) strcat(buf,"good"); else if (quest_reward_table[looper].acc_align == ALIGN_N) strcat(buf,"neutral"); else if (quest_reward_table[looper].acc_align == ALIGN_E) strcat(buf,"evil"); else if (quest_reward_table[looper].acc_align == ALIGN_NE) strcat(buf,"neutral evil"); else if (quest_reward_table[looper].acc_align == ALIGN_GN) strcat(buf,"good neutral"); else if (quest_reward_table[looper].acc_align == ALIGN_GE) strcat(buf,"good evil"); else strcat(buf, "any"); strcat(buf,"\nETHOS: "); if (quest_reward_table[looper].acc_ethos == ETHOS_L) strcat(buf,"lawful"); else if (quest_reward_table[looper].acc_ethos == ETHOS_N) strcat(buf,"neutral"); else if (quest_reward_table[looper].acc_align == ETHOS_C) strcat(buf,"chaotic"); else if (quest_reward_table[looper].acc_ethos == ETHOS_LN) strcat(buf,"lawful neutral"); else if (quest_reward_table[looper].acc_ethos == ETHOS_NC) strcat(buf,"neutral chaotic"); else if (quest_reward_table[looper].acc_align == ETHOS_LC) strcat(buf,"lawful chaotic"); else strcat(buf,"any"); if (quest_reward_table[looper].set != 0) { sprintf(buf2,"\n\n** This item is an integral piece of the %s set. **",set_type_table[quest_reward_table[looper].set].setName); strcat(buf,buf2); } sprintf(buf2,"\n\nREWARD DESCRIPTION:\n %s\n\r", quest_reward_table[looper].description ); strcat(buf,buf2); send_to_char(buf,ch); found = TRUE; } } if (!found) return send_to_char("That is not a valid redeemable reward.\n\r",ch); return; } void do_redeem( CHAR_DATA *ch, char *argument ) { if (argument[0] == '\0') return send_to_char("Redeem what?\n\r",ch); char buf[MSL], buf2[MSL]; int looper; int armor = 0, weapon = 0, boost = 0, misc = 0; bool found = FALSE; if (ch->in_room->vnum != ROOM_VNUM_ALTAR) return send_to_char("You must be at the altar in Midgaard to access the Quest Store.\n\r",ch); if (!str_cmp(argument,"list")) { send_to_char(" {R======================================{x\n",ch); send_to_char(" {R={x KBK Quest Store {R={x\n",ch); send_to_char(" {R={x Full Item List {R={x\n",ch); send_to_char(" {R======================================{x\n",ch); sprintf(buf2," *ARMOR*\n--------------------------------------------------------------------------------\n"); send_to_char(buf2,ch); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (quest_reward_table[looper].type == REWARD_ARMOR) { char name[MSL]; sprintf(name, "\"%s\"", quest_reward_table[looper].keyword); int price = quest_reward_table[looper].price, priceLoop = 0, nextPriceLoop = 0, digits = 0; for (priceLoop = 1; priceLoop <= 1000000; priceLoop = nextPriceLoop) { nextPriceLoop = priceLoop * 10; if (price >= priceLoop && price < priceLoop * 10) digits++; } if (armor == 1) { sprintf(buf,"%-24s %s%5d credits\n", name, digits == 7 ? " " : digits > 5 ? " " : digits > 4 ? " " : digits > 3 ? " " : digits > 2 ? " " : digits > 1 ? " " : "", quest_reward_table[looper].price ); armor = 0; } else { sprintf(buf,"%-24s %s%5d credits ", name, digits == 7 ? " " : digits > 5 ? " " : digits > 4 ? " " : digits > 3 ? " " : digits > 2 ? " " : digits > 1 ? " " : "", quest_reward_table[looper].price ); armor++; } send_to_char(buf,ch); } } sprintf(buf2,"\n\n *WEAPONS*\n--------------------------------------------------------------------------------\n"); send_to_char(buf2,ch); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (quest_reward_table[looper].type == REWARD_WEAPON) { char name[MSL]; sprintf(name, "\"%s\"", quest_reward_table[looper].keyword); int price = quest_reward_table[looper].price, priceLoop = 0, nextPriceLoop = 0, digits = 0; for (priceLoop = 1; priceLoop <= 1000000; priceLoop = nextPriceLoop) { nextPriceLoop = priceLoop * 10; if (price >= priceLoop && price < priceLoop * 10) digits++; } if (weapon == 1) { sprintf(buf,"%-24s %s%5d credits\n", name, digits == 7 ? " " : digits > 5 ? " " : digits > 4 ? " " : digits > 3 ? " " : digits > 2 ? " " : digits > 1 ? " " : "", quest_reward_table[looper].price ); weapon = 0; } else { sprintf(buf,"%-24s %s%5d credits ", name, digits == 7 ? " " : digits > 5 ? " " : digits > 4 ? " " : digits > 3 ? " " : digits > 2 ? " " : digits > 1 ? " " : "", quest_reward_table[looper].price ); weapon++; } send_to_char(buf,ch); } } sprintf(buf2,"\n\n *BOOSTS*\n--------------------------------------------------------------------------------\n"); send_to_char(buf2,ch); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (quest_reward_table[looper].type == REWARD_BOOST) { char name[MSL]; sprintf(name, "\"%s\"", quest_reward_table[looper].keyword); int price = quest_reward_table[looper].price, priceLoop = 0, nextPriceLoop = 0, digits = 0; for (priceLoop = 1; priceLoop <= 1000000; priceLoop = nextPriceLoop) { nextPriceLoop = priceLoop * 10; if (price >= priceLoop && price < priceLoop * 10) digits++; } if (boost == 1) { sprintf(buf,"%-24s %s%5d credits\n", name, digits == 7 ? " " : digits > 5 ? " " : digits > 4 ? " " : digits > 3 ? " " : digits > 2 ? " " : digits > 1 ? " " : "", quest_reward_table[looper].price ); boost = 0; } else { sprintf(buf,"%-24s %s%5d credits ", name, digits == 7 ? " " : digits > 5 ? " " : digits > 4 ? " " : digits > 3 ? " " : digits > 2 ? " " : digits > 1 ? " " : "", quest_reward_table[looper].price ); boost++; } send_to_char(buf,ch); } } sprintf(buf2,"\n\n *MISCELLANEOUS* \n--------------------------------------------------------------------------------\n"); send_to_char(buf2,ch); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (quest_reward_table[looper].type == REWARD_MISCELLANEOUS) { char name[MSL]; sprintf(name, "\"%s\"", quest_reward_table[looper].keyword); int price = quest_reward_table[looper].price, priceLoop = 0, nextPriceLoop = 0, digits = 0; for (priceLoop = 1; priceLoop <= 1000000; priceLoop = nextPriceLoop) { nextPriceLoop = priceLoop * 10; if (price >= priceLoop && price < priceLoop * 10) digits++; } if (misc == 1) { sprintf(buf,"%-24s %s%5d credits\n", name, digits == 7 ? " " : digits > 5 ? " " : digits > 4 ? " " : digits > 3 ? " " : digits > 2 ? " " : digits > 1 ? " " : "", quest_reward_table[looper].price ); misc = 0; } else { sprintf(buf,"%-24s %s%5d credits ", name, digits == 7 ? " " : digits > 5 ? " " : digits > 4 ? " " : digits > 3 ? " " : digits > 2 ? " " : digits > 1 ? " " : "", quest_reward_table[looper].price ); misc++; } send_to_char(buf,ch); } } send_to_char("\n\nSee 'redeeminfo <keyword>' for more information on an item.\n\r",ch); return; } if (!str_cmp(argument,"armorlist")) { send_to_char(" {R======================================{x\n",ch); send_to_char(" {R={x KBK Quest Store {R={x\n",ch); send_to_char(" {R======================================{x\n",ch); sprintf(buf2," *ARMOR*\n--------------------------------------------------------------------------------\n"); send_to_char(buf2,ch); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (quest_reward_table[looper].type == REWARD_ARMOR) { char name[MSL]; sprintf(name, "\"%s\"", quest_reward_table[looper].keyword); int price = quest_reward_table[looper].price, priceLoop = 0, nextPriceLoop = 0, digits = 0; for (priceLoop = 1; priceLoop <= 1000000; priceLoop = nextPriceLoop) { nextPriceLoop = priceLoop * 10; if (price >= priceLoop && price < priceLoop * 10) digits++; } if (armor == 1) { sprintf(buf,"%-24s %s%5d credits\n", name, digits == 7 ? " " : digits > 5 ? " " : digits > 4 ? " " : digits > 3 ? " " : digits > 2 ? " " : digits > 1 ? " " : "", quest_reward_table[looper].price ); armor = 0; } else { sprintf(buf,"%-24s %s%5d credits ", name, digits == 7 ? " " : digits > 5 ? " " : digits > 4 ? " " : digits > 3 ? " " : digits > 2 ? " " : digits > 1 ? " " : "", quest_reward_table[looper].price ); armor++; } send_to_char(buf,ch); } } send_to_char("\n\nSee 'redeeminfo <keyword>' for more information on an item.\n\r",ch); return; } if (!str_cmp(argument,"boostslist")) { send_to_char(" {R======================================{x\n",ch); send_to_char(" {R={x KBK Quest Store {R={x\n",ch); send_to_char(" {R======================================{x\n",ch); sprintf(buf2," *BOOSTS*\n--------------------------------------------------------------------------------\n"); send_to_char(buf2,ch); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (quest_reward_table[looper].type == REWARD_BOOST) { char name[MSL]; sprintf(name, "\"%s\"", quest_reward_table[looper].keyword); int price = quest_reward_table[looper].price, priceLoop = 0, nextPriceLoop = 0, digits = 0; for (priceLoop = 1; priceLoop <= 1000000; priceLoop = nextPriceLoop) { nextPriceLoop = priceLoop * 10; if (price >= priceLoop && price < priceLoop * 10) digits++; } if (boost == 1) { sprintf(buf,"%-24s %s%5d credits\n", name, digits == 7 ? " " : digits > 5 ? " " : digits > 4 ? " " : digits > 3 ? " " : digits > 2 ? " " : digits > 1 ? " " : "", quest_reward_table[looper].price ); boost = 0; } else { sprintf(buf,"%-24s %s%5d credits ", name, digits == 7 ? " " : digits > 5 ? " " : digits > 4 ? " " : digits > 3 ? " " : digits > 2 ? " " : digits > 1 ? " " : "", quest_reward_table[looper].price ); misc++; } send_to_char(buf,ch); } } send_to_char("\n\nSee 'redeeminfo <keyword>' for more information on an item.\n\r",ch); return; } if (!str_cmp(argument,"weaponslist")) { send_to_char(" {R======================================{x\n",ch); send_to_char(" {R={x KBK Quest Store {R={x\n",ch); send_to_char(" {R======================================{x\n",ch); sprintf(buf2," *WEAPONS*\n--------------------------------------------------------------------------------\n"); send_to_char(buf2,ch); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (quest_reward_table[looper].type == REWARD_WEAPON) { char name[MSL]; sprintf(name, "\"%s\"", quest_reward_table[looper].keyword); int price = quest_reward_table[looper].price, priceLoop = 0, nextPriceLoop = 0, digits = 0; for (priceLoop = 1; priceLoop <= 1000000; priceLoop = nextPriceLoop) { nextPriceLoop = priceLoop * 10; if (price >= priceLoop && price < priceLoop * 10) digits++; } if (weapon == 1) { sprintf(buf,"%-24s %s%5d credits\n", name, digits == 7 ? " " : digits > 5 ? " " : digits > 4 ? " " : digits > 3 ? " " : digits > 2 ? " " : digits > 1 ? " " : "", quest_reward_table[looper].price ); weapon = 0; } else { sprintf(buf,"%-24s %s%5d credits ", name, digits == 7 ? " " : digits > 5 ? " " : digits > 4 ? " " : digits > 3 ? " " : digits > 2 ? " " : digits > 1 ? " " : "", quest_reward_table[looper].price ); weapon++; } send_to_char(buf,ch); } } send_to_char("\n\nSee 'redeeminfo <keyword>' for more information on an item.\n\r",ch); return; } if (!str_cmp(argument,"misclist") || !str_cmp(argument,"miscellaneous")) { send_to_char(" {R======================================{x\n",ch); send_to_char(" {R={x KBK Quest Store {R={x\n",ch); send_to_char(" {R======================================{x\n",ch); sprintf(buf2," *MISCELLANEOUS* \n--------------------------------------------------------------------------------\n"); send_to_char(buf2,ch); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (quest_reward_table[looper].type == REWARD_MISCELLANEOUS) { char name[MSL]; sprintf(name, "\"%s\"", quest_reward_table[looper].keyword); int price = quest_reward_table[looper].price, priceLoop = 0, nextPriceLoop = 0, digits = 0; for (priceLoop = 1; priceLoop <= 1000000; priceLoop = nextPriceLoop) { nextPriceLoop = priceLoop * 10; if (price >= priceLoop && price < priceLoop * 10) digits++; } if (misc == 1) { sprintf(buf,"%-24s %s%5d credits\n", name, digits == 7 ? " " : digits > 5 ? " " : digits > 4 ? " " : digits > 3 ? " " : digits > 2 ? " " : digits > 1 ? " " : "", quest_reward_table[looper].price ); misc = 0; } else { sprintf(buf,"%-24s %s%5d credits ", name, digits == 7 ? " " : digits > 5 ? " " : digits > 4 ? " " : digits > 3 ? " " : digits > 2 ? " " : digits > 1 ? " " : "", quest_reward_table[looper].price ); misc++; } send_to_char(buf,ch); } } send_to_char("\n\nSee 'redeeminfo <keyword>' for more information on an item.\n\r",ch); return; } for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (!str_cmp(argument,quest_reward_table[looper].keyword)) { if (ch->quest_credits >= quest_reward_table[looper].price) { if (!quest_reward_table[looper].acc_race[ch->race] && !IS_IMMORTAL(ch)) return send_to_char("Your race cannot buy this.\n\r",ch); if (!quest_reward_table[looper].acc_class[ch->class] && !IS_IMMORTAL(ch)) return send_to_char("Your class cannot buy this.\n\r",ch); int align, ethos; if (ch->alignment < 0) align = ALIGN_E; else if (ch->alignment == 0) align = ALIGN_N; else align = ALIGN_G; if (!(quest_reward_table[looper].acc_align & align) && !IS_IMMORTAL(ch)) { switch (align) { case ALIGN_E: return send_to_char("Those of evil hearts cannot buy this.",ch); case ALIGN_G: return send_to_char("Those of good hearts cannot buy this.",ch); case ALIGN_N: return send_to_char("Those of grey hearts cannot buy this.",ch); } } if (ch->pcdata->ethos < 0) ethos = ETHOS_C; else if (ch->pcdata->ethos == 0) ethos = ETHOS_N; else ethos = ETHOS_L; if (!(quest_reward_table[looper].acc_ethos & ethos) && !IS_IMMORTAL(ch)) { switch (ethos) { case ETHOS_C: return send_to_char("Those of chaotic hearts cannot buy this.",ch); case ETHOS_N: return send_to_char("Those of neutral hearts cannot buy this.",ch); case ETHOS_L: return send_to_char("Those of lawful hearts cannot buy this.",ch); } } ch->quest_credits -= quest_reward_table[looper].price; act("You cast your quest credits into the wind and pray for divine assistance!",ch,0,0,TO_CHAR); act("$n casts quest credits into the wind and prays for divine assistance!",ch,0,0,TO_ROOM); char log_buf[MSL]; sprintf(log_buf,"%s has redeemed: %s.",ch->name, argument); log_string(log_buf); (*quest_reward_table[looper].function) (ch); found = TRUE; } else return send_to_char("You do not have enough quest credits to purchase that.\n\r",ch); } } if (!found) return send_to_char("That is not a valid redeemable reward.\n\r",ch); return; } bool check_already_has( CHAR_DATA *ch, int vnum, char *quest_buy_keyword ) { OBJ_DATA *dup, *dup_next; int looper; for (dup = ch->carrying; dup != NULL; dup = dup_next) { dup_next = dup->next; if (dup->pIndexData->vnum == vnum) { if (dup->owner != NULL) { if (!str_cmp(dup->owner,ch->original_name)) { act("You can only carry one of those.",ch,0,0,TO_CHAR); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (!str_cmp(quest_reward_table[looper].keyword,quest_buy_keyword)) { act("You are refunded your quest credits.",ch,0,0,TO_CHAR); ch->quest_credits += quest_reward_table[looper].price; return TRUE; } } } } } } return FALSE; } void quest_reward_warrior_boots( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_WARRIOR_BOOTS,str_dup("warrior set boots"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_WARRIOR_BOOTS),55); act("A pair of steel boots flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A pair of steel boots flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_warrior_gauntlets( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_WARRIOR_GAUNTLETS,str_dup("warrior set gauntlets"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_WARRIOR_GAUNTLETS),55); act("A pair of mithril-bound gauntlets flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A pair of mithril-bound gauntlets flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_warrior_plate( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_WARRIOR_PLATE,str_dup("warrior set plate"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_WARRIOR_PLATE),55); act("A steel battle chest flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A steel battle chest flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_warrior_weapon( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_WARRIOR_WEAPON,str_dup("warrior set weapon"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_WARRIOR_WEAPON),55); act("A weapon flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A weapon flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_channeler_helm( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_CHANNELER_HELM,str_dup("channeler set helm"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_CHANNELER_HELM),55); act("A bejewelled crest flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A bejewelled crest flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_channeler_ankh( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_CHANNELER_ANKH,str_dup("channeler set ankh"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_CHANNELER_ANKH),55); act("An ankh flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("An ankh crest flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_channeler_robe( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_CHANNELER_ROBE,str_dup("channeler set robe"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_CHANNELER_ROBE),55); act("An ethereal robe flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("An ethereal robe flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_channeler_neck( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_CHANNELER_NECK,str_dup("channeler set neck"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_CHANNELER_NECK),55); act("A necklace flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A necklace flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_thief_boots( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_THIEF_BOOTS,str_dup("thief set boots"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_THIEF_BOOTS),55); act("A pair of boots flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A pair of boots flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_thief_robe( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_THIEF_ROBE,str_dup("thief set robe"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_THIEF_ROBE),55); act("A shroud flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A shroud flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_thief_dagger( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_THIEF_DAGGER,str_dup("thief set weapon"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_THIEF_DAGGER),55); act("A skewer flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A skewer flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_thief_belt( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_THIEF_BELT,str_dup("thief set belt"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_THIEF_BELT),55); act("A sash flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A sash flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_healer_ring( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_HEALER_RING,str_dup("healer set ring"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_HEALER_RING),55); act("A ring flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A ring flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_healer_sleeves( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_HEALER_SLEEVES,str_dup("healer set sleeves"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_HEALER_SLEEVES),55); act("A pair of sleeves flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A pair of sleeves flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_healer_bracelet( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_HEALER_BRACELET,str_dup("healer set bracelet"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_HEALER_BRACELET),55); act("A bracelet flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A bracelet flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_healer_statue( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_HEALER_STATUE,str_dup("healer set statue"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_HEALER_STATUE),55); act("A statuette flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A statuette flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_elementalist_helm( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_ELEMENTALIST_HELM,str_dup("elementalist set helm"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_ELEMENTALIST_HELM),55); act("A halo of frozen flame flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A halo of frozen flame flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_elementalist_neck( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_ELEMENTALIST_NECK,str_dup("elementalist set neck"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_ELEMENTALIST_NECK),55); act("A cloak of water flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A cloak of water flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_elementalist_belt( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_ELEMENTALIST_BELT,str_dup("elementalist set belt"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_ELEMENTALIST_BELT),55); act("A belt of electricity flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A belt of electricity flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_elementalist_flame( CHAR_DATA *ch ) { if (check_already_has(ch,OBJ_VNUM_QUEST_STORE_ELEMENTALIST_FLAME,str_dup("elementalist set ankh"))) return; OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_ELEMENTALIST_FLAME),55); act("A pulsating flame flashes into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A pulsating flame flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_hp_boost( CHAR_DATA *ch ) { act("As your prayers are answered, you feel infused with newfound vigor.",ch,0,0,TO_CHAR); act("$n appears infused with a newfound vigor.",ch,0,0,TO_ROOM); ch->max_hit += 10; return; } void quest_reward_mana_boost( CHAR_DATA *ch ) { act("As your prayers are answered, your mind feels stronger and sharper.",ch,0,0,TO_CHAR); ch->max_mana += 30; return; } void quest_reward_move_boost( CHAR_DATA *ch ) { act("As your prayers are answered, your legs swell slightly, the muscles growing larger.",ch,0,0,TO_CHAR); ch->max_move += 30; return; } void quest_reward_attack_modifier( CHAR_DATA *ch ) { act("As your prayers are answered, your arms feel infused with great agility.",ch,0,0,TO_CHAR); ch->numAttacks += 1; return; } void quest_reward_damage_reduction( CHAR_DATA *ch ) { act("As your prayers are answered, you feel your skin and bones become toughened.",ch,0,0,TO_CHAR); ch->dam_mod -= 1; return; } void quest_reward_damage_enhancer( CHAR_DATA *ch ) { act("As your prayers are answered, your body and mind swell with increased strength.",ch,0,0,TO_CHAR); ch->enhancedDamMod += 1; return; } void quest_reward_remove_vuln_fire( CHAR_DATA *ch ) { if (!IS_SET(ch->vuln_flags,VULN_FIRE)) { int looper; act("You are already not vulnerable to fire.",ch,0,0,TO_CHAR); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (!str_cmp(quest_reward_table[looper].keyword,"remove_vuln_fire")) { act("You are refunded your quest credits.",ch,0,0,TO_CHAR); ch->quest_credits += quest_reward_table[looper].price; return; } } } act("As your prayers are answered, your body feels less vulnerable to fire.",ch,0,0,TO_CHAR); REMOVE_BIT(ch->vuln_flags,VULN_FIRE); return; } void quest_reward_remove_vuln_cold( CHAR_DATA *ch ) { if (!IS_SET(ch->vuln_flags,VULN_COLD)) { int looper; act("You are already not vulnerable to cold.",ch,0,0,TO_CHAR); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (!str_cmp(quest_reward_table[looper].keyword,"remove_vuln_cold")) { act("You are refunded your quest credits.",ch,0,0,TO_CHAR); ch->quest_credits += quest_reward_table[looper].price; return; } } } act("As your prayers are answered, your body feels less vulnerable to cold.",ch,0,0,TO_CHAR); REMOVE_BIT(ch->vuln_flags,VULN_COLD); return; } void quest_reward_remove_vuln_lightning( CHAR_DATA *ch ) { if (!IS_SET(ch->vuln_flags,VULN_COLD)) { int looper; act("You are already not vulnerable to lightning.",ch,0,0,TO_CHAR); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (!str_cmp(quest_reward_table[looper].keyword,"remove_vuln_lightning")) { act("You are refunded your quest credits.",ch,0,0,TO_CHAR); ch->quest_credits += quest_reward_table[looper].price; return; } } } act("As your prayers are answered, your body feels less vulnerable to lightning.",ch,0,0,TO_CHAR); REMOVE_BIT(ch->vuln_flags,VULN_LIGHTNING); return; } void quest_reward_remove_vuln_holy( CHAR_DATA *ch ) { if (!IS_SET(ch->vuln_flags,VULN_HOLY)) { int looper; act("You are already not vulnerable to holy attacks.",ch,0,0,TO_CHAR); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (!str_cmp(quest_reward_table[looper].keyword,"remove_vuln_holy")) { act("You are refunded your quest credits.",ch,0,0,TO_CHAR); ch->quest_credits += quest_reward_table[looper].price; return; } } } act("As your prayers are answered, your body feels less vulnerable to holy attacks.",ch,0,0,TO_CHAR); REMOVE_BIT(ch->vuln_flags,VULN_HOLY); return; } void quest_reward_remove_vuln_negative( CHAR_DATA *ch ) { if (!IS_SET(ch->vuln_flags,VULN_NEGATIVE)) { int looper; act("You are already not vulnerable to negative attacks.",ch,0,0,TO_CHAR); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (!str_cmp(quest_reward_table[looper].keyword,"remove_vuln_negative")) { act("You are refunded your quest credits.",ch,0,0,TO_CHAR); ch->quest_credits += quest_reward_table[looper].price; return; } } } act("As your prayers are answered, your body feels less vulnerable to negative attacks.",ch,0,0,TO_CHAR); REMOVE_BIT(ch->vuln_flags,VULN_NEGATIVE); return; } void quest_reward_remove_vuln_mental( CHAR_DATA *ch ) { if (!IS_SET(ch->vuln_flags,VULN_MENTAL)) { int looper; act("You are already not vulnerable to lightning.",ch,0,0,TO_CHAR); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (!str_cmp(quest_reward_table[looper].keyword,"remove_vuln_mental")) { act("You are refunded your quest credits.",ch,0,0,TO_CHAR); ch->quest_credits += quest_reward_table[looper].price; return; } } } act("As your prayers are answered, your body feels less vulnerable to mental attacks.",ch,0,0,TO_CHAR); REMOVE_BIT(ch->vuln_flags,VULN_MENTAL); return; } void quest_reward_remove_vuln_bash( CHAR_DATA *ch ) { if (!IS_SET(ch->vuln_flags,VULN_BASH)) { int looper; act("You are already not vulnerable to bashing.",ch,0,0,TO_CHAR); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (!str_cmp(quest_reward_table[looper].keyword,"remove_vuln_bash")) { act("You are refunded your quest credits.",ch,0,0,TO_CHAR); ch->quest_credits += quest_reward_table[looper].price; return; } } } act("As your prayers are answered, your body feels less vulnerable to bashing attacks.",ch,0,0,TO_CHAR); REMOVE_BIT(ch->vuln_flags,VULN_BASH); return; } void quest_reward_remove_vuln_drowning( CHAR_DATA *ch ) { if (!IS_SET(ch->vuln_flags,VULN_DROWNING)) { int looper; act("You are already not vulnerable to drowning.",ch,0,0,TO_CHAR); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (!str_cmp(quest_reward_table[looper].keyword,"remove_vuln_drowning")) { act("You are refunded your quest credits.",ch,0,0,TO_CHAR); ch->quest_credits += quest_reward_table[looper].price; return; } } } act("As your prayers are answered, your body feels less vulnerable to drowning.",ch,0,0,TO_CHAR); REMOVE_BIT(ch->vuln_flags,VULN_DROWNING); return; } void quest_reward_remove_vuln_iron( CHAR_DATA *ch ) { if (!IS_SET(ch->vuln_flags,VULN_IRON)) { int looper; act("You are already not vulnerable to iron.",ch,0,0,TO_CHAR); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (!str_cmp(quest_reward_table[looper].keyword,"remove_vuln_iron")) { act("You are refunded your quest credits.",ch,0,0,TO_CHAR); ch->quest_credits += quest_reward_table[looper].price; return; } } } act("As your prayers are answered, your body feels less vulnerable to iron-based attacks.",ch,0,0,TO_CHAR); REMOVE_BIT(ch->vuln_flags,VULN_IRON); return; } void quest_reward_remove_vuln_light( CHAR_DATA *ch ) { if (!IS_SET(ch->vuln_flags,VULN_LIGHT)) { int looper; act("You are already not vulnerable to light.",ch,0,0,TO_CHAR); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (!str_cmp(quest_reward_table[looper].keyword,"remove_vuln_light")) { act("You are refunded your quest credits.",ch,0,0,TO_CHAR); ch->quest_credits += quest_reward_table[looper].price; return; } } } act("As your prayers are answered, your body feels less vulnerable to light.",ch,0,0,TO_CHAR); REMOVE_BIT(ch->vuln_flags,VULN_LIGHT); return; } void quest_reward_add_resist_slash( CHAR_DATA *ch ) { if (IS_SET(ch->res_flags,RES_SLASH)) { int looper; act("You are already resistant to slashing attacks.",ch,0,0,TO_CHAR); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (!str_cmp(quest_reward_table[looper].keyword,"add_resist_slash")) { act("You are refunded your quest credits.",ch,0,0,TO_CHAR); ch->quest_credits += quest_reward_table[looper].price; return; } } } act("As your prayers are answered, your body feels resistant to slashing attacks.",ch,0,0,TO_CHAR); SET_BIT(ch->res_flags,RES_SLASH); return; } void quest_reward_add_resist_pierce( CHAR_DATA *ch ) { if (IS_SET(ch->res_flags,RES_PIERCE)) { int looper; act("You are already resistant to piercing attacks.",ch,0,0,TO_CHAR); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (!str_cmp(quest_reward_table[looper].keyword,"add_resist_pierce")) { act("You are refunded your quest credits.",ch,0,0,TO_CHAR); ch->quest_credits += quest_reward_table[looper].price; return; } } } act("As your prayers are answered, your body feels resistant to piercing attacks.",ch,0,0,TO_CHAR); SET_BIT(ch->res_flags,RES_PIERCE); return; } void quest_reward_add_resist_bash( CHAR_DATA *ch ) { if (IS_SET(ch->res_flags,RES_BASH)) { int looper; act("You are already resistant to bashing attacks.",ch,0,0,TO_CHAR); for (looper = 0; looper < MAX_QUEST_REWARDS; looper++) { if (!str_cmp(quest_reward_table[looper].keyword,"add_resist_bash")) { act("You are refunded your quest credits.",ch,0,0,TO_CHAR); ch->quest_credits += quest_reward_table[looper].price; return; } } } act("As your prayers are answered, your body feels resistant to bashing attacks.",ch,0,0,TO_CHAR); SET_BIT(ch->res_flags,RES_BASH); return; } void quest_reward_pill_recall( CHAR_DATA *ch ) { OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_PILL_RECALL),55); act("A pill into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A pill flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_pill_antidote( CHAR_DATA *ch ) { OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_PILL_CURE_POISON),55); act("A pill into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A pill flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_pill_purifier( CHAR_DATA *ch ) { OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_PILL_CURE_DISEASE),55); act("A pill into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A pill flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_pill_holy_water( CHAR_DATA *ch ) { OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_PILL_REMOVE_CURSE),55); act("A pill into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A pill flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_pill_teleport( CHAR_DATA *ch ) { OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_PILL_TELEPORT),55); act("A pill into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A pill flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_pill_flying( CHAR_DATA *ch ) { OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_PILL_FLYING),55); act("A pill into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A pill flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void quest_reward_pill_pass_door( CHAR_DATA *ch ) { OBJ_DATA *obj = create_object(get_obj_index(OBJ_VNUM_QUEST_STORE_PILL_PASS_DOOR),55); act("A pill into your hands in a bolt of energy!",ch,0,0,TO_CHAR); act("A pill flashes into $n's hands in a bolt of energy!",ch,0,0,TO_ROOM); obj->owner = str_dup(ch->original_name); obj_to_char(obj,ch); return; } void check_set_item_warrior( CHAR_DATA *ch, int currNum, bool increase) { if (increase) { if (currNum == 2) { ch->max_hit += 200; act("{yYou feel healthier.{x",ch,0,0,TO_CHAR); } else if (currNum == 3) { ch->pcdata->learned[skill_lookup("critical strike")] = 100; act("{yYou feel a rush of insight into Critical Strike!{x",ch,0,0,TO_CHAR); } else if (currNum == 4) { ch->numAttacks++; act("{yYour arms increase in speed.{x",ch,0,0,TO_CHAR); } } else { if (currNum == 3) { ch->numAttacks--; act("{yYour arms slow down.{x",ch,0,0,TO_CHAR); } else if (currNum == 2) { ch->pcdata->learned[skill_lookup("critical strike")] = -2; act("{yYou lose your ability to Critical Strike!{x",ch,0,0,TO_CHAR); } else if (currNum == 1) { ch->max_hit -= 200; act("{yYou feel more vulnerable.{x",ch,0,0,TO_CHAR); } } return; } void check_set_item_channeler( CHAR_DATA *ch, int currNum, bool increase) { if (increase) { if (currNum == 2) { ch->pcdata->learned[skill_lookup("mana shield")] = 100; act("{yYou feel a rush of insight into Mana Shield!{x",ch,0,0,TO_CHAR); } else if (currNum == 3) { act("{yYou feel more mentally stable and healthier.{x",ch,0,0,TO_CHAR); ch->max_mana += 200; ch->max_hit += 100; } else if (currNum == 4) { act("{yYou feel a rush of insight into Doublecast!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("doublecast")] = 100; } } else { if (currNum == 3) { ch->pcdata->learned[skill_lookup("doublecast")] = -2; act("{yYou lose your Doublecast ability!{x",ch,0,0,TO_CHAR); } else if (currNum == 2) { act("{yYour mental and physical fortitude leaves you.{x",ch,0,0,TO_CHAR); ch->max_mana -= 200; ch->max_hit -= 100; } else if (currNum == 1) { ch->pcdata->learned[skill_lookup("mana shield")] = -2; act("{yYou lose your Mana Shield ability!{x",ch,0,0,TO_CHAR); } } return; } void check_set_item_healer( CHAR_DATA *ch, int currNum, bool increase) { if (increase) { if (currNum == 2) { act("{yYour god grants you divine favor. An iron resolve grips you as your mind grows stronger.{x",ch,0,0,TO_CHAR); ch->max_mana += 450; act("{yYou feel a rush of insight into Coalesce Resistance!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("coalesce resistance")] = 100; } else if (currNum == 3) { act("{yYou feel a rush of insight into Group Recall!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("group recall")] = 100; act("{yYou feel a rush of insight into Group Sanctuary!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("group sanctuary")] = 100; act("{yYou feel a rush of insight into Group Gate!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("group gate")] = 100; act("{yYou feel a rush of insight into Bulwark of Blades!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("bulwark of blades")] = 100; } else if (currNum == 4) { act("{yYou feel a rush of insight into Blade Mastery!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("blade mastery")] = 100; } } else { if (currNum == 3) { ch->pcdata->learned[skill_lookup("blade mastery")] = -2; act("{yYou lose your Blade Mastery ability!{x",ch,0,0,TO_CHAR); } else if (currNum == 2) { ch->pcdata->learned[skill_lookup("bulwark of blades")] = -2; act("{yYou lose your Bulwark of Blades ability!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("group recall")] = -2; act("{yYou lose your Group Recall ability!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("group gate")] = -2; act("{yYou lose your Group Gate ability!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("group sanctuary")] = -2; act("{yYou lose your Group Sanctuary ability!{x",ch,0,0,TO_CHAR); } else if (currNum == 1) { act("{yYour god's holy favor fades away.{x",ch,0,0,TO_CHAR); ch->max_mana -= 450; act("{yYou lose your Coalesce Resistance ability!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("coalesce resistance")] = -2; } } return; } void check_set_item_thief( CHAR_DATA *ch, int currNum, bool increase) { if (increase) { if (currNum == 2) { ch->max_hit += 150; act("{yYou feel a rush of vigor through your veins.{x",ch,0,0,TO_CHAR); } else if (currNum == 3) { act("{yYou feel a rush of insight into Improved Blackjack!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("improved blackjack")] = 100; } else if (currNum == 4) { act("{yYou feel a rush of insight into Disguise!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("disguise")] = 100; } } else { if (currNum == 3) { ch->pcdata->learned[skill_lookup("disguise")] = -2; act("{yYou lose your Disguise ability!{x",ch,0,0,TO_CHAR); } else if (currNum == 2) { ch->pcdata->learned[skill_lookup("improved blackjack")] = -2; act("{yYou lose your Improved Blackjack ability!{x",ch,0,0,TO_CHAR); } else if (currNum == 1) { ch->max_hit -= 150; act("{yThe vigor coursing through your veins fades away.{x",ch,0,0,TO_CHAR); } } return; } void check_set_item_elementalist( CHAR_DATA *ch, int currNum, bool increase) { if (increase) { if (currNum == 2) { ch->max_hit += 150; ch->max_mana += 300; act("{yYou feel empowered by the elements.{x",ch,0,0,TO_CHAR); } else if (currNum == 3) { act("{yYou feel a rush of insight into Bastion of Elements!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("bastion of elements")] = 100; act("{yYou feel a rush of insight into Vorpal Bolt!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("vorpal bolt")] = 100; } else if (currNum == 4) { act("{yYou feel a rush of insight into Maelstrom!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("maelstrom")] = 100; } } else { if (currNum == 3) { ch->pcdata->learned[skill_lookup("maelstrom")] = -2; act("{yYou lose your Maelstrom ability!{x",ch,0,0,TO_CHAR); } else if (currNum == 2) { ch->pcdata->learned[skill_lookup("bastion of elements")] = -2; act("{yYou lose your Bastion of Elements ability!{x",ch,0,0,TO_CHAR); ch->pcdata->learned[skill_lookup("vorpal bolt")] = -2; act("{yYou lose your Vorpal Bolt ability!{x",ch,0,0,TO_CHAR); } else if (currNum == 1) { ch->max_hit -= 150; ch->max_mana -= 300; act("{yThe vigor coursing through your veins fades away.{x",ch,0,0,TO_CHAR); } } return; }