BYTE * WaterDraw = (BYTE *) 0x5C1710; // блок рисования внешней воды
float WaterShift; // замена переменной сдвига внешней воды
void ProtectBYTE(BYTE *Address, BYTE Value)
{
DWORD OldProtect; VirtualProtect(Address,sizeof(BYTE),PAGE_READWRITE,&OldProtect);
*Address = Value; VirtualProtect(Address,sizeof(BYTE),OldProtect,&OldProtect);
}
void ProtectDWORD(DWORD *Address, DWORD Value)
{
DWORD OldProtect; VirtualProtect(Address,sizeof(DWORD),PAGE_READWRITE,&OldProtect);
*Address = Value; VirtualProtect(Address,sizeof(DWORD),OldProtect,&OldProtect);
}
void LoadWater()
{
BYTE WaterLines = 40; // дополнительные линии внешней воды, добавляются к 5-ти стандартным
WaterShift = WaterLines*256+2048; // сдвиг внешней воды
ProtectDWORD((DWORD*)(WaterDraw+0x9F4), (DWORD)&WaterShift); // сдвиг северной и южной на запад
ProtectDWORD((DWORD*)(WaterDraw+0xA41), (DWORD)&WaterShift); // сдвиг южной на юг
ProtectDWORD((DWORD*)(WaterDraw+0xC0B), (DWORD)&WaterShift); // сдвиг северной на север
ProtectDWORD((DWORD*)(WaterDraw+0xE2B), (DWORD)&WaterShift); // сдвиг западной на запад
ProtectDWORD((DWORD*)(WaterDraw+0x100F),(DWORD)&WaterShift); // сдвиг восточной на восток
ProtectBYTE(WaterDraw+0xDCB, WaterLines*2+26); // пересчет линий внешней воды севера и юга дополнительно на востоке
ProtectBYTE(WaterDraw+0x11D1,WaterLines+5+8); // пересчет линий внешней воды запада и востока, 8 - заполнение внешней водой центра
ProtectBYTE(WaterDraw+0xDC1, WaterLines+5); // пересчет линий внешней воды севера и юга
// *(float *) 0x69CC58 = 0; // по умолчанию 400, вся вода сдвинута на запад на 400, можно вернуть в центр в 0
}