Самодельный таймер

Материал из GTAModding.ru
Перейти к: навигация, поиск

Введение

Итак, многие, кто начал изучать скриптинг, знают, что в 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 после цикла, чтобы текст-бокс не держался на экране все время и исчез (сам он не исчезает).

Единственная проблема состоит в том, что выводятся именно секунды,а не минуты, но это, конечно, можно исправить, немного поломав голову.

В целом можно сказать, что такой таймер гораздо проще создается, его можно изменить по своему желанию, так что, если Вам понравился этот способ, дерзайте, у Вас все получится, если подключить фантазию. Можно сделать разноцветный текст, "музыкальный" таймер (звук на каждой секунде) и т.д. ...