From e0e0ba12507446a4038c35735b26b0f8be7d025d Mon Sep 17 00:00:00 2001 From: BlaMacfly <165155133+BlaMacfly@users.noreply.github.com> Date: Sat, 12 Sep 2026 10:17:32 +0200 Subject: [PATCH] Raids : coffre de butin detruit avec le boss, Alysrazor dans la lave, Oondasta intouchable Trois signalements Discord du meme joueur. Coffres : WorldObject::SummonGameObject rattachait TOUT objet invoque a son invocateur. Les objets rattaches sont detruits avec lui (RemoveAllGameObjects au retrait du monde), donc le coffre d un boss disparaissait cote serveur des que le cadavre s effacait : le raid voyait encore le coffre mais ne pouvait plus l ouvrir. Cas signale : le Coffre du seigneur du feu de Ragnaros, mais tous les boss qui invoquent leur coffre etaient concernes. Les coffres ne sont plus rattaches. Alysrazor : elle meurt en vol et JustDied enchainait directement sur MoveFall. Au-dessus du vide entre les plateformes, la depouille finissait dans la lave, butin compris. Elle est ramenee au centre de l arene avant la chute. Oondasta : l intro pose UNIT_FLAG_IMMUNE_TO_PC et seul l evenement de fin la retire. Reset() reposait ce drapeau et effacait les evenements d intro a chaque evade, sans garantie de rejouer l intro : le boss frappait les joueurs sans qu ils puissent riposter. Le drapeau n est plus repose apres coup, il est leve des l entree en combat, et _introEnd est enfin initialise (il ne l etait pas). --- src/server/game/Entities/Object/Object.cpp | 6 +++++- .../scripts/Kalimdor/Firelands/boss_alysrazor.cpp | 4 ++++ .../Pandaria/Zones/WorldBosses/boss_oondasta.cpp | 15 ++++++++++++--- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 72ed1cf..4818327 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2777,7 +2777,11 @@ GameObject* WorldObject::SummonGameObject(uint32 entry, Position const& pos, Qua go->SetVisibleBySummonerOnly(visibleBySummonerOnly); go->SetRespawnTime(respawnTime); - if (GetTypeId() == TYPEID_PLAYER || GetTypeId() == TYPEID_UNIT) //not sure how to handle this + // Un coffre de butin ne doit pas etre rattache a son invocateur : les objets + // rattaches sont detruits avec lui (RemoveAllGameObjects), donc le coffre d'un + // boss disparaissait cote serveur des que son cadavre s'effacait -- le raid + // voyait encore le coffre mais ne pouvait plus l'ouvrir (Ragnaros, entre autres). + if ((GetTypeId() == TYPEID_PLAYER || GetTypeId() == TYPEID_UNIT) && goinfo->type != GAMEOBJECT_TYPE_CHEST) ToUnit()->AddGameObject(go); else go->SetSpawnedByDefault(false); diff --git a/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp b/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp index cd237a9..a590ff1 100644 --- a/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp +++ b/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp @@ -539,6 +539,10 @@ class boss_alysrazor : public CreatureScript RemoveEncounterAuras(); me->SetCanFly(false); me->SetDisableGravity(false); + // Elle meurt en vol : laissee a elle-meme, la depouille traverse le vide + // entre les plateformes et finit dans la lave, butin compris. On la ramene + // au centre de l'arene avant la chute, comme en jeu officiel. + me->NearTeleportTo(centerPos.GetPositionX(), centerPos.GetPositionY(), centerPos.GetPositionZ(), centerPos.GetOrientation()); me->GetMotionMaster()->MoveFall(); } diff --git a/src/server/scripts/Pandaria/Zones/WorldBosses/boss_oondasta.cpp b/src/server/scripts/Pandaria/Zones/WorldBosses/boss_oondasta.cpp index bfead37..41aa1e6 100644 --- a/src/server/scripts/Pandaria/Zones/WorldBosses/boss_oondasta.cpp +++ b/src/server/scripts/Pandaria/Zones/WorldBosses/boss_oondasta.cpp @@ -70,7 +70,7 @@ class boss_oondasta : public CreatureScript struct boss_oondastaAI : public ScriptedAI { - boss_oondastaAI(Creature* creature) : ScriptedAI(creature), summons(me) { } + boss_oondastaAI(Creature* creature) : ScriptedAI(creature), summons(me), _introEnd(false) { } EventMap _events; EventMap _introEvents; @@ -85,8 +85,10 @@ class boss_oondasta : public CreatureScript void Reset() override { - _introEnd = false; - + // _introEnd n'est volontairement plus remis a false ici : chaque evade + // reposait UNIT_FLAG_IMMUNE_TO_PC et effacait les evenements d'intro, si + // bien que le boss redevenait intouchable pour de bon -- il frappait les + // joueurs sans qu'ils puissent riposter. me->RemoveAurasDueToSpell(SPELL_CRUSH); me->RemoveAura(SPELL_GROWING_FURY); @@ -119,6 +121,13 @@ class boss_oondasta : public CreatureScript void EnterCombat(Unit* /*who*/) override { + // Filet de securite : un boss qui frappe doit pouvoir etre frappe. + if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC)) + { + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + _introEnd = true; + } + _events.ScheduleEvent(EVENT_SPIRITFIRE_BEAM, 15s); _events.ScheduleEvent(EVENT_PIERCING_ROAR, 20s); _events.ScheduleEvent(EVENT_FRILL_BLAST, 40s);