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