2025/08/05 Update

Added Regenerate Ring spell.
Added Regenerate Circle spell.
Added Leonal's Roar spell.
Added Summon Nature's Ally I-IX spells.
Added Lion of Talisid PrC.
Added Favored of the Companions Feat.
Corrected Regenerate Serious Wounds level.
Corrected Regenerate Critical Wounds level.
Removed Baelnorn class and added Baelnorn template.
This commit is contained in:
Jaysyn904
2025-08-05 18:58:54 -04:00
parent 20281d284d
commit dd67019103
158 changed files with 93051 additions and 64695 deletions

View File

@@ -52,8 +52,9 @@ void main()
effect ePoly;
int nPoly;
int nMetaMagic = PRCGetMetaMagicFeat();
int nDuration = GetLevelByClass(CLASS_TYPE_DRUID, oPC)
+ GetLevelByClass(CLASS_TYPE_ARCANE_HIEROPHANT, oPC);
int nDuration = GetLevelByClass(CLASS_TYPE_DRUID, oPC)
+ GetLevelByClass(CLASS_TYPE_LION_OF_TALISID, oPC)
+ GetLevelByClass(CLASS_TYPE_ARCANE_HIEROPHANT, oPC);
int bShiftingDruid = GetLocalInt(GetModule(),"PRC_DRUID_USES_SHIFTING");

View File

@@ -0,0 +1,143 @@
//::///////////////////////////////////////////////
//:: Leonal's Roar
//:: [sp_leonalsroar.nss]
//:: Created by: Jaysyn
//:: Created on: 2025-08-01 19:06:26
//:://////////////////////////////////////////////
//::
/*
Leonal's Roar
(Book of Exalted Deeds)
Evocation [Good, Sonic]
Level: Druid 8,
Components: V
Casting Time: 1 standard action
Range: 40 ft.
Target: Nongood creatures in a 40-ft.-radius spread centered on you
Duration: Instantaneous
Saving Throw: Fortitude partial
Spell Resistance: Yes
This spell has the effect of a holy word, and it additionally
deals 2d6 points of sonic damage to nongood creatures in the area.
A successful Fortitude saving throw negates the sonic damage, but
not the other effects of the spell.
*/
//:
//::///////////////////////////////////////////////
#include "prc_inc_spells"
#include "prc_alterations"
#include "prc_add_spell_dc"
void main()
{
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
SetLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_EVOCATION);
if (!X2PreSpellCastCode()) return;
object oTarget;
object oCaster = OBJECT_SELF;
int nSpellId = PRCGetSpellId();
int CasterLvl = PRCGetCasterLevel(oCaster);
int nPenetr = CasterLvl + SPGetPenetr();
int nSaveDC;// = PRCGetSpellSaveDC(9999 /*SPELL_LEONALS_ROAR*/, SPELL_SCHOOL_EVOCATION, oCaster);
int n35ed = GetPRCSwitch(PRC_35ED_WORD_OF_FAITH);
// Spell visuals
effect eDeaf = EffectDeaf();
effect eStun = EffectStunned();
effect eConfuse = PRCEffectConfused();
effect eDeath = EffectDeath();
effect eVis = EffectVisualEffect(VFX_IMP_DEATH);
effect eSmite = EffectVisualEffect(VFX_FNF_WORD);
effect eSonicVFX = EffectVisualEffect(VFX_IMP_SONIC);
effect eUnsummon = EffectVisualEffect(VFX_IMP_UNSUMMON);
effect eMind = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED);
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
effect eLink;
if(nSpellId == SPELL_FOT_LEONALS_ROAR)
{
int nCHA = GetAbilityModifier(ABILITY_CHARISMA, oCaster);
nSaveDC = 20 + nCHA;
}
else
{
int nSaveDC = PRCGetSpellSaveDC(SPELL_LEONALS_ROAR, SPELL_SCHOOL_EVOCATION, oCaster);
}
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eSmite, PRCGetSpellTargetLocation());
oTarget = MyFirstObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, PRCGetSpellTargetLocation());
while (GetIsObjectValid(oTarget))
{
if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, oCaster)
&& GetAlignmentGoodEvil(oTarget) != ALIGNMENT_GOOD)
{
float fDelay = PRCGetRandomDelay(0.5, 2.0);
SignalEvent(oTarget, EventSpellCastAt(oCaster, SPELL_LEONALS_ROAR));
if (!PRCDoResistSpell(oCaster, oTarget, nPenetr, fDelay))
{
// Added: Leonal's Roar Sonic Damage (Fort negates)
if (!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nSaveDC, SAVING_THROW_TYPE_SONIC, oCaster, fDelay))
{
int nDmg = d6(2);
effect eSonicDmg = EffectDamage(nDmg, DAMAGE_TYPE_SONIC);
effect eSonicLink = EffectLinkEffects(eSonicVFX, eSonicDmg);
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eSonicLink, oTarget));
}
// Retain Holy Word's VFX sonic flash for hit feedback
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eSonicVFX, oTarget);
if (GetIsObjectValid(GetMaster(oTarget)))
{
if (GetAssociateType(oTarget) == ASSOCIATE_TYPE_SUMMONED)
{
DeathlessFrenzyCheck(oTarget);
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eUnsummon, oTarget));
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, SupernaturalEffect(eDeath), oTarget));
}
}
else if (!PRCGetHasEffect(EFFECT_TYPE_DEAF, oTarget))
{
int nHD = GetHitDice(oTarget);
// Deaf 1d4 rounds
eLink = EffectLinkEffects(eDur, eDeaf);
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(d4()), TRUE, -1, CasterLvl));
if ((nHD < 12 && !n35ed) || (n35ed && nHD < CasterLvl))
{
eLink = EffectLinkEffects(eMind, eStun);
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, RoundsToSeconds(1), TRUE, -1, CasterLvl));
}
if ((nHD < 8 && n35ed) || (n35ed && nHD < CasterLvl - 5))
{
eLink = EffectLinkEffects(eSonicVFX, eConfuse);
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, TurnsToSeconds(d10()), TRUE, -1, CasterLvl));
}
if ((nHD < 4 && n35ed) || (n35ed && nHD < CasterLvl - 10))
{
DeathlessFrenzyCheck(oTarget);
if (!GetIsImmune(oTarget, IMMUNITY_TYPE_DEATH))
{
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
DelayCommand(fDelay, SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDeath, oTarget));
}
}
}
}
}
oTarget = MyNextObjectInShape(SHAPE_SPHERE, RADIUS_SIZE_COLOSSAL, PRCGetSpellTargetLocation());
}
DeleteLocalInt(OBJECT_SELF, "X2_L_LAST_SPELLSCHOOL_VAR");
}

View File

@@ -0,0 +1,102 @@
//::///////////////////////////////////////////////
//:: 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();
}

View File

@@ -0,0 +1,700 @@
//::///////////////////////////////////////////////
//:: Summon Nature's Ally
//:: sp_sum_nat_ally
//::
//:://////////////////////////////////////////////
/*
Carries out the summoning of the appropriate
creature for the Summon Nature's Ally Series
of spells 1 to 9
*/
//:://////////////////////////////////////////////
//:: Created By: Jaysyn
//:: Created On: 2025-08-01 22:02:26
//:://////////////////////////////////////////////
#include "prc_inc_spells"
void main()
{
if(!X2PreSpellCastCode()) return;
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
//Declare major variables
object oCaster = OBJECT_SELF;
//int nSpellId = PRCGetSpellId();
int nSpellId = GetSpellId();
int nRandom;
int nMetaMagic = PRCGetMetaMagicFeat();
int nSwitch = GetPRCSwitch(PRC_SUMMON_ROUND_PER_LEVEL);
float fDuration = nSwitch == 0 ? HoursToSeconds(24) :
RoundsToSeconds(PRCGetCasterLevel(oCaster) * nSwitch);
if(nMetaMagic & METAMAGIC_EXTEND)
fDuration *= 2;
string sSummon;
int nVFX;
switch(nSpellId)
{
//:: Summon Nature's Ally 1
case SPELL_SUMMON_NATURES_ALLY_1_DIREBADGER:
{
sSummon = "nw_s_badgerdire";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case SPELL_SUMMON_NATURES_ALLY_1_DIRERAT:
{
sSummon = "prc_s_direrat001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case SPELL_SUMMON_NATURES_ALLY_1_DOG:
{
sSummon = "prc_s_dog001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case SPELL_SUMMON_NATURES_ALLY_1_HAWK:
{
sSummon = "prc_s_hawk001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case SPELL_SUMMON_NATURES_ALLY_1_TINY_VIPER:
{
sSummon = "prc_s_tnviper001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
//:: Summon Nature's Ally 2
case SPELL_SUMMON_NATURES_ALLY_2_DIREBOAR:
{
sSummon = "nw_s_boardire";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case SPELL_SUMMON_NATURES_ALLY_2_COOSHEE:
{
sSummon = "prc_s_cooshee001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case SPELL_SUMMON_NATURES_ALLY_2_WOLF:
{
sSummon = "prc_s_wolf001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case SPELL_SUMMON_NATURES_ALLY_2_SMALL_VIPER:
{
sSummon = "prc_s_smviper001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case SPELL_SUMMON_NATURES_ALLY_2_BLACKBEAR:
{
sSummon = "prc_s_blkbear001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
//:: Summon Nature's Ally 3
case SPELL_SUMMON_NATURES_ALLY_3_BROWNBEAR:
{
sSummon = "prc_s_brnbear001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case SPELL_SUMMON_NATURES_ALLY_3_DIREWOLK:
{
sSummon = "nw_s_wolfdire";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case SPELL_SUMMON_NATURES_ALLY_3_LARGE_VIPER:
{
sSummon = "prc_s_lgviper001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case SPELL_SUMMON_NATURES_ALLY_3_LEOPARD:
{
sSummon = "prc_s_leopard001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case SPELL_SUMMON_NATURES_ALLY_3_SATYR:
{
sSummon = "prc_s_satyr001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
//:: Summon Nature's Ally 4
case SPELL_SUMMON_NATURES_ALLY_4_LION:
{
sSummon = "prc_s_lion001";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case SPELL_SUMMON_NATURES_ALLY_4_POLAR_BEAR:
{
sSummon = "prc_s_plrbear001";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case SPELL_SUMMON_NATURES_ALLY_4_DIRE_SPIDER:
{
sSummon = "nw_s_spiddire";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case SPELL_SUMMON_NATURES_ALLY_4_HUGE_VIPER:
{
sSummon = "prc_s_hgviper001";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case SPELL_SUMMON_NATURES_ALLY_4_WEREBOAR:
{
sSummon = "prc_s_wrboar001";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
//:: Summon Nature's Ally 5
case SPELL_SUMMON_NATURES_ALLY_5_MED_AIR:
{
sSummon = "x1_s_airsmall";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case SPELL_SUMMON_NATURES_ALLY_5_MED_EARTH:
{
sSummon = "x1_s_earthsmall";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case SPELL_SUMMON_NATURES_ALLY_5_MED_FIRE:
{
sSummon = "x1_s_firesmall";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case SPELL_SUMMON_NATURES_ALLY_5_MED_WATER:
{
sSummon = "x1_s_watersmall";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case SPELL_SUMMON_NATURES_ALLY_5_DIRE_BEAR:
{
sSummon = "nw_s_beardire";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
//:: Summon Nature's Ally 6
case SPELL_SUMMON_NATURES_ALLY_6_LG_AIR:
{
sSummon = "prc_s_airlarge";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case SPELL_SUMMON_NATURES_ALLY_6_LG_EARTH:
{
sSummon = "prc_s_earthlarge";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case SPELL_SUMMON_NATURES_ALLY_6_LG_FIRE:
{
sSummon = "prc_s_firelarge";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case SPELL_SUMMON_NATURES_ALLY_6_LG_WATER:
{
sSummon = "prc_s_waterlarge";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case SPELL_SUMMON_NATURES_ALLY_6_DIRETIGER:
{
sSummon = "nw_s_diretiger";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
//:: Summon Nature's Ally 7
case SPELL_SUMMON_NATURES_ALLY_7_BULETTE:
{
sSummon = "prc_s_bueltte001";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case SPELL_SUMMON_NATURES_ALLY_7_INVSTALKER:
{
sSummon = "prc_s_invstlk001";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case SPELL_SUMMON_NATURES_ALLY_7_PIXIE:
{
sSummon = "prc_s_pixie001";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case SPELL_SUMMON_NATURES_ALLY_7_GORGON:
{
sSummon = "prc_s_gorgon001";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case SPELL_SUMMON_NATURES_ALLY_7_MANTICORE:
{
sSummon = "prc_s_mntcore001";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
//:: Summon Nature's Ally 8
case SPELL_SUMMON_NATURES_ALLY_8_GR_AIR:
{
sSummon = "nw_s_airgreat";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case SPELL_SUMMON_NATURES_ALLY_8_GR_EARTH:
{
sSummon = "nw_s_earthgreat";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case SPELL_SUMMON_NATURES_ALLY_8_GR_FIRE:
{
sSummon = "nw_s_firegreat";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case SPELL_SUMMON_NATURES_ALLY_8_GR_WATER:
{
sSummon = "nw_s_watergreat";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case SPELL_SUMMON_NATURES_ALLY_8_NYMPH:
{
sSummon = "prc_s_nymph001";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
//:: Summon Nature's Ally 9
case SPELL_SUMMON_NATURES_ALLY_9_ELD_AIR:
{
sSummon = "nw_s_airelder";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case SPELL_SUMMON_NATURES_ALLY_9_ELD_EARTH:
{
sSummon = "nw_s_earthelder";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case SPELL_SUMMON_NATURES_ALLY_9_ELD_FIRE:
{
sSummon = "nw_s_fireelder";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case SPELL_SUMMON_NATURES_ALLY_9_ELD_WATER:
{
sSummon = "nw_s_waterelder";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case SPELL_SUMMON_NATURES_ALLY_9_ARANEA:
{
sSummon = "prc_s_aranea001";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
}
if (DEBUG) DoDebug("sp_summon_nature: oCaster " +GetName(oCaster)+", GetSpellId " +IntToString(GetSpellId())+", sSummon " +sSummon);
effect eSummon = EffectSummonCreature(sSummon, nVFX);
//Apply the VFX impact and summon effect
MultisummonPreSummon();
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, PRCGetSpellTargetLocation(), fDuration);
DelayCommand(0.5, AugmentSummonedCreature(sSummon));
PRCSetSchool();
}
/* switch(nSpellId)
{
case SPELL_SUMMON_NATURES_ALLY_1:
{
nRandom = Random(5)+1;
switch(nRandom)
{
case 1:
{
sSummon = "nw_s_badgerdire";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case 2:
{
sSummon = "prc_s_direrat001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case 3:
{
sSummon = "prc_s_dog001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case 4:
{
sSummon = "prc_s_hawk001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case 5:
{
sSummon = "prc_s_tnviper001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
}
}
case SPELL_SUMMON_NATURES_ALLY_2:
{
nRandom = Random(5)+1;
switch(nRandom)
{
case 1:
{
sSummon = "nw_s_boardire";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case 2:
{
sSummon = "prc_s_cooshee001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case 3:
{
sSummon = "prc_s_wolf001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case 4:
{
sSummon = "prc_s_smviper001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case 5:
{
sSummon = "prc_s_blkbear001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
}
}
case SPELL_SUMMON_NATURES_ALLY_3:
{
nRandom = Random(5)+1;
switch(nRandom)
{
case 1:
{
sSummon = "prc_s_brnbear001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case 2:
{
sSummon = "nw_s_wolfdire";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case 3:
{
sSummon = "prc_s_lgviper001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case 4:
{
sSummon = "prc_s_leopard001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
case 5:
{
sSummon = "prc_s_satyr001";
nVFX = VFX_FNF_SUMMON_MONSTER_1;
break;
}
}
}
case SPELL_SUMMON_NATURES_ALLY_4:
{
nRandom = Random(5)+1;
switch(nRandom)
{
case 1:
{
sSummon = "prc_s_lion001";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case 2:
{
sSummon = "prc_s_plrbear001";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case 3:
{
sSummon = "nw_s_spiddire";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case 4:
{
sSummon = "prc_s_hgviper001";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case 5:
{
sSummon = "prc_s_wrboar001";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
}
}
case SPELL_SUMMON_NATURES_ALLY_5:
{
nRandom = Random(5)+1;
switch(nRandom)
{
case 1:
{
sSummon = "x1_s_airsmall";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case 2:
{
sSummon = "x1_s_earthsmall";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case 3:
{
sSummon = "x1_s_firesmall";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case 4:
{
sSummon = "x1_s_watersmall";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case 5:
{
sSummon = "nw_s_beardire";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
}
}
case SPELL_SUMMON_NATURES_ALLY_6:
{
nRandom = Random(5)+1;
switch(nRandom)
{
case 1:
{
sSummon = "prc_s_airlarge";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case 2:
{
sSummon = "prc_s_earthlarge";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case 3:
{
sSummon = "prc_s_firelarge";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case 4:
{
sSummon = "prc_s_waterlarge";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
case 5:
{
sSummon = "nw_s_diretiger";
nVFX = VFX_FNF_SUMMON_MONSTER_2;
break;
}
}
}
case SPELL_SUMMON_NATURES_ALLY_7:
{
nRandom = Random(5)+1;
switch(nRandom)
{
case 1:
{
sSummon = "prc_s_bueltte001";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case 2:
{
sSummon = "prc_s_invstlk001";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case 3:
{
sSummon = "prc_s_pixie001";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case 4:
{
sSummon = "prc_s_gorgon001";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case 5:
{
sSummon = "prc_s_mntcore001";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
}
}
case SPELL_SUMMON_NATURES_ALLY_8:
{
nRandom = Random(5)+1;
switch(nRandom)
{
case 1:
{
sSummon = "nw_s_airgreat";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case 2:
{
sSummon = "nw_s_earthgreat";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case 3:
{
sSummon = "nw_s_firegreat";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case 4:
{
sSummon = "nw_s_watergreat";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case 5:
{
sSummon = "prc_s_nymph001";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
}
}
case SPELL_SUMMON_NATURES_ALLY_9:
{
nRandom = Random(5)+1;
switch(nRandom)
{
case 1:
{
sSummon = "nw_s_airelder";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case 2:
{
sSummon = "nw_s_earthelder";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case 3:
{
sSummon = "nw_s_fireelder";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case 4:
{
sSummon = "nw_s_waterelder";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
case 5:
{
sSummon = "prc_s_aranea001";
nVFX = VFX_FNF_SUMMON_MONSTER_3;
break;
}
}
}
*/
/*
// [TODO] Turn this into a proper template
if (GetHasFeat(FEAT_SUMMON_ALIEN, oCaster) || GetHasSpellEffect(VESTIGE_ZCERYLL, oCaster))
{
sSummon = "pseudo"+sSummon;
}
else
{
sSummon = "nw_s_"+sSummon;
} */

View File

@@ -30,7 +30,7 @@ void main()
object oGlyph = CreateObject(OBJECT_TYPE_PLACEABLE, "x2_plc_glyph", PRCGetSpellTargetLocation());
object oTest = GetNearestObjectByTag("X2_PLC_GLYPH",oGlyph);
if(GetIsObjectValid(oTest) && GetDistanceBetween(oGlyph, oTest) <5.0f)
if(GetIsObjectValid(oTest) && GetDistanceBetween(oGlyph, oTest) < 5.0f)
{
FloatingTextStrRefOnCreature(84612, oCaster);
DestroyObject(oGlyph);

View File

@@ -41,7 +41,8 @@ void main()
effect eVis = EffectVisualEffect(VFX_IMP_POLYMORPH);
effect ePoly;
int nMetaMagic = PRCGetMetaMagicFeat();
int nDuration = GetLevelByClass(CLASS_TYPE_DRUID);
int nDuration = GetLevelByClass(CLASS_TYPE_DRUID)
+ GetLevelByClass(CLASS_TYPE_LION_OF_TALISID);
if (!GetLocalInt(GetModule(),"X3_NO_SHAPESHIFT_SPELL_CHECK"))
{ // check to see if abort due to being mounted
if (PRCHorseGetIsMounted(oTarget))