Вопросы по созданию КЛЕО-скриптов 2
|
|
Den_spb | Дата: Воскресенье, 07.07.2013, 17:15 | Сообщение # 346 |
Создатель сайта
Группа: Администраторы
Сообщений: 1603
Статус: Offline
| Объясняю ещё раз порядок работы игры: -процедура exe 1 -процедура exe 2 ... -процедура обработки скриптов --скрипт 1 (выполняются команды от одного wait до следующего wait) --скрипт 2 (выполняются команды от одного wait до следующего wait) ... --скрипт N (выполняются команды от одного wait до следующего wait) ... процедура отрисовки на экране ... процедура exe M
Далее процесс повторяется снова. Всё, что есть в игре, исполняется по очереди - что тут непонятного? Если время, указанное в команде wait больше времени, затрачиваемого на один повтор игрового цикла, то данный скрипт будет "пропускать свой ход" до момента истечения указанного времени.
Цитата (Vital) Den_spb, кстати, по поводу 8 в условиях: у меня в одном случае не удалось сделать обратное условие, это опкод 0818: actor $PLAYER_ACTOR in_air Я пробовал 8818, но действие могло выполняться в воздухе... Скриптовый движок обрабатывает все опкоды одинаково. Причина несрабатывания не в замене 0 на 8, а в чём-то другом.
|
|
| |
Vital | Дата: Воскресенье, 07.07.2013, 17:29 | Сообщение # 347 |
Группа: Проверенные
Сообщений: 206
Статус: Offline
| Понятно Выходит, игра настолько быстро выполняет один скрипт, что другой может начаться даже если нажать клавишу. Я имею в виду, что времени одного нажатия хватает на последовательную обработку двух скриптов. Здорово, конечно, я никогда не думал о такой быстрой производительности игры. Добавлено (07.07.2013, 17:29) --------------------------------------------- Интересно, могут ли в SB добавить какие-нибудь опкоды для обработки так называемых пулов, которые находятся в адресах памяти, к примеру сделать опкод для получения какого-либо конкретного элемента из пула (к примеру, 5-го из 620 пикапов), чтобы сразу записать в переменную адрес структуры, который в дальнейшем можно использовать? Честно говоря, это было бы очень даже здорово, стало бы гораздо проще: получаешь новым опкодом адрес структуры (если он найден, как действует, например, опкод нахождения актёра, в которого целится игрок), а затем работаешь уже просто со смещениями. Я, конечно, могу спросить и на форумах SB, но вдруг это просто нецелесообразно, и я просто помешаю людям вести работу над программой.
SCRIPTER
|
|
| |
Den_spb | Дата: Воскресенье, 07.07.2013, 18:03 | Сообщение # 348 |
Создатель сайта
Группа: Администраторы
Сообщений: 1603
Статус: Offline
| Цитата (Vital) Я имею в виду, что времени одного нажатия хватает на последовательную обработку двух скриптов. Обработкой нажатия клавиш также занимается одна из процедур exe. Если была нажата какая-то кнопка, то в память записывается соответствующее значение. И когда обработчик скриптов начинает в очередной раз выполнять код скриптов, то встретившиеся во всех скриптах проверки на нажатие этой клавиши дадут "истину".
Цитата (Vital) Интересно, могут ли в SB добавить какие-нибудь опкоды для обработки так называемых пулов, которые находятся в адресах памяти, к примеру сделать опкод для получения какого-либо конкретного элемента из пула (к примеру, 5-го из 620 пикапов) Для работы с пулами педов, объектов и транспорта есть опкоды 0AE1-0AE3. Можно, конечно, добавить аналогичные опкоды и для других пулов - например, пикапов. Этот вопрос надо задавать разработчикам.
|
|
| |
Vital | Дата: Воскресенье, 07.07.2013, 18:23 | Сообщение # 349 |
Группа: Проверенные
Сообщений: 206
Статус: Offline
| Den_spb, я имею в виду создание опкодов для перебора пулов, как, например, показывал ты с перебором ракет (я когда-то спрашивал, как записать нацеленный транспорт через адрес ракет). Т.е., то, что я с вашей помощью недавно проделал с пикапами. 0АЕ1-0АЕ3 записывает случайный элемент пула, но неплохо было бы сделать именно перебор, вместо цикла. К примеру, опкод будет такой: получить 3-ий элемент пула пешеходов, что будет фактически означать встроенный в опкод цикл for, находящий именно третий элемент пула и возвращающий адрес его структуры. Как думаешь, может ли быть полезен такой метод работы, чисто для упрощения, чтобы люди не путались с циклами, адресами, а, получив адрес структуры, могли сразу перейти к работе с самим игровым объектом или его смещениями?
SCRIPTER
|
|
| |
Den_spb | Дата: Воскресенье, 07.07.2013, 18:26 | Сообщение # 350 |
Создатель сайта
Группа: Администраторы
Сообщений: 1603
Статус: Offline
| А откуда ты узнаешь, что тебе нужен именно 3-й элемент пула? С опкодами 0AE1 - 0AE3 пул перебирается так:Код if 0AE3: 0@ = random_object_near_point 0.0 0.0 0.0 in_radius 10000.0 find_next 0 then repeat if // условие, которому должны соответствовать объекты then // действия надо объектами end until 8AE3: not 0@ = random_object_near_point 0.0 0.0 0.0 in_radius 10000.0 find_next 1 end
|
|
| |
Vital | Дата: Воскресенье, 07.07.2013, 18:35 | Сообщение # 351 |
Группа: Проверенные
Сообщений: 206
Статус: Offline
| Ох, как же я туго соображаю по этой теме... Я почему-то думал всегда, что игра создаёт эти элементы последовательно, что можно тогда перебрать их от первого созданного до последнего, хотя это в принципе глупая мысль, потому что чьё-то место может занять уже другой элемент, в общем, они не статичны, как массив. Ладно, по этому всему я ещё подумаю, может, задам вопрос относительно других элементов. Зато появилась парочка вопросов по твоему коду: 1) Что же всё-таки с параметром find_next? Я его не совсем понимаю. Когда я его использовал, ничего не находилось вообще. Однако при 0 могли быть найдены прежде обработанные объекты. 2) Если писать обратное условие, то слово not служит только для понимания и удобства, не играя никакой роли в работе опкода, не ошибаюсь?
SCRIPTER
|
|
| |
Den_spb | Дата: Воскресенье, 07.07.2013, 18:53 | Сообщение # 352 |
Создатель сайта
Группа: Администраторы
Сообщений: 1603
Статус: Offline
| Цитата (Vital) потому что чьё-то место может занять уже другой элемент Всё верно.
Цитата (Vital) 1) Что же всё-таки с параметром find_next? Я его не совсем понимаю. Когда я его использовал, ничего не находилось вообще. Однако при 0 могли быть найдены прежде обработанные объекты. В справке по КЛЕО4 дано объяснение: "Флаг, задающий поиск, начиная с последнего найденного этим опкодом (чтобы не натыкаться постоянно на одного и того же актера при цикличном поиске". То есть с помощью кода, шаблон которого я привёл, можно найти все существующие объекты и произвести действия над теми объектами, которые удовлетворяют нужным условиям.
Цитата (Vital) 2) Если писать обратное условие, то слово not служит только для понимания и удобства, не играя никакой роли в работе опкода, не ошибаюсь? Верно, not можно в данном случае не писать, т.к. здесь уже приведён номер опкода - 8AE3. В тех случаях, когда используются сокращённые выражения, not нужно написать обязательно, чтобы компилятор мог понять - здесь нужна антипроверка. Например: not player.Defined($player_char)
|
|
| |
Vital | Дата: Воскресенье, 07.07.2013, 19:11 | Сообщение # 353 |
Группа: Проверенные
Сообщений: 206
Статус: Offline
| Den_spb, спасибо за объяснение. По поводу "мест" я вспомнил, как долго думал над тем, как же сделать создание 50 актёров, чтобы у каждого было своё место и чтобы можно было занять свободные места, которые освобождаются после смерти актёров. Здесь то же самое. Хороший шаблон, пожалуй, стоит серьёзно заняться составлением всяких шаблонов, потому что в справке уже много лет ничего не меняется, я, допустим, переделал шаблон миссии на цикл while true, который удобно использовать для cleo. Может быть, предложу Seemann собрать коллекцию подобных шаблонов (обновлённых) и сделать макросы для следующей версии SB. С такими шаблонами можно быстро и изучить что-нибудь, и использовать для разных целей. Кстати, все cleo опкоды поиска актёров/транспорта/объектов не меняют их флаг уникальности? Включая и 0АЕ1-АЕ3? Я проверил ту гипотезу, о которой мы говорили не так давно, действительно, опкод поиска нацеленного актёра не меняет флаг уникальности, и актёр не исчезает, не меняет своих действий, в общем, сохраняет свои качества в полной мере, что даёт огромное поле для использования таких шаблонов без всякого риска (если всё действительно так).
SCRIPTER
|
|
| |
DK22Pac | Дата: Воскресенье, 07.07.2013, 19:14 | Сообщение # 354 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| Vital, чем тебя не устраивают forallpeds, forallpickups (публиковалось здесь, на форуме)? Пула пикапов не существует. Просто массив. Не каждый массив обрабатывается как пул.
|
|
| |
Den_spb | Дата: Воскресенье, 07.07.2013, 19:51 | Сообщение # 355 |
Создатель сайта
Группа: Администраторы
Сообщений: 1603
Статус: Offline
| Цитата (Vital) Кстати, все cleo опкоды поиска актёров/транспорта/объектов не меняют их флаг уникальности? Включая и 0АЕ1-0АЕ3? Да, ни один из клео-опкодов поиска не меняет флаг уникальности.
|
|
| |
Vital | Дата: Понедельник, 08.07.2013, 13:13 | Сообщение # 356 |
Группа: Проверенные
Сообщений: 206
Статус: Offline
| DK22Pac, спасибо, что напомнил, надо будет снова установить, а то недавно систему менял. Очень хорошая вещь, честно говоря, не понимаю, почему столько полезностей, сделанных для скриптинга, не входит в SB. Буду, пожалуй, пользоваться, но, если вдруг приспичит сделать видео для Sanny Builder Мои примеры, сперва лучше показать обычный алгоритм. Но можно как раз сделать урок по include, возможность-то полезная. Кстати по include, здорово бы было сделать из этого сочетание макроса и scm-функции: чтобы можно было, введя $I, увидеть подсказку, как в макросе и использовать независимые переменные, как в scm-функциях. Как-то так: {$I find car in point 1@ 2@ 3@ radius 10.0 return handle 0@} Чтобы переменные не нужно было запоминать переменные и чтобы сами локальные переменные были независимы.Добавлено (08.07.2013, 13:13) --------------------------------------------- Чуть не забыл, однажды, играясь с клео опкодом поиска объектов, я сделал включение возможности поднять любой объект, который к тому же был помечен маркером, и мне попался пикап пистолета, который уронил полицейский. Пикап можно было поднять и даже носить, но всё же произошёл вылет. Значит, пикапы тоже могут быть найдены.
SCRIPTER
|
|
| |
DK22Pac | Дата: Вторник, 09.07.2013, 14:33 | Сообщение # 357 |
$player_actor
Группа: Проверенные
Сообщений: 559
Статус: Offline
| При создании пикапа создается и обьект (CObject).
|
|
| |
Vital | Дата: Четверг, 11.07.2013, 00:34 | Сообщение # 358 |
Группа: Проверенные
Сообщений: 206
Статус: Offline
| Я вас не побеспокою, если покажу свой код целого скрипта, по которому есть пока что лишь один вопрос? Ссылка на pastebin.com
Проблема находится в части 7.2.1 (цикл for). Если не использовать проверку на наличие маркера, то игра, вопреки car defined засчитает уже уничтоженную машину найденной, хоть я и удаляю о ней сведения в случае уничтожения. В таком случае миссия сразу считается пройденной, а маркеры и два самолёта остаются, продолжая атаковать. Это странно, вроде бы игра не должны считать объекты без сведений найденными, однако так случается.
SCRIPTER
|
|
| |
Filaret64s | Дата: Четверг, 11.07.2013, 10:20 | Сообщение # 359 |
Группа: Пользователи
Сообщений: 1
Статус: Offline
| Привет парни! Вопрос: При выводе двух текстур на экран белые квадраты а не текстуры.
Код {$VERSION 3.1.0030} {$CLEO .cs}
//-------------MAIN--------------- 0000: {$CLEO} 0390: load_txd_dictionary "GTA5" // название txd-архива, который следует разместить в папке models\txd 038F: load_texture "CP" as 1 // название текстуры в txd-архиве 038F: load_texture "RADAR" as 2 // название текстуры в txd-архиве wait 0 while true wait 0 03F0: enable_text_draw 1 // эта команда применяется один раз, даже если текстур несколько 03E3: set_texture_to_be_drawn_antialiased 1 // эта команда применяется один раз, даже если текстур несколько 038D: draw_texture 1 position 620.0 410.0 size 240.0 280.0 RGBA 0 0 0 0 038D: draw_texture 1 position 120.0 410.0 size 240.0 280.0 RGBA 0 0 0 0 end
в TXD пробовал и PNG и TAG форматы. Помогите.Добавлено (11.07.2013, 10:20) --------------------------------------------- Я понял. Проблема в текстурах.
|
|
| |
Vital | Дата: Вторник, 16.07.2013, 14:42 | Сообщение # 360 |
Группа: Проверенные
Сообщений: 206
Статус: Offline
| И всё-таки странно, почему уничтоженная и выгруженная из памяти машина считается найденной...
SCRIPTER
|
|
| |