aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server/Packets
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-05-01 22:26:53 +0200
committerShauren <shauren.trinity@gmail.com>2024-05-01 22:26:53 +0200
commita39d0db9ec64f6bf38716abaade5b7835f2db338 (patch)
tree1e18f96b3600ab02d9cb8fc6288ac0cded23b6ce /src/server/game/Server/Packets
parentcdc6719b8368907292f090978f6bdd6b8c73834d (diff)
Core/Spells: Implemented evoker empower spell mechanic
Diffstat (limited to 'src/server/game/Server/Packets')
-rw-r--r--src/server/game/Server/Packets/SpellPackets.cpp70
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h76
2 files changed, 146 insertions, 0 deletions
diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp
index 83ff89ef569..8be021086f5 100644
--- a/src/server/game/Server/Packets/SpellPackets.cpp
+++ b/src/server/game/Server/Packets/SpellPackets.cpp
@@ -851,6 +851,76 @@ WorldPacket const* SpellChannelUpdate::Write()
return &_worldPacket;
}
+WorldPacket const* SpellEmpowerStart::Write()
+{
+ _worldPacket << CastID;
+ _worldPacket << CasterGUID;
+ _worldPacket << uint32(Targets.size());
+ _worldPacket << int32(SpellID);
+ _worldPacket << Visual;
+ _worldPacket << EmpowerDuration;
+ _worldPacket << MinHoldTime;
+ _worldPacket << HoldAtMaxTime;
+ _worldPacket << uint32(StageDurations.size());
+
+ for (ObjectGuid const& target : Targets)
+ _worldPacket << target;
+
+ for (Duration<Milliseconds, uint32> stageDuration : StageDurations)
+ _worldPacket << stageDuration;
+
+ _worldPacket.WriteBit(InterruptImmunities.has_value());
+ _worldPacket.WriteBit(HealPrediction.has_value());
+ _worldPacket.FlushBits();
+
+ if (InterruptImmunities)
+ _worldPacket << *InterruptImmunities;
+
+ if (HealPrediction)
+ _worldPacket << *HealPrediction;
+
+ return &_worldPacket;
+}
+
+WorldPacket const* SpellEmpowerUpdate::Write()
+{
+ _worldPacket << CastID;
+ _worldPacket << CasterGUID;
+ _worldPacket << TimeRemaining;
+ _worldPacket << uint32(StageDurations.size());
+ _worldPacket << uint8(Status);
+ _worldPacket.FlushBits();
+
+ for (Duration<Milliseconds, uint32> stageDuration : StageDurations)
+ _worldPacket << stageDuration;
+
+ return &_worldPacket;
+}
+
+void SetEmpowerMinHoldStagePercent::Read()
+{
+ _worldPacket >> MinHoldStagePercent;
+}
+
+void SpellEmpowerRelease::Read()
+{
+ _worldPacket >> SpellID;
+}
+
+void SpellEmpowerRestart::Read()
+{
+ _worldPacket >> SpellID;
+}
+
+WorldPacket const* SpellEmpowerSetStage::Write()
+{
+ _worldPacket << CastID;
+ _worldPacket << CasterGUID;
+ _worldPacket << int32(Stage);
+
+ return &_worldPacket;
+}
+
WorldPacket const* ResurrectRequest::Write()
{
_worldPacket << ResurrectOffererGUID;
diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h
index f344eb53899..42c58e35772 100644
--- a/src/server/game/Server/Packets/SpellPackets.h
+++ b/src/server/game/Server/Packets/SpellPackets.h
@@ -830,6 +830,82 @@ namespace WorldPackets
int32 TimeRemaining = 0;
};
+ class SpellEmpowerStart final : public ServerPacket
+ {
+ public:
+ SpellEmpowerStart() : ServerPacket(SMSG_SPELL_EMPOWER_START, 16 + 16 + 4 + 8 + 4 + 4 + 4 + 1) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid CastID;
+ ObjectGuid CasterGUID;
+ int32 SpellID = 0;
+ SpellCastVisual Visual;
+ Duration<Milliseconds, uint32> EmpowerDuration;
+ Duration<Milliseconds, uint32> MinHoldTime;
+ Duration<Milliseconds, uint32> HoldAtMaxTime;
+ std::vector<ObjectGuid> Targets;
+ std::vector<Duration<Milliseconds, uint32>> StageDurations;
+ Optional<SpellChannelStartInterruptImmunities> InterruptImmunities;
+ Optional<SpellTargetedHealPrediction> HealPrediction;
+ };
+
+ class SpellEmpowerUpdate final : public ServerPacket
+ {
+ public:
+ SpellEmpowerUpdate() : ServerPacket(SMSG_SPELL_EMPOWER_UPDATE, 16 + 16 + 4 + 4 + 1) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid CastID;
+ ObjectGuid CasterGUID;
+ Duration<Milliseconds, int32> TimeRemaining;
+ std::vector<Duration<Milliseconds, uint32>> StageDurations;
+ uint8 Status = 0;
+ };
+
+ class SetEmpowerMinHoldStagePercent final : public ClientPacket
+ {
+ public:
+ SetEmpowerMinHoldStagePercent(WorldPacket&& packet) : ClientPacket(CMSG_SET_EMPOWER_MIN_HOLD_STAGE_PERCENT, std::move(packet)) { }
+
+ void Read() override;
+
+ float MinHoldStagePercent = 1.0f;
+ };
+
+ class SpellEmpowerRelease final : public ClientPacket
+ {
+ public:
+ SpellEmpowerRelease(WorldPacket&& packet) : ClientPacket(CMSG_SPELL_EMPOWER_RELEASE, std::move(packet)) { }
+
+ void Read() override;
+
+ int32 SpellID = 0;
+ };
+
+ class SpellEmpowerRestart final : public ClientPacket
+ {
+ public:
+ SpellEmpowerRestart(WorldPacket&& packet) : ClientPacket(CMSG_SPELL_EMPOWER_RESTART, std::move(packet)) { }
+
+ void Read() override;
+
+ int32 SpellID = 0;
+ };
+
+ class SpellEmpowerSetStage final : public ServerPacket
+ {
+ public:
+ SpellEmpowerSetStage() : ServerPacket(SMSG_SPELL_EMPOWER_SET_STAGE, 16 + 16 + 4) { }
+
+ WorldPacket const* Write() override;
+
+ ObjectGuid CastID;
+ ObjectGuid CasterGUID;
+ int32 Stage = 0;
+ };
+
class ResurrectRequest final : public ServerPacket
{
public: