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.
		
			
				
	
	
		
			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);
 | 
						||
        }
 | 
						||
    }
 | 
						||
}
 |