#1 16-02-2007 13:29

Seemann
Registered: 07-08-2006
Posts: 2,089

Проверяем нажатия ЛЮБЫХ клавиш

Вы можете проверять в скриптах нажатие абсолютно любой кнопки на клавиатуре (за исключением ESC и PrintScreen, их я не нашел, а также правый Wnd, которого нет на моей клавиатуре).

http://sannybuilder.com/dev/keycodes.htm

Для проверки нажатия нужно прочитать область памяти по указанному в таблице индексу

Пример 1. Проверяем, нажат ли Enter.

1. Находим в таблице Enter. Его индекс равен 304490.
2. Enter стоит в столбце KeyHi, это значит, что когда кнопка будет нажата в переменной будет записано число 0x00FF0000. Кнопки в столбце KeyLo возвращают число 255 (0xFF), когда нажаты.
3. Пишем код

0@ = 304490
:loop
wait 0
&0(0@,1i) == 0x00FF0000
jf @loop
player.money($player_char) += 100

при нажатии Enter игроку дадут 100 долларов.
<hr>

Пример 2. Проверяем, нажата ли тильда (слева от единицы)

1. Находим в таблице ~. Ее индекс равен 304550.
2. ~ стоит в столбце KeyLo, это значит, что когда кнопка будет нажата в переменной будет записано число 0xFF
3. Пишем код

0@ = 304550
:loop
wait 0
&0(0@,1i) == 0xFF
jf @loop
player.money($player_char) += 100

при нажатии ~ игроку дадут $100.
<hr>

Пример 3. Комбинируем проверки. Проверяем нажатие 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.

Offline

#2 16-02-2007 13:58

Knytsa
From: Moscow
Registered: 05-12-2006
Posts: 3
Website

Re: Проверяем нажатия ЛЮБЫХ клавиш

Оно работает? Ничего себе, теперь можно намутить очень многое...
Кстати, а нажатие ПКМ/ЛКМ возможно проверять?

Last edited by Knytsa (16-02-2007 13:59)

Offline

#3 16-02-2007 16:53

kostia
Registered: 05-01-2007
Posts: 17

Re: Проверяем нажатия ЛЮБЫХ клавиш

Нет просто слов. СУПЕР!!!!!!!!!!

Offline

#4 01-05-2007 20:30

Tector
Registered: 01-05-2007
Posts: 34

Re: Проверяем нажатия ЛЮБЫХ клавиш

А как быть. если нужно проверить одновременное нажатие двух клавиш с разным индексом?

Offline

#5 01-05-2007 20:43

Alexander
Registered: 19-08-2006
Posts: 184
Website

Re: Проверяем нажатия ЛЮБЫХ клавиш

Ну дык , просто пишешь 2 проверки и всё .
А если ты насчёт 2 клавиш с одинаковым кодом , то я хз .

Offline

#6 02-05-2007 07:46

Seemann
Registered: 07-08-2006
Posts: 2,089

Re: Проверяем нажатия ЛЮБЫХ клавиш

Да, нужно просто объединить проверки

0@ = 304490
1@ = 304492

if and
  &0(0@,1i) == 0x00FF0000
  &0(1@,1i) == 0x00FF0000
then
// 2 кнопки нажаты
end

Для кнопок с одним индексом см. Пример 3

Offline

#7 09-06-2007 18:18

jayrocc
From: MSK
Registered: 09-06-2007
Posts: 50

Re: Проверяем нажатия ЛЮБЫХ клавиш

прошу прощения за неполиткорректный ответ,
но где берутся шестнадцатеричные коды KeyHi и Lo - типа 0x00FF0000?

Offline

#8 09-06-2007 18:41

Seemann
Registered: 07-08-2006
Posts: 2,089

Re: Проверяем нажатия ЛЮБЫХ клавиш

Из стандартных функций винды/игры. При нажатии опр. кнопки в область памяти размером 2 байта записывается число 255 (0xFF). Поскольку массивы могут читать только по 4 байта за раз, поэтому некоторые адреса некоторых кнопки читаются нормально (KeyLo), а некоторые кроме своих 2-х байтов прихватывают при чтении еще два байта следующей кнопки (KeyHi). Эти проверяются как 0x00FF0000 (т.е. стандартный 0xFF и 0000 - след. 2 байта).

Offline

#9 09-06-2007 19:59

jayrocc
From: MSK
Registered: 09-06-2007
Posts: 50

Re: Проверяем нажатия ЛЮБЫХ клавиш

т.е. для keylo - 0xFF, а для keyhi - 0x00FF0000? но в примерах встречается еще 0x00FF00FF. Если честно, я не понимаю как добывать код для конкретной цифры. Или их только 2 варианта?

Offline

#10 09-06-2007 20:04

kostay scr
From: Беларусь
Registered: 25-05-2007
Posts: 176

Re: Проверяем нажатия ЛЮБЫХ клавиш

2jayrocc Там где 0x00FF00FF проверяется Key Hi И Key Lo!


GTA VC - ЭТО НАСТОЯЩАЯ ГТА!

Offline

#11 09-06-2007 21:03

jayrocc
From: MSK
Registered: 09-06-2007
Posts: 50

Re: Проверяем нажатия ЛЮБЫХ клавиш

а, теперь я понял, до этого мне казалось, что у каждой клавиши свой HEX код smile

правда все равно не работает sad

вот код такой вставляю, а он ошибку при загрузке игры вызывает.

create_thread @FARS0

------------------------------

:FARS0
0@ = 304550

:FARS
wait 0
if and
actor.Driving($PLAYER_ACTOR)
&0(0@,1i) == 0xFF
jf @FARS
jump @FARS_ON

:FARS_ON
wait 500
067F: set_car $Car headlights 2
jf @FARS_ON

:FARS_2
wait 0
if and
actor.Driving($PLAYER_ACTOR)
&0(0@,1i) == 0xFF
jf @FARS_2
Jump @FARS_OFF

:FARS_OFF
wait 500
067F: set_car $Car headlights 0
jf @FARS_OFF
jump @FARS

Last edited by jayrocc (09-06-2007 21:04)

Offline

#12 10-06-2007 10:01

kostay scr
From: Беларусь
Registered: 25-05-2007
Posts: 176

Re: Проверяем нажатия ЛЮБЫХ клавиш

Поставь wait 250 после :fars0, и wait 0 ставится в крайних случаях - замени на 50.


GTA VC - ЭТО НАСТОЯЩАЯ ГТА!

Offline

#13 10-06-2007 11:09

Seemann
Registered: 07-08-2006
Posts: 2,089

Re: Проверяем нажатия ЛЮБЫХ клавиш

Что такое $Car?
Надо добавить проверку Player.Defined в самом начале

Offline

#14 10-06-2007 12:05

Tector
Registered: 01-05-2007
Posts: 34

Re: Проверяем нажатия ЛЮБЫХ клавиш

jump @FARS_ON
Jump @FARS_OFF

Эти прыжки не нужны, скрипт и так пойдет дальше

wait 500
067F: set_car $Car headlights 0
jf @FARS_OFF
jump @FARS

Прыжок в случае невыполнения условия есть, а где проверка?

Или я что-то не знаю, и Sanny проверяет код возврата функции?

Last edited by Tector (10-06-2007 12:07)

Offline

#15 13-06-2007 09:40

Stalker2012
Registered: 11-06-2007
Posts: 27

Re: Проверяем нажатия ЛЮБЫХ клавиш

Проверка нажатия любых клавишь это хорошо.
А какие кей-коды для русской раскладки есть?

Offline

#16 13-06-2007 09:45

Seemann
Registered: 07-08-2006
Posts: 2,089

Re: Проверяем нажатия ЛЮБЫХ клавиш

Они те же самые (Ы = S и т.п.).

Offline

#17 13-06-2007 09:56

Stalker2012
Registered: 11-06-2007
Posts: 27

Re: Проверяем нажатия ЛЮБЫХ клавиш

Seemann wrote:

Они те же самые (Ы = S и т.п.).

Странно. У мена когда на русский переключаешь, клавиши не работают. Попробую вывести код текущей нажатой клавиши. Может просто глюк.

Действительно просто глюк из-за автопереключалки раскладки.

Last edited by Stalker2012 (03-07-2007 08:17)

Offline

#18 28-05-2008 15:21

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Проверяем нажатия ЛЮБЫХ клавиш

Seemann wrote:
0@ = 304490
:loop
wait 0
&0(0@,1i) == 0x00FF0000
jf @loop
player.money($player_char) += 100

Наф юзать такой древний способ? В хелпе к СБ есть фишка.......virtual_key_codes
В 1 столбике сморим кнопку, в 3 код.
Вписываем в опкод     0AB0:  key_pressed 0x"КОД" и ставим ево как проверку!

Пример:

:test
wait 0
if
0AB0:  key_pressed 0x73
jf @test
0321: kill_actor $PLAYER_ACTOR
wait 1000
jump @test

При нажатии кнопки F4 вас убьёт=))))))))
Я и сам знаю, что я ахренолог!)))

Last edited by 3Doomer (28-05-2008 15:22)


GIMS developer

Offline

#19 28-05-2008 15:30

Seemann
Registered: 07-08-2006
Posts: 2,089

Re: Проверяем нажатия ЛЮБЫХ клавиш

Этот способ был придуман и использовался еще до того как появился CLEO 3 с опкодом 0AB0.

Offline

#20 28-05-2008 21:10

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Проверяем нажатия ЛЮБЫХ клавиш

Seemann wrote:

Этот способ был придуман и использовался еще до того как появился CLEO 3 с опкодом 0AB0.

Я и не знал, что этого опкода раньше небыло)) Я ж новичок


GIMS developer

Offline

#21 01-12-2008 16:36

XotaBi4b
From: Харьков
Registered: 13-09-2008
Posts: 87

Re: Проверяем нажатия ЛЮБЫХ клавиш

Virtual_Key_Codes

Last edited by XotaBi4b (01-12-2008 16:37)

Offline

#22 23-08-2009 06:43

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Проверяем нажатия ЛЮБЫХ клавиш

почему описанный в начале метод не работает в гта 3? ничего не происходит...


GIMS developer

Offline

#23 23-08-2009 09:44

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

Re: Проверяем нажатия ЛЮБЫХ клавиш

Дык там может какая другая таблица кей кодов, либо таких опкодов не существует rolleyes

Offline

#24 23-08-2009 10:11

Alien
Registered: 12-10-2008
Posts: 564

Re: Проверяем нажатия ЛЮБЫХ клавиш

3Doomer wrote:

почему описанный в начале метод не работает в гта 3? ничего не происходит...

адреса памяти ведь не совпадают, и массивы в scm появились только в СА. Для 3 вообще не должно компилироваться, хотя хз. Я только на СА скриптил.

Offline

#25 23-08-2009 10:23

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

Re: Проверяем нажатия ЛЮБЫХ клавиш

Alien wrote:
3Doomer wrote:

почему описанный в начале метод не работает в гта 3? ничего не происходит...

адреса памяти ведь не совпадают, и массивы в scm появились только в СА. Для 3 вообще не должно компилироваться, хотя хз. Я только на СА скриптил.

Вот на счёт "для 3 вообще не должно...ляля" это согласен.
Согласитесь, тройка самая неподступная получилась из всей серии ГТА, на ней ни работает ни один трейнер. это раз. половина файлов зашиты в exe. это два

Offline

Board footer

Powered by FluxBB