I've found some way to add an extra for existing car.
| CODE |
{$CLEO} {$I inloop} {$I forplayercar} 0AB1: call_scm_func @addExtraForCar num_params 2 car veh extraId 0 0A93: {$I for_end} {$I end}
:addExtraForCar // 0AB1: call_scm_func @addExtraForCar num_params 2 car 0@ extraId 0 1@ *= 4 0441: 2@ = car 0@ model 2@ *= 4 2@ += 0xA9B0C8 0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0 2@ += 0x5C 0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0 2@ += 0x2F4 005A: 2@ += 1@ 0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0 0AA7: call_function 0x749E60 num_params 1 pop 1 2@ 3@ 0AA7: call_function 0x7F0410 num_params 0 pop 0 4@ 2@ += 4 0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0 2@ += 0x10 0AA5: call 0x7F0F70 num_params 3 pop 3 0 2@ 4@ 0AA5: call 0x74BF20 num_params 2 pop 2 4@ 3@ 0A97: 0@ = car 0@ struct 0@ += 0x18 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 0AA5: call 0x74A490 num_params 2 pop 2 3@ 0@ 0AA7: call_function 0x4C53C0 num_params 2 pop 2 1 0@ 5@ 0AA5: call 0x7F0B00 num_params 2 pop 2 4@ 5@ 0AB2: ret 0 |
Extra object isn't stored in vehicle struct, so it's not possible to delete existing extra without additional .exe hooks.