Скрипты для GTA от dim1988 aka d88

Главная | Регистрация | Вход

Приветствую Вас Гость | RSS
[Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Скрипты » Всё о клео скриптах » Вопросы по созданию скриптов
Вопросы по созданию скриптов
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

Эта команда в клео не нужна.

Quote (Vadik7)
end_thread

Вместо это в клео надо писать 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
Благодарю, Дим, запомню и постараюсь использовать теперь эти коды smile

Quote (dim1988)
Quote (Vadik7)
create_thread @grin

Эта команда в клео не нужна.

Quote (Vadik7)
end_thread

Вместо это в клео надо писать 0A93: end_custom_thread

Добавлено (02.02.2012, 21:13)
---------------------------------------------
Дружище, спасибо тебе огромное, а то я ещё в скриптинге разбираюсь так же, как свинья в апельсинах smile Буду пробовать этот поток!

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)
---------------------------------------------
Спасибо за вашу помощь! smile

Quote (Den_spb)
038B сразу загружает объявленные модели, т.е. если используется эта команда, то model.Available можно не писать.

Добавлено (02.02.2012, 22:12)
---------------------------------------------
Друзья, спасибо, проверил - этот код классно работает, теперь Томми Версетти стоит рядом с вокзалом в Сан Фиеро biggrin

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 sad И ещё не могу найти команду, при которой один актер будет пытаться убить(застрелить) другого, при выполнении/невыполнении определенных условий. Заранее спасибо! smile


Пытаюсь научиться скриптингу)
 
 
Scripter100 Дата: Суббота, 04.02.2012, 00:34 | Сообщение # 2945
Группа: Проверенные
Сообщений: 108
Замечания: 0%
Статус: Offline
Den_spb, нет, ну я всё же перестрахуюсь а то мало-ли что biggrin

 
 
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
Всем привет! smile Ребят, кто-нибудь знает, как сделать так, чтобы, если 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, спасибо тебе, у меня как раз сейчас подобная конструкция кода, всё клёво, только я вот ещё с проблемами отсчета времени не разобрался, т.е. с их опкодами smile
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 можно указать действие, которое будет выполнять Версетти определенное время. Например шевелить губами smile Мы можем сделать это время, равное 10080000 ms, что и будет равняться одной игровой недели, насчет сейвов и всего прочего - не знаю, скорее всего собьется, а вот в ступоре, насколько я понимаю, он стоять не будет, как при использовании wait 10080000. Т.е. при задании правильных условий на то, что при нанесении ущерба Версетти незамедлительно отвечает CJ, действия будут исполняться. Точно не знаю... Простите за этот сумбур biggrin

Добавлено (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" - реакции никакой( Рассчитываю на вашу помощь smile


Пытаюсь научиться скриптингу)
 
 
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, спасибо, конечно, тебе за советы smile Только в том то и дело что я не смог найти "проколы", поэтому и обращаюсь к профессионалам cool Плюс - не забывай, что я в скриптинге "без году неделю", так что ваша помощь мне иногда необходима, для этого ведь и форум wacko Вообщем, насколько я понял, нужно пробовать заменять на подобные опкоды, когда что-то не работает wacko А по какой причине эти опкоды могут не работать, если они существуют, и по идее должны работать? "П.С. Зачем писать 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.

Круто, спасибо тебе ещё раз smile Да, то что нужно начать с простого, но работающего скрипта, а дальше его усложнять - это правильно, и я постараюсь придерживаться этого правила, мне кажется оно "основополагающим". Очень хорошо, что в примере показал пример перехода "repeat...until" - тоже иногда очень полезная штука, которую я не использую dry Значит я в своем скрипте слишком много всего наворотил, что некоторые функции не исполняются sad

Добавлено (19.02.2012, 21:02)
---------------------------------------------
Парни, у меня вот такой label, в который включен таймер, он по идее должен быть возрастающим, но он совсем не работает sad
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. Сейчас попробую вникнуть в предоставленную тобой, новую для меня информацию. Спасибо за пример. Если что-то не догоню, обязательно спрошу smile

Добавлено (20.02.2012, 00:33)
---------------------------------------------

Quote (Den_spb)
Для отсчёта времени можно использовать переменные-таймеры 32@ и 33@.

Den_spb, а в чём разница между этими переменными, кроме как во второй цифре числа? Можно любую на выбор использовать? Ещё удивило, что её сразу в условии использовали, т.е. без предыдущего объявления
Quote (Den_spb)
 if
         32@ < 500
     then

Вообщем, попробую теперь эти переменные под свою ситуацию подогнать smile


Пытаюсь научиться скриптингу)
 
 
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? Или я сейчас тупость сморозил и сохранения в "клео-сейве" применимо не для всех переменных? wacko

Добавлено (20.02.2012, 02:04)
---------------------------------------------
P.S. Den_Spb, а вчерашняя проблема решена(это где 1@ не атаковал CJ, когда тот сбивал его на машине), спасибо, я последовал совету разгрузить label, и теперь всё заработало. Вот теперь с 32@ и 33@ буду пробовать smile


Пытаюсь научиться скриптингу)
 
 
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 к скрипту напишу, что ты помогал? Ещё раз спасибо smile


Пытаюсь научиться скриптингу)
 
 
Den_spb Дата: Понедельник, 20.02.2012, 19:00 | Сообщение # 2969
Мастер по скриптингу
Группа: Проверенные
Сообщений: 295
Замечания: 0%
Статус: Offline
Quote (Vadik7)
Ты не против, если я в readme к скрипту напишу, что ты помогал?

Как хочешь, вообще это необязательно smile

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? (Мне это не обязательно, но на будущее может пригодится)
 
 
Форум » Скрипты » Всё о клео скриптах » Вопросы по созданию скриптов
Поиск:

Copyright dim1988 aka d88 © 2024
Сайт управляется системой uCoz