aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Instances/InstanceScript.cpp41
-rw-r--r--src/server/game/Instances/InstanceScript.h21
-rw-r--r--src/server/game/Server/Packets/InstancePackets.h8
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp10
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp4
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