158 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			158 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
//::///////////////////////////////////////////////
 | 
						|
//:: Monstrous Regeneration
 | 
						|
//:: X2_S0_MonRegen
 | 
						|
//:: Copyright (c) 2001 Bioware Corp.
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
/*
 | 
						|
    Grants the selected target 3 HP of regeneration
 | 
						|
    every round.
 | 
						|
*/
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
//:: Created By: Andrew Nobbs
 | 
						|
//:: Created On: Nov 25, 2002
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
//:: Last Updated By: Andrew Nobbs May 09, 2003
 | 
						|
//:: 2003-07-07: Stacking Spell Pass, Georg Zoeller
 | 
						|
 | 
						|
#include "x2_inc_spellhook"
 | 
						|
#include "x0_i0_spells"
 | 
						|
 | 
						|
void main()
 | 
						|
{
 | 
						|
     // tarashon
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    //--------------------------------------------------------------------------
 | 
						|
    // Spellcast Hook Code
 | 
						|
    // Added 2003-06-20 by Georg
 | 
						|
    // If you want to make changes to all spells, check x2_inc_spellhook.nss to
 | 
						|
    // find out more
 | 
						|
    //--------------------------------------------------------------------------
 | 
						|
    if (!X2PreSpellCastCode())
 | 
						|
    {
 | 
						|
        return;
 | 
						|
    }
 | 
						|
    // End of Spell Cast Hook
 | 
						|
 | 
						|
    object oTarget = GetSpellTargetObject();
 | 
						|
 | 
						|
 | 
						|
    // Activating Tarashon's unique regenerate spell system for  "Alangara - New Dawn" !
 | 
						|
 | 
						|
                   int nHP;
 | 
						|
 | 
						|
                   nHP = 1;
 | 
						|
 | 
						|
                   // *** Setting the various class modifications to all healing *** //
 | 
						|
 | 
						|
                   //  * SINGLE CLASS Fighters gain +4 *
 | 
						|
                   if ( GetLevelByClass(CLASS_TYPE_BARBARIAN, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_BARD, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_CLERIC, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_DRUID, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_MONK, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_PALADIN, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_RANGER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_ROGUE, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_SORCERER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_WIZARD, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_ARCANE_ARCHER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_ASSASSIN, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_BLACKGUARD, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_DIVINE_CHAMPION, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_DWARVEN_DEFENDER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_HARPER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_PALE_MASTER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_PURPLE_DRAGON_KNIGHT, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_DRAGON_DISCIPLE, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_SHADOWDANCER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_SHIFTER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_WEAPON_MASTER, oTarget) == 0 )
 | 
						|
                   {
 | 
						|
                    nHP = 4;
 | 
						|
                   }
 | 
						|
 | 
						|
                    //  * SINGLE CLASS Barbarians gain +5 *
 | 
						|
                   else if ( GetLevelByClass(CLASS_TYPE_FIGHTER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_BARD, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_CLERIC, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_DRUID, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_MONK, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_PALADIN, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_RANGER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_ROGUE, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_SORCERER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_WIZARD, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_ARCANE_ARCHER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_ASSASSIN, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_BLACKGUARD, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_DIVINE_CHAMPION, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_DWARVEN_DEFENDER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_HARPER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_PALE_MASTER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_PURPLE_DRAGON_KNIGHT, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_DRAGON_DISCIPLE, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_SHADOWDANCER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_SHIFTER, oTarget) == 0  &&
 | 
						|
                   GetLevelByClass(CLASS_TYPE_WEAPON_MASTER, oTarget) == 0 )
 | 
						|
                   {
 | 
						|
                    nHP = 5;
 | 
						|
                   }
 | 
						|
 | 
						|
                   //  * Any character having Barbarian levels gain +3 *
 | 
						|
                    else if ( GetLevelByClass(CLASS_TYPE_BARBARIAN, oTarget) > 0 )
 | 
						|
                   {
 | 
						|
                    nHP = 3;
 | 
						|
                   }
 | 
						|
 | 
						|
                   //  * Any character having Fighter levels gain +3 *
 | 
						|
                   else if ( GetLevelByClass(CLASS_TYPE_FIGHTER, oTarget) > 0 )
 | 
						|
                   {
 | 
						|
                    nHP = 3;
 | 
						|
                   }
 | 
						|
 | 
						|
                   //  * Any character having Ranger or Paladin levels get +2. *
 | 
						|
                   else if ( GetLevelByClass(CLASS_TYPE_RANGER, oTarget) > 0   ||
 | 
						|
                        GetLevelByClass(CLASS_TYPE_PALADIN, oTarget) > 0 )
 | 
						|
                   {
 | 
						|
                    nHP = 2;
 | 
						|
                   }
 | 
						|
 | 
						|
 | 
						|
                   // *** End of Tarashon's regenerate system modifiers *** //
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    /* Bug fix 21/07/03: Andrew. Lowered regen to 3 HP per round, instead of 10. */
 | 
						|
    effect eRegen = EffectRegenerate(nHP, 6.0);
 | 
						|
 | 
						|
    effect eVis = EffectVisualEffect(VFX_IMP_HEAD_NATURE);
 | 
						|
    effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
 | 
						|
 | 
						|
    effect eLink = EffectLinkEffects(eRegen, eDur);
 | 
						|
 | 
						|
    int nMeta = GetMetaMagicFeat();
 | 
						|
    int nLevel = (GetCasterLevel(OBJECT_SELF)/2)+1;
 | 
						|
 | 
						|
    if (nMeta == METAMAGIC_EXTEND)
 | 
						|
    {
 | 
						|
        nLevel *= 2;
 | 
						|
    }
 | 
						|
 | 
						|
    // Stacking Spellpass, 2003-07-07, Georg   ... just in case
 | 
						|
    RemoveEffectsFromSpell(oTarget, GetSpellId());
 | 
						|
 | 
						|
    SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId(), FALSE));
 | 
						|
 | 
						|
    //Apply effects and VFX
 | 
						|
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, HoursToSeconds(nLevel));
 | 
						|
    ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
 | 
						|
 | 
						|
}
 |