Самодельный таймер
Материал из GTAModding.ru
Версия от 14:28, 18 марта 2012; Vital (обсуждение | вклад)
Введение
Итак, многие, кто начал изучать скриптинг, знают, что в cleo скриптах нельзя использовать глобальные переменные (точнее не рекомендуется, это не относится к общим, таким, как $PLAYER_ACTOR, $ONMISSION и т.п.). Но если попробовать использовать локальные переменные (1@, например) для создания таймера, игра вылетит, ведь этому опкоду нужна именно глобальная переменная. Поэтому приходится либо отказываться от таймера вовсе, либо рисковать и использовать глобальные переменные. Я (конечно, думаю, что я не первый) придумал новый способ создания таймера, простой и имеющий "гибкие" настройки. Ему не нужны глобальные переменные, он, так же, как и стандартный его собрат, выводится на экран, так же есть звуки, когда значения таймера малы, но все в нем можно изменить по собственному желанию. Итак, сначала приведу сам код, затем объясню все по порядку.
Код таймера
:Cicl wait 0 if and not actor.Dead($PLAYER_ACTOR) not actor.Driving($PLAYER_ACTOR) 0AB0: key_pressed 0xD //проверки на то, что игрок жив, не в авто, и на нажатие клавиши "Enter" jf @Cicl actor.StorePos($PLAYER_ACTOR,2@,3@,4@) //сохраняем текущие координаты игрока в переменные 02CE: 4@ = ground_z_at 2@ 3@ 4@ //получаем координату поверхности, чтобы действие не происходило в воздухе //начало самого таймера, то есть простого цикла, известного многим по //школьному курсу программирования (в Turbo Pascal) for 1@ = 15 downto 0 //берем downto, чтобы счет шел от большего к меньшему 01E5: show_text_1number_highpriority GXT 'VAR' number 1@ time 1000 flag 1 //выводим значение переменной (секунды), которая в цикле //изменяется с 15 до 0 if //начало условия. эта часть необязательна, она нужна для зука, которы будет проирыаться, кода ремя будет меньше 5 секунд 1@ <= 5 //если значение времени таймера меньше или равно 5, то... then 018C: play_sound 1084 at 0.0 0.0 0.0 //...проигрываем звук №1084 end //конец условия. else не нужно в данном случае wait 1000 //ждем 1 секунду, иначе таймер закончится сразу же, да и таймер в секундах end //конец цикла, это и конец таймера 020C: create_explosion_with_radius 10 at 2@ 3@ 4@ 020C: create_explosion_with_radius 6 at 2@ 3@ 4@ //создаем два больших взрыва wait 750 //ждем 750 мс, чтобы игрок не сразу мог перезапустить скрипт jump @Cicl //идем на начало
Суть скрипта в том, что спустя 15 секунд после нажатия Enter произойдет взрыв (в той точке, в которой игрок нажал клавишу).
Преимущества
Как видите, сам код прост и мал по размеру. К тому же есть еще плюсы:
-Не нужно проверять, что время таймера равно нулю, цикл сам завершается
-Можно легко и быстро настроить абсолютно все: время, звук таймера, и при каких значениях он будет воспроизведен, текст.
Помимо того, что можно выводить разные варианты текста (как по стилям написания, так и по цвету, например, сделать текст красным, когда значение таймера меньше 5 секунд), Вы сможете вывести текст как текст-бокс (серый прямоугольник в верхнем левом углу экрана, примером будет сообщение о том, как сменить оружие на другое). Для этого понадобится команда 0513, только не забудьте применить команду 03E6 после цикла, чтобы текст-бокс не держался на экране все время и исчез (сам он не исчезает).
Единственная проблема состоит в том, что выводятся именно секунды,а не минуты, но это, конечно, можно исправить, немного поломав голову.
В целом можно сказать, что такой таймер гораздо проще создается, его можно изменить по своему желанию, так что, если Вам понравился этот способ, дерзайте, у Вас все получится, если подключить фантазию. Можно сделать разноцветный текст, "музыкальный" таймер (звук на каждой секунде) и т.д. ...