-
Notifications
You must be signed in to change notification settings - Fork 6.3k
Description
Description
Core TDB 335.24081
There are several issues with the Hodir encounter:
-
Hard Mode Chest Not Spawning: If the boss is killed faster than 3 minutes (Hard Mode condition), the additional treasure chests do not appear. This makes it impossible to obtain the "Hodir's Sigil" and complete the related progression.
-
Incorrect Flash Freeze Mechanics for Friendly NPCs: Before the fight, friendly NPCs are frozen in the hall using a different spell system (SPELL_SUMMON_FLASH_FREEZE_HELPER -> npc_ice_block -> SPELL_FLASH_FREEZE_HELPER). They can be freed by breaking the ice at the start of the encounter.
However, during the fight, when these same NPCs are hit by the "Flash Freeze" ability, a different, incorrect mechanic is applied (SPELL_SUMMON_BLOCK_OF_ICE -> npc_flash_freeze -> SPELL_BLOCK_OF_ICE). This ice block cannot be dispelled or broken by any means , leaving the NPCs permanently trapped until they die. This breaks several achievements that require keeping the NPCs alive. -
Achievements Not Awarded
Main Technical Difference:
Pre-combat freeze: Uses SPELL_SUMMON_FLASH_FREEZE_HELPER (61989) → npc_ice_block → SPELL_FLASH_FREEZE_HELPER (61990). This block is breakable.
In-combat freeze: Uses SPELL_SUMMON_BLOCK_OF_ICE (61970) → npc_flash_freeze → SPELL_BLOCK_OF_ICE (61969). This block is unbreakable and should not be used on friendly NPCs
Proposed Fixes (Potential Workarounds)
I have attempted to resolve the first two issues, but I'm unsure if my approach is correct:
- Fix for loot chests:
Added the missing chests to the database:
INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `StringId`, `VerifiedBuild`) VALUES
(34160, 194200, 603, 0, 0, 1, 1, 2037.94, -201.466, 432.687, 3.30534, -0, -0, -0.99665, 0.08178, -604800, 255, 1, '', NULL, 0);
-- Для героического режима (25-чел)
INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `StringId`, `VerifiedBuild`) VALUES
(34161, 194201, 603, 0, 0, 2, 1, 2037.94, -201.466, 432.687, 3.30534, -0, -0, -0.99665, 0.08178, -604800, 255, 1, '', NULL, 0);
Modified instance_ulduar.cpp to ensure the chest spawns when conditions are met:
case DATA_HODIR:
if (state == DONE)
{
if (GameObject* HodirRareCache = instance->GetGameObject(HodirRareCacheGUID)){
if (GetData(DATA_HODIR_RARE_CACHE)){
HodirRareCache->RemoveFlag(GO_FLAG_NOT_SELECTABLE);
/*** ДОБАВИЛ ЧТОБЫ СУНДУКИ ПОКАЗЫВАЛИСЬ ***/
HodirRareCache->SetRespawnTime(HodirRareCache->GetRespawnDelay());
/*** окончание добавленного кода ***/
}
}
if (GameObject* HodirChest = instance->GetGameObject(HodirChestGUID))
HodirChest->SetRespawnTime(HodirChest->GetRespawnDelay());
instance->SummonCreature(NPC_HODIR_OBSERVATION_RING, ObservationRingKeepersPos[1]);
}
...
- Fix for friendly NPC freeze mechanics:
Modified boss_hodir.cpp in the FlashFreeze() function to use the pre-combat freeze mechanic for friendly NPCs, while keeping the combat mechanic for players:
void FlashFreeze()
{
std::list<Unit*> TargetList;
Trinity::AnyUnfriendlyUnitInObjectRangeCheck checker(me, me, 100.0f);
Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck> searcher(me, TargetList, checker);
Cell::VisitAllObjects(me, searcher, 100.0f);
for (std::list<Unit*>::iterator itr = TargetList.begin(); itr != TargetList.end(); ++itr)
{
Unit* target = *itr;
if (!target || !target->IsAlive() || GetClosestCreatureWithEntry(target, NPC_SNOWPACKED_ICICLE, 5.0f))
continue;
if (target->HasAura(SPELL_FLASH_FREEZE_HELPER) || target->HasAura(SPELL_BLOCK_OF_ICE))
{
me->CastSpell(target, SPELL_FLASH_FREEZE_KILL, true);
continue;
}
target->CastSpell(target, SPELL_SUMMON_BLOCK_OF_ICE, true);
}
}***/
void FlashFreeze(){
std::list<Unit*> TargetList;
Trinity::AnyUnfriendlyUnitInObjectRangeCheck checker(me, me, 100.0f);
Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck> searcher(me, TargetList, checker);
Cell::VisitAllObjects(me, searcher, 100.0f);
for (std::list<Unit*>::iterator itr = TargetList.begin(); itr != TargetList.end(); ++itr){
Unit* target = *itr;
if (!target || !target->IsAlive() || GetClosestCreatureWithEntry(target, NPC_SNOWPACKED_ICICLE, 5.0f))
continue;
if (target->HasAura(SPELL_FLASH_FREEZE_HELPER) || target->HasAura(SPELL_BLOCK_OF_ICE)){
me->CastSpell(target, SPELL_FLASH_FREEZE_KILL, true);
continue;
}
// Определяем, является ли цель дружественным NPC
bool isFriendlyNPC = false;
if (target->GetTypeId() == TYPEID_UNIT){
uint32 entry = target->ToCreature()->GetEntry();
for (uint8 i = 0; i < 8; ++i){// Проверяем, является ли NPC одним из дружественных помощников
if (entry == Entry[i]){
isFriendlyNPC = true;
break;
}}}
if (isFriendlyNPC){// Используем механику перед боем для дружественных NPC
target->CastSpell(target, SPELL_SUMMON_FLASH_FREEZE_HELPER, true);
}else{// Используем стандартную механику для игроков
target->CastSpell(target, SPELL_SUMMON_BLOCK_OF_ICE, true);
}
}
}
Result:
The missing loot chests now appear correctly.
Friendly NPCs can be freed from freeze during combat
Outstanding issue:
Achievements
p.s. Sorry my English
Expected behaviour
Killing Hodir in under 3 minutes should spawn additional treasure chests containing Hodir's Sigil.
Friendly NPCs (e.g., npc=32938) frozen by "Flash Freeze" during the encounter should be trapped in a breakable ice block, similar to the pre-combat state, allowing players to save them.
Achievements related to saving NPCs and completing the hard mode should be awarded and oter
Steps to reproduce the problem
Steps to Reproduce:
Engage Hodir in Ulduar.
Break NPCs out of the initial freeze quickly.
Let Hodir cast "Flash Freeze" on a friendly NPC.
Observe that the NPC is now permanently frozen by an unbreakable block.
Defeat Hodir in less than 3 minutes.
Observe the lack of additional chests and missing achievements.
Branch
3.3.5
TC rev. hash/commit
None
Operating system
Ubuntu server
Custom changes
Transmogrification, Reforging, GOMove, Passive Anticheat