@events.keyможно отменить8 методовИгрок нажал клавишу, отпустил её или держит, и сработал автоповтор. Приходит и в игре, и в открытых экранах.
Так делают свои горячие клавиши, когда бинда модуля мало: одна клавиша на несколько действий, сочетания с Shift и Ctrl, реакция на отпускание, а не на нажатие.
Событие приходит на каждое действие с клавишей, поэтому первым делом смотрят, что именно случилось: isPress это нажали, isRelease отпустили, isRepeat клавишу держат и система повторяет нажатие.
Сравнивать клавишу надёжнее по коду, а не по названию: getName даёт подпись для игрока, и она зависит от языка клиента. Коды берут из keys: keys.G, keys.LEFT_SHIFT, keys.F5.
| Метод | Возвращает | Зачем |
|---|---|---|
getKey() | int | Код клавиши, тот же, что даёт keys.G и подобные |
getName() | str | Подпись клавиши так, как её показывает клиент: G, LSHIFT, F5 |
isPress() / isRelease() / isRepeat() | bool | Что именно случилось с клавишей |
isShift() / isCtrl() / isAlt() | bool | Был ли зажат модификатор в этот момент |
isScreenOpen() | bool | Открыт ли сейчас экран: чат, инвентарь, меню |
getScancode() | int | Номер клавиши от самой клавиатуры, нужен редко |
getMods() | int | Все модификаторы одним числом |
cancel() | - | Не дать нажатию дойти до игры |
mod = Module("QuickActions", "Player")
@events.key
def on_key(event):
# пока открыт чат, событие всё равно приходит: игрок просто печатает
if not mod.isEnabled() or event.isScreenOpen():
return
if not event.isPress():
return
# сравниваем код, а не подпись: подпись зависит от языка клиента
if event.getKey() == keys.H:
client.msg("нажата H")
elif event.getKey() == keys.G and event.isShift():
client.msg("нажаты Shift и G")holding = False
@events.key
def on_key(event):
global holding
if event.getKey() != keys.LEFT_ALT:
return
# нажатие и отпускание приходят одним событием, различает их isPress
if event.isPress():
holding = True
elif event.isRelease():
holding = False
@events.tick
def on_tick(event):
if holding:
client.overlay("Alt зажат")Общий список всех событий и правила подписки лежат на странице События.