[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Как писать "Cleo" скрипты.
MISTER_DNOWNIKДата: Суббота, 13.10.2012, 21:04 | Сообщение # 1
Нет аватара
Пользователь

Сообщений: 41
Награды: 1


« 20 »

Оффлайн
Снова здраствуйте. сегодня мы продолжим урок.
открываем сохранённый name.txt
итак. начнем с переменных.

переменные - это такие "ячейки" или "сейфы", куда можно "положить" любое число
в переменных могут записываеться как реальные значения (1, 574, 15,10 да и вообще все рациональные числа), так и определённые ID (например транспорт, актёр и т.п)
сначало поговорим об рациональных переменных.
чтобы записать в переменную число достаточно использовать этот опкод
1@ = 100
это означает что в "ячейку" под номером 1 мы положили число 100
5@ = 100
а это в ячейку 5
существуют локальные и глобальные переменные
всего в cleo скрипте 34 локальных переменных.
от 0@ до 33@
это заветные локальные 34 переменные дают нам 100% гарантию что игра не вылетит из-за непонятных ошибок.
глобальных переменных неограниченное колличество (используйте хоть 999999@), но помните: весть транспорт,актёры, и другие важные связуемые которые будете использовать не записывайте в глобальные переменные! иначе будут вылеты!
теперь рассмотрим действия. т.е. что можно в принципе делать с переменными:
представим что 1@ это текущая координата игрока по оси Z, или проще говоря высота. мы собираемся сделать телепорт на 10.0 едениц выше.
и мы к переменной 1@ прибавляем число 10.0 - 1@ += 10.0
при работе с координатами обязательно используйте дробное число! координаты использую дробные числа. и даже если вы хотите прибавить 10, то нужно прописывать 10.0
так же есть дейсвия вычитания 1@ -= 10.0
умножения, деления и т.д.

теперь перейдём к практике

смотрим в программу. там мы видим:

{$CLEO}
thread "name"
0662: NOP "name"

:Name_1
wait 0
if
0AB0: key_pressed 74
jf @Name_1
Actor.Health($PLAYER_ACTOR) = 100
jump @Name_1

теперь мы будем делать телепорт.
стираем отпкод Actor.Health($PLAYER_ACTOR) = 100
и пишем вместо него следующий код
Actor.StorePos($PLAYER_ACTOR, 0@, 1@, 2@)
2@ += 10.0
Actor.PutAt($PLAYER_ACTOR, 0@, 1@, 2@)

теперь разжуём
Actor.StorePos($PLAYER_ACTOR, 0@, 1@, 2@)
этот опкод записывает координаты игрока $PLAYER_ACTOR (т.е. игрка которым мы играем) в переменные 0@, 1@ и 2@
0@ - X (длинна)
1@ - Y (ширина)
2@ - Z (высота)
едем дальше
2@ += 10.0
к высоте прибавляем 10.0
Actor.PutAt($PLAYER_ACTOR, 0@, 1@, 2@)
телепортируем актёра $PLAYER_ACTOR на координаты 0@, 1@ и 2@.
получаеться что мы сделали телепорт на 10.0 едениц выше своего собственного местонахождения
так же в опкод Actor.PutAt($PLAYER_ACTOR, 0@, 1@, 2@)
вместо переменных можно написать свои значения. например нужно телепортироваться в одно место.

в общем должно быть как то так:
{$CLEO}
thread "name"
0662: NOP "name"

:Name_1
wait 0
if
0AB0: key_pressed 74
jf @Name_1
Actor.StorePos($PLAYER_ACTOR, 0@, 1@, 2@)
2@ += 10.0
Actor.PutAt($PLAYER_ACTOR, 0@, 1@, 2@)
jump @Name_1

чтож. пора свой скрипт испытать! нажимаем кнопку файл>сохранить
затем запуск> компилировать.
вылезет окошко: report
на нём будет написано mail size.. и т.п.
это означает что всё сделано правилньо и грубых ошибок нет. теперь файл с расширением .cs забрасываем в папку cleo и тестим чит!

Всё рабатает? отлично!

теперь я вам расскажу про оставшиеся перменные про актёров и машин.
есть такой опкод:
03C0: 0@ = actor $PLAYER_ACTOR car
(писать вместе с циферками 03C0:)
он означает что переменная 0@ присваивает значение машины, в которой сидит игрок $PLAYER_ACTOR
думаю это понятно.
сейчас напишем такой чит: вы едите, вдруг вам нужно выйти. вы нажимаете кнопку - машина сохраняеться в переменную.
вы гденить бродите, потом нажимаете клавижу и вауля вы снова в своей машине.

Сначало код:

{$CLEO}
thread "name"
0662: NOP "name"

:Name_1
wait 0
if and
0AB0: key_pressed 74
00DF: actor $PLAYER_ACTOR driving
jf @Name_1
03C0: 0@ = actor $PLAYER_ACTOR car
jump @Name_2
:Name_2
wait 0
if
0AB0: key_pressed 74
jf @Name_2
if
056E: car 0@ defined
jf @Name_1
036A: put_actor $PLAYER_ACTOR in_car 0@
jump @Name_1

а теперь расжовываем.

if and
0AB0: key_pressed 74
00DF: actor $PLAYER_ACTOR driving
jf @Name_1

если в условии написать if and то скрипт пойдёт дальше только в том случае, если все следующие условия буду верны, если какое то условие не соблюдаеться то возращение назад
опкод
00DF: actor $PLAYER_ACTOR driving
проверяет находиться ли актёр $PLAYER_ACTOR в машине

03C0: 0@ = actor $PLAYER_ACTOR car // записываем в переменную текущую машину
jump @Name_2 переходим к метке 2
:Name_2 создаём метку 2
wait 0 ждём 0 мс
if если нажата клавиша
0AB0: key_pressed 74
jf @Name_2 если нет то переходим на поток Name_2
т.е. скрипт завистнет на этом потоке пока не будет нажата клавиша J. это нам даёт гаратнированность ложного срабатываения
if
056E: car 0@ defined
jf @Name_1
нужно обязательно это проверить существует ли машина 0@ (вдруг исчезла)
если выполянять действия с несуществующей машиной то будет вылет.
036A: put_actor $PLAYER_ACTOR in_car 0@
телепортируем игрока за машину 0@
и возвращаемся на начало скрипта.
кстати! после создания второго потока поставье wait 500.
потому что скрипт может сработать так быстро, что одно и тоже нажатие воспринять как 2.
сохраняем. компилируем, проверяем.
работает? поздравляю! вы сделали большой шаг в скриптинге!
  • Страница 1 из 1
  • 1
Поиск: