Updated Vow of Poverty. Added Sanctify Ki Strike, Holy Strike, Fist of Heavens, Vow of Abstinence, Vow of Chastity & Gift of Faith. (@fenac). Turned off the Taunt & Parry skills. Re-disabled AC & save bonuses from Tumble & Spellcraft. Updated min() & max() to PRCmin() & PRCmax() to not conflict with similarly named NUI adjacent functions. Set Point Blank Shot to 30' per PnP. Added icon for Chosen of Evil. Started work on Hidden Talent. Created Psionics function cheatsheet. Updated release archive.
70 lines
2.8 KiB
Plaintext
70 lines
2.8 KiB
Plaintext
/*
|
||
13/02/19 by Stratovarius
|
||
|
||
Sharp Shadows
|
||
|
||
Apprentice, Cloak of Shadows
|
||
Level/School: 3rd/Abjuration
|
||
Range: Personal
|
||
Target: You
|
||
Duration: 1 minute/level
|
||
|
||
You cloak yourself in sharp spikes of darkness. Although they are weightless and do nothing to impede you, your foes soon discover that they’re not so lucky.
|
||
|
||
A creature striking you takes 1d6 points of piercing damage +1 point per caster level (maximum +15). Damage from sharp shadows is not considered magical for the purpose of overcoming damage reduction.
|
||
*/
|
||
|
||
#include "shd_inc_shdfunc"
|
||
#include "shd_mysthook"
|
||
|
||
void main()
|
||
{
|
||
int nEvent = GetRunningEvent();
|
||
|
||
object oShadow = OBJECT_SELF;
|
||
object oTarget = PRCGetSpellTargetObject();
|
||
object oItem;
|
||
|
||
// We aren't being called from any event, instead being cast
|
||
if(nEvent == FALSE)
|
||
{
|
||
if(!ShadPreMystCastCode()) return;
|
||
struct mystery myst = EvaluateMystery(oShadow, oTarget, (METASHADOW_EXTEND | METASHADOW_EMPOWER | METASHADOW_MAXIMIZE));
|
||
|
||
if(myst.bCanMyst)
|
||
{
|
||
myst.fDur = 60.0 * myst.nShadowcasterLevel;
|
||
if(myst.bExtend) myst.fDur *= 2;
|
||
// Duration Effects
|
||
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_CHILL_SHIELD), oTarget, myst.fDur, TRUE, myst.nMystId, myst.nShadowcasterLevel);
|
||
|
||
// Add eventhook to the armor
|
||
oItem = GetItemInSlot(INVENTORY_SLOT_CHEST, oShadow);
|
||
IPSafeAddItemProperty(oItem, ItemPropertyOnHitCastSpell(IP_CONST_ONHIT_CASTSPELL_ONHIT_UNIQUEPOWER, 1), myst.fDur, X2_IP_ADDPROP_POLICY_KEEP_EXISTING, FALSE, FALSE);
|
||
AddEventScript(oItem, EVENT_ITEM_ONHIT, "shd_myst_shrpshd", TRUE, FALSE);
|
||
DelayCommand(myst.fDur, RemoveEventScript(oItem, EVENT_ITEM_ONHIT, "shd_myst_shrpshd", TRUE, FALSE));
|
||
if(myst.bEmpower)
|
||
{
|
||
SetLocalInt(oShadow, "SharpShadEmp", TRUE);
|
||
DelayCommand(myst.fDur, DeleteLocalInt(oShadow, "SharpShadEmp"));
|
||
}
|
||
if(myst.bMaximize)
|
||
{
|
||
SetLocalInt(oShadow, "SharpShadMax", TRUE);
|
||
DelayCommand(myst.fDur, DeleteLocalInt(oShadow, "SharpShadMax"));
|
||
}
|
||
}
|
||
}
|
||
else if(nEvent == EVENT_ITEM_ONHIT)
|
||
{
|
||
if(GetIsInMeleeRange(oTarget, oShadow))
|
||
{
|
||
int nDam = d6();
|
||
if (GetLocalInt(oShadow, "SharpShadMax")) nDam = 6;
|
||
if (GetLocalInt(oShadow, "SharpShadEmp")) nDam += nDam/2;
|
||
nDam += PRCMin(15, GetShadowcasterLevel(oShadow, CLASS_TYPE_SHADOWCASTER));
|
||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_MAGMAG), oTarget);
|
||
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDamage(nDam, DAMAGE_TYPE_PIERCING), oTarget);
|
||
}
|
||
}
|
||
} |