Initial upload
Initial upload. PRC8 has been added. Module compiles, PRC's default AI & treasure scripts have been integrated. Started work on top hak for SLA / Ability / Scripting modifications.
This commit is contained in:
174
_removed/x2_s0_infestmag.nss
Normal file
174
_removed/x2_s0_infestmag.nss
Normal file
@@ -0,0 +1,174 @@
|
||||
///::///////////////////////////////////////////////
|
||||
//:: Infestation of Maggots
|
||||
//:: X2_S0_InfestMag.nss
|
||||
//:: Copyright (c) 2001 Bioware Corp.
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
You infest a target with maggotlike creatures.
|
||||
They deal 1d4 points of temporary Constitution
|
||||
damage each round. Each round the subject makes
|
||||
a new Fortitude save. The spell ends if the
|
||||
target succeeds at its saving throw.
|
||||
|
||||
If the targets constitution would drop to 0
|
||||
through this spell, and the player is playing
|
||||
on hardcore difficulty, the target is
|
||||
is killed instantly.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Andrew Nobbs
|
||||
//:: Created On: Nov 19, 2002
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Rewritten By: Georg Zoeller, Oct 2003
|
||||
|
||||
#include "NW_I0_SPELLS"
|
||||
#include "x2_I0_SPELLS"
|
||||
#include "x2_inc_spellhook"
|
||||
|
||||
void RunInfestImpact(object oTarget, object oCaster, int nSaveDC, int nMetaMagic);
|
||||
|
||||
void main()
|
||||
{
|
||||
|
||||
object oTarget = GetSpellTargetObject();
|
||||
object oCaster = OBJECT_SELF;
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// 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
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// This spell no longer stacks. If there is one of that type, thats ok
|
||||
//--------------------------------------------------------------------------
|
||||
if (GetHasSpellEffect(GetSpellId(),oTarget) )
|
||||
{
|
||||
FloatingTextStrRefOnCreature(100775,OBJECT_SELF,FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Calculate the duration
|
||||
//--------------------------------------------------------------------------
|
||||
int nMetaMagic = GetMetaMagicFeat();
|
||||
int nDuration = 10 + GetCasterLevel(OBJECT_SELF);
|
||||
|
||||
if (nMetaMagic == METAMAGIC_EXTEND)
|
||||
{
|
||||
nDuration = nDuration * 2;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Setup DC, effects and projectile timing
|
||||
//--------------------------------------------------------------------------
|
||||
float fDist = GetDistanceToObject(oTarget);
|
||||
float fDelay = fDist/25.0;
|
||||
int nDC = GetSpellSaveDC();
|
||||
effect eDur = EffectVisualEffect ( VFX_DUR_FLIES );
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Do Safety check, SR and Saves...
|
||||
//--------------------------------------------------------------------------
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId()));
|
||||
|
||||
if(MyResistSpell(OBJECT_SELF, oTarget, fDelay) == 0)
|
||||
{
|
||||
//---------------------------------------------------------------
|
||||
// Apply Effects, Schedule damage ticks
|
||||
//---------------------------------------------------------------
|
||||
DelayCommand(fDelay, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, oTarget,RoundsToSeconds(nDuration)));
|
||||
SetLocalInt(oTarget,"XP2_L_SPELL_SAVE_DC_" + IntToString (SPELL_INFESTATION_OF_MAGGOTS), nDC);
|
||||
DelayCommand(fDelay+0.1f, RunInfestImpact(oTarget,oCaster,nDC, nMetaMagic));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void RunInfestImpact(object oTarget, object oCaster, int nSaveDC, int nMetaMagic)
|
||||
{
|
||||
//--------------------------------------------------------------------------
|
||||
// Check if the spell has expired (check also removes effects)
|
||||
//--------------------------------------------------------------------------
|
||||
if (GZGetDelayedSpellEffectsExpired(SPELL_INFESTATION_OF_MAGGOTS,oTarget,oCaster))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (GetIsDead(oTarget) == FALSE)
|
||||
{
|
||||
int nDC = GetLocalInt(oTarget,"XP2_L_SPELL_SAVE_DC_" + IntToString (SPELL_INFESTATION_OF_MAGGOTS));
|
||||
|
||||
if (!MySavingThrow(SAVING_THROW_FORT,oTarget,nSaveDC,SAVING_THROW_TYPE_DISEASE,OBJECT_SELF))
|
||||
{
|
||||
//------------------------------------------------------------------
|
||||
// Setup Ability Score Damage
|
||||
//------------------------------------------------------------------
|
||||
effect eVis = EffectVisualEffect ( VFX_IMP_DISEASE_S );
|
||||
int nDamage = d4(1);
|
||||
|
||||
if ( nMetaMagic == METAMAGIC_MAXIMIZE )
|
||||
{
|
||||
nDamage = 4;
|
||||
}
|
||||
else if ( nMetaMagic == METAMAGIC_EMPOWER )
|
||||
{
|
||||
nDamage = nDamage + (nDamage/2);
|
||||
}
|
||||
|
||||
effect eDam = ExtraordinaryEffect ( EffectAbilityDecrease( ABILITY_CONSTITUTION, nDamage));
|
||||
|
||||
//------------------------------------------------------------------
|
||||
// The trick that allows this spellscript to do stacking ability
|
||||
// score damage (which is not possible to do from normal scripts)
|
||||
// is that the ability score damage is done from a delaycommanded
|
||||
// function which will sever the connection between the effect
|
||||
// and the SpellId
|
||||
//------------------------------------------------------------------
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT,eVis,oTarget);
|
||||
|
||||
//------------------------------------------------------------------
|
||||
// If the target already is down to 3 points of constitution,
|
||||
// kill him. For immortal creatures, end the spell
|
||||
// This only kicks in in Hardcore+ difficulty
|
||||
//------------------------------------------------------------------
|
||||
if (GetAbilityScore(oTarget,ABILITY_CONSTITUTION)<=3 && GetGameDifficulty() >= GAME_DIFFICULTY_CORE_RULES)
|
||||
{
|
||||
if (!GetImmortal(oTarget))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(100932,oTarget);
|
||||
effect eKill = EffectDamage(GetCurrentHitPoints(oTarget)+1);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT,eKill,oTarget);
|
||||
effect eVfx = EffectVisualEffect(VFX_IMP_DEATH_L);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT,eVfx,oTarget);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eDam, oTarget);
|
||||
DelayCommand(6.0, RunInfestImpact(oTarget,oCaster,nSaveDC, nMetaMagic));
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
DeleteLocalInt(oTarget,"XP2_L_SPELL_SAVE_DC_" + IntToString (SPELL_INFESTATION_OF_MAGGOTS));
|
||||
GZRemoveSpellEffects(SPELL_INFESTATION_OF_MAGGOTS, oTarget);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user