1. class spell_add_threat_and_combat_state : public SpellScriptLoader
  2. {
  3. public:
  4. spell_add_threat_and_combat_state() : SpellScriptLoader("spell_add_threat_and_combat_state") { }
  5. class spell_add_threat_and_combat_state_SpellScript : public SpellScript
  6. {
  7. PrepareSpellScript(spell_add_threat_and_combat_state_SpellScript);
  8. void HandleScript(SpellEffIndex /*effIndex*/)
  9. {
  10. if (Creature* creature = GetHitCreature())
  11. {
  12. creature->AddThreat(GetCaster(), float(GetEffectValue()));
  13. creature->AI()->AttackStart(GetCaster());
  14. }
  15. }
  16. void Register() override
  17. {
  18. OnEffectHitTarget += SpellEffectFn(spell_add_threat_and_combat_state_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
  19. }
  20. };
  21. SpellScript* GetSpellScript() const override
  22. {
  23. return new spell_add_threat_and_combat_state_SpellScript();
  24. }
  25. };
  26. class spell_remove_from_combat : public SpellScriptLoader
  27. {
  28. public:
  29. spell_remove_from_combat() : SpellScriptLoader("spell_remove_from_combat") { }
  30. class spell_remove_from_combat_SpellScript : public SpellScript
  31. {
  32. PrepareSpellScript(spell_remove_from_combat_SpellScript);
  33. void HandleScript(SpellEffIndex /*effIndex*/)
  34. {
  35. if (Unit* caster = GetCaster())
  36. {
  37. if (Unit* unitTarget = GetHitCreature())
  38. {
  39. unitTarget->DeleteThreatList();
  40. unitTarget->CombatStop(true);
  41. unitTarget->GetMotionMaster()->Clear();
  42. unitTarget->GetMotionMaster()->MoveIdle();
  43. }
  44. }
  45. }
  46. void Register() override
  47. {
  48. OnEffectHitTarget += SpellEffectFn(spell_remove_from_combat_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
  49. }
  50. };
  51. SpellScript* GetSpellScript() const override
  52. {
  53. return new spell_remove_from_combat_SpellScript();
  54. }
  55. };
  56. class spell_set_respawn_delay : public SpellScriptLoader
  57. {
  58. public:
  59. spell_set_respawn_delay() : SpellScriptLoader("spell_set_respawn_delay") { }
  60. class spell_set_respawn_delay_SpellScript : public SpellScript
  61. {
  62. PrepareSpellScript(spell_set_respawn_delay_SpellScript);
  63. void HandleScript(SpellEffIndex /*effIndex*/)
  64. {
  65. if (Creature* creature = GetHitCreature())
  66. {
  67. creature->SetCorpseDelay(5);
  68. creature->SetRespawnDelay(uint32(GetEffectValue()));
  69. }
  70. }
  71. void Register() override
  72. {
  73. OnEffectHitTarget += SpellEffectFn(spell_set_respawn_delay_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
  74. }
  75. };
  76. SpellScript* GetSpellScript() const override
  77. {
  78. return new spell_set_respawn_delay_SpellScript();
  79. }
  80. };
  81. class spell_set_respawn_delay_2 : public SpellScriptLoader
  82. {
  83. public:
  84. spell_set_respawn_delay_2() : SpellScriptLoader("spell_set_respawn_delay_2") { }
  85. class spell_set_respawn_delay_2_SpellScript : public SpellScript
  86. {
  87. PrepareSpellScript(spell_set_respawn_delay_2_SpellScript);
  88. void HandleScript(SpellEffIndex /*effIndex*/)
  89. {
  90. if (Creature* creature = GetHitCreature())
  91. {
  92. uint32 corpseDelay = creature->GetCorpseDelay();
  93. uint32 respawnDelay = creature->GetRespawnDelay();
  94. creature->SetCorpseDelay(5);
  95. creature->SetRespawnDelay(uint32(GetEffectValue()));
  96. creature->DespawnOrUnsummon();
  97. creature->SetCorpseDelay(corpseDelay);
  98. creature->SetRespawnDelay(respawnDelay);
  99. }
  100. }
  101. void Register() override
  102. {
  103. OnEffectHitTarget += SpellEffectFn(spell_set_respawn_delay_2_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
  104. }
  105. };
  106. SpellScript* GetSpellScript() const override
  107. {
  108. return new spell_set_respawn_delay_2_SpellScript();
  109. }
  110. };

Generic template spells.