This commit is contained in:
@@ -1,102 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Regenerate Ring / Circle
|
||||
//:: sp_regen_ring_circle.nss
|
||||
//:: Jaysyn - PRC8 2025-08-01
|
||||
//::
|
||||
//:: Group fast healing aura spells
|
||||
//::///////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
if (!X2PreSpellCastCode()) return;
|
||||
|
||||
PRCSetSchool(GetSpellSchool(PRCGetSpellId()));
|
||||
|
||||
object oCaster = OBJECT_SELF;
|
||||
int nSpellId = PRCGetSpellId();
|
||||
int nMetamagic = PRCGetMetaMagicFeat();
|
||||
int nCasterLevel = PRCGetCasterLevel(oCaster);
|
||||
int nDuration = 10 + (nCasterLevel / 2);
|
||||
int nMaxTargets = nCasterLevel / 2;
|
||||
float fMaxDistance = 30.0;
|
||||
int nRegenRate = 1;
|
||||
|
||||
if (nSpellId == 9999)
|
||||
{
|
||||
nRegenRate = 3;
|
||||
}
|
||||
|
||||
if (nMetamagic == METAMAGIC_EXTEND)
|
||||
{
|
||||
nDuration *= 2;
|
||||
}
|
||||
|
||||
location lCaster = GetLocation(oCaster);
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fMaxDistance, lCaster, FALSE, OBJECT_TYPE_CREATURE);
|
||||
int nCount = 0;
|
||||
|
||||
while (GetIsObjectValid(oTarget) && nCount < nMaxTargets)
|
||||
{
|
||||
if (!GetIsEnemy(oCaster, oTarget) &&
|
||||
GetRacialType(oTarget) != RACIAL_TYPE_UNDEAD &&
|
||||
GetRacialType(oTarget) != RACIAL_TYPE_CONSTRUCT)
|
||||
{
|
||||
int nCurrentHP = GetCurrentHitPoints(oTarget);
|
||||
int nInitialHP = GetLocalInt(oTarget, "INITIAL_HIT_POINTS");
|
||||
|
||||
if (nCurrentHP > nInitialHP)
|
||||
{
|
||||
nInitialHP = nCurrentHP;
|
||||
SetLocalInt(oTarget, "INITIAL_HIT_POINTS", nInitialHP);
|
||||
}
|
||||
|
||||
int nCurrentRegen = GetLocalInt(oTarget, "REGEN_RATE");
|
||||
int nExistingDuration = 0;
|
||||
int bSameSpell = FALSE;
|
||||
|
||||
effect e = GetFirstEffect(oTarget);
|
||||
while (GetIsEffectValid(e))
|
||||
{
|
||||
if (GetEffectTag(e) == "REGEN_WOUNDS")
|
||||
{
|
||||
if (nCurrentRegen == nRegenRate)
|
||||
{
|
||||
bSameSpell = TRUE;
|
||||
nExistingDuration = GetEffectDurationRemaining(e) / 6;
|
||||
if (nRegenRate >= nCurrentRegen) RemoveEffect(oTarget, e);
|
||||
else return;
|
||||
}
|
||||
else if (nRegenRate >= nCurrentRegen)
|
||||
{
|
||||
RemoveEffect(oTarget, e);
|
||||
}
|
||||
}
|
||||
e = GetNextEffect(oTarget);
|
||||
}
|
||||
|
||||
if (bSameSpell)
|
||||
{
|
||||
nDuration += nExistingDuration;
|
||||
}
|
||||
|
||||
SetLocalInt(oTarget, "REGEN_RATE", nRegenRate);
|
||||
SetLocalInt(oTarget, "REGEN_WOUNDS_REMAINING", nDuration);
|
||||
|
||||
effect eVis = EffectVisualEffect(1330/* VFX_DUR_BF_IOUN_STONE_GREEN */);
|
||||
effect eRegen = EffectRunScript("rs_regen_wounds", "rs_regen_wounds", "rs_regen_wounds", 6.0f, IntToString(nRegenRate));
|
||||
eRegen = SetEffectSpellId(eRegen, nSpellId);
|
||||
eRegen = EffectLinkEffects(eVis, eRegen);
|
||||
eRegen = TagEffect(eRegen, "REGEN_WOUNDS");
|
||||
|
||||
PRCRemoveEffectsFromSpell(oTarget, nSpellId);
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eRegen, oTarget, RoundsToSeconds(nDuration));
|
||||
|
||||
nCount++;
|
||||
}
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, fMaxDistance, lCaster, FALSE, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
Reference in New Issue
Block a user