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.
140 lines
5.1 KiB
Plaintext
140 lines
5.1 KiB
Plaintext
/*:://////////////////////////////////////////////
|
|
//:: Spell Name Fire Seeds: Berries
|
|
//:: Spell FileName PHS_S_FireSeeds2
|
|
//:://////////////////////////////////////////////
|
|
//:: Spell Effects Applied / Notes
|
|
//:://////////////////////////////////////////////
|
|
|
|
- We use the Berry Bombs as new items. We create the items, and then
|
|
are able to, of course, place them all anywhere or even give them away.
|
|
They are stored as local variables on the caster, so when they activate
|
|
the class item which triggers it, it will get the locals.
|
|
|
|
This means no more then 1 casting at once of the berries.
|
|
|
|
If the berries are not in the area of the caster, then they will still be
|
|
berries (and look red) but not have the spell save DC needed to trigger
|
|
them, and also be deleted from the array.
|
|
|
|
If you enter with any berries, they are stripped of any DC's if the times
|
|
that it's been cast doesn't match the times the caster has cast it.
|
|
SCRIPT: PHS_S_FIRESEEDS2
|
|
|
|
This activates the berries set on the locals 1-8 on the caster.
|
|
//:://////////////////////////////////////////////
|
|
//:: Created By: Jasperre
|
|
//::////////////////////////////////////////////*/
|
|
|
|
#include "PHS_INC_SPELLS"
|
|
|
|
void main()
|
|
{
|
|
// Declare major variables
|
|
object oCaster = OBJECT_SELF;
|
|
object oSeed, oPossessor, oTarget;
|
|
object oArea = GetArea(oCaster);
|
|
location lSeed;
|
|
int nDam, nCnt, bDoBurst;
|
|
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_S);
|
|
effect eImpact = EffectVisualEffect(VFX_IMP_PULSE_FIRE);
|
|
effect eDam;
|
|
float fDelay;
|
|
float fExplosionRadius = 1.67;
|
|
|
|
// Get the spell saves from the caster.
|
|
int nSpellSaveDC = GetLocalInt(oCaster, "PHS_SPELL_FIRESEEDS_SAVEDC");
|
|
int nBonusDam = GetLocalInt(oCaster, "PHS_SPELL_FIRESEEDS_DICE");
|
|
|
|
// We will get the location of each seed individually
|
|
for(nCnt = 1; nCnt <= 8; nCnt++)
|
|
{
|
|
// Get the seed
|
|
oSeed = GetLocalObject(oCaster, "PHS_SPELL_FIRESEEDS_ARRAY" + IntToString(nCnt));
|
|
|
|
// Make sure it is valid
|
|
if(GetIsObjectValid(oSeed))
|
|
{
|
|
// Reset the burst
|
|
bDoBurst = FALSE;
|
|
|
|
// Get the item possessor
|
|
oPossessor = GetItemPossessor(oSeed);
|
|
|
|
// Make sure the possessor (if valid) or the item, is in the same area
|
|
// as the fire seeds activator.
|
|
if(GetIsObjectValid(oPossessor))
|
|
{
|
|
// Possessor is valid. Use thier location
|
|
if(GetArea(oPossessor) == oArea)
|
|
{
|
|
// Apply VFX at location
|
|
lSeed = GetLocation(oPossessor);
|
|
|
|
// Set to do burst
|
|
bDoBurst = TRUE;
|
|
}
|
|
else
|
|
{
|
|
// Else, destroy it
|
|
DestroyObject(oSeed);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Seed is on the ground
|
|
if(oSeed == oArea)
|
|
{
|
|
// Apply VFX at location
|
|
lSeed = GetLocation(oSeed);
|
|
|
|
// Set to do burst
|
|
bDoBurst = TRUE;
|
|
}
|
|
else
|
|
{
|
|
// Else, destroy it
|
|
DestroyObject(oSeed);
|
|
}
|
|
}
|
|
// Do we do the burst on the location lSeed?
|
|
if(bDoBurst == TRUE)
|
|
{
|
|
// Apply the VFX
|
|
PHS_ApplyLocationVFX(lSeed, eImpact);
|
|
|
|
// Cycle through the targets within the spell shape until an invalid object is captured.
|
|
oTarget = GetFirstObjectInShape(SHAPE_SPHERE, fExplosionRadius, lSeed, TRUE, OBJECT_TYPE_CREATURE);
|
|
while(GetIsObjectValid(oTarget))
|
|
{
|
|
// Check PvP
|
|
if(!GetIsReactionTypeFriendly(oTarget))
|
|
{
|
|
// Get short delay as fireball
|
|
fDelay = GetDistanceBetweenLocations(lSeed, GetLocation(oTarget))/20;
|
|
|
|
// Apply effects to the currently selected target.
|
|
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_FIRE_SEEDS);
|
|
|
|
// Randomise damage
|
|
nDam = PHS_MaximizeOrEmpower(6, 1, FALSE, nBonusDam);
|
|
|
|
// Get reflex adjusted damage
|
|
nDam = GetReflexAdjustedDamage(nDam, oTarget, nSpellSaveDC, SAVING_THROW_TYPE_FIRE);
|
|
|
|
if(nDam > 0)
|
|
{
|
|
// Set the damage effect. It is now 1 per dice used.
|
|
eDam = EffectDamage(nDam, DAMAGE_TYPE_FIRE);
|
|
|
|
// Delay the damage and visual effects
|
|
DelayCommand(fDelay, PHS_ApplyInstantAndVFX(oTarget, eVis, eDam));
|
|
}
|
|
}
|
|
// Get the next target within the spell shape.
|
|
oTarget = GetNextObjectInShape(SHAPE_SPHERE, fExplosionRadius, lSeed, TRUE, OBJECT_TYPE_CREATURE);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|