PRC8_fork/trunk/newspellbook/moi_mld_slspkatk.nss

58 lines
1.9 KiB
Plaintext
Raw Normal View History

/*
23/1/21 by Stratovarius
A soulspark attacks by focusing soul energy on its target as a ranged attack. This doesn<73>t provoke attacks of opportunity.
*/
#include "moi_inc_moifunc"
#include "prc_inc_sp_tch"
void main()
{
object oSoulspark = OBJECT_SELF;
object oTarget = PRCGetSpellTargetObject();
//SendMessageToPC(GetFirstPC(),"moi_mld_slspkatk: we have target "+GetName(oTarget));
effect eVis = EffectVisualEffect(VFX_IMP_FLAME_M);
effect eRay = EffectBeam(VFX_BEAM_ODD, OBJECT_SELF, BODY_NODE_HAND);
int iAttackRoll, nDam, nAtk;
string sType = GetResRef(oSoulspark);
if (sType == "moi_slspk_least") nDam = d4()+1;
else if (sType == "moi_slspk_lesser") nDam = d6()+2;
else if (sType == "moi_slspk_medium")
{
nDam = d8()+3;
nAtk = 1;
}
else if (sType == "moi_slspk_greatr")
{
nDam = d12()+5;
nAtk = 1;
}
object oMeldshaper = GetMaster(OBJECT_SELF);
if (!GetLocalInt(oMeldshaper, "SoulsparkEssentiaChoice"))
{
nDam += GetEssentiaInvested(oMeldshaper, MELD_SOULSPARK_FAMILIAR);
nAtk += GetEssentiaInvested(oMeldshaper, MELD_SOULSPARK_FAMILIAR);
}
if(!GetIsReactionTypeFriendly(oTarget))
{
//Fire cast spell at event for the specified target
SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_RAY_OF_FROST));
iAttackRoll = PRCDoRangedTouchAttack(oTarget, FALSE, oSoulspark, nAtk);
if(iAttackRoll > 0)
{
// perform ranged touch attack and apply sneak attack if any exists
ApplyTouchAttackDamage(oSoulspark, oTarget, iAttackRoll, nDam, DAMAGE_TYPE_POSITIVE);
//Apply the VFX impact and damage effect
SPApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget);
}
SPApplyEffectToObject(DURATION_TYPE_TEMPORARY, eRay, oTarget, 1.7,FALSE);
}
}