diff options
5 files changed, 62 insertions, 22 deletions
diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index b4e43429384..40c08e742f7 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -800,7 +800,7 @@ void InstanceScript::SetEntranceLocation(uint32 worldSafeLocationId) _temporaryEntranceId = 0; } -void InstanceScript::SendEncounterUnit(uint32 type, Unit* unit /*= nullptr*/, uint8 priority) +void InstanceScript::SendEncounterUnit(EncounterFrameType type, Unit const* unit, Optional<int32> param1 /*= {}*/, Optional<int32> param2 /*= {}*/) { switch (type) { @@ -811,7 +811,7 @@ void InstanceScript::SendEncounterUnit(uint32 type, Unit* unit /*= nullptr*/, ui WorldPackets::Instance::InstanceEncounterEngageUnit encounterEngageMessage; encounterEngageMessage.Unit = unit->GetGUID(); - encounterEngageMessage.TargetFramePriority = priority; + encounterEngageMessage.TargetFramePriority = param1.value_or(0); instance->SendToPlayers(encounterEngageMessage.Write()); break; } @@ -832,10 +832,45 @@ void InstanceScript::SendEncounterUnit(uint32 type, Unit* unit /*= nullptr*/, ui WorldPackets::Instance::InstanceEncounterChangePriority encounterChangePriorityMessage; encounterChangePriorityMessage.Unit = unit->GetGUID(); - encounterChangePriorityMessage.TargetFramePriority = priority; + encounterChangePriorityMessage.TargetFramePriority = param1.value_or(0); instance->SendToPlayers(encounterChangePriorityMessage.Write()); break; } + case ENCOUNTER_FRAME_ADD_TIMER: + { + WorldPackets::Instance::InstanceEncounterTimerStart instanceEncounterTimerStart; + instanceEncounterTimerStart.TimeRemaining = param1.value_or(0); + instance->SendToPlayers(instanceEncounterTimerStart.Write()); + break; + } + case ENCOUNTER_FRAME_ENABLE_OBJECTIVE: + { + WorldPackets::Instance::InstanceEncounterObjectiveStart instanceEncounterObjectiveStart; + instanceEncounterObjectiveStart.ObjectiveID = param1.value_or(0); + instance->SendToPlayers(instanceEncounterObjectiveStart.Write()); + break; + } + case ENCOUNTER_FRAME_UPDATE_OBJECTIVE: + { + WorldPackets::Instance::InstanceEncounterObjectiveUpdate instanceEncounterObjectiveUpdate; + instanceEncounterObjectiveUpdate.ObjectiveID = param1.value_or(0); + instanceEncounterObjectiveUpdate.ProgressAmount = param2.value_or(0); + instance->SendToPlayers(instanceEncounterObjectiveUpdate.Write()); + break; + } + case ENCOUNTER_FRAME_DISABLE_OBJECTIVE: + { + WorldPackets::Instance::InstanceEncounterObjectiveComplete instanceEncounterObjectiveComplete; + instanceEncounterObjectiveComplete.ObjectiveID = param1.value_or(0); + instance->SendToPlayers(instanceEncounterObjectiveComplete.Write()); + break; + } + case ENCOUNTER_FRAME_PHASE_SHIFT_CHANGED: + { + WorldPackets::Instance::InstanceEncounterPhaseShiftChanged instanceEncounterPhaseShiftChanged; + instance->SendToPlayers(instanceEncounterPhaseShiftChanged.Write()); + break; + } default: break; } diff --git a/src/server/game/Instances/InstanceScript.h b/src/server/game/Instances/InstanceScript.h index 3239de145ec..618600815ae 100644 --- a/src/server/game/Instances/InstanceScript.h +++ b/src/server/game/Instances/InstanceScript.h @@ -53,17 +53,14 @@ enum Difficulty : uint8; enum EncounterFrameType { - ENCOUNTER_FRAME_SET_COMBAT_RES_LIMIT = 0, - ENCOUNTER_FRAME_RESET_COMBAT_RES_LIMIT = 1, - ENCOUNTER_FRAME_ENGAGE = 2, - ENCOUNTER_FRAME_DISENGAGE = 3, - ENCOUNTER_FRAME_UPDATE_PRIORITY = 4, - ENCOUNTER_FRAME_ADD_TIMER = 5, - ENCOUNTER_FRAME_ENABLE_OBJECTIVE = 6, - ENCOUNTER_FRAME_UPDATE_OBJECTIVE = 7, - ENCOUNTER_FRAME_DISABLE_OBJECTIVE = 8, - ENCOUNTER_FRAME_UNK7 = 9, // Seems to have something to do with sorting the encounter units - ENCOUNTER_FRAME_ADD_COMBAT_RES_LIMIT = 10 + ENCOUNTER_FRAME_ENGAGE = 0, + ENCOUNTER_FRAME_DISENGAGE = 1, + ENCOUNTER_FRAME_UPDATE_PRIORITY = 2, + ENCOUNTER_FRAME_ADD_TIMER = 3, + ENCOUNTER_FRAME_ENABLE_OBJECTIVE = 4, + ENCOUNTER_FRAME_UPDATE_OBJECTIVE = 5, + ENCOUNTER_FRAME_DISABLE_OBJECTIVE = 6, + ENCOUNTER_FRAME_PHASE_SHIFT_CHANGED = 7 }; // EnumUtils: DESCRIBE THIS @@ -303,7 +300,7 @@ class TC_GAME_API InstanceScript : public ZoneScript void ResetAreaTriggerDone(uint32 id) { _activatedAreaTriggers.erase(id); } bool IsAreaTriggerDone(uint32 id) const { return _activatedAreaTriggers.find(id) != _activatedAreaTriggers.end(); } - void SendEncounterUnit(uint32 type, Unit* unit = nullptr, uint8 priority = 0); + void SendEncounterUnit(EncounterFrameType type, Unit const* unit, Optional<int32> param1 = {}, Optional<int32> param2 = {}); void SendEncounterStart(uint32 inCombatResCount = 0, uint32 maxInCombatResCount = 0, uint32 inCombatResChargeRecovery = 0, uint32 nextCombatResChargeTime = 0); void SendEncounterEnd(); diff --git a/src/server/game/Server/Packets/InstancePackets.h b/src/server/game/Server/Packets/InstancePackets.h index 96f4780950a..32b1d1d9d59 100644 --- a/src/server/game/Server/Packets/InstancePackets.h +++ b/src/server/game/Server/Packets/InstancePackets.h @@ -218,6 +218,14 @@ namespace WorldPackets WorldPacket const* Write() override { return &_worldPacket; } }; + class InstanceEncounterPhaseShiftChanged final : public ServerPacket + { + public: + InstanceEncounterPhaseShiftChanged() : ServerPacket(SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED, 0) { } + + WorldPacket const* Write() override { return &_worldPacket; } + }; + class InstanceEncounterInCombatResurrection final : public ServerPacket { public: diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index bba1839d92b..4cedaa7aaab 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1529,12 +1529,12 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_START, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_TIMER_START, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_TIMER_START, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_UPDATE_ALLOW_RELEASE_IN_PROGRESS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_ENCOUNTER_UPDATE_SUPPRESS_RELEASE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INSTANCE_GROUP_SIZE_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 7cbace920a0..1ce245d07f6 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -1646,7 +1646,7 @@ class spell_halion_twilight_realm_handlers : public SpellScriptLoader { GetTarget()->RemoveAurasDueToSpell(SPELL_TWILIGHT_REALM); if (InstanceScript* instance = GetTarget()->GetInstanceScript()) - instance->SendEncounterUnit(ENCOUNTER_FRAME_UNK7); + instance->SendEncounterUnit(ENCOUNTER_FRAME_PHASE_SHIFT_CHANGED, nullptr); } void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*handle*/) @@ -1657,7 +1657,7 @@ class spell_halion_twilight_realm_handlers : public SpellScriptLoader target->RemoveAurasDueToSpell(_beforeHitSpellId, ObjectGuid::Empty, 0, AURA_REMOVE_BY_ENEMY_SPELL); if (InstanceScript* instance = target->GetInstanceScript()) - instance->SendEncounterUnit(ENCOUNTER_FRAME_UNK7); + instance->SendEncounterUnit(ENCOUNTER_FRAME_PHASE_SHIFT_CHANGED, nullptr); } void Register() override |