получение instance id для encounter journal

This commit is contained in:
2026-06-13 15:09:04 +04:00
parent 60bf86a9f7
commit ddee7e14ac
4 changed files with 151 additions and 51 deletions
@@ -11,6 +11,7 @@
#include <cstdint>
#include <string>
#include <unordered_map>
#include <vector>
class Player;
@@ -36,28 +37,34 @@ namespace MoonWell::PlayerGuide
// Optional type-specific helpers. Zero means "not set" and
// serialiser omits it.
uint32 questId = 0;
uint32 questChainId = 0;
uint32 instanceId = 0;
uint32 encounterId = 0;
uint32 achievementId = 0;
uint32 factionId = 0;
uint32 professionId = 0;
uint32 itemId = 0;
uint32 currencyId = 0;
uint32 questId = 0;
uint32 questChainId = 0;
// ej_instanceID: key into client's JOURNALINSTANCE table.
// Consumed by EncounterJournal_DisplayInstance / EJ_SelectInstance.
uint32 ejInstanceId = 0;
// WoW map id (for telemetry / teleport / fallback). NOT used by
// the client to open EJ.
uint32 mapId = 0;
uint32 encounterId = 0;
uint32 achievementId = 0;
uint32 factionId = 0;
uint32 professionId = 0;
uint32 itemId = 0;
uint32 currencyId = 0;
};
struct Recommendation
{
uint32 id = 0;
uint32 id = 0;
std::string type;
std::string title;
std::string description;
uint32 instanceId = 0;
uint32 encounterId = 0;
uint32 questId = 0;
uint32 itemId = 0;
uint32 priority = 0;
uint32 ejInstanceId = 0; // JOURNALINSTANCE key
uint32 mapId = 0; // WoW map id (auxiliary)
uint32 encounterId = 0;
uint32 questId = 0;
uint32 itemId = 0;
uint32 priority = 0;
};
struct Reward
@@ -105,6 +112,11 @@ namespace MoonWell::PlayerGuide
bool LogPayloads() const { return _logPayloads; }
uint32 ChunkSize() const { return _chunkSize; }
// Reloads (map_id -> ej_instance.id/name) cache from
// custom_ej_instance. Called from LoadConfig() and from the
// OnLoadCustomDatabaseTable world hook.
void ReloadEncounterJournalCache();
private:
Mgr() = default;
@@ -127,6 +139,15 @@ namespace MoonWell::PlayerGuide
void AppendRecommendations(Payload& out, Player* player) const;
struct EjInstanceRef
{
uint32 ejId = 0; // custom_ej_instance.id
std::string name; // custom_ej_instance.name
};
// mapId -> EJ instance ref. Filled at config load.
std::unordered_map<uint32, EjInstanceRef> _ejByMapId;
bool _enabled = true;
bool _logPayloads = false;
uint32 _chunkSize = 230; // per-frame body capacity (addon channel)