00053. Таймеры

Таймеры|В этом уроке мы рассмотрим работу с таймерами и напишем миссию в качестве примера.|wmysterio|wmysterio||||Очень часто в играх нужно выполнять задания на время. Так же и GTA SA есть такая возможность и в этом вы убедились при прохождении оригинальной игры.

Есть два вида таймеров: возрастающий и убывающий. То есть таймер будет либо прибавлять секунду к времени, либо убавлять. Чтобы создать таймер, нужно использовать опкод:

03C3: set_timer_to $TIMER type 1 GXT 'GXTTIME'

Здесь: $TIMER - переменная ( ЦЕЛОЕ ЧИСЛО ), которая будет хранить время ( в милисекундах ) 1 - тип таймера: 0 - будет прибавлять 1 секунду, 1 - будет отнимать 1 секунду 'GXTTIME' - Перед временем будет выводится текст, например "ВРЕМЯ:" (команду ~1~ использовать не нужно)

Что бы убрать таймер с экрана, используем:

014F: stop_timer $TIMER

Напишем небольшой скрипт. При истечении минуты игроку прибавить миллион:

:TIMER
thread 'TIMER'
wait 0
$TIMER = 60000 // задаём время таймеру 1 минута ( 60 секунд => 60*1000=60000 миллисекунд )
03C3: set_timer_to $TIMER type 1 GXT 'BB_19' // выводим таймер на экран

:TIMER_1
wait 0
if
1 > $TIMER // проверяем: время меньше одной миллисекунды
jf @TIMER_1
014F: stop_timer $TIMER
player.Money($PLAYER_CHAR) += 1000000
end_thread

Давайте усовершенствуем скрипт, чтобы при нажатии кнопки ENTER` ко времени прибавлялось 2 секунды:

Простой пример мы рассмотрели. Давайте создадим миссию. Когда игрок станет на маркер, появится машина и СЖ будет помещён в неё. После этого появится таймер. Нужно будет успеть за время проехать три точки. Если игрок выйдет с машины и умрёт, то миссия будет считаться проваленой. Я уже написал скрипт и необходимые GXT-записи. Содержимое GXT-записей:

Код миссии:

А вот и полный код для main. На сайт не помещается, так что приходится хранить его на сервере :) У Вас обязательно выйдет что то типа этого:

Теперь рассмотрим детальнее об переменных "32@" и "33@". Как уже было ранее сказано, они являются таймерами и изменяют свои значения динамически, тем самым не давая возможности хранить в них другие данные.

Переменная "33@" ( Как и "32@" ) каждый раз прибавляет к своему значению число. Это хорошо видно с такого скрипта:

Раз в секунду выводится состояние переменной, при этом заметно её значение, которое прибавляется примерно на 1000 миллисекунд ( +разница во времени между кадрами ).|1790|1|0|72011657jpg640400400250``\|10703885jpg437341400312``||tajmery|1499521337

Last updated

Was this helpful?