MISTER_DNOWNIK | Дата: Суббота, 13.10.2012, 21:04 | Сообщение # 1 |
 Пользователь
| Снова здраствуйте. сегодня мы продолжим урок. открываем сохранённый 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. сохраняем. компилируем, проверяем. работает? поздравляю! вы сделали большой шаг в скриптинге!
|
|
| |