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:
@@ -443,7 +443,24 @@ void main()
|
||||
ClearCurrentStage(oBinder);
|
||||
MarkStageNotSetUp(STAGE_EXPLOIT_VESTIGE, oBinder);
|
||||
}
|
||||
else if(nStage == STAGE_ASTAROTH)
|
||||
else if(nStage == STAGE_ASTAROTH)
|
||||
{
|
||||
// Grant the selected crafting feat as a tagged effect
|
||||
effect eFeat = EffectBonusFeat(nChoice);
|
||||
eFeat = TagEffect(eFeat, "AstarothCraftingFeat");
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eFeat), oBinder, HoursToSeconds(24));
|
||||
|
||||
int nContactTime = VESTIGE_CONTACT_TIME;
|
||||
if(GetPRCSwitch(PRC_CONTACT_VESTIGE_TIMER) >= 6) nContactTime = GetPRCSwitch(PRC_CONTACT_VESTIGE_TIMER);
|
||||
ContactVestige(oBinder, nContactTime, GetLocalInt(oBinder, "nVestige"));
|
||||
DeleteLocalInt(oBinder, "nVestige");
|
||||
AllowExit(DYNCONV_EXIT_FORCE_EXIT);
|
||||
|
||||
ClearCurrentStage(oBinder);
|
||||
MarkStageNotSetUp(STAGE_ASTAROTH, oBinder);
|
||||
}
|
||||
|
||||
/* else if(nStage == STAGE_ASTAROTH)
|
||||
{
|
||||
if (nChoice == FEAT_SCRIBE_SCROLL ) IPSafeAddItemProperty(GetPCSkin(oBinder), ItemPropertyBonusFeat(IP_FEAT_FEAT_SCRIBE_SCROLL ), HoursToSeconds(24), X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||
if (nChoice == FEAT_BREW_POTION ) IPSafeAddItemProperty(GetPCSkin(oBinder), ItemPropertyBonusFeat(IP_FEAT_FEAT_BREW_POTION ), HoursToSeconds(24), X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||
@@ -462,7 +479,7 @@ void main()
|
||||
|
||||
ClearCurrentStage(oBinder);
|
||||
MarkStageNotSetUp(STAGE_ASTAROTH, oBinder);
|
||||
}
|
||||
} */
|
||||
|
||||
if(DEBUG) DoDebug("bnd_bindingcnv: New stage: " + IntToString(nStage));
|
||||
|
||||
|
||||
@@ -54,18 +54,18 @@ void main()
|
||||
|
||||
nDC += InvokerAbilityFocus(oPC, nEssence, nEssence2);
|
||||
|
||||
int nDamageType = nEssence ? (nEssenceData >>> 4) & 0xFFF : DAMAGE_TYPE_MAGICAL;
|
||||
int nDamageType2 = nEssence2 ? (nEssenceData2 >>> 4) & 0xFFF : DAMAGE_TYPE_MAGICAL;
|
||||
int nDamageType = nEssence ? (nEssenceData >>> 4) & 0xFFF : DAMAGE_TYPE_UNTYPED;
|
||||
int nDamageType2 = nEssence2 ? (nEssenceData2 >>> 4) & 0xFFF : DAMAGE_TYPE_UNTYPED;
|
||||
|
||||
//Set correct blast damage type
|
||||
if(nDamageType != nDamageType2)
|
||||
{
|
||||
if(nDamageType != DAMAGE_TYPE_MAGICAL)
|
||||
if(nDamageType != DAMAGE_TYPE_UNTYPED)
|
||||
{
|
||||
if(nDamageType2 == DAMAGE_TYPE_MAGICAL)
|
||||
if(nDamageType2 == DAMAGE_TYPE_UNTYPED)
|
||||
nDamageType2 = nDamageType;
|
||||
}
|
||||
else if(nDamageType2 != DAMAGE_TYPE_MAGICAL)
|
||||
else if(nDamageType2 != DAMAGE_TYPE_UNTYPED)
|
||||
{
|
||||
nDamageType = nDamageType2;
|
||||
}
|
||||
@@ -116,17 +116,6 @@ void main()
|
||||
|
||||
LosePsionicFocus();
|
||||
}
|
||||
|
||||
/* if(GetIsPsionicallyFocused() && GetHasFeat(FEAT_GREATER_PSIONIC_SHOT))
|
||||
{
|
||||
nDam += d6(4);
|
||||
LosePsionicFocus();
|
||||
}
|
||||
if(GetIsPsionicallyFocused() && GetHasFeat(FEAT_PSIONIC_SHOT))
|
||||
{
|
||||
nDam += d6(2);
|
||||
LosePsionicFocus();
|
||||
} */
|
||||
|
||||
int nAtkBns = GetAttackBonus(oTarget, oPC, OBJECT_INVALID, FALSE, TOUCH_ATTACK_RANGED_SPELL);
|
||||
if(GetHasFeat(FEAT_ELDRITCH_SCULPTOR))
|
||||
|
||||
@@ -108,6 +108,12 @@ void main()
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(9999), oCaster);
|
||||
}
|
||||
|
||||
// Teleport starts a forced dynamic conversation, which clears queued ActionCastSpell cleanup.
|
||||
DeleteLocalInt(oCaster, PRC_CASTERCLASS_OVERRIDE);
|
||||
DeleteLocalInt(oCaster, "UsingActionCastSpell");
|
||||
DeleteLocalInt(oCaster, PRC_INVOKING_CLASS);
|
||||
DeleteLocalInt(oCaster, PRC_INVOCATION_LEVEL);
|
||||
|
||||
Teleport(oCaster, nCasterLvl, nSpellID == INVOKE_PATH_OF_SHADOW_PARTY, FALSE, "");
|
||||
|
||||
|
||||
|
||||
@@ -21,7 +21,23 @@
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
// Called on Heartbeat
|
||||
void ShadowBlade(object oInitiator)
|
||||
void ShadowBlade(object oInitiator)
|
||||
{
|
||||
int nDex = GetAbilityModifier(ABILITY_DEXTERITY, oInitiator);
|
||||
object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oInitiator);
|
||||
int nWeap = GetIsDisciplineWeapon(oWeapon, DISCIPLINE_SHADOW_HAND);
|
||||
|
||||
// Must be a shadow hand weapon while a Shadow Hand stance is active
|
||||
if (GetHasActiveStanceOfDiscipline(oInitiator, DISCIPLINE_SHADOW_HAND) && nWeap)
|
||||
{
|
||||
int nDamageType = GetWeaponDamageType(oWeapon);
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectDamageIncrease(IPGetDamageBonusConstantFromNumber(nDex), nDamageType)), oInitiator, 6.0);
|
||||
SetLocalInt(oInitiator, "ShadowBladeDam", nDex);
|
||||
DelayCommand(6.0, DeleteLocalInt(oInitiator, "ShadowBladeDam"));
|
||||
}
|
||||
}
|
||||
|
||||
/* void ShadowBlade(object oInitiator)
|
||||
{
|
||||
// Needs an active Shadow Hands stance
|
||||
int nStance = GetHasActiveStance(oInitiator);
|
||||
@@ -39,7 +55,7 @@ void ShadowBlade(object oInitiator)
|
||||
SetLocalInt(oInitiator, "ShadowBladeDam", nDex);
|
||||
DelayCommand(6.0, DeleteLocalInt(oInitiator, "ShadowBladeDam"));
|
||||
}
|
||||
}
|
||||
} */
|
||||
|
||||
// Called on Heartbeat
|
||||
void RapidAssault(object oInitiator)
|
||||
@@ -118,7 +134,26 @@ void BladeMeditation(object oInitiator)
|
||||
}
|
||||
|
||||
// Called on Heartbeat
|
||||
void IronheartAura(object oInitiator)
|
||||
void IronheartAura(object oInitiator)
|
||||
{
|
||||
if (GetHasActiveStanceOfDiscipline(oInitiator, DISCIPLINE_IRON_HEART))
|
||||
{
|
||||
location lTarget = GetLocation(oInitiator);
|
||||
object oAreaTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
||||
while(GetIsObjectValid(oAreaTarget))
|
||||
{
|
||||
if(oAreaTarget != oInitiator &&
|
||||
GetIsInMeleeRange(oInitiator, oAreaTarget) &&
|
||||
GetIsFriend(oAreaTarget, oInitiator))
|
||||
{
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ExtraordinaryEffect(EffectSavingThrowIncrease(SAVING_THROW_ALL, 2, SAVING_THROW_TYPE_ALL)), oAreaTarget, 6.0);
|
||||
}
|
||||
oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* void IronheartAura(object oInitiator)
|
||||
{
|
||||
int nDisc = GetDisciplineByManeuver(GetHasActiveStance(oInitiator));
|
||||
if (nDisc == DISCIPLINE_IRON_HEART)
|
||||
@@ -138,10 +173,20 @@ void IronheartAura(object oInitiator)
|
||||
oAreaTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_SMALL, lTarget, TRUE, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
}
|
||||
}
|
||||
} */
|
||||
|
||||
// Called on heartbeat
|
||||
void ShadowTrickster(object oInitiator)
|
||||
void ShadowTrickster(object oInitiator)
|
||||
{
|
||||
if (GetHasActiveStanceOfDiscipline(oInitiator, DISCIPLINE_SHADOW_HAND))
|
||||
{
|
||||
SetLocalInt(oInitiator, "ShadowTrickster", TRUE);
|
||||
}
|
||||
else
|
||||
DeleteLocalInt(oInitiator, "ShadowTrickster");
|
||||
}
|
||||
|
||||
/* void ShadowTrickster(object oInitiator)
|
||||
{
|
||||
// Needs an active Shadow Hands stance
|
||||
int nStance = GetHasActiveStance(oInitiator);
|
||||
@@ -152,7 +197,7 @@ void ShadowTrickster(object oInitiator)
|
||||
}
|
||||
else
|
||||
DeleteLocalInt(oInitiator, "ShadowTrickster");
|
||||
}
|
||||
} */
|
||||
|
||||
// Called on Heartbeat
|
||||
void WhiteRavenDefense(object oInitiator)
|
||||
|
||||
Reference in New Issue
Block a user