Cinco De Mayo Update

Warforged Scouts can take Warforged Juggernaut.
Updated PRC8 version number.
FEAT_EXTRA_GRANTED_MANEUVER is for Crusaders, not Swordsages.
FEAT_EXTRA_GRANTED_MANEUVER now shows all 5 granted maneuvers after 19th lvl.
Mirror Image onCastAt script now uses PRCGetCasterLevel()
Summon Hamatula now uses PRCGetCasterLevel()
Spiritual Weapon now uses PRCGetCasterLevel()
Heal & Harm now SignalEvent on placeables.  DEITY$ only knows how many modules this broke.
Updated human readable changelog.
Added current list of PRC8 additions.
This commit is contained in:
Jaysyn904
2026-05-05 13:25:45 -04:00
parent 0aa32fb621
commit 129d5f33b8
10 changed files with 2725 additions and 1134 deletions

View File

@@ -3,8 +3,9 @@
LABEL ReqType ReqParam1 ReqParam2
0 Warforged RACE 149 ****
1 WarforgedCharger RACE 145 ****
2 ScriptVar VAR PRC_AllowJuggernaut 0
3 Base_Attack BAB 5 ****
4 AdamantineBody_WarForged FEAT 4781 ****
5 PowerAtk FEAT 28 ****
6 ImprovedBullrush FEAT 2806 ****
2 WarforgedScout RACE 144 ****
3 ScriptVar VAR PRC_AllowJuggernaut 0
4 Base_Attack BAB 5 ****
5 AdamantineBody_WarForged FEAT 4781 ****
6 PowerAtk FEAT 28 ****
7 ImprovedBullrush FEAT 2806 ****

View File

@@ -1066,7 +1066,7 @@ void spellsDispelAoE(object oTargetAoE, object oCaster, int nCasterLevel)
}
nChance += ((nCasterLevel + (GetAbilityScoreForClass(nClassCaster, oCaster)-10)/2) - (GetCasterLevel(oCreator))); // yes this is a sucky stupid hack
nChance += ((nCasterLevel + (GetAbilityScoreForClass(nClassCaster, oCaster)-10)/2) - (PRCGetCasterLevel(oCreator))); // yes this is a sucky stupid hack
//--------------------------------------------------------------------------
// the AI does cheat here, because it can not react as well as a player to

View File

@@ -76,7 +76,7 @@
/* This variable MUST be updated with every new version of the PRC!!! */
const string PRC_VERSION = "PRC8 4.89";
const string PRC_VERSION = "PRC8 4.91";
/* This variable MUST be updated every time 'assemble_spellbooks.bat' is run!!! */

View File

@@ -251,7 +251,7 @@ int GetMaxReadiedCount(object oPC, int nList)
int nMaxReadied = StringToInt(Get2DACache(GetAMSKnownFileName(nList), "ManeuversReadied", nLevel-1));
// Add in the custom modifier
nMaxReadied += GetReadiedManeuversModifier(oPC, nList);
if(nList == MANEUVER_LIST_SWORDSAGE)
if(nList == MANEUVER_LIST_CRUSADER)
nMaxReadied += GetHasFeat(FEAT_EXTRA_GRANTED_MANEUVER, oPC);
if(DEBUG) DoDebug("tob_inc_recovery: MaxManeuvers Readied: " +IntToString(nMaxReadied));
@@ -398,16 +398,30 @@ void GrantRandomManeuver(object oPC, int nList = MANEUVER_LIST_CRUSADER)
SetLocalInt(oPC, "ManeuverGranted" + IntToString(i), nMoveId);
}
void ListGrantedManeuvers(object oPC)
void ListGrantedManeuvers(object oPC)
{
int i;
int nMaxGranted = StringToInt(Get2DACache(GetAMSKnownFileName(MANEUVER_LIST_CRUSADER), "ManeuversGranted", GetLevelByClass(CLASS_TYPE_CRUSADER, oPC)-1));
nMaxGranted += GetHasFeat(FEAT_EXTRA_GRANTED_MANEUVER, oPC);
for(i = 1; i <= nMaxGranted; i++)
{
int nMoveId = GetLocalInt(oPC, "ManeuverGranted" + IntToString(i));
int nExpended = GetIsManeuverExpended(oPC, MANEUVER_LIST_CRUSADER, nMoveId);
if (nMoveId > 0 && !nExpended) FloatingTextStringOnCreature(GetManeuverName(nMoveId) + " is granted", oPC, FALSE);
}
}
/* void ListGrantedManeuvers(object oPC)
{
int i;
for(i = 1; i <= 4; i++)
for(i = 1; i <= 5; i++)
{
int nMoveId = GetLocalInt(oPC, "ManeuverGranted" + IntToString(i));
int nExpended = GetIsManeuverExpended(oPC, MANEUVER_LIST_CRUSADER, nMoveId);
if (nMoveId > 0 && !nExpended) FloatingTextStringOnCreature(GetManeuverName(nMoveId) + " is granted", oPC, FALSE);
}
}
} */
void GrantManeuvers(object oPC, int nList = MANEUVER_LIST_CRUSADER)
{

View File

@@ -7,7 +7,7 @@ void main()
// Get the caster of the potential dispel
object oCaster = GetLastSpellCaster();
int nCasterLevel = GetCasterLevel(oCaster);
int nCasterLevel = PRCGetCasterLevel(oCaster);
if(DEBUG) DoDebug("mirror_image_sa: EVENT_NPC_ONSPELLCASTAT triggered.");
@@ -33,10 +33,10 @@ void main()
// Ensure oOriginalCaster is valid
if (GetIsObjectValid(oOriginalCaster))
{
if(DEBUG) DoDebug("mirror_image_sa: Original caster found. Caster level: " + IntToString(GetCasterLevel(oOriginalCaster)));
if(DEBUG) DoDebug("mirror_image_sa: Original caster found. Caster level: " + IntToString(PRCGetCasterLevel(oOriginalCaster)));
// Determine the DC for the dispel check
int nDispelDC = 11 + GetCasterLevel(oOriginalCaster);
int nDispelDC = 11 + PRCGetCasterLevel(oOriginalCaster);
if(DEBUG) DoDebug("mirror_image_sa: Dispel DC: " + IntToString(nDispelDC));
// Determine the maximum cap for the dispel check

View File

@@ -17,7 +17,7 @@ void main()
{
//Declare major variables
int nMetaMagic = PRCGetMetaMagicFeat();
int nDuration = GetCasterLevel(OBJECT_SELF);
int nDuration = PRCGetCasterLevel(OBJECT_SELF);
object oPC = OBJECT_SELF;
effect eSummon = EffectSummonCreature("NW_DMVROCK");
if(GetPRCSwitch(MARKER_PRC_COMPANION))

View File

@@ -83,6 +83,12 @@ int DoSpell(object oCaster, object oTarget, int nSpellID)
{
if(bMass) fDelay = PRCGetRandomDelay();
int iTombTainted = GetHasFeat(FEAT_TOMB_TAINTED_SOUL, oTarget) && GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD;
// Signal placeables even if they're not creatures
if(GetObjectType(oTarget) == OBJECT_TYPE_PLACEABLE)
{
SignalEvent(oTarget, EventSpellCastAt(oCaster, nSpellID, FALSE));
}
iHeal = GetObjectType(oTarget) == OBJECT_TYPE_CREATURE &&
((!bIsHeal && (MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD || iTombTainted)) ||

View File

@@ -83,7 +83,7 @@ void main()
{
// Get the caster of the spell
object oCaster = GetLastSpellCaster();
int nCasterLevel = GetCasterLevel(oCaster);
int nCasterLevel = PRCGetCasterLevel(oCaster);
if(DEBUG) DoDebug("sp_spiritweapon: EVENT_NPC_ONSPELLCASTAT triggered.");