либо действие. Клавиши делятся на 2 типа : стандартные (к примеру в GTA нет такой клавиши,как "Shift",а есть клавиша "Спринт",короче от настроек самой игры зависит то,на какую вам кнопку на клавиатуре прийдётся нажимать) и не стандартные (нажатие любой кнопки) .
Когда игрок едет в к-л транспортном средстве,то стандартные клавиши означают одно,но когда игрок вне транспортного средства,то эти же самые клавиши означают совсем другое,заметьте,что где-бы не находился игрок каждая клавишя постоянно сохраняет свой номер.
Стандартные клавиши :
Вот номера стандартных клавиш в игре,они разделены на "пешком" и "в транспортном средстве":
Номер Пешком В транспортном средстве
------------------------------------------------------------------------------------------------------------------------------------
0 | влево/вправо влево/вправо
1 | вперёд/назад наклон вертолёта(самолёта) вверх/вниз
2 | особый CTRL влево/вправо особый CTRL влево/вправо
3 | особый CTRL вперёд/назад особый CTRL вперёд/назад
4 | действие вторичная атака
5 | предыдущее оружее/цель смотреть влево
6 | прицел ручной тормоз
7 | следущее оружее/цель смотреть вправо
8 | группа вперёд следующая радио станйия
9 | группа назад предыдущая радио станйия
10 | ответ-нет ответ-нет
11 | ответ-да пропустить слежку
12 | не существует не существует
13 | изменить камеру изменить камеру
14 | прыжок тормоз/задний ход
15 | войти в машину выход из машины
16 | быстрый бег газ
17 | огонь огонь
18 | присесть гудок
19 | смотреть назад подмиссия
------------------------------------------------------------------------------------------------------------------------------------
Проверка на нажатость клавиши выглядит вот так:
00E1: key_pressed 0 19 , параметр 0,всегда должен равнятся 0,а вот 19 - номер клавиши.
Проверка на не нажатость клавиши выглядит вот так:
80E1: not key_pressed 0 19 , параметр 0,всегда должен равнятся 0,а вот 19 - номер клавиши.
Если надо сделать проверку для одной клавиши,то вот так:
if
00E1: key_pressed 0 19
jf @XXX
А если надо сделать проверку на нажатость сразу нескольких клавиш,то:
if and // условие с выполнением всех подусловий.
00E1: key_pressed 0 19
00E1: key_pressed 0 16
00E1: key_pressed 0 17
00E1: key_pressed 0 N
jf @XXX
Бывает,что надо сделать проверку на нажатость одной из нескольких клавиш,она выглядит так:
if or // условие с выполнением хотя бы одного подусловия.
00E1: key_pressed 0 19
00E1: key_pressed 0 16
00E1: key_pressed 0 17
00E1: key_pressed 0 N
jf @XXX
Нестандартные клавиши :
Вы можете проверять в скриптах нажатие абсолютно любой кнопки на клавиатуре (за исключением ESC и PrintScreen ).
Для проверки нажатия нужно прочитать область памяти по указанному в таблице индексу.
(Смотрите примеры !!!)
Таблица клавиш :
________________________
Index | KeyLo | KeyHi
________________________
304474 Insert
304475 Delete Home
304476 End PageUp
304477 PageDown ArrowUp
304478 ArrowDown Arrow Left
304479 ArrowRight Scroll Lock
304480 Pause Numlock
304481 Num / Num *
304482 Num - Num +
304483 NumEnter NumDel
304484 Num 1 Num 2
304485 Num 3 Num 4
304486 Num 5 Num 6
304487 Num 7 Num 8
304488 Num 9 Num 0
304489 Backspace Tab
304490 CapsLock Enter
304491 LeftShift Right Shift
304492 Left Ctrl
304493 Right Ctrl Left Alt
304494 Right Alt Left Windows
304495 Right Menu
304496 F1 F2
304497 F3 F4
304498 F5 F6
304499 F7 F8
304500 F9 F10
304501 F11 F12
304518 Space
304521 '
304524 , -
304525 . /
304526 0 1
304527 2 3
304528 4 5
304529 6 7
304530 8 9
304531 ;
304532 =
304534 A
304535 B C
304536 D E
304537 F G
304538 H I
304539 J K
304540 L M
304541 N O
304542 P Q
304543 R S
304544 T U
304545 V W
304546 X Y
304547 Z [
304548 \ ]
304550 `
©2007 by Seemann
http://sannybuilder.com/dev/keycodes.htm
Примеры :
Стандартные клавиши :
1) Давайте напишем скрипт,в котором по нажатию "прицел" и "спринт",когда игрок не в машине,
перед вами появляется Монстр,большой такой джип,если кто не знает.
create_thread @Monster // создаём поток с именем Monster
:Monster // начинаем поток
wait 0 // ждём 0 мс,не напищем-вылетит
model.load(#MONSTER) // объявляем нужную для загрузки модель #MONSTER
038B: load_requested_models // загружаем ранее объявленые модели
:Monster_2 // создаём второй label
wait 0 // ждём 0 мс,не напищем-вылетит
if and // условие с выполнением всех подусловий
player.Defined($PLAYER_CHAR) // подусловие(игрок уже создался и существует)
model.Available(#MONSTER) // подусловие(модель #MONSTER уже загружена в память)
not actor.Driving($PLAYER_ACTOR) // подусловие(если игрок не в машине)
00E1: key_pressed 0 6 // подусловие(если нажата клавиша "прицел")
00E1: key_pressed 0 16 // подусловие(если нажата клавиша "спринт")
jf @Monster_2 // если хотя бы одно из подусловий не выполнилось,то идём к началу label'a
04C4: create_coordinate $X_1 $Y_1 $Z_1 from_actor $PLAYER_ACTOR offset 0.0 10.0 3.0
// создаём координаты напротив игрока
car.create($Car,#MONSTER,$X_1,$Y_1,$Z_1) // создаём машину по этим координатам
car.removereferences($Car) // удаляем все сведения о машине
wait 5000 // ждём 5 секунд,если бы мы не ждали,то на месте машины появилась бы другая,но
// первая всё равно осталась бы и они застряли бы
jump @Monster_2 // прыгаем в начало label'a.
2) Вот ещё простенький,но полензный скрипт с использованием клавиш :
По нажатию "Спринт" + "Сесть в машину" к игровому времени прибавляется один час:
create_thread @TimeM // создаём поток с именем TimeM
:TimeM // Начинаем наш поток
wait 0 // ждём 0 мс,если не напишем,то игра вылетит
if and // условие с выполнением всех проверок(подусловий)
00E1: key_pressed 0 15 // проверка (если нажата клавиша "СЕСТЬ В МАШИНУ")
00E1: key_pressed 0 16 // проверка (если нажата клавиша "СПРИНТ")
jf @TimeM // если все проверки не выполнились,то переходим на начало
wait 100 // ждём 100 мс,если не напишем небольшую задержку,то игровое время
// будет изменятся с бешеной скоростью(из-за скорости процессора вашего компа)
$time += 1 // тут к переменной $time прибавляем 1,если устанавливается значение боль-
//ше,чем 23,то оно автоматически переводится на 0
00C0: set_current_time $time 0 // и устанавливаем игровое время на $time
jump @TimeM // и прыгаем в начало
3) Давйте напишем скрипт,с помощью которого можно будет изменять скорость игры :
При нажатии "Прыжок" + "Атака" скорость постепенно уменьшается , при нажатии
"Прыжок" +"Прицел/Вторичная атака" скорость будет увеличиваться,при нажатии
"Прыжок" + "Действие" , скорость будет становится нормальной :
create_thread @TimeSpeed // создаём поток с именем TimeSpeed
:TimeSpeed // начинаем поток
wait 0 // ждём 0 мс
$Var = 1.0 // берём переменную $Var и присваиваем ей значение 1.0 - скорость игры
:TimeSpeed_2 // создаём второй label потока
wait 100 // ждём 100 мс для того,чтобы скорость не сильно быстро менялась
if and // условие с выполнением всех подусловий(проверок)
00E1: key_pressed 0 6 // проверка(если нажата клавиша "Прицел")
00E1: key_pressed 0 14 // проверка(если нажата клавиша "Прыжок")
jf @TimeSpeed_3 // Если хоть одно из подусловий не выполнилось,то переходим к другой
$Var += 0.1 // проверке,если же выполнилось,то к нашей переменной прибавляем 0.1
015D: set_gamespeed $Var // и устанавливаем скорость,равной нашей переменной $Var
:TimeSpeed_3 // создаём третий label
wait 100 // ждём 100 мс для того,чтобы скорость не сильно быстро менялась
if and // условие с выполнением всех подусловий(проверок)
00E1: key_pressed 0 17 // проверка(если нажата клавиша "Атака")
00E1: key_pressed 0 14 // проверка(если нажата клавиша "Прыжок")
jf @TimeSpeed_4 // Если хоть одно из подусловий не выполнилось,то переходим к другой
$Var -= 0.1 // проверке,если же выполнилось,то от нашей переменной отнимаем 0.1
015D: set_gamespeed $Var // и устанавливаем скорость,равной нашей переменной $Var
:TimeSpeed_4 // создаём четвёртый label
wait 100 // ждём 100 мс для того,чтобы игра не вылетила
if and // условие с выполнением всех подусловий(проверок)
00E1: key_pressed 0 4 // проверка(если нажата клавиша "Действие")
00E1: key_pressed 0 14 // проверка(если нажата клавиша "Прыжок")
jf @TimeSpeed_2 // если все подусловия выполнились,то делаем скорость нормальной,а
015D: set_gamespeed 1.0 // если нет,то скорость остаётся прежней и выполнение скрипта
jump @Prosto_2 // переходит к первой проверке
Может на игроке и не очень видно ускорение,но вот на проезжающих машинах - это реактивно.
4) Очень часто просят привести пример замедления времени при нажатии на "Прицел".Ловите :
create_thread @Prosto // создаём поток с именем Prosto
:Prosto // начинаем поток
wait 10 // ждём 10 мс,чтобы не вылетило
015D: set_gamespeed 1.0 // устанавливаем скорость на нормальную
if and // условие с выполнением всех подусловий(проверок)
player.Defined($PLAYER_CHAR) // проверка(игрок существует),на всякий случай
not actor.Driving($PLAYER_ACTOR) // проверка(игрок не за рулём)
82D8: not actor $PLAYER_ACTOR currentweapon == 34 // у актёра в руках не снайперка
82D8: not actor $PLAYER_ACTOR currentweapon == 35 // у актёра в руках не базука(1)
82D8: not actor $PLAYER_ACTOR currentweapon == 36 // у актёра в руках не базука(2)
jf @Prosto // если чего-нибудь не выполнилось,то переходим на начало
:Prosto_2 // создаём второй label
wait 10 // ждём 10 мс,на всякий случай
if // обыкновенное условие
00E1: key_pressed 0 6 // проверка(нажата клавиша "Прицел")
jf @Prosto // если это не правда,то перех. на начало,и там скорость становится обыкновенной
015D: set_gamespeed 0.25 // устанавливаем меньшую скорость игры
jump @Prosto_2 // и прыгаем в начало этого же label'a
Нестандартные клавиши :
5) Проверяем, нажат ли Enter:
1. Находим в таблице Enter. Его индекс равен 304490.
2. Enter стоит в столбце KeyHi, это значит, что когда кнопка будет нажата в переменной будет записано число 0x00FF0000. Кнопки в столбце KeyLo возвращают число 255 (0xFF), когда нажаты.
0@ = 304490
:loop
wait 0
&0(0@,1i) == 0x00FF0000
jf @loop
player.money($player_char) += 100
при нажатии Enter игроку дадут 100 долларов.
6) Проверяем, нажата ли тильда:
1. Находим в таблице ~. Ее индекс равен 304550.
2. ~ стоит в столбце KeyLo, это значит, что когда кнопка будет нажата в переменной будет записано число 0xFF
0@ = 304550
:loop
wait 0
&0(0@,1i) == 0xFF
jf @loop
player.money($player_char) += 100
при нажатии ~ игроку дадут $100.
7)Комбинируем проверки. Проверяем нажатие Num1 + Num2 :
1. У обоих кнопок один индекс 304484, поэтому при нажатии враз они вернут число 0x00FF00FF.
2. Пишем код
0@ = 304484
:loop
wait 0
&0(0@,1i) == 0x00FF00FF
jf @loop
player.money($player_char) += 100
при нажатии Num1 и Num2 игроку дадут $100.
Вроди с клавишами всё .