You are not logged in.
У меня так и не работает( Заменил. Скрипт приблизительно такой выполняется:
//код миссии
0AB1: call @FUNC_FADE_IN_1000_MS 0
0AB1: call @FUNC_LOAD_CUTSCENE 1 params 12 // HOMSWET
...
:FUNC_LOAD_CUTSCENE
0@ == 22
jf @FUNC_LOAD_CUTSCENE_CASE_12
...
:FUNC_LOAD_CUTSCENE_CASE_12
0AB1: call @FUNC_FADE_IN 1 wait 500
0@ == 12
jf @FUNC_LOAD_CUTSCENE_END
---------
ЭТОТ КОД УЖЕ НЕ ВЫПОЛЯЕТСЯ!
---------
:FUNC_FADE_IN_1000_MS
0169: set_fade_color_RGB 0 0 1
fade 0 1000
:FUNC_FADE_IN_1000_MS_PROCESS
fading
jf @FUNC_FADE_IN_1000_MS_END
wait 0
jump @FUNC_FADE_IN_1000_MS_PROCESS
:FUNC_FADE_IN_1000_MS_END
0AB2: ret 0
:FUNC_FADE_IN
0169: set_fade_color_RGB 0 0 1
fade 0 0@
:FUNC_FADE_IN_PROCESS
fading
jf @FUNC_FADE_IN_END
wait 0
jump @FUNC_FADE_IN_PROCESS
:FUNC_FADE_IN_END
0AB2: ret 0
З.Ы. если не вызывать 0AB1: call @FUNC_FADE_IN 1 wait 500 то хотя бы катсцена проигрывается! То есть, после возврата функции не имеют предыдущих значения, а обнуляются!
Last edited by Viger (09-06-2010 11:18)
Offline
Я думаю не стоит заморачиаться на scm для клео миссии и также для просто миссии, потому что там происходит прерывание при смерти или аресте, а в этом случае нет гарантии, что в этот момент не выполнена scm. И там естественно переменные могут в результате быть совсем не теми, исходя из того что пишется
gosub @blabla gosub @blabla2
I know everything and nothing...
Offline
Опкоды
0364: actor 102@(42@,9i) spotted_actor $PLAYER_ACTOR
замечен ли актёр другим актёром и
09ED: actor 71@ is_within_field_of_view_actor $PLAYER_ACTOR
находится ли один актёр в поле зрения другого
в общем схожи, и в общем могут быть взаимозаменяемыми.
Разница состоит лишь в том что первый (0364) при проверке вернёт true даже в том случае, если во время произведения проверки один актёр не видит другого, но заметил когда-либо, это как бы одноразовое применение. В отличие от второго опкода, в случае использования которого проверка становится истинной только если во время произведения проверки происходит действие то есть, видит ли один актёр другого в нынешний момент.
Насколько я понмаю (в силу знания английского и перевода иноязычного выражения=)), всё именно так. Поправьте, если не прав.
@Viger, а насчёт проверки столкновения это, действительно, как говорил mfisto, есть опкод
0A1B: actor 62@ colliding_with_actor $PLAYER_ACTOR
Звучит как столкнулся ли один актёр с другим, опять же возникает вопрос о действии во времени.
Настоящее время V-ing'овое окончание.
Offline
Хватит писать не по теме. Я проверил, scm-функция работает и в cleo и в мэйне, и в миссиях и в обычных скриптах.
@mfisto - scm-функция может использоваться без опаски в миссиях, если не используется код прерывания скрипта (end_thread) из тела scm-функции. Последний случай чреват утечками памяти - незавершенные функции так и останутся висеть в памяти, независимо от того, завершился ли скрипт их вызвавший.
@Viger - убери метки и переходы, и, возможно, разберешься, почему что-то не работает, так, как ожидалось.
Offline
@Alien - в свойствах только что скачанного cleo.asi написана версия 4.1.1.24, у тебя в подписи 4.1.1.23. Библиотека обновлялась?
Offline
@Seemann - сегодня обновилась.
@mfisto - используешь в скрипте scm-функции и enable_trhead_saving. Убери из scm-функций прерывания выполнения, во время которых может быть произведено сохранение. Поясню примером:
:SCM_FUNC wait 0 // ошибка тут. Если сохраниться в этом месте, 0ab2: ret 0 // после загрузки сохранения будет некуда возвращаться
Раньше в сейв сохранялось состояние первой вызванной scm-функции. Раз теперь scm-функции работают и в мэйне, такие сложности я посчитал излишними и выбросил.
Offline
Как ты думаешь? Что я совсем что ли тупой, конечно я вообще в скрипте одно прерывание делаю. В самом начале в цикле и все, а в внутри scm никогда. Так что ошибка не в этом.
I know everything and nothing...
Offline
С клео4 4.1.1.20 не работает 0A95: enable_thread_saving.
1.Значения переменных не сохраняются
{$CLEO} 0A95: 32@ = 0 while true wait 0 if 32@ > 7000 then 0@ = 10 end 03F0: enable_text_draw 1 045A: draw_text_1number 200.0 200.0 GXT 'NUMBER' number 0@ // ~1~ end
Устанавливаю скрипт, запускаю игру, жду появления на экране числа 10, затем сохраняюсь и запускаю сделанное только что сохранение. На экране отображается 0, а должно 10
2.Завершённые потоки запускаются
{$CLEO} 0A95: model.Load(2985) repeat wait 0 until model.Available(2985) object.Create(1@ 2985 -2024.9742, 166.2917, 28.8359) model.Destroy(2985) wait 5000 object.Destroy(1@) 0A93:
Устанавливаю скрипт, запускаю игру. После того, как объект уничтожается, сохраняю игру и перезапускаю сделанное только что сохранение - скрипт запускается (объект снова создаётся и удаляется).
Last edited by Den_spb (27-06-2010 13:21)
Offline
Создается ли в папке CLEO\CLEO_SAVES файл cs<номер сейва>.sav?
Offline
Создаётся только в том случае, если я удаляю все старые сейвы из этой папки. При этом создаётся файл cs5.sav, хотя я сохраняю игру на 6 сохранение. После этого поочерёдно запускаю 5 и 6 сохранение - в обоих случаях скрипты работают, как описано выше.
Last edited by Den_spb (27-06-2010 16:53)
Offline
С клео4 4.1.1.20 не работает 0A95: enable_thread_saving.
1.Значения переменных не сохраняются
Устанавливаю скрипт, запускаю игру, жду появления на экране числа 10, затем сохраняюсь и запускаю сделанное только что сохранение. На экране отображается 0, а должно 10
2.Завершённые потоки запускаются
Устанавливаю скрипт, запускаю игру. После того, как объект уничтожается, сохраняю игру и перезапускаю сделанное только что сохранение - скрипт запускается (объект снова создаётся и удаляется).
У меня на этой версии твои скрипты работают как задумано (т.е. опкод 0A95: работает). Тут дело в чём то другом.
Offline
Не срабатывает формат текст, например
0ACF: show_formatted_styled_text "%d + %d = %d" time 2000 style 1 2 2 4
выдаёт на экране "d + d = d"
а вот этот работает
0ACF: show_formatted_styled_text "This is %.4X opcode" time 2000 style 1 0x0ACF
(КЛЕО4.1.1.25 , ЕХЕ 14 383 616 байт)
--
+ маловато возможностей AudioStream. Например нельзя проиграть файл с
определённого места.
А еще не работает (или я не понял как использовать) зацикливание звука
0AC0: loop_audiostream $hMP3 flag 1
Last edited by Deniska (12-07-2010 15:00)
Offline
0ACF работает как надо, а в 0AC0 действительно была ошибка.
Обновил до 4.1.1.26.
Offline
Вот спасибо. Теперь есть почти всё что надо для звуков.
И всётаки, если будет время, добавь возможность проиграть файл с определённого места.
кстати - версию ты обновил, но в меню СА осталось 4.1.1.25
Offline
0AC2: set_3d_audiostream $hMP3 position 0@ 1@ 2@Вот опкод дает с любого места проигрываться.
Смотри внимательнее.
0AC2 устанавливает место на карте, где будет играть звук. А речь шла про проигрывание самого звука с определенного момента времени (например, с середины).
Offline
И еще о звуках = (ибо без них моды получаются пресными)
хорошо бы еще иметь проверку типа "audiostream $AUDIO exist" (существует ли аудио)
во извежании глюков после загрузки сэйвов. Без этого, конечно, можно обойтись,
но неплохо иметь в арсенале.
Ну и еще расширить опкод "0AAE: release_audiostream $AUDIO", чтоб с параметром -1
он выгружал все загруженые звуки. Это мелочь, но приятно.
Полным шиком был бы опкод типа "audiostream $AUDIO fade 1.0 to 0.0 1000 ms"
(типа сменить громкость от 1.0 до 0.0 за 1000 мс).
Offline