-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathfunctions.cpp
More file actions
84 lines (71 loc) · 3.41 KB
/
Copy pathfunctions.cpp
File metadata and controls
84 lines (71 loc) · 3.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "functions.h"
#include "Logger.h"
#include "hooks/hooks.h"
#include "SafeMemoryAccess.h"
#include <array>
int currentHP = 0, currentMP = 0;
std::string characterName = "Unknown";
namespace Functions {
uintptr_t DerefPointerChain(uintptr_t base, const std::vector<uintptr_t>& offsets) {
Logger::Log("DerefPointerChain called with base: " + Logger::GetHexStr(base));
auto result = SafeMemoryAccess::DerefPointerChain<uintptr_t, uintptr_t>(base, offsets);
if (result) {
Logger::Log("Successfully dereferenced pointer chain. Final address: " + Logger::GetHexStr(*result), Logger::LogLevel::Info);
return *result;
} else {
Logger::Log("Failed to dereference pointer chain", Logger::LogLevel::Error);
return 0;
}
}
void UpdateHPMP() {
Logger::Log("Updating HP/MP");
Logger::Log("HP_MPAddress: " + Logger::GetHexStr(HP_MPAddress));
Logger::Log("Window::base: " + Logger::GetHexStr(Window::base));
std::vector<uintptr_t> hpOffsets(HPoffsets, HPoffsets + HPoffsetsSize);
std::vector<uintptr_t> mpOffsets(MPoffsets, MPoffsets + MPoffsetsSize);
uintptr_t hpAddress = DerefPointerChain(Window::base + HP_MPAddress, hpOffsets);
uintptr_t mpAddress = DerefPointerChain(Window::base + HP_MPAddress, mpOffsets);
if (hpAddress) {
auto hp = SafeMemoryAccess::ReadMemory<int>(hpAddress);
if (hp) {
currentHP = *hp;
Logger::Log("Updated HP: " + std::to_string(currentHP));
} else {
Logger::Log("Failed to read HP value", Logger::LogLevel::Warning);
}
} else {
Logger::Log("Failed to get HP address", Logger::LogLevel::Warning);
}
if (mpAddress) {
auto mp = SafeMemoryAccess::ReadMemory<int>(mpAddress);
if (mp) {
currentMP = *mp;
Logger::Log("Updated MP: " + std::to_string(currentMP));
} else {
Logger::Log("Failed to read MP value", Logger::LogLevel::Warning);
}
} else {
Logger::Log("Failed to get MP address", Logger::LogLevel::Warning);
}
Logger::Log("HP/MP update completed");
}
void UpdateCharacterName() {
Logger::Log("Updating character name");
Logger::Log("characterNameBase: " + Logger::GetHexStr(characterNameBase));
Logger::Log("Window::base: " + Logger::GetHexStr(Window::base));
std::vector<ptrdiff_t> nameOffsets(characterNameOffsets, characterNameOffsets + characterNameOffsetsSize);
auto charNameAddress = SafeMemoryAccess::DerefPointerChain<uintptr_t, ptrdiff_t>(Window::base + characterNameBase, nameOffsets);
if (charNameAddress) {
auto name = SafeMemoryAccess::ReadMemory<std::array<char, 23>>(*charNameAddress);
if (name) {
characterName = std::string(name->data());
Logger::Log("Updated character name: " + characterName);
} else {
Logger::Log("Failed to read character name from memory", Logger::LogLevel::Warning);
}
} else {
Logger::Log("Failed to get character name address", Logger::LogLevel::Warning);
}
Logger::Log("Character name update completed");
}
}