Further file organization
Further file organization
This commit is contained in:
89
nwn/nwnprc/trunk/scripts/prc_drgfr_channl.nss
Normal file
89
nwn/nwnprc/trunk/scripts/prc_drgfr_channl.nss
Normal file
@@ -0,0 +1,89 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Dragonfire Channeling
|
||||
//:: prc_drgfr_channl.nss
|
||||
//::///////////////////////////////////////////////
|
||||
/*
|
||||
Handles the Dragonfire Channeling feat
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Fox
|
||||
//:: Created On: Jan 09, 2008
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
|
||||
#include "prc_alterations"
|
||||
#include "prc_inc_spells"
|
||||
#include "prc_inc_sneak"
|
||||
#include "prc_inc_turning"
|
||||
|
||||
void main()
|
||||
{
|
||||
object oPC = OBJECT_SELF;
|
||||
|
||||
//make sure there's TU uses left
|
||||
if (!GetHasFeat(FEAT_TURN_UNDEAD,oPC))
|
||||
{
|
||||
FloatingTextStringOnCreature("You are out of Turn Undead uses for the day.", oPC, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//use up one
|
||||
DecrementRemainingFeatUses(OBJECT_SELF,FEAT_TURN_UNDEAD);
|
||||
|
||||
effect eHealVis = EffectVisualEffect(VFX_IMP_HEALING_S);
|
||||
effect eHurtVis = EffectVisualEffect(VFX_IMP_SUNSTRIKE);
|
||||
|
||||
int nDC = 10 + GetAbilityModifier(ABILITY_CHARISMA, oPC)
|
||||
+ ((GetTurningClassLevel()+1)/2);
|
||||
int nDieSize = 6;
|
||||
int nNumberOfDice = (GetTurningClassLevel()+1)/2;
|
||||
int nDamage;
|
||||
location lPC = GetLocation(oPC);
|
||||
location lTarget = PRCGetSpellTargetLocation();
|
||||
float fWidth = FeetToMeters(15.0f);
|
||||
float fDelay;
|
||||
vector vOrigin = GetPosition(oPC);
|
||||
effect eDamage;
|
||||
object oTarget;
|
||||
int nSpellID = GetSpellId();
|
||||
int nDamageType = GetDragonfireDamageType(oPC);
|
||||
int nSaveType = (nDamageType == DAMAGE_TYPE_ACID) ? SAVING_THROW_TYPE_ACID :
|
||||
(nDamageType == DAMAGE_TYPE_COLD) ? SAVING_THROW_TYPE_ACID :
|
||||
(nDamageType == DAMAGE_TYPE_ELECTRICAL) ? SAVING_THROW_TYPE_ELECTRICITY :
|
||||
(nDamageType == DAMAGE_TYPE_FIRE) ? SAVING_THROW_TYPE_ACID :
|
||||
SAVING_THROW_TYPE_SONIC;
|
||||
|
||||
// Loop over targets in the cone shape
|
||||
oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, fWidth, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oPC &&
|
||||
spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oPC)
|
||||
)
|
||||
{
|
||||
// Let the AI know
|
||||
PRCSignalSpellEvent(oTarget, TRUE, nSpellID, oPC);
|
||||
// Roll damage
|
||||
nDamage = 0;
|
||||
int i;
|
||||
for (i = 0; i < nNumberOfDice; i++)
|
||||
nDamage += Random(nDieSize) + 1;
|
||||
|
||||
// Adjust damage according to Reflex Save, Evasion or Improved Evasion
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, nSaveType);
|
||||
|
||||
if(nDamage > 0)
|
||||
{
|
||||
fDelay = GetDistanceBetweenLocations(lPC, GetLocation(oTarget)) / 20.0f;
|
||||
eDamage = EffectDamage(nDamage, nDamageType);
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDamage, oTarget));
|
||||
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eHurtVis, oTarget));
|
||||
}// end if - There was still damage remaining to be dealt after adjustments
|
||||
|
||||
}// end if - Target validity check
|
||||
|
||||
// Get next target
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPELLCONE, fWidth, lTarget, TRUE, OBJECT_TYPE_CREATURE | OBJECT_TYPE_DOOR | OBJECT_TYPE_PLACEABLE);
|
||||
}// end while - Target loop
|
||||
|
||||
}
|
Reference in New Issue
Block a user