PRC8/trunk/smp/phs_s_forbiddnca.nss
Jaysyn904 1662218bb4 Initial upload.
Adding base PRC 4.19a files to repository.
2022-10-07 13:51:24 -04:00

109 lines
3.4 KiB
Plaintext

/*:://////////////////////////////////////////////
//:: Spell Name Forbiddance: On Enter
//:: Spell FileName PHS_S_ForbiddncA
//:://////////////////////////////////////////////
//:: Spell Effects Applied / Notes
//:://////////////////////////////////////////////
Ok, creates an AOE:
- Large and permament (takes 6 rounds to cast!)
- Party members immune to its effects (And SR + Save applieS)
- Always blocks Planar Travel
- Does damage to those who don't enter in the first few seconds:
- 1 Alignment difference, (EG: N cast, LN goes in) 6d6 damage (divine?) (will half)
- 2 alignment difference, (EG: N cast, LG goes in) 12d6 damage. (divine?) (will half)
Material component worth 4000 too!
//:://////////////////////////////////////////////
//:: Created By: Jasperre
//::////////////////////////////////////////////*/
#include "PHS_INC_SPELLS"
void main()
{
// Check the AOE creator
if(!PHS_CheckAOECreator()) return;
// Declare major variables
object oCaster = GetAreaOfEffectCreator();
object oTarget = GetEnteringObject();
int nMetaMagic = PHS_GetAOEMetaMagic();
int nSpellSaveDC = PHS_GetAOESpellSaveDC();
int nGoodEvilSelf = GetAlignmentGoodEvil(oCaster);
int nLawChaosSelf = GetAlignmentLawChaos(oCaster);
int nGoodEvilTarget = GetAlignmentGoodEvil(oTarget);
int nLawChaosTarget = GetAlignmentLawChaos(oTarget);
int nVFX, nDam;
// Get a viusal based on our alignment (good/evil)
if(nGoodEvilSelf == ALIGNMENT_EVIL)
{
nVFX = VFX_IMP_HEAD_EVIL;
}
else if(nGoodEvilSelf == ALIGNMENT_GOOD)
{
nVFX = VFX_IMP_HEAD_HOLY;
}
else //if(nGoodEvilSelf == ALIGNMENT_NEUTRAL)
{
nVFX = VFX_IMP_HEAD_ODD;
}
// Get alignment "difference"
int nDifference = 0;
// 1 differnce (more)
if(nGoodEvilSelf != nGoodEvilTarget)
{
nDifference += 1;
}
// 1 differnce (more)
if(nLawChaosSelf != nLawChaosTarget)
{
nDifference += 1;
}
// Declare major effects
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
effect eVis = EffectVisualEffect(nVFX);
//Fire cast spell at event for the target
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_FORBIDDANCE);
// Always apply the "Dimensional Lock"
PHS_AOE_OnEnterEffects(eDur, oTarget, PHS_SPELL_FORBIDDANCE);
// PvP Check, needs to not be of equal alignment
if(!GetIsReactionTypeFriendly(oTarget, oCaster) &&
!GetFactionEqual(oTarget, oCaster) &&
// Alignment difference of 1 or 2
nDifference >= 1 &&
// Make sure they are not immune to spells
!PHS_TotalSpellImmunity(oTarget))
{
// Spell resistance check
if(!PHS_SpellResistanceCheck(oCaster, oTarget))
{
// Damage based on nDifference
if(nDifference == 1)
{
// 6d6 damage
nDam = PHS_MaximizeOrEmpower(6, 6, nMetaMagic);
}
else //if(nDifference == 2)
{
// 12d6 damage
nDam = PHS_MaximizeOrEmpower(12, 6, nMetaMagic);
}
// Will save for half
nDam = PHS_GetAdjustedDamage(SAVING_THROW_WILL, nDam, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_NONE, oCaster);
if(nDam > 0)
{
// Do damage
PHS_ApplyDamageVFXToObject(oTarget, eVis, nDam, DAMAGE_TYPE_MAGICAL);
}
}
}
}