fix: send CMSG_SET_WATCHED_FACTION when tracking a reputation

setWatchedFactionId() previously only stored the faction locally.
Now it also sends CMSG_SET_WATCHED_FACTION with the correct repListId
to the server, so the tracked faction persists across sessions.
This commit is contained in:
Kelsi 2026-03-20 04:50:49 -07:00
parent ae56f2eb80
commit f4d705738b
2 changed files with 16 additions and 1 deletions

View file

@ -1800,7 +1800,7 @@ public:
const std::string& getFactionNamePublic(uint32_t factionId) const; const std::string& getFactionNamePublic(uint32_t factionId) const;
uint32_t getWatchedFactionId() const { return watchedFactionId_; } uint32_t getWatchedFactionId() const { return watchedFactionId_; }
void setWatchedFactionId(uint32_t id) { watchedFactionId_ = id; } void setWatchedFactionId(uint32_t factionId);
uint32_t getLastContactListMask() const { return lastContactListMask_; } uint32_t getLastContactListMask() const { return lastContactListMask_; }
uint32_t getLastContactListCount() const { return lastContactListCount_; } uint32_t getLastContactListCount() const { return lastContactListCount_; }
bool isServerMovementAllowed() const { return serverMovementAllowed_; } bool isServerMovementAllowed() const { return serverMovementAllowed_; }

View file

@ -25737,6 +25737,21 @@ uint32_t GameHandler::getRepListIdByFactionId(uint32_t factionId) const {
return (it != factionIdToRepList_.end()) ? it->second : 0xFFFFFFFFu; return (it != factionIdToRepList_.end()) ? it->second : 0xFFFFFFFFu;
} }
void GameHandler::setWatchedFactionId(uint32_t factionId) {
watchedFactionId_ = factionId;
if (state != WorldState::IN_WORLD || !socket) return;
// CMSG_SET_WATCHED_FACTION: int32 repListId (-1 = unwatch)
int32_t repListId = -1;
if (factionId != 0) {
uint32_t rl = getRepListIdByFactionId(factionId);
if (rl != 0xFFFFFFFFu) repListId = static_cast<int32_t>(rl);
}
network::Packet pkt(wireOpcode(Opcode::CMSG_SET_WATCHED_FACTION));
pkt.writeUInt32(static_cast<uint32_t>(repListId));
socket->send(pkt);
LOG_DEBUG("CMSG_SET_WATCHED_FACTION: repListId=", repListId, " (factionId=", factionId, ")");
}
std::string GameHandler::getFactionName(uint32_t factionId) const { std::string GameHandler::getFactionName(uint32_t factionId) const {
auto it = factionNameCache_.find(factionId); auto it = factionNameCache_.find(factionId);
if (it != factionNameCache_.end()) return it->second; if (it != factionNameCache_.end()) return it->second;