Пятница, 19.04.2024, 13:24
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Игры серии ГТА » Скриптинг » Вопросы по созданию КЛЕО-скриптов 2
Вопросы по созданию КЛЕО-скриптов 2
Den_spbДата: Воскресенье, 07.07.2013, 17:15 | Сообщение # 346
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: 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
Понятно smile Выходит, игра настолько быстро выполняет один скрипт, что другой может начаться даже если нажать клавишу. Я имею в виду, что времени одного нажатия хватает на последовательную обработку двух скриптов. Здорово, конечно, я никогда не думал о такой быстрой производительности игры.

Добавлено (07.07.2013, 17:29)
---------------------------------------------
Интересно, могут ли в SB добавить какие-нибудь опкоды для обработки так называемых пулов, которые находятся в адресах памяти, к примеру сделать опкод для получения какого-либо конкретного элемента из пула (к примеру, 5-го из 620 пикапов), чтобы сразу записать в переменную адрес структуры, который в дальнейшем можно использовать? Честно говоря, это было бы очень даже здорово, стало бы гораздо проще: получаешь новым опкодом адрес структуры (если он найден, как действует, например, опкод нахождения актёра, в которого целится игрок), а затем работаешь уже просто со смещениями. Я, конечно, могу спросить и на форумах SB, но вдруг это просто нецелесообразно, и я просто помешаю людям вести работу над программой.


SCRIPTER
 
Den_spbДата: Воскресенье, 07.07.2013, 18:03 | Сообщение # 348
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: 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
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: 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
Ох, как же я туго соображаю по этой теме...  sad Я почему-то думал всегда, что игра создаёт эти элементы последовательно, что можно тогда перебрать их от первого созданного до последнего, хотя это в принципе глупая мысль, потому что чьё-то место может занять уже другой элемент, в общем, они не статичны, как массив.
Ладно, по этому всему я ещё подумаю, может, задам вопрос относительно других элементов.
Зато появилась парочка вопросов по твоему коду:
1) Что же всё-таки с параметром find_next? Я его не совсем понимаю. Когда я его использовал, ничего не находилось вообще. Однако при 0 могли быть найдены прежде обработанные объекты.
2) Если писать обратное условие, то слово not служит только для понимания и удобства, не играя никакой роли в работе опкода, не ошибаюсь?


SCRIPTER
 
Den_spbДата: Воскресенье, 07.07.2013, 18:53 | Сообщение # 352
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: 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
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: 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
 
Форум » Игры серии ГТА » Скриптинг » Вопросы по созданию КЛЕО-скриптов 2
Поиск: