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.
150 lines
5.3 KiB
Plaintext
150 lines
5.3 KiB
Plaintext
/*:://////////////////////////////////////////////
|
||
//:: Spell Name Melf's Acid Arrow
|
||
//:: Spell FileName PHS_S_MelfsAcidA
|
||
//:://////////////////////////////////////////////
|
||
//:: In Game Spell desctiption
|
||
//:://////////////////////////////////////////////
|
||
Conjuration (Creation) [Acid]
|
||
Level: Sor/Wiz 2
|
||
Components: V, S, M, F
|
||
Casting Time: 1 standard action
|
||
Range: Long (40M)
|
||
Effect: One arrow of acid
|
||
Duration: 1 round + 1 round per three levels
|
||
Saving Throw: None
|
||
Spell Resistance: No
|
||
|
||
A magical arrow of acid springs from your hand and speeds to its target. You
|
||
must succeed on a ranged touch attack to hit your target. The arrow deals 2d4
|
||
points of acid damage with no splash damage. For every three caster levels
|
||
(to a maximum of 18th), the acid, unless somehow neutralized, lasts for
|
||
another round, dealing another 2d4 points of damage in that round.
|
||
|
||
Material Component: Powdered rhubarb leaf and an adder’s stomach.
|
||
|
||
Focus: A dart.
|
||
//:://////////////////////////////////////////////
|
||
//:: Spell Effects Applied / Notes
|
||
//:://////////////////////////////////////////////
|
||
Jasperre
|
||
I've changed it to the right duration, and damage - it now does 2d4 any time
|
||
damage should be inflicted.
|
||
|
||
Also made the impact thing work better (6 second delay commands, not each
|
||
one second).
|
||
|
||
Metamagic also works - extend.
|
||
|
||
Touch attack - no spell turning.
|
||
//:://////////////////////////////////////////////
|
||
//:: Created By: Jasperre
|
||
//::////////////////////////////////////////////*/
|
||
|
||
#include "PHS_INC_SPELLS"
|
||
|
||
// Delayed for 6 seconds, this runs itself until oTarget is dead,
|
||
// or they don't have the spell's effect anymore.
|
||
void PHS_RunMelfAcidImpact(int nMetaMagic, object oTarget, object oCaster);
|
||
|
||
void main()
|
||
{
|
||
// Spell hook check.
|
||
if(!PHS_SpellHookCheck(PHS_SPELL_MELFS_ACID_ARROW)) return;
|
||
|
||
// Declare Major Variables
|
||
object oCaster = OBJECT_SELF;
|
||
object oTarget = GetSpellTargetObject();
|
||
int nMetaMagic = PHS_GetMetaMagicFeat();
|
||
int nCasterLevel = PHS_GetCasterLevel();
|
||
int nTouch = PHS_SpellTouchAttack(PHS_TOUCH_RANGED, oTarget, TRUE);
|
||
int nDam;
|
||
|
||
// Projectile timing.
|
||
float fDelay = GetDistanceToObject(oTarget)/25.0;
|
||
|
||
// Duration can be up to 7 rounds.
|
||
float fDuration = 0.5 + PHS_GetDuration(PHS_MINUTES, PHS_LimitInteger(nCasterLevel/3, 7, 1), nMetaMagic);
|
||
|
||
// Delcare Effects
|
||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||
effect eVis = EffectVisualEffect(VFX_IMP_ACID_S);
|
||
|
||
// Apply arrow visual
|
||
PHS_ApplyTouchVisual(oTarget, VFX_DUR_MIRV_ACID, nTouch);
|
||
|
||
// Does this hit?
|
||
if(nTouch)
|
||
{
|
||
// PvP Check
|
||
if(!GetIsReactionTypeFriendly(oTarget) &&
|
||
// Make sure they are not immune to spells
|
||
!PHS_TotalSpellImmunity(oTarget))
|
||
{
|
||
//Fire spell cast at event for target
|
||
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_MELFS_ACID_ARROW);
|
||
|
||
// Make an SR check - No turning, as it is a touch attack.
|
||
if(!PHS_SpellResistanceCheck(oCaster, oTarget, fDelay))
|
||
{
|
||
// Roll initial damage (this is the only part which uses nTouch)
|
||
nDam = PHS_MaximizeOrEmpower(4, 2, nMetaMagic, FALSE, nTouch);
|
||
|
||
// Do damage
|
||
DelayCommand(fDelay, PHS_ApplyDamageVFXToObject(oTarget, eVis, nDam, DAMAGE_TYPE_ACID));
|
||
|
||
// Duration effect. Cannot stack
|
||
if(!PHS_GetHasSpellEffectFromCaster(PHS_SPELL_MELFS_ACID_ARROW, oTarget, oCaster))
|
||
{
|
||
// Apply new one
|
||
PHS_ApplyDuration(oTarget, eDur, fDuration);
|
||
|
||
// Apply the bonus damage - each 6 seconds, for nDurationRounds rounds.
|
||
DelayCommand(6.0, PHS_RunMelfAcidImpact(nMetaMagic, oTarget, oCaster));
|
||
}
|
||
else
|
||
{
|
||
// Cannot affect again. Only imact is done.
|
||
FloatingTextStringOnCreature("*You cannot use more then one acidic arrow on a target at once*", oTarget, FALSE);
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// Delayed for 6 seconds, this runs itself until oTarget is dead,
|
||
// or they don't have the spell's effect anymore.
|
||
void PHS_RunMelfAcidImpact(int nMetaMagic, object oTarget, object oCaster)
|
||
{
|
||
// Check if dead or validity of oTarget.
|
||
if(!GetIsDead(oTarget) && GetIsObjectValid(oTarget))
|
||
{
|
||
// Check the caster.
|
||
if(GetIsObjectValid(oCaster))
|
||
{
|
||
// Check if they have the effect
|
||
if(PHS_GetHasSpellEffectFromCaster(PHS_SPELL_MELFS_ACID_ARROW, oTarget, oCaster))
|
||
{
|
||
// Fire spell cast at event for target
|
||
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_MELFS_ACID_ARROW);
|
||
|
||
// Roll damage
|
||
int nDamage = PHS_MaximizeOrEmpower(4, 2, nMetaMagic);
|
||
|
||
// Visual
|
||
effect eVis = EffectVisualEffect(VFX_IMP_ACID_S);
|
||
|
||
PHS_ApplyDamageVFXToObject(oTarget, eVis, nDamage, DAMAGE_TYPE_ACID);
|
||
|
||
// Run it again
|
||
DelayCommand(6.0, PHS_RunMelfAcidImpact(nMetaMagic, oTarget, oCaster));
|
||
}
|
||
}
|
||
else
|
||
{
|
||
// Remove the spells effects
|
||
PHS_RemoveSpellEffects(PHS_SPELL_MELFS_ACID_ARROW, oCaster, oTarget);
|
||
}
|
||
}
|
||
}
|