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);