forked from Jaysyn/PRC8
58 lines
1.9 KiB
Plaintext
58 lines
1.9 KiB
Plaintext
|
/*
|
|||
|
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);
|
|||
|
}
|
|||
|
}
|