aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2022-03-27 21:15:04 +0300
committerGitHub <noreply@github.com>2022-03-27 21:15:04 +0300
commitce98938ab8fbbb61fc4b207c11bf14345ce84f3c (patch)
treee41397d9b30399015f6fe9b4ecf6b72ca7832cd0
parent9ef60d70638888c07d131d42d3746478feac2423 (diff)
Scripts/Quest: Update 'The Art of Persuasion' (11648) (#27887)
-rw-r--r--sql/updates/world/3.3.5/2022_03_27_00_world.sql8
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp235
2 files changed, 142 insertions, 101 deletions
diff --git a/sql/updates/world/3.3.5/2022_03_27_00_world.sql b/sql/updates/world/3.3.5/2022_03_27_00_world.sql
new file mode 100644
index 00000000000..de1c26df3aa
--- /dev/null
+++ b/sql/updates/world/3.3.5/2022_03_27_00_world.sql
@@ -0,0 +1,8 @@
+--
+UPDATE `creature_template_addon` SET `bytes1` = 5, `bytes2` = 1, `emote` = 0, `auras` = '45631 45842' WHERE `entry` = 25478;
+UPDATE `creature_template` SET `ScriptName` = '' WHERE `entry` = 25478;
+
+DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_borean_tundra_neural_needle','spell_borean_tundra_prototype_neural_needle');
+INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
+(45634,'spell_borean_tundra_neural_needle'),
+(48252,'spell_borean_tundra_prototype_neural_needle');
diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp
index 8d70f34f119..33eeeb378a4 100644
--- a/src/server/scripts/Northrend/zone_borean_tundra.cpp
+++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp
@@ -1112,106 +1112,6 @@ public:
};
/*######
-## npc_imprisoned_beryl_sorcerer
-######*/
-enum ImprisionedBerylSorcerer
-{
- SPELL_NEURAL_NEEDLE = 45634,
- SPELL_PROTOTYPE_NEURAL_NEEDLE = 48252,
- SPELL_NEURAL_NEEDLE_IMPACT = 45702,
- SPELL_PROTOTYPE_NEURAL_NEEDLE_IMPACT = 48254,
-
- NPC_IMPRISONED_BERYL_SORCERER = 25478,
-
- QUEST_THE_ART_OF_PERSUASION = 11648
-};
-
-class npc_imprisoned_beryl_sorcerer : public CreatureScript
-{
-public:
- npc_imprisoned_beryl_sorcerer() : CreatureScript("npc_imprisoned_beryl_sorcerer") { }
-
- struct npc_imprisoned_beryl_sorcererAI : public ScriptedAI
- {
- npc_imprisoned_beryl_sorcererAI(Creature* creature) : ScriptedAI(creature)
- {
- Initialize();
- }
-
- void Initialize()
- {
- rebuff = 0;
- }
-
- uint32 rebuff;
-
- void Reset() override
- {
- if (me->GetReactState() != REACT_PASSIVE)
- me->SetReactState(REACT_PASSIVE);
-
- Initialize();
- }
-
- void UpdateAI(uint32 diff) override
- {
- UpdateVictim();
-
- if (rebuff <= diff)
- {
- if (!me->HasAura(SPELL_COSMETIC_ENSLAVE_CHAINS_SELF))
- DoCast(me, SPELL_COSMETIC_ENSLAVE_CHAINS_SELF);
- rebuff = 180000;
- }
- else
- rebuff -= diff;
-
- DoMeleeAttackIfReady();
- }
-
- void JustEngagedWith(Unit* /*who*/) override
- {
- }
-
- void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override
- {
- Player* playerCaster = caster->ToPlayer();
- if (!playerCaster)
- return;
-
- if (spellInfo->Id == SPELL_NEURAL_NEEDLE || spellInfo->Id == SPELL_PROTOTYPE_NEURAL_NEEDLE)
- GotStinged(playerCaster, spellInfo->Id);
- }
-
- void GotStinged(Player* caster, uint32 spellId)
- {
- DoCastSelf(spellId == SPELL_NEURAL_NEEDLE ? SPELL_NEURAL_NEEDLE_IMPACT : SPELL_PROTOTYPE_NEURAL_NEEDLE_IMPACT);
-
- // Event cannot happen if quest is not accepted/completed/rewarded
- if (caster->GetQuestStatus(QUEST_THE_ART_OF_PERSUASION) == QUEST_STATUS_NONE)
- return;
-
- uint32 step = 0;
-
- if (spellId == SPELL_NEURAL_NEEDLE)
- step = caster->GetAuraCount(SPELL_NEURAL_NEEDLE); // Text IDs 0-6
- else
- step = caster->GetAuraCount(SPELL_PROTOTYPE_NEURAL_NEEDLE) + 7; // Text IDs 7-18
-
- if (spellId == SPELL_NEURAL_NEEDLE && step == 4)
- caster->KilledMonsterCredit(NPC_IMPRISONED_BERYL_SORCERER);
-
- Talk(step, caster);
- }
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_imprisoned_beryl_sorcererAI(creature);
- }
-};
-
-/*######
## Help Those That Cannot Help Themselves, Quest 11876
######*/
@@ -1961,6 +1861,138 @@ class spell_kodo_delivered : public SpellScript
}
};
+/*######
+## Quest 11648: The Art of Persuasion
+######*/
+
+enum TheArtOfPersuasion
+{
+ WHISPER_TORTURE_1 = 0,
+ WHISPER_TORTURE_2 = 1,
+ WHISPER_TORTURE_3 = 2,
+ WHISPER_TORTURE_4 = 3,
+ WHISPER_TORTURE_5 = 4,
+ WHISPER_TORTURE_RANDOM_1 = 5,
+ WHISPER_TORTURE_RANDOM_2 = 6,
+ WHISPER_TORTURE_RANDOM_3 = 7,
+
+ WHISPER_TORTURE_PROTO_1 = 8,
+ WHISPER_TORTURE_PROTO_2 = 9,
+ WHISPER_TORTURE_PROTO_3 = 10,
+ WHISPER_TORTURE_PROTO_4 = 11,
+ WHISPER_TORTURE_PROTO_5 = 12,
+ WHISPER_TORTURE_PROTO_6 = 13,
+ WHISPER_TORTURE_PROTO_7 = 14,
+ WHISPER_TORTURE_PROTO_8 = 15,
+ WHISPER_TORTURE_PROTO_9 = 16,
+ WHISPER_TORTURE_PROTO_10 = 17,
+
+ SPELL_NEURAL_NEEDLE_IMPACT = 45702,
+ SPELL_PROTOTYPE_NEURAL_NEEDLE_IMPACT = 48254
+};
+
+// 45634 - Neural Needle
+class spell_borean_tundra_neural_needle : public SpellScript
+{
+ PrepareSpellScript(spell_borean_tundra_neural_needle);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_NEURAL_NEEDLE_IMPACT });
+ }
+
+ void HandleWhisper()
+ {
+ Player* caster = GetCaster()->ToPlayer();
+ Creature* target = GetHitCreature();
+ if (!caster || !target)
+ return;
+
+ target->CastSpell(target, SPELL_NEURAL_NEEDLE_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);
+ caster->KilledMonsterCredit(target->GetEntry());
+ break;
+ case 6:
+ target->AI()->Talk(RAND(WHISPER_TORTURE_RANDOM_1, WHISPER_TORTURE_RANDOM_2, WHISPER_TORTURE_RANDOM_3), caster);
+ break;
+ default:
+ return;
+ }
+ }
+ }
+
+ void Register() override
+ {
+ AfterHit += SpellHitFn(spell_borean_tundra_neural_needle::HandleWhisper);
+ }
+};
+
+// 48252 - Prototype Neural Needle
+class spell_borean_tundra_prototype_neural_needle : public SpellScript
+{
+ PrepareSpellScript(spell_borean_tundra_prototype_neural_needle);
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_PROTOTYPE_NEURAL_NEEDLE_IMPACT });
+ }
+
+ void HandleWhisper()
+ {
+ Player* caster = GetCaster()->ToPlayer();
+ Creature* target = GetHitCreature();
+ if (!caster || !target)
+ return;
+
+ target->CastSpell(target, SPELL_PROTOTYPE_NEURAL_NEEDLE_IMPACT);
+
+ uint32 text = 0;
+ if (Aura* aura = caster->GetAura(GetSpellInfo()->Id))
+ {
+ switch (aura->GetStackAmount())
+ {
+ case 1: text = WHISPER_TORTURE_PROTO_1; break;
+ case 2: text = WHISPER_TORTURE_PROTO_2; break;
+ case 3: text = WHISPER_TORTURE_PROTO_3; break;
+ case 4: text = WHISPER_TORTURE_PROTO_4; break;
+ case 5: text = WHISPER_TORTURE_PROTO_5; break;
+ case 6: text = WHISPER_TORTURE_PROTO_6; break;
+ case 7: text = WHISPER_TORTURE_PROTO_7; break;
+ case 8: text = WHISPER_TORTURE_PROTO_8; break;
+ case 9: text = WHISPER_TORTURE_PROTO_9; break;
+ case 10: text = WHISPER_TORTURE_PROTO_10; break;
+ default: return;
+ }
+ }
+
+ if (text)
+ target->AI()->Talk(text, caster);
+ }
+
+ void Register() override
+ {
+ AfterHit += SpellHitFn(spell_borean_tundra_prototype_neural_needle::HandleWhisper);
+ }
+};
+
void AddSC_borean_tundra()
{
new npc_corastrasza();
@@ -1973,7 +2005,6 @@ void AddSC_borean_tundra()
new npc_leryssa();
new npc_general_arlos();
new npc_beryl_sorcerer();
- new npc_imprisoned_beryl_sorcerer();
new npc_trapped_mammoth_calf();
new npc_valiance_keep_cannoneer();
new npc_hidden_cultist();
@@ -1987,4 +2018,6 @@ void AddSC_borean_tundra()
RegisterSpellScript(spell_dispel_freed_soldier_debuff);
RegisterSpellScript(spell_deliver_kodo);
RegisterSpellScript(spell_kodo_delivered);
+ RegisterSpellScript(spell_borean_tundra_neural_needle);
+ RegisterSpellScript(spell_borean_tundra_prototype_neural_needle);
}