rodecomp/Source/Contents/Repute/ReputeMgr.h
ragnarok-clanker 8718090c02 Confirm fn_04287 (CReputeMgr::InfoInserter::operator())
Batch #17609 by eAthena: 0 byte-identical, 1 confirmed by peer review.

- fn_04287 CReputeMgr::InfoInserter::operator(): logic confirmed by peer review (already on main)

Peer-reviewed-by: Yommy, cremane, bibinir
Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes).
2026-11-12 01:29:44 +00:00

84 lines
2.4 KiB
C++

#ifndef RAGNAROK_SOURCE_CONTENTS_REPUTE_REPUTEMGR_H
#define RAGNAROK_SOURCE_CONTENTS_REPUTE_REPUTEMGR_H
#include "Contents/Repute/ReputeRecords.h"
#include "Script/LuaInstance.h"
#include "Utility/Singleton.h"
#include <cstddef>
#include <cstdint>
#include <map>
#include <string>
#include <utility>
#include <vector>
enum ReputeVisibility : std::int64_t {
REPUTE_VISIBLE = 0,
REPUTE_HIDDEN = 1,
REPUTE_VISIBLE_WITH_POINT = 2,
};
struct ReputeInfo {
// INLINED
ReputeInfo() {}
/* 0000 */ std::string name;
/* 0018 */ std::uint64_t maxPointPositive;
/* 0020 */ std::uint64_t maxPointNegative;
/* 0028 */ ReputeVisibility visibility;
/* 0030 */ std::int64_t point = 0;
/* 0038 */ bool updated;
};
struct ReputeGroup {
/* 0000 */ std::string name;
/* 0018 */ std::vector<std::uint64_t> reputes;
};
class CReputeMgr : public Singleton<CReputeMgr> {
friend class UIReputeWnd;
public:
CReputeMgr();
std::vector<std::string> GetGroupNames() const;
std::vector<const ReputeInfo*> GetGroupReputes(const std::string& groupName) const;
std::vector<const ReputeInfo*> GetAllReputes() const;
bool Load();
bool LoadReputeGroupData(std::map<std::uint64_t, ReputeGroup>& groups);
bool LoadReputeInfoData(std::map<std::uint64_t, ReputeInfo>& infos);
void OpenRepute(std::uint64_t groupId, std::uint64_t reputeId);
void SetPoint(std::uint64_t id, std::int64_t point);
std::vector<const ReputeInfo*> FindReputes(const std::string& keyword) const;
void SetPointsReceived(bool received);
struct GroupInserter {
/* 0000 */ CReputeMgr* manager;
/* 0004 */ std::map<std::uint64_t, ReputeGroup>* dest;
void operator()(const std::pair<int, ReputeGroupRecord>& entry) const;
};
struct InfoInserter {
/* 0000 */ CReputeMgr* manager;
/* 0004 */ std::map<std::uint64_t, ReputeInfo>* dest;
void operator()(const std::pair<int, ReputeInfoRecord>& entry) const;
};
protected:
/* 0004 */ std::map<std::uint64_t, ReputeInfo> m_infos;
/* 000C */ std::map<std::uint64_t, ReputeGroup> m_groups;
/* 0014 */ bool m_waitingForPoints = true;
/* 0018 */ CLuaInstance m_lua;
};
#if defined(_WIN32) && !defined(_WIN64)
static_assert(sizeof(ReputeInfo) == 0x40);
static_assert(offsetof(ReputeInfo, visibility) == 0x28);
static_assert(offsetof(ReputeInfo, point) == 0x30);
static_assert(offsetof(ReputeInfo, updated) == 0x38);
static_assert(sizeof(ReputeGroup) == 0x24);
static_assert(sizeof(CReputeMgr) == 0x20);
#endif
#endif