Baleful Utterance affects detected traps
Baleful Utterance affects detected traps. Tempest offhand attack fix. Minified feat.2da. Started reviewing @Tenjac's incomplete spell scripts. Updated release archive.
This commit is contained in:
parent
51b4141961
commit
bb7073b5c6
BIN
Notes/future spells/Paladin Spells Worksheet.xlsx
Normal file
BIN
Notes/future spells/Paladin Spells Worksheet.xlsx
Normal file
Binary file not shown.
@ -1,46 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Sihlbrane's Grove
|
||||
//:: Regenerate Critical Wounds
|
||||
//:: 00_S0_REGCW
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Regenerate 4 HP per round for 10 rounds +
|
||||
caster level.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Yaballa
|
||||
//:: Created On: 7/9/2003
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "pg_ss_spelltwk"
|
||||
#include "x2_inc_spellhook"
|
||||
//#include "x0_i0_spells"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
/*
|
||||
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())
|
||||
{
|
||||
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
|
||||
// End of Spell Cast Hook
|
||||
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
int nRace = MyPRCGetRacialType(oTarget);
|
||||
int nMetamagic = PRCGetMetaMagicFeat();
|
||||
if((nRace != RACIAL_TYPE_CONSTRUCT) || (nRace != RACIAL_TYPE_UNDEAD))
|
||||
{
|
||||
PRCRemoveEffectsFromSpell(oTarget, GetSpellId());
|
||||
RegenerateWounds(4, oTarget, nMetamagic);
|
||||
}
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Sihlbrane's Grove
|
||||
//:: Regenerate Light Wounds
|
||||
//:: 00_S0_REGLW
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Regenerate 1 HP per round for 10 rounds +
|
||||
caster level.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Yaballa
|
||||
//:: Created On: 7/9/2003
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "pg_ss_spelltwk"
|
||||
#include "x2_inc_spellhook"
|
||||
//#include "x0_i0_spells"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
/*
|
||||
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())
|
||||
{
|
||||
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
|
||||
// End of Spell Cast Hook
|
||||
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
int nRace = MyPRCGetRacialType(oTarget);
|
||||
int nMetamagic = PRCGetMetaMagicFeat();
|
||||
if((nRace != RACIAL_TYPE_CONSTRUCT) || (nRace != RACIAL_TYPE_UNDEAD))
|
||||
{
|
||||
PRCRemoveEffectsFromSpell(oTarget, GetSpellId());
|
||||
RegenerateWounds(1, oTarget, nMetamagic);
|
||||
}
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Sihlbrane's Grove
|
||||
//:: Regenerate Moderate Wounds
|
||||
//:: 00_S0_REGMW
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Regenerate 2 HP per round for 10 rounds +
|
||||
caster level.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Yaballa
|
||||
//:: Created On: 7/9/2003
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "pg_ss_spelltwk"
|
||||
#include "x2_inc_spellhook"
|
||||
//#include "x0_i0_spells"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
/*
|
||||
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())
|
||||
{
|
||||
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
|
||||
// End of Spell Cast Hook
|
||||
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
int nRace = MyPRCGetRacialType(oTarget);
|
||||
int nMetamagic = PRCGetMetaMagicFeat();
|
||||
if((nRace != RACIAL_TYPE_CONSTRUCT) || (nRace != RACIAL_TYPE_UNDEAD))
|
||||
{
|
||||
PRCRemoveEffectsFromSpell(oTarget, GetSpellId());
|
||||
RegenerateWounds(2, oTarget, nMetamagic);
|
||||
}
|
||||
}
|
@ -1,46 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Sihlbrane's Grove
|
||||
//:: Regenerate Moderate Wounds
|
||||
//:: 00_S0_REGSW
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Regenerate 3 HP per round for 10 rounds +
|
||||
caster level.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Yaballa
|
||||
//:: Created On: 7/9/2003
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "pg_ss_spelltwk"
|
||||
#include "x2_inc_spellhook"
|
||||
//#include "x0_i0_spells"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
/*
|
||||
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())
|
||||
{
|
||||
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
|
||||
// End of Spell Cast Hook
|
||||
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
int nRace = MyPRCGetRacialType(oTarget);
|
||||
int nMetamagic = PRCGetMetaMagicFeat();
|
||||
if((nRace != RACIAL_TYPE_CONSTRUCT) || (nRace != RACIAL_TYPE_UNDEAD))
|
||||
{
|
||||
PRCRemoveEffectsFromSpell(oTarget, GetSpellId());
|
||||
RegenerateWounds(3, oTarget, nMetamagic);
|
||||
}
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Sihlbrane's Grove
|
||||
//:: Speed of the Wind
|
||||
//:: 00_S0_SPEEDWIND
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Caster gains +4 Dex and -2 Con for 10 turns
|
||||
per level.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Yaballa
|
||||
//:: Created On: 7/9/2003
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "x2_inc_spellhook"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
|
||||
/*
|
||||
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())
|
||||
{
|
||||
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
|
||||
// End of Spell Cast Hook
|
||||
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// This spell no longer stacks. If there is one of that type, thats ok
|
||||
//--------------------------------------------------------------------------
|
||||
if (GetHasSpellEffect(GetSpellId(), oTarget))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(100775, OBJECT_SELF, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
effect eDex = EffectAbilityIncrease(ABILITY_DEXTERITY, 4);
|
||||
effect eCon = EffectAbilityDecrease(ABILITY_CONSTITUTION, 2);
|
||||
effect eVis1 = EffectVisualEffect(VFX_IMP_IMPROVE_ABILITY_SCORE);
|
||||
effect eVis2 = EffectVisualEffect(VFX_IMP_HEAD_EVIL);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEUTRAL);
|
||||
effect eLink = EffectLinkEffects(eDex, eCon);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
|
||||
int nRace = MyPRCGetRacialType(oTarget);
|
||||
int nDuration = PRCGetCasterLevel(OBJECT_SELF) * 10;
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
|
||||
if(nMetaMagic == METAMAGIC_EXTEND) {
|
||||
nDuration = nDuration * 2; }
|
||||
if((nRace != RACIAL_TYPE_CONSTRUCT) || (nRace != RACIAL_TYPE_UNDEAD))
|
||||
{
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, TurnsToSeconds(nDuration));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis1, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis2, oTarget);
|
||||
}
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Sihlbrane's Grove
|
||||
//:: Spiritual Hammer
|
||||
//:: 00_S0_SPIRO
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Yaballa
|
||||
//:: Created On: 7/9/2003
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "x2_inc_spellhook"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
|
||||
/*
|
||||
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())
|
||||
{
|
||||
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
|
||||
// End of Spell Cast Hook
|
||||
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
int nDuration = PRCGetCasterLevel(OBJECT_SELF);
|
||||
int nAttack = GetBaseAttackBonus(OBJECT_SELF);
|
||||
effect eSummon = EffectSummonCreature("pg_spiritweap", VFX_FNF_SUMMON_MONSTER_1);
|
||||
if(nMetaMagic == METAMAGIC_EXTEND) {
|
||||
nDuration = nDuration * 2; }
|
||||
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, GetSpellTargetLocation(), RoundsToSeconds(nDuration));
|
||||
DelayCommand(1.5f, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAttackIncrease(nAttack - 1), GetAssociate(ASSOCIATE_TYPE_SUMMONED), RoundsToSeconds(nDuration)));
|
||||
}
|
@ -1,67 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Sihlbrane's Grove
|
||||
//:: Tortoise Shell
|
||||
//:: 00_S0_TORTSHELL
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
Caster gains 100 temporary HP and DR 10/-
|
||||
against physical damage for one round/level.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Yaballa
|
||||
//:: Created On: 7/9/2003
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "x2_inc_spellhook"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
void main()
|
||||
{
|
||||
|
||||
/*
|
||||
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())
|
||||
{
|
||||
// If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell
|
||||
return;
|
||||
}
|
||||
|
||||
// End of Spell Cast Hook
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// This spell no longer stacks. If there is one of that type, thats ok
|
||||
//--------------------------------------------------------------------------
|
||||
if (GetHasSpellEffect(GetSpellId(), OBJECT_SELF))
|
||||
{
|
||||
FloatingTextStrRefOnCreature(100775, OBJECT_SELF, FALSE);
|
||||
return;
|
||||
}
|
||||
|
||||
int nDuration = PRCGetCasterLevel(OBJECT_SELF);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
effect eTemp = EffectTemporaryHitpoints(100);
|
||||
effect eDamage1 = EffectDamageResistance(DAMAGE_TYPE_BLUDGEONING, 10);
|
||||
effect eDamage2 = EffectDamageResistance(DAMAGE_TYPE_PIERCING, 10);
|
||||
effect eDamage3 = EffectDamageResistance(DAMAGE_TYPE_SLASHING, 10);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_SPELL_MANTLE_USE);
|
||||
effect eShell = EffectVisualEffect(VFX_DUR_PROT_BARKSKIN);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_SANCTUARY);
|
||||
|
||||
effect eLink = EffectLinkEffects(eTemp, eDamage1);
|
||||
eLink = EffectLinkEffects(eLink, eDamage2);
|
||||
eLink = EffectLinkEffects(eLink, eDamage3);
|
||||
eLink = EffectLinkEffects(eLink, eDur);
|
||||
eLink = EffectLinkEffects(eLink, eShell);
|
||||
|
||||
if(nMetaMagic == METAMAGIC_EXTEND) {
|
||||
nDuration = nDuration * 2; }
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, OBJECT_SELF, RoundsToSeconds(nDuration));
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, OBJECT_SELF);
|
||||
}
|
@ -1,185 +0,0 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Sihlbrane's Grove
|
||||
//:: Spirit Worm
|
||||
//:: 00_S0_WORM
|
||||
//:://////////////////////////////////////////////
|
||||
/*
|
||||
You create a lingering decay in the spirit and
|
||||
body of the target. If the target fails its saving
|
||||
throw, it takes 1 point of temporary Constitution
|
||||
damage each round while the spell lasts (maximum
|
||||
5 points of Constitution). If it makes its save,
|
||||
it does not lose any Constitution but take 1d2
|
||||
points of damage each round while the spell
|
||||
lasts (maximum 5).
|
||||
|
||||
31.12 - Updated to reflect new scirpting.
|
||||
See melf's acid arrow for details.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Yaballa
|
||||
//:: Created On: 6/9/2003
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "pg_spell_CONST"
|
||||
#include "x2_inc_spellhook"
|
||||
//#include "x2_i0_spells"
|
||||
#include "prc_inc_spells"
|
||||
|
||||
const int nSpellID = 1501;
|
||||
|
||||
void RunConImpact(object oTarget, object oCaster);
|
||||
void RunDamImpact(object oTarget, object oCaster, int nMetamagic);
|
||||
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetSpellTargetObject();
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// 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 = PRCGetMetaMagicFeat();
|
||||
int nDuration = PRCGetCasterLevel(OBJECT_SELF);
|
||||
int nTouch = TouchAttackMelee(oTarget);
|
||||
|
||||
if(nDuration < 1) {
|
||||
nDuration = 1; }
|
||||
if(nDuration > 5) {
|
||||
nDuration = 5; }
|
||||
|
||||
if(nMetaMagic == METAMAGIC_EXTEND) {
|
||||
nDuration = nDuration * 2; }
|
||||
//--------------------------------------------------------------------------
|
||||
// Setup VFX
|
||||
//--------------------------------------------------------------------------
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
|
||||
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEGATIVE);
|
||||
//--------------------------------------------------------------------------
|
||||
// Set the VFX to be non dispelable
|
||||
//--------------------------------------------------------------------------
|
||||
eDur = ExtraordinaryEffect(eDur);
|
||||
|
||||
if(!GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, GetSpellId()));
|
||||
if(nTouch > 0)
|
||||
{
|
||||
if(!PRCDoResistSpell(OBJECT_SELF, oTarget))
|
||||
{
|
||||
SetLocalInt(oTarget, "XP2_L_SPELL_SAVE_DC_" + IntToString(nSpellID), GetSpellSaveDC());
|
||||
int nDC = GetLocalInt(oTarget, "XP2_L_SPELL_SAVE_DC_" + IntToString(nSpellID));
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
|
||||
{
|
||||
//----------------------------------------------------------------------
|
||||
// Con decrease
|
||||
//----------------------------------------------------------------------
|
||||
effect eCon = EffectAbilityDecrease(ABILITY_CONSTITUTION, 1);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eCon, oTarget);
|
||||
//----------------------------------------------------------------------
|
||||
// Apply the VFX that is used to track the spells duration
|
||||
//----------------------------------------------------------------------
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, oTarget, RoundsToSeconds(nDuration));
|
||||
object oSelf = OBJECT_SELF; // because OBJECT_SELF is a function
|
||||
DelayCommand(6.0f, RunConImpact(oTarget, oSelf));
|
||||
}
|
||||
//-----------------------------------
|
||||
// Magical damage
|
||||
//-----------------------------------
|
||||
else
|
||||
{
|
||||
int nDam = d2();
|
||||
//-----------------------------------
|
||||
//max damage on critical hit, only once
|
||||
//-----------------------------------
|
||||
if(nTouch == 2) {
|
||||
nDam = 2; }
|
||||
effect eDam = EffectDamage(nDam);
|
||||
//-----------------------------------
|
||||
//update VFX
|
||||
//-----------------------------------
|
||||
eVis = EffectVisualEffect(VFX_IMP_MAGBLUE);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
|
||||
//----------------------------------------------------------------------
|
||||
// Apply the VFX that is used to track the spells duration
|
||||
//----------------------------------------------------------------------
|
||||
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDur, oTarget, RoundsToSeconds(nDuration));
|
||||
object oSelf = OBJECT_SELF; // because OBJECT_SELF is a function
|
||||
DelayCommand(6.0f, RunDamImpact(oTarget, oSelf, nMetaMagic));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RunDamImpact(object oTarget, object oCaster, int nMetaMagic)
|
||||
{
|
||||
if(!GetIsEnemy(oTarget, oCaster)){return;}
|
||||
//--------------------------------------------------------------------------
|
||||
// Check if the spell has expired (check also removes effects)
|
||||
//--------------------------------------------------------------------------
|
||||
if(PRCGetDelayedSpellEffectsExpired(SPELL_SPIRIT_WORM, oTarget, oCaster)) {
|
||||
return; }
|
||||
|
||||
if(GetIsDead(oTarget) == FALSE)
|
||||
{
|
||||
int nDC = GetLocalInt(oTarget, "XP2_L_SPELL_SAVE_DC_" + IntToString(nSpellID));
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
|
||||
{
|
||||
//----------------------------------------------------------------------
|
||||
// Calculate Damage
|
||||
//----------------------------------------------------------------------
|
||||
int nDamage = PRCMaximizeOrEmpower(2, 1, nMetaMagic);
|
||||
effect eDam = EffectDamage(nDamage);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_MAGBLUE);
|
||||
eDam = EffectLinkEffects(eVis, eDam); // flare up
|
||||
ApplyEffectToObject (DURATION_TYPE_INSTANT, eDam, oTarget);
|
||||
DelayCommand(6.0f, RunDamImpact(oTarget, oCaster, nMetaMagic));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RunConImpact(object oTarget, object oCaster)
|
||||
{
|
||||
if(!GetIsEnemy(oTarget, oCaster)){return;}
|
||||
//--------------------------------------------------------------------------
|
||||
// Check if the spell has expired (check also removes effects)
|
||||
//--------------------------------------------------------------------------
|
||||
if(PRCGetDelayedSpellEffectsExpired(SPELL_SPIRIT_WORM, oTarget, oCaster)) {
|
||||
return; }
|
||||
|
||||
if(GetIsDead(oTarget) == FALSE)
|
||||
{
|
||||
int nDC = GetLocalInt(oTarget, "XP2_L_SPELL_SAVE_DC_" + IntToString(nSpellID));
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC))
|
||||
{
|
||||
//----------------------------------------------------------------------
|
||||
// Calculate Damage
|
||||
//----------------------------------------------------------------------
|
||||
effect eCon = EffectAbilityDecrease(ABILITY_CONSTITUTION, 1);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_REDUCE_ABILITY_SCORE);
|
||||
eCon = EffectLinkEffects(eVis, eCon); // flare up
|
||||
ApplyEffectToObject (DURATION_TYPE_INSTANT, eCon, oTarget);
|
||||
DelayCommand(6.0f, RunConImpact(oTarget, oCaster));
|
||||
}
|
||||
}
|
||||
}
|
143
Notes/future spells/prc_c_bladebane.nss
Normal file
143
Notes/future spells/prc_c_bladebane.nss
Normal file
@ -0,0 +1,143 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Short description Bladebane Conversation
|
||||
//:: filename prc_c_bladebane.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
|
||||
|
||||
@author Tenjac
|
||||
@date Created - 7/29/22
|
||||
@updater Jaysyn
|
||||
@updated 2024-10-02 10:47:03
|
||||
//////////////////////////////////////////////////
|
||||
/* Constant defintions */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
const int STAGE_ENTRY = 0;
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Aid functions */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Main function */
|
||||
//////////////////////////////////////////////////
|
||||
#include "inc_dynconv"
|
||||
#include "prc_inc_racial"
|
||||
#include "inc_2dacache"
|
||||
#include "inc_addragebonus"
|
||||
|
||||
void main()
|
||||
{
|
||||
object oPC = GetPCSpeaker();
|
||||
/* Get the value of the local variable set by the conversation script calling
|
||||
* this script. Values:
|
||||
* DYNCONV_ABORTED Conversation aborted
|
||||
* DYNCONV_EXITED Conversation exited via the exit node
|
||||
* DYNCONV_SETUP_STAGE System's reply turn
|
||||
* 0 Error - something else called the script
|
||||
* Other The user made a choice
|
||||
*/
|
||||
int nValue = GetLocalInt(oPC, DYNCONV_VARIABLE);
|
||||
// The stage is used to determine the active conversation node.
|
||||
// 0 is the entry node.
|
||||
int nStage = GetStage(oPC);
|
||||
|
||||
// Check which of the conversation scripts called the scripts
|
||||
if(nValue == 0) // All of them set the DynConv_Var to non-zero value, so something is wrong -> abort
|
||||
return;
|
||||
|
||||
if(nValue == DYNCONV_SETUP_STAGE)
|
||||
{
|
||||
// Check if this stage is marked as already set up
|
||||
// This stops list duplication when scrolling
|
||||
if(!GetIsStageSetUp(nStage, oPC))
|
||||
{
|
||||
// variable named nStage determines the current conversation node
|
||||
// Function SetHeader to set the text displayed to the PC
|
||||
// Function AddChoice to add a response option for the PC. The responses are show in order added
|
||||
if(nStage == STAGE_ENTRY)
|
||||
{
|
||||
// Set the header
|
||||
SetHeader("Choose racial type.");
|
||||
object oPC = GetPCSpeaker(); // The PC object
|
||||
string sName; // Variable to hold the racial type name
|
||||
int racialType; // Variable for the racial type
|
||||
|
||||
// Loop through the specified racial types
|
||||
for (racialType = 0; racialType <= 52; racialType++) // Covers all the default racialtypes + ooze & plant
|
||||
{
|
||||
// Only list specific racial groups
|
||||
if (racialType == 0 || racialType == 1 || racialType == 2 || racialType == 3 || racialType == 4 ||
|
||||
racialType == 5 || racialType == 6 || racialType == 7 || racialType == 8 || racialType == 9 ||
|
||||
racialType == 10 || racialType == 11 || racialType == 12 || racialType == 13 || racialType == 14 ||
|
||||
racialType == 15 || racialType == 16 || racialType == 17 || racialType == 18 || racialType == 19 ||
|
||||
racialType == 20 || racialType == 23 || racialType == 24 || racialType == 25 || racialType == 29 ||
|
||||
racialType == 52)
|
||||
{
|
||||
// Get the racial type name using the current racial type integer
|
||||
sName = Get2DACache("racialtypes", "Constant", racialType); // Use racialType to get the name
|
||||
|
||||
// Only add to the conversation if sName is not empty
|
||||
if (sName != "")
|
||||
{
|
||||
AddChoice(sName, racialType, oPC); // Add the choice to the conversation
|
||||
}
|
||||
}
|
||||
}
|
||||
/* // Set the header
|
||||
SetHeader("Choose racial type.");
|
||||
int i;
|
||||
for (i=0; i <=254; i++)
|
||||
{
|
||||
string sName = Get2daCache("racialtypes", "Constant", i);
|
||||
// Add responses for the PC
|
||||
if(sName != "")
|
||||
{
|
||||
AddChoice(sName, i, oPC);
|
||||
}
|
||||
} */
|
||||
|
||||
MarkStageSetUp(nStage, oPC); // This prevents the setup being run for this stage again until MarkStageNotSetUp is called for it
|
||||
SetDefaultTokens(); // Set the next, previous, exit and wait tokens to default values
|
||||
}
|
||||
//add more stages for more nodes with Else If clauses
|
||||
}
|
||||
|
||||
// Do token setup
|
||||
SetupTokens();
|
||||
}
|
||||
// End of conversation cleanup
|
||||
else if(nValue == DYNCONV_EXITED)
|
||||
{
|
||||
// Add any locals set through this conversation
|
||||
}
|
||||
// Abort conversation cleanup.
|
||||
// NOTE: This section is only run when the conversation is aborted
|
||||
// while aborting is allowed. When it isn't, the dynconvo infrastructure
|
||||
// handles restoring the conversation in a transparent manner
|
||||
else if(nValue == DYNCONV_ABORTED)
|
||||
{
|
||||
// Add any locals set through this conversation
|
||||
}
|
||||
// Handle PC responses
|
||||
else
|
||||
{
|
||||
// variable named nChoice is the value of the player's choice as stored when building the choice list
|
||||
// variable named nStage determines the current conversation node
|
||||
int nChoice = GetChoice(oPC);
|
||||
if(nStage == STAGE_ENTRY)
|
||||
{
|
||||
int n2daLine = nChoice--;
|
||||
SetLocalInt(oPC, "BladebaneRace", n2daLine);
|
||||
// Move to another stage based on response, for example
|
||||
//nStage = STAGE_QUUX;
|
||||
}
|
||||
|
||||
// Store the stage value. If it has been changed, this clears out the choices
|
||||
SetStage(nStage, oPC);
|
||||
}
|
||||
}
|
61
Notes/future spells/sp_angelskin.nss
Normal file
61
Notes/future spells/sp_angelskin.nss
Normal file
@ -0,0 +1,61 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Angelskin
|
||||
//:: FileName sp_angelskin.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Abjuration [Good]
|
||||
Level: Paladin 2
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: Touch
|
||||
Target: Lawful good creature touched
|
||||
Duration: 1 round/level
|
||||
Saving Throw: Will negates (harmless)
|
||||
Spell Resistance: Yes (harmless)
|
||||
|
||||
You touch your ally with the holy symbol and invoke the blessed words. An opalescent
|
||||
glow spreads across her skin, imbuing it with a pearl-like sheen.
|
||||
|
||||
The subject gains damage reduction 5/evil.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/22/21
|
||||
//:: Updated by: Jaysyn
|
||||
//:: Updated on: 2024-10-01 08:58:45
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
|
||||
if(nMetaMagic & METAMAGIC_EXTEND)
|
||||
{
|
||||
fDur += fDur;
|
||||
}
|
||||
|
||||
// Alignment check
|
||||
if((GetAlignmentGoodEvil(oTarget) == ALIGNMENT_GOOD) && (GetAlignmentLawChaos(oTarget) == ALIGNMENT_LAWFUL))
|
||||
{
|
||||
effect eDR = EffectDamageReduction(5, DAMAGE_POWER_PLUS_THREE, 0);
|
||||
effect eVFX = EffectVisualEffect(VFX_DUR_AURA_WHITE);
|
||||
effect eSpell = EffectLinkEffects(eDR, eVFX);
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSpell, oTarget, fDur);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Invalid target alignment
|
||||
SendMessageToPC(oPC, "This spell must target a lawful good creature.");
|
||||
}
|
||||
}
|
69
Notes/future spells/sp_bladebane.nss
Normal file
69
Notes/future spells/sp_bladebane.nss
Normal file
@ -0,0 +1,69 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Bladebane
|
||||
//:: FileName sp_bladebane.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Transmutation
|
||||
Level: Paladin 2, Cleric 3, Sorcerer 4, Wizard 4,
|
||||
Components: V, S, M,
|
||||
Casting Time: 1 standard action
|
||||
Range: Touch
|
||||
Target: Weapon touched
|
||||
Duration: 1 round/level
|
||||
Saving Throw: Will negates (harmless, object)
|
||||
Spell Resistance: Yes (harmless, object)
|
||||
|
||||
You impart a deadly quality to a single bladed weapon
|
||||
(any slashing weapon) for a short time.
|
||||
Bladebane confers the bane ability on the weapon touched,
|
||||
against a creature type (and subtype, if necessary) of
|
||||
your choice.
|
||||
The weapon's enhancement bonus increases by +2 against
|
||||
the appropriate creature type, and it deals +2d6 points
|
||||
of bonus damage to those creatures.
|
||||
|
||||
Material Component: A drop of blood and ruby dust worth 500 gp.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/27/2022
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
#include "inc_dynconv"
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
object oWeapon = PRCGetSpellTargetObject();
|
||||
|
||||
//only bladed
|
||||
if(GetDamageTypeOfWeapon(oWeapon) != DAMAGE_TYPE_SLASHING)
|
||||
{
|
||||
SendMessageToPC(oPC, "Invalid target. This spell must target slashing weapons.");
|
||||
return;
|
||||
}
|
||||
|
||||
//+2 increase
|
||||
int nBonus = IPGetWeaponEnhancementBonus(oWeapon) + 2;
|
||||
|
||||
//convo for race
|
||||
SetLocalInt(oPC, "BladebaneRace");
|
||||
StartDynamicConversation("prc_c_bladebane", oPC, DYNCONV_EXIT_NOT_ALLOWED, FALSE, TRUE, oPC);
|
||||
|
||||
int nRace = GetLocalInt(oPC, "BladebaneRace");
|
||||
|
||||
itemproperty iEnhance = ItemPropertyEnhancementBonusVsRace(nRace, nBonus);
|
||||
itemproperty iDam = ItemPropertyDamageBonusVsRace(nRace, IP_CONST_DAMAGETYPE_SLASHING, IP_CONST_DAMAGEBONUS_2d6);
|
||||
|
||||
IPSafeAddItemProperty(oWeapon, iEnhance, fDur);
|
||||
IPSafeAddItemProperty(oWeapon, iDam, fDur);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
114
Notes/future spells/sp_unmovobj.nss
Normal file
114
Notes/future spells/sp_unmovobj.nss
Normal file
@ -0,0 +1,114 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Unmovable Object
|
||||
//:: FileName sp_unmovobj.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Evocation
|
||||
Level: Paladin 4,
|
||||
Components: V, S,
|
||||
Casting Time: 1 action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 round/level
|
||||
|
||||
Charging yourself with divine energy, you bond yourself
|
||||
to the ground beneath your feet and become the epitome
|
||||
of stability.
|
||||
The spell ends instantly if you move from your current
|
||||
position and does not work unless you are in contact
|
||||
with the ground.
|
||||
|
||||
You gain a +2 bonus to Strength, a +4 bonus to Constitution,
|
||||
a +2 resistance bonus on saving throws, and a +4 dodge
|
||||
bonus to AC.
|
||||
|
||||
You gain a +10 bonus to resist a bull rush (this bonus does
|
||||
not include the +4 bonus for being "exceptionally stable",
|
||||
but exceptionally stable creatures do get that bonus in
|
||||
addition to the bonus from this spell).
|
||||
|
||||
You gain a +10 bonus to resist all trip attacks (but not
|
||||
to your attempts to trip someone in return).
|
||||
|
||||
You gain a +10 resistance bonus on any roll made to resist
|
||||
an effect that would cause you to move from your current
|
||||
location.
|
||||
|
||||
For example, while you are not immune to enchantment
|
||||
effects, you gain a +10 resistance bonus on saving throws
|
||||
(or Charisma checks, in the case of effects such as charm
|
||||
person) to resist commands that would cause you to leave
|
||||
your current position.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 8/4/22
|
||||
//:: Updated By: Jaysyn
|
||||
//:: Updated on: 2024-10-01 09:23:56
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void StillCheck(object oPC, float fDur, location lLoc)
|
||||
{
|
||||
if (!GetIsInCombat(oPC) || GetLocation(oPC) != lLoc)
|
||||
{
|
||||
effect eToDispel = GetFirstEffect(oPC);
|
||||
while (GetIsEffectValid(eToDispel))
|
||||
{
|
||||
if (GetEffectSpellId(eToDispel) == SPELL_UNMOVABLE_OBJECT)
|
||||
{
|
||||
RemoveEffect(oPC, eToDispel);
|
||||
}
|
||||
eToDispel = GetNextEffect(oPC);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
DelayCommand(1.0f, StillCheck(oPC, fDur - 1.0f, lLoc));
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
if (!X2PreSpellCastCode()) return;
|
||||
|
||||
PRCSetSchool(SPELL_SCHOOL_EVOCATION); // Set spell school
|
||||
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
|
||||
if (nMetaMagic & METAMAGIC_EXTEND)
|
||||
{
|
||||
fDur += fDur;
|
||||
}
|
||||
|
||||
// Delay to check if combat has ended, if so remove the effects
|
||||
DelayCommand(1.0f, StillCheck(oPC, fDur - 1.0f, GetLocation(oPC)));
|
||||
|
||||
// Apply cutscene immobilization
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneImmobilize(), oPC, fDur);
|
||||
|
||||
// Apply ability increases: +2 STR, +4 CON
|
||||
effect eLink = EffectLinkEffects(EffectAbilityIncrease(ABILITY_STRENGTH, 2),
|
||||
EffectAbilityIncrease(ABILITY_CONSTITUTION, 4));
|
||||
|
||||
// Apply +2 to all saving throws
|
||||
eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, 2, SAVING_THROW_TYPE_ALL));
|
||||
|
||||
// Apply +4 dodge bonus to AC
|
||||
eLink = EffectLinkEffects(eLink, EffectACIncrease(4, AC_DODGE_BONUS));
|
||||
|
||||
// Apply +10 resistance vs fear effects (to resist effects that move the target)
|
||||
eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, 10, SAVING_THROW_TYPE_FEAR));
|
||||
|
||||
// Apply all linked effects to the caster
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, fDur);
|
||||
|
||||
// Apply visual effect for AC bonus
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_AC_BONUS), oPC);
|
||||
|
||||
PRCSetSchool(); // Reset spell school (correctly used)
|
||||
}
|
Binary file not shown.
BIN
_backup/PRC8_20240925.7z
Normal file
BIN
_backup/PRC8_20240925.7z
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -33,14 +33,23 @@ void main()
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DESTRUCTION);
|
||||
|
||||
if(GetIsObjectValid(oTarget))
|
||||
{
|
||||
int nType = GetObjectType(oTarget);
|
||||
if((nType == OBJECT_TYPE_DOOR || nType == OBJECT_TYPE_PLACEABLE) && !GetPlotFlag(oTarget))
|
||||
{
|
||||
/* if((nType == OBJECT_TYPE_DOOR || nType == OBJECT_TYPE_PLACEABLE ) && !GetPlotFlag(oTarget))
|
||||
{
|
||||
effect eDamage = EffectDamage(9999, DAMAGE_TYPE_MAGICAL);
|
||||
effect eLink = EffectLinkEffects(eDamage, eVis);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
||||
}
|
||||
} */
|
||||
int nType = GetObjectType(oTarget);
|
||||
|
||||
if ((nType == OBJECT_TYPE_DOOR || nType == OBJECT_TYPE_PLACEABLE || nType == OBJECT_TYPE_TRIGGER) &&
|
||||
!GetPlotFlag(oTarget) &&
|
||||
GetIsTrapped(oTarget))
|
||||
{
|
||||
effect eDamage = EffectDamage(9999, DAMAGE_TYPE_MAGICAL);
|
||||
effect eLink = EffectLinkEffects(eDamage, eVis);
|
||||
ApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
||||
}
|
||||
else if(nType == OBJECT_TYPE_CREATURE)
|
||||
{
|
||||
PRCSignalSpellEvent(oTarget, TRUE, INVOKE_BALEFUL_UTTERANCE, OBJECT_SELF);
|
||||
|
@ -29,6 +29,29 @@ void ApplyTwoWeaponDefense(object oPC, object oSkin)
|
||||
int ACBonus = 0;
|
||||
int tempestLevel = GetLevelByClass(CLASS_TYPE_TEMPEST, oPC);
|
||||
|
||||
if(tempestLevel >= 7)
|
||||
{
|
||||
ACBonus = 3;
|
||||
}
|
||||
else if(tempestLevel >= 4)
|
||||
{
|
||||
ACBonus = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
ACBonus = 1;
|
||||
}
|
||||
|
||||
itemproperty ipACBonus = ItemPropertyACBonus(ACBonus);
|
||||
|
||||
SetCompositeBonus(oSkin, "TwoWeaponDefenseBonus", ACBonus, ITEM_PROPERTY_AC_BONUS);
|
||||
}
|
||||
|
||||
/* void ApplyTwoWeaponDefense(object oPC, object oSkin)
|
||||
{
|
||||
int ACBonus = 0;
|
||||
int tempestLevel = GetLevelByClass(CLASS_TYPE_TEMPEST, oPC);
|
||||
|
||||
if(tempestLevel < 4)
|
||||
{
|
||||
ACBonus = 1;
|
||||
@ -45,7 +68,7 @@ void ApplyTwoWeaponDefense(object oPC, object oSkin)
|
||||
itemproperty ipACBonus = ItemPropertyACBonus(ACBonus);
|
||||
|
||||
SetCompositeBonus(oSkin, "TwoWeaponDefenseBonus", ACBonus, ITEM_PROPERTY_AC_BONUS);
|
||||
}
|
||||
} */
|
||||
|
||||
void RemoveTwoWeaponDefense(object oPC, object oSkin)
|
||||
{
|
||||
@ -70,8 +93,8 @@ void ApplyExtraAttacks(object oPC)
|
||||
{
|
||||
RemoveExtraAttacks(oPC);
|
||||
int nIncrease = 0;
|
||||
if(GetHasFeat(FEAT_SUPREME_TWO_WEAPON_FIGHTING, oPC)) nIncrease = 2;
|
||||
else if(GetHasFeat(FEAT_GREATER_TWO_WEAPON_FIGHTING, oPC)) nIncrease = 1;
|
||||
if(GetHasFeat(FEAT_SUPREME_TWO_WEAPON_FIGHTING, oPC)) nIncrease = 4;
|
||||
else if(GetHasFeat(FEAT_GREATER_TWO_WEAPON_FIGHTING, oPC)) nIncrease = 3;
|
||||
|
||||
ApplyEffectToObject(DURATION_TYPE_PERMANENT, TagEffect(ExtraordinaryEffect(EffectModifyAttacks(nIncrease)), "TempestTWF"), oPC);
|
||||
}
|
||||
@ -87,7 +110,7 @@ void main()
|
||||
object oWeapL = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC);
|
||||
|
||||
int armorType = GetArmorType(oArmor);
|
||||
if (oArmor == OBJECT_INVALID) armorType = ARMOR_TYPE_LIGHT;
|
||||
if (oArmor == OBJECT_INVALID) armorType = ARMOR_TYPE_CLOTH;
|
||||
|
||||
string nMes = "";
|
||||
|
||||
|
Binary file not shown.
@ -3166,15 +3166,11 @@ Duration: 1 round/level (D)
|
||||
Saving Throw: No
|
||||
Spell Resistance: None
|
||||
|
||||
By casting aura of the sun, you fill the area around you with warm, glowing light that eliminates natural
|
||||
shadows and hampers magical darkness.Any creature attempting to cast a spell from the shadow subschool or
|
||||
a spell with the darkness descriptor within an aura of the sun must succeed on a caster level check (DC 11 +
|
||||
your caster level), or the spell fails. Areas of magical darkness originating from 3rd-level or lower spells
|
||||
and effects are temporarily suppressed when overlapping with an aura of the sun. Creatures that take penalties
|
||||
in bright light also take them while within an aura of the sun, and an undead creature takes 1d6 points of positive
|
||||
energy damage at the end of its turn every round that it spends within the spell's area.Furthermore, any creature
|
||||
attempting to hide within the aura takes a -4 penalty on Hide checks.
|
||||
By casting aura of the sun, you fill the area around you with warm, glowing light that eliminates natural shadows and hampers magical darkness.Any creature attempting to cast a spell from the shadow subschool or a spell with the darkness descriptor within an aura of the sun must succeed on a caster level check (DC 11 + your caster level), or the spell fails. Areas of magical darkness originating from 3rd-level or lower spells and effects are temporarily suppressed when overlapping with an aura of the sun. Creatures that take penalties
|
||||
in bright light also take them while within an aura of the sun, and an undead creature takes 1d6 points of positive energy damage at the end of its turn every round that it spends within the spell's area.Furthermore, any creature attempting to hide within the aura takes a -4 penalty on Hide checks.
|
||||
|
||||
This effect is centered on you and moves with you.
|
||||
|
||||
Anyone who enters the aura immediately becomes subject to its effect, but creatures that leave are no longer affected.
|
||||
</entry>
|
||||
<entry id="13026" lang="en" sex="m">Righteous Aura</entry>
|
||||
|
Loading…
x
Reference in New Issue
Block a user