Může se vám stát, že budete chtít ovlivnit průběh mise nějakou klávesou. Například přidáte možnost rozhodovat mezi několika možnosti a nebude vám vyhovovat klasické akční menu nebo budete chtít při přehrávání videa uprostřed mise dát možnost stisknout klávesu „S“ a tím video přeskočit. Jak na to?

Základem jsou dva příkazy findDisplay a displayAddEventHandler.
S těmito příkazy můžete navěsit vlastní detekci stisknuté klávesy velmi snadno:

_keyDownEHId = (findDisplay 46) displayAddEventHandler ["KeyDown", "hint str _this;"];

Příkaz nastaví pro „primary display“ (což je display s id 46)
handler na událost keydown. Od teď tedy bude při každém stisku klávesy hra vypisovat co bylo stisknuto. FindDisplay ale nefunguje na dedikovaném serveru, takže je nutné tuto detekci pro server vyjmout či ošetřit (ve skutečnosti vrátí displayNull).

waituntil {!(IsNull (findDisplay 46))};

Druhý parametrem displayAddEventHandler je funkce, která se zavolá a v
_this dostane pole obsahující pět prvků – volaný display, kód klávesy,
zda byla stisknuta klávesa shift, pak ctrl a pak alt. Seznam kódů
naleznete například na BI Wiki nebo využijte Direct Input Keyboard
(DIK) code
.

Takže na závěr příklad, kdy si zadefinujeme DIK kod pro klávesu „1“
a vytvoříme zachytávací funkci na stisk klávesy primárního displeje a funkci, která je zavolána právě při stisku kombinace ALT a 1.

if (isDedicated) exitWith{};
waituntil {!(IsNull (findDisplay 46))};
#define DIK_1 0x02

// -- funkce reagujici na ALT a 1
keydownalt1 = {
   hint "ALT + 1 pressed";
   // whatever
};

// -- funkce kontrolujici stisknute klavesy
keydownFc = {
   if (_this select 4 && _this select 1 ==DIK_1) then { call keydownalt1; };
   // tady je pak mozne pridat dalsi kombinace
};

// -- vytvoreni eventhandleru
_keydownEH = (findDisplay 46) displayAddEventHandler ["KeyDown", "_this call keydownFc"];

Eventhandler lze samozřejmě kdykoliv zrušit zavoláním displayRemoveEventHandler či za pomoci displayRemoveAllEventHandlers

(finddisplay 46) displayRemoveEventHandler["KeyDown",_keydownEH]; // odstraní náš z příkladu
// nebo
(finddisplay 46) displayRemoveAllEventHandlers "KeyDown"; // odstraní všechny KeyDown handlery