Administrative source import: native x86 compilation passed for 423 authored units. Source placement and submission states are migrated separately; this commit does not imply peer acceptance.
Previous head: 35d2a8cb36
Payload SHA256: 592f016d2730c5593bb653aa054c1e5f76a6df72c8f5a09e66f74876e2e33dee
159 lines
3.5 KiB
C++
159 lines
3.5 KiB
C++
#include "Contents/CashEmotionMgr.h"
|
|
#include "UI/Chat/ChatSuggestions.h"
|
|
|
|
#include <cstring>
|
|
#include <new>
|
|
|
|
// STATIC: 0x013896C4
|
|
// GLOBAL: gl_24350
|
|
CCashEmotionMgr* g_cashEmotionMgr = nullptr;
|
|
|
|
// STATIC: 0x01457848
|
|
// GLOBAL: gl_24484
|
|
ChatSuggestions* g_chatSuggestions = nullptr;
|
|
|
|
class UICashEmotionMiniWnd {
|
|
public:
|
|
// OFFSET: 0x007C9200
|
|
// FUNCTION: fn_09428
|
|
unsigned int Select(int actionId);
|
|
};
|
|
|
|
// OFFSET: 0x00596430
|
|
// FUNCTION: fn_02915
|
|
CCashEmotionMgr::CCashEmotionMgr()
|
|
: m_enabled(true), unknown_0005{}, m_action(nullptr), unknown_000C(0), unknown_0010{}, m_emotionsByPack{}, unknown_0050{}, m_packNames{}, unknown_00B0{},
|
|
m_commands{}, unknown_0198{} {
|
|
}
|
|
|
|
// OFFSET: 0x00598520
|
|
// FUNCTION: fn_02928
|
|
CCashEmotionMgr::~CCashEmotionMgr() {
|
|
if (this->m_action) {
|
|
this->m_action = nullptr;
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00598C70
|
|
// FUNCTION: fn_02934
|
|
void CCashEmotionMgr::Reset() {
|
|
this->m_emotionsByPack.clear();
|
|
this->m_packNames.clear();
|
|
this->m_commands.clear();
|
|
}
|
|
|
|
// OFFSET: 0x00599650
|
|
// FUNCTION: fn_02940
|
|
bool CCashEmotionMgr::Initialize() {
|
|
if (g_cashEmotionMgr) {
|
|
return false;
|
|
}
|
|
|
|
g_cashEmotionMgr = new (std::nothrow) CCashEmotionMgr;
|
|
if (!g_cashEmotionMgr) {
|
|
return false;
|
|
}
|
|
|
|
if (!g_cashEmotionMgr->m_enabled) {
|
|
delete g_cashEmotionMgr;
|
|
g_cashEmotionMgr = nullptr;
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
// OFFSET: 0x00599700
|
|
// FUNCTION: fn_02941
|
|
void CCashEmotionMgr::Shutdown() {
|
|
if (g_cashEmotionMgr) {
|
|
g_cashEmotionMgr->Reset();
|
|
delete g_cashEmotionMgr;
|
|
g_cashEmotionMgr = nullptr;
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00599020
|
|
// FUNCTION: fn_02937
|
|
void CCashEmotionMgr::HideSuggestions() {
|
|
if (g_chatSuggestions) {
|
|
g_chatSuggestions->Show(0);
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00599730
|
|
// FUNCTION: fn_02942
|
|
int CCashEmotionMgr::ProcessChatCommand(const char* command) {
|
|
if (!g_chatSuggestions || !g_chatSuggestions->window) {
|
|
return 0;
|
|
}
|
|
|
|
if (!command || std::strlen(command) < 1 || command[0] != '/') {
|
|
g_chatSuggestions->Show(0);
|
|
return 0;
|
|
}
|
|
|
|
const char* key = command + 1;
|
|
auto it = this->m_commands.find(key);
|
|
int actionId = 0;
|
|
|
|
if (it != this->m_commands.end()) {
|
|
actionId = it->second;
|
|
}
|
|
|
|
if (actionId != 0) {
|
|
g_chatSuggestions->Show(1);
|
|
auto* miniWnd = reinterpret_cast<UICashEmotionMiniWnd*>(g_chatSuggestions->window);
|
|
return static_cast<int>(miniWnd->Select(actionId));
|
|
} else {
|
|
this->HideSuggestions();
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x005998C0
|
|
// FUNCTION: fn_02943
|
|
const char* CCashEmotionMgr::GetPackName(int packId) {
|
|
auto it = this->m_packNames.find(packId);
|
|
if (it == this->m_packNames.end()) {
|
|
return nullptr;
|
|
}
|
|
|
|
return it->second.c_str();
|
|
}
|
|
|
|
// OFFSET: 0x00599D00
|
|
// FUNCTION: fn_02947
|
|
CashEmotionData* CCashEmotionMgr::GetEmotionData(int packId, int emotionId) {
|
|
if (packId < 0 || emotionId < 0) {
|
|
return nullptr;
|
|
}
|
|
|
|
auto packIt = this->m_emotionsByPack.find(packId);
|
|
if (packIt == this->m_emotionsByPack.end()) {
|
|
return nullptr;
|
|
}
|
|
|
|
auto emoIt = packIt->second.find(emotionId);
|
|
if (emoIt == packIt->second.end()) {
|
|
return nullptr;
|
|
}
|
|
|
|
return &emoIt->second;
|
|
}
|
|
|
|
// OFFSET: 0x00599D70
|
|
// FUNCTION: fn_02948
|
|
const char* CCashEmotionMgr::GetEmotionName(int packId, int emotionId) {
|
|
auto packIt = this->m_emotionsByPack.find(packId);
|
|
if (packIt == this->m_emotionsByPack.end()) {
|
|
return nullptr;
|
|
}
|
|
|
|
auto emoIt = packIt->second.find(emotionId);
|
|
if (emoIt == packIt->second.end()) {
|
|
return nullptr;
|
|
}
|
|
|
|
return emoIt->second.name.c_str();
|
|
}
|