PRC8/nwn/nwnprc/trunk/spells/sp_symbol.nss
Jaysyn904 6ec137a24e Updated AMS marker feats
Updated AMS marker feats.  Removed arcane & divine marker feats.  Updated Dread Necromancer for epic progression. Updated weapon baseitem models.  Updated new weapons for crafting & npc equip.
 Updated prefix.  Updated release archive.
2024-02-11 14:01:05 -05:00

73 lines
3.2 KiB
Plaintext

#include "prc_inc_spells"
#include "prc_add_spell_dc"
void main()
{
if(!X2PreSpellCastCode()) return;
int nHPLimit = GetPRCSwitch(PRC_SYMBOL_HP_LIMIT);
if(nHPLimit <= 0)
nHPLimit = 150;
int nSchool, nVFX;
int nSpellID = PRCGetSpellId();
switch(nSpellID)
{
case SPELL_SYMBOL_OF_DEATH: nSchool = SPELL_SCHOOL_NECROMANCY; nVFX = VFX_DUR_SYMB_DEATH; break;
case SPELL_SYMBOL_OF_FEAR: nSchool = SPELL_SCHOOL_NECROMANCY; nVFX = VFX_DUR_SYMB_FEAR; break;
case SPELL_SYMBOL_OF_STUNING: nSchool = SPELL_SCHOOL_ENCHANTMENT; nVFX = VFX_DUR_SYMB_STUN; break;
case SPELL_SYMBOL_OF_INSANITY: nSchool = SPELL_SCHOOL_ENCHANTMENT; nVFX = VFX_DUR_SYMB_INSAN; nHPLimit = -1; break;
case SPELL_SYMBOL_OF_PAIN: nSchool = SPELL_SCHOOL_NECROMANCY; nVFX = VFX_DUR_SYMB_PAIN; nHPLimit = -1; break;
case SPELL_SYMBOL_OF_PERSUASION: nSchool = SPELL_SCHOOL_ENCHANTMENT; nVFX = VFX_DUR_SYMB_PERS; nHPLimit = -1; break;
case SPELL_SYMBOL_OF_SLEEP: nSchool = SPELL_SCHOOL_ENCHANTMENT; nVFX = VFX_DUR_SYMB_SLEEP; nHPLimit = -1; break;
case SPELL_SYMBOL_OF_WEAKNESS: nSchool = SPELL_SCHOOL_NECROMANCY; nVFX = VFX_DUR_SYMB_WEAK; nHPLimit = -1; break;
}
PRCSetSchool(nSchool);
object oCaster = OBJECT_SELF;
location lTarget = PRCGetSpellTargetLocation();
object oSymbol = CreateObject(OBJECT_TYPE_PLACEABLE, "sp_plc_symbol", lTarget);
object oTest = GetNearestObjectByTag("SP_PLC_SYMBOL", oSymbol);
if(GetIsObjectValid(oTest) && GetDistanceBetween(oSymbol, oTest) <5.0f)
{
FloatingTextStrRefOnCreature(84612, oCaster);
DestroyObject(oSymbol);
return;
}
int nCasterLvl = PRCGetCasterLevel(oCaster);
int nMetaMagic = PRCGetMetaMagicFeat();
int nAoE = AOE_PER_GLYPH_OF_WARDING;
effect eSymbol = EffectAreaOfEffect(nAoE, "sp_symbola");
float fDuration = TurnsToSeconds(nCasterLvl * 10);//10min/level
if(nMetaMagic & METAMAGIC_EXTEND)
fDuration *= 2;
if(GetModuleSwitchValue(MODULE_SWITCH_ENABLE_INVISIBLE_GLYPH_OF_WARDING))
// show symbol only for 6 seconds
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectVisualEffect(nVFX), lTarget, 6.0f);
else
ApplyEffectToObject(DURATION_TYPE_PERMANENT, SupernaturalEffect(EffectVisualEffect(nVFX)), oSymbol);
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, SupernaturalEffect(eSymbol), lTarget, fDuration);
// Setup AoE object
object oAoE = GetAreaOfEffectObject(lTarget, GetAreaOfEffectTag(nAoE), oCaster);
SetLocalInt(oAoE, "X2_AoE_Caster_Level", nCasterLvl);
SetLocalInt(oAoE, "X2_AoE_SpellID", nSpellID);
SetLocalInt(oAoE, "X2_AoE_Weave", GetHasFeat(FEAT_SHADOWWEAVE, oCaster));
SetLocalInt(oAoE, "X2_AoE_BaseSaveDC", PRCGetSpellSaveDC(nSpellID));
SetLocalInt(oAoE, "PRC_Symbol_Metamagic", nMetaMagic);
SetLocalInt(oAoE, "PRC_Symbol_HP_Limit", nHPLimit);
// Setup placeable object
SetLocalObject(oSymbol, "X2_PLC_GLYPH_CASTER", oCaster);
SetLocalObject(oSymbol, "X2_PLC_GLYPH_AOE", oAoE);
SetLocalInt(oSymbol, "X2_PLC_GLYPH_CASTER_LEVEL", nCasterLvl);
DestroyObject(oSymbol, fDuration);
PRCSetSchool();
}