Scripts/Quest: Update 'Torture the Torturer' (#27782)

(cherry picked from commit f2904dd577)
This commit is contained in:
offl
2022-02-17 23:37:49 +02:00
committed by Shauren
parent 00f002b68c
commit 90e0c04ca8
2 changed files with 100 additions and 104 deletions

View File

@@ -0,0 +1,27 @@
--
UPDATE `serverside_spell` SET `ProcChance` = 101 WHERE `Id` = 48607;
DELETE FROM `serverside_spell_effect` WHERE `SpellID`=48607;
INSERT INTO `serverside_spell_effect` (`SpellID`,`EffectIndex`,`Effect`,`EffectMiscValue1`,`ImplicitTarget1`) VALUES
(48607,0,134,27394,25);
DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_high_executor_branding_iron';
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
(48603,'spell_high_executor_branding_iron');
DELETE FROM `creature_text` WHERE `CreatureID` = 27209 AND `GroupID` > 5;
INSERT INTO `creature_text` (`CreatureID`,`GroupID`,`ID`,`Text`,`Type`,`Language`,`Probability`,`Emote`,`Duration`,`Sound`,`BroadcastTextId`,`TextRange`,`comment`) VALUES
(27209,6,0,"I TOLD YOU... I don't know... anything... else!",15,0,100,0,0,0,26496,0,"Torturer LeCraft"),
(27209,6,1,"Please... stop. I'll do... anything....",15,0,100,0,0,0,26498,0,"Torturer LeCraft"),
(27209,6,2,"Just... end it.",15,0,100,0,0,0,26499,0,"Torturer LeCraft"),
(27209,6,3,"They all... begged... for their... lives!",15,0,100,0,0,0,26501,0,"Torturer LeCraft"),
(27209,6,4,"I beg you... no more.",15,0,100,0,0,0,26504,0,"Torturer LeCraft"),
(27209,6,5,"THIS IS TORTURE!",15,0,100,0,0,0,26505,0,"Torturer LeCraft"),
(27209,6,6,"You won't get... anything else... out of me!",15,0,100,0,0,0,26506,0,"Torturer LeCraft"),
(27209,6,7,"OWWWWWWWW!",15,0,100,0,0,0,26507,0,"Torturer LeCraft");
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 27209;
DELETE FROM `smart_scripts` WHERE `entryorguid` = 27209 AND `source_type` = 0;
INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`event_param5`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_param4`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
(27209,0,0,0,4,0,100,0,0,0,0,0,0,1,0,0,1,0,0,0,7,0,0,0,0,0,0,0,0,"Torturer LeCraft - On Aggro - Say Line 0"),
(27209,0,1,0,0,0,100,0,0,5000,3000,10000,0,11,30478,0,0,0,0,0,2,0,0,0,0,0,0,0,0,"Torturer LeCraft - In Combat - Cast 'Hemorrhage'"),
(27209,0,2,0,0,0,100,0,10000,15000,20000,20000,0,11,30621,0,0,0,0,0,2,0,0,0,0,0,0,0,0,"Torturer LeCraft - In Combat - Cast 'Kidney Shot'");

View File

@@ -24,6 +24,7 @@
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "SpellAuras.h"
#include "SpellInfo.h"
#include "SpellScript.h"
#include "TemporarySummon.h"
@@ -577,109 +578,6 @@ class npc_wyrmrest_defender : public CreatureScript
}
};
/*#####
# npc_torturer_lecraft
#####*/
enum TorturerLeCraft
{
SPELL_HEMORRHAGE = 30478,
SPELL_KIDNEY_SHOT = 30621,
SPELL_HIGH_EXECUTORS_BRANDING_IRON = 48603,
NPC_TORTURER_LECRAFT = 27394,
EVENT_HEMORRHAGE = 1,
EVENT_KIDNEY_SHOT = 2,
SAY_AGGRO = 0
};
class npc_torturer_lecraft : public CreatureScript
{
public: npc_torturer_lecraft() : CreatureScript("npc_torturer_lecraft") {}
struct npc_torturer_lecraftAI : public ScriptedAI
{
npc_torturer_lecraftAI(Creature* creature) : ScriptedAI(creature)
{
_textCounter = 1;
}
void Reset() override
{
_textCounter = 1;
_playerGUID.Clear();
}
void JustEngagedWith(Unit* who) override
{
_events.ScheduleEvent(EVENT_HEMORRHAGE, 5s, 8s);
_events.ScheduleEvent(EVENT_KIDNEY_SHOT, 12s, 15s);
if (Player* player = who->ToPlayer())
Talk (SAY_AGGRO, player);
}
void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override
{
if (spellInfo->Id != SPELL_HIGH_EXECUTORS_BRANDING_IRON)
return;
if (Player* player = caster->ToPlayer())
{
if (_textCounter == 1)
_playerGUID = player->GetGUID();
if (_playerGUID != player->GetGUID())
return;
Talk(_textCounter, player);
if (_textCounter == 5)
player->KilledMonsterCredit(NPC_TORTURER_LECRAFT);
++_textCounter;
if (_textCounter == 13)
_textCounter = 6;
}
}
void UpdateAI(uint32 diff) override
{
if (!UpdateVictim())
return;
_events.Update(diff);
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_HEMORRHAGE:
DoCastVictim(SPELL_HEMORRHAGE);
_events.ScheduleEvent(EVENT_HEMORRHAGE, 12s, 168s);
break;
case EVENT_KIDNEY_SHOT:
DoCastVictim(SPELL_KIDNEY_SHOT);
_events.ScheduleEvent(EVENT_KIDNEY_SHOT, 20s, 26s);
break;
default:
break;
}
}
DoMeleeAttackIfReady();
}
private:
EventMap _events;
uint8 _textCounter;
ObjectGuid _playerGUID;
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_torturer_lecraftAI(creature);
}
};
/*######
## Quest 12053: The Might of the Horde
######*/
@@ -811,15 +709,86 @@ class spell_call_out_injured_soldier : public SpellScript
}
};
/*######
## Quest 12252: Torture the Torturer
######*/
enum TortureTheTorturer
{
WHISPER_TORTURE_1 = 1,
WHISPER_TORTURE_2 = 2,
WHISPER_TORTURE_3 = 3,
WHISPER_TORTURE_4 = 4,
WHISPER_TORTURE_5 = 5,
WHISPER_TORTURE_RANDOM = 6,
SPELL_TORTURER_KILL_CREDIT = 48607,
SPELL_BRANDING_IRON_IMPACT = 48614
};
// 48603 - High Executor's Branding Iron
class spell_high_executor_branding_iron : public SpellScript
{
PrepareSpellScript(spell_high_executor_branding_iron);
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_TORTURER_KILL_CREDIT, SPELL_BRANDING_IRON_IMPACT });
}
void HandleWhisper()
{
Player* caster = GetCaster()->ToPlayer();
Creature* target = GetHitCreature();
if (!caster || !target)
return;
target->CastSpell(target, SPELL_BRANDING_IRON_IMPACT);
if (Aura* aura = caster->GetAura(GetSpellInfo()->Id))
{
switch (aura->GetStackAmount())
{
case 1:
target->AI()->Talk(WHISPER_TORTURE_1, caster);
break;
case 2:
target->AI()->Talk(WHISPER_TORTURE_2, caster);
break;
case 3:
target->AI()->Talk(WHISPER_TORTURE_3, caster);
break;
case 4:
target->AI()->Talk(WHISPER_TORTURE_4, caster);
break;
case 5:
target->AI()->Talk(WHISPER_TORTURE_5, caster);
target->CastSpell(caster, SPELL_TORTURER_KILL_CREDIT);
break;
case 6:
target->AI()->Talk(WHISPER_TORTURE_RANDOM, caster);
break;
default:
return;
}
}
}
void Register() override
{
AfterHit += SpellHitFn(spell_high_executor_branding_iron::HandleWhisper);
}
};
void AddSC_dragonblight()
{
new npc_commander_eligor_dawnbringer();
new spell_q12096_q12092_dummy();
new spell_q12096_q12092_bark();
new npc_wyrmrest_defender();
new npc_torturer_lecraft();
RegisterSpellScript(spell_warsong_battle_standard);
RegisterSpellScript(spell_moti_mirror_image_script_effect);
RegisterSpellScript(spell_moti_hourglass_cast_see_invis_on_master);
RegisterSpellScript(spell_call_out_injured_soldier);
RegisterSpellScript(spell_high_executor_branding_iron);
}