2026/06/05 Update
Added Sanctified damage type. Added Holy damage type. Added Unholy damage type. Added Falling damage type. Added Ballistic damage type. Added Desiccation damage type. Fixed Major Missile's LABEL in spells.2da. Fixed Major Missile's LABEL in des_cft_spells.2da. Fixed Major Missile's LABEL in des_cft_scrolls.2da. Disabled incomplete PnP version of Shades spell. Astaroth's free crafting feats should drop off onRest, when expelling a vestige & when rebinding a vestige. Re-enabled caster level override variable clearing in GetInvokerLevel(). Change Piercing Cold's damagetype to Untyped. Constanted new damagetypes correctly for scripting (@lightbeard) Changed all force spells damagetype to force. Fixed issue with Initiators using Shadows Blade, Ironheart Aura and Shadow Trickster with dual-stances. Changed Eldritch Blast to Untyped damage. Fixed Path of Shadow screwing up caster levels. Changed Sanctify Martial strike to be Holy damage. Changed Vile Martial strike to be Vile damage. Updated Forsaker to work with Warforged "Armor". Added a SignalEvent() to Invisible Needle so it would break Invisibility when it should. Fixed equip exploit with Shou Disciple and monk weapons. Changed Saint template's Holy Touch to do Holy Damage. Changed Horrid Wilting to do Desiccation damage. Fixed Break Enchantment's targeting. Fixed the Command spell to obey mind immunity. Changed Damning Darkness to do Unholy damage. Change the Necrotic spells to do Vile damage. Made Persistent Blade more like PnP and made it dispellable.
This commit is contained in:
@@ -362,6 +362,17 @@ string GetBindingClassFile(int nClass)
|
||||
|
||||
void ApplyVestige(object oBinder, int nVestige)
|
||||
{
|
||||
//:: Remove Astaroth's crafting feat to allow leveling up.
|
||||
effect eOld = GetFirstEffect(oBinder);
|
||||
while (GetIsEffectValid(eOld))
|
||||
{
|
||||
if (GetEffectTag(eOld) == "AstarothCraftingFeat")
|
||||
{
|
||||
RemoveEffect(oBinder, eOld);
|
||||
}
|
||||
eOld = GetNextEffect(oBinder);
|
||||
}
|
||||
|
||||
PRCRemoveSpellEffects(nVestige, oBinder, oBinder);
|
||||
GZPRCRemoveSpellEffects(nVestige, oBinder, FALSE);
|
||||
ActionCastSpellOnSelf(nVestige, METAMAGIC_NONE, oBinder);
|
||||
@@ -393,7 +404,18 @@ void ApplyVestige(object oBinder, int nVestige)
|
||||
|
||||
void ExpelVestige(object oBinder, int nVestige)
|
||||
{
|
||||
SetPersistantLocalInt(oBinder, "ExpelledVestige", TRUE);
|
||||
//:: Remove Astaroth's crafting feat to allow leveling up.
|
||||
effect eOld = GetFirstEffect(oBinder);
|
||||
while (GetIsEffectValid(eOld))
|
||||
{
|
||||
if (GetEffectTag(eOld) == "AstarothCraftingFeat")
|
||||
{
|
||||
RemoveEffect(oBinder, eOld);
|
||||
}
|
||||
eOld = GetNextEffect(oBinder);
|
||||
}
|
||||
|
||||
SetPersistantLocalInt(oBinder, "ExpelledVestige", TRUE);
|
||||
SetPersistantLocalInt(oBinder, "ExpelledVestige"+IntToString(nVestige), TRUE);
|
||||
// Here, making a good pack means we can unbind it
|
||||
if (GetLocalInt(oBinder, "PactQuality"+IntToString(nVestige)))
|
||||
@@ -965,4 +987,6 @@ int GetPatronVestige(object oBinder)
|
||||
else if (GetHasFeat(FEAT_PATRON_VESTIGE_ABYSM , oBinder)) nPatron = VESTIGE_ABYSM;
|
||||
|
||||
return nPatron;
|
||||
}
|
||||
}
|
||||
|
||||
//:: void main(){}
|
||||
|
||||
@@ -465,7 +465,7 @@ int GetInvokerLevel(object oInvoker = OBJECT_SELF, int nSpecificClass = CLASS_TY
|
||||
if(nLevel)
|
||||
{
|
||||
if(DEBUG) SendMessageToPC(oInvoker, "Forced-level Invoking at level " + IntToString(GetCasterLevel(oInvoker)));
|
||||
//DelayCommand(1.0, DeleteLocalInt(oInvoker, PRC_CASTERLEVEL_OVERRIDE));
|
||||
DelayCommand(1.0, DeleteLocalInt(oInvoker, PRC_CASTERLEVEL_OVERRIDE));
|
||||
return nLevel + nAdjust;
|
||||
}
|
||||
|
||||
|
||||
@@ -2671,7 +2671,7 @@ void DoPiercingCold(object oCaster, object oTarget, int nDamageAmount, int nCurr
|
||||
if (nDamageAmount > nTest)
|
||||
{
|
||||
// Apply the difference to ignore resist
|
||||
effect eDam = EffectDamage(nDamageAmount - nTest, DAMAGE_TYPE_MAGICAL, DAMAGE_POWER_ENERGY);
|
||||
effect eDam = EffectDamage(nDamageAmount - nTest, DAMAGE_TYPE_UNTYPED, DAMAGE_POWER_ENERGY);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_FROST_L);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
@@ -2786,13 +2786,13 @@ effect PRCEffectDamage(object oTarget, int nDamageAmount, int nDamageType=DAMAGE
|
||||
{
|
||||
int nDice = (iDiabolistLevel + 5) / 5;
|
||||
int nDamage = d6(nDice);
|
||||
int nDamageType = DAMAGE_TYPE_DIVINE;
|
||||
int nDamageType = DAMAGE_TYPE_UNHOLY;
|
||||
|
||||
if(GetLocalInt(oCaster, "VileDiabolism"))
|
||||
{
|
||||
//FloatingTextStringOnCreature("Vile Diabolism is active", oCaster, FALSE);
|
||||
nDamage /= 2;
|
||||
nDamageType = DAMAGE_TYPE_POSITIVE;
|
||||
nDamageType = DAMAGE_TYPE_VILE;
|
||||
DeleteLocalInt(oCaster, "VileDiabolism");
|
||||
}
|
||||
|
||||
|
||||
@@ -900,14 +900,16 @@ const int IP_CONST_ONHIT_SAVEDC_70 = 70;
|
||||
// Creature Epic Criticals
|
||||
const int IP_CONST_FEAT_DEVCRITICAL_CREATURE = 271;
|
||||
const int IP_CONST_FEAT_OVERCRITICAL_CREATURE = 272;
|
||||
//const int IP_CONST_FEAT_WEAPON_PROF_CREATURE = 38; // provided by Bioware in 1.66
|
||||
|
||||
// Epic DR
|
||||
const int IP_CONST_FEAT_EPIC_DR_3 = 273;
|
||||
const int IP_CONST_FEAT_EPIC_DR_6 = 274;
|
||||
const int IP_CONST_FEAT_EPIC_DR_9 = 275;
|
||||
|
||||
//IP_CONST_DAMAGETYPE
|
||||
//:://////////////////////////////////////////////
|
||||
//:: New damage types (iprp_damagetype.2da)
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
//const int IP_CONST_DAMAGETYPE_BLOOD = 15; //:: Not a 3e PnP damage type
|
||||
const int IP_CONST_DAMAGETYPE_POISON = 16;
|
||||
//const int IP_CONST_DAMAGETYPE_SHADOW = 17; //:: Not a 3e PnP damage type
|
||||
@@ -917,6 +919,12 @@ const int IP_CONST_DAMAGETYPE_RADIANT = 20;
|
||||
const int IP_CONST_DAMAGETYPE_FORCE = 21;
|
||||
const int IP_CONST_DAMAGETYPE_UNTYPED = 22;
|
||||
const int IP_CONST_DAMAGETYPE_VILE = 23;
|
||||
const int IP_CONST_DAMAGETYPE_SANCTIFIED = 24;
|
||||
const int IP_CONST_DAMAGETYPE_HOLY = 25;
|
||||
const int IP_CONST_DAMAGETYPE_UNHOLY = 26;
|
||||
const int IP_CONST_DAMAGETYPE_FALLING = 27;
|
||||
const int IP_CONST_DAMAGETYPE_BALLISTIC = 28;
|
||||
const int IP_CONST_DAMAGETYPE_DESSICATION = 29;
|
||||
|
||||
//IP_CONST_DAMAGESOAK
|
||||
const int IP_CONST_DAMAGESOAK_1_HP = 11;
|
||||
|
||||
@@ -13,12 +13,18 @@ const int EFFECT_ICON_ULTRAVISION = 131;
|
||||
//:://////////////////////////////////////////////
|
||||
//:: New damage types (damagetypes.2da)
|
||||
//:://////////////////////////////////////////////
|
||||
const int DAMAGE_TYPE_POISON = 16384; // CUSTOM2
|
||||
const int DAMAGE_TYPE_PSYCHIC = 32768; // CUSTOM4
|
||||
const int DAMAGE_TYPE_RADIANT = 65536; // CUSTOM6
|
||||
const int DAMAGE_TYPE_FORCE = 524288; // CUSTOM7
|
||||
const int DAMAGE_TYPE_UNTYPED = 1048576; // CUSTOM8
|
||||
const int DAMAGE_TYPE_VILE = 2097152; // CUSTOM9
|
||||
const int DAMAGE_TYPE_POISON = 16384; // CUSTOM2
|
||||
const int DAMAGE_TYPE_PSYCHIC = 32768; // CUSTOM4
|
||||
const int DAMAGE_TYPE_RADIANT = 65536; // CUSTOM6
|
||||
const int DAMAGE_TYPE_FORCE = 524288; // CUSTOM7
|
||||
const int DAMAGE_TYPE_UNTYPED = 1048576; // CUSTOM8
|
||||
const int DAMAGE_TYPE_VILE = 2097152; // CUSTOM9
|
||||
const int DAMAGE_TYPE_SANCTIFIED = 4194304; // CUSTOM10
|
||||
const int DAMAGE_TYPE_HOLY = 8388608; // CUSTOM11
|
||||
const int DAMAGE_TYPE_UNHOLY = 16777216; // CUSTOM12
|
||||
const int DAMAGE_TYPE_FALLING = 33554432; // CUSTOM13
|
||||
const int DAMAGE_TYPE_BALLISTIC = 67108864; // CUSTOM14
|
||||
const int DAMAGE_TYPE_DESSICATION = 134217728; // CUSTOM15
|
||||
|
||||
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
@@ -214,7 +214,7 @@ float GetVFXLength(location lCaster, float fLength, float fAngle)
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Modified March 14 2003: Removed the option to hurt chests/doors
|
||||
//:: was potentially causing bugs when no creature targets available.
|
||||
void PRCDoMissileStorm(int nD6Dice, int nCap, int nSpell, int nMIRV = VFX_IMP_MIRV, int nVIS = VFX_IMP_MAGBLUE, int nDAMAGETYPE = DAMAGE_TYPE_MAGICAL, int nONEHIT = FALSE, int nReflexSave = FALSE)
|
||||
void PRCDoMissileStorm(int nD6Dice, int nCap, int nSpell, int nMIRV = VFX_IMP_MIRV, int nVIS = VFX_IMP_MAGBLUE, int nDAMAGETYPE = DAMAGE_TYPE_FORCE, int nONEHIT = FALSE, int nReflexSave = FALSE)
|
||||
{
|
||||
object oTarget = OBJECT_INVALID;
|
||||
int nCasterLvl = PRCGetCasterLevel(OBJECT_SELF);
|
||||
@@ -312,7 +312,7 @@ void PRCDoMissileStorm(int nD6Dice, int nCap, int nSpell, int nMIRV = VFX_IMP_MI
|
||||
int i = 0;
|
||||
//--------------------------------------------------------------
|
||||
// GZ: Moved SR check out of loop to have 1 check per target
|
||||
// not one check per missile, which would rip spell mantels
|
||||
// not one check per missile, which would rip spell mantles
|
||||
// apart
|
||||
//--------------------------------------------------------------
|
||||
if (!PRCDoResistSpell(OBJECT_SELF, oTarget,nCasterLvl, fDelay))
|
||||
|
||||
@@ -49,6 +49,9 @@ const int MANEUVER_TYPE_MANEUVER = 5;
|
||||
/* Function prototypes */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
int GetHasActiveStanceOfDiscipline(object oInitiator, int nDiscipline);
|
||||
|
||||
|
||||
/**
|
||||
* Determines from what class's maneuver list the currently being initiated
|
||||
* maneuver is initiated from.
|
||||
@@ -481,6 +484,34 @@ int _AllowedDiscipline(object oInitiator, int nClass, int nDiscipline)
|
||||
/* Function definitions */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
int GetHasActiveStanceOfDiscipline(object oInitiator, int nDiscipline)
|
||||
{
|
||||
int bHasDualStance = (GetLevelByClass(CLASS_TYPE_WARBLADE, oInitiator) >= 20) ||
|
||||
(GetLevelByClass(CLASS_TYPE_MASTER_OF_NINE, oInitiator) >= 3 && GetLocalInt(oInitiator, "MoNDualStance"));
|
||||
|
||||
if (bHasDualStance)
|
||||
{
|
||||
// Check both stances for dual-stance characters
|
||||
int nStance1 = GetLocalInt(oInitiator, "TOBStanceOne");
|
||||
int nStance2 = GetLocalInt(oInitiator, "TOBStanceTwo");
|
||||
|
||||
if (nStance1 > 0 && GetDisciplineByManeuver(nStance1) == nDiscipline)
|
||||
return TRUE;
|
||||
if (nStance2 > 0 && GetDisciplineByManeuver(nStance2) == nDiscipline)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Single stance check for normal characters
|
||||
int nStance = GetHasActiveStance(oInitiator);
|
||||
if (nStance != -1 && GetDisciplineByManeuver(nStance) == nDiscipline)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
int GetInitiatingClass(object oInitiator = OBJECT_SELF)
|
||||
{
|
||||
return GetLocalInt(oInitiator, PRC_INITIATING_CLASS) - 1;
|
||||
|
||||
Reference in New Issue
Block a user