2025/05/14 Update
Expanded Peerless Archer for epic progression. Tweaked Acolyte of the Ego bonus feat progression. Tweaked onLevelUp prereq script. Brownies are Tiny creatures.
This commit is contained in:
@@ -20,6 +20,8 @@
|
||||
#include "inc_epicspells"
|
||||
#include "prc_inc_shifting"
|
||||
|
||||
int CheckInvokerAbilityFocus(object oPC = OBJECT_SELF);
|
||||
|
||||
// Prevents a Man at Arms from taking improved critical
|
||||
// in a weapon that he does not have focus in.
|
||||
int ManAtArmsFeats();
|
||||
@@ -95,7 +97,7 @@ int _GetSizeForPrereq(object oPC)
|
||||
// BEGIN FUNCTIONS
|
||||
// ---------------
|
||||
|
||||
int CheckInvokerAbilityFocus(object oPC)
|
||||
int CheckInvokerAbilityFocus(object oPC = OBJECT_SELF)
|
||||
{
|
||||
if (GetHasFeat(FEAT_ABFOC_ELDRITCH_BLAST, oPC) && !GetHasInvocation(INVOKE_ELDRITCH_BLAST, oPC)) return TRUE;
|
||||
if (GetHasFeat(FEAT_ABFOC_ELDRITCH_CHAIN, oPC) && !GetHasInvocation(INVOKE_ELDRITCH_CHAIN, oPC)) return TRUE;
|
||||
@@ -2006,6 +2008,43 @@ int WarlockFeats()
|
||||
}*/
|
||||
|
||||
int AcolyteEgo()
|
||||
{
|
||||
int nLevel = GetLevelByClass(CLASS_TYPE_ACOLYTE_EGO);
|
||||
if (!nLevel || nLevel > 20) return FALSE;
|
||||
|
||||
int nCount = GetHasFeat(FEAT_EGO_BULL)
|
||||
+ GetHasFeat(FEAT_EGO_IRON)
|
||||
+ GetHasFeat(FEAT_EGO_HEART)
|
||||
+ GetHasFeat(FEAT_EGO_SWALLOW)
|
||||
+ GetHasFeat(FEAT_EGO_WOUND)
|
||||
+ GetHasFeat(FEAT_EGO_FOOL)
|
||||
+ GetHasFeat(FEAT_EGO_FORT)
|
||||
+ GetHasFeat(FEAT_EGO_FRIGHT)
|
||||
+ GetHasFeat(FEAT_EGO_DRAKE)
|
||||
+ GetHasFeat(FEAT_EGO_STEP);
|
||||
|
||||
int nReturn = FALSE;
|
||||
|
||||
if ((nCount > 0 && nLevel < 2) ||
|
||||
(nCount > 1 && nLevel < 4) ||
|
||||
(nCount > 2 && nLevel < 6) ||
|
||||
(nCount > 3 && nLevel < 8) ||
|
||||
(nCount > 4 && nLevel < 10) ||
|
||||
(nCount > 5 && nLevel < 12) ||
|
||||
(nCount > 6 && nLevel < 14) ||
|
||||
(nCount > 7 && nLevel < 16) ||
|
||||
(nCount > 8 && nLevel < 18) ||
|
||||
(nCount > 9 && nLevel < 20) ||
|
||||
(nCount != 10 && nLevel == 20))
|
||||
{
|
||||
FloatingTextStringOnCreature("You do not have the correct amount of Cadences. Please reselect your feats.", OBJECT_SELF, FALSE);
|
||||
nReturn = TRUE;
|
||||
}
|
||||
|
||||
return nReturn;
|
||||
}
|
||||
|
||||
/* int AcolyteEgo()
|
||||
{
|
||||
int nLevel = GetLevelByClass(CLASS_TYPE_ACOLYTE_EGO);
|
||||
if(!nLevel) return FALSE;
|
||||
@@ -2036,7 +2075,7 @@ int AcolyteEgo()
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
int EpicCasting()
|
||||
{
|
||||
@@ -2716,6 +2755,7 @@ int ToB()
|
||||
void main()
|
||||
{
|
||||
if(BonusDomains()
|
||||
|| CheckInvokerAbilityFocus()
|
||||
|| CasterFeats()
|
||||
|| CheckClericShadowWeave()
|
||||
|| CraftingFeats()
|
||||
|
@@ -15,6 +15,107 @@
|
||||
#include "inc_utility"
|
||||
|
||||
void main()
|
||||
{
|
||||
int nXPCost, nFeatID;
|
||||
string sArrow;
|
||||
int nSpell = GetSpellId();
|
||||
int nBonus = 0;
|
||||
|
||||
switch (nSpell)
|
||||
{
|
||||
case SPELL_PA_FLETCH_1:
|
||||
nXPCost = 30;
|
||||
nFeatID = FEAT_PA_FLETCH_1;
|
||||
sArrow = "NW_WAMMAR009"; // +1
|
||||
nBonus = 1;
|
||||
break;
|
||||
case SPELL_PA_FLETCH_2:
|
||||
nXPCost = 80;
|
||||
nFeatID = FEAT_PA_FLETCH_2;
|
||||
sArrow = "NW_WAMMAR010"; // +2
|
||||
nBonus = 2;
|
||||
break;
|
||||
case SPELL_PA_FLETCH_3:
|
||||
nXPCost = 300;
|
||||
nFeatID = FEAT_PA_FLETCH_3;
|
||||
sArrow = "NW_WAMMAR011"; // +3
|
||||
nBonus = 3;
|
||||
break;
|
||||
case SPELL_PA_FLETCH_4:
|
||||
nXPCost = 675;
|
||||
nFeatID = FEAT_PA_FLETCH_4;
|
||||
sArrow = "X2_WAMMAR012"; // +4
|
||||
nBonus = 4;
|
||||
break;
|
||||
case SPELL_PA_FLETCH_5:
|
||||
default:
|
||||
{
|
||||
int nLevel = GetLevelByClass(CLASS_TYPE_PEERLESS, OBJECT_SELF);
|
||||
nBonus = nLevel / 2;
|
||||
if (nBonus < 5) nBonus = 5;
|
||||
if (nBonus > 15) nBonus = 15;
|
||||
|
||||
sArrow = "X2_WAMMAR013"; // base +5 arrow
|
||||
|
||||
switch (nBonus)
|
||||
{
|
||||
case 6: nXPCost = 1875; break;
|
||||
case 7: nXPCost = 2700; break;
|
||||
case 8: nXPCost = 3675; break;
|
||||
case 9: nXPCost = 4800; break;
|
||||
case 10: nXPCost = 6075; break;
|
||||
case 11: nXPCost = 7500; break;
|
||||
case 12: nXPCost = 9075; break;
|
||||
case 13: nXPCost = 10800; break;
|
||||
case 14: nXPCost = 12675; break;
|
||||
case 15: nXPCost = 14700; break;
|
||||
default: nXPCost = 1200; break; // +5
|
||||
}
|
||||
|
||||
nFeatID = FEAT_PA_FLETCH_5;
|
||||
}
|
||||
}
|
||||
|
||||
int nGoldCost = nXPCost * 10;
|
||||
|
||||
if (!GetHasXPToSpend(OBJECT_SELF, nXPCost))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(3785, OBJECT_SELF);
|
||||
IncrementRemainingFeatUses(OBJECT_SELF, nFeatID);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!GetHasGPToSpend(OBJECT_SELF, nGoldCost))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(3785, OBJECT_SELF);
|
||||
IncrementRemainingFeatUses(OBJECT_SELF, nFeatID);
|
||||
return;
|
||||
}
|
||||
|
||||
object oArrow = CreateItemOnObject(sArrow, OBJECT_SELF, 99);
|
||||
SetIdentified(oArrow, TRUE);
|
||||
|
||||
// Add extra enhancement bonus if higher than original
|
||||
if (nBonus > 5)
|
||||
{
|
||||
itemproperty ipEnhance = ItemPropertyAttackBonus(nBonus);
|
||||
AddItemProperty(DURATION_TYPE_PERMANENT, ipEnhance, oArrow);
|
||||
}
|
||||
|
||||
// Rename and retag the arrows
|
||||
string sTag = "PA_ARROW_PLUS_" + IntToString(nBonus);
|
||||
string sName = "+" + IntToString(nBonus) + " Peerless Arrows";
|
||||
|
||||
SetTag(oArrow, sTag);
|
||||
SetName(oArrow, sName);
|
||||
SetStolenFlag(oArrow, TRUE);
|
||||
|
||||
SpendXP(OBJECT_SELF, nXPCost);
|
||||
SpendGP(OBJECT_SELF, nGoldCost);
|
||||
}
|
||||
|
||||
|
||||
/* void main()
|
||||
{
|
||||
int nXPCost, nFeatID;
|
||||
string sArrow;
|
||||
@@ -67,4 +168,4 @@ void main()
|
||||
SetIdentified(CreateItemOnObject(sArrow, OBJECT_SELF, 99), TRUE);
|
||||
SpendXP(OBJECT_SELF, nXPCost);
|
||||
SpendGP(OBJECT_SELF, nGoldCost);
|
||||
}
|
||||
} */
|
Reference in New Issue
Block a user