120 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
//::///////////////////////////////////////////////
 | 
						|
//:: Breath Weapon for Dragon Disciple Class
 | 
						|
//:: x2_s2_discbreath
 | 
						|
//:: Copyright (c) 2003Bioware Corp.
 | 
						|
//:://////////////////////////////////////////////
 | 
						|
/*
 | 
						|
 | 
						|
  Damage Type is Fire
 | 
						|
  Save is Reflex
 | 
						|
  Shape is cone, 30' == 10m
 | 
						|
 | 
						|
  Level      Damage      Save
 | 
						|
  ---------------------------
 | 
						|
  3          2d10         19
 | 
						|
  7          4d10         19
 | 
						|
  10          6d10        19
 | 
						|
 | 
						|
  after 10:
 | 
						|
   damage: 6d10  + 1d10 per 3 levels after 10
 | 
						|
   savedc: increasing by 1 every 4 levels after 10
 | 
						|
 | 
						|
 | 
						|
 | 
						|
*/
 | 
						|
//:://///////////////////////////////////////////
 | 
						|
//:: Created By: Georg Zoeller
 | 
						|
//:: Created On: June, 17, 2003
 | 
						|
//:://///////////////////////////////////////////
 | 
						|
#include "NW_I0_SPELLS"
 | 
						|
void main()
 | 
						|
{
 | 
						|
 | 
						|
    int nType = GetSpellId();
 | 
						|
    object oKey = GetItemPossessedBy(OBJECT_SELF,"wkdkey");
 | 
						|
    int nDamageDice;
 | 
						|
    int nSaveDC = 19;
 | 
						|
 | 
						|
    int nLevel = GetLevelByClass(37,OBJECT_SELF);// 37 = red dragon disciple
 | 
						|
 | 
						|
    if (nLevel <7)
 | 
						|
    {
 | 
						|
        nDamageDice = 2;
 | 
						|
    }
 | 
						|
    else if (nLevel <10)
 | 
						|
    {
 | 
						|
        nDamageDice = 4;
 | 
						|
    }
 | 
						|
    else if (nLevel ==10)
 | 
						|
    {
 | 
						|
        nDamageDice = 6;
 | 
						|
    }
 | 
						|
    else if(oKey != OBJECT_INVALID)
 | 
						|
    {
 | 
						|
    nDamageDice = 12;
 | 
						|
    }
 | 
						|
    else
 | 
						|
    {
 | 
						|
      nDamageDice = 6+((nLevel -10)/3);
 | 
						|
      nSaveDC = nSaveDC + ((nLevel -10)/4);
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
    int nDamage = d10(nDamageDice);
 | 
						|
 | 
						|
    //Declare major variables
 | 
						|
    float fDelay;
 | 
						|
    object oTarget;
 | 
						|
    effect eVis, eBreath;
 | 
						|
 | 
						|
    int nPersonalDamage;
 | 
						|
 | 
						|
    eVis = EffectVisualEffect(494);
 | 
						|
    ApplyEffectAtLocation(DURATION_TYPE_INSTANT,eVis,GetSpellTargetLocation());
 | 
						|
 | 
						|
    //Get first target in spell area
 | 
						|
    oTarget = GetFirstObjectInShape(SHAPE_SPELLCONE, 10.0, GetSpellTargetLocation(), TRUE,  OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR  | OBJECT_TYPE_PLACEABLE);
 | 
						|
 | 
						|
    while(GetIsObjectValid(oTarget))
 | 
						|
    {
 | 
						|
        nPersonalDamage = nDamage;
 | 
						|
        if(oTarget != OBJECT_SELF && !GetIsReactionTypeFriendly(oTarget))
 | 
						|
        {
 | 
						|
            //Fire cast spell at event for the specified target
 | 
						|
            SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId()));
 | 
						|
            //Adjust the damage based on the Reflex Save, Evasion and Improved Evasion.
 | 
						|
            //Determine effect delay
 | 
						|
            fDelay = GetDistanceBetween(OBJECT_SELF, oTarget)/20;
 | 
						|
            if(MySavingThrow(SAVING_THROW_REFLEX, oTarget, nSaveDC, SAVING_THROW_TYPE_FIRE))
 | 
						|
            {
 | 
						|
                nPersonalDamage  = nPersonalDamage/2;
 | 
						|
                if(GetHasFeat(FEAT_EVASION, oTarget) || GetHasFeat(FEAT_IMPROVED_EVASION, oTarget))
 | 
						|
                {
 | 
						|
                    nPersonalDamage = 0;
 | 
						|
                }
 | 
						|
            }
 | 
						|
            else if(GetHasFeat(FEAT_IMPROVED_EVASION, oTarget))
 | 
						|
            {
 | 
						|
                nPersonalDamage = nPersonalDamage/2;
 | 
						|
            }
 | 
						|
            if (nPersonalDamage > 0)
 | 
						|
            {
 | 
						|
                //Set Damage and VFX
 | 
						|
                eBreath = EffectDamage(nPersonalDamage, DAMAGE_TYPE_FIRE);
 | 
						|
                eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
 | 
						|
                //Apply the VFX impact and effects
 | 
						|
                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
 | 
						|
                DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_INSTANT, eBreath, oTarget));
 | 
						|
             }
 | 
						|
        }
 | 
						|
        //Get next target in spell area
 | 
						|
        oTarget = GetNextObjectInShape(SHAPE_SPELLCONE, 10.0, GetSpellTargetLocation(), TRUE,  OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR  | OBJECT_TYPE_PLACEABLE);
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 |