2025/07/01 Afternoon Update

Tweaked ninja TLK entry.
War Domain weapon focus now uses EffectBonusFeat().
Vow of Poverty reapplies chosen stat bonuses and saves on new module (@Anufis)
Created spell constant for Snap Kick.
Tweaked Baleful Utterance.
IPDamageConstant() had a cap that it shouldn't have had.
Completely moved Assassin over to be a prepared caster ala 3e D&D.
Tweaked a few feat.2da entries for minor stuff.
Set torch as a monk weapon in baseitems.2da, so it doesns't screw up Flurry of Blows.
This commit is contained in:
Jaysyn904
2025-07-01 16:08:55 -04:00
parent 9223dd4018
commit d0fe84818d
20 changed files with 20010 additions and 19926 deletions

View File

@@ -53,6 +53,10 @@ void main()
int nRegen = 1+(nLevel-17)/7;
int nDR = 5*(1+(nLevel-10)/9);
int nER = (10*(1+(nLevel-13)/7))-5;
int nResist = 0;//Resistance (Ex): At 7th level, an ascetic gains a +1 resistance bonus on all saving throws. This bonus increases to +2 at 13th level, and to +3 at 17th level.
if (nLevel >= 17) nResist = 1 + (nLevel - 7) / 5;
else if (nLevel >= 13) nResist = 2;
else if (nLevel >= 7) nResist = 1;
int nForsakerBonus = GetLevelByClass(CLASS_TYPE_FORSAKER, oPC)/2;
int nSlot, nLevelCheck, nExaltedStrike, nTotalEnhancement;
@@ -76,6 +80,24 @@ void main()
SetPersistantLocalInt(oPC,"VoPBoostCheck",nLevelCheck);
StartDynamicConversation("ft_vowpoverty_ab", oPC, DYNCONV_EXIT_NOT_ALLOWED, FALSE, TRUE, oPC);
}
//Applying stat boosts
if(GetPersistantLocalInt(oPC, "VoPBoost"+IntToString(nLevelCheck)) >= 10)
{
if(!GetLocalInt(oPC, "VoPBoostGiven"+IntToString(nLevelCheck)))
{
SetLocalInt(oPC, "VoPBoostGiven"+IntToString(nLevelCheck), 0);
}
int oldValue = GetLocalInt(oPC, "VoPBoostGiven"+IntToString(nLevelCheck));
int newValue = 2 * (1 + (nLevel - nLevelCheck) / 4);
int stat = GetPersistantLocalInt(oPC, "VoPBoost"+IntToString(nLevelCheck)) - 10;
if (oldValue < newValue)
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT,UnyieldingEffect(EffectAbilityIncrease(stat, newValue - oldValue)), oPC);
SetLocalInt(oPC, "VoPBoostGiven"+IntToString(nLevelCheck), newValue);
}
}
//Call exalted feat for each even level
if (!GetPersistantLocalInt(oPC, "VoPFeat"+IntToString(nLevelCheck)) && (nLevelCheck-(nLevelCheck/2)*2 == 0))
@@ -92,13 +114,14 @@ void main()
//Deflection Armor +1 each 6 levels
ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(EffectACIncrease(nACDeflection, AC_DEFLECTION_BONUS)), oPC);
//Resistences +1 on 7, then each 5 levels; must use SetPersistantLocalInt to avoid duplication on new levels
if ((nLevel>=7) && (nLevel-(nLevel/5)*5 == 2))
{
if (!GetPersistantLocalInt(oPC, "VoPResistance"+IntToString(nLevel)))
//Resistance (Ex): At 7th level, an ascetic gains a +1 resistance bonus on all saving throws. This bonus increases to +2 at 13th level, and to +3 at 17th level.
if (nLevel>=7)
{
int oldValue = GetLocalInt(oPC, "VoPResistance");
if (nResist > oldValue)
{
ApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(EffectSavingThrowIncrease(SAVING_THROW_ALL, 1, SAVING_THROW_TYPE_ALL)), oPC);
SetPersistantLocalInt(oPC, "VoPResistance"+IntToString(nLevel),1);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, ExtraordinaryEffect(EffectSavingThrowIncrease(SAVING_THROW_ALL, nResist - oldValue, SAVING_THROW_TYPE_ALL)), oPC);
SetLocalInt(oPC, "VoPResistance", nResist);
}
}

View File

@@ -98,25 +98,15 @@ void main()
int nChoice = GetChoice(oPC);
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(nLevel),(nChoice+10)); //Register the boost has been given
//Give the boost for the ones chosen before
for(i = 0; i < nLevel; i++)
{
if(GetPersistantLocalInt(oPC, "VoPBoost"+IntToString(i))>=10)
{
nTest = GetPersistantLocalInt(oPC, "VoPBoost"+IntToString(i))-10;
for(j = 0; j <= 5; j++)
{
if(j == nTest) ApplyEffectToObject(DURATION_TYPE_PERMANENT,UnyieldingEffect(EffectAbilityIncrease(j,2)),oPC);
}
}
}
DeletePersistantLocalInt(oPC,"VoPBoostCheck");
// And we're all done
AllowExit(DYNCONV_EXIT_FORCE_EXIT);
// Executing to apply new stat bonuses
ExecuteScript("ft_vowofpoverty", oPC);
}
if(DEBUG) DoDebug("ft_vowpoverty_ab: New stage: " + IntToString(nStage));

View File

@@ -5,6 +5,7 @@
#include "prc_inc_domain"
#include "inc_dynconv"
#include "inc_nwnx_funcs"
#include "prc_inc_wpnrest"
void AddDomainPower(object oPC, object oSkin, int bFuncs)
{
@@ -211,9 +212,19 @@ void AddDomainFeat(object oPC, object oSkin, int bFuncs)
}
else
{
int nWarWFIprop = FeatToIprop(nWarFocus);
AddSkinFeat(nWarFocus, nWarWFIprop, oSkin, oPC);
AddSkinFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, IP_CONST_FEAT_WEAPON_PROF_MARTIAL, oSkin, oPC);
effect eMWP = EffectBonusFeat(GetWeaponProfFeatByType(FocusToWeapProf(nWarFocus)));
effect eWF = EffectBonusFeat(nWarFocus);
eWF = EffectLinkEffects(eWF, eMWP);
eWF = UnyieldingEffect(eWF);
eWF = TagEffect(eWF, "WAR_DOMAIN_WEAPON_FOCUS");
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eWF, oPC);
//int nWarWFIprop = FeatToIprop(nWarFocus);
//AddSkinFeat(nWarFocus, nWarWFIprop, oSkin, oPC);
//AddSkinFeat(FEAT_WEAPON_PROFICIENCY_MARTIAL, IP_CONST_FEAT_WEAPON_PROF_MARTIAL, oSkin, oPC);
}
}
else

View File

@@ -31,6 +31,7 @@ const int STAGE_CONFIRMATION = 1;
//////////////////////////////////////////////////
/* Main function */
//////////////////////////////////////////////////
#include "prc_inc_spells"
void main()
{
@@ -146,9 +147,19 @@ void main()
int nWeapon = GetLocalInt(oPC, "WarDomainWeapon");
int nWeaponFocus = GetFeatOfWeaponType(nWeapon, FEAT_TYPE_FOCUS);
int nWFIprop = FeatToIprop(nWeaponFocus);
effect eMWP = EffectBonusFeat(GetWeaponProfFeatByType(FocusToWeapProf(nWeaponFocus)));
effect eWF = EffectBonusFeat(nWeaponFocus);
eWF = EffectLinkEffects(eWF, eMWP);
eWF = UnyieldingEffect(eWF);
eWF = TagEffect(eWF, "WAR_DOMAIN_WEAPON_FOCUS");
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eWF, oPC);
IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(nWFIprop), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_MARTIAL), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
//IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(nWFIprop), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
//IPSafeAddItemProperty(oSkin, PRCItemPropertyBonusFeat(IP_CONST_FEAT_WEAPON_PROF_MARTIAL), 0.0f, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
// Store the weapon feat for later reuse
// The reason we use the feat and not the iprop constant is so we can check using GetHasFeat whether to reapply

View File

@@ -1498,20 +1498,20 @@ int BonusDomains()
//Determine minimum number of bonus domains (selected by player)
int nMin;
if(GetLevelByClass(CLASS_TYPE_MYSTIC))
nMin += 1;//1 domain at 1st level
nMin += 1; //1 domain at 1st level
if(GetLevelByClass(CLASS_TYPE_TEMPLAR))
nMin += 2;//2 domains at 1st level
nMin += 2; //2 domains at 1st level
if(GetLevelByClass(CLASS_TYPE_SHAMAN))
{
if(GetLevelByClass(CLASS_TYPE_SHAMAN) > 10)
nMin += 1;//1 PRC domain at 11th level
nMin += 1; //1 PRC domain at 11th level
}
if(GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE))
{
if(GetLevelByClass(CLASS_TYPE_CONTEMPLATIVE) > 5)
nMin += 2;//2 domains at 6th level
nMin += 2; //2 domains at 6th level
else
nMin += 1;//1 domain at 1st level
nMin += 1; //1 domain at 1st level
}
/* if(!nMin)

View File

@@ -162,5 +162,4 @@ void main()
// Execute scripts hooked to this event for the player triggering it
ExecuteAllScriptsHookedToEvent(oPC, EVENT_ONPLAYERCHAT);
}
}