diff --git a/Release/PRC8_20241231.7z b/Release/PRC8_20241231.7z new file mode 100644 index 00000000..088f1d96 Binary files /dev/null and b/Release/PRC8_20241231.7z differ diff --git a/Release/PRC8_20241228.7z b/_backup/PRC8_20241228.7z similarity index 100% rename from Release/PRC8_20241228.7z rename to _backup/PRC8_20241228.7z diff --git a/nwn/nwnprc/trunk/makefile.temp b/nwn/nwnprc/trunk/makefile.temp index b24bf583..6f1a5c7b 100644 --- a/nwn/nwnprc/trunk/makefile.temp +++ b/nwn/nwnprc/trunk/makefile.temp @@ -572,7 +572,7 @@ scripts\ft_smiteraziel.nss \ scripts\ft_spontsummon.nss \ scripts\ft_tears_ever.nss \ scripts\ft_vowofpoverty.nss \ -scripts\ft_vowofpoverty_abil.nss \ +scripts\ft_vowpoverty_ab.nss \ scripts\gen_sptouchice.nss \ scripts\gensp_holyrad.nss \ scripts\gensp_holyrada.nss \ @@ -3185,7 +3185,7 @@ objs\ft_smiteraziel.ncs \ objs\ft_spontsummon.ncs \ objs\ft_tears_ever.ncs \ objs\ft_vowofpoverty.ncs \ -objs\ft_vowofpoverty_abil.ncs \ +objs\ft_vowpoverty_ab.ncs \ objs\gen_sptouchice.ncs \ objs\gensp_holyrad.ncs \ objs\gensp_holyrada.ncs \ @@ -28527,7 +28527,7 @@ 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_abil.ncs: scripts\ft_vowofpoverty_abil.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\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\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 diff --git a/nwn/nwnprc/trunk/scripts/ft_vowofpoverty.nss b/nwn/nwnprc/trunk/scripts/ft_vowofpoverty.nss index 4d08aec3..aff04a8b 100644 --- a/nwn/nwnprc/trunk/scripts/ft_vowofpoverty.nss +++ b/nwn/nwnprc/trunk/scripts/ft_vowofpoverty.nss @@ -75,7 +75,7 @@ void main() //Call stat boost dialogue for level 7 and each 4 levels after that AssignCommand(oPC, ClearAllActions(TRUE)); SetPersistantLocalInt(oPC,"VoPBoostCheck",nLevelCheck); - StartDynamicConversation("ft_vowofpoverty_abil", oPC, DYNCONV_EXIT_NOT_ALLOWED, FALSE, TRUE, oPC); + StartDynamicConversation("ft_vowpoverty_ab", oPC, DYNCONV_EXIT_NOT_ALLOWED, FALSE, TRUE, oPC); } } diff --git a/nwn/nwnprc/trunk/scripts/ft_vowofpoverty_abil.nss b/nwn/nwnprc/trunk/scripts/ft_vowpoverty_ab.nss similarity index 92% rename from nwn/nwnprc/trunk/scripts/ft_vowofpoverty_abil.nss rename to nwn/nwnprc/trunk/scripts/ft_vowpoverty_ab.nss index 1f0047bb..69ad20f4 100644 --- a/nwn/nwnprc/trunk/scripts/ft_vowofpoverty_abil.nss +++ b/nwn/nwnprc/trunk/scripts/ft_vowpoverty_ab.nss @@ -1,6 +1,6 @@ //::////////////////////////////////////////////// //:: Vow of Poverty Ability Boost Conversation -//:: ft_vowofpoverty_abil +//:: ft_vowpoverty_ab //::////////////////////////////////////////////// /** @file This allows you to choose ability to boost. @@ -38,7 +38,7 @@ void main() // Check which of the conversation scripts called the scripts if(nValue == 0) // All of them set the DynConv_Var to non-zero value, so something is wrong -> abort { - if(DEBUG) DoDebug("ft_vowofpoverty_abil: Aborting due to error."); + if(DEBUG) DoDebug("ft_vowpoverty_ab: Aborting due to error."); return; } @@ -82,14 +82,14 @@ void main() } else if(nValue == DYNCONV_EXITED) { - if(DEBUG) DoDebug("ft_vowofpoverty_abil: Running exit handler"); + if(DEBUG) DoDebug("ft_vowpoverty_ab: Running exit handler"); } else if(nValue == DYNCONV_ABORTED) { // This section should never be run, since aborting this conversation should // always be forbidden and as such, any attempts to abort the conversation // should be handled transparently by the system - if(DEBUG) DoDebug("ft_vowofpoverty_abil: ERROR: Conversation abort section run"); + if(DEBUG) DoDebug("ft_vowpoverty_ab: ERROR: Conversation abort section run"); } // Handle PC response else @@ -118,7 +118,7 @@ void main() AllowExit(DYNCONV_EXIT_FORCE_EXIT); } - if(DEBUG) DoDebug("ft_vowofpoverty_abil: New stage: " + IntToString(nStage)); + if(DEBUG) DoDebug("ft_vowpoverty_ab: New stage: " + IntToString(nStage)); // Store the stage value. If it has been changed, this clears out the choices SetStage(nStage, oPC); diff --git a/nwn/nwnprc/trunk/scripts/tmp_m_saint.nss b/nwn/nwnprc/trunk/scripts/tmp_m_saint.nss index 214b541a..872400cc 100644 --- a/nwn/nwnprc/trunk/scripts/tmp_m_saint.nss +++ b/nwn/nwnprc/trunk/scripts/tmp_m_saint.nss @@ -64,9 +64,8 @@ void main() object oPC; switch(nEvent) { - case EVENT_ONHIT: oPC = OBJECT_SELF; break; - //case EVENT_ONPLAYEREQUIPITEM: oPC = GetItemLastEquippedBy(); break; - //case EVENT_ONPLAYERUNEQUIPITEM: oPC = GetItemLastUnequippedBy(); break; + case EVENT_ONHIT: oPC = OBJECT_SELF; break; + case EVENT_ONHEARTBEAT: oPC = OBJECT_SELF; break; default: oPC = OBJECT_SELF; @@ -74,21 +73,31 @@ void main() //:: Declare major variables int iHD = GetHitDice(oPC); - int iWISb = GetAbilityModifier(4, oPC); + int iWISb = GetAbilityModifier(ABILITY_WISDOM, oPC); object oItem; object oSkin = GetPCSkin(oPC); itemproperty ipIP; + +//:: Setup HD based Fast Healing + int nFastHealing = iHD/2; + if (nFastHealing > 10) {nFastHealing == 10;} //:: Not being called from an event but from EvalPRCFeats. No non-good Saints. if(nEvent == FALSE && GetAlignmentGoodEvil(oPC) == ALIGNMENT_GOOD) { - //:: Any living creature of good alignment that is not an or an elemental (removed outsider check as Saints are outsiders) + //:: Any living creature of good alignment (removed outsider check as Saints are outsiders) int nRace = MyPRCGetRacialType(oPC); if(!(nRace == RACIAL_TYPE_CONSTRUCT || nRace == RACIAL_TYPE_ELEMENTAL || nRace == RACIAL_TYPE_OOZE || nRace == RACIAL_TYPE_UNDEAD)) { + //:: Set ability bonuses + SetCompositeBonus(oSkin, "Template_Saint_con", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CON); + SetCompositeBonus(oSkin, "Template_Saint_int", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_INT); + SetCompositeBonus(oSkin, "Template_Saint_wis", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_WIS); + SetCompositeBonus(oSkin, "Template_Saint_cha", 4, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CHA); + //:: Add Darkvision ipIP = ItemPropertyDarkvision(); IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); @@ -97,9 +106,6 @@ void main() ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_LOWLIGHT_VISION); IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); - //:: Wisdom based AC bonus - SetCompositeBonus(oSkin, "Template_Saint_AC", iWISb, ITEM_PROPERTY_AC_BONUS); - //:: Hit Die based Damage Reduction if (iHD >= 12) { @@ -121,12 +127,6 @@ void main() else if (iHD <= 3) {/*:: you get nothing! */} - //:: Set HD based Fast Healing - //ebonfowl: I think this is supposed to be HD/2 to a max of 10 - int nFastHealing = iHD/2; - if (nFastHealing > 10) {nFastHealing == 10;} - SetCompositeBonus(oSkin, "Template_Saint_FastHealing", nFastHealing, ITEM_PROPERTY_REGENERATION); - //:: Set racial type to Outsider (Native) ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_OUTSIDER_RACIAL_TYPE); IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); @@ -183,12 +183,6 @@ void main() ipIP = PRCItemPropertyBonusFeat(FEAT_IMMUNE_PETRIFICATION); IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); - //:: Set Ability Score Bonuses - SetCompositeBonus(oSkin, "Template_Saint_con", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CON); - SetCompositeBonus(oSkin, "Template_Saint_int", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_INT); - SetCompositeBonus(oSkin, "Template_Saint_wis", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_WIS); - SetCompositeBonus(oSkin, "Template_Saint_cha", 4, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CHA); - //:: Setup Spell-like abilities & Holy Power marker feat ipIP = PRCItemPropertyBonusFeat(IP_CONST_FEAT_TEMPLATE_SAINT_SLA_BLESS); IPSafeAddItemProperty(oSkin, ipIP, 0.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE); @@ -263,13 +257,40 @@ void main() if(DEBUG) DoDebug("tmp_m_saint: Adding eventhooks"); //AddEventScript(oPC, EVENT_ONPLAYEREQUIPITEM, "tmp_m_saint", TRUE, FALSE); //AddEventScript(oPC, EVENT_ONPLAYERUNEQUIPITEM, "tmp_m_saint", TRUE, FALSE); - AddEventScript(oPC, EVENT_ONHIT, "tmp_m_saint", TRUE, FALSE); + AddEventScript(oPC, EVENT_ONHIT, "tmp_m_saint", TRUE, FALSE); + AddEventScript(oPC, EVENT_ONHEARTBEAT, "tmp_m_saint", TRUE, FALSE); } } + + //:: We're being called from the OnHeartbeat eventhook, so check or skip + if(nEvent == EVENT_ONHEARTBEAT) + { + //:: No non-good Saints + if(GetAlignmentGoodEvil(oPC) == ALIGNMENT_GOOD) + { + SetCompositeBonus(oSkin, "Template_Saint_AC", iWISb, ITEM_PROPERTY_AC_BONUS); + SetCompositeBonus(oSkin, "Template_Saint_FastHealing", nFastHealing, ITEM_PROPERTY_REGENERATION); + + SetCompositeBonus(oSkin, "Template_Saint_con", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CON); + SetCompositeBonus(oSkin, "Template_Saint_int", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_INT); + SetCompositeBonus(oSkin, "Template_Saint_wis", 2, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_WIS); + SetCompositeBonus(oSkin, "Template_Saint_cha", 4, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CHA); + } + else + { + SetCompositeBonus(oSkin, "Template_Saint_AC", 0, ITEM_PROPERTY_AC_BONUS); + SetCompositeBonus(oSkin, "Template_Saint_FastHealing", 0, ITEM_PROPERTY_REGENERATION); + + SetCompositeBonus(oSkin, "Template_Saint_con", 0, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CON); + SetCompositeBonus(oSkin, "Template_Saint_int", 0, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_INT); + SetCompositeBonus(oSkin, "Template_Saint_wis", 0, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_WIS); + SetCompositeBonus(oSkin, "Template_Saint_cha", 0, ITEM_PROPERTY_ABILITY_BONUS, IP_CONST_ABILITY_CHA); + } + } //:: end if - Running OnHeart event //:: We're being called from the OnHit eventhook - else if(nEvent == EVENT_ONHIT) + if(nEvent == EVENT_ONHIT) { oItem = GetSpellCastItem(); object oTarget = PRCGetSpellTargetObject();