Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
116 lines
4.2 KiB
Plaintext
116 lines
4.2 KiB
Plaintext
/*
|
|
----------------
|
|
Void of the Shadow Sun
|
|
|
|
tob_ssn_voidss.nss
|
|
----------------
|
|
|
|
18 MAR 09 by GC
|
|
*/ /** @file
|
|
|
|
*/
|
|
#include "tob_inc_move"
|
|
#include "tob_movehook"
|
|
////#include "prc_alterations"
|
|
#include "prc_inc_sp_tch"
|
|
|
|
void TheDarkness(object oInitiator)
|
|
{
|
|
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), GetLocation(oInitiator));
|
|
int nDC = 10 + GetHitDice(oInitiator)/2 + GetAbilityModifier(ABILITY_WISDOM);
|
|
|
|
effect eLink;
|
|
effect eVis = EffectVisualEffect(VFX_DUR_DARKNESS);
|
|
|
|
while(GetIsObjectValid(oTarget))
|
|
{
|
|
if(GetIsEnemy(oTarget))
|
|
{
|
|
int nDamage = PRCGetReflexAdjustedDamage(d6(8), oTarget, nDC, SAVING_THROW_TYPE_COLD);
|
|
eLink = EffectDamage(nDamage, DAMAGE_TYPE_COLD);
|
|
eLink = SupernaturalEffect(eLink);
|
|
if(nDamage > 0)
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
|
}
|
|
oTarget = GetNextObjectInShape(SHAPE_SPHERE, FeetToMeters(30.0), GetLocation(oInitiator));
|
|
}
|
|
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eVis, oInitiator, 1.0);
|
|
}
|
|
|
|
void main()
|
|
{
|
|
int nEvent = GetRunningEvent();
|
|
int nID = GetSpellId();
|
|
object oInitiator = OBJECT_SELF;
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
object oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oInitiator);
|
|
|
|
if(nID == SSN_VOIDSS_ATTACK)
|
|
{
|
|
if(!GetLocalInt(oInitiator, "SSN_VOID_BLAST"))
|
|
{
|
|
FloatingTextStringOnCreature("*Your Void of the Shadow Sun defense was not breached*", oInitiator, FALSE);
|
|
return;
|
|
}
|
|
|
|
TheDarkness(oInitiator);
|
|
return; // Skip the rest
|
|
}
|
|
if(nEvent == FALSE)
|
|
{// Called as spell
|
|
if(!TakeSwiftAction(oInitiator)) return;
|
|
if (!PreManeuverCastCode())
|
|
{
|
|
// If code within the PreManeuverCastCode (i.e. UMD) reports FALSE, do not run this spell
|
|
return;
|
|
}
|
|
// End of Spell Cast Hook
|
|
|
|
// Was our defense breached last turn?
|
|
if(GetLocalInt(oInitiator, "SSN_VOID_BLAST"))
|
|
{
|
|
FloatingTextStringOnCreature("*You cannot shield yourself with Void of the Shadow Sun this turn*", oInitiator, FALSE);
|
|
return;
|
|
}
|
|
|
|
struct maneuver move = EvaluateManeuver(oInitiator, oTarget, TRUE);
|
|
effect eLink;
|
|
|
|
if(move.bCanManeuver)
|
|
{
|
|
//eLink = EffectDamageResistance(DAMAGE_TYPE_COLD, 10);
|
|
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MAJOR));
|
|
eLink = EffectLinkEffects(eLink, EffectACIncrease(2, AC_DEFLECTION_BONUS));
|
|
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oInitiator, 6.0);
|
|
|
|
// The OnHit
|
|
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), 6.0, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
|
AddEventScript(oItem, EVENT_ITEM_ONHIT, "tob_ssn_voidss", TRUE, FALSE);
|
|
DelayCommand(6.0, RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "tob_ssn_voidss", TRUE, FALSE));
|
|
}
|
|
}
|
|
else if(nEvent == EVENT_ITEM_ONHIT)
|
|
{
|
|
oItem = GetSpellCastItem();
|
|
if(GetBaseItemType(oItem) == BASE_ITEM_ARMOR)
|
|
{
|
|
effect eLook = GetFirstEffect(oInitiator);
|
|
while (GetIsEffectValid(eLook))
|
|
{
|
|
if (GetEffectSpellId(eLook) == nID && GetEffectType(eLook) == EFFECT_TYPE_AC_INCREASE)
|
|
RemoveEffect(oInitiator, eLook);
|
|
eLook = GetNextEffect(oInitiator);
|
|
}// Remove deflection bonus
|
|
|
|
// Allow void blast next turn
|
|
FloatingTextStringOnCreature("*Void of the Shadow Sun breached*", oInitiator, FALSE);
|
|
SetLocalInt(oInitiator, "SSN_VOID_BLAST", TRUE);
|
|
DelayCommand(6.0, DeleteLocalInt(oInitiator, "SSN_VOID_BLAST"));
|
|
|
|
// Cleanup
|
|
RemoveSpecificProperty(oItem, ITEM_PROPERTY_ONHITCASTSPELL, IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 0, 1, "", -1, DURATION_TYPE_TEMPORARY);
|
|
RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "tob_ssn_voidss", TRUE, FALSE);
|
|
}
|
|
}
|
|
}
|