118 lines
4.2 KiB
Plaintext
118 lines
4.2 KiB
Plaintext
|
/*:://////////////////////////////////////////////
|
|||
|
//:: Spell Name Mage<67>s Sword
|
|||
|
//:: Spell FileName PHS_S_MagesSword
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
//:: In Game Spell desctiption
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
Evocation [Force]
|
|||
|
Level: Sor/Wiz 7
|
|||
|
Components: V, S, F
|
|||
|
Casting Time: 1 standard action
|
|||
|
Range: Close (8M)
|
|||
|
Effect: One sword
|
|||
|
Duration: 1 round/level (D)
|
|||
|
Saving Throw: None
|
|||
|
Spell Resistance: Yes
|
|||
|
|
|||
|
This spell brings into being a shimmering, swordlike plane of force. The
|
|||
|
sword strikes at any opponent within its range. The sword attacks a target
|
|||
|
once each round. Its attack bonus is equal to your caster level + your Int
|
|||
|
bonus or your Cha bonus (for wizards or sorcerers, respectively) with an
|
|||
|
additional +3 enhancement bonus. It deals 4d6+3 points of damage, with a
|
|||
|
threat range of 19-20 and a critical multiplier of x2.
|
|||
|
|
|||
|
If the sword goes beyond the spell range from you, if it goes out of your
|
|||
|
sight, or if you are not directing it, the sword returns to you and hovers.
|
|||
|
|
|||
|
Each round after the first, you can use a standard action to switch the
|
|||
|
sword to a new target. If you do not, the sword continues to attack the
|
|||
|
previous round<6E>s target.
|
|||
|
|
|||
|
The sword cannot be attacked or harmed by physical attacks, but dispel
|
|||
|
magic, disintegrate, a sphere of annihilation, or a rod of cancellation
|
|||
|
affects it. The sword<72>s AC is 13 (10, +0 size bonus for Medium object, +3
|
|||
|
deflection bonus).
|
|||
|
|
|||
|
If an attacked creature has spell resistance, the resistance is checked
|
|||
|
the first time Mage<67>s sword strikes it. If the sword is successfully
|
|||
|
resisted, the spell is dispelled. If not, the sword has its normal full
|
|||
|
effect on that creature for the duration of the spell.
|
|||
|
|
|||
|
Focus: A miniature platinum sword with a grip and pommel of copper and
|
|||
|
zinc. It costs 250 gp to construct.
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
//:: Spell Effects Applied / Notes
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
It will use a new On Hit: Spell Cast At script to check spell resistance.
|
|||
|
|
|||
|
It summons the sword, it attacks, fair enough. It will, due to NwN's real-time
|
|||
|
engine, move automatically to new targets within 8M of the caster.
|
|||
|
//:://////////////////////////////////////////////
|
|||
|
//:: Created By: Jasperre
|
|||
|
//::////////////////////////////////////////////*/
|
|||
|
|
|||
|
#include "PHS_INC_SPELLS"
|
|||
|
|
|||
|
void main()
|
|||
|
{
|
|||
|
// Spell hook check.
|
|||
|
if(!PHS_SpellHookCheck(PHS_SPELL_MAGES_SWORD)) return;
|
|||
|
|
|||
|
// Declare major variables
|
|||
|
object oCaster = OBJECT_SELF;
|
|||
|
location lTarget = GetSpellTargetLocation();
|
|||
|
int nCasterLevel = PHS_GetCasterLevel();
|
|||
|
int nMetaMagic = PHS_GetMetaMagicFeat();
|
|||
|
|
|||
|
// Get duration in rounds
|
|||
|
float fDuration = PHS_GetDuration(PHS_ROUNDS, nCasterLevel, nMetaMagic);
|
|||
|
|
|||
|
// Declare visual effects
|
|||
|
effect eDur = EffectVisualEffect(VFX_DUR_CESSATE_NEUTRAL);
|
|||
|
effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_3);
|
|||
|
|
|||
|
// Signal spell cast at
|
|||
|
PHS_SignalSpellCastAt(oCaster, PHS_SPELL_MAGES_SWORD, FALSE);
|
|||
|
|
|||
|
// Create the sword.
|
|||
|
object oSword = CreateObject(OBJECT_TYPE_CREATURE, PHS_CREATURE_RESREF_MAGES_SWORD, lTarget);
|
|||
|
|
|||
|
// Assign its new master
|
|||
|
AddHenchman(oCaster, oSword);
|
|||
|
|
|||
|
// Apply the duration VFX
|
|||
|
PHS_ApplyDurationAndVFX(oSword, eVis, eDur, fDuration);
|
|||
|
|
|||
|
// And add its appropriate attack bonus via. Leveling the creature up to level
|
|||
|
// 20 (each level = +1 natural attack!).
|
|||
|
int nStat;
|
|||
|
// Check if it was cast from an item
|
|||
|
if(GetIsObjectValid(GetSpellCastItem()))
|
|||
|
{
|
|||
|
// Minimum bonus stat needed to cast the spell
|
|||
|
nStat = 7;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
// Else normal ability
|
|||
|
nStat = PHS_LimitInteger(PHS_GetAppropriateAbilityBonus(), 20);
|
|||
|
}
|
|||
|
|
|||
|
// Apply level up
|
|||
|
if(nStat > 1)
|
|||
|
{
|
|||
|
int nCnt;
|
|||
|
int nPackage = GetCreatureStartingPackage(oSword);
|
|||
|
for(nCnt = 1; nCnt < nStat; nCnt++)
|
|||
|
{
|
|||
|
// Always stop if it doesn't work.
|
|||
|
if(LevelUpHenchman(oSword, CLASS_TYPE_MAGICAL_FORCE, FALSE, nPackage) == 0)
|
|||
|
{
|
|||
|
// Debug
|
|||
|
SendMessageToPC(oCaster, "Debug: Uh-oh, magical sword didn't level...");
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|