Вопросы по созданию скриптов
| |
dim1988 |
Дата: Воскресенье, 19.07.2009, 18:43 | Сообщение # 1 |
Создатель
Группа: Администраторы
Сообщений: 2242
Статус: Offline |
Ответы на самые часто задаваемые вопросы
Как сохранить (компилировать) скрипт? Почему не следует использовать в клео скриптах глобальные переменные? Как узнать координаты мест, через какую прогу? Как поместить игрока в интерьер? Опкод, который открывает все дома в СА Запись в переменную ближайшего педа и проверка его модели Как заставить актёров ходить по определённым координатам Проверка нажатия определённой клавиши Пак пути с анимацией Как сделать так, чтоб 2 миссии следовали друг за другом? Как актёру дать оружие? Как создать транспорт Как создать жёлтый маркер для входа в интерьер? При компиляции выдаёт ошибку перехода на нулевой оффсет,что это и как исправить? Как транспорту присвоить определённый цвет? Что делать если пишет ожидалось 'x' параметров? Как написать цветной текст? Номера костей актёра Что такое gosub? Опкоды, связанные с созданием огня Как изменить оружие банд? Образец добавления в игру объектов Проверка нажатия клавиши в игре и список значений Путь или scmpath Как изменить цвет затемнения экрана? Как записать в переменную случайное число из интервала Список стилей боя Как привязать эффект к кости актёра? Как произвести действия, над педами, созданными игрой Как заменить модель игрока Как заставить актёра поднять руки, как при аресте Сброс анимации Как метнуть объект? Как из одного скрипта запустить другой?
+ файл от пользователя нашего сайта Absolute . Здесь перечислены все вопросы из этой этой темы и ответы на них. Скачать |
|
| |
dim1988 |
Дата: Четверг, 02.02.2012, 08:12 | Сообщение # 2941 |
Создатель
Группа: Администраторы
Сообщений: 2242
Статус: Offline |
Quote (Vadik7) create_thread @grin Эта команда в клео не нужна.
Вместо это в клео надо писать 0A93: end_custom_thread
Mortal Kombat Conquest for GTA SA V2.0 GTA Invasion V2.0 Частная собственность |
|
| |
Scripter100 |
Дата: Четверг, 02.02.2012, 13:37 | Сообщение # 2942 |
Группа: Проверенные
Сообщений: 108
Замечания: 0%
Статус: Offline |
Vadik7, вот тебе исправленная версия:
Code {$CLEO} thread 'grin'
:grin wait 0 if player.defined($PLAYER_CHAR) jf @grin model.Load(#SWMYST) 038B: load_requested_models
:grin_2 wait 0 if model.Available(#SWMYST) jf @grin_2 wait 0 actor.Create(0@,4,#SWMYST,-1985.2096,115.7313,27.6799) Model.Destroy(#SWMYST) 0A93: end_custom_thread
Сообщение отредактировал Scripter100 - Четверг, 02.02.2012, 13:38 |
|
| |
Den_spb |
Дата: Четверг, 02.02.2012, 19:39 | Сообщение # 2943 |
Мастер по скриптингу
Группа: Проверенные
Сообщений: 295
Замечания: 0%
Статус: Offline |
038B сразу загружает объявленные модели, т.е. если используется эта команда, то model.Available можно не писать.
Сообщение отредактировал Den_spb - Четверг, 02.02.2012, 19:39 |
|
| |
Vadik7 |
Дата: Пятница, 03.02.2012, 16:00 | Сообщение # 2944 |
Группа: Проверенные
Сообщений: 40
Замечания: 0%
Статус: Offline |
Благодарю, Дим, запомню и постараюсь использовать теперь эти коды
Quote (dim1988) Quote (Vadik7) create_thread @grin
Эта команда в клео не нужна.
Quote (Vadik7) end_thread
Вместо это в клео надо писать 0A93: end_custom_thread Добавлено (02.02.2012, 21:13) --------------------------------------------- Дружище, спасибо тебе огромное, а то я ещё в скриптинге разбираюсь так же, как свинья в апельсинах Буду пробовать этот поток!
Quote (Scripter100) Vadik7, вот тебе исправленная версия:
Code {$CLEO} thread 'grin'
:grin wait 0 if player.defined($PLAYER_CHAR) jf @grin model.Load(#SWMYST) 038B: load_requested_models
:grin_2 wait 0 if model.Available(#SWMYST) jf @grin_2 wait 0 actor.Create(0@,4,#SWMYST,-1985.2096,115.7313,27.6799) Model.Destroy(#SWMYST) 0A93: end_custom_thread Добавлено (02.02.2012, 21:15) --------------------------------------------- Спасибо за вашу помощь! Quote (Den_spb) 038B сразу загружает объявленные модели, т.е. если используется эта команда, то model.Available можно не писать. Добавлено (02.02.2012, 22:12) --------------------------------------------- Друзья, спасибо, проверил - этот код классно работает, теперь Томми Версетти стоит рядом с вокзалом в Сан Фиеро
Quote (Vadik7) Quote (Scripter100) Vadik7, вот тебе исправленная версия:
Code {$CLEO} thread 'grin'
:grin wait 0 if player.defined($PLAYER_CHAR) jf @grin model.Load(#SWMYST) 038B: load_requested_models
:grin_2 wait 0 if model.Available(#SWMYST) jf @grin_2 wait 0 actor.Create(0@,4,#SWMYST,-1985.2096,115.7313,27.6799) Model.Destroy(#SWMYST) 0A93: end_custom_thread Добавлено (03.02.2012, 16:00) --------------------------------------------- Ребят, подскажите, пожалуйста, какая команда нужна, чтобы присвоить какому-либо актёру защиту от headshot`ов? А то вот от этой почему-то толку нет: 054A: set_actor $Actor immune_to_car_headshots 0 И ещё не могу найти команду, при которой один актер будет пытаться убить(застрелить) другого, при выполнении/невыполнении определенных условий. Заранее спасибо!
Пытаюсь научиться скриптингу) |
|
| |
Scripter100 |
Дата: Суббота, 04.02.2012, 00:34 | Сообщение # 2945 |
Группа: Проверенные
Сообщений: 108
Замечания: 0%
Статус: Offline |
Den_spb, нет, ну я всё же перестрахуюсь а то мало-ли что
|
|
| |
MrMADRYAN |
Дата: Суббота, 04.02.2012, 13:08 | Сообщение # 2946 |
Группа: Проверенные
Сообщений: 387
Замечания: 40%
Статус: Offline |
А можно ли как-то заставить машину ездить по рандомным путям? Я знаю педа можно. |
|
| |
GSoris |
Дата: Суббота, 04.02.2012, 13:17 | Сообщение # 2947 |
Группа: Заблокированные
Сообщений: 56
Замечания: 20%
Статус: Offline |
MrMADRYAN, зайди в ICQ, я напишу)
|
|
| |
Vadik7 |
Дата: Суббота, 04.02.2012, 21:55 | Сообщение # 2948 |
Группа: Проверенные
Сообщений: 40
Замечания: 0%
Статус: Offline |
Всем привет! Ребят, кто-нибудь знает, как сделать так, чтобы, если CJ не выполнит действие (одно и то же) через определенное время, то тогда в силу вступали другие действия. Приведу пример: если CJ не будет платить налог определенному человеку через , например, каждые 7 дней, то тот попытается его убить) Мне нужен именно код вот этого обратного отсчета, который и будет это дело контролировать. Или это набор опкодов? Вообщем я в непонятках, подскажите)
Пытаюсь научиться скриптингу)
Сообщение отредактировал Vadik7 - Суббота, 04.02.2012, 22:38 |
|
| |
dim1988 |
Дата: Воскресенье, 05.02.2012, 09:31 | Сообщение # 2949 |
Создатель
Группа: Администраторы
Сообщений: 2242
Статус: Offline |
Quote (Vadik7) Всем привет! Ребят, кто-нибудь знает, как сделать так, чтобы, если CJ не выполнит действие (одно и то же) через определенное время, то тогда в силу вступали другие действия. Приведу пример: если CJ не будет платить налог определенному человеку через , например, каждые 7 дней, то тот попытается его убить) Мне нужен именно код вот этого обратного отсчета, который и будет это дело контролировать. Или это набор опкодов? Вообщем я в непонятках, подскажите) Я думаю просто отсчёт по типу таймера здесь не поможет. Он может нарушиться из-за сэйвов. Есть способ, но он непростой. Это надо разбираться в работе с памятью. Можно записать в переменную текущий день(начало отсчёта) и далее проверять, когда пройдёт 7 дней.
Mortal Kombat Conquest for GTA SA V2.0 GTA Invasion V2.0 Частная собственность |
|
| |
SPIRITS |
Дата: Воскресенье, 05.02.2012, 09:53 | Сообщение # 2950 |
Группа: Проверенные
Сообщений: 103
Замечания: 0%
Статус: Offline |
Я что то подобное с копами ночью придумал. Сейчас попробую дать малый пример:
Code :test wait 0 if jf @test_2 // тут действия jump @test
:test_2 wait 0 // тут тоже действия jump @test
// Вот теперь всё скажу: Если условия заданные в лабеле test будут выполнены то будут выполнятся команды после jf @test_2 //и потом прыжок на тот же лабел test // А если условия в лабеле test не выполнятся то тогда действия будут выполнятся в лабеле test_2 так как в первом лабеле стоит команда jf @test_2 // котороая прыгнит на тот лабел если условия не будут выполнены |
|
| |
Vadik7 |
Дата: Воскресенье, 05.02.2012, 15:29 | Сообщение # 2951 |
Группа: Проверенные
Сообщений: 40
Замечания: 0%
Статус: Offline |
dim1988, да, действительно из-за сейвов всё провалиться... А вот насчёт записи в переменную текущего дня и проверки этого, я кажется стал понимать, но какие команды для этого нужны, подскажи, пожалуйста. И ещё, как узнать какой день недели в SanAndreas? Quote (dim1988) Я думаю просто отсчёт по типу таймера здесь не поможет. Он может нарушиться из-за сэйвов. Есть способ, но он непростой. Это надо разбираться в работе с памятью. Можно записать в переменную текущий день(начало отсчёта) и далее проверять, когда пройдёт 7 дней.
Добавлено (05.02.2012, 15:29) --------------------------------------------- SPIRITS, спасибо тебе, у меня как раз сейчас подобная конструкция кода, всё клёво, только я вот ещё с проблемами отсчета времени не разобрался, т.е. с их опкодами Quote (SPIRITS) Я что то подобное с копами ночью придумал. Сейчас попробую дать малый пример:
Code
:test wait 0 if jf @test_2 // тут действия jump @test
:test_2 wait 0 // тут тоже действия jump @test
// Вот теперь всё скажу: Если условия заданные в лабеле test будут выполнены то будут выполнятся команды после jf @test_2 //и потом прыжок на тот же лабел test // А если условия в лабеле test не выполнятся то тогда действия будут выполнятся в лабеле test_2 так как в первом лабеле стоит команда jf @test_2 // котороая прыгнит на тот лабел если условия не будут выполнены
Пытаюсь научиться скриптингу)
Сообщение отредактировал Vadik7 - Воскресенье, 05.02.2012, 18:56 |
|
| |
GTAshnik |
Дата: Воскресенье, 05.02.2012, 17:52 | Сообщение # 2952 |
Скриптер
Группа: Проверенные
Сообщений: 109
Замечания: 0%
Статус: Offline |
SPIRITS, в твоём коде как и раз и наблюдается, то о чём и говорил d88, из-за сейва всё сбиваться будет...
Не учите меня жить! Я ещё вас научу! |
|
| |
SPIRITS |
Дата: Воскресенье, 05.02.2012, 18:00 | Сообщение # 2953 |
Группа: Проверенные
Сообщений: 103
Замечания: 0%
Статус: Offline |
GTAshnik, Я привел пример без Таймера а dim1988 говорил про использование таймера |
|
| |
GTAshnik |
Дата: Воскресенье, 05.02.2012, 18:17 | Сообщение # 2954 |
Скриптер
Группа: Проверенные
Сообщений: 109
Замечания: 0%
Статус: Offline |
Quote (SPIRITS) Я привел пример без Таймера а dim1988 говорил про использование таймера. dim1988, сказал же, что таймером здесь не оботись, нужно в памяти ковыряться, чтобы проверить какой день недели в игре и сделать проверку на то, сколько дней уже прошло...
Не учите меня жить! Я ещё вас научу! |
|
| |
Vadik7 |
Дата: Пятница, 17.02.2012, 01:37 | Сообщение # 2955 |
Группа: Проверенные
Сообщений: 40
Замечания: 0%
Статус: Offline |
У меня, впринципе, есть такая задумка, только не знаю, будет ли она работать, и вот в чем она заключается: Код, который привел SPIRITS:
Code
:test wait 0 if jf @test_2 // тут действия jump @test
:test_2 wait 0 // тут тоже действия jump @test
//В лейбле @test задаем условия, при которых CJ заплатил Томми Версетти, иначе переходим на @test_2, в котором Томми убивает CJ. // Если CJ всё же заплатил, то в действиях лейбла @test можно указать действие, которое будет выполнять Версетти определенное время. Например шевелить губами Мы можем сделать это время, равное 10080000 ms, что и будет равняться одной игровой недели, насчет сейвов и всего прочего - не знаю, скорее всего собьется, а вот в ступоре, насколько я понимаю, он стоять не будет, как при использовании wait 10080000. Т.е. при задании правильных условий на то, что при нанесении ущерба Версетти незамедлительно отвечает CJ, действия будут исполняться. Точно не знаю... Простите за этот сумбур Добавлено (17.02.2012, 01:37) --------------------------------------------- Друзья, помогите, пожалуйста! У меня актер 1@ почему то даже и не пытается убить CJ, когда тот переезжает его на машине или врезается на машине в машину 0@. Вот эти 2 лейбла из кода: code ........ // тут другие лейблы
:green_6 wait 0 03C0: $Car = actor $PLAYER_ACTOR car wait 0 if and actor.Driving($PLAYER_ACTOR) 051A: actor 1@ damaged_by_actor $PLAYER_ACTOR 0105: actor $PLAYER_ACTOR near_actor 1@ radius 120.0 120.0 120.0 sphere 0 jf @green_7 // go to label wait 0 07A5: AS_actor 1@ attack_actor $PLAYER_ACTOR 5000 ms wait 0 // go to label
:green_7 wait 0 if and actor.Driving($PLAYER_ACTOR) 051C: car 0@ damaged_by_actor $PLAYER_ACTOR 0105: actor $PLAYER_ACTOR near_actor 1@ radius 120.0 120.0 120.0 sphere 0 jf @green_3 // go to label wait 0 07A5: AS_actor 1@ attack_actor $PLAYER_ACTOR 5000 ms wait 0 jump @green_3 // go to label
Причём я прописывал и такие опкоды, вроде "actor 1@ damaged_by_car $Car" - реакции никакой( Рассчитываю на вашу помощь
Пытаюсь научиться скриптингу) |
|
| |
Den_spb |
Дата: Пятница, 17.02.2012, 23:56 | Сообщение # 2956 |
Мастер по скриптингу
Группа: Проверенные
Сообщений: 295
Замечания: 0%
Статус: Offline |
Надо учиться искать проколы самостоятельно. Сначала проверь, работает ли команда 07A5 - замени Code if and actor.Driving($PLAYER_ACTOR) 051A: actor 1@ damaged_by_actor $PLAYER_ACTOR 0105: actor $PLAYER_ACTOR near_actor 1@ radius 120.0 120.0 120.0 sphere 0 jf @green_7 // go to label на Code if проверка, всегда возвращающая истину jf @green_7 напримерCode if 003B: 0@ == 0@ // (int) jf @green_7 Если актёр начнёт атаковать игрока, то значит не выполняется одна из проверок. Проверки нужно тестировать отдельно, например: Code if 051A: actor 1@ damaged_by_actor $PLAYER_ACTOR jf @green_7 Атака прекратилась? Значит дело в этой проверке.
Или можно пойти другим путём. Проверим, выполняется ли 07A5 с помощью команды вывода текста, которую размещаем рядом с 07A5: Code 0ACD: show_text_highpriority "07A5 is working" time 3000 // CLEO4 07A5: AS_actor 1@ attack_actor $PLAYER_ACTOR 5000 ms Если текст не выводится, значит выполнение кода не доходит до 07A5, а если выводится, то 07A5 тоже выполняется - в этом случае можно попробовать заменить 07A5 на 05E2.
Ну и количество wait-ов надо уменьшать, т.к. каждый wait 0 приостанавливает выполнение скрипта на время до 0,1 сек. В идеале в скрипте должен быть один wait. П.С. Зачем писать 2 раза одинаковый кусок кода?
Сообщение отредактировал Den_spb - Суббота, 18.02.2012, 00:01 |
|
| |
MrMADRYAN |
Дата: Суббота, 18.02.2012, 12:55 | Сообщение # 2957 |
Группа: Проверенные
Сообщений: 387
Замечания: 40%
Статус: Offline |
Den_spb, а есть ли проверка которая вернёт значение типа boolean? (True или False) |
|
| |
Den_spb |
Дата: Суббота, 18.02.2012, 15:30 | Сообщение # 2958 |
Мастер по скриптингу
Группа: Проверенные
Сообщений: 295
Замечания: 0%
Статус: Offline |
Любая проверка и так возвращает True или False. 003B: 0@ == 0@ // (int) всегда вернёт True т.к. сравниваются 2 одинаковых параметра.
Сообщение отредактировал Den_spb - Суббота, 18.02.2012, 15:36 |
|
| |
MrMADRYAN |
Дата: Суббота, 18.02.2012, 18:50 | Сообщение # 2959 |
Группа: Проверенные
Сообщений: 387
Замечания: 40%
Статус: Offline |
Den_spb, ага, спс. Прост я CLEO ужс давно не писал, подзабыл, да и плохой я скриптер. |
|
| |
Vadik7 |
Дата: Суббота, 18.02.2012, 23:05 | Сообщение # 2960 |
Группа: Проверенные
Сообщений: 40
Замечания: 0%
Статус: Offline |
Quote (Den_spb) Надо учиться искать проколы самостоятельно. Сначала проверь, работает ли команда 07A5 - замени Code if and actor.Driving($PLAYER_ACTOR) 051A: actor 1@ damaged_by_actor $PLAYER_ACTOR 0105: actor $PLAYER_ACTOR near_actor 1@ radius 120.0 120.0 120.0 sphere 0 jf @green_7 // go to label
на Code if проверка, всегда возвращающая истину jf @green_7 например Code if 003B: 0@ == 0@ // (int) jf @green_7
Если актёр начнёт атаковать игрока, то значит не выполняется одна из проверок. Проверки нужно тестировать отдельно, например: Code if 051A: actor 1@ damaged_by_actor $PLAYER_ACTOR jf @green_7 Атака прекратилась? Значит дело в этой проверке.
Или можно пойти другим путём. Проверим, выполняется ли 07A5 с помощью команды вывода текста, которую размещаем рядом с 07A5: Code 0ACD: show_text_highpriority "07A5 is working" time 3000 // CLEO4 07A5: AS_actor 1@ attack_actor $PLAYER_ACTOR 5000 ms
Если текст не выводится, значит выполнение кода не доходит до 07A5, а если выводится, то 07A5 тоже выполняется - в этом случае можно попробовать заменить 07A5 на 05E2.
Ну и количество wait-ов надо уменьшать, т.к. каждый wait 0 приостанавливает выполнение скрипта на время до 0,1 сек. В идеале в скрипте должен быть один wait. П.С. Зачем писать 2 раза одинаковый кусок кода?
Den_spb, спасибо, конечно, тебе за советы Только в том то и дело что я не смог найти "проколы", поэтому и обращаюсь к профессионалам Плюс - не забывай, что я в скриптинге "без году неделю", так что ваша помощь мне иногда необходима, для этого ведь и форум Вообщем, насколько я понял, нужно пробовать заменять на подобные опкоды, когда что-то не работает А по какой причине эти опкоды могут не работать, если они существуют, и по идее должны работать? "П.С. Зачем писать 2 раза одинаковый кусок кода?" Отвечаю: в первой же части проверяется нанес ли игрок повреждения актеру, а во втором - нанес ли он повреждения автомобилю (0@)
Пытаюсь научиться скриптингу) |
|
| |
Den_spb |
Дата: Воскресенье, 19.02.2012, 01:19 | Сообщение # 2961 |
Мастер по скриптингу
Группа: Проверенные
Сообщений: 295
Замечания: 0%
Статус: Offline |
Vadik7, советы я дал на будущее. То, что новички не всегда могут найти ошибку в своём коде - это нормально. Но всё же лучше придерживаться принципа: сначала попробовать написать небольшой, но рабочий код, а затем пытаться его усложнить. Quote (Vadik7) Вообщем, насколько я понял, нужно пробовать заменять на подобные опкоды, когда что-то не работает Сначала надо убедиться, что опкод выполняется (исполнение скрипта доходит до этой команды). Если опкод выполняется, а эффекта нет, то возможно эта команда применена неправильно (например, неподходящие значения параметров) или эта команда вообще не подходит для данной ситуации (тогда надо поискать аналоги). Перед тем как использовать какую-то новую команду в скриптах, можно написать небольшой скрипт для тестирования этой команды. Пример: применим 07A5 к ближайшему педу. Code {$CLEO} wait 0 repeat wait 0 until player.Defined($player_char) repeat wait 0 0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@ until 1@ > 0 07A5: AS_actor 1@ attack_actor $PLAYER_ACTOR 10000 ms 0A93: Результат: эффект есть. Следовательно в твоём скрипте исполнение скрипта не доходит до опкода 07A5.
Сообщение отредактировал Den_spb - Воскресенье, 19.02.2012, 01:21 |
|
| |
Vadik7 |
Дата: Воскресенье, 19.02.2012, 21:02 | Сообщение # 2962 |
Группа: Проверенные
Сообщений: 40
Замечания: 0%
Статус: Offline |
Quote (Den_spb) Vadik7, советы я дал на будущее. То, что новички не всегда могут найти ошибку в своём коде - это нормально. Но всё же лучше придерживаться принципа: сначала попробовать написать небольшой, но рабочий код, а затем пытаться его усложнить. Quote (Vadik7) Вообщем, насколько я понял, нужно пробовать заменять на подобные опкоды, когда что-то не работает
Сначала надо убедиться, что опкод выполняется (исполнение скрипта доходит до этой команды). Если опкод выполняется, а эффекта нет, то возможно эта команда применена неправильно (например, неподходящие значения параметров) или эта команда вообще не подходит для данной ситуации (тогда надо поискать аналоги). Перед тем как использовать какую-то новую команду в скриптах, можно написать небольшой скрипт для тестирования этой команды. Пример: применим 07A5 к ближайшему педу. Code {$CLEO} wait 0 repeat wait 0 until player.Defined($player_char) repeat wait 0 0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@ until 1@ > 0 07A5: AS_actor 1@ attack_actor $PLAYER_ACTOR 10000 ms 0A93: Результат: эффект есть. Следовательно в твоём скрипте исполнение скрипта не доходит до опкода 07A5. Круто, спасибо тебе ещё раз Да, то что нужно начать с простого, но работающего скрипта, а дальше его усложнять - это правильно, и я постараюсь придерживаться этого правила, мне кажется оно "основополагающим". Очень хорошо, что в примере показал пример перехода "repeat...until" - тоже иногда очень полезная штука, которую я не использую Значит я в своем скрипте слишком много всего наворотил, что некоторые функции не исполняются Добавлено (19.02.2012, 21:02) --------------------------------------------- Парни, у меня вот такой label, в который включен таймер, он по идее должен быть возрастающим, но он совсем не работает code:
:green_10 wait 0 $gClock == 0 014E: set_timer_to $gClock type 0 if and 0104: actor $PLAYER_ACTOR near_actor 1@ radius 200.0 200.0 200.0 sphere 0 0029: 2@ >= 500 8104: not actor $PLAYER_ACTOR near_actor 1@ radius 1.0 1.0 1.0 sphere 0 8AB0: not key pressed 70 0028: $gClock >= 60000 jf @green_3 wait 0 014F: stop_timer $gClock 05B9: AS_actor 1@ stay_idle 60000 05E2: AS_actor 1@ kill_actor $PLAYER_ACTOR wait 0 jump @green_3
Дело в том, что с таймером, что без него - в моём случае ничего не меняется. Подскажите, пожалуйста, если в таймерах разбираетесь - в чём здесь дело?
Пытаюсь научиться скриптингу) |
|
| |
Den_spb |
Дата: Воскресенье, 19.02.2012, 21:52 | Сообщение # 2963 |
Мастер по скриптингу
Группа: Проверенные
Сообщений: 295
Замечания: 0%
Статус: Offline |
Свои глобальные переменные в клео-скриптах заводить нельзя. Опкоды таймеров в клео тоже не применяются, т.к. требуют использования глобальной переменной. Для отсчёта времени можно использовать переменные-таймеры 32@ и 33@. Значения этих переменных увеличиваются с каждой прошедшей миллисекундой на 1. Пример: создадим у гаража СФ 2 попеременно мигающие короны. Отсчёт времени будем вести с помощью таймера 32@ - в течение первых 0,5 сек будет гореть одна корона, а в течение следующих 0,5 сек - другая. Code {$CLEO} wait 0 while true wait 0 if 32@ < 500 then 04D5: create_corona_at -2025.0844 145.0647 28.8359 radius 0.5 type 1 flare 2 RGB 0 255 0 else 04D5: create_corona_at -2026.0844 145.0647 28.8359 radius 0.5 type 1 flare 2 RGB 255 0 0 end if 32@ > 1000 then 32@ = 0 end end
Сообщение отредактировал Den_spb - Воскресенье, 19.02.2012, 21:52 |
|
| |
Vadik7 |
Дата: Понедельник, 20.02.2012, 00:33 | Сообщение # 2964 |
Группа: Проверенные
Сообщений: 40
Замечания: 0%
Статус: Offline |
Quote (Den_spb) Свои глобальные переменные в клео-скриптах заводить нельзя. Опкоды таймеров в клео тоже не применяются, т.к. требуют использования глобальной переменной. Для отсчёта времени можно использовать переменные-таймеры 32@ и 33@. Значения этих переменных увеличиваются с каждой прошедшей миллисекундой на 1. Пример: создадим у гаража СФ 2 попеременно мигающие короны. Отсчёт времени будем вести с помощью таймера 32@ - в течение первых 0,5 сек будет гореть одна корона, а в течение следующих 0,5 сек - другая. Code {$CLEO} wait 0 while true wait 0 if 32@ < 500 then 04D5: create_corona_at -2025.0844 145.0647 28.8359 radius 0.5 type 1 flare 2 RGB 0 255 0 else 04D5: create_corona_at -2026.0844 145.0647 28.8359 radius 0.5 type 1 flare 2 RGB 255 0 0 end if 32@ > 1000 then 32@ = 0 end end
Благодарю, Den_spb. Сейчас попробую вникнуть в предоставленную тобой, новую для меня информацию. Спасибо за пример. Если что-то не догоню, обязательно спрошу Добавлено (20.02.2012, 00:33) ---------------------------------------------
Quote (Den_spb) Для отсчёта времени можно использовать переменные-таймеры 32@ и 33@. Den_spb, а в чём разница между этими переменными, кроме как во второй цифре числа? Можно любую на выбор использовать? Ещё удивило, что её сразу в условии использовали, т.е. без предыдущего объявления Quote (Den_spb) if 32@ < 500 then Вообщем, попробую теперь эти переменные под свою ситуацию подогнать
Пытаюсь научиться скриптингу) |
|
| |
Den_spb |
Дата: Понедельник, 20.02.2012, 01:19 | Сообщение # 2965 |
Мастер по скриптингу
Группа: Проверенные
Сообщений: 295
Замечания: 0%
Статус: Offline |
Quote (Vadik7) Den_spb, а в чём разница между этими переменными, кроме как во второй цифре числа? Можно любую на выбор использовать? Это две разные переменные, но принцип работы у них одинаковый. Можно использовать любую из них.
Quote (Vadik7) Ещё удивило, что её сразу в условии использовали, т.е. без предыдущего объявления Блок памяти под локальные переменные (X@) выделяется в момент начала игры (при запуске сохранения), при этом во все переменные записывается 0 (если, конечно, значения переменных не были сохранены в клео-сейве при последнем сохранении игры).
Сообщение отредактировал Den_spb - Понедельник, 20.02.2012, 01:28 |
|
| |
Vadik7 |
Дата: Понедельник, 20.02.2012, 02:04 | Сообщение # 2966 |
Группа: Проверенные
Сообщений: 40
Замечания: 0%
Статус: Offline |
Quote (Den_spb) Это две разные переменные, но принцип работы у них одинаковый. Можно использовать любую из них. Спасибо, Den_spb!
Quote (Den_spb) Блок памяти под локальные переменные (X@) выделяется в момент начала игры (при запуске сохранения), при этом во все переменные записывается 0 (если, конечно, значения переменных не были сохранены в клео-сейве при последнем сохранении игры). Ага... А значит ли это, что если я например сохраню игру, когда значение переменной 32@ будет равно, например, 60000, то при загрузке этого сохранения значение переменной начнёт увеличиваться с числа 60000? Или я сейчас тупость сморозил и сохранения в "клео-сейве" применимо не для всех переменных? Добавлено (20.02.2012, 02:04) --------------------------------------------- P.S. Den_Spb, а вчерашняя проблема решена(это где 1@ не атаковал CJ, когда тот сбивал его на машине), спасибо, я последовал совету разгрузить label, и теперь всё заработало. Вот теперь с 32@ и 33@ буду пробовать
Пытаюсь научиться скриптингу) |
|
| |
Den_spb |
Дата: Понедельник, 20.02.2012, 02:23 | Сообщение # 2967 |
Мастер по скриптингу
Группа: Проверенные
Сообщений: 295
Замечания: 0%
Статус: Offline |
Значения переменных скрипта записываются в клео-сейв при сохранении игры только в том случае, если в скрипте был выполнен опкод 0A95. Сохраняются ли значения переменных 32@ и 33@ в клео-сейве - не знаю, я этим не интересовался. |
|
| |
Vadik7 |
Дата: Понедельник, 20.02.2012, 18:32 | Сообщение # 2968 |
Группа: Проверенные
Сообщений: 40
Замечания: 0%
Статус: Offline |
Quote (Den_spb) Значения переменных скрипта записываются в клео-сейв при сохранении игры только в том случае, если в скрипте был выполнен опкод 0A95. Сохраняются ли значения переменных 32@ и 33@ в клео-сейве - не знаю, я этим не интересовался. Понятно, спасибо за полезную информацию, Den_spb!Добавлено (20.02.2012, 18:32) --------------------------------------------- Den_spb, переменные 32@ & 33@ - просто супер, только с помощью них и благодаря тебе удалось решить, казалось нерешаемую проблему отсчета времени! Я тебя респектую, дружище! Ты не против, если я в readme к скрипту напишу, что ты помогал? Ещё раз спасибо
Пытаюсь научиться скриптингу) |
|
| |
Den_spb |
Дата: Понедельник, 20.02.2012, 19:00 | Сообщение # 2969 |
Мастер по скриптингу
Группа: Проверенные
Сообщений: 295
Замечания: 0%
Статус: Offline |
Quote (Vadik7) Ты не против, если я в readme к скрипту напишу, что ты помогал? Как хочешь, вообще это необязательно
Quote (Vadik7) Ещё раз спасибо На здоровье. |
|
| |
McSim |
Дата: Суббота, 25.02.2012, 13:14 | Сообщение # 2970 |
Группа: Пользователи
Сообщений: 4
Замечания: 0%
Статус: Offline |
Здравствуйте, у меня тут навеяло три вопроса: 1. Как можно воспроизвести анимацию рук персонажа (наверняка, видели у банд, когда они меж собой разговаривают, могут пальцами всякие жесты показывать)? Список анимаций рук: Code Файл GHANDS.IFP: 1. gsign1, gsign1LH (жестовые анимации самого персонажа) - LHGsign1 (анимация левой руки персонажа), RHGsign1 (анимация, следовательно, правой руки) и.т.д. до gsign5 (включительно) 2. Можно ли её воспроизводить на CJ'e? 3. Можно-ли использовать жестовые анимации руки с другими анимациями самого персонажа, помиму gsignX? (Мне это не обязательно, но на будущее может пригодится) |
|
| |
|