Moin!
Wie ist es möglich ein Script per Tastendruck zu aktivieren?
Ich habe schon ein wenig gegoogelt und alle Scripts die ich gefunden habe waren veraltet oder gingen einfach nicht.
Schön, dass du den Weg zu NodeZone.net gefunden hast! Aktuell bist du nicht angemeldet und kannst deshalb nur eingeschränkt auf unsere Community zugreifen. Um alle Funktionen freizuschalten, spannende Inhalte zu entdecken und dich aktiv einzubringen, registriere dich jetzt kostenlos oder melde dich mit deinem Account an.
Moin!
Wie ist es möglich ein Script per Tastendruck zu aktivieren?
Ich habe schon ein wenig gegoogelt und alle Scripts die ich gefunden habe waren veraltet oder gingen einfach nicht.
Hallo,
nutzt du das in Verbindung mit Altis Life oder baust du selber was zusammen?
Nein. Ich bin dabei mein eigenes Sandbox Framework zu erstellen.
Kann gerade nicht ausführlich schreiben. Du musst auf das gewünschte Display ein uiEventhandler ablegen mit dem event keyDown. Google das mal und guck dir fn_keyhandler.sqf in altis life an. BI Dialog IDD Liste
Das hilft mir nicht weiter.
Ich hab jetzt noch ein wenig weiter gesucht, und dies gefunden:
if (isDedicated) exitWith {};
if !(hasinterface) exitwith {};
["Preload"] call BIS_fnc_arsenal;
private["_keyDown"];
[] spawn {
waitUntil {!isNull player && player == player};
waitUntil{!isNil "BIS_fnc_init"};
waituntil {!(IsNull (findDisplay 46))};
private["_i", "_keyDown"];
_keyDown = (findDisplay 46) displayAddEventHandler ["KeyDown", "if (_this select 1 == 21) then {['Open', true] call BIS_fnc_arsenal;}"];
};
Alles anzeigen
Allerdings bekomme ich beim Ausführen (Taste "Z" ("21") drücken) den Fehler:
Also, nehmen wir einmal an, du hast eine Init geschrieben, in der gewartet wird, bis der Display 46 nicht mehr Null ist !isNull (findDisplay 46).
Mögliche Erklärung für Display 46, wieso/weshalb/warum: Der Display 46 wird sehr häufig verwendet um Hotkeys zu setzen, welche ermöglichen Aktionen beim Drücken von bestimmten Tasten ausfzuführen.
Code-Beispiel zum setzen eines neuen "Key"-Eventhandlers
(findDisplay 46) displayAddEventHandler ["KeyDown", "params [""_ctrl"",""_taste"",""_shift"",""_strg"",""_alt""]; hint format['%1\n\n\nWelche Taste: %2\nHalte Shift: %3\nHalte STRG: %4\nHalte Alt: %5',_ctrl,_taste,_shift,_strg,_alt];"];
In den Anführungsstrichen kannst du deinen eigenen Code einbauen oder eine Funktion/ein Script aufrufen.
Das Beispiel habe ich jetzt nicht getestet, sondern einfach zusammen geschustert.
Kannst du das vielleicht nochmal ein wenig besser formatieren? Oder direkt in den vorhandenen Code einbauen?
@Prankson eigentlich war dein Code richtig, nur braucht der keyDown-Eventhandler einen Rückgabewert (bool), um zu sagen ob die Standard-arma-tastenbefehle ignoriert werden sollen (true == Standardtastenzuweisung ignorieren).
Daher auch der Fehler Error XY, erwartet Bool.
So habe ich das z.B. mal gemacht in einer Mission, du kannst aber auch einfach deinen Code nehmen und ein true oder falseals Rückgabewert anhängen.
waitUntil { time > 0 AND !isNull player AND player == player};
waitUntil {!(isNull (findDisplay 46))};
diag_log "Hotkey wird angelegt.";
(findDisplay 46) displayAddEventHandler ["KeyDown",
{
if ( (_this select 1) == 22 ) then
{
(format ["%1 hat das Arsenal geoeffnet.",profileName]) remoteExecCall ["systemChat",-2,false];
_s = ["Open",true] spawn BIS_fnc_Arsenal;
_s = nil;
true;
};
}];
titleText ["Hotkey:\n\nU - Arsenal","PLAIN"];
Alles anzeigen
Siehe Zeile 11
if (isDedicated) exitWith {};
if !(hasinterface) exitwith {};
["Preload"] call BIS_fnc_arsenal;
private["_keyDown"];
[] spawn {
waitUntil {!isNull player && player == player};
waitUntil{!isNil "BIS_fnc_init"};
waituntil {!(IsNull (findDisplay 46))};
private["_i", "_keyDown"];
(findDisplay 46) displayAddEventHandler ["KeyDown", "params [""_ctrl"",""_taste"",""_shift"",""_strg"",""_alt""]; if (_taste == 21) then {['Open', true] call BIS_fnc_arsenal; false}; false"];
};
Alles anzeigen
Da hat zum Schluss nen Bool gefehlt, ist mir auch erst nicht aufgefallen
Falls du die Hotkeys erweiter solltest, würde ich ne Funktion nutzen als "Master-Keyhandler" für Hotkeys, wäre ja unnötig für jede einzelne Taste nen neuen Eventhandler zu setzen.