diff options
| author | Shauren <shauren.trinity@gmail.com> | 2020-05-18 16:57:59 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2020-05-18 16:57:59 +0200 |
| commit | 3e833739071a689dc34e33f7a511d8cc50e00b94 (patch) | |
| tree | 987cebdbb80185ec8aae54147d1ccb22d4d19bc1 /src/server/game/Server | |
| parent | 4055434ba6260e528c877023faebf87ba2c81a42 (diff) | |
Core/Achievements: Minor fixes
* Corrected criteria and modifier tree logic after implementing their operators
* Account wide achievements will now show progress ingame (even if we still treat them as per-character)
* Fixed more cases of achievements being granted automatically without satisfying modifier trees
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/AchievementPackets.cpp | 21 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/AchievementPackets.h | 21 | ||||
| -rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 4 |
3 files changed, 44 insertions, 2 deletions
diff --git a/src/server/game/Server/Packets/AchievementPackets.cpp b/src/server/game/Server/Packets/AchievementPackets.cpp index 058e6d34524..033f4b9ccf6 100644 --- a/src/server/game/Server/Packets/AchievementPackets.cpp +++ b/src/server/game/Server/Packets/AchievementPackets.cpp @@ -66,6 +66,15 @@ WorldPacket const* WorldPackets::Achievement::AllAchievementData::Write() return &_worldPacket; } +WorldPacket const* WorldPackets::Achievement::AllAccountCriteria::Write() +{ + _worldPacket << uint32(Progress.size()); + for (WorldPackets::Achievement::CriteriaProgress const& progress : Progress) + _worldPacket << progress; + + return &_worldPacket; +} + WorldPacket const* WorldPackets::Achievement::RespondInspectAchievements::Write() { _worldPacket << Player; @@ -83,6 +92,18 @@ WorldPacket const* WorldPackets::Achievement::CriteriaUpdate::Write() _worldPacket.AppendPackedTime(CurrentTime); _worldPacket << uint32(ElapsedTime); _worldPacket << uint32(CreationTime); + _worldPacket.WriteBit(RafAcceptanceID.is_initialized()); + _worldPacket.FlushBits(); + + if (RafAcceptanceID) + _worldPacket << uint64(*RafAcceptanceID); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Achievement::AccountCriteriaUpdate::Write() +{ + _worldPacket << Progress; return &_worldPacket; } diff --git a/src/server/game/Server/Packets/AchievementPackets.h b/src/server/game/Server/Packets/AchievementPackets.h index 7b3d3d927ac..e2c6f85dbc0 100644 --- a/src/server/game/Server/Packets/AchievementPackets.h +++ b/src/server/game/Server/Packets/AchievementPackets.h @@ -63,6 +63,16 @@ namespace WorldPackets AllAchievements Data; }; + class AllAccountCriteria final : public ServerPacket + { + public: + AllAccountCriteria() : ServerPacket(SMSG_ALL_ACCOUNT_CRITERIA) { } + + WorldPacket const* Write() override; + + std::vector<CriteriaProgress> Progress; + }; + class RespondInspectAchievements final : public ServerPacket { public: @@ -88,6 +98,17 @@ namespace WorldPackets time_t CurrentTime = time_t(0); uint32 ElapsedTime = 0; uint32 CreationTime = 0; + Optional<uint64> RafAcceptanceID; + }; + + class AccountCriteriaUpdate final : public ServerPacket + { + public: + AccountCriteriaUpdate() : ServerPacket(SMSG_ACCOUNT_CRITERIA_UPDATE) { } + + WorldPacket const* Write() override; + + CriteriaProgress Progress; }; class CriteriaDeleted final : public ServerPacket diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 076e0c55d08..a8f0be7874e 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -895,7 +895,7 @@ void OpcodeTable::Initialize() ValidateAndSetServerOpcode(opcode, #opcode, status, con) DEFINE_SERVER_OPCODE_HANDLER(SMSG_ABORT_NEW_WORLD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_CRITERIA_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_CRITERIA_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_DATA_TIMES, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_HEIRLOOM_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ACCOUNT_MOUNT_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -913,7 +913,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_AE_LOOT_TARGETS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AE_LOOT_TARGET_ACK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AI_REACTION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ALL_ACCOUNT_CRITERIA, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ALL_ACCOUNT_CRITERIA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ALL_ACHIEVEMENT_DATA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ALL_GUILD_ACHIEVEMENTS, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARCHAEOLOGY_SURVERY_CAST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); |
