2025-04-15 Update

Added Elven blades to Weaponmaster prereqs
Fixed Beckon the Frozen
Fixed bug with Fire Brand
Fixed duration bug with Improved Invisibility
Added Soul Eater to Shifter prereqs
Fixed ability based class prereqs in prc_prereq.nss
Update Eye of Gruumsh for epic levels
Update Ur-Priest for epic levels
Update Forsaker for epic levels
Update Anima Mage for epic levels
Update Serene Guardian for epic levels
Bladesinger abilities can use chain shirts
Fixed Elemental Abjuration
Fixed bug with prc cache creature.
Forsakers can use non-magic items (heal kits, alchemy, etc)
Updated ruleset.2da for NWNEE update
Updated AotS bonus feats

-Notes
Added 3.5e Template index
Added 3.5e update booklet

Removed release archive
This commit is contained in:
Jaysyn904
2025-04-15 18:10:14 -04:00
parent 41ac396fe0
commit 0f43e5cbd2
40 changed files with 5604 additions and 3382 deletions

View File

@@ -23,6 +23,8 @@ void main()
{
int iEOGLevel = GetLevelByClass(CLASS_TYPE_PRC_EYE_OF_GRUUMSH, oCaster);
effect eWill = EffectSavingThrowIncrease(SAVING_THROW_WILL, 2, SAVING_THROW_TYPE_ALL);
eWill = ExtraordinaryEffect(eWill);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eWill, oTarget, HoursToSeconds(iEOGLevel) );
effect eVis = EffectVisualEffect(VFX_IMP_WILL_SAVING_THROW_USE, FALSE);

View File

@@ -32,10 +32,10 @@ void main()
if(GetDistanceBetween(oCaster, oTarget) < 6.2 && // has to be within 20 ft.
iTargetRace != RACIAL_TYPE_OOZE && // has to use sight to attack
iTargetRace != RACIAL_TYPE_CONSTRUCT &&
iTargetRace != RACIAL_TYPE_UNDEAD &&
iTargetRace != RACIAL_TYPE_ELEMENTAL &&
iTargetRace != RACIAL_TYPE_VERMIN &&
//iTargetRace != RACIAL_TYPE_CONSTRUCT &&
//iTargetRace != RACIAL_TYPE_UNDEAD && //:: none of these have any intrinsic immmunity to blindness
//iTargetRace != RACIAL_TYPE_ELEMENTAL &&
//iTargetRace != RACIAL_TYPE_VERMIN &&
!iBeholder)
{
int iHitEnemy = PRCDoRangedTouchAttack(oTarget);;

View File

@@ -32,11 +32,38 @@ void RemoveSpellEffectSong(object oPC)
}
void OnEquip(object oPC,object oSkin)
{
object oChest = GetItemInSlot(INVENTORY_SLOT_CHEST, oPC);
int nBaseAC = GetBaseAC(oChest);
int nWeight = GetWeight(oChest);
//:: 1 longsword/rapier & light armour
if (!GetIsBladesongWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC))
|| GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC))
|| (nBaseAC > 3 && !(nBaseAC == 4 && nWeight < 160)))
{
if (GetHasFeatEffect(FEAT_SONG_OF_FURY, oPC))
RemoveSpellEffectSong(oPC);
SetCompositeBonus(oSkin, "BladesAC", 0, ITEM_PROPERTY_AC_BONUS);
SetCompositeBonus(oSkin, "BladesCon", 0, ITEM_PROPERTY_SKILL_BONUS, SKILL_CONCENTRATION);
return;
}
//:: Bonus Lvl BladeSinger Max Bonus Int
int BladeLv = PRCMin(GetLevelByClass(CLASS_TYPE_BLADESINGER, oPC), GetAbilityModifier(ABILITY_INTELLIGENCE, oPC));
SetCompositeBonus(oSkin, "BladesAC", BladeLv, ITEM_PROPERTY_AC_BONUS);
if (GetHasFeat(FEAT_LESSER_SPELLSONG, oPC))
SetCompositeBonus(oSkin, "BladesCon", 5, ITEM_PROPERTY_SKILL_BONUS, SKILL_CONCENTRATION);
}
/* void OnEquip(object oPC,object oSkin)
{
// 1 longsword/rapier & light armour
if(!GetIsBladesongWeapon(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC))
|| GetIsObjectValid(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC))
|| GetBaseAC(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC)) > 3)
//:: Handles Mithral Chain Shirt
|| GetBaseAC(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC)) > 3 || GetBaseAC(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC)) == 4 && GetWeight(GetItemInSlot(INVENTORY_SLOT_CHEST)) < 160)
{
if(GetHasFeatEffect(FEAT_SONG_OF_FURY, oPC))
RemoveSpellEffectSong(oPC);
@@ -54,7 +81,7 @@ void OnEquip(object oPC,object oSkin)
if(GetHasFeat(FEAT_LESSER_SPELLSONG,oPC))
SetCompositeBonus(oSkin, "BladesCon", 5, ITEM_PROPERTY_SKILL_BONUS, SKILL_CONCENTRATION);
}
} */
void OnUnEquip(object oPC,object oSkin)
{

View File

@@ -8,12 +8,32 @@
//:: Created By: Oni5115
//:: Created On: July 19, 2004
//:://////////////////////////////////////////////
#include "prc_alterations"
#include "prc_feat_const"
#include "prc_class_const"
void ApplyRitualScarringDefense(object oPC, object oSkin)
//:: Ritual Scarring Natural AC bonus now handled in cls_stat_eog.2da
/* void ApplyRitualScarringDefense(object oPC, object oSkin)
{
int iEOGLevel = GetLevelByClass(CLASS_TYPE_PRC_EYE_OF_GRUUMSH, oPC);
int ACBonus = 0;
// For levels 3 and above, scale the bonus indefinitely:
// Level 3-5: bonus = 1; Level 6-8: bonus = 2; Level 9-11: bonus = 3; etc.
if (iEOGLevel >= 3)
{
ACBonus = iEOGLevel / 3;
}
itemproperty ipACBonus = ItemPropertyACBonus(ACBonus);
SetCompositeBonus(oSkin, "RitualScarringDefenseBonus", ACBonus, ITEM_PROPERTY_AC_BONUS);
SetLocalInt(oPC, "HasRitualScarring", 2);
}
*/
/* void ApplyRitualScarringDefense(object oPC, object oSkin)
{
int ACBonus = 0;
int iEOGLevel = GetLevelByClass(CLASS_TYPE_PRC_EYE_OF_GRUUMSH, oPC);
@@ -35,13 +55,13 @@ void ApplyRitualScarringDefense(object oPC, object oSkin)
SetCompositeBonus(oSkin, "RitualScarringDefenseBonus", ACBonus, ITEM_PROPERTY_AC_BONUS);
SetLocalInt(oPC, "HasRitualScarring", 2);
}
} */
void RemoveRitualScarringDefense(object oPC, object oSkin)
/* void RemoveRitualScarringDefense(object oPC, object oSkin)
{
SetCompositeBonus(oSkin, "RitualScarringDefenseBonus", 0, ITEM_PROPERTY_AC_BONUS);
SetLocalInt(oPC, "HasRitualScarring", 1);
}
} */
void ApplySightOfGruumsh(object oPC, object oSkin)
{
@@ -75,7 +95,7 @@ void main()
// Because the variables are not yet set.
if(GetLocalInt(oPC, "HasRitualScarring") == 0 || GetLocalInt(oPC, "HasSightOfGruumsh") == 0 )
{
RemoveRitualScarringDefense(oPC, oSkin);
//RemoveRitualScarringDefense(oPC, oSkin);
RemoveSightOfGruumsh(oPC, oSkin);
if(GetHasFeat(FEAT_SIGHT_OF_GRUUMSH, oPC) )

View File

@@ -224,6 +224,12 @@ void Shifter(object oPC, int iArcSpell, int iDivSpell)
SetLocalInt(oPC, "PRC_PrereqShift", 0);
}
//6th lvl Soul Eater's Soul Radiance qualifies
if (GetLevelByClass(CLASS_TYPE_SOUL_EATER) > 5)
{
SetLocalInt(oPC, "PRC_PrereqShift", 0);
}
//Any class that has Polymorph Self spell qualifies
if (PRCGetIsRealSpellKnown(SPELL_POLYMORPH_SELF, oPC))
{
@@ -590,9 +596,12 @@ void reqCombatMedic(object oPC)
*/
//:: Get casting ability scores
int iCha = GetLocalInt(GetPCSkin(oPC), "PRC_trueCHA");
int iInt = GetLocalInt(GetPCSkin(oPC), "PRC_trueINT");
int iWis = GetLocalInt(GetPCSkin(oPC), "PRC_trueWIS");
//int iCha = GetLocalInt(GetPCSkin(oPC), "PRC_trueCHA");
//int iInt = GetLocalInt(GetPCSkin(oPC), "PRC_trueINT");
//int iWis = GetLocalInt(GetPCSkin(oPC), "PRC_trueWIS");
int iCha = GetAbilityScore(oPC, ABILITY_CHARISMA, TRUE);
int iInt = GetAbilityScore(oPC, ABILITY_INTELLIGENCE, TRUE);
int iWis = GetAbilityScore(oPC, ABILITY_WISDOM, TRUE);
//:: Check PRC NewSpellBook divine classes (Archivist,
//:: Favoured Soul, JoWaW, Spirit Shaman)
@@ -872,7 +881,8 @@ void FistRaziel(object oPC)
SetLocalInt(oPC, "PRC_PrereqFistRaz", 1);
object oSkin = GetPCSkin(oPC);
int iWis = GetLocalInt(oSkin, "PRC_trueWIS");
//int iWis = GetLocalInt(oSkin, "PRC_trueWIS");
int iWis = GetAbilityScore(oPC, ABILITY_WISDOM, TRUE);
// hard code it to work for Bioware classes
if (GetLevelByClass(CLASS_TYPE_CLERIC))
{
@@ -1074,8 +1084,9 @@ void FMMPreReqs(object oPC)
SetLocalInt(oPC, "PRC_PrereqFMM", 0);
}
//:: Check Bioware Sorcerer
int iCha = GetLocalInt(GetPCSkin(oPC), "PRC_trueCHA");
if(iCha > 10)
//int iCha = GetLocalInt(GetPCSkin(oPC), "PRC_trueCHA");
//if(iCha > 10)
if (GetLevelByClass(CLASS_TYPE_SORCERER, oPC) > 0 && GetAbilityScore(oPC, ABILITY_CHARISMA, TRUE) > 10)
{
if(GetIsInKnownSpellList(oPC, CLASS_TYPE_SORCERER, SPELL_MAGIC_MISSILE))
{
@@ -1084,15 +1095,17 @@ void FMMPreReqs(object oPC)
}
//:: Check Wizard
int iInt = GetLocalInt(GetPCSkin(oPC), "PRC_trueINT");
if(iInt > 10)
//int iInt = GetLocalInt(GetPCSkin(oPC), "PRC_trueINT");
//if(iInt > 10)
if (GetLevelByClass(CLASS_TYPE_WIZARD, oPC) > 0 && GetAbilityScore(oPC, ABILITY_INTELLIGENCE, TRUE) > 10)
{
if(GetHasSpell(SPELL_MAGIC_MISSILE, oPC))
SetLocalInt(oPC, "PRC_PrereqFMM", 0);
}
//:: Check Nentyar Hunter
int iWis = GetLocalInt(GetPCSkin(oPC), "PRC_trueWis");
int iWis = GetAbilityScore(oPC, ABILITY_WISDOM, TRUE);
//int iWis = GetLocalInt(GetPCSkin(oPC), "PRC_trueWis");
if(iWis > 10)
{
if(GetLevelByClass(CLASS_TYPE_NENTYAR_HUNTER, oPC))
@@ -1579,9 +1592,12 @@ void main()
}
// Find the spell levels.
int iCha = GetLocalInt(oSkin, "PRC_trueCHA") - 10;
int iWis = GetLocalInt(oSkin, "PRC_trueWIS") - 10;
int iInt = GetLocalInt(oSkin, "PRC_trueINT") - 10;
int iCha = GetAbilityScore(oPC, ABILITY_CHARISMA, TRUE) - 10;
int iInt = GetAbilityScore(oPC, ABILITY_INTELLIGENCE, TRUE) - 10;
int iWis = GetAbilityScore(oPC, ABILITY_WISDOM, TRUE) - 10;
//int iCha = GetLocalInt(oSkin, "PRC_trueCHA") - 10;
//int iWis = GetLocalInt(oSkin, "PRC_trueWIS") - 10;
//int iInt = GetLocalInt(oSkin, "PRC_trueINT") - 10;
int nArcHighest;
int nDivHighest;
int nPsiHighest;

View File

@@ -149,7 +149,7 @@ void DoWeaponUnequip(object oPC, object oItem)
}
}
if(DEBUG) DoDebug("prc_restwpnsize - OnUnEquip");
// if(DEBUG) DoDebug("prc_restwpnsize - OnUnEquip"); // <-script no longer exists
// remove any TWF penalties
//if weapon was a not light, and there's still something equipped in the main hand(meaning that an offhand item was de-equipped)