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.
90 lines
3.8 KiB
Plaintext
90 lines
3.8 KiB
Plaintext
//:://////////////////////////////////////////////
|
|
//:: FileName: "ss_ep_singsunder"
|
|
/* Purpose: Singular Sunder - spell target's an enemy's equipment, and
|
|
irrevocably destroys a single item, on a failed will save.
|
|
*/
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Boneshank
|
|
//:: Last Updated On: March 11, 2004
|
|
//:://////////////////////////////////////////////
|
|
#include "prc_alterations"
|
|
#include "inc_epicspells"
|
|
|
|
object GetSunderTarget(object oTarget);
|
|
|
|
void main()
|
|
{
|
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
|
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
|
|
|
|
if (!X2PreSpellCastCode())
|
|
{
|
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
|
return;
|
|
}
|
|
if (GetCanCastSpell(OBJECT_SELF, SPELL_EPIC_SINGSUN))
|
|
{
|
|
object oTarget = PRCGetSpellTargetObject();
|
|
effect eImp = EffectVisualEffect(VFX_IMP_BREACH);
|
|
effect eVis = EffectVisualEffect(VFX_IMP_LIGHTNING_S);
|
|
object oItem = GetSunderTarget(oTarget);
|
|
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId()));
|
|
// Does the target have an equipped item to sunder?
|
|
if (oItem != OBJECT_INVALID)
|
|
{
|
|
// SR check.
|
|
if (!PRCDoResistSpell(OBJECT_SELF, oTarget, GetTotalCastingLevel(OBJECT_SELF)+SPGetPenetr(OBJECT_SELF)))
|
|
{
|
|
// Will save.
|
|
if (!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, GetEpicSpellSaveDC(OBJECT_SELF, oTarget)))
|
|
{
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eImp, oTarget);
|
|
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
|
DestroyObject(oItem, 1.0);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
SendMessageToPC(OBJECT_SELF,
|
|
"That creature has nothing equipped to sunder!");
|
|
}
|
|
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
|
|
}
|
|
|
|
object GetSunderTarget(object oTarget)
|
|
{
|
|
object oItem = OBJECT_INVALID;
|
|
object oTemp;
|
|
// Search for item hierarchy, lowest to highest priority, and non-plot.
|
|
oTemp = GetItemInSlot(12, oTarget); // Bullets
|
|
if (oTemp != OBJECT_INVALID && !GetPlotFlag(oTemp)) oItem = oTemp;
|
|
oTemp = GetItemInSlot(13, oTarget); // Bolts
|
|
if (oTemp != OBJECT_INVALID && !GetPlotFlag(oTemp)) oItem = oTemp;
|
|
oTemp = GetItemInSlot(11, oTarget); // Arrows
|
|
if (oTemp != OBJECT_INVALID && !GetPlotFlag(oTemp)) oItem = oTemp;
|
|
oTemp = GetItemInSlot(7, oTarget); // Left ring
|
|
if (oTemp != OBJECT_INVALID && !GetPlotFlag(oTemp)) oItem = oTemp;
|
|
oTemp = GetItemInSlot(8, oTarget); // Right ring
|
|
if (oTemp != OBJECT_INVALID && !GetPlotFlag(oTemp)) oItem = oTemp;
|
|
oTemp = GetItemInSlot(0, oTarget); // Helmet
|
|
if (oTemp != OBJECT_INVALID && !GetPlotFlag(oTemp)) oItem = oTemp;
|
|
oTemp = GetItemInSlot(10, oTarget); // Belt
|
|
if (oTemp != OBJECT_INVALID && !GetPlotFlag(oTemp)) oItem = oTemp;
|
|
oTemp = GetItemInSlot(2, oTarget); // Boots
|
|
if (oTemp != OBJECT_INVALID && !GetPlotFlag(oTemp)) oItem = oTemp;
|
|
oTemp = GetItemInSlot(6, oTarget); // Cloak
|
|
if (oTemp != OBJECT_INVALID && !GetPlotFlag(oTemp)) oItem = oTemp;
|
|
oTemp = GetItemInSlot(9, oTarget); // Neck
|
|
if (oTemp != OBJECT_INVALID && !GetPlotFlag(oTemp)) oItem = oTemp;
|
|
oTemp = GetItemInSlot(3, oTarget); // Arms (gauntlets)
|
|
if (oTemp != OBJECT_INVALID && !GetPlotFlag(oTemp)) oItem = oTemp;
|
|
oTemp = GetItemInSlot(5, oTarget); // Left (off) hand
|
|
if (oTemp != OBJECT_INVALID && !GetPlotFlag(oTemp)) oItem = oTemp;
|
|
oTemp = GetItemInSlot(1, oTarget); // Armor
|
|
if (oTemp != OBJECT_INVALID && !GetPlotFlag(oTemp)) oItem = oTemp;
|
|
oTemp = GetItemInSlot(4, oTarget); // Right (main) hand
|
|
if (oTemp != OBJECT_INVALID && !GetPlotFlag(oTemp)) oItem = oTemp;
|
|
return oItem;
|
|
}
|
|
|