From 331c70e695c6eef085be03a4f149158b68470035 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 12 Nov 2017 02:42:06 +0100 Subject: Core/Players: Fixed DK runes and runic power Closes #19595 --- src/server/game/Entities/Object/Object.cpp | 51 +++++++++++++++++------------- 1 file changed, 29 insertions(+), 22 deletions(-) (limited to 'src/server/game/Entities/Object') diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 7c8e163d170..9079a426f4f 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -350,11 +350,11 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const bool AnimKitCreate = (flags & UPDATEFLAG_ANIMKITS) != 0; bool Rotation = (flags & UPDATEFLAG_ROTATION) != 0; bool HasAreaTrigger = (flags & UPDATEFLAG_AREATRIGGER) != 0; - bool HasGameObject = (flags & UPDATEFLAG_GAMEOBJECT) != 0;; + bool HasGameObject = (flags & UPDATEFLAG_GAMEOBJECT) != 0; bool ThisIsYou = (flags & UPDATEFLAG_SELF) != 0; bool SmoothPhasing = false; bool SceneObjCreate = false; - bool PlayerCreateData = false; + bool PlayerCreateData = GetTypeId() == TYPEID_PLAYER && ToUnit()->GetPowerIndex(POWER_RUNES) != MAX_POWERS; std::vector const* PauseTimes = nullptr; uint32 PauseTimesCount = 0; if (GameObject const* go = ToGameObject()) @@ -801,26 +801,33 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const // } //} - //if (PlayerCreateData) - //{ - // data->WriteBit(HasSceneInstanceIDs); - // data->WriteBit(HasRuneState); - // data->FlushBits(); - // if (HasSceneInstanceIDs) - // { - // *data << uint32(SceneInstanceIDs.size()); - // for (std::size_t i = 0; i < SceneInstanceIDs.size(); ++i) - // *data << uint32(SceneInstanceIDs[i]); - // } - // if (HasRuneState) - // { - // *data << uint8(RechargingRuneMask); - // *data << uint8(UsableRuneMask); - // *data << uint32(ToUnit()->GetMaxPower(POWER_RUNES)); - // for (uint32 i = 0; i < ToUnit()->GetMaxPower(POWER_RUNES); ++i) - // *data << uint8(255 - (ToUnit()->ToPlayer()->GetRuneCooldown(i) * 51)); - // } - //} + if (PlayerCreateData) + { + bool HasSceneInstanceIDs = false; + bool HasRuneState = ToUnit()->GetPowerIndex(POWER_RUNES) != MAX_POWERS; + + data->WriteBit(HasSceneInstanceIDs); + data->WriteBit(HasRuneState); + data->FlushBits(); + //if (HasSceneInstanceIDs) + //{ + // *data << uint32(SceneInstanceIDs.size()); + // for (std::size_t i = 0; i < SceneInstanceIDs.size(); ++i) + // *data << uint32(SceneInstanceIDs[i]); + //} + if (HasRuneState) + { + Player const* player = ToPlayer(); + float baseCd = float(player->GetRuneBaseCooldown()); + uint32 maxRunes = uint32(player->GetMaxPower(POWER_RUNES)); + + *data << uint8((1 << maxRunes) - 1); + *data << uint8(player->GetRunesState()); + *data << uint32(maxRunes); + for (uint32 i = 0; i < maxRunes; ++i) + *data << uint8((baseCd - float(player->GetRuneCooldown(i))) / baseCd * 255); + } + } } void Object::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) const -- cgit v1.2.3