mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-23 05:36:23 +00:00
fix(Scripts/BRD): Mobs in Manufactory should attack on Golem Lord Arg… (#7794)
- Closes #3077
This commit is contained in:
@@ -24,39 +24,42 @@ enum BRDBosses
|
||||
|
||||
enum DataTypes
|
||||
{
|
||||
TYPE_RING_OF_LAW = 1,
|
||||
TYPE_VAULT = 2,
|
||||
TYPE_BAR = 3,
|
||||
TYPE_TOMB_OF_SEVEN = 4,
|
||||
TYPE_LYCEUM = 5,
|
||||
TYPE_IRON_HALL = 6,
|
||||
TYPE_RING_OF_LAW = 1,
|
||||
TYPE_VAULT = 2,
|
||||
TYPE_BAR = 3,
|
||||
TYPE_TOMB_OF_SEVEN = 4,
|
||||
TYPE_LYCEUM = 5,
|
||||
TYPE_IRON_HALL = 6,
|
||||
|
||||
DATA_EMPEROR = 10,
|
||||
DATA_PHALANX = 11,
|
||||
DATA_EMPEROR = 10,
|
||||
DATA_PHALANX = 11,
|
||||
|
||||
DATA_ARENA1 = 12,
|
||||
DATA_ARENA2 = 13,
|
||||
DATA_ARENA3 = 14,
|
||||
DATA_ARENA4 = 15,
|
||||
DATA_ARENA1 = 12,
|
||||
DATA_ARENA2 = 13,
|
||||
DATA_ARENA3 = 14,
|
||||
DATA_ARENA4 = 15,
|
||||
|
||||
DATA_GO_BAR_KEG = 16,
|
||||
DATA_GO_BAR_KEG_TRAP = 17,
|
||||
DATA_GO_BAR_DOOR = 18,
|
||||
DATA_GO_CHALICE = 19,
|
||||
DATA_GO_BAR_KEG = 16,
|
||||
DATA_GO_BAR_KEG_TRAP = 17,
|
||||
DATA_GO_BAR_DOOR = 18,
|
||||
DATA_GO_CHALICE = 19,
|
||||
|
||||
DATA_GHOSTKILL = 20,
|
||||
DATA_EVENSTARTER = 21,
|
||||
DATA_GHOSTKILL = 20,
|
||||
DATA_EVENSTARTER = 21,
|
||||
|
||||
DATA_GOLEM_DOOR_N = 22,
|
||||
DATA_GOLEM_DOOR_S = 23,
|
||||
DATA_GOLEM_DOOR_N = 22,
|
||||
DATA_GOLEM_DOOR_S = 23,
|
||||
|
||||
DATA_THRONE_DOOR = 24,
|
||||
DATA_THRONE_DOOR = 24,
|
||||
|
||||
DATA_SF_BRAZIER_N = 25,
|
||||
DATA_SF_BRAZIER_S = 26,
|
||||
DATA_MOIRA = 27,
|
||||
DATA_SF_BRAZIER_N = 25,
|
||||
DATA_SF_BRAZIER_S = 26,
|
||||
DATA_MOIRA = 27,
|
||||
|
||||
DATA_OPEN_COFFER_DOORS = 30
|
||||
DATA_OPEN_COFFER_DOORS = 30,
|
||||
|
||||
DATA_GOLEM_LORD_ARGELMACH_INIT = 31,
|
||||
DATA_GOLEM_LORD_ARGELMACH_ADDS = 32
|
||||
};
|
||||
|
||||
template <class AI, class T>
|
||||
|
||||
@@ -13,19 +13,25 @@
|
||||
|
||||
enum Creatures
|
||||
{
|
||||
NPC_EMPEROR = 9019,
|
||||
NPC_PHALANX = 9502,
|
||||
NPC_ANGERREL = 9035,
|
||||
NPC_DOPEREL = 9040,
|
||||
NPC_HATEREL = 9034,
|
||||
NPC_VILEREL = 9036,
|
||||
NPC_SEETHREL = 9038,
|
||||
NPC_GLOOMREL = 9037,
|
||||
NPC_DOOMREL = 9039,
|
||||
NPC_MAGMUS = 9938,
|
||||
NPC_MOIRA = 8929,
|
||||
NPC_EMPEROR = 9019,
|
||||
NPC_PHALANX = 9502,
|
||||
NPC_ANGERREL = 9035,
|
||||
NPC_DOPEREL = 9040,
|
||||
NPC_HATEREL = 9034,
|
||||
NPC_VILEREL = 9036,
|
||||
NPC_SEETHREL = 9038,
|
||||
NPC_GLOOMREL = 9037,
|
||||
NPC_DOOMREL = 9039,
|
||||
NPC_MAGMUS = 9938,
|
||||
NPC_MOIRA = 8929,
|
||||
|
||||
NPC_WATCHMAN_DOOMGRIP = 9476,
|
||||
NPC_WATCHMAN_DOOMGRIP = 9476,
|
||||
|
||||
NPC_WEAPON_TECHNICIAN = 8920,
|
||||
NPC_DOOMFORGE_ARCANASMITH = 8900,
|
||||
NPC_RAGEREAVER_GOLEM = 8906,
|
||||
NPC_WRATH_HAMMER_CONSTRUCT = 8907,
|
||||
NPC_GOLEM_LORD_ARGELMACH = 8983
|
||||
};
|
||||
|
||||
enum GameObjects
|
||||
@@ -53,6 +59,34 @@ enum GameObjects
|
||||
GO_CHEST_SEVEN = 169243,
|
||||
};
|
||||
|
||||
enum MiscData
|
||||
{
|
||||
SPELL_STONED = 10255
|
||||
};
|
||||
|
||||
class RestoreAttack : public BasicEvent
|
||||
{
|
||||
public:
|
||||
RestoreAttack(Creature* boss) : _boss(boss) {}
|
||||
|
||||
bool Execute(uint64 /*execTime*/, uint32 /*diff*/) override
|
||||
{
|
||||
_boss->SetReactState(REACT_AGGRESSIVE);
|
||||
_boss->AI()->SetData(DATA_GOLEM_LORD_ARGELMACH_INIT, DONE);
|
||||
|
||||
if (Unit* victim = _boss->GetVictim())
|
||||
{
|
||||
_boss->SetTarget(victim->GetGUID());
|
||||
_boss->GetMotionMaster()->MoveChase(victim);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
Creature* _boss;
|
||||
};
|
||||
|
||||
class instance_blackrock_depths : public InstanceMapScript
|
||||
{
|
||||
public:
|
||||
@@ -105,6 +139,9 @@ public:
|
||||
uint32 TombEventCounter;
|
||||
uint32 OpenedCoofers;
|
||||
|
||||
GuidList ArgelmachAdds;
|
||||
ObjectGuid ArgelmachGUID;
|
||||
|
||||
void Initialize() override
|
||||
{
|
||||
memset(&encounter, 0, sizeof(encounter));
|
||||
@@ -155,6 +192,20 @@ public:
|
||||
if (!creature->IsAlive())
|
||||
HandleGameObject(GetGuidData(DATA_THRONE_DOOR), true); // if Magmus is dead open door to last boss
|
||||
break;
|
||||
case NPC_WEAPON_TECHNICIAN:
|
||||
case NPC_DOOMFORGE_ARCANASMITH:
|
||||
case NPC_RAGEREAVER_GOLEM:
|
||||
case NPC_WRATH_HAMMER_CONSTRUCT:
|
||||
if (creature->IsAlive() && creature->GetPositionZ() < -51.5f && creature->GetPositionZ() > -55.f)
|
||||
{
|
||||
ArgelmachAdds.push_back(creature->GetGUID());
|
||||
}
|
||||
break;
|
||||
case NPC_GOLEM_LORD_ARGELMACH:
|
||||
ArgelmachGUID = creature->GetGUID();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -232,6 +283,21 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void OnUnitDeath(Unit* unit) override
|
||||
{
|
||||
switch (unit->GetEntry())
|
||||
{
|
||||
case NPC_WEAPON_TECHNICIAN:
|
||||
case NPC_DOOMFORGE_ARCANASMITH:
|
||||
case NPC_RAGEREAVER_GOLEM:
|
||||
case NPC_WRATH_HAMMER_CONSTRUCT:
|
||||
ArgelmachAdds.remove(unit->GetGUID());
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void SetGuidData(uint32 type, ObjectGuid data) override
|
||||
{
|
||||
switch (type)
|
||||
@@ -285,6 +351,79 @@ public:
|
||||
summon->SetTempSummonType(TEMPSUMMON_MANUAL_DESPAWN);
|
||||
}
|
||||
break;
|
||||
case DATA_GOLEM_LORD_ARGELMACH_INIT:
|
||||
{
|
||||
if (Creature* argelmach = instance->GetCreature(ArgelmachGUID))
|
||||
{
|
||||
GuidList adds = ArgelmachAdds;
|
||||
for (GuidList::const_iterator itr = adds.begin(); itr != adds.end();)
|
||||
{
|
||||
if (Creature* argelmachAdd = instance->GetCreature(*itr))
|
||||
{
|
||||
if (argelmachAdd->GetEntry() == NPC_WRATH_HAMMER_CONSTRUCT)
|
||||
{
|
||||
argelmachAdd->RemoveAurasDueToSpell(SPELL_STONED);
|
||||
argelmachAdd->AI()->AttackStart(argelmach->GetVictim());
|
||||
itr = adds.erase(itr);
|
||||
}
|
||||
else if (argelmachAdd->GetEntry() == NPC_RAGEREAVER_GOLEM)
|
||||
{
|
||||
if (argelmachAdd->IsWithinDist2d(argelmach, 10.f))
|
||||
{
|
||||
argelmachAdd->RemoveAurasDueToSpell(SPELL_STONED);
|
||||
argelmachAdd->AI()->AttackStart(argelmach->GetVictim());
|
||||
itr = adds.erase(itr);
|
||||
}
|
||||
else
|
||||
++itr;
|
||||
}
|
||||
else
|
||||
{
|
||||
++itr;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
++itr;
|
||||
}
|
||||
}
|
||||
|
||||
if (!adds.empty())
|
||||
{
|
||||
argelmach->SetReactState(REACT_PASSIVE);
|
||||
argelmach->SetTarget();
|
||||
argelmach->AI()->SetData(DATA_GOLEM_LORD_ARGELMACH_INIT, IN_PROGRESS);
|
||||
}
|
||||
else
|
||||
{
|
||||
argelmach->AI()->SetData(DATA_GOLEM_LORD_ARGELMACH_INIT, DONE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DATA_GOLEM_LORD_ARGELMACH_ADDS:
|
||||
{
|
||||
if (Creature* argelmach = instance->GetCreature(ArgelmachGUID))
|
||||
{
|
||||
argelmach->HandleEmoteCommand(EMOTE_ONESHOT_SHOUT);
|
||||
argelmach->m_Events.AddEvent(new RestoreAttack(argelmach), argelmach->m_Events.CalculateTime(3000));
|
||||
|
||||
for (ObjectGuid const& argelmachAddGUID : ArgelmachAdds)
|
||||
{
|
||||
if (Creature* argelmachAdd = instance->GetCreature(argelmachAddGUID))
|
||||
{
|
||||
if (!argelmachAdd->IsInCombat())
|
||||
{
|
||||
argelmachAdd->RemoveAurasDueToSpell(SPELL_STONED);
|
||||
argelmachAdd->AI()->AttackStart(argelmach->GetVictim());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (data == DONE || GhostKillCount >= 7)
|
||||
|
||||
@@ -156,6 +156,11 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
enum UldamanStonedEnum
|
||||
{
|
||||
MAP_ULDAMAN = 70
|
||||
};
|
||||
|
||||
class spell_uldaman_stoned : public SpellScriptLoader
|
||||
{
|
||||
public:
|
||||
@@ -167,7 +172,7 @@ public:
|
||||
|
||||
bool Load() override
|
||||
{
|
||||
return GetUnitOwner()->GetTypeId() == TYPEID_UNIT;
|
||||
return GetUnitOwner()->GetTypeId() == TYPEID_UNIT && GetUnitOwner()->GetMapId() == MAP_ULDAMAN;
|
||||
}
|
||||
|
||||
void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
|
||||
|
||||
Reference in New Issue
Block a user