fix(Scripts/ZulFarrak): add Hearthstone mechanic to Blys party when event not started in time (#16333)
* initial * codestyle * remove unused taskscheduler * fix unsummon mechanic better syntax * fix other issues * another issue * dummy fix * should fix gossip and event * attempt to fix movement * attempt at fixing Bly walk * also make Weegli hostile + another attempt at move ment fix * another attempt at walk fix * initialise and debug * debuggo * v2 * moooore * oops * try to fix with boolean again * fix? * fixmaybe * revert * remove leftovers * and more on Weegli
This commit is contained in:
@@ -44,6 +44,7 @@ enum blySays
|
|||||||
|
|
||||||
enum blySpells
|
enum blySpells
|
||||||
{
|
{
|
||||||
|
SPELL_BLYS_BAND_ESCAPE = 11365,
|
||||||
SPELL_SHIELD_BASH = 11972,
|
SPELL_SHIELD_BASH = 11972,
|
||||||
SPELL_REVENGE = 12170
|
SPELL_REVENGE = 12170
|
||||||
};
|
};
|
||||||
@@ -64,6 +65,7 @@ public:
|
|||||||
|
|
||||||
void InitializeAI() override
|
void InitializeAI() override
|
||||||
{
|
{
|
||||||
|
ableToPortHome = false;
|
||||||
startedFight = false;
|
startedFight = false;
|
||||||
me->SetFaction(FACTION_FRIENDLY);
|
me->SetFaction(FACTION_FRIENDLY);
|
||||||
postGossipStep = 0;
|
postGossipStep = 0;
|
||||||
@@ -74,16 +76,33 @@ public:
|
|||||||
InstanceScript* instance;
|
InstanceScript* instance;
|
||||||
|
|
||||||
bool startedFight;
|
bool startedFight;
|
||||||
|
bool ableToPortHome;
|
||||||
uint32 postGossipStep;
|
uint32 postGossipStep;
|
||||||
uint32 Text_Timer;
|
uint32 Text_Timer;
|
||||||
uint32 ShieldBash_Timer;
|
uint32 ShieldBash_Timer;
|
||||||
uint32 Revenge_Timer; //this is wrong, spell should never be used unless me->GetVictim() dodge, parry or block attack. Trinity support required.
|
uint32 Revenge_Timer; //this is wrong, spell should never be used unless me->GetVictim() dodge, parry or block attack. Trinity support required.
|
||||||
|
uint32 Porthome_Timer;
|
||||||
ObjectGuid PlayerGUID;
|
ObjectGuid PlayerGUID;
|
||||||
|
|
||||||
void Reset() override
|
void Reset() override
|
||||||
{
|
{
|
||||||
ShieldBash_Timer = 5000;
|
ShieldBash_Timer = 5000;
|
||||||
Revenge_Timer = 8000;
|
Revenge_Timer = 8000;
|
||||||
|
Porthome_Timer = 156000;
|
||||||
|
ableToPortHome = false;
|
||||||
|
startedFight = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EnterEvadeMode(EvadeReason /*reason*/) override
|
||||||
|
{
|
||||||
|
if (ableToPortHome)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (instance->GetData(DATA_PYRAMID) == PYRAMID_KILLED_ALL_TROLLS)
|
||||||
|
{
|
||||||
|
ableToPortHome = true;
|
||||||
|
Porthome_Timer = 156000;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MovementInform(uint32 type, uint32 /*id*/) override
|
void MovementInform(uint32 type, uint32 /*id*/) override
|
||||||
@@ -112,6 +131,7 @@ public:
|
|||||||
switch (postGossipStep)
|
switch (postGossipStep)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
|
startedFight = true;
|
||||||
//weegli doesn't fight - he goes & blows up the door
|
//weegli doesn't fight - he goes & blows up the door
|
||||||
if (Creature* pWeegli = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_WEEGLI)))
|
if (Creature* pWeegli = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_WEEGLI)))
|
||||||
{
|
{
|
||||||
@@ -128,6 +148,7 @@ public:
|
|||||||
me->SetFaction(FACTION_MONSTER);
|
me->SetFaction(FACTION_MONSTER);
|
||||||
Player* target = ObjectAccessor::GetPlayer(*me, PlayerGUID);
|
Player* target = ObjectAccessor::GetPlayer(*me, PlayerGUID);
|
||||||
|
|
||||||
|
switchFactionIfAlive(NPC_WEEGLI, target);
|
||||||
switchFactionIfAlive(NPC_RAVEN, target);
|
switchFactionIfAlive(NPC_RAVEN, target);
|
||||||
switchFactionIfAlive(NPC_ORO, target);
|
switchFactionIfAlive(NPC_ORO, target);
|
||||||
switchFactionIfAlive(NPC_MURTA, target);
|
switchFactionIfAlive(NPC_MURTA, target);
|
||||||
@@ -146,6 +167,37 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Porthome_Timer <= diff && ableToPortHome == true)
|
||||||
|
{
|
||||||
|
if (Creature* weegli = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_WEEGLI)))
|
||||||
|
{
|
||||||
|
weegli->CastSpell(weegli, SPELL_BLYS_BAND_ESCAPE);
|
||||||
|
weegli->DespawnOrUnsummon(10000);
|
||||||
|
}
|
||||||
|
if (Creature* raven = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_RAVEN)))
|
||||||
|
{
|
||||||
|
raven->CastSpell(raven, SPELL_BLYS_BAND_ESCAPE);
|
||||||
|
raven->DespawnOrUnsummon(10000);
|
||||||
|
}
|
||||||
|
if (Creature* oro = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_ORO)))
|
||||||
|
{
|
||||||
|
oro->CastSpell(oro, SPELL_BLYS_BAND_ESCAPE);
|
||||||
|
oro->DespawnOrUnsummon(10000);
|
||||||
|
}
|
||||||
|
if (Creature* murta = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_MURTA)))
|
||||||
|
{
|
||||||
|
murta->CastSpell(murta, SPELL_BLYS_BAND_ESCAPE);
|
||||||
|
murta->DespawnOrUnsummon(10000);
|
||||||
|
}
|
||||||
|
DoCastSelf(SPELL_BLYS_BAND_ESCAPE);
|
||||||
|
me->DespawnOrUnsummon(10000);
|
||||||
|
Porthome_Timer = 156000; //set timer back so that the event doesn't keep triggering
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Porthome_Timer -= diff;
|
||||||
|
}
|
||||||
|
|
||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -176,6 +228,7 @@ public:
|
|||||||
|
|
||||||
void DoAction(int32 /*param*/) override
|
void DoAction(int32 /*param*/) override
|
||||||
{
|
{
|
||||||
|
ableToPortHome = false;
|
||||||
postGossipStep = 1;
|
postGossipStep = 1;
|
||||||
Text_Timer = 0;
|
Text_Timer = 0;
|
||||||
}
|
}
|
||||||
@@ -211,9 +264,8 @@ public:
|
|||||||
|
|
||||||
void sGossipHello(Player* player) override
|
void sGossipHello(Player* player) override
|
||||||
{
|
{
|
||||||
if (instance->GetData(DATA_PYRAMID) >= PYRAMID_DESTROY_GATES && !startedFight)
|
if (instance->GetData(DATA_PYRAMID) >= PYRAMID_MOVED_DOWNSTAIRS && !startedFight)
|
||||||
{
|
{
|
||||||
startedFight = true;
|
|
||||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_BLY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_BLY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||||
SendGossipMenuFor(player, 1517, me->GetGUID());
|
SendGossipMenuFor(player, 1517, me->GetGUID());
|
||||||
}
|
}
|
||||||
@@ -261,6 +313,17 @@ public:
|
|||||||
|
|
||||||
instance->SetData(DATA_PYRAMID, PYRAMID_CAGES_OPEN);
|
instance->SetData(DATA_PYRAMID, PYRAMID_CAGES_OPEN);
|
||||||
|
|
||||||
|
//setting gossip option as soon as the cages open
|
||||||
|
if(Creature* bly = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_BLY)))
|
||||||
|
{
|
||||||
|
bly->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Creature* weegli = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_WEEGLI)))
|
||||||
|
{
|
||||||
|
weegli->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
||||||
|
}
|
||||||
|
|
||||||
//set bly & co to aggressive & start moving to top of stairs
|
//set bly & co to aggressive & start moving to top of stairs
|
||||||
initBlyCrewMember(NPC_BLY, 1884.99f, 1263, 41.52f);
|
initBlyCrewMember(NPC_BLY, 1884.99f, 1263, 41.52f);
|
||||||
initBlyCrewMember(NPC_RAVEN, 1882.5f, 1263, 41.52f);
|
initBlyCrewMember(NPC_RAVEN, 1882.5f, 1263, 41.52f);
|
||||||
@@ -281,15 +344,6 @@ public:
|
|||||||
crew->GetMotionMaster()->MovePoint(1, { x, y, z, 4.78f });
|
crew->GetMotionMaster()->MovePoint(1, { x, y, z, 4.78f });
|
||||||
crew->SetFaction(FACTION_ESCORT_N_NEUTRAL_ACTIVE);
|
crew->SetFaction(FACTION_ESCORT_N_NEUTRAL_ACTIVE);
|
||||||
|
|
||||||
switch (entry)
|
|
||||||
{
|
|
||||||
case NPC_BLY:
|
|
||||||
case NPC_WEEGLI:
|
|
||||||
crew->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -429,13 +483,13 @@ public:
|
|||||||
{
|
{
|
||||||
if (instance->GetData(DATA_PYRAMID) == PYRAMID_CAGES_OPEN)
|
if (instance->GetData(DATA_PYRAMID) == PYRAMID_CAGES_OPEN)
|
||||||
{
|
{
|
||||||
|
me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
||||||
instance->SetData(DATA_PYRAMID, PYRAMID_ARRIVED_AT_STAIR);
|
instance->SetData(DATA_PYRAMID, PYRAMID_ARRIVED_AT_STAIR);
|
||||||
Talk(SAY_WEEGLI_OHNO);
|
Talk(SAY_WEEGLI_OHNO);
|
||||||
}
|
}
|
||||||
else if (instance->GetData(DATA_PYRAMID) == PYRAMID_KILLED_ALL_TROLLS)
|
else if (instance->GetData(DATA_PYRAMID) >= PYRAMID_KILLED_ALL_TROLLS && instance->GetData(DATA_PYRAMID) < PYRAMID_DESTROY_GATES)
|
||||||
{
|
{
|
||||||
instance->SetData(DATA_PYRAMID, PYRAMID_MOVED_DOWNSTAIRS);
|
instance->SetData(DATA_PYRAMID, PYRAMID_MOVED_DOWNSTAIRS);
|
||||||
me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
|
||||||
}
|
}
|
||||||
else if (instance->GetData(DATA_PYRAMID) == PYRAMID_DESTROY_GATES)
|
else if (instance->GetData(DATA_PYRAMID) == PYRAMID_DESTROY_GATES)
|
||||||
{
|
{
|
||||||
@@ -452,13 +506,13 @@ public:
|
|||||||
|
|
||||||
if (instance->GetData(DATA_PYRAMID) == PYRAMID_CAGES_OPEN)
|
if (instance->GetData(DATA_PYRAMID) == PYRAMID_CAGES_OPEN)
|
||||||
{
|
{
|
||||||
|
me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
||||||
instance->SetData(DATA_PYRAMID, PYRAMID_ARRIVED_AT_STAIR);
|
instance->SetData(DATA_PYRAMID, PYRAMID_ARRIVED_AT_STAIR);
|
||||||
Talk(SAY_WEEGLI_OHNO);
|
Talk(SAY_WEEGLI_OHNO);
|
||||||
}
|
}
|
||||||
else if (instance->GetData(DATA_PYRAMID) == PYRAMID_KILLED_ALL_TROLLS)
|
else if (instance->GetData(DATA_PYRAMID) >= PYRAMID_KILLED_ALL_TROLLS && instance->GetData(DATA_PYRAMID) < PYRAMID_DESTROY_GATES)
|
||||||
{
|
{
|
||||||
instance->SetData(DATA_PYRAMID, PYRAMID_MOVED_DOWNSTAIRS);
|
instance->SetData(DATA_PYRAMID, PYRAMID_MOVED_DOWNSTAIRS);
|
||||||
me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
|
||||||
}
|
}
|
||||||
else if (instance->GetData(DATA_PYRAMID) == PYRAMID_DESTROY_GATES)
|
else if (instance->GetData(DATA_PYRAMID) == PYRAMID_DESTROY_GATES)
|
||||||
{
|
{
|
||||||
@@ -476,10 +530,6 @@ public:
|
|||||||
me->SetHomePosition(1858.57f, 1146.35f, 14.745f, 3.85f);
|
me->SetHomePosition(1858.57f, 1146.35f, 14.745f, 3.85f);
|
||||||
Talk(SAY_WEEGLI_OK_I_GO);
|
Talk(SAY_WEEGLI_OK_I_GO);
|
||||||
instance->SetData(DATA_PYRAMID, PYRAMID_DESTROY_GATES);
|
instance->SetData(DATA_PYRAMID, PYRAMID_DESTROY_GATES);
|
||||||
if (Creature* sergeantBly = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_BLY)))
|
|
||||||
{
|
|
||||||
sergeantBly->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -501,6 +551,7 @@ public:
|
|||||||
switch (instance->GetData(DATA_PYRAMID))
|
switch (instance->GetData(DATA_PYRAMID))
|
||||||
{
|
{
|
||||||
case PYRAMID_MOVED_DOWNSTAIRS:
|
case PYRAMID_MOVED_DOWNSTAIRS:
|
||||||
|
case PYRAMID_KILLED_ALL_TROLLS:
|
||||||
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_WEEGLI, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_WEEGLI, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||||
SendGossipMenuFor(player, 1514, me->GetGUID()); //if event can proceed to end
|
SendGossipMenuFor(player, 1514, me->GetGUID()); //if event can proceed to end
|
||||||
break;
|
break;
|
||||||
@@ -508,7 +559,7 @@ public:
|
|||||||
SendGossipMenuFor(player, 1511, me->GetGUID()); //if event not started
|
SendGossipMenuFor(player, 1511, me->GetGUID()); //if event not started
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
SendGossipMenuFor(player, 1513, me->GetGUID()); //if event are in progress
|
SendGossipMenuFor(player, 1513, me->GetGUID()); //if event is in progress
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user