#1 10-12-2010 17:50

Sergey81
Registered: 19-12-2008
Posts: 654

SCM Object Limit Breached

Создаю отдельную темку, чтобы разобраться в чём же соль этой ошибки, как её избежать и почему она возникает.
Что известно:
(из лога 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

#2 10-12-2010 19:37

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: SCM Object Limit Breached

ни асилил - многа букаф...

Offline

#3 10-12-2010 19:49

Sergey81
Registered: 19-12-2008
Posts: 654

Re: SCM Object Limit Breached

~AquaZ~ wrote:

ни асилил - многа букаф...

Я вобще думаю из за квиксейва/автосейва это. В тот момент, когда перед сейвом нопится функция перемотки времени(а она ведь не только это делает) сохраняется в сейв чего-нибудь лишнее и в один момент это достигает своего лимита и - ошибка. Хотя вот хз, проверять надо.
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

#4 10-12-2010 22:54

Sergey81
Registered: 19-12-2008
Posts: 654

Re: SCM Object Limit Breached

Ошибку из за скриптов сейва не подтверждаю. Сейчас она кстати проявилась ещё раньше, в миссии Reuniting the families.

Offline

#5 11-12-2010 01:40

Sergey81
Registered: 19-12-2008
Posts: 654

Re: SCM Object Limit Breached

Первый пост обновлён, по последнему тесту - один из трёх скриптов вызывает ошибку.
По коду - в принципе все(ну кроме карты, хотя у неё есть call, который тоже может делать что-то нехорошее) могут сохранять что то в сейв, проблема то сейвозависимая.
checkpoints - там есть баг, когда после завершения гонки, финишный чекпоинт не удаляется. После перезагрузки сейва его нет. Так что тут хз.
engine_start - мп3 загружается, но никогда не удаляется, я незнаю влияет ли это как то на сейв или на что ещё.

Offline

#6 11-12-2010 05:06

Sergey81
Registered: 19-12-2008
Posts: 654

Re: SCM Object Limit Breached

Как оказалось, проблема была в engine_start.cs. Видимо в load_mp3.
Убрал скрипт, Are you going to San Fierro проходится, Great Theft Car тоже, так что...
Тему можно удалять smile

Offline

Board footer

Powered by FluxBB