diff options
| author | Shauren <shauren.trinity@gmail.com> | 2024-05-01 22:26:53 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2024-05-01 22:26:53 +0200 |
| commit | a39d0db9ec64f6bf38716abaade5b7835f2db338 (patch) | |
| tree | 1e18f96b3600ab02d9cb8fc6288ac0cded23b6ce /src/server/game/Server/Packets | |
| parent | cdc6719b8368907292f090978f6bdd6b8c73834d (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.cpp | 70 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/SpellPackets.h | 76 |
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: |
