mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-13 09:17:18 +00:00
fix(Scripts/Ulduar): Fixed spawning Hodir chests. (#10844)
This commit is contained in:
@@ -257,11 +257,6 @@ public:
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
}
|
||||
|
||||
if (pInstance && pInstance->GetData(TYPE_HODIR) != DONE)
|
||||
{
|
||||
pInstance->SetData(TYPE_SPAWN_HODIR_CACHE, 0);
|
||||
}
|
||||
|
||||
// Reset helpers
|
||||
if (!summons.size())
|
||||
SpawnHelpers();
|
||||
@@ -296,10 +291,13 @@ public:
|
||||
switch (action)
|
||||
{
|
||||
case EVENT_FAIL_HM:
|
||||
if (GameObject* go = me->FindNearestGameObject(GO_HODIR_CHEST_HARD, 500.0f))
|
||||
if (pInstance)
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
events.ScheduleEvent(EVENT_DESPAWN_CHEST, 3000);
|
||||
if (GameObject* go = pInstance->instance->GetGameObject(pInstance->GetGuidData(GO_HODIR_CHEST_HARD)))
|
||||
{
|
||||
go->SetGoState(GO_STATE_ACTIVE);
|
||||
events.ScheduleEvent(EVENT_DESPAWN_CHEST, 3000);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -425,7 +423,13 @@ public:
|
||||
case EVENT_HARD_MODE_MISSED:
|
||||
{
|
||||
Talk(TEXT_HM_MISS);
|
||||
me->CastSpell(me->FindNearestGameObject(GO_HODIR_CHEST_HARD, 400.0f), SPELL_SHATTER_CHEST, false);
|
||||
if (pInstance)
|
||||
{
|
||||
if (GameObject* go = pInstance->instance->GetGameObject(pInstance->GetGuidData(GO_HODIR_CHEST_HARD)))
|
||||
{
|
||||
me->CastSpell(go, SPELL_SHATTER_CHEST, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case EVENT_DESPAWN_CHEST:
|
||||
@@ -1161,15 +1165,17 @@ public:
|
||||
{
|
||||
PrepareSpellScript(spell_hodir_shatter_chestSpellScript)
|
||||
|
||||
void destroyWinterCache()
|
||||
void destroyWinterCache(SpellEffIndex effIndex)
|
||||
{
|
||||
PreventHitDefaultEffect(effIndex);
|
||||
|
||||
if (Unit* hodir = GetCaster())
|
||||
hodir->GetAI()->DoAction(EVENT_FAIL_HM);
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterHit += SpellHitFn(spell_hodir_shatter_chestSpellScript::destroyWinterCache);
|
||||
OnEffectHit += SpellEffectFn(spell_hodir_shatter_chestSpellScript::destroyWinterCache, EFFECT_0, SPELL_EFFECT_TRIGGER_MISSILE);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -214,75 +214,74 @@ public:
|
||||
SetData(eventId, 0);
|
||||
}
|
||||
|
||||
void SpawnHodirChests(int rd)
|
||||
void SpawnHodirChests(Difficulty diff, Creature* hodir)
|
||||
{
|
||||
if (Creature* cr = instance->GetCreature(m_uiHodirGUID))
|
||||
switch (diff)
|
||||
{
|
||||
switch (rd)
|
||||
case RAID_DIFFICULTY_10MAN_NORMAL: // 10 man chest
|
||||
{
|
||||
case 0: // 10 man chest
|
||||
if (!m_hodirNormalChest)
|
||||
{
|
||||
if (!m_hodirNormalChest)
|
||||
if (GameObject* go = hodir->SummonGameObject(
|
||||
GO_HODIR_CHEST_NORMAL,
|
||||
normalChestPosition.GetPositionX(),
|
||||
normalChestPosition.GetPositionY(),
|
||||
normalChestPosition.GetPositionZ(),
|
||||
normalChestPosition.GetOrientation(), 0, 0, 0, 0, 0))
|
||||
{
|
||||
if (GameObject* go = cr->SummonGameObject(
|
||||
GO_HODIR_CHEST_NORMAL,
|
||||
normalChestPosition.GetPositionX(),
|
||||
normalChestPosition.GetPositionY(),
|
||||
normalChestPosition.GetPositionZ(),
|
||||
normalChestPosition.GetOrientation(), 0, 0, 0, 0, 0))
|
||||
{
|
||||
m_hodirNormalChest = go->GetGUID();
|
||||
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
}
|
||||
m_hodirNormalChest = go->GetGUID();
|
||||
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
}
|
||||
if (!m_hodirHardmodeChest)
|
||||
{
|
||||
if (GameObject* go = cr->SummonGameObject(
|
||||
GO_HODIR_CHEST_HARD,
|
||||
hardChestPosition.GetPositionX(),
|
||||
hardChestPosition.GetPositionY(),
|
||||
hardChestPosition.GetPositionZ(),
|
||||
hardChestPosition.GetOrientation(), 0, 0, 0, 0, 0))
|
||||
{
|
||||
m_hodirHardmodeChest = go->GetGUID();
|
||||
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
hmHodir = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1: // 25 man chest
|
||||
if (!m_hodirHardmodeChest)
|
||||
{
|
||||
if (!m_hodirNormalChest)
|
||||
if (GameObject* go = hodir->SummonGameObject(
|
||||
GO_HODIR_CHEST_HARD,
|
||||
hardChestPosition.GetPositionX(),
|
||||
hardChestPosition.GetPositionY(),
|
||||
hardChestPosition.GetPositionZ(),
|
||||
hardChestPosition.GetOrientation(), 0, 0, 0, 0, 0))
|
||||
{
|
||||
if (GameObject* go = cr->SummonGameObject(
|
||||
GO_HODIR_CHEST_NORMAL_HERO,
|
||||
normalChestPosition.GetPositionX(),
|
||||
normalChestPosition.GetPositionY(),
|
||||
normalChestPosition.GetPositionZ(),
|
||||
normalChestPosition.GetOrientation(), 0, 0, 0, 0, 0))
|
||||
{
|
||||
m_hodirNormalChest = go->GetGUID();
|
||||
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
}
|
||||
m_hodirHardmodeChest = go->GetGUID();
|
||||
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
hmHodir = true;
|
||||
}
|
||||
if (!m_hodirHardmodeChest)
|
||||
{
|
||||
if (GameObject* go = cr->SummonGameObject(
|
||||
GO_HODIR_CHEST_HARD_HERO,
|
||||
hardChestPosition.GetPositionX(),
|
||||
hardChestPosition.GetPositionY(),
|
||||
hardChestPosition.GetPositionZ(),
|
||||
hardChestPosition.GetOrientation(), 0, 0, 0, 0, 0))
|
||||
{
|
||||
m_hodirHardmodeChest = go->GetGUID();
|
||||
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
hmHodir = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAID_DIFFICULTY_25MAN_NORMAL: // 25 man chest
|
||||
{
|
||||
if (!m_hodirNormalChest)
|
||||
{
|
||||
if (GameObject* go = hodir->SummonGameObject(
|
||||
GO_HODIR_CHEST_NORMAL_HERO,
|
||||
normalChestPosition.GetPositionX(),
|
||||
normalChestPosition.GetPositionY(),
|
||||
normalChestPosition.GetPositionZ(),
|
||||
normalChestPosition.GetOrientation(), 0, 0, 0, 0, 0))
|
||||
{
|
||||
m_hodirNormalChest = go->GetGUID();
|
||||
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
}
|
||||
}
|
||||
if (!m_hodirHardmodeChest)
|
||||
{
|
||||
if (GameObject* go = hodir->SummonGameObject(
|
||||
GO_HODIR_CHEST_HARD_HERO,
|
||||
hardChestPosition.GetPositionX(),
|
||||
hardChestPosition.GetPositionY(),
|
||||
hardChestPosition.GetPositionZ(),
|
||||
hardChestPosition.GetOrientation(), 0, 0, 0, 0, 0))
|
||||
{
|
||||
m_hodirHardmodeChest = go->GetGUID();
|
||||
go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
|
||||
hmHodir = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -329,6 +328,7 @@ public:
|
||||
break;
|
||||
case NPC_HODIR:
|
||||
m_uiHodirGUID = creature->GetGUID();
|
||||
SpawnHodirChests(instance->GetDifficulty(), creature);
|
||||
break;
|
||||
case NPC_THORIM:
|
||||
m_uiThorimGUID = creature->GetGUID();
|
||||
@@ -690,11 +690,6 @@ public:
|
||||
if (GetData(TYPE_HODIR) == DONE)
|
||||
setChestsLootable(TYPE_HODIR);
|
||||
break;
|
||||
|
||||
case TYPE_SPAWN_HODIR_CACHE:
|
||||
// Is the difficulty 10 man(0) ? return 10 man : return 25 man;
|
||||
SpawnHodirChests(m_difficulty == 0 ? 0 : 1);
|
||||
break;
|
||||
case TYPE_HODIR_HM_FAIL:
|
||||
if (GameObject* go = instance->GetGameObject(m_hodirHardmodeChest))
|
||||
{
|
||||
@@ -909,10 +904,8 @@ public:
|
||||
|
||||
// Hodir chests
|
||||
case GO_HODIR_CHEST_HARD:
|
||||
case GO_HODIR_CHEST_HARD_HERO:
|
||||
return m_hodirHardmodeChest;
|
||||
case GO_HODIR_CHEST_NORMAL:
|
||||
case GO_HODIR_CHEST_NORMAL_HERO:
|
||||
return m_hodirNormalChest;
|
||||
|
||||
// Freya Elders
|
||||
|
||||
@@ -45,9 +45,8 @@ enum UlduarEncounters
|
||||
TYPE_YOGGSARON = 12,
|
||||
TYPE_ALGALON = 13,
|
||||
TYPE_WATCHERS = 14,
|
||||
TYPE_SPAWN_HODIR_CACHE = 15,
|
||||
TYPE_HODIR_HM_FAIL = 16,
|
||||
TYPE_WINTER_CACHE = 17,
|
||||
TYPE_HODIR_HM_FAIL = 15,
|
||||
TYPE_WINTER_CACHE = 16
|
||||
};
|
||||
|
||||
enum UlduarData
|
||||
|
||||
Reference in New Issue
Block a user