Initial upload.
Adding base PRC 4.19a files to repository.
This commit is contained in:
27
trunk/users/Tenjac/spells/Template.nss
Normal file
27
trunk/users/Tenjac/spells/Template.nss
Normal file
@@ -0,0 +1,27 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name
|
||||
//:: FileName sp_.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/28/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
100
trunk/users/Tenjac/spells/prc_axiowater.nss
Normal file
100
trunk/users/Tenjac/spells/prc_axiowater.nss
Normal file
@@ -0,0 +1,100 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Axiomatic Water Impact Script
|
||||
//:: FileName prc_axiowater.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Transmutation [Lawful]
|
||||
Level: Cleric 1, Paladin 1,
|
||||
Components: V, S, M,
|
||||
Casting Time: 1 minute
|
||||
Range: Touch
|
||||
Target: Flask of water touched
|
||||
Duration: Instantaneous
|
||||
Saving Throw: Will negates (object)
|
||||
Spell Resistance: Yes (object)
|
||||
|
||||
You speak the ancient, slippery words as you pour the iron and silver into the flask. Despite the fact that there
|
||||
is more powder than will fit in the container, all of it dissolves, leaving a flask of water dotted with motes of gunmetal gray.
|
||||
|
||||
This transmutation imbues a flask (1 pint) of water with the order of law, turning it into axiomatic water. Axiomati
|
||||
water damages chaotic outsiders the way holy water damages undead and evil outsiders. A flask of axiomatic water can
|
||||
be thrown as a splash weapon. Treat this attack as a ranged touch attack with a range increment of 10 feet. A flask
|
||||
breaks if thrown against the body of a corporeal creature, but to use it against an incorporeal creature, the bearer
|
||||
must open the flask and pout the axiomatic water out onto the target. Thus, a character can douse an incorporeal
|
||||
creature with axiomatic water only if he is adjacent to it. Doing so is a ranged touch attack that does not provoke
|
||||
attacks of opportunity.
|
||||
|
||||
A direct hit by a flask of axiomatic water deals 2d4 points of damage to a chaotic outsider. Each such creature
|
||||
within 5 feet of the point where the flask hits takes 1 point of damage from the splash.
|
||||
|
||||
Material Component: 5 pounds of powdered iron and silver (worth 25 gp).
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 6/10/2022
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
#include "prc_inc_sp_tch"
|
||||
|
||||
void main()
|
||||
{
|
||||
location lTarget = GetSpellTargetLocation();
|
||||
float fRadius = FeetToMeters(5);
|
||||
int nTouch;
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_HEAD_HOLY);
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
//Targeted a creature
|
||||
if (GetIsObjectValid(oTarget) == TRUE)
|
||||
{
|
||||
nTouch = PRCDoRangedTouchAttack(oTarget);
|
||||
}
|
||||
|
||||
//Hit
|
||||
if(nTouch >= 1)
|
||||
{
|
||||
int nDirectDam = d4(2);
|
||||
}
|
||||
|
||||
//Critical
|
||||
if(nTouch == 2)
|
||||
{
|
||||
nDam += nDam;
|
||||
}
|
||||
|
||||
effect eDam = EffectDamage(nDam, DAMAGE_TYPE_DIVINE);
|
||||
object oDoNotDam = oTarget;
|
||||
|
||||
//Outsider
|
||||
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_OUTSIDER)
|
||||
{
|
||||
//Chaotic
|
||||
if(GetAlignmentLawChaos(oTarget) == ALIGNMENT_CHAOTIC)
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
|
||||
oTarget = MyGetFirstObjectInShape(SHAPE_SPHERE, fRadius, lTarget);
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oDoNotDam)
|
||||
{
|
||||
//Outsider
|
||||
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_OUTSIDER)
|
||||
{
|
||||
//Chaotic
|
||||
if(GetAlignmentLawChaos(oTarget) == ALIGNMENT_CHAOTIC)
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(1, DAMAGE_TYPE_DIVINE), oTarget);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
MyGetNextObjectInShape(SHAPE_SPHERE, fRadius, lTarget);
|
||||
}
|
||||
}
|
||||
|
||||
|
115
trunk/users/Tenjac/spells/prc_c_bladebane.nss
Normal file
115
trunk/users/Tenjac/spells/prc_c_bladebane.nss
Normal file
@@ -0,0 +1,115 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Short description Bladebane Conversation
|
||||
//:: filename prc_c_bladebane.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
|
||||
|
||||
@author Tenjac
|
||||
@date Created - 7/29/22
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "inc_dynconv"
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Constant defintions */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
const int STAGE_ENTRY = 0;
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Aid functions */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
/* Main function */
|
||||
//////////////////////////////////////////////////
|
||||
|
||||
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.");
|
||||
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);
|
||||
}
|
||||
}
|
70
trunk/users/Tenjac/spells/prc_evnt_ssf.nss
Normal file
70
trunk/users/Tenjac/spells/prc_evnt_ssf.nss
Normal file
@@ -0,0 +1,70 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Smite of Sacred Fire
|
||||
//:: FileName sp_smitesacfire.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Evocation [Good]
|
||||
Level: Paladin 2,
|
||||
Components: V, DF,
|
||||
Casting Time: 1 swift action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 round/level; see text
|
||||
|
||||
You must cast this spell in the same round when you
|
||||
attempt a smite attack. If the attack hits, you deal
|
||||
an extra 2d6 points of damage to the target of the
|
||||
smite. Whether or not you succeed on the smite attempt,
|
||||
during each subsequent round of the spell?s duration,
|
||||
you deal an extra 2d6 points of damage on any successful
|
||||
melee attack against the target you attempted to smite.
|
||||
The spell ends prematurely after any round when you do not
|
||||
attempt a melee attack against the target you previously
|
||||
attempted to smite, or if you fail to hit with any of
|
||||
your attacks in a round.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/25/2022
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void main()
|
||||
{
|
||||
object oSpellOrigin = OBJECT_SELF;
|
||||
// find the weapon
|
||||
object oWeapon = PRCGetSpellCastItem(oSpellOrigin);
|
||||
// find the target of the spell
|
||||
object oTarget = PRCGetSpellTargetObject(oSpellOrigin);
|
||||
|
||||
//Hit in the last round
|
||||
if(GetHasSpellEffect(SPELL_SMITE_SACRED_FIRE_HIT))
|
||||
{
|
||||
//Target of the original smite
|
||||
if(GetLocalInt(oTarget, "PRCSSFTarget"));
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(DAMAGE_TYPE_DIVINE, d6(2)), oTarget);
|
||||
ActionCastSpellOnSelf(SPELL_SMITE_SACRED_FIRE_HIT);
|
||||
}
|
||||
}
|
||||
|
||||
else //We've missed; effect ends, make sure this doesn't trigger the first time
|
||||
{
|
||||
effect eToDispel = GetFirstEffect(oSpellOrigin);
|
||||
|
||||
while(GetIsEffectValid(eToDispel))
|
||||
{
|
||||
if(GetEffectSpellId(eToDispel) == SPELL_SMITE_OF_SACRED_FIRE)
|
||||
{
|
||||
RemoveEffect(oSpellOrigin, eToDispel);
|
||||
}
|
||||
eToDispel = GetNextEffect(oSpellOrigin);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
42
trunk/users/Tenjac/spells/prc_rightaura.nss
Normal file
42
trunk/users/Tenjac/spells/prc_rightaura.nss
Normal file
@@ -0,0 +1,42 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Righteous Aura On Death
|
||||
//:: FileName prc_rightaura.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/20/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
object oPC = OBJECT_SELF;
|
||||
int nDice = min(20, PRCGetCasterLevel(oPC) * 2);
|
||||
location lLoc = GetLocation(oPC);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_STRIKE_HOLY), lLoc);
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(20), lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
||||
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_GOOD)
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(d6(nDice)), oTarget);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HOLY_AID), oTarget);
|
||||
}
|
||||
|
||||
if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL)
|
||||
{
|
||||
int nDam = d6(nDice);
|
||||
//Double damage for undead
|
||||
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD) nDam+=nDam;
|
||||
effect eLink = EffectLinkEffects(EffectVisualEffect(VFX_IMP_HOLY_AID), EffectDamage(DAMAGE_TYPE_DIVINE, nDam));
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
||||
}
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(20), lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
}
|
115
trunk/users/Tenjac/spells/sp_algnaurdisc.nss
Normal file
115
trunk/users/Tenjac/spells/sp_algnaurdisc.nss
Normal file
@@ -0,0 +1,115 @@
|
||||
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Aligned Aura Discarge
|
||||
//:: FileName sp_algnaurdisc.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/25/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
location lLoc = GetLocation(oPC);
|
||||
int nDC;
|
||||
int nAlign;
|
||||
int nAlignTarget;
|
||||
|
||||
if (GetHasSpellEffect(SPELL_ALIGNED_AURA_LAW,oPC)) nAlign == ALIGNMENT_LAWFUL;
|
||||
else if(GetHasSpellEffect(SPELL_ALIGNED_AURA_CHAOS,oPC)) nAlign = ALIGNMENT_CHAOTIC;
|
||||
else if (GetHasSpellEffect(SPELL_ALIGNED_AURA_GOOD,oPC)) nAlign = ALIGNMENT_GOOD;
|
||||
else if (GetHasSpellEffect(SPELL_ALIGNED_AURA_EVIL,oPC)) nAlign = ALIGNMENT_EVIL;
|
||||
else SendMessageToPC(oPC, "Invalid alignment passed in script sp_algnaurdisc.nss");
|
||||
|
||||
//Get duration left
|
||||
int nEffectDuration, nEffectDurationRemaining;
|
||||
effect eEffect = GetFirstEffect(OBJECT_SELF);
|
||||
while(GetIsEffectValid(eEffect))
|
||||
{
|
||||
if(GetEffectSpellId(eEffect) == SPELL_ALIGNED_AURA_LAW)
|
||||
{
|
||||
nEffectDuration = GetEffectDuration(eEffect);
|
||||
nEffectDurationRemaining = GetEffectDurationRemaining(eEffect);
|
||||
nAlign = ALIGNMENT_LAWFUL;
|
||||
}
|
||||
else if(GetSpellId(eEffect) == SPELL_ALIGNED_AURA_CHAOS)
|
||||
{
|
||||
nEffectDuration = GetEffectDuration(eEffect);
|
||||
nEffectDurationRemaining = GetEffectDurationRemaining(eEffect);
|
||||
nAlign = ALIGNMENT_CHAOTIC;
|
||||
}
|
||||
else if(GetSpellId(eEffect) == SPELL_ALIGNED_AURA_GOOD)
|
||||
{
|
||||
nEffectDuration = GetEffectDuration(eEffect);
|
||||
nEffectDurationRemaining = GetEffectDurationRemaining(eEffect);
|
||||
nAlign = ALIGNMENT_GOOD;
|
||||
}
|
||||
else if(GetSpellId(eEffect) == SPELL_ALIGNED_AURA_EVIL)
|
||||
{
|
||||
nEffectDuration = GetEffectDuration(eEffect);
|
||||
nEffectDurationRemaining = GetEffectDurationRemaining(eEffect);
|
||||
nAlign = ALIGNMENT_EVIL;
|
||||
}
|
||||
eEffect = GetNextEffect(OBJECT_SELF);
|
||||
}
|
||||
//GetEffectDurationRemaining returns seconds, need rounds
|
||||
int nDice = nEffectDurationRemaining / 6;
|
||||
int nDam = d4(min(15, nDice));
|
||||
|
||||
//Do the AoE
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE,FeetToMeters(60.0), lLoc);
|
||||
{
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oPC)
|
||||
{
|
||||
//lawful or chaotic
|
||||
if(nAlign == ALIGNMENT_LAWFUL || nAlign == ALIGNMENT_CHAOTIC) nAlignTarget = GetAlignmentLawChaos(oTarget);
|
||||
else if (nAlign == ALIGNMENT_GOOD || nAlign == ALIGNMENT_EVIL) nAlignTarget = GetAlignmentGoodEvil(oTarget);
|
||||
|
||||
//Same alignment, heal
|
||||
if(nAlign == nAlignTarget)
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(nDam, oTarget), oTarget);
|
||||
}
|
||||
//Opposing alignment, damage
|
||||
if(nAlign != nAlignTarget)
|
||||
{
|
||||
nDC = PRCGetSaveDC(oTarget, oPC);
|
||||
//SR
|
||||
if(!PRCDoResistSpell(oPC, oTarget, nCasterLvl + SPGetPenetr()))
|
||||
{
|
||||
//Fort Save half
|
||||
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_DIVINE)
|
||||
{
|
||||
nDam = nDam/2;
|
||||
}
|
||||
effect eDam = PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_MAGICAL);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_DIVINE_STRIKE_HOLY);
|
||||
effect eLink = EffectLinkEffects(eDam, eVis);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(60.0), lLoc);
|
||||
}
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
68
trunk/users/Tenjac/spells/sp_alignedaura.nss
Normal file
68
trunk/users/Tenjac/spells/sp_alignedaura.nss
Normal file
@@ -0,0 +1,68 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Aligned Aura
|
||||
//:: FileName sp_alignedaura.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
|
||||
Abjuration
|
||||
Level: Blackguard 4, Cleric 4, Paladin 4,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: 20 ft. or 60 ft.
|
||||
Area: 20-ft.-radius emanation or 60-ft.-radius burst, centered on you
|
||||
Duration: 1 round/level or until discharged
|
||||
Saving Throw: Fortitude partial
|
||||
Spell Resistance: Yes
|
||||
|
||||
A rush of divine energy flows through your holy symbol, infusing your body
|
||||
with the essence of the divine ethos. When you cast this spell, choose one
|
||||
non-neutral aspect of your own alignment<6E>chaos, evil, good, or law.
|
||||
(If you are neutral, you can select whichever alignment you wish each time
|
||||
you cast this spell). You are immediately surrounded in a 20-foot aura of
|
||||
invisible energy associated with the chosen alignment component. Anyone in
|
||||
that area who shares that alignment component gains a bonus, and anyone with
|
||||
the opposed alignment component must make a Fortitude save or take a penalty.
|
||||
The values of these modifiers and the features to which they apply are given
|
||||
on the following table. These modifiers end when the affected creature leaves
|
||||
the spell's area.
|
||||
|
||||
Alignment Bonus Penalty
|
||||
Chaos +1 on attack rolls -1 on saving throws
|
||||
Evil +1 on damage rolls -1 to Armor Class
|
||||
Good +1 on saving throws -1 on attack rolls
|
||||
Law +1 to Armor Class -1 on damage rolls
|
||||
At any point before the duration expires, you can choose to unleash the spell's
|
||||
remaining power in a 60-foot burst that deals 1d4 points of damage per round of
|
||||
duration remaining (maximum 15d4) to each creature of the opposed alignment in
|
||||
the area. Each affected creature can attempt a Fortitude save for half damage.
|
||||
The burst also heals 1 point of damage per round of duration remaining
|
||||
(maximum 15 points) for each creature of the same alignment in the area. Once
|
||||
this option is invoked, the spell ends immediately.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/24/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
int nGood = GetAlignmentGoodEvil(oPC);
|
||||
int nLaw = GetLawChaosValue(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nSpellID = PRCGetSpellId();
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(AOE_MOB_ALIGNED_AURA), oPC, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_PULSE_YELLOW_WHITE), oPC, fDur);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
119
trunk/users/Tenjac/spells/sp_alignedauraA.nss
Normal file
119
trunk/users/Tenjac/spells/sp_alignedauraA.nss
Normal file
@@ -0,0 +1,119 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Aligned Aura
|
||||
//:: FileName sp_alignedaura.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
|
||||
Abjuration
|
||||
Level: Blackguard 4, Cleric 4, Paladin 4,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: 20 ft. or 60 ft.
|
||||
Area: 20-ft.-radius emanation or 60-ft.-radius burst, centered on you
|
||||
Duration: 1 round/level or until discharged
|
||||
Saving Throw: Fortitude partial
|
||||
Spell Resistance: Yes
|
||||
|
||||
A rush of divine energy flows through your holy symbol, infusing your body
|
||||
with the essence of the divine ethos. When you cast this spell, choose one
|
||||
non-neutral aspect of your own alignment<6E>chaos, evil, good, or law.
|
||||
(If you are neutral, you can select whichever alignment you wish each time
|
||||
you cast this spell). You are immediately surrounded in a 20-foot aura of
|
||||
invisible energy associated with the chosen alignment component. Anyone in
|
||||
that area who shares that alignment component gains a bonus, and anyone with
|
||||
the opposed alignment component must make a Fortitude save or take a penalty.
|
||||
The values of these modifiers and the features to which they apply are given
|
||||
on the following table. These modifiers end when the affected creature leaves
|
||||
the spell's area.
|
||||
|
||||
Alignment Bonus Penalty
|
||||
Chaos +1 on attack rolls -1 on saving throws
|
||||
Evil +1 on damage rolls -1 to Armor Class
|
||||
Good +1 on saving throws -1 on attack rolls
|
||||
Law +1 to Armor Class -1 on damage rolls
|
||||
At any point before the duration expires, you can choose to unleash the spell's
|
||||
remaining power in a 60-foot burst that deals 1d4 points of damage per round of
|
||||
duration remaining (maximum 15d4) to each creature of the opposed alignment in
|
||||
the area. Each affected creature can attempt a Fortitude save for half damage.
|
||||
The burst also heals 1 point of damage per round of duration remaining
|
||||
(maximum 15 points) for each creature of the same alignment in the area. Once
|
||||
this option is invoked, the spell ends immediately.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/24/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
object oCreator = GetAreaOfEffectCreator();
|
||||
int nGood = GetAlignmentGoodEvil(oCreator);
|
||||
int nLaw = GetLawChaosValue(oCreator);
|
||||
int nCasterLvl = PRCGetCasterLevel(oCreator);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nSpellID = PRCGetSpellId();
|
||||
int nSaveType;
|
||||
object oTarget = GetEnteringObject();
|
||||
effect eBuff;
|
||||
effect eDebuff;
|
||||
effect eVisHelp;
|
||||
effect eVisHarm;
|
||||
effect eLink;
|
||||
|
||||
if(nSpellID == SPELL_ALIGNED_AURA_CHAOS)
|
||||
{
|
||||
eBuff = EffectAttackIncrease(1);
|
||||
eDebuff = EffectSavingThrowDecrease(SAVING_THROW_ALL, 1, SAVING_THROW_TYPE_ALL);
|
||||
eVisHelp = EffectVisualEffect(VFX_IMP_DESTRUCTION);
|
||||
eVisHarm = EffectVisualEffect(VFX_IMP_HEAD_ODD);
|
||||
nSaveType = SAVING_THROW_TYPE_CHAOS;
|
||||
}
|
||||
if(nSpellID == SPELL_ALIGNED_AURA_EVIL)
|
||||
{
|
||||
eBuff = EffectDamageIncrease(DAMAGE_BONUS_1);
|
||||
eDebuff = EffectACDecrease(1);
|
||||
eVisHelp = EffectVisualEffect(VFX_IMP_EVIL_HELP);
|
||||
eVisHarm = EffectVisualEffect(VFX_IMP_HEAD_EVIL);
|
||||
nSaveType = SAVING_THROW_TYPE_EVIL;
|
||||
}
|
||||
if(nSpellID == SPELL_ALIGNED_AURA_GOOD)
|
||||
{
|
||||
eBuff = EffectSavingThrowIncrease(SAVING_THROW_ALL, 1, SAVING_THROW_TYPE_ALL;
|
||||
eDebuff = EffectAttackDecrease(1);
|
||||
eVisHelp = EffectVisualEffect(VFX_IMP_GOOD_HELP);
|
||||
eVisHarm = EffectVisualEffect(VFX_IMP_HEAD_HOLY);
|
||||
nSaveType = SAVING_THROW_TYPE_GOOD;
|
||||
}
|
||||
if(nSpellID == SPELL_ALIGNED_AURA_LAW)
|
||||
{
|
||||
eBuff = EffectACIncrease(1);
|
||||
eDebuff = EffectDamageDecrease(DAMAGE_BONUS_1, DAMAGE_TYPE_BLUDGEONING|DAMAGE_TYPE_PIERCING|DAMAGE_TYPE_SLASHING);
|
||||
eVisHelp = EffectVisualEffect(VFX_IMP_AC_BONUS);
|
||||
eVisHarm = EffectVisualEffect(VFX_IMP_HEAD_COLD);
|
||||
nSaveType = SAVING_THROW_TYPE_LAW;
|
||||
}
|
||||
if(GetIsReactionTypeFriendly(oTarget) || GetFactionEqual(oTarget))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eBuff, oTarget, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVisHelp, oTarget);
|
||||
}
|
||||
|
||||
else
|
||||
{ //Spell Resist
|
||||
if(!PRCDoResistSpell(oCaster, oTarget,nCasterLvl + SPGetPenetr()))
|
||||
{
|
||||
//Save
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, (PRCGetSaveDC(oTarget,oCreator)), nSaveType))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDebuff, oTarget, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVisHarm, oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
68
trunk/users/Tenjac/spells/sp_alignedauraB.nss
Normal file
68
trunk/users/Tenjac/spells/sp_alignedauraB.nss
Normal file
@@ -0,0 +1,68 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Aligned Aura
|
||||
//:: FileName sp_alignedaura.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
|
||||
Abjuration
|
||||
Level: Blackguard 4, Cleric 4, Paladin 4,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: 20 ft. or 60 ft.
|
||||
Area: 20-ft.-radius emanation or 60-ft.-radius burst, centered on you
|
||||
Duration: 1 round/level or until discharged
|
||||
Saving Throw: Fortitude partial
|
||||
Spell Resistance: Yes
|
||||
|
||||
A rush of divine energy flows through your holy symbol, infusing your body
|
||||
with the essence of the divine ethos. When you cast this spell, choose one
|
||||
non-neutral aspect of your own alignment<6E>chaos, evil, good, or law.
|
||||
(If you are neutral, you can select whichever alignment you wish each time
|
||||
you cast this spell). You are immediately surrounded in a 20-foot aura of
|
||||
invisible energy associated with the chosen alignment component. Anyone in
|
||||
that area who shares that alignment component gains a bonus, and anyone with
|
||||
the opposed alignment component must make a Fortitude save or take a penalty.
|
||||
The values of these modifiers and the features to which they apply are given
|
||||
on the following table. These modifiers end when the affected creature leaves
|
||||
the spell's area.
|
||||
|
||||
Alignment Bonus Penalty
|
||||
Chaos +1 on attack rolls -1 on saving throws
|
||||
Evil +1 on damage rolls -1 to Armor Class
|
||||
Good +1 on saving throws -1 on attack rolls
|
||||
Law +1 to Armor Class -1 on damage rolls
|
||||
At any point before the duration expires, you can choose to unleash the spell's
|
||||
remaining power in a 60-foot burst that deals 1d4 points of damage per round of
|
||||
duration remaining (maximum 15d4) to each creature of the opposed alignment in
|
||||
the area. Each affected creature can attempt a Fortitude save for half damage.
|
||||
The burst also heals 1 point of damage per round of duration remaining
|
||||
(maximum 15 points) for each creature of the same alignment in the area. Once
|
||||
this option is invoked, the spell ends immediately.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/24/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void main()
|
||||
{
|
||||
object oCaster = GetAreaOfEffectCreator();
|
||||
object oTarget = GetExitingObject();
|
||||
int nSpellId
|
||||
effect eToDispel = GetFirstEffect(oTarget);
|
||||
|
||||
while(GetIsEffectValid(eToDispel))
|
||||
{
|
||||
nSpellId = GetEffectSpellId(eToDispel);
|
||||
if(nSpellId == SPELL_ALIGNED_AURA_CHAOS || nSpellId == SPELL_ALIGNED_AURA_LAW || nSpellId == SPELL_ALIGNED_AURA_GOOD || nSpellId == SPELL_ALIGNED_AURA_EVIL)
|
||||
{
|
||||
RemoveEffect(oTarget, eToDispel);
|
||||
}
|
||||
eToDispel = GetNextEffect(oTarget);
|
||||
}
|
||||
}
|
||||
}
|
60
trunk/users/Tenjac/spells/sp_angelskin.nss
Normal file
60
trunk/users/Tenjac/spells/sp_angelskin.nss
Normal file
@@ -0,0 +1,60 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: 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
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#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);
|
||||
}
|
||||
//Invalid target alignment
|
||||
else
|
||||
{
|
||||
SendMessageToPC(oPC, "This spell must target a lawful good creature.");
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
||||
|
67
trunk/users/Tenjac/spells/sp_auracold.nss
Normal file
67
trunk/users/Tenjac/spells/sp_auracold.nss
Normal file
@@ -0,0 +1,67 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Aura of Cold
|
||||
//:: FileName sp_auracold.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Transmutation [Cold]
|
||||
Level: Cleric 3, Druid 3, Disciple of Thrym 3, Paladin 4, Ranger 4,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: 5 ft.
|
||||
Area: 5-ft.-radius spherical emanation, centered on you
|
||||
Duration: 1 round/level (D)
|
||||
Saving Throw: None
|
||||
Spell Resistance: Yes
|
||||
|
||||
You are covered in a thin layer of white frost and frigid cold emanates from your
|
||||
body, dealing 1d6 points of cold damage at the start of your round to each creature
|
||||
within 5 feet.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 6/8/2022
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void DoCold(object oPC, int nRounds)
|
||||
{
|
||||
if(nRounds > 0)
|
||||
{
|
||||
location lLoc=GetLocation(oPC);
|
||||
//Do the AoE
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE,FeetToMeters(5.0), lLoc);
|
||||
{
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oPC)
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(1), DAMAGE_TYPE_COLD), oTarget);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FROST_S), oTarget);
|
||||
}
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(5.0), lLoc);
|
||||
}
|
||||
}
|
||||
nRounds--;
|
||||
DelayCommand(6.0f, DoCold(oPC, nRounds));
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
int nRounds = nCasterLvl;
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) nRounds += nRounds;
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_PULSE_BLUE_WHITE), oPC, fDur);
|
||||
|
||||
DoCold(oPC, nRounds);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
48
trunk/users/Tenjac/spells/sp_aurasun.nss
Normal file
48
trunk/users/Tenjac/spells/sp_aurasun.nss
Normal file
@@ -0,0 +1,48 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Aura of the Sun
|
||||
//:: FileName sp_aurasun.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Aura of the Sun
|
||||
Abjuration [Light]
|
||||
Level: Cleric 4, Paladin 4,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: 10 ft.
|
||||
Area: 10-ft.-radius emanation centered on you
|
||||
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.
|
||||
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.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/28/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(AOE_MOB_AURASUN), fDur, oPC);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
42
trunk/users/Tenjac/spells/sp_aurasunA.nss
Normal file
42
trunk/users/Tenjac/spells/sp_aurasunA.nss
Normal file
@@ -0,0 +1,42 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Aura of the Sun On Enter
|
||||
//:: FileName sp_aurasunA.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Aura of the Sun
|
||||
Abjuration [Light]
|
||||
Level: Cleric 4, Paladin 4,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: 10 ft.
|
||||
Area: 10-ft.-radius emanation centered on you
|
||||
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.
|
||||
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.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 8/10/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void main
|
||||
{
|
||||
object oCreator = GetAreaOfEffectCreator();
|
||||
int nCasterLvl = PRCGetCasterLvl(oCreator);
|
||||
object oTarget = GetEnteringObject();
|
||||
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectSkillDecrease(SKILL_HIDE), oTarget);
|
||||
SetLocalInt(oTarget, "PRCAuraSunDC", 11 + nCasterLvl);
|
||||
}
|
54
trunk/users/Tenjac/spells/sp_aurasunB.nss
Normal file
54
trunk/users/Tenjac/spells/sp_aurasunB.nss
Normal file
@@ -0,0 +1,54 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Aura of the Sun On Exit
|
||||
//:: FileName sp_aurasunB.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Aura of the Sun
|
||||
Abjuration [Light]
|
||||
Level: Cleric 4, Paladin 4,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: 10 ft.
|
||||
Area: 10-ft.-radius emanation centered on you
|
||||
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.
|
||||
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.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 8/10/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
void main()
|
||||
{
|
||||
object oCaster = GetAreaOfEffectCreator();
|
||||
object oTarget = GetExitingObject();
|
||||
|
||||
effect eToDispel = GetFirstEffect(oTarget);
|
||||
|
||||
while(GetIsEffectValid(eToDispel))
|
||||
{
|
||||
if(GetEffectSpellId(eToDispel) == SPELL_AURA_OF_THE_SUN)
|
||||
|
||||
{
|
||||
RemoveEffect(oTarget, eToDispel);
|
||||
}
|
||||
|
||||
eToDispel = GetNextEffect(oTarget);
|
||||
}
|
||||
}
|
||||
|
||||
DeleteLocalInt(oTarget, "PRCAuraSunDC");
|
||||
}
|
49
trunk/users/Tenjac/spells/sp_aurasunC.nss
Normal file
49
trunk/users/Tenjac/spells/sp_aurasunC.nss
Normal file
@@ -0,0 +1,49 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Aura of the Sun Heartbeat
|
||||
//:: FileName sp_aurasunC.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Aura of the Sun
|
||||
Abjuration [Light]
|
||||
Level: Cleric 4, Paladin 4,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: 10 ft.
|
||||
Area: 10-ft.-radius emanation centered on you
|
||||
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.
|
||||
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.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 8/10/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void main
|
||||
{
|
||||
object oTarget = GetFirstInPersistentObject();
|
||||
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_HIT_DIVINE), oTarget);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, d6(1), DAMAGE_TYPE_DIVINE), oTarget);
|
||||
}
|
||||
oTarget = GetNextInPersistentObject();
|
||||
}
|
||||
|
||||
}
|
105
trunk/users/Tenjac/spells/sp_axio_storm.nss
Normal file
105
trunk/users/Tenjac/spells/sp_axio_storm.nss
Normal file
@@ -0,0 +1,105 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Axiomatic Storm
|
||||
//:: FileName sp_axio_storm.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Conjuration (Creation)
|
||||
Level: Cleric 3, Paladin 3,
|
||||
Components: V, S, M, DF,
|
||||
Casting Time: 1 standard action
|
||||
Area: Cylinder (20-ft. radius, 20 ft. high)
|
||||
Duration: 1 round/level (D)
|
||||
Saving Throw: None
|
||||
Spell Resistance: No
|
||||
|
||||
You call upon the forces of law and a heavy rain
|
||||
begins to fall around you, its raindrops harsh and
|
||||
metallic. Above you, a jet of caustic acid lances
|
||||
down from the heavens.
|
||||
|
||||
A driving rain falls around you. It falls in a fixed
|
||||
area once created. The storm reduces hearing and
|
||||
visibility, resulting in a <20>4 penalty on Listen, Spot,
|
||||
and Search checks. It also applies a <20>4 penalty on ranged
|
||||
attacks made into, out of, or through the storm. Finally,
|
||||
it automatically extinguishes any unprotected flames and
|
||||
has a 50% chance to extinguish protected flames (such as
|
||||
those of lanterns).
|
||||
|
||||
The rain damages chaotic creatures, dealing 2d6 points
|
||||
of damage per round (chaotic outsiders take double damage).
|
||||
In addition, each round, a gout of acid strikes a randomly
|
||||
selected chaotic outsider within the spell's area, dealing
|
||||
5d6 points of acid damage.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/28/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void DoAcid(int nCount, location lLoc, object oPC)
|
||||
{
|
||||
if(nCount >0)
|
||||
{
|
||||
object oChaotic = GetFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(20), lLoc);
|
||||
{
|
||||
while(GetIsObjectValid(oChaotic))
|
||||
{
|
||||
if(GetAlignmentLawChaos(oChaotic) == ALIGNMENT_CHAOTIC))
|
||||
{
|
||||
if(PRCGetRacialType(oChaotic) == RACIAL_TYPE_OUTSIDER))
|
||||
{
|
||||
//increment count of chaotic outsiders
|
||||
nOutsiders++;
|
||||
|
||||
//Set as a target
|
||||
SetLocalObject(oPC, "oAxioStorm" + IntToString(nOutsiders), oChaotic);
|
||||
}
|
||||
}
|
||||
oChaotic = GetNextObjectInShape(SHAPE_SPHERE, FeetToMeters(20), lLoc);
|
||||
}
|
||||
}
|
||||
//get a random number
|
||||
int nRandom = Random(nOutsiders);
|
||||
|
||||
//Get the target
|
||||
object oTarget = GetLocalObject(oPC, "oAxioStorm" + IntToString(nRandom));
|
||||
|
||||
//Deal acid damage
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, d6(5), DAMAGE_TYPE_ACID));
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_GAS_EXPLOSION_ACID), oTarget);
|
||||
|
||||
//another round down
|
||||
nCount--;
|
||||
nOutsiders=0;
|
||||
|
||||
if(nCount >0) DelayCommand(6.0f, DoAcid(nCount, lLoc, oPC));
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nCount = nCasterLvl;
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND)
|
||||
{
|
||||
fDur += fDur;
|
||||
nCount += nCount;
|
||||
}
|
||||
|
||||
//Apply AoE
|
||||
effect eAoe = EffectAreaOfEffect(AOE_PER_AXIOMATIC_STORM);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eAoe, lLoc, fDur);
|
||||
|
||||
DoAcid(nCount, lLoc, oPC);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
60
trunk/users/Tenjac/spells/sp_axio_stormA.nss
Normal file
60
trunk/users/Tenjac/spells/sp_axio_stormA.nss
Normal file
@@ -0,0 +1,60 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Axiomatic Storm On Enter
|
||||
//:: FileName sp_axio_stormA.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Conjuration (Creation)
|
||||
Level: Cleric 3, Paladin 3,
|
||||
Components: V, S, M, DF,
|
||||
Casting Time: 1 standard action
|
||||
Area: Cylinder (20-ft. radius, 20 ft. high)
|
||||
Duration: 1 round/level (D)
|
||||
Saving Throw: None
|
||||
Spell Resistance: No
|
||||
|
||||
You call upon the forces of law and a heavy rain
|
||||
begins to fall around you, its raindrops harsh and
|
||||
metallic. Above you, a jet of caustic acid lances
|
||||
down from the heavens.
|
||||
|
||||
A driving rain falls around you. It falls in a fixed
|
||||
area once created. The storm reduces hearing and
|
||||
visibility, resulting in a <20>4 penalty on Listen, Spot,
|
||||
and Search checks. It also applies a <20>4 penalty on ranged
|
||||
attacks made into, out of, or through the storm. Finally,
|
||||
it automatically extinguishes any unprotected flames and
|
||||
has a 50% chance to extinguish protected flames (such as
|
||||
those of lanterns).
|
||||
|
||||
The rain damages chaotic creatures, dealing 2d6 points
|
||||
of damage per round (chaotic outsiders take double damage).
|
||||
In addition, each round, a gout of acid strikes a randomly
|
||||
selected chaotic outsider within the spell's area, dealing
|
||||
5d6 points of acid damage.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/28/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetEnteringObject();
|
||||
object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
|
||||
effect eLink = EffectLinkEffects(EffectSkillDecrease(SKILL_LISTEN, 4), EffectSkillDecrease(SKILL_SPOT, 4));
|
||||
eLink = EffectLinkEffects(eLink, EffectSkillDecrease(SKILL_SEARCH, 4));
|
||||
|
||||
//Apply permanently, AoE exit will remove
|
||||
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, eLink, oTarget);
|
||||
|
||||
if GetWeaponRanged(oItem)
|
||||
{
|
||||
SPApplyEffectToObject(DURAITON_TYPE_TEMPORARY, EffectAttackDecrease(4), oTarget, 6.0f)
|
||||
}
|
||||
|
||||
//Can't do hit penalty to ranged, approximate with hit chance
|
||||
SPApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectConcealment(20, MISS_CHANCE_TYPE_VS_RANGED), oTarget);
|
||||
}
|
60
trunk/users/Tenjac/spells/sp_axio_stormB.nss
Normal file
60
trunk/users/Tenjac/spells/sp_axio_stormB.nss
Normal file
@@ -0,0 +1,60 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Axiomatic Storm
|
||||
//:: FileName sp_axio_storm.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Conjuration (Creation)
|
||||
Level: Cleric 3, Paladin 3,
|
||||
Components: V, S, M, DF,
|
||||
Casting Time: 1 standard action
|
||||
Area: Cylinder (20-ft. radius, 20 ft. high)
|
||||
Duration: 1 round/level (D)
|
||||
Saving Throw: None
|
||||
Spell Resistance: No
|
||||
|
||||
You call upon the forces of law and a heavy rain
|
||||
begins to fall around you, its raindrops harsh and
|
||||
metallic. Above you, a jet of caustic acid lances
|
||||
down from the heavens.
|
||||
|
||||
A driving rain falls around you. It falls in a fixed
|
||||
area once created. The storm reduces hearing and
|
||||
visibility, resulting in a <20>4 penalty on Listen, Spot,
|
||||
and Search checks. It also applies a <20>4 penalty on ranged
|
||||
attacks made into, out of, or through the storm. Finally,
|
||||
it automatically extinguishes any unprotected flames and
|
||||
has a 50% chance to extinguish protected flames (such as
|
||||
those of lanterns).
|
||||
|
||||
The rain damages chaotic creatures, dealing 2d6 points
|
||||
of damage per round (chaotic outsiders take double damage).
|
||||
In addition, each round, a gout of acid strikes a randomly
|
||||
selected chaotic outsider within the spell's area, dealing
|
||||
5d6 points of acid damage.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/28/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
void main()
|
||||
{
|
||||
object oCaster = GetAreaOfEffectCreator();
|
||||
object oTarget = GetExitingObject();
|
||||
|
||||
effect eToDispel = GetFirstEffect(oTarget);
|
||||
|
||||
while(GetIsEffectValid(eToDispel))
|
||||
{
|
||||
if(GetEffectSpellId(eToDispel) == SPELL_AXIOMATIC_STORM)
|
||||
|
||||
{
|
||||
RemoveEffect(oTarget, eToDispel);
|
||||
}
|
||||
|
||||
eToDispel = GetNextEffect(oTarget);
|
||||
}
|
||||
}
|
||||
}
|
51
trunk/users/Tenjac/spells/sp_axio_stormC.nss
Normal file
51
trunk/users/Tenjac/spells/sp_axio_stormC.nss
Normal file
@@ -0,0 +1,51 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Axiomatic Storm
|
||||
//:: FileName sp_axio_storm.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Conjuration (Creation)
|
||||
Level: Cleric 3, Paladin 3,
|
||||
Components: V, S, M, DF,
|
||||
Casting Time: 1 standard action
|
||||
Area: Cylinder (20-ft. radius, 20 ft. high)
|
||||
Duration: 1 round/level (D)
|
||||
Saving Throw: None
|
||||
Spell Resistance: No
|
||||
|
||||
You call upon the forces of law and a heavy rain
|
||||
begins to fall around you, its raindrops harsh and
|
||||
metallic. Above you, a jet of caustic acid lances
|
||||
down from the heavens.
|
||||
|
||||
A driving rain falls around you. It falls in a fixed
|
||||
area once created. The storm reduces hearing and
|
||||
visibility, resulting in a <20>4 penalty on Listen, Spot,
|
||||
and Search checks. It also applies a <20>4 penalty on ranged
|
||||
attacks made into, out of, or through the storm. Finally,
|
||||
it automatically extinguishes any unprotected flames and
|
||||
has a 50% chance to extinguish protected flames (such as
|
||||
those of lanterns).
|
||||
|
||||
The rain damages chaotic creatures, dealing 2d6 points
|
||||
of damage per round (chaotic outsiders take double damage).
|
||||
In addition, each round, a gout of acid strikes a randomly
|
||||
selected chaotic outsider within the spell's area, dealing
|
||||
5d6 points of acid damage.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/28/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetEnteringObject();
|
||||
object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
|
||||
if GetWeaponRanged(oItem)
|
||||
{
|
||||
SPApplyEffectToObject(oTarget, EffectAttackDecrease(4), 6.0f);
|
||||
}
|
||||
}
|
45
trunk/users/Tenjac/spells/sp_axiowater.nss
Normal file
45
trunk/users/Tenjac/spells/sp_axiowater.nss
Normal file
@@ -0,0 +1,45 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Axiomatic Water
|
||||
//:: FileName sp_axiowater.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Transmutation [Lawful]
|
||||
Level: Cleric 1, Paladin 1,
|
||||
Components: V, S, M,
|
||||
Casting Time: 1 minute
|
||||
Range: Touch
|
||||
Target: Flask of water touched
|
||||
Duration: Instantaneous
|
||||
Saving Throw: Will negates (object)
|
||||
Spell Resistance: Yes (object)
|
||||
|
||||
You speak the ancient, slippery words as you pour the iron and silver into the flask. Despite the fact that there is more powder than will fit in the container, all of it dissolves, leaving a flask of water dotted with motes of gunmetal gray.
|
||||
|
||||
This transmutation imbues a flask (1 pint) of water with the order of law, turning it into axiomatic water. Axiomatic water damages chaotic outsiders the way holy water damages undead and evil outsiders. A flask of axiomatic water can be thrown as a splash weapon. Treat this attack as a ranged touch attack with a range increment of 10 feet. A flask breaks if thrown against the body of a corporeal creature, but to use it against an incorporeal creature, the bearer must open the flask and pout the axiomatic water out onto the target. Thus, a character can douse an incorporeal creature with axiomatic water only if he is adjacent to it. Doing so is a ranged touch attack that does not provoke attacks of opportunity.
|
||||
|
||||
A direct hit by a flask of axiomatic water deals 2d4 points of damage to a chaotic outsider. Each such creature within 5 feet of the point where the flask hits takes 1 point of damage from the splash.
|
||||
|
||||
Material Component: 5 pounds of powdered iron and silver (worth 25 gp).
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 6/10/2022
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
|
||||
|
||||
object oPC = OBJECT_SELF;
|
||||
|
||||
CreateItemOnObject("prc_axiowater", oPC, 1);
|
||||
|
||||
PRCSetSchool();
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
69
trunk/users/Tenjac/spells/sp_bladebane.nss
Normal file
69
trunk/users/Tenjac/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"
|
||||
|
||||
|
||||
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();
|
||||
}
|
65
trunk/users/Tenjac/spells/sp_blazelight.nss
Normal file
65
trunk/users/Tenjac/spells/sp_blazelight.nss
Normal file
@@ -0,0 +1,65 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Blaze of Light
|
||||
//:: FileName sp_blazelight.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Evocation [Light]
|
||||
Level: Paladin 1, Druid 2,
|
||||
Components: V, S,
|
||||
Casting Time: 1 standard action
|
||||
Range: 60 ft.
|
||||
Area: Cone
|
||||
Duration: Instantaneous
|
||||
Saving Throw: Fortitude negates
|
||||
Spell Resistance: Yes
|
||||
|
||||
A cone of bright light shines forth from just above the caster's head.
|
||||
All creatures within the cone that fail a Fortitude saving throw are dazzled for 1 minute.
|
||||
Sightless creatures are not affected by blaze of light.
|
||||
A light spell (one with the light descriptor) counters and dispels a darkness spell
|
||||
(one with the darkness descriptor) of an equal or lower level.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 6/10/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
float fDur = 60.0f;
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_HEAD_HOLY);
|
||||
float fRadius = FeetToMeters(60);
|
||||
location lLoc = PRCGetSpellTargetLocation();
|
||||
effect eDazzled = EffectLinkEffects(EffectAttackDecrease(1), EffectVisualEffect(VFX_DUR_MIND_AFFECTING_DISABLED));
|
||||
eDazzled = EffectLinkEffects(eDazzled, EffectSkillDecrease(SKILL_SPOT, 1));
|
||||
eDazzled = EffectLinkEffects(eDazzled, EffectSkillDecrease(SKILL_SEARCH, 1));
|
||||
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPELLCONE, fRadius, lLoc, TRUE);
|
||||
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
//Resist
|
||||
if(!PRCDoResistSpell(OBJECT_SELF, oTarget,CasterLvl) && (oTarget != OBJECT_SELF))
|
||||
{
|
||||
//Fort Save
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, PRCGetSaveDC(oTarget, oPC), SAVING_THROW_TYPE_SPELL, oPC))
|
||||
{
|
||||
//Not blind
|
||||
if(!GetHasEffect(EFFECT_TYPE_BLINDNESS, oTarget))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDazzled, oTarget, fDur);
|
||||
}
|
||||
}
|
||||
}
|
||||
MyNextObjectInShape(SHAPE_SPELLCONE, fRadius, lLoc, TRUE);
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
45
trunk/users/Tenjac/spells/sp_blessedaim.nss
Normal file
45
trunk/users/Tenjac/spells/sp_blessedaim.nss
Normal file
@@ -0,0 +1,45 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Blessed Aim
|
||||
//:: FileName sp_blessedaim.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Divination
|
||||
Level: Blackguard 1, Cleric 1, Paladin 1,
|
||||
Components: V, S,
|
||||
Casting Time: 1 standard action
|
||||
Range: 50 ft.
|
||||
Effect: 50-ft.-radius spread centered on you
|
||||
Duration: 1 minute/level
|
||||
Saving Throw: Will negates (harmless)
|
||||
Spell Resistance: No
|
||||
|
||||
With the blessing of your deity, you bolster your
|
||||
allies' aim with an exhortation.
|
||||
|
||||
This spell grants your allies within the spread
|
||||
a +2 morale bonus on ranged attack rolls.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On:
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_DIVINATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = 60 * nCasterLvl;
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
effect eAOE = EffectAreaOfEffect(AOE_PER_BLESSEDAIM);
|
||||
|
||||
SPApplyEffectToObejct(DURATION_TYPE_TEMPORARY, eAOE, oPC, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_PULSE_HOLY), oPC);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
47
trunk/users/Tenjac/spells/sp_blessedaimA.nss
Normal file
47
trunk/users/Tenjac/spells/sp_blessedaimA.nss
Normal file
@@ -0,0 +1,47 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Blessed Aim on Enter
|
||||
//:: FileName sp_blessedaimA.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Blessed Aim
|
||||
Divination
|
||||
Level: Blackguard 1, Cleric 1, Paladin 1,
|
||||
Components: V, S,
|
||||
Casting Time: 1 standard action
|
||||
Range: 50 ft.
|
||||
Effect: 50-ft.-radius spread centered on you
|
||||
Duration: 1 minute/level
|
||||
Saving Throw: Will negates (harmless)
|
||||
Spell Resistance: No
|
||||
|
||||
With the blessing of your deity, you bolster your allies' aim with an exhortation.
|
||||
|
||||
This spell grants your allies within the spread a +2 morale bonus on ranged attack rolls.
|
||||
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On:
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void main()
|
||||
{
|
||||
location lLoc = GetLocation(OBJECT_SELF);
|
||||
object oItem;
|
||||
|
||||
object oTarget = GetEnteringObject();
|
||||
{
|
||||
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
|
||||
if(GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
if GetWeaponRanged(oItem)
|
||||
{
|
||||
SPApplyEffectToObject(oTarget, EffectAttackIncrease(2), 6.0f)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
32
trunk/users/Tenjac/spells/sp_blessedaimB.nss
Normal file
32
trunk/users/Tenjac/spells/sp_blessedaimB.nss
Normal file
@@ -0,0 +1,32 @@
|
||||
//::///////////////////////////////////////////////
|
||||
//:: Name Blessed Aim On Exit
|
||||
//:: FileName sp_blessedaimB.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/**@file
|
||||
|
||||
Author: Tenjac
|
||||
Created: 1/27/21
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:://////////////////////////////////////////////
|
||||
#include "prc_inc_spells"
|
||||
#include "prc_add_spell_dc"
|
||||
void main()
|
||||
{
|
||||
object oCaster = GetAreaOfEffectCreator();
|
||||
object oTarget = GetExitingObject();
|
||||
|
||||
effect eToDispel = GetFirstEffect(oTarget);
|
||||
|
||||
while(GetIsEffectValid(eToDispel))
|
||||
{
|
||||
if(GetEffectSpellId(eToDispel) == SPELL_BLESSED_AIM)
|
||||
|
||||
{
|
||||
RemoveEffect(oTarget, eToDispel);
|
||||
}
|
||||
|
||||
eToDispel = GetNextEffect(oTarget);
|
||||
}
|
||||
}
|
||||
}
|
47
trunk/users/Tenjac/spells/sp_blessedaimc.nss
Normal file
47
trunk/users/Tenjac/spells/sp_blessedaimc.nss
Normal file
@@ -0,0 +1,47 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Blessed Aim Heartbeat
|
||||
//:: FileName sp_blessedaimc.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Blessed Aim
|
||||
Divination
|
||||
Level: Blackguard 1, Cleric 1, Paladin 1,
|
||||
Components: V, S,
|
||||
Casting Time: 1 standard action
|
||||
Range: 50 ft.
|
||||
Effect: 50-ft.-radius spread centered on you
|
||||
Duration: 1 minute/level
|
||||
Saving Throw: Will negates (harmless)
|
||||
Spell Resistance: No
|
||||
|
||||
With the blessing of your deity, you bolster your allies' aim with an exhortation.
|
||||
|
||||
This spell grants your allies within the spread a +2 morale bonus on ranged attack rolls.
|
||||
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On:
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void main()
|
||||
{
|
||||
location lLoc = GetLocation(OBJECT_SELF);
|
||||
object oItem;
|
||||
|
||||
object oTarget = GetFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(50.0), lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
||||
{
|
||||
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
|
||||
if(GetIsReactionTypeFriendly(oTarget)
|
||||
{
|
||||
if GetWeaponRanged(oItem)
|
||||
{
|
||||
SPApplyEffectToObject(oTarget, EffectAttackIncrease(2), 6.0f)
|
||||
}
|
||||
}
|
||||
oTarget = GetNextObjectInShape(SHAPE_SPHERE, FeetToMeters(50.0), lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
||||
}
|
61
trunk/users/Tenjac/spells/sp_blessright.nss
Normal file
61
trunk/users/Tenjac/spells/sp_blessright.nss
Normal file
@@ -0,0 +1,61 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Blessing of the Righteous
|
||||
//:: FileName sp_blessright.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Blessing of the Righteous
|
||||
Evocation [Good]
|
||||
Level: Cleric 4, Paladin 4,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: 40 ft.
|
||||
Area: All allies in a 40-ft.-radius burst centered on you
|
||||
Duration: 1 round/level
|
||||
Saving Throw: Will negates (harmless)
|
||||
Spell Resistance: Yes (harmless)
|
||||
|
||||
A sudden burst of warm, radiant light engulfs you and your allies.
|
||||
The light fades quickly but lingers on the weapons of those affected.
|
||||
You bless yourself and your allies.
|
||||
You and your allies'melee and ranged attacks deal an extra 1d6 points
|
||||
of holy damage and are considered good-aligned for the purpose of
|
||||
overcoming damage reduction.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/26/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
location lLoc = PRCGetSpellTargetLocation();
|
||||
int nBonus = DAMAGE_BONUS_1d6;
|
||||
|
||||
if (nMetaMagic & METAMAGIC_EXTEND) fDur *= 2;
|
||||
if (nMetaMagic & METAMAGIC_MAXIMIZE) nBonus = DAMAGE_BONUS_6;
|
||||
|
||||
object oTarget = GetFirstObjectinShape(SHAPE_SPHERE, FeetToMeters(40.0), lLoc);
|
||||
|
||||
while (GetIsObjectValid(oTarget))
|
||||
{
|
||||
//if it's friendly
|
||||
if(GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDamageIncrease(nBonus, DAMAGE_TYPE_POSITIVE), oTarget, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HOLY_AID), oTarget);
|
||||
}
|
||||
OTarget = GetNextObjectInShape(SHAPE_SPHERE, FeetToMeters(40.0), lLoc);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
49
trunk/users/Tenjac/spells/sp_callmount.nss
Normal file
49
trunk/users/Tenjac/spells/sp_callmount.nss
Normal file
@@ -0,0 +1,49 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Call Mount
|
||||
//:: FileName sp_callmount.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Conjuration (Calling) [Good]
|
||||
Level: Paladin 2,
|
||||
Components: V,
|
||||
Casting Time: 1 round
|
||||
Range: 10 ft.
|
||||
Effect: Your special mount
|
||||
Duration: 1 hour/level (D)
|
||||
Saving Throw: None
|
||||
Spell Resistance: No
|
||||
|
||||
You summon your special mount from the celestial
|
||||
planes where it resides.
|
||||
|
||||
This works exactly as your normal, spell-like class a
|
||||
bility to summon the creature, except that the duration
|
||||
is shorter and you are not limited in how many times
|
||||
you can call the mount in a day (except by how many
|
||||
times you can cast call mount).
|
||||
|
||||
You can cast this spell even if you have already
|
||||
called your mount using your class ability on the same day.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 8/9/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = HoursToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
HorseSummonPaladinMount();
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
98
trunk/users/Tenjac/spells/sp_castigate.nss
Normal file
98
trunk/users/Tenjac/spells/sp_castigate.nss
Normal file
@@ -0,0 +1,98 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Castigate
|
||||
//:: FileName sp_castigate.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Evocation [Sonic]
|
||||
Level: Cleric 4, Paladin 4, Purification 4,
|
||||
Components: V,
|
||||
Casting Time: 1 standard action
|
||||
Range: 10 ft.
|
||||
Area: 10-ft.-radius burst centered on you
|
||||
Duration: Instantaneous
|
||||
Saving Throw: Fortitude half
|
||||
Spell Resistance: Yes
|
||||
|
||||
Shouting your deity's teachings, you rebuke your foes with the magic
|
||||
of your sacred words.
|
||||
|
||||
This spell has no effect on creatures that cannot hear.
|
||||
All creatures whose alignment differs from yours on both
|
||||
the law<61>chaos and the good<6F>evil axes take 1d4 points of damage
|
||||
per caster level (maximum 10d4). All creatures whose alignment
|
||||
differs from yours on one component take half damage, and this
|
||||
spell does not deal damage to those who share your alignment.
|
||||
|
||||
A Fortitude saving throw reduces damage by half.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/28/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
int nDC = PRCGetSaveDC(oTarget, oPC);
|
||||
float fDur = 3600 * nCasterLvl;
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
location lLoc = PRCGetSpellTargetLocation();
|
||||
int nAlignGE = GetAlignmentGoodEvil(oPC);
|
||||
int nAlignLC = GetAlignmentLawChaos(oPC);
|
||||
int nTargetAlignGE;
|
||||
int nTargetAlignLC;
|
||||
int nDam;
|
||||
int nLevels = min(10, nCasterLvl);
|
||||
float fRadius = FeetToMeters(10);
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_HOWL_WAR_CRY), oPC);
|
||||
|
||||
object oTarget = (MyFirstObjectInShape(SHAPE_SPHERE, fRadius. lLoc, FALSE));
|
||||
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
//Not deaf
|
||||
if(GetHasEffect(EFFECT_TYPE_DEAF, oTarget) == FALSE)
|
||||
{
|
||||
//SR
|
||||
if(!PRCDoResistSpell(oPC, oTarget, nCasterLvl + SPGetPenetr()))
|
||||
{
|
||||
nTargetAlignGE = GetAlignmentGoodEvil(oTarget);
|
||||
nTargetAlignLC = GetAlignmentLawChaos(oTarget);
|
||||
|
||||
//Test alignment differences
|
||||
//Both
|
||||
if(nAlignGE != nTargetAlignGE) && (nAlignLC != nTargetAlignLC)
|
||||
{
|
||||
nDam = d4(nLevels);
|
||||
}
|
||||
//Half for one
|
||||
else if(nAlignGE != nTargetAlignGE) || (nAlignLC != nTargetAlignLC)
|
||||
{
|
||||
nDam = d4(nLevels)/2;
|
||||
}
|
||||
|
||||
//save for half
|
||||
if(PRCMySavingThrow(SAVING_THROW_FORT, oTarget, nDC, SAVING_THROW_TYPE_DIVINE))
|
||||
{
|
||||
nDam = nDam/2;
|
||||
}
|
||||
|
||||
if(nDam > 0)
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDam, DAMAGE_TYPE_DIVINE), oTarget);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectvisualEffect(VFX_IMP_HEAD_HOLY), oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, fRadius. lLoc, FALSE);
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
72
trunk/users/Tenjac/spells/sp_checkmlt.nss
Normal file
72
trunk/users/Tenjac/spells/sp_checkmlt.nss
Normal file
@@ -0,0 +1,72 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Checkmate's Light
|
||||
//:: FileName sp_chkmlt.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Evocation [Lawful]
|
||||
Level: Paladin 2, Cleric 3,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: Touch
|
||||
Target: Melee weapon touched
|
||||
Duration: 1 round/level (D)
|
||||
Saving Throw: None
|
||||
Spell Resistance: No
|
||||
|
||||
You intone your deity's name and the weapon you touch hums a
|
||||
harmonic response before it lights up with a soothing red glow.
|
||||
|
||||
You imbue the touched weapon with a +1 enhancement bonus per
|
||||
three caster levels (maximum +5 at 15th level), and it is treated
|
||||
as lawful-aligned for the purpose of overcoming damage reduction.
|
||||
In addition, you can cause it to cast a red glow as bright as a torch.
|
||||
Any creature within the radius of its clear illumination (20 feet)
|
||||
gets a +1 morale bonus on saving throws against fear effects.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 6/14/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
object oWeapon = PRCGetSpellCastItem(oPC);
|
||||
|
||||
object oTarget = PRCGetSpellTargetObject(oPC);
|
||||
|
||||
if (GetIsObjectValid(oWeapon))
|
||||
{
|
||||
int nBonus = min(nCasterLvl, 15)/3;
|
||||
|
||||
//Simulating lawful as +3, so give +3 enhancement and penalty to damage and hit to offset
|
||||
if(nBonus == 1)
|
||||
{
|
||||
AddItemProperty(oWeapon, DURATION_TYPE_TEMPORARY, ItemPropertyAttackPenalty(2), fDuration);
|
||||
AddItemProperty(oWeapon, DURATION_TYPE_TEMPORARY, ItemPropertyDamagePenalty(2), fDuration);
|
||||
nBonus=3;
|
||||
}
|
||||
if (nBonus == 2)
|
||||
{
|
||||
AddItemProperty(oWeapon, DURATION_TYPE_TEMPORARY, ItemPropertyAttackPenalty(1), fDuration);
|
||||
AddItemProperty(oWeapon, DURATION_TYPE_TEMPORARY, ItemPropertyDamagePenalty(1), fDuration);
|
||||
nBonus=3;
|
||||
}
|
||||
|
||||
IPSafeAddItemProperty(oWeapon, DURATION_TYPE_TEMPORARY, ItemPropertyEnhancementBonus(nBonus), fDuration);
|
||||
IPSafeAddItemProperty(oWeapon, DURATION_TYPE_TEMPORARY, ItemPropertyVisualEffect(ITEM_VISUAL_EVIL), fDuration);
|
||||
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
45
trunk/users/Tenjac/spells/sp_clearmind.nss
Normal file
45
trunk/users/Tenjac/spells/sp_clearmind.nss
Normal file
@@ -0,0 +1,45 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Clear Mind
|
||||
//:: FileName sp_clearmind.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Clear Mind
|
||||
Abjuration
|
||||
Level: Paladin 1
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 10 minutes/level
|
||||
|
||||
A silver glow sheathes your body as you complete the spell. As the glow fades, you feel a touch
|
||||
of the divine at the back of your mind. This divine touch spreads until you feel your concerns
|
||||
and anxieties fade away.
|
||||
|
||||
You gain a +4 sacred bonus on saving throws made against mind-affecting spells and effects.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/23/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = 600 * nCasterLvl;
|
||||
effect eVis = EffectVisualEffect(VFX_DUR_AURA_BLUE_LIGHT);
|
||||
effect eBuff = EffectSavingThrowIncrease(SAVING_THROW_ALL, 4, SAVING_THROW_TYPE_MIND_SPELLS);
|
||||
|
||||
SPApplyEffectToObject(oPC, DURATION_TYPE_TEMPORARY, eVis, 3.0f);
|
||||
SPApplyEffectToObject(oPC, DURATION_TYPE_TEMPORARY, eBuff, fDur);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
47
trunk/users/Tenjac/spells/sp_cloakbrave.nss
Normal file
47
trunk/users/Tenjac/spells/sp_cloakbrave.nss
Normal file
@@ -0,0 +1,47 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Cloak of Bravery
|
||||
//:: FileName sp_cloakbrave.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Abjuration [Mind-Affecting]
|
||||
Level: Paladin 2, Cleric 3, Courage 3,
|
||||
Components: V, S,
|
||||
Casting Time: 1 standard action
|
||||
Range: 60 ft.
|
||||
Area: 60-ft.-radius emanation centered on you
|
||||
Duration: 10 minutes/level
|
||||
Saving Throw: Will negates (harmless)
|
||||
Spell Resistance: Yes (harmless)
|
||||
|
||||
Summoning up your courage, you throw out your arm and sweep
|
||||
it over the area, cloaking all your allies in a glittering
|
||||
mantle of magic that bolsters their bravery.
|
||||
|
||||
All allies within the emanation (including you) gain a morale
|
||||
bonus on saves against fear effects equal to your caster level
|
||||
(to a maximum of +10 at caster level 10th).
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/28/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = HoursToSeconds(nCasterLvl)/6;
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(VFX_MOB_CLOAK_OF_BRAVERY), oPC, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_LIGHT_WHITE_20), oPC, fDur);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
49
trunk/users/Tenjac/spells/sp_cloakbraveA.nss
Normal file
49
trunk/users/Tenjac/spells/sp_cloakbraveA.nss
Normal file
@@ -0,0 +1,49 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Cloak of Bravery On Enter
|
||||
//:: FileName sp_cloakbraveA.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Abjuration [Mind-Affecting]
|
||||
Level: Paladin 2, Cleric 3, Courage 3,
|
||||
Components: V, S,
|
||||
Casting Time: 1 standard action
|
||||
Range: 60 ft.
|
||||
Area: 60-ft.-radius emanation centered on you
|
||||
Duration: 10 minutes/level
|
||||
Saving Throw: Will negates (harmless)
|
||||
Spell Resistance: Yes (harmless)
|
||||
|
||||
Summoning up your courage, you throw out your arm and sweep
|
||||
it over the area, cloaking all your allies in a glittering
|
||||
mantle of magic that bolsters their bravery.
|
||||
|
||||
All allies within the emanation (including you) gain a morale
|
||||
bonus on saves against fear effects equal to your caster level
|
||||
(to a maximum of +10 at caster level 10th).
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/28/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oCreator = GetAreaOfEffectCreator();
|
||||
int nCasterLvl = PRCGetCasterLevel(oCreator);
|
||||
float fDur = HoursToSeconds(nCasterLvl)/6;
|
||||
object oTarget = GetEnteringObject();
|
||||
int nBonus = min(10, nCasterLvl);
|
||||
|
||||
if(GetFactionEqual(oCreator))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSavingThrowIncrease(SAVING_THROW_ALL, nBonus, SAVING_THROW_TYPE_FEAR), oTarget, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HEAD_HOLY), oTarget);
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
51
trunk/users/Tenjac/spells/sp_cloakbraveB.nss
Normal file
51
trunk/users/Tenjac/spells/sp_cloakbraveB.nss
Normal file
@@ -0,0 +1,51 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Cloak of Bravery On Exit
|
||||
//:: FileName sp_cloakbraveB.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Abjuration [Mind-Affecting]
|
||||
Level: Paladin 2, Cleric 3, Courage 3,
|
||||
Components: V, S,
|
||||
Casting Time: 1 standard action
|
||||
Range: 60 ft.
|
||||
Area: 60-ft.-radius emanation centered on you
|
||||
Duration: 10 minutes/level
|
||||
Saving Throw: Will negates (harmless)
|
||||
Spell Resistance: Yes (harmless)
|
||||
|
||||
Summoning up your courage, you throw out your arm and sweep
|
||||
it over the area, cloaking all your allies in a glittering
|
||||
mantle of magic that bolsters their bravery.
|
||||
|
||||
All allies within the emanation (including you) gain a morale
|
||||
bonus on saves against fear effects equal to your caster level
|
||||
(to a maximum of +10 at caster level 10th).
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/28/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
object oCaster = GetAreaOfEffectCreator();
|
||||
object oTarget = GetExitingObject();
|
||||
|
||||
effect eToDispel = GetFirstEffect(oTarget);
|
||||
|
||||
while(GetIsEffectValid(eToDispel))
|
||||
{
|
||||
if(GetEffectSpellId(eToDispel) == SPELL_CLOAK_OF_BRAVERY)
|
||||
|
||||
{
|
||||
RemoveEffect(oTarget, eToDispel);
|
||||
}
|
||||
|
||||
eToDispel = GetNextEffect(oTarget);
|
||||
}
|
||||
}
|
||||
}
|
61
trunk/users/Tenjac/spells/sp_conduitlife.nss
Normal file
61
trunk/users/Tenjac/spells/sp_conduitlife.nss
Normal file
@@ -0,0 +1,61 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Conduit of Life
|
||||
//:: FileName sp_conduitlife.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Conjuration (Healing)
|
||||
Level: Cleric 2, Paladin 2,
|
||||
Components: V, S,
|
||||
Casting Time: 1 standard action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 10 minutes/level or until discharged
|
||||
|
||||
A small kernel of positive energy grows within your
|
||||
heart, warming your whole body.
|
||||
|
||||
The next time you use a class feature or racial ability
|
||||
to channel positive energy (such as turn undead or lay on hands),
|
||||
you also heal a number of points of damage to yourself equal to
|
||||
2d10+1/caster level (maximum 10).
|
||||
|
||||
If you are already subject to an ongoing healing effect
|
||||
(such as vigor), or if you receive a cure spell while conduit
|
||||
of life is still in effect, this spell instead heals a number of
|
||||
points of damage equal to 3d8+1/caster level and it is discharged.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 8/5/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = nCasterLvl * 600.0f;
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
//Apply VFX
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_PULSE_YELLOW_WHITE), oPC, fDur);
|
||||
|
||||
//Ongoing healing triggering
|
||||
effect eTest = GetFirstEffect(oTarget);
|
||||
while(GetIsEffectValid(eTest))
|
||||
{
|
||||
if (eTest == EffectRegenerate())
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(d8(3) + nCasterLvl), oPC);
|
||||
PRCRemoveSpellEffects(SPELL_CONDUIT_OF_LIFE, oPC, oPC);
|
||||
break;
|
||||
}
|
||||
eTest = GetNextEffect(oTarget);
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
62
trunk/users/Tenjac/spells/sp_cursebrute.nss
Normal file
62
trunk/users/Tenjac/spells/sp_cursebrute.nss
Normal file
@@ -0,0 +1,62 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Curse of the Brute
|
||||
//:: FileName sp_cursebrute.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Transmutation
|
||||
Level: Paladin 2, Cleric 3,
|
||||
Components: V, S,
|
||||
Casting Time: 1 action
|
||||
Range: Touch
|
||||
Target: Creature touched
|
||||
Duration: 1 round/level
|
||||
Saving Throw: Fortitude negates
|
||||
Spell Resistance: Yes
|
||||
|
||||
You can grant an enhancement bonus up to +1 per caster
|
||||
level to one physical ability of the creature touched
|
||||
(Strength, Constitution, or Dexterity).
|
||||
However, this temporarily suppresses both the creature's
|
||||
Intelligence and Charisma, each by the amount of the
|
||||
enhancement bonus. If this lowers any ability below 3,
|
||||
the spell fails.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 6/17/2022
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
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;
|
||||
int nAbilBuff;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nSpell = PRCGetSpellId();
|
||||
|
||||
//Get ability by which spell is used
|
||||
if (nSpell == SPELL_CURSE_BRUTE_STR) nAbilBuff = ABILITY_STRENGTH;
|
||||
if (nSpell == SPELL_CURSE_BRUTE_DEX) nAbilBuff = ABILITY_DEXTERITY;
|
||||
if (nSpell == SPELL_CURSE_BRUTE_CON) nAbilBuff = ABILITY_CONSTITUTION;
|
||||
|
||||
//Get maximum bonus without lowering either stat below 3
|
||||
int nBonus = min(GetAbilityScore(oTarget, ABILITY_CHARISMA), GetAbilityScore(oTarget, ABILITY_INTELLIGENCE)) - 3;
|
||||
nBonus = min(nCasterLvl, nBonus);
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityIncrease(nAbilBuff, nBonus), oTarget, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityDecrease(ABILITY_INTELLIGENCE, nBonus), oTarget, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityDecrease(ABILITY_CHARISMA, nBonus), oTarget, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_RED_LIGHT), oTarget, fDur);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
93
trunk/users/Tenjac/spells/sp_denounce.nss
Normal file
93
trunk/users/Tenjac/spells/sp_denounce.nss
Normal file
@@ -0,0 +1,93 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Denounce
|
||||
//:: FileName sp_denounce.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Enchantment [Mind-Affecting]
|
||||
Level: Cleric 2, Paladin 2
|
||||
Components: V, S,
|
||||
Casting Time: 1 standard action
|
||||
Range: Close (25 ft. + 5 ft./2 levels)
|
||||
Target: One outsider
|
||||
Duration: 1 min./level (D); see text
|
||||
Saving Throw: Will negates; see text
|
||||
Spell Resistance: Yes
|
||||
|
||||
You point your finger and pronounce judgment.
|
||||
You instill feelings of shame and guilt in a target outsider, imposing a -4 insight penalty
|
||||
on its attack rolls, saves, and checks. Each round on its turn, the subject can attempt a new
|
||||
saving throw to end the effect.
|
||||
|
||||
(This is a full-round action that does not provoke attacks of opportunity).
|
||||
Outsiders with the good subtype are immune to denounce.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 5/25/2022
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void SaveCheck(object oTarget, object oPC, int nRounds)
|
||||
{
|
||||
if(GetHasSpellEffect(SPELL_DENOUNCE, oTarget))
|
||||
{
|
||||
//Save
|
||||
if(PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget, OBJECT_SELF)))
|
||||
{
|
||||
RemoveSpellEffects(SPELL_DENOUNCE);
|
||||
}
|
||||
|
||||
//Loop for another round
|
||||
else
|
||||
{
|
||||
nRounds--;
|
||||
DelayCommand(6.0f, SaveCheck(oTarget, oPC, nRounds));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ENCHANTMENT);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = 60.0f *(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
object oTarget = SPGetSpellTargetObject();
|
||||
int nPenetr = nCaster + SPGetPenetr();
|
||||
|
||||
if(GetObjectType(oTarget) == OBJECT_TYPE_CREATURE)
|
||||
{
|
||||
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_OUTSIDER)
|
||||
{
|
||||
//No good subtypes, interpret as good alignment
|
||||
if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_GOOD)
|
||||
{
|
||||
SendMessageToPC(oPC, "Outsiders of good alignment are immune to Denounce."
|
||||
}
|
||||
//Non-good outsider; resolve spell
|
||||
else
|
||||
{
|
||||
//SR
|
||||
if(!PRCDoResistSpell(oCreator, oTarget, nPenetr))
|
||||
{
|
||||
//Save
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget, OBJECT_SELF)))
|
||||
{
|
||||
effect eLink = EffectLinkEffects(EffectAttackDecrease(4), EffectSavingThrowDecrease(SAVING_THROW_ALL, 4));
|
||||
eLink = EffectLinkEffects(eLink, EffectSkillDecrease(SKILL_ALL_SKILLS, 4));
|
||||
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_AURA_PULSE_ORANGE_WHITE));
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDur);
|
||||
DelayCommand(6.0f, SaveCheck(oTarget, oPC, FloatToInt(fDur / 6)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
48
trunk/users/Tenjac/spells/sp_devsmite.nss
Normal file
48
trunk/users/Tenjac/spells/sp_devsmite.nss
Normal file
@@ -0,0 +1,48 @@
|
||||
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Devastating Smite
|
||||
//:: FileName sp_devsmite.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Transmutation
|
||||
Level: Blackguard 1, Cleric 1, Paladin 1,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 swift action
|
||||
Range: Touch
|
||||
Target: Creature touched
|
||||
Duration: 1 round or until discharged; see text
|
||||
Saving Throw: Will negates (harmless)
|
||||
Spell Resistance: Yes (harmless)
|
||||
|
||||
The next smite attack made by the subject deals double
|
||||
its normal smite damage. For instance, a 9th-level paladin
|
||||
normally deals an extra 9 points of damage with her smite
|
||||
evil ability. Under the effect of this spell, she would
|
||||
deal an extra 18 points of damage. The spell applies to
|
||||
only one smite attack; if that attack misses, the spell
|
||||
is lost without effect.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/28/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(1);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
//Apply VFX, handle damage in smite script
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_PULSE_ORANGE_WHITE), oPC, fDur);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
77
trunk/users/Tenjac/spells/sp_diamondsteel.nss
Normal file
77
trunk/users/Tenjac/spells/sp_diamondsteel.nss
Normal file
@@ -0,0 +1,77 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Diamondsteel
|
||||
//:: FileName sp_diamondsteel.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Diamondsteel
|
||||
Transmutation
|
||||
Level: Paladin 3, Sorcerer 3, Wizard 3,
|
||||
Components: V, S, M,
|
||||
Casting Time: 1 standard action
|
||||
Range: Touch
|
||||
Target: Suit of metal armor touched
|
||||
Duration: 1 round/level
|
||||
Saving Throw: Will negates (object)
|
||||
Spell Resistance: Yes (object)
|
||||
|
||||
You pass your hand over the suit of armor several times before finally touching it.
|
||||
As you do so, you feel a warmth grow in the palm of your hand. The warmth passes into
|
||||
the armor and manifests as a sparkling shine.
|
||||
|
||||
Diamondsteel enhances the strength of one suit of metal armor. The armor provides
|
||||
damage reduction equal to half the AC bonus of the armor. This damage reduction can
|
||||
be overcome only by adamantine weapons. For example, a suit of full plate would provide
|
||||
damage reduction 4/adamantine, and a +1 breastplate (+6 AC) would provide damage reduction
|
||||
3/adamantine.
|
||||
|
||||
Material Component: Diamond dust worth at least 50 gp.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/23/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
int oTarget = SPGetSpellTargetObject();
|
||||
|
||||
if(GetObjectType(oTarget)) == OBJECT_TYPE_ITEM
|
||||
{
|
||||
oArmor = oTarget;
|
||||
}
|
||||
|
||||
if(GetObjectType(oTarget)) == OBJECT_TYPE_CREATURE
|
||||
{
|
||||
oArmor = GetItemInSlot(INVENTORY_SLOT_CHEST, oTarget);
|
||||
}
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
int nAC = GetBaseAC(oArmor);
|
||||
|
||||
//Must be metal
|
||||
if(nAC > 3)
|
||||
{
|
||||
if(nMetaMagic & METAMAGIC_EXTEND)
|
||||
{
|
||||
fDur += fDur;
|
||||
}
|
||||
|
||||
//Get amount for bonus - includes any +
|
||||
int nBonus = GetItemACValue(oArmor)/2;
|
||||
|
||||
//Adamantine is x/+5
|
||||
effect eDR = EffectDamageReduction(nBonus, DAMAGE_POWER_PLUS_FIVE);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDR, oTarget, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_AC_BONUS), oTarget);
|
||||
}
|
||||
else SendMessageToPC(oPC, "Invalid target. Target armor must be metal."
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
107
trunk/users/Tenjac/spells/sp_enshield.nss
Normal file
107
trunk/users/Tenjac/spells/sp_enshield.nss
Normal file
@@ -0,0 +1,107 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Energy Shield
|
||||
//:: FileName sp_enshield.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Abjuration
|
||||
Level: Paladin 2, Cleric 3
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 Standard Action
|
||||
Range: Touch
|
||||
Target: Shield touched
|
||||
Duration: 1 round/level
|
||||
Saving Throw: None
|
||||
Spell Resistance: No
|
||||
|
||||
A silver aura surrounds the touched shield for a
|
||||
moment before it appears to transform into the chosen
|
||||
type of energy. The shield hums with power.
|
||||
|
||||
When this spell is cast, the shield touched appears
|
||||
to be made entirely out of one type of energy (fire,
|
||||
cold, electricity, acid, or sonic). Whoever bears the
|
||||
shield gains resistance 10 against the chosen energy
|
||||
type. Additionally, if the wielder successfully hits
|
||||
someone with the shield with a shield bash attack, th
|
||||
e victim takes 2d6 points of the appropriate energy
|
||||
damage in addition to the normal shield bash damage.
|
||||
The energy type must be chosen when the spell is cast
|
||||
and cannot be changed during the duration of the spell.
|
||||
The energy resistance overlaps (and does not stack)
|
||||
with resist elements. A given shield cannot be the
|
||||
subject of more than one lesser energized shield
|
||||
or energized shield spell at the same time.
|
||||
|
||||
The descriptor of this spell is the same as the
|
||||
energy type you choose when you cast it.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 6/19/2022
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
#include "prc_inc_fork"
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget);
|
||||
|
||||
//Check that this is a shield, if not abort
|
||||
if(GetIsShield(oShield) == FALSE)
|
||||
{
|
||||
SendMessageToPC(OBJECT_SELF, "Target has no equipped shield.");
|
||||
break;
|
||||
}
|
||||
|
||||
//The type of damage resistance we're choosing
|
||||
int nDR;
|
||||
|
||||
//Get the type by which subradial spell is used to cast
|
||||
int nSpell = GetSpellId();
|
||||
if(nSpell == SPELL_ENERGIZED_SHIELD_FIRE)
|
||||
{
|
||||
nDR = IP_CONST_DAMAGETYPE_FIRE;
|
||||
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_FIRE);
|
||||
}
|
||||
if(nSpell == SPELL_ENERGIZED_SHIELD_COLD)
|
||||
{
|
||||
nDR = IP_CONST_DAMAGETYPE_COLD;
|
||||
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_COLD);
|
||||
}
|
||||
if(nSpell == SPELL_ENERGIZED_SHIELD_ELEC)
|
||||
{
|
||||
nDR = IP_CONST_DAMAGETYPE_ELECTRICAL;
|
||||
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_ELECTRICAL);
|
||||
}
|
||||
if(nSpell == SPELL_ENERGIZED_SHIELD_ACID)
|
||||
{
|
||||
nDR = IP_CONST_DAMAGETYPE_ACID;
|
||||
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_ACID);
|
||||
}
|
||||
if(nSpell == SPELL_ENERGIZED_SHIELD_SONIC)
|
||||
{
|
||||
nDR = IP_CONST_DAMAGETYPE_SONIC;
|
||||
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_SONIC);
|
||||
}
|
||||
|
||||
//Set local int for amount of shield damage on the wielder of the shield
|
||||
SetLocalInt(oTarget, "EnShieldD6", 2);
|
||||
|
||||
//Schedule ints for deletion
|
||||
DelayCommand(fDur, DeleteLocalInt(oTarget, "EnShieldType"));
|
||||
DelayCommand(fDur, DeleteLocalInt(oTarget, "EnShieldD6"));
|
||||
|
||||
//Add resistance property
|
||||
IPSafeAddItemProperty(oShield, ItemPropertyDamageResistance(nDR, 10), fDur, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
105
trunk/users/Tenjac/spells/sp_estanasstew.nss
Normal file
105
trunk/users/Tenjac/spells/sp_estanasstew.nss
Normal file
@@ -0,0 +1,105 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Estana's Stew
|
||||
//:: FileName sp_estanasstew.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Conjuration (Healing)
|
||||
Level: Cleric 2, Druid 2, Paladin 2,
|
||||
Components: V, S, AF,
|
||||
Casting Time: 1 round
|
||||
Range: 0 ft.
|
||||
Effect: Fills pot with healing stew (1 serving/2 levels)
|
||||
Duration: Instantaneous (see text)
|
||||
Saving Throw: Will half (harmless); see text
|
||||
Spell Resistance: Yes (harmless)
|
||||
|
||||
This spell calls upon Estanna, goddess of hearth and home
|
||||
, to fill a specially crafted stewpot with a potent healing stew.
|
||||
The caster must be hold the pot in hand when Estanna's stew
|
||||
is cast; otherwise, the spell fails and is wasted.
|
||||
The spell creates one serving per two caster levels (maximum 5).
|
||||
A single serving heals 1d6+1 points of damage and requires
|
||||
a standard action to consume. Any portion of the stew that
|
||||
is not consumed disappears after 1 hour.The stew can be
|
||||
splashed onto a single undead creature within 10 feet.
|
||||
If a ranged touch attack succeeds, the undead creature
|
||||
takes 1d6+1 points of damage per serving splashed on it.
|
||||
The undead creature can apply spell resistance and can
|
||||
attempt a Will save to take half damage.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 6/20/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nSpell = GetSpellId();
|
||||
|
||||
if (nSpell == SPELL_ESTANAS_STEW)
|
||||
{
|
||||
object oItem = CreateItemOnObject("prc_estanasstew", oPC, 1);
|
||||
int nServings = min(5, (nCasterLvl/2));
|
||||
SetItemCharges(oItem, nServings);
|
||||
}
|
||||
|
||||
if (nSpell == SPELL_ESTANAS_STEW_EAT)
|
||||
{
|
||||
int nHeal = d6(1) + 1;
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(nHeal), oPC);
|
||||
}
|
||||
|
||||
if (nSpell == SPELL_ESTANAS_STEW_SPLASH)
|
||||
{
|
||||
object oItem = PRCGetSpellCastItem(OBJECT_SELF);
|
||||
object oTarget = GetSpellTargetObject();
|
||||
|
||||
|
||||
if(GetIsObjectValid(oTarget))
|
||||
{
|
||||
nTouch = TouchAttackRanged(oTarget);
|
||||
}
|
||||
// Check if we hit, or even have anything to hit!
|
||||
if(nTouch >= 1)
|
||||
{
|
||||
int nServings = GetItemCharges(oItem);
|
||||
|
||||
//Chuck all of it
|
||||
int nDam = (d6(1) + 1) * nServings;
|
||||
|
||||
// Critical hit?
|
||||
if(nTouch == 2)
|
||||
{
|
||||
nDam *= 2;
|
||||
}
|
||||
int nPenetr = SPGetPenetr();
|
||||
|
||||
//Resist
|
||||
if(!PRCDoResistSpell(OBJECT_SELF, oTarget nPenetr);
|
||||
{
|
||||
if(PRCMySavingThrow(SAVING_THROW_WILL, oTarget, PRCGetSaveDC(oTarget, OBJECT_SELF)))
|
||||
{
|
||||
nDam = nDam/2'
|
||||
}
|
||||
|
||||
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectDamage(oTarget, nDam, DAMAGE_TYPE_DIVINE), oTarget);
|
||||
}
|
||||
}
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPER_INSTANT, EffectVisualEffect(VFX_COM_CHUNK_YELLOW_SMALL), oTarget);
|
||||
}
|
||||
//Remove the object
|
||||
DestroyObject(oItem);
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
72
trunk/users/Tenjac/spells/sp_favormartyr.nss
Normal file
72
trunk/users/Tenjac/spells/sp_favormartyr.nss
Normal file
@@ -0,0 +1,72 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Favor of the Martyr
|
||||
//:: FileName sp_favormartyr.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Necromancy
|
||||
Level: Paladin 4,
|
||||
Components: V, S,
|
||||
Casting Time: 1 standard action
|
||||
Range: Medium (100 ft. + 10 ft./level)
|
||||
Target: One willing creature
|
||||
Duration: 1 minute/level
|
||||
Saving Throw: None
|
||||
Spell Resistance: Yes (harmless)
|
||||
|
||||
Calling upon the saints of your order, you imbue the person
|
||||
in need with the power to resist the dire forces arrayed
|
||||
against you.
|
||||
|
||||
The subject gains immunity to nonlethal damage, charm and
|
||||
compulsion effects, and attacks that function specifically
|
||||
by causing pain, such as the wrack spell (see page 243). it
|
||||
is further immune to effects that would cause it to be dazed,
|
||||
exhausted, fatigued, nauseated, sickened, staggered, or stunned.
|
||||
The subject remains conscious at -1 to -9 hit points and can
|
||||
take a single action each round while in that state, and does
|
||||
not lose hit point for acting. If any of the above conditions
|
||||
were in effect on the subject at the time of casting, they are
|
||||
suspended for the spell's duration. (Thus, an unconscious
|
||||
subject becomes conscious and functional.)
|
||||
|
||||
When the spell ends, any effects suspended by the spell that
|
||||
have not expired in the interim (such as the fatigued condition,
|
||||
which normally requires 8 hours of rest to recover from) return.
|
||||
Effects that expired during the duration of this spell do not
|
||||
resume when it ends.
|
||||
|
||||
In addition to these effects, the subject gains the benefit of
|
||||
the Endurance feat for the duration of the spell.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 6/29/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_NECROMANCY);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = 60.0f * (nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
//Immunities
|
||||
effect eLink = EffectLinkEffects(EffectImmunity(IMMUNITY_TYPE_CHARM), EffectImmunity(IMMUNITY_TYPE_DAZED));
|
||||
eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_STUN));
|
||||
|
||||
//+4 Save vs Death
|
||||
eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, 4, SAVING_THROW_TYPE_DEATH));
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDur);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
67
trunk/users/Tenjac/spells/sp_forceward.nss
Normal file
67
trunk/users/Tenjac/spells/sp_forceward.nss
Normal file
@@ -0,0 +1,67 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Forceward
|
||||
//:: FileName sp_forceward.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Abjuration
|
||||
Level: Cleric 3 (Helm), Paladin 3, Knight of the Weave 3,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 full round
|
||||
Range: 10 ft.
|
||||
Area: 10-ft.-radius emanation centered on you
|
||||
Duration: 1 minute/level
|
||||
Saving Throw: Will negates
|
||||
Spell Resistance: Yes
|
||||
|
||||
You create an unmoving, transparent sphere of force
|
||||
centered on your location.
|
||||
The sphere illuminates its interior and everything
|
||||
within 5 feet of its edge.
|
||||
You and your allies may enter the sphere at will.
|
||||
Any other creature that tries to enter the sphere must
|
||||
make a Will saving throw, otherwise it cannot pass into
|
||||
the area defined by the sphere.
|
||||
A creature may leave the area freely, although it must
|
||||
make a Will save to enter again, even if the creature
|
||||
is you or one of your allies.
|
||||
Creatures within the area when the spell is cast are not
|
||||
forced out.
|
||||
The forceward does not prevent spells or objects from
|
||||
entering the forceward, so it is possible for two creatures
|
||||
on opposite sides of the forceward's edge to fight without
|
||||
penalties (although creatures using unarmed attacks or
|
||||
natural weapons still have tomake Will saves every round
|
||||
for their attacks to have a chance of entering the forceward).
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 07/04/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
location lLoc = GetLocation(oPC);
|
||||
|
||||
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(VFX_PER_FORCEWARD), lLoc, fDur);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_LIGHT_ORANGE_15), lLoc, fDur);
|
||||
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, 3.048f, lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
||||
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
SetLocalInt(oTarget, "PRCForcewardEntry", 1)
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, 3.048f, lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
60
trunk/users/Tenjac/spells/sp_forcewardA.nss
Normal file
60
trunk/users/Tenjac/spells/sp_forcewardA.nss
Normal file
@@ -0,0 +1,60 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Forceward On Enter
|
||||
//:: FileName sp_forcewardA.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Abjuration
|
||||
Level: Cleric 3 (Helm), Paladin 3, Knight of the Weave 3,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 full round
|
||||
Range: 10 ft.
|
||||
Area: 10-ft.-radius emanation centered on you
|
||||
Duration: 1 minute/level
|
||||
Saving Throw: Will negates
|
||||
Spell Resistance: Yes
|
||||
|
||||
You create an unmoving, transparent sphere of force
|
||||
centered on your location.
|
||||
The sphere illuminates its interior and everything
|
||||
within 5 feet of its edge.
|
||||
You and your allies may enter the sphere at will.
|
||||
Any other creature that tries to enter the sphere must
|
||||
make a Will saving throw, otherwise it cannot pass into
|
||||
the area defined by the sphere.
|
||||
A creature may leave the area freely, although it must
|
||||
make a Will save to enter again, even if the creature
|
||||
is you or one of your allies.
|
||||
Creatures within the area when the spell is cast are not
|
||||
forced out.
|
||||
The forceward does not prevent spells or objects from
|
||||
entering the forceward, so it is possible for two creatures
|
||||
on opposite sides of the forceward's edge to fight without
|
||||
penalties (although creatures using unarmed attacks or
|
||||
natural weapons still have tomake Will saves every round
|
||||
for their attacks to have a chance of entering the forceward).
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 07/04/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetEnteringObject();
|
||||
object oCreator = GetAreaOfEffectCreator();
|
||||
int nDC = PRCGetSaveDC(oTarget, oCreator);
|
||||
int nCasterLvl = PRCGetCasterLevel(oCreator);
|
||||
location lAOE = GetLocation(OBJECT_SELF);
|
||||
|
||||
//Will save if it doesn't have the local int
|
||||
if(!GetLocalInt(oTarget, "PRCForcewardEntry"))
|
||||
{
|
||||
if(!PRCMySavingThrow(SAVING_THROW_WILL, oTarget, nDC, SAVING_THROW_TYPE_NONE, oCreator))
|
||||
{
|
||||
ActionMoveAwayFromLocation(lAOE, FALSE, 3.048f);
|
||||
}
|
||||
}
|
||||
}
|
44
trunk/users/Tenjac/spells/sp_forcewardB.nss
Normal file
44
trunk/users/Tenjac/spells/sp_forcewardB.nss
Normal file
@@ -0,0 +1,44 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Forceward On Exit
|
||||
//:: FileName sp_forcewardB.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/4/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetExitingObject();
|
||||
|
||||
if(GetLocalInt(oTarget, "PRCForcewardEntry"))
|
||||
{
|
||||
DeleteLocalInt(oTarget, "PRCForcewardEntry"));
|
||||
}
|
||||
|
||||
effect eAOE;
|
||||
if(GetHasSpellEffect(SPELL_SOLID_FOG, oTarget))
|
||||
{
|
||||
//Search through the valid effects on the target.
|
||||
eAOE = GetFirstEffect(oTarget);
|
||||
while (GetIsEffectValid(eAOE))
|
||||
{
|
||||
if (GetEffectCreator(eAOE) == GetAreaOfEffectCreator())
|
||||
{
|
||||
//If the effect was created by either half of Fog from the Void
|
||||
if(GetEffectSpellId(eAOE) == SPELL_SOLID_FOG)
|
||||
{
|
||||
RemoveEffect(oTarget, eAOE);
|
||||
}
|
||||
}
|
||||
}
|
||||
//Get next effect on the target
|
||||
eAOE = GetNextEffect(oTarget);
|
||||
}
|
||||
}
|
135
trunk/users/Tenjac/spells/sp_glorymartyr.nss
Normal file
135
trunk/users/Tenjac/spells/sp_glorymartyr.nss
Normal file
@@ -0,0 +1,135 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Glory of the Martyr
|
||||
//:: FileName sp_glorymartyr.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Abjuration [Good]
|
||||
Level: Champion of Gwynharwyf 4, Paladin 4,
|
||||
Components: V, S, AF, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: Close (25 ft. + 5 ft./2 levels)
|
||||
Target: One creature/level
|
||||
Duration: 1 hour/level (D)
|
||||
Saving Throw: Will negates (harmless)
|
||||
Spell Resistance: Yes (harmless)
|
||||
|
||||
Like shield other, this spell wards the subjects,
|
||||
creating a mystic connection between them and you
|
||||
so that some of their wounds are transferred to you.
|
||||
The subjects each gain a +1 deflection bonus to AC
|
||||
and a +1 resistance bonus on saves.
|
||||
|
||||
All the subjects take only half damage from all
|
||||
wounds and attacks that deal them hit point damage.
|
||||
The amount of damage not taken by all the warded
|
||||
creatures is taken by you.
|
||||
|
||||
Forms of harm that do not involve hit points, such
|
||||
as charm effects, temporary ability damage, level
|
||||
draining, and disintegration, are not affected.
|
||||
If a subject suffers a reduction of hit points
|
||||
from a lowered Constitution score, the reduction
|
||||
is not split with you because it is not hit point damage.
|
||||
When the spell ends, subsequent damage is no
|
||||
longer divided between you and the subjects, but
|
||||
damage already split is not reassigned to the
|
||||
subjects.
|
||||
|
||||
If you die while this spell is in effect, the spell
|
||||
ends in a burst of positive energy that restores 1d8
|
||||
hit points to each subject.
|
||||
|
||||
If a subject moves out of range of the spell, that
|
||||
subject's connection to you is severed but the spell
|
||||
continues as long as there is at least one subject
|
||||
remaining and you remain alive.
|
||||
|
||||
Focus: A platinum ring (worth at least 50 gp) worn
|
||||
by you and each subject of the spell.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/28/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void DispelMonitor(object oManifester, object oTarget, int nSpellID, int nManifesterLevel, int nBeatsRemaining);
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = HoursToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
int nBeatsRemaining = FloatToInt(fDur)/6;
|
||||
int nMaxTargets = nCasterLvl;
|
||||
float fRadius = FeetToMeters(25.0f + (5.0f * (nCasterLvl / 2))))
|
||||
location lLoc = GetLocation(oPC);
|
||||
int nSpell = GetSpellId();
|
||||
effect eDurPos = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_POSITIVE);
|
||||
effect eDurNeg = EffectVisualEffect(VFX_DUR_MIND_AFFECTING_NEGATIVE);
|
||||
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, fRadius, lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
||||
|
||||
while(GetIsObjectValid(oTarget) && nMaxTargets >0)
|
||||
{
|
||||
if(oTarget != oPC)
|
||||
{
|
||||
if(GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
// Get the OnHitCast: Unique on the caster's armor / hide
|
||||
ExecuteScript("prc_keep_onhit_a", oPC);
|
||||
|
||||
// Hook eventscript
|
||||
AddEventScript(oPC, EVENT_ONHIT, "psi_pow_shrpnaux", TRUE, FALSE);
|
||||
|
||||
// Store the target for use in the damage script
|
||||
SetLocalObject(oPC, "PRC_Power_SharePain_Target", oTarget);
|
||||
|
||||
//Apply bonuses to target
|
||||
effect eLink = EffectLinkEffects(EffectACIncrease(1, AC_DEFLECTION_BONUS), EffectSavingThrowIncrease(SAVING_THROW_ALL, 1, SAVING_THROW_TYPE_ALL));
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDur);
|
||||
|
||||
// Do VFX for the monitor to look for
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDurNeg, oTarget, fDur, TRUE, nSpell, nCasterLvl);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eDurPos, oPC, fDur, TRUE, nSpell, nCasterLvl);
|
||||
|
||||
// Start effect end monitor
|
||||
DelayCommand(6.0f, DispelMonitor(oPC, oTarget, nSpell, nCasterLvl, nBeatsRemaining);
|
||||
nMaxTargets--;
|
||||
}
|
||||
}
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, fRadius, lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
||||
|
||||
void DispelMonitor(object oPC, object oTarget, int nSpellID, int CasterLvl, int nBeatsRemaining)
|
||||
{
|
||||
// Has the power ended since the last beat, or does the duration run out now
|
||||
if((--nBeatsRemaining == 0) ||
|
||||
GetIsDead(oTarget) ||
|
||||
PRCGetDelayedSpellEffectsExpired(nSpellID, oTarget, oPC) ||
|
||||
PRCGetDelayedSpellEffectsExpired(nSpellID, oPC, oPC) ||
|
||||
GetDistanceBetween(oPC, oTarget) > FeetToMeters(25.0f + (5.0f * (nCasterLvl / 2))))
|
||||
{
|
||||
if(DEBUG) DoDebug("Glory of the Martyr: Effect expired, clearing");
|
||||
// Clear the target local
|
||||
DeleteLocalObject(PC, "PRC_Power_SharePain_Target");
|
||||
// Remove the eventscript
|
||||
RemoveEventScript(oPC, EVENT_ONHIT, "psi_pow_shrpnaux", TRUE, FALSE);
|
||||
|
||||
// Remove remaining effects
|
||||
PRCRemoveSpellEffects(nSpellID, oPC, oTarget);
|
||||
PRCRemoveSpellEffects(nSpellID, oPC, oPC);
|
||||
}
|
||||
else
|
||||
{
|
||||
nBeatsRemaining --;
|
||||
DelayCommand(6.0f, DispelMonitor(oPC, oTarget, nSpellID, nCasterLvl, nBeatsRemaining));
|
||||
|
||||
}
|
46
trunk/users/Tenjac/spells/sp_holyfire.nss
Normal file
46
trunk/users/Tenjac/spells/sp_holyfire.nss
Normal file
@@ -0,0 +1,46 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Holy Fire
|
||||
//:: FileName sp_holyfire.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Evocation [Fire, Good]
|
||||
Level: Cleric 2, Paladin 3,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 swift action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 round
|
||||
|
||||
All undead within range of your next turning attempt
|
||||
(if you make it before this spell's duration expires)
|
||||
are especially vulnerable to the attempt. Whether you
|
||||
succeed in turning them or not, the undead take hit
|
||||
point damage equal to the result of your turning damage
|
||||
roll. This damage is half fire and half sacred energy.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 6/21/2022
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(1);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
//Set a VFX
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_PROTECTION_GOOD_MAJOR), oPC);
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(VFX_MOB_HOLYFIRE), oPC);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
35
trunk/users/Tenjac/spells/sp_holyfireA.nss
Normal file
35
trunk/users/Tenjac/spells/sp_holyfireA.nss
Normal file
@@ -0,0 +1,35 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Holy Fire On Enter
|
||||
//:: FileName sp_holyfireA.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Evocation [Fire, Good]
|
||||
Level: Cleric 2, Paladin 3,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 swift action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 round
|
||||
|
||||
All undead within range of your next turning attempt
|
||||
(if you make it before this spell's duration expires)
|
||||
are especially vulnerable to the attempt. Whether you
|
||||
succeed in turning them or not, the undead take hit
|
||||
point damage equal to the result of your turning damage
|
||||
roll. This damage is half fire and half sacred energy.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 6/21/2022
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetEnteringObject();
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_PULSE_YELLOW_ORANGE), oTarget, 6.0f);
|
||||
}
|
46
trunk/users/Tenjac/spells/sp_holyfireB.nss
Normal file
46
trunk/users/Tenjac/spells/sp_holyfireB.nss
Normal file
@@ -0,0 +1,46 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Holy Fire On Exit
|
||||
//:: FileName sp_holyfireB.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Evocation [Fire, Good]
|
||||
Level: Cleric 2, Paladin 3,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 swift action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 round
|
||||
|
||||
All undead within range of your next turning attempt
|
||||
(if you make it before this spell's duration expires)
|
||||
are especially vulnerable to the attempt. Whether you
|
||||
succeed in turning them or not, the undead take hit
|
||||
point damage equal to the result of your turning damage
|
||||
roll. This damage is half fire and half sacred energy.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 6/21/2022
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_inc_spells"
|
||||
#include "prc_add_spell_dc"
|
||||
void main()
|
||||
{
|
||||
object oCaster = GetAreaOfEffectCreator();
|
||||
object oTarget = GetExitingObject();
|
||||
|
||||
effect eToDispel = GetFirstEffect(oTarget);
|
||||
|
||||
while(GetIsEffectValid(eToDispel))
|
||||
{
|
||||
if(GetEffectSpellId(eToDispel) == SPELL_HOLY_FIRE)
|
||||
|
||||
{
|
||||
RemoveEffect(oTarget, eToDispel);
|
||||
}
|
||||
|
||||
eToDispel = GetNextEffect(oTarget);
|
||||
}
|
||||
}
|
||||
}
|
62
trunk/users/Tenjac/spells/sp_holystorm.nss
Normal file
62
trunk/users/Tenjac/spells/sp_holystorm.nss
Normal file
@@ -0,0 +1,62 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Holy Storm
|
||||
//:: FileName sp_holystorm.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Conjuration (Creation) [Good, Water]
|
||||
Level: Cleric 3, Paladin 3,
|
||||
Components: V, S, M, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: 20 ft.
|
||||
Area: Cylinder (20-ft. radius, 20 ft. high)
|
||||
Duration: 1 round/level (D)
|
||||
Saving Throw: None
|
||||
Spell Resistance: No
|
||||
|
||||
You call upon the forces of good, and a heavy rain begins to fall
|
||||
around you, its raindrops soft and warm.
|
||||
|
||||
A driving rain falls around you. It falls in a fixed area once
|
||||
created. The storm reduces hearing and visibility, resulting in a
|
||||
-4 penalty on Listen, Spot, and Search checks. It also applies a
|
||||
-4 penalty on ranged attacks made into, out of, or through the
|
||||
storm. Finally, it automatically extinguishes any unprotected
|
||||
flames and has a 50% chance to extinguish protected flames
|
||||
(such as those of lanterns).
|
||||
|
||||
The rain damages evil creatures, dealing 2d6 points of damage
|
||||
per round (evil outsiders take double damage) at the beginning
|
||||
of your turn.
|
||||
|
||||
Material Component: A flask of holy water (25 gp).
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/9/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
//VFX
|
||||
effect eVis = EffectVisualEffect(VFX_FNF_STORM);
|
||||
|
||||
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lTarget);
|
||||
ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(AOE_PER_STORM, "sp_holystormA", "sp_holystormB", "sp_holystormC"), lTarget, fDur);
|
||||
|
||||
object oAoE = GetAreaOfEffectObject(lTarget, "VFX_PER_STORM");
|
||||
SetAllAoEInts(SPELL_HOLY_STORM, oAoE, PRCGetSpellSaveDC(SPELL_HOLY_STORM, SPELL_SCHOOL_CONJURATION), 0, PRCGetCasterLevel(oPC));
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
48
trunk/users/Tenjac/spells/sp_holystormA.nss
Normal file
48
trunk/users/Tenjac/spells/sp_holystormA.nss
Normal file
@@ -0,0 +1,48 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Holy Storm On Enter
|
||||
//:: FileName sp_holystormA.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Conjuration (Creation) [Good, Water]
|
||||
Level: Cleric 3, Paladin 3,
|
||||
Components: V, S, M, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: 20 ft.
|
||||
Area: Cylinder (20-ft. radius, 20 ft. high)
|
||||
Duration: 1 round/level (D)
|
||||
Saving Throw: None
|
||||
Spell Resistance: No
|
||||
|
||||
You call upon the forces of good, and a heavy rain begins to fall
|
||||
around you, its raindrops soft and warm.
|
||||
|
||||
A driving rain falls around you. It falls in a fixed area once
|
||||
created. The storm reduces hearing and visibility, resulting in a
|
||||
-4 penalty on Listen, Spot, and Search checks. It also applies a
|
||||
-4 penalty on ranged attacks made into, out of, or through the
|
||||
storm.
|
||||
|
||||
The rain damages evil creatures, dealing 2d6 points of damage
|
||||
per round (evil outsiders take double damage) at the beginning
|
||||
of your turn.
|
||||
|
||||
Material Component: A flask of holy water (25 gp).
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/9/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetEnteringObject();
|
||||
|
||||
effect ePenalty = EffectLinkEffects(EffectSkillDecrease(SKILL_LISTEN, 4), EffectSkillDecrease(SKILL_SPOT), 4));
|
||||
ePenalty = EffectLinkEffects(ePenalty, EffectSkillDecrease(SKILL_SEARCH, 4));
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePenalty, oTarget, RoundsToSeconds(1));
|
||||
}
|
53
trunk/users/Tenjac/spells/sp_holystormB.nss
Normal file
53
trunk/users/Tenjac/spells/sp_holystormB.nss
Normal file
@@ -0,0 +1,53 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Holy Storm On Enter
|
||||
//:: FileName sp_holystormA.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Conjuration (Creation) [Good, Water]
|
||||
Level: Cleric 3, Paladin 3,
|
||||
Components: V, S, M, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: 20 ft.
|
||||
Area: Cylinder (20-ft. radius, 20 ft. high)
|
||||
Duration: 1 round/level (D)
|
||||
Saving Throw: None
|
||||
Spell Resistance: No
|
||||
|
||||
You call upon the forces of good, and a heavy rain begins to fall
|
||||
around you, its raindrops soft and warm.
|
||||
|
||||
A driving rain falls around you. It falls in a fixed area once
|
||||
created. The storm reduces hearing and visibility, resulting in a
|
||||
-4 penalty on Listen, Spot, and Search checks. It also applies a
|
||||
-4 penalty on ranged attacks made into, out of, or through the
|
||||
storm.
|
||||
|
||||
The rain damages evil creatures, dealing 2d6 points of damage
|
||||
per round (evil outsiders take double damage) at the beginning
|
||||
of your turn.
|
||||
|
||||
Material Component: A flask of holy water (25 gp).
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/9/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
object oTarget = GetExitingObject();
|
||||
effect eToDispel = GetFirstEffect(oTarget);
|
||||
while(GetIsEffectValid(eToDispel))
|
||||
{
|
||||
if(GetEffectSpellId(eToDispel) == SPELL_HOLY_STORM)
|
||||
{
|
||||
RemoveEffect(oTarget, eToDispel);
|
||||
}
|
||||
|
||||
eToDispel = GetNextEffect(oTarget);
|
||||
}
|
||||
}
|
76
trunk/users/Tenjac/spells/sp_holystormC.nss
Normal file
76
trunk/users/Tenjac/spells/sp_holystormC.nss
Normal file
@@ -0,0 +1,76 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Holy Storm On Enter
|
||||
//:: FileName sp_holystormA.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Conjuration (Creation) [Good, Water]
|
||||
Level: Cleric 3, Paladin 3,
|
||||
Components: V, S, M, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: 20 ft.
|
||||
Area: Cylinder (20-ft. radius, 20 ft. high)
|
||||
Duration: 1 round/level (D)
|
||||
Saving Throw: None
|
||||
Spell Resistance: No
|
||||
|
||||
You call upon the forces of good, and a heavy rain begins to fall
|
||||
around you, its raindrops soft and warm.
|
||||
|
||||
A driving rain falls around you. It falls in a fixed area once
|
||||
created. The storm reduces hearing and visibility, resulting in a
|
||||
-4 penalty on Listen, Spot, and Search checks. It also applies a
|
||||
-4 penalty on ranged attacks made into, out of, or through the
|
||||
storm.
|
||||
|
||||
The rain damages evil creatures, dealing 2d6 points of damage
|
||||
per round (evil outsiders take double damage) at the beginning
|
||||
of your turn.
|
||||
|
||||
Material Component: A flask of holy water (25 gp).
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/9/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
location lLoc = GetLocation(OBJECT_SELF);
|
||||
int nDam;
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, 6.096f, lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
||||
effect ePenalty = EffectLinkEffects(EffectSkillDecrease(SKILL_LISTEN, 4), EffectSkillDecrease(SKILL_SPOT), 4));
|
||||
ePenalty = EffectLinkEffects(ePenalty, EffectSkillDecrease(SKILL_SEARCH, 4));
|
||||
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
//Penalties to skills
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePenalty, oTarget, RoundsToSeconds(1));
|
||||
|
||||
//Penalty to attack if ranged equipped
|
||||
if(GetWeaponRanged(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAttackDecrease(4), 6.0f);
|
||||
}
|
||||
|
||||
//Bonus AC vs Ranged?
|
||||
|
||||
//if evil
|
||||
if(GetAlignmentGoodEvil(oTarget) == ALIGNMENT_EVIL)
|
||||
{
|
||||
nDam = d6(2);
|
||||
//if outsider
|
||||
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_OUTSIDER)
|
||||
{
|
||||
nDam+=nDam;
|
||||
}
|
||||
|
||||
//damage
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(DAMAGE_TYPE_DIVINE, nDam, oTarget));
|
||||
}
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, 6.096f, lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
}
|
130
trunk/users/Tenjac/spells/sp_invcs.nss
Normal file
130
trunk/users/Tenjac/spells/sp_invcs.nss
Normal file
@@ -0,0 +1,130 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Invoke the Cerulean Sign
|
||||
//:: FileName sp_invCS.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Evocation
|
||||
Level: Druid 2, Ranger 2, Bard 3, Cleric 3, Paladin 3, Sorcerer 3, Wizard 3,
|
||||
Components: S,
|
||||
Casting Time: 1 standard action
|
||||
Range: 30 ft.
|
||||
Area: Multiple aberrations whose combined total Hit Dice do not exceed twice
|
||||
caster level in a spread emanating from the character to the extreme of the range
|
||||
Duration: Instantaneous
|
||||
Saving Throw: Fortitude negates
|
||||
Spell Resistance: No
|
||||
|
||||
The cerulean sign is an ancient symbol said to embody
|
||||
the purity of the natural world, and as such it is
|
||||
anathema to aberrations.
|
||||
While druids and rangers are the classes most often
|
||||
known to cast this ancient spell, its magic is nearly
|
||||
universal and can be mastered by all spellcasting classes.
|
||||
When you cast this spell, you trace the cerulean sign
|
||||
in the air with a hand, leaving a glowing blue rune
|
||||
in the air for a brief moment before it flashes and fills
|
||||
the area of effect with a pulse of cerulean light.
|
||||
Any aberration within the area must make a Fortitude
|
||||
saving throw or suffer the following ill effects.
|
||||
Closer aberrations are affected first.
|
||||
Each effect lasts for 1 round.
|
||||
|
||||
None: The aberration suffers no ill effect, even if it fails the
|
||||
saving throw.
|
||||
Sickened: The aberration takes a -2 penalty on attack
|
||||
rolls, saving throws, skill checks, and ability checks for 1 round.
|
||||
Nauseated: The aberration cannot attack, cast spells, concentrate
|
||||
on spells, or do anything but take a single move action for 1 round.
|
||||
Dazed: The aberration can take no actions, but has no penalty to
|
||||
its Armor Class, for 1 round.
|
||||
Stunned: The aberration drops everything held, can't take actions,
|
||||
takes a -2 penalty to AC, and loses its Dexterity bonus to AC (if any)
|
||||
for 1 round.
|
||||
|
||||
Once a creature recovers from an effect, it moves up one level on the table.
|
||||
Thus, a creature that is stunned by this spell is dazed the round after
|
||||
that, nauseated the round after that, sickened the round after that, and
|
||||
then recovers fully the next round.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/13/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
#include "prc_effect_inc"
|
||||
|
||||
void DoDrop(object oTarget)
|
||||
{
|
||||
object oTargetWep = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
|
||||
object oOffhand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget);
|
||||
object oNewWeap = CopyObject(oTargetWep, GetLocation(oTarget));
|
||||
object oNewOff = CopyObject(oOffhand, GetLocation(oTarget));
|
||||
DestroyObject(oTargetWep);
|
||||
DestroyObject(oOffhand);
|
||||
}
|
||||
|
||||
void DoSign(object oTarget)
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FROST_L), oTarget);
|
||||
|
||||
//2nd round sickened
|
||||
DelayCommand(6.0f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSickened(), oTarget, 6.0f));
|
||||
|
||||
//3rd round Nauseated
|
||||
DelayCommand(12.0f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectNausea(oTarget, 6.0f), oTarget, 6.0f));
|
||||
|
||||
//4th round Dazed
|
||||
DelayCommand(18.0f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneParalyze(), oTarget, 6.0f));
|
||||
|
||||
//5th round Stunned
|
||||
DelayCommand(24.0f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneParalyze(), oTarget, 6.0f));
|
||||
DelayCommand(24.0f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectACDecrease(2), oTarget, 6.0f));
|
||||
DelayCommand(24.0f, DoDrop(oTarget));
|
||||
|
||||
//6th round Dazed
|
||||
DelayCommand(30.0f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneParalyze(), oTarget, 6.0f));
|
||||
|
||||
//7th round Nauseated
|
||||
DelayCommand(36.0f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectNausea(oTarget, 6.0f), oTarget, 6.0f));
|
||||
|
||||
//8th round sickened
|
||||
DelayCommand(42.0f, SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSickened(), oTarget, 6.0f));
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
int nDice = nCasterLvl * 2;
|
||||
location lLoc = GetLocation(oPC);
|
||||
int nTargetDice;
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FROST_L), oPC);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HASTE), oPC);
|
||||
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, 9.144f, lLocl, FALSE, OBJECT_TYPE_CREATURE);
|
||||
|
||||
while(GetIsObjectValid && nDice > 0)
|
||||
{
|
||||
//Aberration
|
||||
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_ABERRATION)
|
||||
{
|
||||
//Save
|
||||
if(!PRCMySavingThrow(SAVING_THROW_FORT, oTarget, PRCGetSaveDC(oTarget, oPC)))
|
||||
{
|
||||
nTargetDice = GetHitDice(oTarget);
|
||||
if(nDice >= nTargetDice)
|
||||
{
|
||||
nDice -= nTargetDice;
|
||||
DoSign(oTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, 9.144f, lLocl, FALSE, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
46
trunk/users/Tenjac/spells/sp_irresforce.nss
Normal file
46
trunk/users/Tenjac/spells/sp_irresforce.nss
Normal file
@@ -0,0 +1,46 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Irresistable Force
|
||||
//:: FileName sp_irresforce.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 become the epitome of force in motion.
|
||||
You are protected by freedom of movement.
|
||||
You gain a +10 bonus on bull rush attempts.
|
||||
You gain a +10 bonus on checks made to avoid being tripped.
|
||||
When moving in combat, you act as if you had the Mobility feat.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/14/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
//Freedom of Movement
|
||||
effect eLink = EffectLinkEffects(EffectImmunity(IMMUNITY_TYPE_PARALYSIS), EffectImmunity(IMMUNITY_TYPE_SLOW));
|
||||
eLink = EffectLinkEffects(eLink, EffectImmunity(IMMUNITY_TYPE_ENTANGLE));
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, fDur);
|
||||
|
||||
//Mobility
|
||||
IPSafeAddItemProperty(GetPCSkin(oPC), PRCItemPropertyBonusFeat(FEAT_MOBILITY), fDur);
|
||||
PRCSetSchool();
|
||||
}
|
49
trunk/users/Tenjac/spells/sp_laspdiety.nss
Normal file
49
trunk/users/Tenjac/spells/sp_laspdiety.nss
Normal file
@@ -0,0 +1,49 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Lesser Aspect of the Diety
|
||||
//:: FileName sp_laspdiety.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Transmutation [Good]
|
||||
Level: Apostle of Peace 4, Exalted Arcanist 4, Paladin 4, Knight of the Chalice 4,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 round/level
|
||||
|
||||
When you cast this spell, your body changes into a form that is more like
|
||||
your deity (in a very limited fashion, of course).
|
||||
|
||||
You gain a +4 enhancement bonus to your Charisma score.
|
||||
|
||||
You also gain acid, cold, and electricity resistance 10.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 6/7/2022
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
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;
|
||||
|
||||
effect eLink = EffectAbilityIncrease(ABILITY_CHARISMA, 4);
|
||||
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ACID, 10));
|
||||
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_COLD, 10));
|
||||
eLink = EffectLinkEffects(eLink, EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL, 10));
|
||||
eLink = EffectLinkEffects(eLink, EffectVisualEffect(VFX_DUR_IOUNSTONE_YELLOW));
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, fDur);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
67
trunk/users/Tenjac/spells/sp_lauracold.nss
Normal file
67
trunk/users/Tenjac/spells/sp_lauracold.nss
Normal file
@@ -0,0 +1,67 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Lesser Aura of Cold
|
||||
//:: FileName sp_lauracold.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Transmutation [Cold]
|
||||
Level: Cleric 3, Druid 3, Disciple of Thrym 3, Paladin 4, Ranger 4,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: 5 ft.
|
||||
Area: 5-ft.-radius spherical emanation, centered on you
|
||||
Duration: 1 round/level (D)
|
||||
Saving Throw: None
|
||||
Spell Resistance: Yes
|
||||
|
||||
You are covered in a thin layer of white frost and frigid cold emanates from your
|
||||
body, dealing 1d6 points of cold damage at the start of your round to each creature
|
||||
within 5 feet.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 6/8/2022
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void DoCold(object oPC, int nRounds)
|
||||
{
|
||||
if(nRounds > 0)
|
||||
{
|
||||
location lLoc=GetLocation(oPC);
|
||||
//Do the AoE
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE,FeetToMeters(5.0), lLoc);
|
||||
{
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(oTarget != oPC)
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(d6(1), DAMAGE_TYPE_COLD), oTarget);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FROST_S), oTarget);
|
||||
}
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(5.0), lLoc);
|
||||
}
|
||||
}
|
||||
nRounds--;
|
||||
DelayCommand(6.0f, DoCold(oPC, nRounds));
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
int nRounds = nCasterLvl;
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) nRounds += nRounds;
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_PULSE_BLUE_WHITE), oPC, fDur);
|
||||
|
||||
DoCold(oPC, nRounds);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
67
trunk/users/Tenjac/spells/sp_lawsword.nss
Normal file
67
trunk/users/Tenjac/spells/sp_lawsword.nss
Normal file
@@ -0,0 +1,67 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Lawful Sword
|
||||
//:: FileName sp_lawsword.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Evocation
|
||||
Level: Paladin 4,
|
||||
Components: V, S,
|
||||
Casting Time: 1 standard action
|
||||
Range: Touch
|
||||
Target: Weapon touched
|
||||
Duration: 1 round/level
|
||||
Saving Throw: None
|
||||
Spell Resistance: No
|
||||
|
||||
Calling to mind thoughts of justice, you run your
|
||||
fingers along the weapon, imbuing it with power.
|
||||
|
||||
This spell functions like holy sword (PH 242), except
|
||||
as follows. The weapon functions as a +5 axiomatic
|
||||
weapon (+5 enhancement bonus on attack rolls and damage
|
||||
rolls, lawful-aligned, deals an extra 2d6 points of damage
|
||||
against chaotic opponents). It also emits a magic circle
|
||||
against chaos effect (as the spell).
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 2/2/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
object oTarget = GetSpellTargetObject();
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
//+2d6 vs chaotic
|
||||
itemproperty iDam = ItemPropertyDamageBonusVsAlign(IP_CONST_ALIGNMENTGROUP_CHAOTIC, IP_CONST_DAMAGETYPE_PHYSICAL, IP_CONST_DAMAGEBONUS_2d6);
|
||||
//+5 vs everything
|
||||
itemproperty iAttack = ItemPropertyEnhancementBonus(5);
|
||||
|
||||
if(GetObjectType(oTarget)) == OBJECT_TYPE_CREATURE
|
||||
{
|
||||
oTarget = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
|
||||
}
|
||||
|
||||
IPSafeAddItemProperty(oTarget, iDam, fDur);
|
||||
IPSafeAddItemProperty(oTarget, iAttack, fDur);
|
||||
|
||||
//magic circle on the weapon
|
||||
effect eCircle = EffectAreaOfEffect(AOE_MOB_CIRCCHAOS);
|
||||
effect eVis = EffectVisualEffect(VFX_IMP_EVIL_HELP);
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eCircle, oTarget, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oPC);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
107
trunk/users/Tenjac/spells/sp_lenshield.nss
Normal file
107
trunk/users/Tenjac/spells/sp_lenshield.nss
Normal file
@@ -0,0 +1,107 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Lesser Energy Shield
|
||||
//:: FileName sp_lenshield.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Abjuration
|
||||
Level: Paladin 1, Cleric 2
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 Standard Action
|
||||
Range: Touch
|
||||
Target: Shield touched
|
||||
Duration: 1 round/level
|
||||
Saving Throw: None
|
||||
Spell Resistance: No
|
||||
|
||||
A silver aura surrounds the touched shield for a
|
||||
moment before it appears to transform into the chosen
|
||||
type of energy. The shield hums with power.
|
||||
|
||||
When this spell is cast, the shield touched appears
|
||||
to be made entirely out of one type of energy (fire,
|
||||
cold, electricity, acid, or sonic). Whoever bears the
|
||||
shield gains resistance 5 against the chosen energy
|
||||
type. Additionally, if the wielder successfully hits
|
||||
someone with the shield with a shield bash attack, th
|
||||
e victim takes 1d6 points of the appropriate energy
|
||||
damage in addition to the normal shield bash damage.
|
||||
The energy type must be chosen when the spell is cast
|
||||
and cannot be changed during the duration of the spell.
|
||||
The energy resistance overlaps (and does not stack)
|
||||
with resist elements. A given shield cannot be the
|
||||
subject of more than one lesser energized shield
|
||||
or energized shield spell at the same time.
|
||||
|
||||
The descriptor of this spell is the same as the
|
||||
energy type you choose when you cast it.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/28/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
#include "prc_inc_fork"
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
object oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget);
|
||||
|
||||
//Check that this is a shield, if not abort
|
||||
if(GetIsShield(oShield) == FALSE)
|
||||
{
|
||||
SendMessageToPC(OBJECT_SELF, "Target has no equipped shield.");
|
||||
break;
|
||||
}
|
||||
|
||||
//The type of damage resistance we're choosing
|
||||
int nDR;
|
||||
|
||||
//Get the type by which subradial spell is used to cast
|
||||
int nSpell = GetSpellId();
|
||||
if(nSpell == SPELL_LESSER_ENERGIZED_SHIELD_FIRE)
|
||||
{
|
||||
nDR = IP_CONST_DAMAGETYPE_FIRE;
|
||||
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_FIRE);
|
||||
}
|
||||
if(nSpell == SPELL_LESSER_ENERGIZED_SHIELD_COLD)
|
||||
{
|
||||
nDR = IP_CONST_DAMAGETYPE_COLD;
|
||||
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_COLD);
|
||||
}
|
||||
if(nSpell == SPELL_LESSER_ENERGIZED_SHIELD_ELEC)
|
||||
{
|
||||
nDR = IP_CONST_DAMAGETYPE_ELECTRICAL;
|
||||
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_ELECTRICAL);
|
||||
}
|
||||
if(nSpell == SPELL_LESSER_ENERGIZED_SHIELD_ACID)
|
||||
{
|
||||
nDR = IP_CONST_DAMAGETYPE_ACID;
|
||||
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_ACID);
|
||||
}
|
||||
if(nSpell == SPELL_LESSER_ENERGIZED_SHIELD_SONIC)
|
||||
{
|
||||
nDR = IP_CONST_DAMAGETYPE_SONIC;
|
||||
SetLocalInt(oTarget, "EnShieldType", DAMAGE_TYPE_SONIC);
|
||||
}
|
||||
|
||||
//Set local int for amount of shield damage on the wielder of the shield
|
||||
SetLocalInt(oTarget, "EnShieldD6", 1);
|
||||
|
||||
//Schedule ints for deletion
|
||||
DelayCommand(fDur, DeleteLocalInt(oTarget, "EnShieldType"));
|
||||
DelayCommand(fDur, DeleteLocalInt(oTarget, "EnShieldD6"));
|
||||
|
||||
//Add resistance property
|
||||
IPSafeAddItemProperty(oShield, ItemPropertyDamageResistance(nDR, 5), fDur, X2_IP_ADDPROP_POLICY_KEEP_EXISTING);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
56
trunk/users/Tenjac/spells/sp_lmagweap.nss
Normal file
56
trunk/users/Tenjac/spells/sp_lmagweap.nss
Normal file
@@ -0,0 +1,56 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Legion's Magic Weapon
|
||||
//:: FileName sp_lmagweap.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Transmutation
|
||||
Level: Cleric 2, Paladin 2, Sorcerer 2, Wizard 2,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: Close (25 ft. + 5 ft./2 levels)
|
||||
Target: Melee or ranged weapons held by allied creatures in a 20-ft.-radius burst
|
||||
Duration: 1 round/level
|
||||
Saving Throw: Will negates (harmless, object)
|
||||
Spell Resistance: Yes (harmless, object)
|
||||
|
||||
This spell functions like magic weapon (see page 251 of the
|
||||
Player's Handbook), except as noted above and as follows. It
|
||||
affects only weapons held by allies when the spell is cast.
|
||||
It has no effect on ammunition.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/13/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
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;
|
||||
location lLoc = GetLocation(oPC);
|
||||
|
||||
object oTarget = MyGetFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30), lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
||||
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
object oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oTarget);
|
||||
if(GetIsObjectValid(oItem))
|
||||
{
|
||||
IPSafeAddItemProperty(oItem,ItemPropertyEnhancementBonus(1), fDur, X2_IP_ADDPROP_POLICY_KEEP_EXISTING ,TRUE,TRUE);
|
||||
}
|
||||
}
|
||||
oTarget = MyGetNextObjectInShape(SHAPE_SPHERE, FeetToMeters(30), lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
65
trunk/users/Tenjac/spells/sp_lvisdeity.nss
Normal file
65
trunk/users/Tenjac/spells/sp_lvisdeity.nss
Normal file
@@ -0,0 +1,65 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Lesser Visage of the Deity
|
||||
//:: FileName sp_lvisdiety.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Transmutation [Good or Evil]
|
||||
Level: Cleric 3, Blackguard 4, Paladin 4, Mysticism 3,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 round/level
|
||||
|
||||
As you end your prayer, you can feel the hand of your
|
||||
deity upon you. Your appearance reflects her divine power,
|
||||
and her touch grants you resistance from some of the damage
|
||||
of this world.
|
||||
|
||||
You gain a +4 enhancement bonus to Charisma. You also gain
|
||||
resistance to acid 10, cold 10, and electricity 10 if you
|
||||
are good, or resistance to cold 10 and fire 10 if you are evil.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/26/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
int nAlign = GetAlignmentGoodEvil(oPC);
|
||||
int nBonus = 4;
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityIncrease(ABILITY_CHARISMA, nBonus), oPC, fDur);
|
||||
|
||||
if (nAlign == ALIGNMENT_GOOD)
|
||||
{
|
||||
effect eResAcid = EffectDamageResistance(DAMAGE_TYPE_ACID, 10);
|
||||
effect eResCold = EffectDamageResistance(DAMAGE_TYPE_COLD, 10);
|
||||
effect eResElec = EffectDamageResistance(DAMAGE_TYPE_ELECTRICAL, 10);
|
||||
effect eLink = EffectLinkEffects(eResAcid, eResCold);
|
||||
eLink = EffectLinkEffects(eLink, eResElec);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_GOOD_HELP), oPC);
|
||||
}
|
||||
|
||||
else if (nAlign == ALIGNMENT_EVIL)
|
||||
{
|
||||
effect eLink = EffectLinkEffects(EffectDamageResistance(DAMAGE_TYPE_COLD, 10), EffectDamageResistance(DAMAGE_TYPE_FIRE, 10));
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_EVIL_HELP), oPC);
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
44
trunk/users/Tenjac/spells/sp_majorresist.nss
Normal file
44
trunk/users/Tenjac/spells/sp_majorresist.nss
Normal file
@@ -0,0 +1,44 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Major Resistance
|
||||
//:: FileName sp_majorresist.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Abjuration
|
||||
Level: Bard 2, Cleric 2, Druid 2, Paladin 2, Sorcerer 2, Wizard 2,
|
||||
Components: V, S, M, DF,
|
||||
Casting Time: 1 action
|
||||
Range: Touch
|
||||
Target: Creature touched
|
||||
Duration: 1 hour/level
|
||||
Saving Throw: Will negates (harmless)
|
||||
Spell Resistance: Yes (harmless)
|
||||
|
||||
You imbue the subject with a strong magical energy that protects
|
||||
her from harm, granting a +3 resistance bonus on saves.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/14/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = HoursToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
object oTarget = GetSpellTargetObject();
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_WHITE), oTarget, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSavingThrowIncrease(SAVING_THROW_ALL, 3), oTarget, fDur);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
52
trunk/users/Tenjac/spells/sp_meteoric.nss
Normal file
52
trunk/users/Tenjac/spells/sp_meteoric.nss
Normal file
@@ -0,0 +1,52 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Meteoric Strike
|
||||
//:: FileName sp_meteoric.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Transmutation [Fire]
|
||||
Level: Druid 4, Paladin 4, Cleric 5,
|
||||
Components: V, S,
|
||||
Casting Time: 1 swift action
|
||||
Range: 0 ft.
|
||||
Target: Your melee weapon
|
||||
Duration: 1 round or until discharged
|
||||
Saving Throw: None or Reflex half; see text
|
||||
Spell Resistance: See text
|
||||
|
||||
Your melee weapon bursts into orange, red, and gold
|
||||
flames, and shining sparks trail in its wake.
|
||||
Your next successful melee attack deals extra fire
|
||||
damage equal to 1d6 points + 1d6 points per four caster
|
||||
levels.
|
||||
In addition, the flames splash into all squares adjacent
|
||||
to the target.
|
||||
Any creatures standing in these squares take half damage
|
||||
from the explosion, with a Reflex save allowed to halve
|
||||
this again.
|
||||
If a creature has spell resistance, it applies to this
|
||||
splash effect.
|
||||
You are not harmed by your own meteoric strike.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/15/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
|
||||
object oTarget = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
||||
|
||||
itemproperty ipHook = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1);
|
||||
IPSafeAddItemProperty(oTarget, ipHook, 6.0f)
|
||||
AddEventScript(oTarget, "sp_meteoriconhit", FALSE, FALSE);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
93
trunk/users/Tenjac/spells/sp_meteoriconhit.nss
Normal file
93
trunk/users/Tenjac/spells/sp_meteoriconhit.nss
Normal file
@@ -0,0 +1,93 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Meteoric Strike On Hit
|
||||
//:: FileName sp_meteoriconhit.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Transmutation [Fire]
|
||||
Level: Druid 4, Paladin 4, Cleric 5,
|
||||
Components: V, S,
|
||||
Casting Time: 1 swift action
|
||||
Range: 0 ft.
|
||||
Target: Your melee weapon
|
||||
Duration: 1 round or until discharged
|
||||
Saving Throw: None or Reflex half; see text
|
||||
Spell Resistance: See text
|
||||
|
||||
Your melee weapon bursts into orange, red, and gold flames,
|
||||
and shining sparks trail in its wake.
|
||||
Your next successful melee attack deals extra fire damage equal
|
||||
to 1d6 points + 1d6 points per four caster levels.
|
||||
In addition, the flames splash into all squares adjacent to the t
|
||||
arget.
|
||||
Any creatures standing in these squares take half damage from the
|
||||
explosion, with a Reflex save allowed to halve this again.
|
||||
If a creature has spell resistance, it applies to this splash effect.
|
||||
You are not harmed by your own meteoric strike.
|
||||
You can cast meteoric strike before you make an unarmed attack.
|
||||
If you do, your unarmed attack is considered armed.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/14/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
#include "prc_alterations"
|
||||
#include "prc_inc_combat"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
object oSpellOrigin = OBJECT_SELF;
|
||||
|
||||
// route all onhit-cast spells through the unique power script (hardcoded to "prc_onhitcast")
|
||||
// in order to fix the Bioware bug, that only executes the first onhitcast spell found on an item
|
||||
// any onhitcast spell should have the check ContinueOnHitCast() at the beginning of its code
|
||||
// if you want to force the execution of an onhitcast spell script, that has the check, without routing the call
|
||||
// through prc_onhitcast, you must use ForceExecuteSpellScript(), to be found in prc_inc_spells
|
||||
if(!ContinueOnHitCastSpell(oSpellOrigin)) return;
|
||||
|
||||
// DeleteLocalInt(oSpellOrigin, "X2_L_LAST_SPELLSCHOOL_VAR");
|
||||
SetLocalInt(oSpellOrigin, "X2_L_LAST_SPELLSCHOOL_VAR", SPELL_SCHOOL_TRANSMUTATION);
|
||||
|
||||
// find the weapon
|
||||
object oWeapon = PRCGetSpellCastItem(oSpellOrigin);
|
||||
|
||||
//Get Caster level
|
||||
int nBonus = GetLocalInt(oWeapon, "MeteoricCasterLvl") / 4;
|
||||
|
||||
// find the target of the spell
|
||||
object oTarget = PRCGetSpellTargetObject(oSpellOrigin);
|
||||
|
||||
// only do anything if we have a valid weapon and a valid living target
|
||||
if (GetIsObjectValid(oWeapon) && GetIsObjectValid(oTarget)&& !GetIsDead(oTarget))
|
||||
{
|
||||
int nDam = d6(1 + nBonus);
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_FLAME_M), oTarget);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(oTarget, nDam, DAMAGE_TYPE_FIRE), oTarget);
|
||||
|
||||
//Burst
|
||||
nDam = nDam/2;
|
||||
location lLoc = GetLocation(oTarget);
|
||||
object oTargetB = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(5), lLoc, TRUE);
|
||||
|
||||
while(GetIsObjectValid(oTargetB))
|
||||
{
|
||||
if(oTargetB != oPC)
|
||||
{
|
||||
if(!PRCDoResistSpell(oTargetB))
|
||||
{
|
||||
if (PRCMySavingThrow(SAVING_THROW_REFLEX, oTargetB, (PRCGetSaveDC(oTargetB, oSpellOrigin))))
|
||||
{
|
||||
nDam = nDam/2;
|
||||
}
|
||||
|
||||
effect eLink = EffectLinkEffects(EffectDamage(DAMAGE_TYPE_FIRE, nDam), EffectVisualEffect(VFX_COM_HIT_FIRE));
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eLink, oTargetB);
|
||||
}
|
||||
}
|
||||
oTargetB = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(5), lLoc, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
56
trunk/users/Tenjac/spells/sp_quickmarch.nss
Normal file
56
trunk/users/Tenjac/spells/sp_quickmarch.nss
Normal file
@@ -0,0 +1,56 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Quick March
|
||||
//:: FileName sp_quickmarch.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Transmutation
|
||||
Level: Cleric 2, Paladin 2,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 swift action
|
||||
Range: Medium (100 ft. + 10 ft./level)
|
||||
Target: Allies in a 20-ft.-radius burst
|
||||
Duration: 1 round
|
||||
Saving Throw: Will negates (harmless)
|
||||
Spell Resistance: Yes (harmless)
|
||||
|
||||
Upon casting this spell, your feet and those of your
|
||||
allies glow with a yellow nimbus of light.
|
||||
|
||||
Quick march increases your allies' base land speed by
|
||||
30 feet. (This adjustment is considered an enhancement
|
||||
bonus.) There is no effect on other modes of movement,
|
||||
such as burrow, climb, fly, or swim. As with any
|
||||
effect that increases a creature's speed, this spell
|
||||
affects maximum jumping distance.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/19/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
float fDur = RoundsToSeconds(1);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
effect eSpeed = EffectMovementSpeedIncrease(100);
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(20), lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
||||
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(GetIsReactionTypeFriendly(oTarget))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eSpeed, oTarget, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HASTE), oTarget);
|
||||
}
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(20), lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
93
trunk/users/Tenjac/spells/sp_resenergy.nss
Normal file
93
trunk/users/Tenjac/spells/sp_resenergy.nss
Normal file
@@ -0,0 +1,93 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Resist Energy
|
||||
//:: FileName sp_resenergy.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Abjuration
|
||||
Level: Ranger 1, Duskblade 1, Cleric 2, Death Master 2,
|
||||
Sha'ir 2, Wu Jen 2 (All), Death Delver 2, Fatemaker 2,
|
||||
Knight of the Chalice 2, Knight of the Weave 2,
|
||||
Vassal of Bahamut 2, Hoardstealer 2, Adept 2, Wizard 2,
|
||||
Sorcerer 2, Paladin 2, Druid 2, Urban Druid 2, Dragon 2,
|
||||
Fire 3
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: Touch
|
||||
Target: Creature touched
|
||||
Duration: 10 min./level
|
||||
Saving Throw: Fortitude negates (harmless)
|
||||
Spell Resistance: Yes (harmless)
|
||||
|
||||
This abjuration grants a creature limited protection from
|
||||
damage of whichever one of five energy types you select:
|
||||
acid, cold, electricity, fire, or sonic. The subject gains
|
||||
energy resistance 10 against the energy type chosen, meaning
|
||||
that each time the creature is subjected to such damage
|
||||
(whether from a natural or magical source), that damage is
|
||||
reduced by 10 points before being applied to the creature's
|
||||
hit points. The value of the energy resistance granted increases
|
||||
to 20 points at 7th level and to a maximum of 30 points at 11th
|
||||
level. The spell protects the recipient's equipment as well.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/20/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = 600.0f * (nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
int nSpell = GetSpellId();
|
||||
int nDamType;
|
||||
int nVis;
|
||||
|
||||
if(nSpell == SPELL_RESIST_ENERGY_ACID)
|
||||
{
|
||||
nDamType = DAMAGE_TYPE_ACID;
|
||||
nVis = VFX_DUR_AURA_GREEN;
|
||||
}
|
||||
|
||||
else if (nSpell == SPELL_RESIST_ENERGY_COLD)
|
||||
{
|
||||
nDamType = DAMAGE_TYPE_COLD;
|
||||
nVis = VFX_DUR_AURA_CYAN;
|
||||
}
|
||||
else if (nSpell == SPELL_RESIST_ENERGY_ELEC)
|
||||
{
|
||||
nDamType = DAMAGE_TYPE_ELECTRICAL;
|
||||
nVis = VFX_DUR_AURA_WHITE;
|
||||
}
|
||||
else if (nSpell == SPELL_RESIST_ENERGY_FIRE)
|
||||
{
|
||||
nDamType = DAMAGE_TYPE_FIRE;
|
||||
nVis = VFX_DUR_AURA_RED;
|
||||
}
|
||||
else if (nSpell == SPELL_RESIST_ENERGY_SONIC)
|
||||
{
|
||||
nDamType = DAMAGE_TYPE_SONIC;
|
||||
nVis = VFX_DUR_AURA_BLUE_LIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
SendMessageToPC(oPC, "Invalid spell ID.");
|
||||
break;
|
||||
}
|
||||
|
||||
int nDamRes = 10;
|
||||
if(nCasterLvl > 6) nDamRes +=10;
|
||||
if(nCasterLvl > 10) nDamRes +=10;
|
||||
|
||||
effect eLink = EffectLinkEffects(EffectVisualEffect(nVis), EffectDamageResistance(nDamType, nDamRes));
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oTarget, fDur);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
62
trunk/users/Tenjac/spells/sp_revenance.nss
Normal file
62
trunk/users/Tenjac/spells/sp_revenance.nss
Normal file
@@ -0,0 +1,62 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Revenance
|
||||
//:: FileName sp_revenance.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Conjuration (Healing)
|
||||
Level: Blackguard 4, Cleric 4, Paladin 4, Bard 6
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: Touch
|
||||
Target: Dead ally touched
|
||||
Duration: 1 minute/level
|
||||
Saving Throw: None; see text
|
||||
Spell Resistance: Yes (harmless)
|
||||
|
||||
You rush to your fallen companion amid the chaos of the
|
||||
battle and cry out the words that will bring her back for
|
||||
one last fight.
|
||||
|
||||
This spell brings a dead ally temporarily back to life.
|
||||
The subject can have been dead for up to 1 round per level.
|
||||
Your target functions as if a raise dead spell (PH 268)
|
||||
had been cast upon her, except that she does not lose a level
|
||||
and has half of her full normal hit points. She is alive
|
||||
(not undead) for the duration of the spell and can be healed
|
||||
normally, but dies as soon as the spell ends.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/20/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = (nCasterLvl * 60);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
object oTarget = GetSpellTargetObject();
|
||||
|
||||
if(!GetIsDead(oTarget) || GetIsReactionTypeHostile(oTarget))
|
||||
{
|
||||
SendMessageToPC(oPC, "Must target a dead ally.");
|
||||
break;
|
||||
}
|
||||
|
||||
//resurrect
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), oTarget);
|
||||
//Heal by half
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(GetMaxHitPoints(oTarget) / 2, oTarget), oTarget);
|
||||
//Schedule doom
|
||||
DelayCommand(fDur, SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(), oTarget);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
39
trunk/users/Tenjac/spells/sp_rhinorush.nss
Normal file
39
trunk/users/Tenjac/spells/sp_rhinorush.nss
Normal file
@@ -0,0 +1,39 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Rhino's Rush
|
||||
//:: FileName sp_rhinorush.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Transmutation
|
||||
Level: Paladin 1, Ranger 1, Wrath (SpC) 1,
|
||||
Components: V, S,
|
||||
Casting Time: 1 swift action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 round
|
||||
|
||||
This spell allows you to propel yourself in a single deadly
|
||||
charge. The first charge attack you make before the end of
|
||||
the round deals double damage on a successful hit.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/21/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(1);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_IOUNSTONE_RED), oPC, fDur);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
58
trunk/users/Tenjac/spells/sp_rightaura.nss
Normal file
58
trunk/users/Tenjac/spells/sp_rightaura.nss
Normal file
@@ -0,0 +1,58 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Righteous Aura
|
||||
//:: FileName sp_rightaura.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Abjuration [Good, Light]
|
||||
Level: Paladin 4,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 hour/level
|
||||
|
||||
You invoke the powers of good and law, and in response
|
||||
to your pleas, you glow with the golden radiance of the sun.
|
||||
|
||||
You are bathed in an unearthly glow for the duration of the
|
||||
spell, as if a daylight spell (PH 216) had been cast on you.
|
||||
You get a +4 sacred bonus to Charisma.
|
||||
|
||||
If you die, your body is converted into an explosive blast
|
||||
of energy in a 20-foot-radius burst centered where you fell,
|
||||
dealing 2d6 points of damage per caster level (maximum 20d6)
|
||||
to all evil creatures in the burst's area. Good creatures in
|
||||
the area are healed by the same amount, and undead take
|
||||
double this damage. Spell resistance cannot prevent this
|
||||
damage, but a successful Reflex save reduces it to half.
|
||||
Your body is disintegrated, so you cannot be raised with a
|
||||
raise dead spell. Spells that do not require an intact body,
|
||||
such as true resurrection, can be used to bring you back to
|
||||
life as normal.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/20/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = HoursToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityIncrease(ABILITY_CHARISMA, 4), fDur, oPC);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAreaOfEffect(VFX_MOB_DAYLIGHT), fDur, oPC);
|
||||
|
||||
AddEventScript(oPC, EVENT_ONPLAYERDEATH, "prc_rightaura", FALSE, TRUE);
|
||||
AddEventScript(oPC, EVENT_NPC_ONDEATH, "prc_rightaura", FALSE, TRUE);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
49
trunk/users/Tenjac/spells/sp_rightfury.nss
Normal file
49
trunk/users/Tenjac/spells/sp_rightfury.nss
Normal file
@@ -0,0 +1,49 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Righteous Fury
|
||||
//:: FileName sp_rightfury.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Transmutation
|
||||
Level: Paladin 3,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 minute/level
|
||||
|
||||
You pull a holy aura about you that glows a golden red.
|
||||
|
||||
Summoning the power of your deity, you charge yourself
|
||||
with positive energy. This gives you 5 temporary hit
|
||||
points per caster level (maximum 50) and a +4 sacred
|
||||
bonus to Strength. These temporary hit points last for
|
||||
up to 1 hour.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/29/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = 60*(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
int nHP = min(50, nCasterLvl * 5);
|
||||
|
||||
effect eBuff = EffectAbilityIncrease(ABILITY_STRENGTH, 4);
|
||||
effect eHP = EffectTemporaryHitpoints(nHP);
|
||||
effect eLink = EffectLinkEffects(eBuff, eHP);
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_GOOD_HELP), oPC);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
44
trunk/users/Tenjac/spells/sp_seeketrest.nss
Normal file
44
trunk/users/Tenjac/spells/sp_seeketrest.nss
Normal file
@@ -0,0 +1,44 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Seek Eternal Rest
|
||||
//:: FileName sp_seeketrest.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Conjuration (Healing)
|
||||
Level: Paladin 3,
|
||||
Components: V, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 hour/level
|
||||
|
||||
You invoke the greater powers and are infused with
|
||||
a great, golden glow, empowering you with holy glory.
|
||||
|
||||
You improve your ability to turn undead. For the
|
||||
purpose of turning or destroying undead, you are
|
||||
treated as a cleric of your paladin level.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/29/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = HoursToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
//Apply VFX, need to alter the turning script
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_YELLOW_LIGHT), oPC, fDur);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
63
trunk/users/Tenjac/spells/sp_shieldward.nss
Normal file
63
trunk/users/Tenjac/spells/sp_shieldward.nss
Normal file
@@ -0,0 +1,63 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Shield of Warding
|
||||
//:: FileName sp_shieldward.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Abjuration [Good]
|
||||
Level: Paladin 2, Cleric 3,
|
||||
Components: V, S,
|
||||
Casting Time: 1 standard action
|
||||
Range: Touch
|
||||
Target: One shield or buckler touched
|
||||
Duration: 1 minute/level
|
||||
Saving Throw: Will negates (object, harmless)
|
||||
Spell Resistance: No
|
||||
|
||||
The touched shield or buckler grants its wielder a +1
|
||||
sacred bonus to Armor Class and on Reflex saves, +1 per
|
||||
five caster levels (maximum +5 at 20th level). The bonus
|
||||
applies only when the shield is worn or carried normally
|
||||
(but not, for instance, if it is slung over the shoulder).
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/21/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl) * 60;
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
object oShield;
|
||||
|
||||
if GetObjectType(oTarget == OBJECT_TYPE_CREATURE) oShield = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oTarget);
|
||||
if GetObjectType(oTarget == OBJECT_TYPE_ITEM) oShield = oTarget;
|
||||
|
||||
//Check that this is a shield, if not abort
|
||||
if(GetIsShield(oShield) == FALSE)
|
||||
{
|
||||
SendMessageToPC(OBJECT_SELF, "Target has no equipped shield.");
|
||||
break;
|
||||
}
|
||||
|
||||
int nBonus = 1;
|
||||
if nCasterLvl > 4 nBonus +=1;
|
||||
if nCasterLvl > 9 nBonus +=1;
|
||||
if nCasterLvl > 14 nBonus +=1;
|
||||
if nCasterLvl > 19 nBonus +=1;
|
||||
|
||||
IPSafeAddItemProperty(oShield, ItemPropertyACBonus(nBonus), fDur);
|
||||
IPSafeAddItemProperty(oShield, ItemProperBonusSavingThrow(IP_CONST_SAVEBASETYPE_REFLEX, nBonus), fDur);
|
||||
PRCSetSchool();
|
||||
}
|
||||
|
||||
|
43
trunk/users/Tenjac/spells/sp_smiteher.nss
Normal file
43
trunk/users/Tenjac/spells/sp_smiteher.nss
Normal file
@@ -0,0 +1,43 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Smite Heretic
|
||||
//:: FileName sp_smiteher.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Conjuration
|
||||
Level: Paladin 3,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 10 minutes/level
|
||||
|
||||
For the duration of the spell, when using your smite
|
||||
evil class ability against an evil creature with the
|
||||
ability to cast divine spells, you gain a +2 sacred
|
||||
bonus on the attack roll.
|
||||
|
||||
Furthermore, the attack deals 2 extra points of damage
|
||||
(instead of 1) per paladin level.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/25/2022
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = 600 * nCasterLvl;
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_PULSE_YELLOW_WHITE), oPC, fDur);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
62
trunk/users/Tenjac/spells/sp_smitesacfire.nss
Normal file
62
trunk/users/Tenjac/spells/sp_smitesacfire.nss
Normal file
@@ -0,0 +1,62 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Smite of Sacred Fire
|
||||
//:: FileName sp_smitesacfire.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Evocation [Good]
|
||||
Level: Paladin 2,
|
||||
Components: V, DF,
|
||||
Casting Time: 1 swift action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 round/level; see text
|
||||
|
||||
You must cast this spell in the same round when you
|
||||
attempt a smite attack. If the attack hits, you deal
|
||||
an extra 2d6 points of damage to the target of the
|
||||
smite. Whether or not you succeed on the smite attempt,
|
||||
during each subsequent round of the spell?s duration,
|
||||
you deal an extra 2d6 points of damage on any successful
|
||||
melee attack against the target you attempted to smite.
|
||||
The spell ends prematurely after any round when you do not
|
||||
attempt a melee attack against the target you previously
|
||||
attempted to smite, or if you fail to hit with any of
|
||||
your attacks in a round.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/25/2022
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void SmiteCheck(object oWeapon)
|
||||
{
|
||||
//No smite attempt last round
|
||||
if(!GetLocalInt(oWeapon, "PRCSmiteLastRound"))
|
||||
{
|
||||
RemoveEventScript(oWeapon, EVENT_ITEM_ONHIT, "prc_evnt_ssf", TRUE, FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
object oWeapon = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC);
|
||||
|
||||
itemproperty ipHook = ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1);
|
||||
IPSafeAddItemProperty(oWeapon, ipHook, fDur);
|
||||
|
||||
//Add onhit
|
||||
AddEventScript(oWeapon, EVENT_ITEM_ONHIT, "prc_evnt_ssf", TRUE, FALSE);
|
||||
|
||||
DelayCommand(6.0f, SmiteCheck(oWeapon));
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
76
trunk/users/Tenjac/spells/sp_soldsanc.nss
Normal file
76
trunk/users/Tenjac/spells/sp_soldsanc.nss
Normal file
@@ -0,0 +1,76 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Soldiers of Sanctity
|
||||
//:: FileName sp_soldsanc.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Evocation [Good]
|
||||
Level: Cleric 3, Paladin 3,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 full round
|
||||
Range: Close (25 ft. + 5 ft./2 levels)
|
||||
Target: You, plus one willing creature/2 levels; see text
|
||||
Duration: 1 min./level
|
||||
Saving Throw: None
|
||||
Spell Resistance: No
|
||||
|
||||
For the duration of soldiers of sanctity, you gain a
|
||||
bonus on turning checks and turning damage rolls made
|
||||
when you have allies within 30 feet of you. This is a
|
||||
sacred bonus, equal to the number of allies within 30
|
||||
feet, to a maximum of +6.
|
||||
|
||||
In addition, each target gains a +2 bonus to AC against
|
||||
all attacks made by undead creatures. This bonus
|
||||
applies for the duration of the spell as long as an
|
||||
ally is within 30 feet of you.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 8/4/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void AllyCheck(object oPC, float fDur)
|
||||
{
|
||||
int nCount;
|
||||
object oTest = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30), GetLocation(oPC), OBJECT_TYPE_CREATURE);
|
||||
|
||||
while(GetIsObjectValid(oTest))
|
||||
{
|
||||
if(GetIsReactionTypeFriendly(oTest))
|
||||
{
|
||||
nCount++;
|
||||
}
|
||||
oTest = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(30), GetLocation(oPC), OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
SetLocalInt(oPC, "SOLDIERS_OF_SANCTITY_ALLIES", nCount);
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, VersusRacialTypeEffect(EffectACIncrease(2), RACIAL_TYPE_UNDEAD), oPC, 6.0f);
|
||||
DelayCommand(6.0f, AllyCheck(oPC, fDur- 6.0));
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = 60.0f * (nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
int nTargets = min(6, nCasterLvl/2);
|
||||
|
||||
AllyCheck(oPC, fDur);
|
||||
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(30), GetLocation(oPC), OBJECT_TYPE_CREATURE);
|
||||
|
||||
while(nTargets > 0)
|
||||
{
|
||||
AllyCheck(oTarget, fDur);
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(30), GetLocation(oPC), OBJECT_TYPE_CREATURE);
|
||||
nTargets--;
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
87
trunk/users/Tenjac/spells/sp_soullight.nss
Normal file
87
trunk/users/Tenjac/spells/sp_soullight.nss
Normal file
@@ -0,0 +1,87 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Soul of Light
|
||||
//:: FileName sp_soulight.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Transmutation [Good]
|
||||
Level: Paladin 2, Cleric 3,
|
||||
Components: V, S,
|
||||
Casting Time: 1 standard action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 hour
|
||||
|
||||
Bright, clear light sprouts from your body, quickly
|
||||
flaring before fading to a faint white pulse. This spell
|
||||
infuses your body with energy drawn from the Positive
|
||||
Energy Plane, making it easier to repair injuries.
|
||||
|
||||
Whenever you cast or are the target of a conjuration
|
||||
(healing) spell, you can choose for the spell to heal
|
||||
a number of extra points of damage equal to twice the spell's level.
|
||||
|
||||
If such a spell heals at least 10 points of damage,
|
||||
it also removes the fatigued condition from the
|
||||
target (or reduces exhaustion to fatigue).
|
||||
|
||||
If soul of light and soul of order are active on you at the
|
||||
same time, you gain damage reduction 3/+3
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 8/8/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = HoursToSeconds(1);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_AURA_WHITE), oPC, fDur);
|
||||
|
||||
if(GetHasSpellEffect(SPELL_SOUL_OF_ORDER, oPC))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDamageReduction(3, DAMAGE_POWER_PLUS_THREE, 0), oPC, fDur);
|
||||
}
|
||||
|
||||
/**To add into PRCEffectHeal
|
||||
if(GetHasSpellEffect(SPELL_SOUL_OF_LIGHT, oTarget))
|
||||
{
|
||||
//2x the spell level bonus
|
||||
nHP += (StringToInt(Get2DACache("spells", "Innate", PRCGetSpellId()) *2);
|
||||
if(nHP >= 10)
|
||||
{
|
||||
effect eEffect = GetFirstEffect(oPC);
|
||||
while(GetIsEffectValid(eEffect))
|
||||
{
|
||||
//remove fatigue
|
||||
if(GetEffectTag(eEffect) == "PRCFatigue")
|
||||
{
|
||||
RemoveEffect(oPC, eEffect);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffecVisualEffect(VFX_DUR_CESSATE_POSITIVE) oTarget, 6.0f);
|
||||
}
|
||||
|
||||
//downgrade exhaustion
|
||||
if(GetEffectTag(eEffect) == "PRCExhausted")
|
||||
{
|
||||
float fNew = IntToFloat(GetEffectDurationRemaining(eEffect));
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectFatigue(), oTarget, fNew);
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffecVisualEffect(VFX_DUR_CESSATE_POSITIVE) oTarget, 6.0f);
|
||||
|
||||
}
|
||||
eEffect = GetNextEffect(oPC);
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
64
trunk/users/Tenjac/spells/sp_soulorder.nss
Normal file
64
trunk/users/Tenjac/spells/sp_soulorder.nss
Normal file
@@ -0,0 +1,64 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Soul of Order
|
||||
//:: FileName sp_soulorder.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Transmutation [Lawful]
|
||||
Level: Paladin 1, Sorcerer 2, Wizard 2,
|
||||
Components: V, S,
|
||||
Casting Time: 1 standard action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 hour
|
||||
|
||||
A shimmering field of silver energy flows up your
|
||||
body from your feet to your head, giving your skin a
|
||||
metallic sheen.
|
||||
|
||||
This spell infuses your body with energy drawn from
|
||||
the primal forces of law. You gain a +2 morale bonus
|
||||
on Will saves made to resist enchantment effects.
|
||||
|
||||
Your natural weapons are treated as lawful-aligned for
|
||||
the purpose of overcoming damage reduction.
|
||||
|
||||
Regardless of your normal alignment, you are considered
|
||||
lawful-aligned for the purpose of effects that rely on
|
||||
alignment (such as protection from law or order's wrath).
|
||||
|
||||
If soul of order and soul of light are active on you at
|
||||
the same time, you gain damage reduction 3/+3.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 8/8/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
#include " x2_inc_itemprop"
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = HoursToSeconds(1);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectSavingThrowIncrease(SAVING_THROW_WILL, 2, SAVING_THROW_TYPE_MIND_SPELLS));
|
||||
object oNatural = GetItemInSlot(INVENTORY_SLOT_CWEAPON_L, oPC);
|
||||
|
||||
IPSafeAddItemProperty(oNatural, ItemPropertyEnhancementBonus(3), fDur);
|
||||
IPSafeAddItemProperty(oNAtural, ItemPropertyDamagePenalty(3), fDur);
|
||||
IPSafeAddItemProperty(oNAtural, ItemPropertyAttackPenalty(3), fDur);
|
||||
|
||||
if(GetHasSpellEffect(SPELL_SOUL_OF_LIGHT, oPC))
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectDamageReduction(3, DAMAGE_POWER_PLUS_THREE, 0), oPC, fDur);
|
||||
}
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
59
trunk/users/Tenjac/spells/sp_stabilize.nss
Normal file
59
trunk/users/Tenjac/spells/sp_stabilize.nss
Normal file
@@ -0,0 +1,59 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Stabilize
|
||||
//:: FileName sp_stabilize.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Conjuration (Healing)
|
||||
Level: Cleric 2, Paladin 2,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 swift action
|
||||
Area: 50-ft.-radius burst centered on you
|
||||
Duration: Instantaneous
|
||||
Saving Throw: Will negates (harmless); see text
|
||||
Spell Resistance: Yes (harmless)
|
||||
|
||||
This spell, designed to work on the battlefield,
|
||||
allows you to stabilize the dying all around you.
|
||||
A burst of positive energy spreads out from you,
|
||||
healing 1 point of damage to all living creatures
|
||||
in the affected area, whether allied or not. This
|
||||
spell deals 1 point of damage to undead creatures,
|
||||
which are allowed a Will saving throw to negate
|
||||
the effect.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/25/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_CONJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
location lLoc = GetLocation(oPC);
|
||||
|
||||
object oTarget = MyFirstObjectInShape(SHAPE_SPHERE, FeetToMeters(50), lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
||||
|
||||
while(GetIsObjectValid(oTarget))
|
||||
{
|
||||
if(MyPRCGetRacialType(oTarget) == RACIAL_TYPE_UNDEAD
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_COM_HIT_DIVINE), oTarget);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(DAMAGE_TYPE_POSITIVE, 1), oTarget);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_HEAD_HEAL), oTarget);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, PRCEffectHeal(1), oTarget);
|
||||
}
|
||||
oTarget = MyNextObjectInShape(SHAPE_SPHERE, FeetToMeters(50), lLoc, FALSE, OBJECT_TYPE_CREATURE);
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
44
trunk/users/Tenjac/spells/sp_stratchrg.nss
Normal file
44
trunk/users/Tenjac/spells/sp_stratchrg.nss
Normal file
@@ -0,0 +1,44 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Strategic Charge
|
||||
//:: FileName sp_stratchrg.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Abjuration
|
||||
Level: Blackguard 1, Paladin 1
|
||||
Components: V, DF,
|
||||
Casting Time: 1 swift action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 round/level
|
||||
|
||||
A red nimbus surrounds you as you move smoothly
|
||||
across the crowded battlefield.
|
||||
|
||||
You gain the benefit of the Mobility feat (PH 98),
|
||||
even if you not meet the prerequisites. You do not
|
||||
have to be charging to gain this benefit.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/26/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
object oSkin = GetPCSkin(oPC);
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
itemproperty iProp = PRCItemPropertyBonusFeat(IP_FEAT_MOBILITY);
|
||||
IPSafeAddItemProperty(oSkin, iProp, fDur);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
48
trunk/users/Tenjac/spells/sp_strstone.nss
Normal file
48
trunk/users/Tenjac/spells/sp_strstone.nss
Normal file
@@ -0,0 +1,48 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Strength of Stone
|
||||
//:: FileName sp_strstone.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Transmutation
|
||||
Level: Paladin 2,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 swift action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 round
|
||||
|
||||
You call upon the fortitude of the powers of good,
|
||||
and your flesh turns an ivory-gray hue as you draw
|
||||
power up through the earth itself.
|
||||
|
||||
The spell grants you a +8 enhancement bonus to Strength.
|
||||
The spell ends instantly if you lose contact with the
|
||||
ground. This means you cannot jump, tumble, charge, run,
|
||||
or move more than your speed in a round (because these acts
|
||||
cause both of your feet to leave the ground) without breaking
|
||||
the spell. A natural stone wall or ceiling counts as the ground
|
||||
for the purpose of this spell (so you could climb a cavern wall
|
||||
and not lose the spell).
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/28/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_TRANSMUTATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(1);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectAbilityIncrease(ABILITY_STRENGTH, 8) oPC, fDur);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
56
trunk/users/Tenjac/spells/sp_tpchosen.nss
Normal file
56
trunk/users/Tenjac/spells/sp_tpchosen.nss
Normal file
@@ -0,0 +1,56 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name True Prayer of the Chosen
|
||||
//:: FileName sp_tpchosen.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Transmutation
|
||||
Level: Paladin 3, Cleric 4,
|
||||
Components: V, S, DF, TN,
|
||||
Casting Time: 1 standard action
|
||||
Range: Personal
|
||||
Target: You
|
||||
Duration: 1 round/level
|
||||
|
||||
Raising your eyes to the skies, you speak your own
|
||||
truename to your patron deity, asking for protection
|
||||
as your mission takes you into harm's way.
|
||||
A golden coruscation surrounds you.
|
||||
|
||||
True prayer of the chosen grants you a +3 insight
|
||||
bonus on saving throws and to Armor Class.
|
||||
For the duration of the spell, you are protected by
|
||||
the power of your deity, who gives you divine insight
|
||||
into the threats you're about to face.
|
||||
|
||||
Truename Component: When you cast this spell, you must
|
||||
correctly speak your personal truename.
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 8/3/22
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
#include "true_inc_trufunc"
|
||||
#include "true_utterhook"
|
||||
|
||||
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;
|
||||
|
||||
struct utterance utter = EvaluateUtterance(oPC, oPC, METAUTTERANCE_NONE/* Use METAUTTERANCE_NONE if it has no Metautterance usable*/, LEXICON_EVOLVING_MIND /* Uses the same DC formula*/);
|
||||
|
||||
if(utter.bCanUtter)
|
||||
{
|
||||
effect eLink = EffectLinkEffects(EffectVisualEffect(VFX_DUR_AURA_ORANGE), EffectSavingThrowIncrease(SAVING_THROW_ALL, 3));
|
||||
eLink = EffectLinkEffects(eLink, EffectACIncrease(3));
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, fDur);
|
||||
}
|
||||
PRCSetSchool();
|
||||
}
|
66
trunk/users/Tenjac/spells/sp_undbanew.nss
Normal file
66
trunk/users/Tenjac/spells/sp_undbanew.nss
Normal file
@@ -0,0 +1,66 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Undead Bane Weapon
|
||||
//:: FileName sp_undbanew.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file
|
||||
Undead Bane Weapon
|
||||
Transmutation
|
||||
Level: Paladin 3, Cleric 4,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 Standard Action
|
||||
Range: Touch
|
||||
Target: Weapon touched
|
||||
Duration: 1 hour/level
|
||||
Saving Throw: Will negates (harmless, object)
|
||||
Spell Resistance: Yes (harmless, object)
|
||||
|
||||
Your hand glows with a dull light, and when you touch the weapon,
|
||||
the light shifts to it, so that it sheds a serene gray radiance as
|
||||
bright as a candle.
|
||||
|
||||
You give a weapon the undead bane special ability in addition to
|
||||
any other properties it has. Against undead, your weapon's enhancement
|
||||
bonus is 2 higher than normal, and it deals an extra 2d6 points of damage
|
||||
against undead. The spell has no effect if cast upon a weapon that already
|
||||
has the undead bane special ability.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 1/28/21
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
object oItem = GetSpellTargetObject();
|
||||
|
||||
//Check if it's a creature and if so get main weapon
|
||||
if(GetObjectType(oItem) == OBJECT_TYPE_CREATURE
|
||||
{
|
||||
oItem = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oItem);
|
||||
}
|
||||
|
||||
itemproperty iAttack = ItemPropertyAttackBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD, 2);
|
||||
itemproperty iDamage = ItemPropertyDamageBonusVsRace(IP_CONST_RACIALTYPE_UNDEAD, IP_CONST_DAMAGETYPE_MAGICAL, IP_CONST_DAMAGEBONUS_2d6);
|
||||
|
||||
//Valid targets
|
||||
if(IPGetIsProjectile(oItem) || IPGetIsMeleeWeapon(oItem) || IPGetIsRangedWeapon(oItem))
|
||||
{
|
||||
AddItemProperty(DURATION_TYPE_TEMPOARY, iAttack, oItem, fDur);
|
||||
IPSafeAddItemProperty(oItem, iDamage, fDur);
|
||||
}
|
||||
else SendMessageToPC(oPC, "Invalid target. Must target a weapon or projectile.");
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
101
trunk/users/Tenjac/spells/sp_unmovobj.nss
Normal file
101
trunk/users/Tenjac/spells/sp_unmovobj.nss
Normal file
@@ -0,0 +1,101 @@
|
||||
//:://////////////////////////////////////////////
|
||||
//:: 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
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#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(oTarget);
|
||||
while(GetIsEffectValid(eToDispel))
|
||||
{
|
||||
if(GetEffectSpellId(eToDispel) == SPELL_UNMOVABLE_OBJECT)
|
||||
{
|
||||
RemoveEffect(oTarget, eToDispel);
|
||||
}
|
||||
eToDispel = GetNextEffect(oTarget);
|
||||
}
|
||||
}
|
||||
|
||||
else DelayCommand(6.0f, StillCheck(oPC, fDur - 6.0f, lLoc));
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_EVOCATION);
|
||||
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(6.0f, StillCheck(oPC, fDur - 6.0f, GetLocation(oPC)));
|
||||
|
||||
//Cutscene Immobilize
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectCutsceneImmobilize(), oPC, fDur);
|
||||
|
||||
//+2 STR +4 CON
|
||||
effect eLink = EffectLinkEffects(EffectAbilityIncrease(ABILITY_STRENGTH, 2), EffectAbilityIncrease(ABILITY_CONSTITUTION, 4));
|
||||
|
||||
//+2 Saving throws
|
||||
eLink = EffectSavingThrowIncrease(SAVING_THROW_ALL, 2, SAVING_THROW_TYPE_ALL);
|
||||
|
||||
//+4 AC
|
||||
eLink = EffectLinkEffects(eLink, EffectACIncrease(4, AC_DODGE_BONUS));
|
||||
|
||||
//+10 Save vs Fear
|
||||
eLink = EffectLinkEffects(eLink, EffectSavingThrowIncrease(SAVING_THROW_ALL, 10, SAVING_THROW_TYPE_FEAR));
|
||||
|
||||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eLink, oPC, fDur);
|
||||
SPApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_AC_BONUS), oPC);
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
50
trunk/users/Tenjac/spells/sp_visionglory.nss
Normal file
50
trunk/users/Tenjac/spells/sp_visionglory.nss
Normal file
@@ -0,0 +1,50 @@
|
||||
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Name Vision of Glory
|
||||
//:: FileName sp_visionglory.nss
|
||||
//:://////////////////////////////////////////////
|
||||
/** @file Divination
|
||||
Level: Cleric 1, Paladin 1,
|
||||
Components: V, S, DF,
|
||||
Casting Time: 1 standard action
|
||||
Range: Touch
|
||||
Target: Creature touched
|
||||
Duration: 1 minute or until discharged
|
||||
Saving Throw: None
|
||||
Spell Resistance: Yes
|
||||
|
||||
You give the subject creature a brief vision of a divine
|
||||
entity that is giving it support and inspiring it to
|
||||
continue. The creature gets a morale bonus equal to your
|
||||
Charisma modifier on a single saving throw. It must choose
|
||||
to use the bonus before making the roll to which it applies.
|
||||
Using the bonus discharges the spell.
|
||||
|
||||
*/
|
||||
//:://////////////////////////////////////////////
|
||||
//:: Created By: Tenjac
|
||||
//:: Created On: 7/25/2022
|
||||
//:://////////////////////////////////////////////
|
||||
|
||||
#include "prc_sp_func"
|
||||
#include "prc_add_spell_dc"
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
if(!X2PreSpellCastCode()) return;
|
||||
PRCSetSchool(SPELL_SCHOOL_ABJURATION);
|
||||
object oPC = OBJECT_SELF;
|
||||
int nCasterLvl = PRCGetCasterLevel(oPC);
|
||||
float fDur = RoundsToSeconds(nCasterLvl);
|
||||
int nMetaMagic = PRCGetMetaMagicFeat();
|
||||
if(nMetaMagic & METAMAGIC_EXTEND) fDur += fDur;
|
||||
object oTarget = PRCGetSpellTargetObject();
|
||||
|
||||
int nBonus = GetAbilityModifier(ABILITY_CHARISMA, oPC);
|
||||
SetLocalInt(oTarget, "PRCVisGlory", nBonus);
|
||||
DelayCommand(60.0f, DeleteLocalInt(oTarget, "PRCVisGlory"));
|
||||
|
||||
PRCSetSchool();
|
||||
}
|
||||
|
Reference in New Issue
Block a user