diff --git a/Release/PRC8_20250104.7z b/Release/PRC8_20250104.7z new file mode 100644 index 00000000..e4f41a31 Binary files /dev/null and b/Release/PRC8_20250104.7z differ diff --git a/Release/PRC[34]_4110alpha13.7z b/Release/PRC[34]_4110alpha13.7z deleted file mode 100644 index 7cabb8b3..00000000 Binary files a/Release/PRC[34]_4110alpha13.7z and /dev/null differ diff --git a/Release/PRC8_20250103.7z b/_backup/PRC8_20250103.7z similarity index 76% rename from Release/PRC8_20250103.7z rename to _backup/PRC8_20250103.7z index 4eebcb49..78771e68 100644 Binary files a/Release/PRC8_20250103.7z and b/_backup/PRC8_20250103.7z differ diff --git a/nwn/nwnprc/trunk/2das/feat.2da b/nwn/nwnprc/trunk/2das/feat.2da index a480d55f..1fcfe6c3 100644 --- a/nwn/nwnprc/trunk/2das/feat.2da +++ b/nwn/nwnprc/trunk/2das/feat.2da @@ -26002,4 +26002,4 @@ 25998 **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 25999 "#BEGIN PRC8 WOL RESERVE#" **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** **** 26000 Bullybasher_GiantBearing 16977316 16977317 is_giantbearing **** **** **** **** **** **** **** **** **** **** 0 0 0 **** **** 16553 **** 0.5 **** **** 1 **** **** **** **** **** **** **** **** **** WOL_BULLY_GIANT 6 0 **** **** **** **** 0 0 -26001 FEAT_VOWOFPOVERTY 16977318 16977319 ife_sacredvow **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_VOWOFPOVERTY 6 **** **** **** 1 **** 0 0 +26001 FEAT_VOWOFPOVERTY 16977318 16977319 ife_sacredvow **** **** **** **** **** **** **** **** **** **** 0 0 1 **** **** **** **** 1 **** **** **** **** **** **** **** **** **** **** **** **** FEAT_VOWOFPOVERTY 6 **** **** **** **** **** 0 0 diff --git a/nwn/nwnprc/trunk/include/prc_spell_const.nss b/nwn/nwnprc/trunk/include/prc_spell_const.nss index 931a735d..1e1510f9 100644 --- a/nwn/nwnprc/trunk/include/prc_spell_const.nss +++ b/nwn/nwnprc/trunk/include/prc_spell_const.nss @@ -1223,7 +1223,7 @@ const int SPELL_NIMBUS = 1894; const int SPELL_NIMBUS_TOUCH_ATTACK = 1895; const int SPELL_FIREWALK = 1896; const int SPELL_HEAT_DEATH = 1897; -const int SPELL_CONFLAGRATION = 1898; +const int SPELL_PYRO_CONFLAGRATION = 1898; // Heroes of Horror const int SPELL_SUMMON_UNDEAD_1 = 1784; diff --git a/nwn/nwnprc/trunk/makefile.temp b/nwn/nwnprc/trunk/makefile.temp index 6f1a5c7b..65f94069 100644 --- a/nwn/nwnprc/trunk/makefile.temp +++ b/nwn/nwnprc/trunk/makefile.temp @@ -28525,9 +28525,9 @@ objs\ft_spontsummon.ncs: scripts\ft_spontsummon.nss objs\ft_tears_ever.ncs: scripts\ft_tears_ever.nss -objs\ft_vowofpoverty.ncs: scripts\ft_vowofpoverty.nss include\prc_inc_combat.nss include\inc_dynconv.nss include\prc_class_const.nss include\prc_inc_clsfunc.nss include\prc_alterations.nss include\prc_inc_unarmed.nss include\prc_inc_onhit.nss include\prc_misc_const.nss include\prc_inc_fork.nss include\prc_inc_natweap.nss include\inc_utility.nss include\prc_inc_spells.nss include\prc_inc_nwscript.nss include\inc_target_list.nss include\inc_logmessage.nss include\inc_threads.nss include\prc_inc_actions.nss include\inc_time.nss include\inc_draw_prc.nss include\inc_eventhook.nss include\inc_metalocation.nss include\inc_array_sort.nss include\inc_uniqueid.nss include\inc_set.nss include\prc_spell_const.nss include\inv_invoc_const.nss include\psi_power_const.nss include\prc_inc_racial.nss include\prc_inc_array.nss include\moi_meld_const.nss include\bnd_vestig_const.nss include\inc_2dacache.nss include\prc_feat_const.nss include\prc_racial_const.nss include\inc_debug.nss include\prc_inc_switch.nss include\inc_persist_loca.nss include\prc_inc_skin.nss include\inc_persistsql.nss include\inc_draw.nss include\inc_draw_tools.nss include\inc_pers_array.nss include\inc_area.nss include\inc_heap.nss include\inc_newspellbook.nss include\inc_vfx_const.nss include\spinc_necro_cyst.nss include\true_utter_const.nss include\prc_inc_sneak.nss include\prcsp_engine.nss include\inc_item_props.nss include\prc_inc_core.nss include\inc_sp_gain_mem.nss include\lookup_2da_spell.nss include\inc_lookups.nss include\prc_inc_damage.nss include\prc_inc_sb_const.nss include\prc_effect_inc.nss include\prc_inc_castlvl.nss include\prc_inc_newip.nss include\prc_inc_descrptr.nss include\prc_x2_itemprop.nss include\prc_ipfeat_const.nss include\inc_prc_npc.nss include\tob_move_const.nss include\prcsp_archmaginc.nss include\prc_add_spl_pen.nss include\prcsp_reputation.nss include\inc_abil_damage.nss +objs\ft_vowofpoverty.ncs: scripts\ft_vowofpoverty.nss include\prc_inc_combat.nss include\inc_dynconv.nss include\prc_class_const.nss include\prc_inc_clsfunc.nss include\prc_alterations.nss include\inc_persist_loca.nss include\prc_inc_unarmed.nss include\prc_inc_onhit.nss include\prc_misc_const.nss include\prc_inc_fork.nss include\prc_inc_natweap.nss include\inc_utility.nss include\prc_inc_spells.nss include\prc_inc_nwscript.nss include\inc_target_list.nss include\inc_logmessage.nss include\inc_threads.nss include\prc_inc_actions.nss include\inc_time.nss include\inc_draw_prc.nss include\inc_eventhook.nss include\inc_metalocation.nss include\inc_array_sort.nss include\inc_uniqueid.nss include\inc_set.nss include\prc_spell_const.nss include\inv_invoc_const.nss include\psi_power_const.nss include\prc_inc_racial.nss include\prc_inc_array.nss include\moi_meld_const.nss include\bnd_vestig_const.nss include\inc_2dacache.nss include\prc_feat_const.nss include\prc_racial_const.nss include\inc_debug.nss include\prc_inc_switch.nss include\prc_inc_skin.nss include\inc_persistsql.nss include\inc_draw.nss include\inc_draw_tools.nss include\inc_pers_array.nss include\inc_area.nss include\inc_heap.nss include\inc_newspellbook.nss include\inc_vfx_const.nss include\spinc_necro_cyst.nss include\true_utter_const.nss include\prc_inc_sneak.nss include\prcsp_engine.nss include\inc_item_props.nss include\prc_inc_core.nss include\inc_sp_gain_mem.nss include\lookup_2da_spell.nss include\inc_lookups.nss include\prc_inc_damage.nss include\prc_inc_sb_const.nss include\prc_effect_inc.nss include\prc_inc_castlvl.nss include\prc_inc_newip.nss include\prc_inc_descrptr.nss include\prc_x2_itemprop.nss include\prc_ipfeat_const.nss include\inc_prc_npc.nss include\tob_move_const.nss include\prcsp_archmaginc.nss include\prc_add_spl_pen.nss include\prcsp_reputation.nss include\inc_abil_damage.nss -objs\ft_vowpoverty_ab.ncs: scripts\ft_vowpoverty_ab.nss include\inc_dynconv.nss include\prc_inc_function.nss include\prc_inc_array.nss include\inc_debug.nss include\prc_inc_switch.nss include\prc_inc_util.nss include\prc_inc_spells.nss include\prc_inc_stunfist.nss include\inc_nwnx_funcs.nss include\prc_template_con.nss include\prc_alterations.nss include\inc_abil_damage.nss include\prc_inc_damage.nss include\prc_effect_inc.nss include\inc_item_props.nss include\prc_inc_castlvl.nss include\prc_inc_newip.nss include\prc_inc_descrptr.nss include\prc_x2_itemprop.nss include\prc_ipfeat_const.nss include\inc_utility.nss include\prc_inc_nwscript.nss include\prc_class_const.nss include\inc_target_list.nss include\inc_logmessage.nss include\inc_threads.nss include\prc_inc_actions.nss include\inc_time.nss include\inc_draw_prc.nss include\inc_eventhook.nss include\inc_metalocation.nss include\inc_array_sort.nss include\inc_uniqueid.nss include\inc_set.nss include\prc_misc_const.nss include\prc_spell_const.nss include\inv_invoc_const.nss include\psi_power_const.nss include\prc_inc_racial.nss include\moi_meld_const.nss include\bnd_vestig_const.nss include\inc_2dacache.nss include\prc_feat_const.nss include\prc_racial_const.nss include\inc_persist_loca.nss include\prc_inc_skin.nss include\inc_persistsql.nss include\inc_draw.nss include\inc_draw_tools.nss include\inc_pers_array.nss include\inc_area.nss include\inc_heap.nss include\inc_prc_npc.nss include\inc_newspellbook.nss include\inc_vfx_const.nss include\spinc_necro_cyst.nss include\true_utter_const.nss include\prc_inc_sneak.nss include\prcsp_engine.nss include\prc_inc_core.nss include\inc_sp_gain_mem.nss include\lookup_2da_spell.nss include\inc_lookups.nss include\prc_inc_sb_const.nss include\tob_move_const.nss include\prcsp_archmaginc.nss include\prc_add_spl_pen.nss include\prcsp_reputation.nss +objs\ft_vowpoverty_ab.ncs: scripts\ft_vowpoverty_ab.nss include\inc_dynconv.nss include\prc_inc_function.nss include\inc_persist_loca.nss include\prc_inc_array.nss include\inc_debug.nss include\prc_inc_switch.nss include\prc_inc_util.nss include\prc_inc_spells.nss include\prc_inc_stunfist.nss include\inc_nwnx_funcs.nss include\prc_template_con.nss include\prc_alterations.nss include\inc_abil_damage.nss include\prc_inc_damage.nss include\prc_effect_inc.nss include\inc_item_props.nss include\prc_inc_castlvl.nss include\prc_inc_newip.nss include\prc_inc_descrptr.nss include\prc_x2_itemprop.nss include\prc_ipfeat_const.nss include\inc_utility.nss include\prc_inc_nwscript.nss include\prc_class_const.nss include\inc_target_list.nss include\inc_logmessage.nss include\inc_threads.nss include\prc_inc_actions.nss include\inc_time.nss include\inc_draw_prc.nss include\inc_eventhook.nss include\inc_metalocation.nss include\inc_array_sort.nss include\inc_uniqueid.nss include\inc_set.nss include\prc_misc_const.nss include\prc_spell_const.nss include\inv_invoc_const.nss include\psi_power_const.nss include\prc_inc_racial.nss include\moi_meld_const.nss include\bnd_vestig_const.nss include\inc_2dacache.nss include\prc_feat_const.nss include\prc_racial_const.nss include\prc_inc_skin.nss include\inc_persistsql.nss include\inc_draw.nss include\inc_draw_tools.nss include\inc_pers_array.nss include\inc_area.nss include\inc_heap.nss include\inc_prc_npc.nss include\inc_newspellbook.nss include\inc_vfx_const.nss include\spinc_necro_cyst.nss include\true_utter_const.nss include\prc_inc_sneak.nss include\prcsp_engine.nss include\prc_inc_core.nss include\inc_sp_gain_mem.nss include\lookup_2da_spell.nss include\inc_lookups.nss include\prc_inc_sb_const.nss include\tob_move_const.nss include\prcsp_archmaginc.nss include\prc_add_spl_pen.nss include\prcsp_reputation.nss objs\gen_sptouchice.ncs: scripts\gen_sptouchice.nss include\prc_alterations.nss include\prc_inc_spells.nss include\inc_poison.nss include\inc_abil_damage.nss include\prc_inc_damage.nss include\prc_effect_inc.nss include\inc_item_props.nss include\prc_inc_castlvl.nss include\prc_inc_newip.nss include\prc_inc_descrptr.nss include\prc_x2_itemprop.nss include\prc_ipfeat_const.nss include\inc_utility.nss include\prc_inc_nwscript.nss include\prc_class_const.nss include\inc_target_list.nss include\inc_logmessage.nss include\inc_threads.nss include\prc_inc_actions.nss include\inc_time.nss include\inc_draw_prc.nss include\inc_eventhook.nss include\inc_metalocation.nss include\inc_array_sort.nss include\inc_uniqueid.nss include\inc_set.nss include\prc_misc_const.nss include\prc_spell_const.nss include\inv_invoc_const.nss include\psi_power_const.nss include\prc_inc_racial.nss include\prc_inc_array.nss include\moi_meld_const.nss include\bnd_vestig_const.nss include\inc_2dacache.nss include\prc_feat_const.nss include\prc_racial_const.nss include\inc_debug.nss include\prc_inc_switch.nss include\inc_persist_loca.nss include\prc_inc_skin.nss include\inc_persistsql.nss include\inc_draw.nss include\inc_draw_tools.nss include\inc_pers_array.nss include\inc_area.nss include\inc_heap.nss include\inc_prc_npc.nss include\inc_newspellbook.nss include\inc_vfx_const.nss include\spinc_necro_cyst.nss include\true_utter_const.nss include\prc_inc_sneak.nss include\prcsp_engine.nss include\prc_inc_core.nss include\inc_sp_gain_mem.nss include\lookup_2da_spell.nss include\inc_lookups.nss include\prc_inc_sb_const.nss include\tob_move_const.nss include\prcsp_archmaginc.nss include\prc_add_spl_pen.nss include\prcsp_reputation.nss @@ -29539,7 +29539,7 @@ objs\prc_fb_auto_fre.ncs: scripts\prc_fb_auto_fre.nss include\prc_spell_const.ns objs\prc_fb_deathless.ncs: scripts\prc_fb_deathless.nss -objs\prc_feats.ncs: scripts\prc_feats.nss include\moi_inc_moifunc.nss include\prc_inc_clsfunc.nss include\prc_inc_natweap.nss include\prc_inc_function.nss include\inc_utility.nss include\prc_inc_spells.nss include\prc_inc_nwscript.nss include\prc_class_const.nss include\inc_target_list.nss include\inc_logmessage.nss include\inc_threads.nss include\prc_inc_actions.nss include\inc_time.nss include\inc_draw_prc.nss include\inc_eventhook.nss include\inc_metalocation.nss include\inc_array_sort.nss include\inc_uniqueid.nss include\inc_set.nss include\prc_misc_const.nss include\prc_spell_const.nss include\inv_invoc_const.nss include\psi_power_const.nss include\prc_inc_racial.nss include\prc_inc_array.nss include\moi_meld_const.nss include\bnd_vestig_const.nss include\inc_2dacache.nss include\prc_feat_const.nss include\prc_racial_const.nss include\inc_debug.nss include\prc_inc_switch.nss include\inc_persist_loca.nss include\prc_inc_skin.nss include\inc_persistsql.nss include\inc_draw.nss include\inc_draw_tools.nss include\inc_pers_array.nss include\inc_area.nss include\inc_heap.nss include\inc_newspellbook.nss include\inc_vfx_const.nss include\spinc_necro_cyst.nss include\true_utter_const.nss include\prc_inc_sneak.nss include\prcsp_engine.nss include\inc_item_props.nss include\prc_inc_core.nss include\inc_sp_gain_mem.nss include\lookup_2da_spell.nss include\inc_lookups.nss include\prc_inc_damage.nss include\prc_inc_sb_const.nss include\prc_effect_inc.nss include\prc_inc_castlvl.nss include\prc_inc_newip.nss include\prc_inc_descrptr.nss include\prc_x2_itemprop.nss include\prc_ipfeat_const.nss include\inc_prc_npc.nss include\tob_move_const.nss include\prcsp_archmaginc.nss include\prc_add_spl_pen.nss include\prcsp_reputation.nss include\prc_inc_util.nss include\prc_inc_stunfist.nss include\inc_nwnx_funcs.nss include\prc_template_con.nss include\prc_alterations.nss include\inc_abil_damage.nss +objs\prc_feats.ncs: scripts\prc_feats.nss include\moi_inc_moifunc.nss include\prc_inc_clsfunc.nss include\inc_persist_loca.nss include\prc_inc_natweap.nss include\prc_inc_function.nss include\inc_utility.nss include\prc_inc_spells.nss include\prc_inc_nwscript.nss include\prc_class_const.nss include\inc_target_list.nss include\inc_logmessage.nss include\inc_threads.nss include\prc_inc_actions.nss include\inc_time.nss include\inc_draw_prc.nss include\inc_eventhook.nss include\inc_metalocation.nss include\inc_array_sort.nss include\inc_uniqueid.nss include\inc_set.nss include\prc_misc_const.nss include\prc_spell_const.nss include\inv_invoc_const.nss include\psi_power_const.nss include\prc_inc_racial.nss include\prc_inc_array.nss include\moi_meld_const.nss include\bnd_vestig_const.nss include\inc_2dacache.nss include\prc_feat_const.nss include\prc_racial_const.nss include\inc_debug.nss include\prc_inc_switch.nss include\prc_inc_skin.nss include\inc_persistsql.nss include\inc_draw.nss include\inc_draw_tools.nss include\inc_pers_array.nss include\inc_area.nss include\inc_heap.nss include\inc_newspellbook.nss include\inc_vfx_const.nss include\spinc_necro_cyst.nss include\true_utter_const.nss include\prc_inc_sneak.nss include\prcsp_engine.nss include\inc_item_props.nss include\prc_inc_core.nss include\inc_sp_gain_mem.nss include\lookup_2da_spell.nss include\inc_lookups.nss include\prc_inc_damage.nss include\prc_inc_sb_const.nss include\prc_effect_inc.nss include\prc_inc_castlvl.nss include\prc_inc_newip.nss include\prc_inc_descrptr.nss include\prc_x2_itemprop.nss include\prc_ipfeat_const.nss include\inc_prc_npc.nss include\tob_move_const.nss include\prcsp_archmaginc.nss include\prc_add_spl_pen.nss include\prcsp_reputation.nss include\prc_inc_util.nss include\prc_inc_stunfist.nss include\inc_nwnx_funcs.nss include\prc_template_con.nss include\prc_alterations.nss include\inc_abil_damage.nss objs\prc_fh_da.ncs: scripts\prc_fh_da.nss include\prc_alterations.nss include\inc_abil_damage.nss include\prc_inc_damage.nss include\prc_effect_inc.nss include\inc_item_props.nss include\prc_inc_castlvl.nss include\prc_inc_newip.nss include\prc_inc_descrptr.nss include\prc_x2_itemprop.nss include\prc_ipfeat_const.nss include\inc_utility.nss include\prc_inc_nwscript.nss include\prc_class_const.nss include\inc_target_list.nss include\inc_logmessage.nss include\inc_threads.nss include\prc_inc_actions.nss include\inc_time.nss include\inc_draw_prc.nss include\inc_eventhook.nss include\inc_metalocation.nss include\inc_array_sort.nss include\inc_uniqueid.nss include\inc_set.nss include\prc_misc_const.nss include\prc_spell_const.nss include\inv_invoc_const.nss include\psi_power_const.nss include\prc_inc_racial.nss include\prc_inc_array.nss include\moi_meld_const.nss include\bnd_vestig_const.nss include\inc_2dacache.nss include\prc_feat_const.nss include\prc_racial_const.nss include\inc_debug.nss include\prc_inc_switch.nss include\inc_persist_loca.nss include\prc_inc_skin.nss include\inc_persistsql.nss include\inc_draw.nss include\inc_draw_tools.nss include\inc_pers_array.nss include\inc_area.nss include\inc_heap.nss include\inc_prc_npc.nss diff --git a/nwn/nwnprc/trunk/psionics/psi_pyro_conf.nss b/nwn/nwnprc/trunk/psionics/psi_pyro_conf.nss index 2bbdfbe5..a2b3b95c 100644 --- a/nwn/nwnprc/trunk/psionics/psi_pyro_conf.nss +++ b/nwn/nwnprc/trunk/psionics/psi_pyro_conf.nss @@ -38,7 +38,7 @@ void main() if(!GetIsReactionTypeFriendly(oTarget)) { //Fire cast spell at event for the specified target - PRCSignalSpellEvent(oTarget, TRUE, SPELL_CONFLAGRATION); + PRCSignalSpellEvent(oTarget, TRUE, SPELL_PYRO_CONFLAGRATION); fDelay = PRCGetSpellEffectDelay(lTarget, oTarget); diff --git a/nwn/nwnprc/trunk/scripts/ft_vowofpoverty.nss b/nwn/nwnprc/trunk/scripts/ft_vowofpoverty.nss index aff04a8b..852059ec 100644 --- a/nwn/nwnprc/trunk/scripts/ft_vowofpoverty.nss +++ b/nwn/nwnprc/trunk/scripts/ft_vowofpoverty.nss @@ -13,6 +13,7 @@ #include "prc_alterations" #include "NW_I0_GENERIC" #include "nw_i0_spells" +#include "inc_persist_loca" effect VoPDamage(int nTotalEnhancement) //Just for unarmed, so just bludgeoning { @@ -46,7 +47,7 @@ void main() object oSkin = GetPCSkin(oPC); int nSlot; int nEvent = GetCurrentlyRunningEvent(); - int nLevel = GetCharacterLevel(oPC); + int nLevel = GetCharacterLevel(oPC)-GetPersistantLocalInt(oPC,"VoPLevel1")+1; int nLevelCheck; int nACArmor = 4+nLevel/3; int nACDeflection = nLevel/6; @@ -65,6 +66,7 @@ void main() else nTotalEnhancement = nExaltedStrike; // We aren't being called from any event, instead from EvalPRCFeats + if(nEvent == FALSE) { //Check if level up bonus has already been chosen and given for any of past Forsaker levels @@ -120,52 +122,44 @@ void main() //True Seeing at 18th if (nLevel>=18) IPSafeAddItemProperty(oSkin, ItemPropertyTrueSeeing(), 0.0, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, TRUE, TRUE); - // Enhacement bonus - only applies to weapons (or unarmed) - if(GetIsUnarmed(oPC)) //If it is unarmed, give enhancement bonus to self + // Exalted Strike - only applies to weapons or unarmed + effect eEffect1 = EffectAttackIncrease(nTotalEnhancement); + effect eEffect2 = VoPDamage(nTotalEnhancement); + effect eLink = EffectLinkEffects(eEffect1,eEffect2); + eLink = SupernaturalEffect(eLink); + eLink = TagEffect(eLink, "EffectExaltedStrike"); + + //Remove any prior bonus to avoid duplication + effect eCheckEffect = GetFirstEffect(oPC); + while (GetIsEffectValid(eCheckEffect)) { - RemoveSpecificEffect(EFFECT_TYPE_ATTACK_INCREASE, oPC); //Remove any prior bonus to avoid duplication - RemoveSpecificEffect(EFFECT_TYPE_DAMAGE_INCREASE, oPC); - ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectAttackIncrease(nTotalEnhancement), oPC); //Then set the bonus again - ApplyEffectToObject(DURATION_TYPE_PERMANENT, VoPDamage(nTotalEnhancement), oPC); - } - else - { - object oItemR = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND,oPC); - object oItemL = GetItemInSlot(INVENTORY_SLOT_LEFTHAND,oPC); - if(IPGetIsMeleeWeapon(oItemR) || GetWeaponRanged(oItemR)) - { - RemoveSpecificEffect(EFFECT_TYPE_ATTACK_INCREASE, oPC); - RemoveSpecificEffect(EFFECT_TYPE_DAMAGE_INCREASE, oPC); - IPSafeAddItemProperty(oItemR, ItemPropertyEnhancementBonus(nTotalEnhancement)); - } - else if(IPGetIsMeleeWeapon(oItemL) || GetWeaponRanged(oItemL)) - { - RemoveSpecificEffect(EFFECT_TYPE_ATTACK_INCREASE, oPC); - RemoveSpecificEffect(EFFECT_TYPE_DAMAGE_INCREASE, oPC); - IPSafeAddItemProperty(oItemL, ItemPropertyEnhancementBonus(nTotalEnhancement)); - } + if(GetEffectTag(eCheckEffect) == "EffectExaltedStrike") RemoveEffect(oPC, eCheckEffect); + eCheckEffect = GetNextEffect(oPC); } + + //Give player the bonus, regardless of the weapon + ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oPC); // For some reason, EVENT_ONPLAYEREQUIPITEM just works with weapons, so it is better to check all other items for magic elsewhere for (nSlot=0; nSlot < 13; nSlot++) //All but creatures slots { oItem=GetItemInSlot(nSlot, oPC); - if((GetIsItemPropertyValid(GetFirstItemProperty(oItem)) && !(nSlot == 4 || nSlot == 5)) //Check if it is magical (all items but on the hands) - || (nSlot == 1 && GetBaseAC(oItem) >= 1) //Check if it is an armor (AC>0) - || (nSlot == 5 && GetBaseItemType(oItem) == BASE_ITEM_SMALLSHIELD || //Check if it is a shield - GetBaseItemType(oItem) == BASE_ITEM_LARGESHIELD || - GetBaseItemType(oItem) == BASE_ITEM_TOWERSHIELD)) + if((GetIsItemPropertyValid(GetFirstItemProperty(oItem)) && !(GetItemPropertyTag(GetFirstItemProperty(oItem)) == "Tag_PRC_OnHitKeeper") + && !(nSlot == 4 || nSlot == 5)) //Check if it is magical (all items but on the hands) + || (nSlot == 1 && GetBaseAC(oItem) >= 1) //Check if it is an armor (AC>0) + || (nSlot == 5 && GetBaseItemType(oItem) == BASE_ITEM_SMALLSHIELD || //Check if it is a shield + GetBaseItemType(oItem) == BASE_ITEM_LARGESHIELD || + GetBaseItemType(oItem) == BASE_ITEM_TOWERSHIELD)) { AssignCommand(oPC, ClearAllActions(TRUE)); AssignCommand(oPC, ActionUnequipItem(oItem)); FloatingTextStringOnCreature(GetName(oItem)+" would break your vow!", oPC, FALSE); } } + + //Remove bonus from unequiped weapons oItem = GetPCItemLastUnequipped(); - if((IPGetIsMeleeWeapon(oItem) || GetWeaponRanged(oItem))) - { - IPRemoveAllItemProperties(oItem, DURATION_TYPE_PERMANENT); //Remove bonus from unequiped weapons - } + if((IPGetIsMeleeWeapon(oItem) || GetWeaponRanged(oItem))) IPRemoveAllItemProperties(oItem, DURATION_TYPE_PERMANENT); AddEventScript(oPC, EVENT_SCRIPT_MODULE_ON_EQUIP_ITEM, "ft_vowofpoverty", TRUE, FALSE); } diff --git a/nwn/nwnprc/trunk/scripts/ft_vowpoverty_ab.nss b/nwn/nwnprc/trunk/scripts/ft_vowpoverty_ab.nss index 69ad20f4..5ea491bf 100644 --- a/nwn/nwnprc/trunk/scripts/ft_vowpoverty_ab.nss +++ b/nwn/nwnprc/trunk/scripts/ft_vowpoverty_ab.nss @@ -16,6 +16,7 @@ #include "inc_dynconv" #include "prc_inc_function" #include "NW_I0_GENERIC" +#include "inc_persist_loca" ////////////////////////////////////////////////// /* Constant defintions */ @@ -98,7 +99,7 @@ void main() if(nStage == STAGE_SELECT_ABIL) { ApplyEffectToObject(DURATION_TYPE_PERMANENT,UnyieldingEffect(EffectAbilityIncrease(nChoice,2)),oPC); //Give the boost for the chosen option - SetPersistantLocalInt(oPC, "VoPBoost"+IntToString(GetCharacterLevel(oPC)),(nChoice+10)); //Register the boost has been given + SetPersistantLocalInt(oPC, "VoPBoost"+IntToString(nLevel),(nChoice+10)); //Register the boost has been given //Give the boost for the ones chosen before for(i = 0; i < nLevel; i++) diff --git a/nwn/nwnprc/trunk/scripts/prc_feats.nss b/nwn/nwnprc/trunk/scripts/prc_feats.nss index 347adc6a..ae5f5ad0 100644 --- a/nwn/nwnprc/trunk/scripts/prc_feats.nss +++ b/nwn/nwnprc/trunk/scripts/prc_feats.nss @@ -694,6 +694,9 @@ void PRCFeat_AddBonusFeats(object oPC, object oSkin) ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// +#include "NW_I0_GENERIC" +#include "inc_persist_loca" + void PRCFeat_AddCompositeBonuses(object oPC, object oSkin) { int nAlignmentGoodEvil = GetAlignmentGoodEvil(oPC); @@ -707,7 +710,11 @@ void PRCFeat_AddCompositeBonuses(object oPC, object oSkin) if(GetHasFeat(FEAT_SAC_VOW, oPC)) SetCompositeBonus(oSkin, "SacredPer", 2, ITEM_PROPERTY_SKILL_BONUS, SKILL_PERSUADE); - if(GetHasFeat(FEAT_VOWOFPOVERTY, oPC)) ExecuteScript("ft_vowofpoverty", oPC); + if(GetHasFeat(FEAT_VOWOFPOVERTY, oPC)) + { + if(!GetPersistantLocalInt(oPC,"VoPLevel1")) SetPersistantLocalInt(oPC,"VoPLevel1",GetCharacterLevel(oPC)); + ExecuteScript("ft_vowofpoverty", oPC); + } if(nAlignmentLawChaos == ALIGNMENT_LAWFUL) { diff --git a/nwn/nwnprc/trunk/scripts/prc_forsaker.nss b/nwn/nwnprc/trunk/scripts/prc_forsaker.nss index 2f3bbb69..67e49024 100644 --- a/nwn/nwnprc/trunk/scripts/prc_forsaker.nss +++ b/nwn/nwnprc/trunk/scripts/prc_forsaker.nss @@ -61,7 +61,8 @@ void main() for (nSlot=0; nSlot < 13; nSlot++) //All but creatures slots { oItem=GetItemInSlot(nSlot, oPC); - if(GetIsItemPropertyValid(GetFirstItemProperty(oItem))) //Check if it is magical (all items but on the hands)) + //Check if it is magical + if(GetIsItemPropertyValid(GetFirstItemProperty(oItem)) && !(GetItemPropertyTag(GetFirstItemProperty(oItem)) == "Tag_PRC_OnHitKeeper")) { AssignCommand(oPC, ClearAllActions(TRUE)); AssignCommand(oPC, ActionUnequipItem(oItem)); @@ -85,7 +86,6 @@ void main() } // Hook in the events - //PostString(oPC, "prc_forsaker: Adding eventhooks", 0, 0, SCREEN_ANCHOR_TOP_LEFT, 20.0, 0xFF0000FF, 0x00000000); AddEventScript(oPC, EVENT_SCRIPT_MODULE_ON_EQUIP_ITEM, "prc_forsaker", TRUE, FALSE); } diff --git a/nwn/nwnprc/trunk/scripts/prc_keep_onhit_a.nss b/nwn/nwnprc/trunk/scripts/prc_keep_onhit_a.nss index 4652da08..ad8be64f 100644 --- a/nwn/nwnprc/trunk/scripts/prc_keep_onhit_a.nss +++ b/nwn/nwnprc/trunk/scripts/prc_keep_onhit_a.nss @@ -49,8 +49,9 @@ void AddProperty(object oItem) } // Add the itemproperty - IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), - 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE); + itemproperty ipNewOH = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1); + ipNewOH = TagItemProperty(ipNewOH, "Tag_PRC_OnHitKeeper"); + IPSafeAddItemProperty(oItem, ipNewOH, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE); // Add a marker to note that the item has been handled SetLocalInt(oItem, "PRC_OnHitKeeper_Marker", TRUE); @@ -64,11 +65,19 @@ void main() // OnEquip event if(nEvent == EVENT_ONPLAYEREQUIPITEM) { - object oItem = GetItemLastEquipped(); - object oEquipper = GetItemLastEquippedBy(); - if(GetItemInSlot(INVENTORY_SLOT_CHEST, oEquipper) == oItem) - AddProperty(oItem); - } + object oItem = GetItemLastEquipped(); + object oEquipper = GetItemLastEquippedBy(); + object oSkin = GetPCSkin(oEquipper); + + if(GetItemInSlot(INVENTORY_SLOT_CHEST, oEquipper) == oItem) + { + AddProperty(oItem); + } + else + { + AddProperty(oSkin); + } + } // OnUnEquip event else if(nEvent == EVENT_ONPLAYERUNEQUIPITEM) { @@ -119,7 +128,9 @@ void main() AddProperty(oSkin); object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oCreature); - if(GetIsObjectValid(oArmor)) + if(GetIsObjectValid(oArmor)) + { AddProperty(oArmor); + } } } diff --git a/nwn/nwnprc/trunk/scripts/tmp_m_saint.nss b/nwn/nwnprc/trunk/scripts/tmp_m_saint.nss index 872400cc..78bc5e4d 100644 --- a/nwn/nwnprc/trunk/scripts/tmp_m_saint.nss +++ b/nwn/nwnprc/trunk/scripts/tmp_m_saint.nss @@ -72,10 +72,14 @@ void main() } //:: Declare major variables - int iHD = GetHitDice(oPC); - int iWISb = GetAbilityModifier(ABILITY_WISDOM, oPC); + int bVowPoverty = GetHasFeat(FEAT_VOWOFPOVERTY, oPC); + int bForsaker = GetLevelByClass(CLASS_TYPE_FORSAKER, oPC); + int iHD = GetHitDice(oPC); + int iWISb = GetAbilityModifier(ABILITY_WISDOM, oPC); + object oItem; object oSkin = GetPCSkin(oPC); + itemproperty ipIP; //:: Setup HD based Fast Healing @@ -205,7 +209,7 @@ void main() //:: Setup Holy Touch anti-evil damage shield. itemproperty iHolyTouch = (ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1)); object oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC); - if (GetIsObjectValid(oArmor)) + if (GetIsObjectValid(oArmor) && !bForsaker && !bVowPoverty) { //:: Add item prop with DURATION_TYPE_PERMANENT IPSafeAddItemProperty(oArmor, iHolyTouch, 0.0f, X2_IP_ADDPROP_POLICY_REPLACE_EXISTING, FALSE, FALSE);