forked from Jaysyn/PRC8
110 lines
3.7 KiB
Plaintext
110 lines
3.7 KiB
Plaintext
|
/*:://////////////////////////////////////////////
|
||
|
//:: Spell Name Holy Sword
|
||
|
//:: Spell FileName
|
||
|
//:://////////////////////////////////////////////
|
||
|
//:: In Game Spell desctiption
|
||
|
//:://////////////////////////////////////////////
|
||
|
Evocation [Good]
|
||
|
Level: Pal 4
|
||
|
Components: V, S
|
||
|
Casting Time: 1 standard action
|
||
|
Range: Touch
|
||
|
Target: Melee weapon touched in hand
|
||
|
Duration: 1 round/level
|
||
|
Saving Throw: None
|
||
|
Spell Resistance: No
|
||
|
|
||
|
This spell allows you to channel holy power into your sword, or any other
|
||
|
melee weapon you choose. The weapon acts as a holy weapon (+3 enhancement
|
||
|
bonus on attack and damage rolls, extra 2d6 damage against evil opponents,
|
||
|
25% chance to dispel magic On hit).
|
||
|
It also emits a magic circle against evil effect (as the spell). The spell
|
||
|
is automatically canceled after the weapon leaves your hand. You cannot have
|
||
|
more than one holy sword at a time.
|
||
|
|
||
|
This spell is not cumulative with bless weapon or any other spell that might
|
||
|
modify the weapon in any way. This spell does not work on artifacts.
|
||
|
//:://////////////////////////////////////////////
|
||
|
//:: Spell Effects Applied / Notes
|
||
|
//:://////////////////////////////////////////////
|
||
|
We target the first melee weapon without a On Hit property equipped.
|
||
|
|
||
|
This is similar to Biowares, except it adds a Magic circle Against Evil
|
||
|
|
||
|
The Magic Circle against Evil will be added as soon as the spell and AOe
|
||
|
entries are!
|
||
|
|
||
|
The difference of this is that if the spell is removed, the holy sword
|
||
|
property is too.
|
||
|
//:://////////////////////////////////////////////
|
||
|
//:: Created By: Jasperre
|
||
|
//::////////////////////////////////////////////*/
|
||
|
|
||
|
#include "PHS_INC_SPELLS"
|
||
|
#include "prc_x2_itemprop"
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
// Spell Hook Check.
|
||
|
if(!PHS_SpellHookCheck(PHS_SPELL_HOLY_SWORD)) return;
|
||
|
|
||
|
// Declare Major Variables
|
||
|
object oCaster = OBJECT_SELF;
|
||
|
object oTarget = GetSpellTargetObject(); // Should be only OBJECT_SELF.
|
||
|
// It auto picks the item to cast on
|
||
|
object oItem;
|
||
|
int nAmmoType = GetBaseItemType(oTarget);
|
||
|
int nCasterLevel = PHS_GetCasterLevel();
|
||
|
int nMetaMagic = PHS_GetMetaMagicFeat();
|
||
|
itemproperty IP_Add = ItemPropertyHolyAvenger();
|
||
|
|
||
|
// Duration is 1 round a level
|
||
|
float fDuration = PHS_GetDuration(PHS_ROUNDS, nCasterLevel, nMetaMagic);
|
||
|
|
||
|
// Make sure they are not immune to spells
|
||
|
if(PHS_TotalSpellImmunity(oTarget)) return;
|
||
|
|
||
|
// Declare effects
|
||
|
effect eDur;
|
||
|
effect eCessate = EffectVisualEffect(VFX_DUR_CESSATE_POSITIVE);
|
||
|
effect eVis = EffectVisualEffect(VFX_IMP_GOOD_HELP);
|
||
|
effect eMagicAura;
|
||
|
|
||
|
// Link effects
|
||
|
effect eLink = eCessate;
|
||
|
|
||
|
// Signal event
|
||
|
PHS_SignalSpellCastAt(oTarget, PHS_SPELL_HOLY_SWORD, FALSE);
|
||
|
|
||
|
// Is the item equipped
|
||
|
object oLefthand = GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oCaster);
|
||
|
object oRighthand = GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oCaster);
|
||
|
|
||
|
// Get the first (Righthand first), else lefthand, and make sure neither
|
||
|
// have it.
|
||
|
if(!GetItemHasItemProperty(oLefthand, ITEM_PROPERTY_HOLY_AVENGER) &&
|
||
|
!GetItemHasItemProperty(oRighthand, ITEM_PROPERTY_HOLY_AVENGER))
|
||
|
{
|
||
|
// Use the righthand first
|
||
|
if(GetIsObjectValid(oRighthand))
|
||
|
{
|
||
|
oItem = oRighthand;
|
||
|
}
|
||
|
// Else lefthand
|
||
|
else if(GetIsObjectValid(oLefthand))
|
||
|
{
|
||
|
oItem = oLefthand;
|
||
|
}
|
||
|
// else invalid
|
||
|
else
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Enchant item and apply duration effects
|
||
|
PHS_ApplyDurationAndVFX(oTarget, eVis, eLink, fDuration);
|
||
|
IPSafeAddItemProperty(oItem, IP_Add, fDuration, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, TRUE, TRUE);
|
||
|
return;
|
||
|
}
|