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
endengine_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
returnmap.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