Воскресенье, 24.11.2024, 15:21
Качественные скрипты, моды и дополнения для GTA без регистрации
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Вопросы по созданию КЛЕО-скриптов 2
АртёмДата: Воскресенье, 25.03.2012, 19:32 | Сообщение # 46
Группа: Пользователи
Сообщений: 90
Статус: Offline
izerli, скрипт почему-то вылетает:(

Делаю новый мод Greatland
 
Den_spbДата: Воскресенье, 25.03.2012, 20:31 | Сообщение # 47
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
Покажи весь код.
 
ILYALIONДата: Воскресенье, 25.03.2012, 20:48 | Сообщение # 48
Группа: Проверенные
Сообщений: 325
Статус: Offline
Всегда ли в конструкции
Code
repeat
        ...           
until
нужен wait? В каких случаях он обязателен?
 
АртёмДата: Воскресенье, 25.03.2012, 21:10 | Сообщение # 49
Группа: Пользователи
Сообщений: 90
Статус: Offline
Den_spb,
Code
{$VERSION 3.1.0027}
{$CLEO .cs}
0000:
model.Load(#BFYRI) // объявление модели для загрузки  
  038B: load_requested_models // загрузка объявленных моделей  
  009A: 0@ = create_actor_pedtype 4 model #BFYRI at -1299.5438 1303.8861 2.4844 // создание человека  
  model.Destroy(#BFYRI) // выгрузка модели из памяти


Делаю новый мод Greatland
 
Den_spbДата: Воскресенье, 25.03.2012, 22:30 | Сообщение # 50
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
Quote (ILYALION)
нужен wait?

Чтобы знать, когда нужно применять wait, надо понимать, какое назначение у этой команды. Wait - приостановка действия скрипта с целью отработки других скриптов и нескриптовых процессов exe (проверка нажатия клавиш, отрисовка и т.д.). Wait необходим в бесконечном цикле или в цикле с проверкой, результат которой не может измениться без влияния нескриптовых процессов exe. Это правило едино для всех видов циклов - с предусловием, с постусловием и т.д.

Пример 1:
Code
repeat            
                   wait 0                      
until false
В данном случае имеем бесконечный цикл. Здесь необходимо употребить wait, иначе скрипт будет выполняться без остановки - в этом случае нескриптовые процессы (отрисовка, проверка нажатия клавиш и т.д.) выполняться не будут (т.е. зависнет игра).

Пример 2:
Code
model.load(506)
repeat            
                   wait 0                      
until model.available(506)
Здесь также необходимо употребить wait, т.к. модели загружаются по команде exe, а не скрипта (model.load не загружает модели, а только ставит их в очередь на загрузку). Если wait не выполняется, то модели не загружаются - в результате получается бесконечный цикл и игра зависает.
П.С. Пример немного неактуален, т.к. можно просто применить опкод 038B: (принудительная загрузка объявленных моделей) - в этом случае цикл с model.available не нужен.

Пример 3:
Code
repeat            
                   0@ += 1                      
until 0@ > 1000000
А вот здесь wait не нужен, т.к. действие, необходимое для изменения результата проверки, выполняется самим скриптом - бесконечного цикла тут нет.

Артём, в конце скрипта надо писать команду завершения 0A93:
 
Den_spbДата: Понедельник, 26.03.2012, 04:59 | Сообщение # 51
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
Дополнение про wait.
В справке Sanny Builder иногда встречаются подобные примеры:
Code
команда 1
wait 500 // ждём на всякий случай
команда 2

Так вот, употреблять wait чтобы дождаться результата выполнения первой команды не нужно, т.к. любая команда скрипта выполняется сразу же (пока команда не выполнилась, игровой процесс дальше не пойдёт, т.к. exe в любой момент времени выполняет только одну задачу - либо скрипт, либо отрисовку, либо ещё что-то).
По этой же причине проверку на существование чего-либо можно не повторять до тех пор, пока не будет выполнен wait (объект может быть удалён другим скриптом или игрой, но другие скрипты и игра будут работать тогда, когда в текущем скрипте встретится wait).
 
АртёмДата: Понедельник, 26.03.2012, 12:40 | Сообщение # 52
Группа: Пользователи
Сообщений: 90
Статус: Offline
Den_spb, всё равно вылетает:(

Делаю новый мод Greatland
 
Den_spbДата: Понедельник, 26.03.2012, 23:51 | Сообщение # 53
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
Такой у тебя код?

{$CLEO .cs}
0000:
model.Load(#BFYRI) // объявление модели для загрузки
038B: load_requested_models // загрузка объявленных моделей
009A: 0@ = create_actor_pedtype 4 model #BFYRI at -1299.5438 1303.8861 2.4844 // создание человека
model.Destroy(#BFYRI) // выгрузка модели из памяти
0A93:

Тут всё правильно, вылетать не из-за чего. Посмотри scmlog, может из-за другого скрипта вылетает.
 
АртёмДата: Вторник, 27.03.2012, 19:03 | Сообщение # 54
Группа: Пользователи
Сообщений: 90
Статус: Offline
Ладно, Ден, разберусь сейчас biggrin

Добавлено (27.03.2012, 17:59)
---------------------------------------------
Да, извини, всё правильно, это моя карта поехала)

Добавлено (27.03.2012, 19:03)
---------------------------------------------
Den_spb, в чём проблема(не совсем соображаю :D) : [code]
{$CLEO .cs}
0000:
model.Load(#FAM1)
038B: load_requested_models
009A: 0@ = create_actor_pedtype 4 model #FAM1 at -1299.5438 1303.8861 2.4844
model.Destroy(#FAM1)
0A93:
actor -1 perform_animation_sequence "CASINO" from_file "MANWIND" 4.0 loop 1 0 0 1 -1 ms


Делаю новый мод Greatland
 
ILYALIONДата: Вторник, 27.03.2012, 19:08 | Сообщение # 55
Группа: Проверенные
Сообщений: 325
Статус: Offline
Артём, опкод 0A93: всегда должен стоять в самом конце скрипта.

Добавлено (27.03.2012, 19:08)
---------------------------------------------
И почему у тебя анимацию выполняет актёр -1, а не 0@?

 
АртёмДата: Вторник, 27.03.2012, 19:08 | Сообщение # 56
Группа: Пользователи
Сообщений: 90
Статус: Offline
Исправил, всё равно ошибка

Делаю новый мод Greatland
 
ILYALIONДата: Вторник, 27.03.2012, 19:21 | Сообщение # 57
Группа: Проверенные
Сообщений: 325
Статус: Offline
Добавь проверку, существует ли актёр 0@, перед тем как присваивать ему анимацию.

Добавлено (27.03.2012, 19:21)
---------------------------------------------
И в начале добавь проверку на существование игрока.


Сообщение отредактировал ILYALION - Вторник, 27.03.2012, 19:21
 
Den_spbДата: Вторник, 27.03.2012, 19:29 | Сообщение # 58
Создатель сайта
Группа: Администраторы
Сообщений: 1600
Статус: Offline
Прежде чем применять анимацию, надо её загрузить (см. Анимации для актёров в Справке СБ)
Code
{$CLEO .cs}   
0000:
04ED: load_animation "CASINO"
repeat
      wait 0
until 04EE: animation "CASINO" loaded   
model.Load(#FAM1)   
038B: load_requested_models   
009A: 0@ = create_actor_pedtype 4 model #FAM1 at -1299.5438 1303.8861 2.4844   
model.Destroy(#FAM1)   
0605: actor 0@ perform_animation_sequence "MANWIND" from_file "CASINO" 4.0 loop 1 0 0 0 -1 ms
0A93:
 
АртёмДата: Вторник, 27.03.2012, 20:09 | Сообщение # 59
Группа: Пользователи
Сообщений: 90
Статус: Offline
Спасибо, что разъяснил.

Добавлено (27.03.2012, 20:09)
---------------------------------------------
Только у меня почему-то пед тонет в воду как его высоко не ставишь)


Делаю новый мод Greatland
 
ILYALIONДата: Вторник, 27.03.2012, 20:19 | Сообщение # 60
Группа: Проверенные
Сообщений: 325
Статус: Offline
Артём, добавь проверку на нахождение игрока в радиусе, скажем, 200 метров от точки создания актёра. Тогда карта там прогрузится и всё будет нормально.
 
Поиск: