Суббота, 20.04.2024, 12:53
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Игры серии ГТА » Скриптинг » Вопросы по созданию КЛЕО-скриптов (Вопросы по опкодам, кодингу и др.)
Вопросы по созданию КЛЕО-скриптов
VitalДата: Понедельник, 02.01.2012, 19:05 | Сообщение # 1126
Группа: Проверенные
Сообщений: 206
Статус: Offline
Аксиома,

А теперь мой вопрос. Почему игра вылетает на вот этом кусочке кода (я точно рассчитал, что именно здесь, так как текст не выводится, значит вылетает здесь)
Вот часть кода, где происходит вылет.


SCRIPTER
 
АксиомаДата: Понедельник, 02.01.2012, 19:17 | Сообщение # 1127
Группа: Заблокированные
Сообщений: 81
Статус: Offline
Vital, Но если я хочу вывести эффект, например у ширинки Карла допустим как узнать X Y Z

Добавлено (02.01.2012, 19:17)
---------------------------------------------
И вот вопрос

Вот если я написал такой скрипт допустим что при нажатий клавиши игрок превращается в другого актёра (Модель: #MALE01) и при нажатий клавиши он снова становиться игроком.(Модель: #NULL)
И вот как такую сделать проверку если сейчас игрок в модели #MALE01 то как такую проверку сделать если игрок в модели #MALE01 ?

 
Den_spbДата: Понедельник, 02.01.2012, 19:55 | Сообщение # 1128
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Quote (Vital)
А теперь мой вопрос. Почему игра вылетает на вот этом кусочке кода (я точно рассчитал, что именно здесь, так как текст не выводится, значит вылетает здесь)
Я ошибок не вижу. Надо точно узнать, на какой команде происходит вылет. Проще всего воспользоваться ScmLog, но можно применить и другие методы - например, вставить перед подозрительной командой присвоение игроку денег и задержку - если деньги не присваиваются, значит вылет происходит ещё раньше.

Quote (Аксиома)
если игрок в модели #MALE01 ?
02F2: actor 164@ model == #MALE01
 
АксиомаДата: Понедельник, 02.01.2012, 20:48 | Сообщение # 1129
Группа: Заблокированные
Сообщений: 81
Статус: Offline
почему ни чего не происходит?

Code
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007

{$VERSION 3.1.0027}
{$CLEO .cs}

//-------------MAIN---------------
0001: wait 100 ms  

:NONAME_4
0001: wait 0 ms  
00D6: if and
056D:   actor 0@ defined  
0118:   actor 0@ dead  
004D: jump_if_false @NONAME_4  
0002: jump @NONAME_36  

:NONAME_36
0001: wait 0 ms  
00D6: if  
02F2:   actor 0@ model == #LAPD1  
02F2:   actor 0@ model == #fam1
02F2:   actor 0@ model == #fam2  
004D: jump_if_false @NONAME_36  
00A0: store_actor 0@ position_to 1@ 2@ 3@  
020C: create_explosion_with_radius 1 at 1@ 2@ 3@  
0948: create_explosion_at 1@ 2@ 3@ type 5 camera_shake 1  
0001: wait 900 ms  
0002: jump @NONAME_4  

игрок убивает но эффекта нет
 
VitalДата: Понедельник, 02.01.2012, 21:12 | Сообщение # 1130
Группа: Проверенные
Сообщений: 206
Статус: Offline
Аксиома,

Den_spb, судя по проверке (вставлял звуки после подозрительных команд). В итоге вышло, что виной вывод текста. Можно ли в тексте в качестве параметра (в текстах ~1~) использовать текст? А именно - название района. Или вывод нужно осуществлять отдельно?
Я, конечно, сперва сам попробую, если все будет нормально, скажу.


SCRIPTER
 
АксиомаДата: Понедельник, 02.01.2012, 21:49 | Сообщение # 1131
Группа: Заблокированные
Сообщений: 81
Статус: Offline
Code
{$CLEO .cs}

//-------------MAIN---------------
0001: wait 100 ms  

:NONAME_4
0001: wait 0 ms  
0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 1@ closest_ped_to 0@  
00D6: if  
0039:   0@ == -1  
004D: jump_if_false @NONAME_4  
0002: jump @NONAME_44  

:NONAME_44
0001: wait 0 ms  
00D6: if and
056D:   actor 0@ defined  
0118:   actor 0@ dead  
004D: jump_if_false @NONAME_44  
0002: jump @NONAME_76  

:NONAME_76
0001: wait 0 ms  
00D6: if or
02F2:   actor 0@ model == #LAPD1  
02F2:   actor 0@ model == #FAM1  
02F2:   actor 0@ model == #FAM2  
004D: jump_if_false @NONAME_76  
00A0: store_actor 0@ position_to 1@ 2@ 3@  
020C: create_explosion_with_radius 1 at 1@ 2@ 3@  
0948: create_explosion_at 1@ 2@ 3@ type 5 camera_shake 1  
0001: wait 900 ms  
0002: jump @NONAME_4  

Всё равно ни чего не происходит
 
Den_spbДата: Понедельник, 02.01.2012, 22:14 | Сообщение # 1132
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
004D: jump_if_false @NONAME_76 и 004D: jump_if_false @NONAME_44 замени на jf @NONAME_4
 
VitalДата: Понедельник, 02.01.2012, 22:18 | Сообщение # 1133
Группа: Проверенные
Сообщений: 206
Статус: Offline
Попробуй так:

Теперь поясню. В начале берем случайного актера. Если его не нашли, или он убит, идем заново. Потом проверяем модель. Если проверка идет нормально, взрываем актера и удаляем из памяти сведения о нем, чтобы не было глюков. Если проверка не проходит удачно, идем в специальную метку, где удаляем сведения об актере и идем в самое начало, чтобы искать новых актеров для действий.
Символом // в программе (это после текста каждого опкода) пишутся комментарии, пояснения и т.п. Они не учитываются программой, так что, если они не нужны, их можно удалить. (только //и текст после этих двух фигней)

Den_spb, Все в порядке, скрипт работает, исправил.


SCRIPTER
 
Den_spbДата: Понедельник, 02.01.2012, 22:28 | Сообщение # 1134
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Одно замечание - 0AB5 не делает машину или актёра уникальным, поэтому команды removereferences можно убрать.
И после каждой метки не обязательно писать wait - достаточно одного wait-а на весь скрипт.
 
АксиомаДата: Понедельник, 02.01.2012, 22:46 | Сообщение # 1135
Группа: Заблокированные
Сообщений: 81
Статус: Offline
Да но wait обязательно надо писать перед операторами IF , IF OR , IF AND
Иначе будет вылет я проверял

Добавлено (02.01.2012, 22:46)
---------------------------------------------
Ну почти всегда, надо писать в начале метки

:test
if

это будет вылет

:test
wait 0
if

вот это правильно

 
VitalДата: Понедельник, 02.01.2012, 22:55 | Сообщение # 1136
Группа: Проверенные
Сообщений: 206
Статус: Offline
Аксиома, он имел в виду, что не надо писать повсюду. Перед проверками действительно нужно, а остальное можно убрать. Хотя у меня это уже привычка biggrin

SCRIPTER
 
Den_spbДата: Понедельник, 02.01.2012, 23:41 | Сообщение # 1137
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Посмотрите исходники моих скриптов. Например, "Оживление компонентов моделей вагонов" - 720 строк, куча проверок, и только один wait на весь код. Скрипт прекрасно работает.
Любой скрипт нужно строить так, чтобы в нём иногда выполнялась команда wait - благодаря ей выполнение текущего скрипта приостанавливается, после чего по очереди отрабатывают другие установленные скрипты и нескриптовые процессы игры (отрисовка, проверки нажатия клавиш и т.д.). Если wait никогда не выполняется, то не работают и нескриптовые процессы - в результате игра зависает.
 
АксиомаДата: Вторник, 03.01.2012, 13:28 | Сообщение # 1138
Группа: Заблокированные
Сообщений: 81
Статус: Offline
Вот такой вопрос с миссиями
Я делал миссий из одной статьи

Quote
Как запустить файл .cm(Создание триггера).

Сначала создаём обычный файл .cs В нём пишем условия, при которых должна начаться миссия, например

Code
:NONAME_11
wait 0
if
Player.Defined($PLAYER_CHAR)
else_jump @NONAME_11
wait 0
if
$ONMISSION == 0
else_jump @NONAME_11
if
0102: actor $PLAYER_ACTOR in_sphere 24.9859 2346.989 24.1347 radius 2.0 2.0 1.0 sphere 1 stopped_on_foot
else_jump @NONAME_11

$ONMISSION – это глобальная переменная, отвечающая за режим игры. Если $ONMISSION == 0, то это обычный режим, если $ONMISSION == 1, то это режим миссии.

Итак, если условия выполнены, запускаем миссию. Включаем режим миссии командой

Code
$ONMISSION = 1

и активируем файл с миссией. Допустим, этот файл называется «Missia». Тогда надо написать так

Code

0A94: start_custom_mission "Missia"

Понятно, что в кавычках название файла
Далее нужно сделать проверку на законченность миссии. Делаем так

Code
:NONAME_15
wait 0
if
$ONMISSION == 0
else_jump @NONAME_15

Если условие выполнится, то можно либо вернуть скрипт к началу, либо закончить командой

Code
0A93: end_custom_thread

Теперь перейдём к файлу .cm

Code
{$CLEO .cm} //Указываем директиву

thread 'missia' //Пишем название

Далее пишем команду

Code
increment_mission_attempts

Можно ещё раз написать
Code
$ONMISSION = 1

Далее сама миссия. Можно сделать любую миссию. Например создать актёра, которого нужно убить, или машину, которую нужно угнать и привезти куда-то.

Делаем проверку, выполнено ли то, что задумано в миссии, и выключаем режим миссии

Code
$ONMISSION = 0

Когда эта команда выполнится, файл .cs, который мы создали в начале, продолжит работу.
Теперь завершаем поток в файле .cm командами

Code
mission_cleanup
end_thread

Всё получается но даже если поставить в конце end_thread что миссия закончилась на всегда то если сохраниться и загрузить игру то можно заново пройти миссию как это исправить, и если можете то покажите как писать миссию в main что бы не грузить Cleo
 
Den_spbДата: Вторник, 03.01.2012, 13:32 | Сообщение # 1139
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
Заведи какую-нибудь глобальную переменную, в которую будет записываться определённое значение при успешном прохождении миссии. В стартере миссии проверяй значение этой переменной.
 
VitalДата: Вторник, 03.01.2012, 17:23 | Сообщение # 1140
Группа: Проверенные
Сообщений: 206
Статус: Offline
Den_spb, так ведь в cleo не рекомендуется использовать глобальные переменные? Можно двумя другими путями:
1) Взять какую-нибудь неиспользуемую игрой статистику и менять ее значени (0-миссия не начата, 1-миссия пройдена) и считывать значение, проверять его.
2) Если есть CLEO 4, можно создать .ini файл, куда можно записать значение переменной, отвечающей за прохождение миссии
---
Хотя, стойте. Ведь, чтобы скрипт сохранял свое состояние (именно стартер, ведь миссия .cm запускается по нему) перед кодом скрипта нужно поставить опкод
0A95: enable_thread_saving
И тогда (вроде бы) скрипт будет сохранять свое состояние в папке cleo_saves (или как-то так). Если скрипт завершен, то при следующей загрузке игры он не будет повторяться.


SCRIPTER
 
Форум » Игры серии ГТА » Скриптинг » Вопросы по созданию КЛЕО-скриптов (Вопросы по опкодам, кодингу и др.)
Поиск: