Battledale_PRC8/_removed/x2_s0_glphwardx.nss
Jaysyn904 7b9e44ebbb Initial upload
Initial upload.  PRC8 has been added.  Module compiles, PRC's default AI & treasure scripts have been integrated.  Started work on top hak for SLA / Ability / Scripting modifications.
2024-03-11 23:44:08 -04:00

117 lines
3.9 KiB
Plaintext

///::///////////////////////////////////////////////
//:: Glyph of Warding Heartbet
//:: x2_o0_glyphhb
//:: Copyright (c) 2003 Bioware Corp.
//:://////////////////////////////////////////////
/*
Default Glyph of warding damage script
This spellscript is fired when someone triggers
a player cast Glyph of Warding
Check x2_o0_hhb.nss and the Glyph of Warding
placeable object for details
*/
//:://////////////////////////////////////////////
//:: Created By: Georg Zoeller
//:: Created On: 2003-09-02
//:://////////////////////////////////////////////
#include "x0_i0_spells"
void DoDamage(int nDamage, object oTarget)
{
effect eVis = EffectVisualEffect(VFX_IMP_SONIC);
effect eDam = EffectDamage(nDamage, DAMAGE_TYPE_SONIC);
if(nDamage > 0)
{
//Apply VFX impact and damage effect
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
}
}
void main()
{
//Declare major variables
object oTarget = GetLocalObject(OBJECT_SELF,"X2_GLYPH_LAST_ENTER");
location lTarget = GetLocation(OBJECT_SELF);
effect eDur = EffectVisualEffect(445);
int nDamage;
int nCasterLevel = GetLocalInt(OBJECT_SELF,"X2_PLC_GLYPH_CASTER_LEVEL");
int nMetaMagic = GetLocalInt(OBJECT_SELF,"X2_PLC_GLYPH_CASTER_METAMAGIC");
object oCreator = GetLocalObject(OBJECT_SELF,"X2_PLC_GLYPH_CASTER") ;
if ( GetLocalInt (OBJECT_SELF,"X2_PLC_GLYPH_PLAYERCREATED") == 0 )
{
oCreator = OBJECT_SELF;
}
if (!GetIsObjectValid(oCreator))
{
DestroyObject(OBJECT_SELF);
return;
}
int nDice = nCasterLevel /2;
if (nDice > 5)
nDice = 5;
else if (nDice <1 )
nDice = 1;
effect eDam;
effect eExplode = EffectVisualEffect(459);
//Check the faction of the entering object to make sure the entering object is not in the casters faction
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eExplode, lTarget);
//Cycle through the targets in the explosion area
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
while(GetIsObjectValid(oTarget))
{
if (spellsIsTarget(oTarget,SPELL_TARGET_STANDARDHOSTILE,oCreator))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(oCreator, GetSpellId()));
//Make SR check
if (!MyResistSpell(oCreator, oTarget))
{
nDamage = d8(nDice);
//Enter Metamagic conditions
if (nMetaMagic == METAMAGIC_MAXIMIZE)
{
nDamage = 8 * 5;//Damage is at max
}
else if (nMetaMagic == METAMAGIC_EMPOWER)
{
nDamage = nDamage + (nDamage/2);//Damage/Healing is +50%
}
//Change damage according to Reflex, Evasion and Improved Evasion
nDamage = GetReflexAdjustedDamage(nDamage, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_SONIC, oCreator);
//----------------------------------------------------------
// Have the creator do the damage so he gets feedback strings
//----------------------------------------------------------
if (oCreator != OBJECT_SELF)
{
AssignCommand(oCreator, DoDamage(nDamage,oTarget));
}
else
{
DoDamage(nDamage,oTarget);
}
}
}
//Get next target in the sequence
oTarget = GetNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_LARGE, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
}
}