- 1,585
- 1,310
Также видел такую функцию в полезных сниппетах для C++
C++:
template<typename T>
void WriteMemory(void* address, T value)
{
DWORD protect;
VirtualProtect(address, sizeof(T), PAGE_EXECUTE_READWRITE, &protect);
*reinterpret_cast<T*>(address) = value;
VirtualProtect(address, sizeof(T), protect, &protect); // вместо &protect можно и nullptr
}
mem.fill(sampGetChatInfoPtr() + 306, 0x0, 25200)
C++:
void MemoryFill(void* address, int value, unsigned int size)
{
DWORD protect;
VirtualProtect(address, size, PAGE_EXECUTE_READWRITE, &protect);
memset(address, value, size);
VirtualProtect(address, size, protect, &protect);
}
SF. Как правильно работать с памятью игры (видел гайды, но видимо что-то не то было либо я не понял), вот к примеру как это перевести в C++ из Lua
Lua:local mem = require 'memory' -- mem.fill(sampGetChatInfoPtr() + 306, 0x0, 25200) mem.write(sampGetChatInfoPtr() + 306, 25562, 4, 0x0) mem.write(sampGetChatInfoPtr() + 0x63DA, 1, 1)
C++:
void ClearChat()
{
stChatInfo* chat = SF->getSAMP()->getChat();
MemoryFill(&chat->chatEntry, 0, sizeof(stChatEntry) * 100);
chat->m_iRedraw = 1;
}