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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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));
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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)
|
||||
|
@@ -162,5 +162,4 @@ void main()
|
||||
|
||||
// Execute scripts hooked to this event for the player triggering it
|
||||
ExecuteAllScriptsHookedToEvent(oPC, EVENT_ONPLAYERCHAT);
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user