Цитата:
Сообщение от DeBUG
Если будут вопросы спрашивай.
|
Будут

)). Целью моей работы с памятью МСТС является заполнение вот такой структуры с адресами и значениями параметров всех подвижных единиц состава игрока:
Код:
struct pWagon{
DWORD pTM; // Давление в тормозной магистрали, psi
float TM;
DWORD pZR; // Давление в запасном резервуаре, psi
float ZR;
DWORD pTC; // Давление в тормозном цилиндре, psi
float TC;
DWORD pSpeed; // Скорость (м/с)
float Speed;
DWORD pTractiveForce; // Сила тяги
float TractiveForce;
DWORD pBrakeForce; // Сила торможения
float BrakeForce;
};
Вот данные по адресам для игры без патча:
DWORD pConsist = 0x7c8778;
DWORD pHour = 0x810984; // Часы игрового времени int
DWORD pMin = 0x810980; // Минуты игрового времени int
DWORD pSec = 0x81097c; // Секунды игрового времени int
DWORD pSpeed = 0x80f680; // Скорость (м/с) float
DWORD pSigAsp = 0x80f70c; // SIGASP впередистоящего светофора int
А так я ищу адреса для заполнения структур pWagon:
// Предполагая, что HANDLE hProcess = OpenProcess(... я уже сделал.
Код:
nWag = 0;
ReadProcessMemory(hProcess, (LPCVOID)pConsist, &adr1, 4, NULL);
adr1 += 0x6a;
ReadProcessMemory(hProcess, (LPCVOID)adr1, &adr2, 4, NULL);
// Поиск адресов вагонных переменных
float m_A, m_B; // Переменные записи значений меток поиска
DWORD pSearch = adr2 - 0x13ef0; // Границы адресов поиска
DWORD pSearchEnd = 0x2100000;
while (pSearch < pSearchEnd)
{
ReadProcessMemory(hProcess, (LPCVOID)pSearch, &m_A, 4, NULL);
if (m_A == 76)
{
ReadProcessMemory(hProcess, (LPCVOID)(pSearch + 0xC), &m_B, 4, NULL);
if (m_B == 60)
{
nWag += 1;
Wag(nWag).pZR = pSearch - 0x4;
Wag(nWag).pTC = pSearch + 0x8;
Wag(nWag).pTM = pSearch + 0x10;
Wag(nWag).pSpeed = pSearch - 0x6c;
Wag(nWag).pBrakeForce = pSearch + 0x4;
Wag(nWag).pTractiveForce = pSearch + 0x76;
}
}
pSearch += 0x4;
}
// Чтение времени из игры
ReadProcessMemory(hProcess, (LPCVOID)pHour, &Hour, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)pMin, &Min, 4, NULL);
ReadProcessMemory(hProcess, (LPCVOID)pSec, &Sec, 4, NULL);
Значения меток поиска берутся из енг-файла головного локомотива:
TrainBrakesControllerMaxSystemPressure( 76 )
EngineBrakesControllerMaxSystemPressure( 60 )