Есть Вы не против, буду выкладывать свои поделки по lua.
Да я не против) Главное - чтобы в соответствующем разделе
Очень интересна разница между опкодами создающими и завершающими поток.
0A92: create_custom_thread "ShowTextBox.s"
этот опкод запускает .s скрипт. Это обычный CLEO-скрипт, но с расширением ".s". Разница в том, что .s скрипты не запускаются автоматически при старте игры(в отличии от .cs скриптов). Т.е. данный способ используется, чтобы запустить какой-то скрипт ровно тогда, когда тебе нужно. Просто смени расширение нужного скрипта на ".s" и используй данный опкод запуска в другом скрипте.
00D7: create_thread @HJ without_parameters
Обычный
create_thread(опкод 004F) в main.scm может вызываться с параметрами, точно так же, как как scm функция, а этот опкод - нет. Зато в потоках, которые создаются этим опкодом, в отличии от 004F, может вызываться опкод
, который "подчищает" некоторые действия, созданные другими опкодами(так же, как в миссиях).
Подробнее тут.
05DE: create_custom_thread 'ct.s'
То же самое, что и опкод 0A92.
Задает имя потоку/CLEO-скрипту.
Завершает текущий поток в main.scm.
Завершает текущий CLEO-скрипт.
0459: end_thread_named 'mythread'
Завершает в main.scm поток с именем "mythread"(именно для этого и нужно объявлять имена потокам опкодом 03A4).
0ABA: end_custom_thread_named 'BENZIN'
Завершает CLEO-скрипт с именем "BENZIN"(если у того есть имя, заданное опкодом 03A4).
Хотел бы научиться писать плагины на C++, жаль пока нет инструкции в видео формате…..
Это не ко мне(я сам пока с этим профан). Но по C++ есть достаточно материала в интернете(да и на этом сайте, кстати).
Увидел у Vital на канале, что он использовал.
Я знаю одно - при декомпиляции это превращается в белиберду, значит тут что-то не так. Проверь сам и увидишь. Я уже писал, что с высокоуровневым кодингом в scm-скриптинге могут быть большие проблемы, поэтому сам им не пользуюсь, и помочь с этим не могу.
Насчет опкода 0AD9: write_formatted_text "XYZ: %f %f %f" in_file 0@ 1@ 2@ 3@
Почему пишется %f %f %f? Что это дает и почему именно так?
%f означает, что вместо этого символа будет вставлено float число(дробное), которое записано далее(переменная 1@).
Т.е. если это написано 3 раза - это означает, что будут вставлены 3 float числа, и они там передаются в переменные 1@ 2@ 3@.
Т.е. запись
1@ = 1.2
2@ = 4.5
3@ = 3.7
0AD9: write_formatted_text "XYZ: %f %f %f" in_file 0@ 1@ 2@ 3@
означает, что в файл 0@ запишется текст:
XYZ: 1.2 4.5 3.7
Также можно вставлять не только float, но и integer. Для этого вместо
%f нужно писать
%dВ некоторых случаях также можно добавлять целые слова или строки:
%sПомогло избавиться от вылетов при подбирание денег 004E: end_thread // Завершение потока, но при провале или выполнении миссии, приходится перезагружать сэйв. Думаю решить эту проблему перезагрузкой из другого файла, методом 0A9A.
Зачем, если можно вместо завершения(end_thread) скрипта сделать "прыжок"(jump) на его начало?
По поводу миссии - сожалею, но тут я не могу помочь. Я уже писал об этом когда-то: что придет время, когда этот час настанет(тавтология). Твой код слишком объемный, так что я буду слишком долго в него вникать. Ты сам видел - я заходил на форум несколько раз с момента написания тобой этого сообщения, но отвечаю лишь сейчас.
У меня патологическая нехватка времени.
Помимо объёмности, твой код написан совершенно не так, как писал бы его я. Не в смысле "хуже" или "лучше", а в смысле
в другом стиле. У каждого скриптера свой стиль, каждый пишет так, как удобно ему, а не другим. Нет единого стандарта и это мешает взаимопониманию.
Мне кажется, я рассказал тебе практически всё, что знал сам, а дальше дело уже за тобой. Ну и
ребятами с sannybuilder.
Могу только посредством беглого анализа сказать, что в записи
004E: end_thread // Завершение потока
jump @MISSION_1 // Чтобы можно пройти заново
return
последние 2 строчки не выполняются, поскольку первая строчка завершает весь скрипт. Также в CLEO-скриптах вместо опкода 004E юзается 0A93(о котором я написал в начале этого сообщения).
Даже если ты удалишь первую строчку, то опять же - последняя никогда не выполнится, поскольку jump - это безоговорочный "прыжок", без выполнения кода, написанного ниже.
Т.е., чтобы выполнился
return - тебе нужно удалить 2 верхние строчки.