//.h
#pragma pack (push, 1)
struct CCarGenerator
{
DWORD mi;
RwV3d pos;
DWORD angle;
WORD color1;
WORD color2;
BYTE alarm;
BYTE doorLock;
BYTE field_1A;
BYTE field_1B;
WORD field_1C;
WORD field_1E;
DWORD time;
DWORD ProcessedVehicleHandle;
WORD field_28;
BYTE field_2A;
BYTE __padding;
};
#pragma pack (pop)
CCarGenerator *CarGenerator;
auto AddParkedGenerator = (int (__cdecl*)(float x,float y,float z,float angle,int id,int color1,int color2,char alarm,char locked,char,int,int))0x5A6C10;
//.cpp
DWORD *dwParkedCarLimit = (DWORD *) 0x5A6C16;
DWORD *dwParkedCarCount = (DWORD *) 0x97F2A8;
DWORD *dwCurrentTime = (DWORD *) 0x974B2C;
CarGenerator = new CCarGenerator[1000]; // original 185
WriteDWORD(dwParkedCarLimit,1000); // original 185
WriteDWORD((DWORD*)0x4537A9,(DWORD)CarGenerator);
WriteDWORD((DWORD*)0x5A6C5F,(DWORD)CarGenerator);
WriteDWORD((DWORD*)0x5A6CC3,(DWORD)CarGenerator);
WriteDWORD((DWORD*)0x5A69DB,(DWORD)CarGenerator);
WriteDWORD((DWORD*)0x5A6B16,(DWORD)CarGenerator);
WriteDWORD((DWORD*)0x5A69E6,(DWORD)&CarGenerator->pos.x);
WriteDWORD((DWORD*)0x5A6B22,(DWORD)&CarGenerator->pos.x);
WriteDWORD((DWORD*)0x5A69F1,(DWORD)&CarGenerator->pos.y);
WriteDWORD((DWORD*)0x5A6B2A,(DWORD)&CarGenerator->pos.y);
WriteDWORD((DWORD*)0x5A69FC,(DWORD)&CarGenerator->pos.z);
WriteDWORD((DWORD*)0x5A6B35,(DWORD)&CarGenerator->pos.z);
WriteDWORD((DWORD*)0x5A6A07,(DWORD)&CarGenerator->angle);
WriteDWORD((DWORD*)0x5A6B40,(DWORD)&CarGenerator->angle);
WriteDWORD((DWORD*)0x5A6A14,(DWORD)&CarGenerator->color1);
WriteDWORD((DWORD*)0x5A6B4C,(DWORD)&CarGenerator->color1);
WriteDWORD((DWORD*)0x5A6A21,(DWORD)&CarGenerator->color2);
WriteDWORD((DWORD*)0x5A6B5C,(DWORD)&CarGenerator->color2);
WriteDWORD((DWORD*)0x5A6A2A,(DWORD)&CarGenerator->alarm);
WriteDWORD((DWORD*)0x5A6B65,(DWORD)&CarGenerator->alarm);
WriteDWORD((DWORD*)0x5A6A33,(DWORD)&CarGenerator->doorLock);
WriteDWORD((DWORD*)0x5A6B6E,(DWORD)&CarGenerator->doorLock);
WriteDWORD((DWORD*)0x5A6A3C,(DWORD)&CarGenerator->field_1A);
WriteDWORD((DWORD*)0x5A6B77,(DWORD)&CarGenerator->field_1A);
WriteDWORD((DWORD*)0x5A6A49,(DWORD)&CarGenerator->field_1C);
WriteDWORD((DWORD*)0x5A6B85,(DWORD)&CarGenerator->field_1C);
WriteDWORD((DWORD*)0x5A6A56,(DWORD)&CarGenerator->field_1E);
WriteDWORD((DWORD*)0x5A6B95,(DWORD)&CarGenerator->field_1E);
WriteDWORD((DWORD*)0x5A6A61,(DWORD)&CarGenerator->time);
WriteDWORD((DWORD*)0x5A6BA1,(DWORD)&CarGenerator->time);
WriteDWORD((DWORD*)0x5A6A6C,(DWORD)&CarGenerator->ProcessedVehicleHandle);
WriteDWORD((DWORD*)0x5A6BAC,(DWORD)&CarGenerator->ProcessedVehicleHandle);
WriteDWORD((DWORD*)0x5A6A79,(DWORD)&CarGenerator->field_28);
WriteDWORD((DWORD*)0x5A6BB8,(DWORD)&CarGenerator->field_28);
WriteDWORD((DWORD*)0x5A6A85,(DWORD)&CarGenerator->field_2A);
WriteDWORD((DWORD*)0x5A6BC1,(DWORD)&CarGenerator->field_2A);
// 0x4536DE @@opcode_014B: %13d% = init_parked_car_generator %5t% %6d% %7d% %8d% alarm %9d% door_lock %10d% %11d% %12d% at %1d% %2d% %3d% angle %4d%
AddParkedGenerator(100.0,100.0,15.0,90.0,162,-1,-1,1,0,0,0,0); // rhino
// 0x45378A @@opcode_014C: set_parked_car_generator %1d% cars_to_generate_to %2d%
CarGenerator[0].time = *dwCurrentTime+4;
CarGenerator[0].field_28 = 0xFFFF;
(*dwParkedCarCount)++;
// 0x4536DE @@opcode_014B: %13d% = init_parked_car_generator %5t% %6d% %7d% %8d% alarm %9d% door_lock %10d% %11d% %12d% at %1d% %2d% %3d% angle %4d%
AddParkedGenerator(200.0,100.0,15.0,180.0,155,-1,-1,1,0,0,0,0); // hunter
// 0x45378A @@opcode_014C: set_parked_car_generator %1d% cars_to_generate_to %2d%
CarGenerator[1].time = *dwCurrentTime+4;
CarGenerator[1].field_28 = 0xFFFF;
(*dwParkedCarCount)++;