Further file organization
Further file organization
This commit is contained in:
94
nwn/nwnprc/trunk/newspellbook/tob_jpm_fireb.nss
Normal file
94
nwn/nwnprc/trunk/newspellbook/tob_jpm_fireb.nss
Normal file
@@ -0,0 +1,94 @@
|
||||
#include "tob_inc_move"
|
||||
#include "tob_movehook"
|
||||
////#include "prc_alterations"
|
||||
#include "inc_newspellbook"
|
||||
|
||||
// Helper functions
|
||||
void DoDamage(object oInitiator, int nDice, int nClass)
|
||||
{
|
||||
location lTarget = GetLocation(oInitiator);
|
||||
float fRange = FeetToMeters(10.0);
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fRange, lTarget, FALSE, OBJECT_TYPE_CREATURE, GetPosition(oInitiator));
|
||||
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oInitiator)
|
||||
{
|
||||
int nDamage = d6(nDice);
|
||||
int nDC = 14 + GetDCAbilityModForClass(nClass, oInitiator);
|
||||
|
||||
nDamage = PRCGetReflexAdjustedDamage(nDamage, oTarget, nDC, SAVING_THROW_TYPE_FIRE);
|
||||
|
||||
effect eLink = EffectDamage(nDamage/2, DAMAGE_TYPE_FIRE);
|
||||
eLink = EffectLinkEffects(eLink, EffectDamage(nDamage/2, DAMAGE_TYPE_MAGICAL));
|
||||
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_IMP_FLAME_M));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
||||
}
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, fRange, lTarget, FALSE, OBJECT_TYPE_CREATURE, GetPosition(oInitiator));
|
||||
}
|
||||
}
|
||||
|
||||
void DoLoop(object oInitiator, int nDice, int nClass)
|
||||
{
|
||||
if(DEBUG) DoDebug("Dice: " + IntToString(nDice));
|
||||
DelayCommand(RoundsToSeconds(9), DoDamage(oInitiator, nDice, nClass));
|
||||
DelayCommand(RoundsToSeconds(8), DoDamage(oInitiator, nDice, nClass));
|
||||
DelayCommand(RoundsToSeconds(7), DoDamage(oInitiator, nDice, nClass));
|
||||
DelayCommand(RoundsToSeconds(6), DoDamage(oInitiator, nDice, nClass));
|
||||
DelayCommand(RoundsToSeconds(5), DoDamage(oInitiator, nDice, nClass));
|
||||
DelayCommand(RoundsToSeconds(4), DoDamage(oInitiator, nDice, nClass));
|
||||
DelayCommand(RoundsToSeconds(3), DoDamage(oInitiator, nDice, nClass));
|
||||
DelayCommand(RoundsToSeconds(2), DoDamage(oInitiator, nDice, nClass));
|
||||
DelayCommand(RoundsToSeconds(1), DoDamage(oInitiator, nDice, nClass));
|
||||
DoDamage(oInitiator, nDice, nClass);
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!PreManeuverCastCode()) return;
|
||||
|
||||
object oInitiator = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
struct maneuver move = EvaluateManeuver(oInitiator, oTarget);
|
||||
|
||||
if(move.bCanManeuver)
|
||||
{
|
||||
// See if they want augmented stance
|
||||
if(GetSpellId() == JPM_SPELL_FIREBIRD_AUGMENTED)
|
||||
{
|
||||
int nSpellID = GetLocalInt(oInitiator, "JPM_SPELL_CURRENT");
|
||||
string sArray = GetLocalString(oInitiator, "JPM_SPELL_CURRENT");
|
||||
|
||||
int nUses = sArray == "" ? GetHasSpell(nSpellID, oInitiator) :
|
||||
persistant_array_get_int(oInitiator, sArray, nSpellID);
|
||||
|
||||
if(nUses)
|
||||
{
|
||||
int nClass = GetPrimaryArcaneClass(oInitiator);
|
||||
int nLevel = GetLocalInt(oInitiator, "JPM_SPELL_CURRENT_LVL");
|
||||
|
||||
if(sArray == "")
|
||||
{
|
||||
DecrementRemainingSpellUses(oInitiator, nSpellID);
|
||||
}
|
||||
else
|
||||
{
|
||||
nUses--;
|
||||
persistant_array_set_int(oInitiator, sArray, nSpellID, nUses);
|
||||
}
|
||||
|
||||
DoLoop(oInitiator, nLevel, nClass);
|
||||
}
|
||||
}
|
||||
// This adds 3 caster levels when using a fire spell
|
||||
SetLocalInt(oInitiator, "ToB_JPM_FireB", TRUE);
|
||||
|
||||
if(GetLocalInt(oInitiator, "ReserveFeatsRunning"))
|
||||
DelayCommand(0.1f, ExecuteScript("prc_reservefeat", oInitiator));
|
||||
|
||||
effect eLink = EffectLinkEffects(EffectDamageResistance(DAMAGE_TYPE_FIRE, 10), EffectVisualEffect(VFX_DUR_ELEMENTAL_SHIELD));
|
||||
eLink = ExtraordinaryEffect(eLink);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user