You are not logged in.
Вы можете проверять в скриптах нажатие абсолютно любой кнопки на клавиатуре (за исключением 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
Оно работает? Ничего себе, теперь можно намутить очень многое...
Кстати, а нажатие ПКМ/ЛКМ возможно проверять?
Last edited by Knytsa (16-02-2007 13:59)
Offline
Нет просто слов. СУПЕР!!!!!!!!!!
Offline
А как быть. если нужно проверить одновременное нажатие двух клавиш с разным индексом?
Offline
Ну дык , просто пишешь 2 проверки и всё .
А если ты насчёт 2 клавиш с одинаковым кодом , то я хз .
Offline
Да, нужно просто объединить проверки
0@ = 304490
1@ = 304492
if and
&0(0@,1i) == 0x00FF0000
&0(1@,1i) == 0x00FF0000
then
// 2 кнопки нажаты
end
Для кнопок с одним индексом см. Пример 3
Offline
прошу прощения за неполиткорректный ответ,
но где берутся шестнадцатеричные коды KeyHi и Lo - типа 0x00FF0000?
Offline
Из стандартных функций винды/игры. При нажатии опр. кнопки в область памяти размером 2 байта записывается число 255 (0xFF). Поскольку массивы могут читать только по 4 байта за раз, поэтому некоторые адреса некоторых кнопки читаются нормально (KeyLo), а некоторые кроме своих 2-х байтов прихватывают при чтении еще два байта следующей кнопки (KeyHi). Эти проверяются как 0x00FF0000 (т.е. стандартный 0xFF и 0000 - след. 2 байта).
Offline
т.е. для keylo - 0xFF, а для keyhi - 0x00FF0000? но в примерах встречается еще 0x00FF00FF. Если честно, я не понимаю как добывать код для конкретной цифры. Или их только 2 варианта?
Offline
2jayrocc Там где 0x00FF00FF проверяется Key Hi И Key Lo!
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
а, теперь я понял, до этого мне казалось, что у каждой клавиши свой HEX код
правда все равно не работает
вот код такой вставляю, а он ошибку при загрузке игры вызывает.
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
Поставь wait 250 после :fars0, и wait 0 ставится в крайних случаях - замени на 50.
GTA VC - ЭТО НАСТОЯЩАЯ ГТА!
Offline
Что такое $Car?
Надо добавить проверку Player.Defined в самом начале
Offline
jump @FARS_ONJump @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
Проверка нажатия любых клавишь это хорошо.
А какие кей-коды для русской раскладки есть?
Offline
Они те же самые (Ы = S и т.п.).
Offline
Они те же самые (Ы = S и т.п.).
Странно. У мена когда на русский переключаешь, клавиши не работают. Попробую вывести код текущей нажатой клавиши. Может просто глюк.
Действительно просто глюк из-за автопереключалки раскладки.
Last edited by Stalker2012 (03-07-2007 08:17)
Offline
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
Этот способ был придуман и использовался еще до того как появился CLEO 3 с опкодом 0AB0.
Offline
Last edited by XotaBi4b (01-12-2008 16:37)
GTA SA CrashKiller by MadniX , Virtual_Key_Codes for opcode 0AB0
Offline
Дык там может какая другая таблица кей кодов, либо таких опкодов не существует
Offline
почему описанный в начале метод не работает в гта 3? ничего не происходит...
адреса памяти ведь не совпадают, и массивы в scm появились только в СА. Для 3 вообще не должно компилироваться, хотя хз. Я только на СА скриптил.
Offline
3Doomer wrote:почему описанный в начале метод не работает в гта 3? ничего не происходит...
адреса памяти ведь не совпадают, и массивы в scm появились только в СА. Для 3 вообще не должно компилироваться, хотя хз. Я только на СА скриптил.
Вот на счёт "для 3 вообще не должно...ляля" это согласен.
Согласитесь, тройка самая неподступная получилась из всей серии ГТА, на ней ни работает ни один трейнер. это раз. половина файлов зашиты в exe. это два
Offline