diff options
-rw-r--r-- | sql/updates/world/2013_11_28_00_world_misc.sql | 21 | ||||
-rw-r--r-- | src/server/scripts/Northrend/zone_dragonblight.cpp | 101 |
2 files changed, 122 insertions, 0 deletions
diff --git a/sql/updates/world/2013_11_28_00_world_misc.sql b/sql/updates/world/2013_11_28_00_world_misc.sql new file mode 100644 index 00000000000..ea949e598e5 --- /dev/null +++ b/sql/updates/world/2013_11_28_00_world_misc.sql @@ -0,0 +1,21 @@ +-- Torturer LeCraft SAI +SET @ENTRY := 27209; +UPDATE `creature_template` SET `AIName`='', `ScriptName`='npc_torturer_leCraft' WHERE `entry`=@ENTRY; +DELETE FROM `creature_ai_scripts` WHERE `creature_id`=@ENTRY; +DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0; +-- Texts for Torturer LeCraft +DELETE FROM `creature_text` WHERE `entry`=@ENTRY; +INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES +(@ENTRY,0,0,"Come to play?",12,0,100,0,0,0,"Torturer LeCraft"), +(@ENTRY,1,0,"Ow! I'll tell you NOTHING, filthy $r!",15,0,100,0,0,0,"Torturer LeCraft"), +(@ENTRY,2,0,"Wait... WAIT! What is it that you want to know? I know you're the $c named $N.",15,0,100,0,0,0,"Torturer LeCraft"), +(@ENTRY,3,0,"OW...NO! We know that you've been stealing our armor and weapons and horses!",15,0,100,0,0,0,"Torturer LeCraft"), +(@ENTRY,4,0,"We know... that you don't... know why we're immune... to your so-called blight. Grand Admiral Westwind somehow gave the high abbot that prayer. I beg you... no more... please?",15,0,100,0,0,0,"Torturer LeCraft"), +(@ENTRY,5,0,"AHHHHHHHHH! Please... we know... that you... have a spy... disguised as... one of us! There... that's all that I know. Please... mercy... STOP!",15,0,100,0,0,0,"Torturer LeCraft"), +(@ENTRY,6,0,"Please... stop. I'll do... anything....",15,0,100,0,0,0,"Torturer LeCraft"), +(@ENTRY,7,0,"I beg you... no more.",15,0,100,0,0,0,"Torturer LeCraft"), +(@ENTRY,8,0,"OWWWWWWWW!",15,0,100,0,0,0,"Torturer LeCraft"), +(@ENTRY,9,0,"You won't get... anything else... out of me!",15,0,100,0,0,0,"Torturer LeCraft"), +(@ENTRY,10,0,"They all... begged... for their... lives!",15,0,100,0,0,0,"Torturer LeCraft"), +(@ENTRY,11,0,"I TOLD YOU... I don't know... anything... else!",15,0,100,0,0,0,"Torturer LeCraft"), +(@ENTRY,12,0,"Just... end it.",15,0,100,0,0,0,"Torturer LeCraft"); diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index 0357ea075f4..869f6bf7a5b 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -303,10 +303,111 @@ 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) { } + + void Reset() OVERRIDE + { + _textcounter = 1; + _playerGUID = 0; + } + + void EnterCombat(Unit* /*who*/) OVERRIDE + { + _events.ScheduleEvent(EVENT_HEMORRHAGE, urand(5000, 8000)); + _events.ScheduleEvent(EVENT_KIDNEY_SHOT, urand(12000, 15000)); + Talk (SAY_AGGRO); + } + + + void SpellHit(Unit* caster, const SpellInfo* spell) OVERRIDE + { + if (spell->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->GetGUID()); + + if (_textcounter == 5) + player->KilledMonsterCredit(NPC_TORTURER_LECRAFT, 0); + + ++_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, urand(12000, 168000)); + break; + case EVENT_KIDNEY_SHOT: + DoCastVictim(SPELL_KIDNEY_SHOT); + _events.ScheduleEvent(EVENT_KIDNEY_SHOT, urand(20000, 26000)); + break; + default: + break; + } + } + DoMeleeAttackIfReady(); + } + + private: + EventMap _events; + uint8 _textcounter; + uint64 _playerGUID; + }; + + CreatureAI* GetAI(Creature* creature) const + { + return new npc_torturer_leCraftAI(creature); + } +}; + void AddSC_dragonblight() { new npc_alexstrasza_wr_gate; new spell_q12096_q12092_dummy; new spell_q12096_q12092_bark; new npc_wyrmrest_defender; + new npc_torturer_leCraft; } |