Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // DISRUPT UNDEAD
- #include "NW_I0_SPELLS"
- #include "x2_inc_spellhook"
- void main()
- {
- //SPELLCAST HOOK CODE
- if (!X2PreSpellCastCode())
- {
- return;
- }
- //MAJOR VARIABLES
- object oTarget = GetSpellTargetObject();
- int nCasterLevel = (GetCasterLevel(OBJECT_SELF)+1)/2;
- object oPC = GetFirstPC();
- int iSR = GetSpellResistance( oTarget );
- int nMetaMagic = GetMetaMagicFeat();
- // Base damage 2d3+6 (8-12)
- int nDamage = d3(2)+6;
- SendChatMessage(oPC,oPC,CHAT_MODE_SERVER,"Base damage is "+IntToString(nDamage)+"!");
- SendChatMessage(oPC,oPC,CHAT_MODE_SERVER,"Caster Level is "+IntToString(nCasterLevel)+"!");
- SendChatMessage(oPC,oPC,CHAT_MODE_SERVER,"TARGET SPELL RESISTANCE IS "+IntToString(iSR)+"!");
- // Sub-Total damage: Base + Bonus
- int sDamage = nDamage;
- // int iCounter;
- // while (iCounter < nCasterLevel - 1)
- // {
- // int bBonus = d3(1)+3;
- // SendChatMessage(oPC,oPC,CHAT_MODE_SERVER,"Bonus damage is "+IntToString(bBonus)+"!");
- // sDamage = sDamage + bBonus;
- // iCounter++;
- // }
- int iCounter = nCasterLevel;
- for(iCounter; iCounter > 1; iCounter--)
- {
- int bBonus = d3(1)+3;
- SendChatMessage(oPC,oPC,CHAT_MODE_SERVER,"Bonus damage is "+IntToString(bBonus)+"!");
- sDamage = sDamage + bBonus;
- }
- SendChatMessage(oPC,oPC,CHAT_MODE_SERVER,"Sub-total damage is "+IntToString(sDamage)+"!");
- int tDamage = sDamage;
- //METAMAGIC
- if (nMetaMagic == METAMAGIC_MAXIMIZE)
- {
- tDamage = 12+(6*nCasterLevel);
- }
- else if (nMetaMagic == METAMAGIC_EMPOWER)
- {
- tDamage = tDamage + tDamage/2;
- }
- // VFX DECLARATION
- effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
- effect eRay = EffectBeam(VFX_BEAM_EVIL, OBJECT_SELF, BODY_NODE_HAND);
- // If oTarget isn't undead - he doesn't receive damage
- if(GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
- {
- // Hostile target only
- if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
- {
- // Spellcasting started
- SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_NEGATIVE_ENERGY_RAY));
- // Ranged touch attack
- if (TouchAttackRanged(oTarget) != TOUCH_ATTACK_RESULT_MISS)
- {
- // Make SR check
- if (!MyResistSpell(OBJECT_SELF, oTarget))
- {
- // Will save SUCCESS
- if(MySavingThrow(SAVING_THROW_WILL, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_POSITIVE))
- {
- tDamage = sDamage/2;
- }
- // Will save FAILED
- DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
- effect eDam = EffectDamage(tDamage,DAMAGE_TYPE_POSITIVE,DAMAGE_POWER_NORMAL);
- ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
- SendChatMessage(oPC,oPC,CHAT_MODE_SERVER,"Total damage is "+IntToString(tDamage)+"!");
- }
- }
- }
- }
- // VFX
- ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eRay, oTarget, 1.7);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement