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).
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user