Advertisement
Guest User

Untitled

a guest
Jun 19th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.93 KB | None | 0 0
  1. // DISRUPT UNDEAD
  2.  
  3. #include "NW_I0_SPELLS"
  4. #include "x2_inc_spellhook"
  5.  
  6. void main()
  7. {
  8.  
  9. //SPELLCAST HOOK CODE
  10. if (!X2PreSpellCastCode())
  11. {
  12. return;
  13. }
  14.  
  15. //MAJOR VARIABLES
  16. object oTarget = GetSpellTargetObject();
  17. int nCasterLevel = (GetCasterLevel(OBJECT_SELF)+1)/2;
  18.  
  19. object oPC = GetFirstPC();
  20.  
  21. int iSR = GetSpellResistance( oTarget );
  22. int nMetaMagic = GetMetaMagicFeat();
  23. // Base damage 2d3+6 (8-12)
  24. int nDamage = d3(2)+6;
  25. SendChatMessage(oPC,oPC,CHAT_MODE_SERVER,"Base damage is "+IntToString(nDamage)+"!");
  26. SendChatMessage(oPC,oPC,CHAT_MODE_SERVER,"Caster Level is "+IntToString(nCasterLevel)+"!");
  27. SendChatMessage(oPC,oPC,CHAT_MODE_SERVER,"TARGET SPELL RESISTANCE IS "+IntToString(iSR)+"!");
  28. // Sub-Total damage: Base + Bonus
  29. int sDamage = nDamage;
  30.  
  31. // int iCounter;
  32. // while (iCounter < nCasterLevel - 1)
  33. // {
  34. // int bBonus = d3(1)+3;
  35. // SendChatMessage(oPC,oPC,CHAT_MODE_SERVER,"Bonus damage is "+IntToString(bBonus)+"!");
  36. // sDamage = sDamage + bBonus;
  37. // iCounter++;
  38. // }
  39.  
  40. int iCounter = nCasterLevel;
  41. for(iCounter; iCounter > 1; iCounter--)
  42. {
  43. int bBonus = d3(1)+3;
  44. SendChatMessage(oPC,oPC,CHAT_MODE_SERVER,"Bonus damage is "+IntToString(bBonus)+"!");
  45. sDamage = sDamage + bBonus;
  46. }
  47.  
  48.  
  49.  
  50. SendChatMessage(oPC,oPC,CHAT_MODE_SERVER,"Sub-total damage is "+IntToString(sDamage)+"!");
  51.  
  52. int tDamage = sDamage;
  53.  
  54. //METAMAGIC
  55. if (nMetaMagic == METAMAGIC_MAXIMIZE)
  56. {
  57. tDamage = 12+(6*nCasterLevel);
  58. }
  59. else if (nMetaMagic == METAMAGIC_EMPOWER)
  60. {
  61. tDamage = tDamage + tDamage/2;
  62. }
  63.  
  64. // VFX DECLARATION
  65. effect eVis = EffectVisualEffect(VFX_IMP_NEGATIVE_ENERGY);
  66. effect eRay = EffectBeam(VFX_BEAM_EVIL, OBJECT_SELF, BODY_NODE_HAND);
  67.  
  68. // If oTarget isn't undead - he doesn't receive damage
  69. if(GetRacialType(oTarget) == RACIAL_TYPE_UNDEAD)
  70. {
  71. // Hostile target only
  72. if (spellsIsTarget(oTarget, SPELL_TARGET_STANDARDHOSTILE, OBJECT_SELF))
  73. {
  74.  
  75. // Spellcasting started
  76. SignalEvent(oTarget, EventSpellCastAt(OBJECT_SELF, SPELL_NEGATIVE_ENERGY_RAY));
  77.  
  78. // Ranged touch attack
  79. if (TouchAttackRanged(oTarget) != TOUCH_ATTACK_RESULT_MISS)
  80. {
  81. // Make SR check
  82. if (!MyResistSpell(OBJECT_SELF, oTarget))
  83. {
  84. // Will save SUCCESS
  85. if(MySavingThrow(SAVING_THROW_WILL, oTarget, GetSpellSaveDC(), SAVING_THROW_TYPE_POSITIVE))
  86. {
  87. tDamage = sDamage/2;
  88. }
  89. // Will save FAILED
  90. DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_INSTANT, eVis, oTarget));
  91. effect eDam = EffectDamage(tDamage,DAMAGE_TYPE_POSITIVE,DAMAGE_POWER_NORMAL);
  92. ApplyEffectToObject(DURATION_TYPE_INSTANT, eDam, oTarget);
  93. SendChatMessage(oPC,oPC,CHAT_MODE_SERVER,"Total damage is "+IntToString(tDamage)+"!");
  94. }
  95.  
  96. }
  97. }
  98. }
  99. // VFX
  100. ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eRay, oTarget, 1.7);
  101. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement