Вопросы по созданию КЛЕО-скриптов 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
| Всегда ли в конструкции нужен 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
| Ладно, Ден, разберусь сейчас Добавлено (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 метров от точки создания актёра. Тогда карта там прогрузится и всё будет нормально.
|
|
| |