Scripts/Ebon Hold: How To Win Friends And Influence Enemies (#24090)

* Scripts/Ebon Hold: How To Win Friends And Influence Enemies

* Scripts/Ebon Hold: Improve SQL!

* Scripts/Ebon Hold: Final touch

* Scripts/Ebon Hold: Actually final touch

* Rename 9999_99_99_99_world.sql to 2020_01_26_04_world.sql

Co-authored-by: Giacomo Pozzoni <giacomopoz@gmail.com>
(cherry picked from commit 13c81f55e3)
This commit is contained in:
Sorikoff
2020-01-26 22:15:39 +02:00
committed by Shauren
parent d37547e769
commit a463e7f1bd
2 changed files with 235 additions and 143 deletions

View File

@@ -25,148 +25,6 @@
#include "SpellInfo.h"
#include "SpellScript.h"
//How to win friends and influence enemies
// texts signed for creature 28939 but used for 28939, 28940, 28610
enum win_friends
{
SAY_CRUSADER = 1,
SAY_PERSUADED1 = 2,
SAY_PERSUADED2 = 3,
SAY_PERSUADED3 = 4,
SAY_PERSUADED4 = 5,
SAY_PERSUADED5 = 6,
SAY_PERSUADED6 = 7,
SAY_PERSUADE_RAND = 8,
SPELL_PERSUASIVE_STRIKE = 52781,
SPELL_THREAT_PULSE = 58111,
QUEST_HOW_TO_WIN_FRIENDS = 12720,
};
class npc_crusade_persuaded : public CreatureScript
{
public:
npc_crusade_persuaded() : CreatureScript("npc_crusade_persuaded") { }
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_crusade_persuadedAI(creature);
}
struct npc_crusade_persuadedAI : public ScriptedAI
{
npc_crusade_persuadedAI(Creature* creature) : ScriptedAI(creature)
{
Initialize();
}
void Initialize()
{
speechTimer = 0;
speechCounter = 0;
playerGUID.Clear();
}
uint32 speechTimer;
uint32 speechCounter;
ObjectGuid playerGUID;
void Reset() override
{
Initialize();
me->SetReactState(REACT_AGGRESSIVE);
me->RestoreFaction();
}
void SpellHit(Unit* caster, SpellInfo const* spell) override
{
if (spell->Id == SPELL_PERSUASIVE_STRIKE && caster->GetTypeId() == TYPEID_PLAYER && me->IsAlive() && !speechCounter)
{
if (Player* player = caster->ToPlayer())
{
if (player->GetQuestStatus(QUEST_HOW_TO_WIN_FRIENDS) == QUEST_STATUS_INCOMPLETE)
{
playerGUID = player->GetGUID();
speechTimer = 1000;
speechCounter = 1;
me->SetFaction(player->GetFaction());
me->CombatStop(true);
me->GetMotionMaster()->MoveIdle();
me->SetReactState(REACT_PASSIVE);
DoCastAOE(SPELL_THREAT_PULSE, true);
sCreatureTextMgr->SendChat(me, SAY_PERSUADE_RAND, nullptr, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, SoundKitPlayType::Normal, TEAM_OTHER, false, player);
Talk(SAY_CRUSADER);
}
}
}
}
void UpdateAI(uint32 diff) override
{
if (speechCounter)
{
if (speechTimer <= diff)
{
Player* player = ObjectAccessor::GetPlayer(*me, playerGUID);
if (!player)
{
EnterEvadeMode();
return;
}
switch (speechCounter)
{
case 1:
Talk(SAY_PERSUADED1);
speechTimer = 8000;
break;
case 2:
Talk(SAY_PERSUADED2);
speechTimer = 8000;
break;
case 3:
Talk(SAY_PERSUADED3);
speechTimer = 8000;
break;
case 4:
Talk(SAY_PERSUADED4);
speechTimer = 8000;
break;
case 5:
sCreatureTextMgr->SendChat(me, SAY_PERSUADED5, nullptr, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_NORMAL, 0, SoundKitPlayType::Normal, TEAM_OTHER, false, player);
speechTimer = 8000;
break;
case 6:
Talk(SAY_PERSUADED6);
Unit::Kill(player, me);
speechCounter = 0;
player->GroupEventHappens(QUEST_HOW_TO_WIN_FRIENDS, me);
return;
}
++speechCounter;
DoCastAOE(SPELL_THREAT_PULSE, true);
} else
speechTimer -= diff;
return;
}
if (!UpdateVictim())
return;
DoMeleeAttackIfReady();
}
};
};
/*######
## npc_koltira_deathweaver
######*/
@@ -763,7 +621,6 @@ class spell_death_knight_devour_humanoid : public SpellScript
void AddSC_the_scarlet_enclave_c2()
{
new npc_crusade_persuaded();
new npc_scarlet_courier();
new npc_koltira_deathweaver();
new npc_high_inquisitor_valroth();