You are not logged in.
Pages: 1
Создаю отдельную темку, чтобы разобраться в чём же соль этой ошибки, как её избежать и почему она возникает.
Что известно:
(из лога SALA)
Exception At Address: 0x00544BC8
Error: SCM Object Limit Breached
Reccomendation: Increase the object Value in salimits.ini(не помогает)
(из тестов)
Возникает стабильно в миссии Are you going to San Fierro.
Может появиться после гоночных миссий, там рандомно.
Возникает точно не из за asi/dll плагинов.
Сейчас закончил ещё одно тестирование, миссия прошлась успешно, вылетов до миссии тоже не было. Прошлась она из за того, что я убрал из папки cleo 15 скриптов, очевидно 1(или мб больше) из них вызывает эту ошибку.
Вот эти скрипты(оставшиеся):
mcla_checkpoints.cs
{$cleo} wait 0 if 8AA9: not is_game_version_original then 0a93: end while true wait 0 0A8D: 5@ = read_memory 0xC7F16C size 4 virtual_protect 0 0A8D: 6@ = read_memory 0xC7F170 size 4 virtual_protect 0 0A8D: 7@ = read_memory 0xC7F168 size 4 virtual_protect 0 if or not 5@ == 0 not 6@ == 0 not 7@ == 0 then 064B: 25@ = create_particle "smoke_flare" at 7@ 5@ 6@ type 1 064C: make_particle 25@ visible while 80FE: not actor $PLAYER_ACTOR sphere 0 in_sphere 7@ 5@ 6@ radius 18.0 18.0 18.0 wait 0 end 0650: destroy_particle 25@ end end
engine_start.cs
{$CLEO .cs} 0000: NOP //0A95: enable_thread_saving 21@ = 6 21@ *= 2 21@ += 0xB73458 0AAC: 10@ = load_mp3 "CLEO\playlist\01.mp3" 5@ = 0 while true wait 0 0AAA: 25@ = thread 'DSKOOL' pointer if and 25@ == 0 0449: actor $PLAYER_ACTOR in_a_car 847A: not actor $PLAYER_ACTOR driving_bike 84A7: not actor $PLAYER_ACTOR driving_boat 84C8: not actor $PLAYER_ACTOR driving_flying_vehicle 5@ == 0 then gosub @CutsceneCheck gosub @WideScreenCheck wait 1 03C0: 0@ = actor $PLAYER_ACTOR car if and 29@ == FALSE 28@ == FALSE 056E: car 0@ defined then 067F: set_car 0@ lights 1 //Car.LockInCurrentPosition(0@) = True 0AAD: set_mp3 10@ perform_action 1 while 5@ < 110 wait 0 0A8C: write_memory 21@ size 2 value 0x80 virtual_protect 0 5@ += 1 end end //wait 2500 //Car.LockInCurrentPosition(0@) = False 067F: set_car 0@ lights 2 5@ = 1 wait 2500 0AAD: set_mp3 10@ perform_action 0 else if and 5@ == 1 8449: not actor $PLAYER_ACTOR in_a_car 847A: not actor $PLAYER_ACTOR driving_bike 84A7: not actor $PLAYER_ACTOR driving_boat 84A9: not actor $PLAYER_ACTOR driving_heli 84AB: not actor $PLAYER_ACTOR driving_plane then 5@ = 0 //0ABF: set_vehicle 0@ engine_state_to 0 end end end :CutsceneCheck if 06B9: cutscene_data_loaded then if 82E9: not cutscene_reached_end then 29@ = TRUE end else 29@ = FALSE end return :WideScreenCheck 0A8D: 27@ = read_memory 0xB6F065 size 4 virtual_protect 0 if 27@ == 1 then 28@ = TRUE else 28@ = FALSE end return
map.cs
{$cleo} wait 0 wait 0 if 8AA9: not is_game_version_original then 0a93: end while true wait 0 if and $Phone_Ringing_Flag == 0 0AB0: key_pressed 9 then 0A8C: write_memory 0xBA67A4 size 4 value 0x000001 virtual_protect 0 0A8C: write_memory 0xBA68A4 size 4 value 0x290501 virtual_protect 0 0AA5: call 0x7469A0 num_params 0 pop 0 //mouse while 0AB0: key_pressed 9 wait 0 end 0A8C: write_memory 0xBA67A4 size 4 value 0x000000 virtual_protect 0 0A8C: write_memory 0xBA68A4 size 4 value 0x000000 virtual_protect 0 0AA5: call 0x746F70 num_params 0 pop 0 //mouse off end end
Last edited by Sergey81 (11-12-2010 01:35)
Offline
ни асилил - многа букаф...
Offline
ни асилил - многа букаф...
Я вобще думаю из за квиксейва/автосейва это. В тот момент, когда перед сейвом нопится функция перемотки времени(а она ведь не только это делает) сохраняется в сейв чего-нибудь лишнее и в один момент это достигает своего лимита и - ошибка. Хотя вот хз, проверять надо.
PS. Сейчас вобще странно - вернул квиксейв обратно, чтоб сейвы посравнивать, так с ним игра вобще не запускается.
PS2. Запускается, если автосейв тоже копировать:wow:
Значит, вот результаты тестов:
1)
0000: NOP wait 500 0AA5: call 0x619060 1 pop 0 0 0a93:
func_only.b
2)
0000: NOP wait 500 0A8D: 25@ = read_memory 6393978 size 4 virtual_protect 1 0A8D: 26@ = read_memory 6393982 size 1 virtual_protect 1 wait 0 0A8C: write_memory 6393978 size 4 value -1869574000 virtual_protect 1 0A8C: write_memory 6393982 size 1 value 144 virtual_protect 1 wait 0 0AA5: call 6393952 1 pop 0 0 wait 0 0A8C: write_memory 6393978 size 4 value 25@ virtual_protect 1 0A8C: write_memory 6393982 size 1 value 26@ virtual_protect 1 0a93:
quicksave.b
3)
Тоже самое, что и 1, только 03d8 опкод
save_menu.b
Итого, все файлы различаются, хотя теоретически 1 и 3 должны быть одинаковы.
Сейчас сделаю экспресс тест чтобы подтвердить, что ошибка из за сейвов, потом можно будет убрать лишние скрипты из 1 поста и перенести всё это в тему автосейва.
Last edited by Sergey81 (10-12-2010 20:50)
Offline
Ошибку из за скриптов сейва не подтверждаю. Сейчас она кстати проявилась ещё раньше, в миссии Reuniting the families.
Offline
Первый пост обновлён, по последнему тесту - один из трёх скриптов вызывает ошибку.
По коду - в принципе все(ну кроме карты, хотя у неё есть call, который тоже может делать что-то нехорошее) могут сохранять что то в сейв, проблема то сейвозависимая.
checkpoints - там есть баг, когда после завершения гонки, финишный чекпоинт не удаляется. После перезагрузки сейва его нет. Так что тут хз.
engine_start - мп3 загружается, но никогда не удаляется, я незнаю влияет ли это как то на сейв или на что ещё.
Offline
Как оказалось, проблема была в engine_start.cs. Видимо в load_mp3.
Убрал скрипт, Are you going to San Fierro проходится, Great Theft Car тоже, так что...
Тему можно удалять
Offline
Pages: 1