Événements & Touches du Clavier¶
Apprenez à exécuter votre code en continu et à détecter les touches pressées par le joueur.
Exécuter du code à chaque image¶
Thread.Create()¶
Un thread est la façon dont un mod exécute du code en continu. C'est le cœur de votre script, et le loader le reprend à chaque image, environ 60 fois par seconde. C'est ici que vous vérifiez les touches du joueur, dessinez du texte à l'écran ou mettez à jour votre mod :
Thread.Create(function()
while true do
-- Ce code s'exécute en continu pendant que vous jouez
Thread.Wait(0) -- rend la main jusqu'à l'image suivante
end
end)
onUnload()¶
Appelée quand votre mod s'arrête ou se recharge. Utilisez-la pour faire du nettoyage (supprimer les véhicules créés, sauvegarder un fichier, etc.) :
Attendre entre deux tours de boucle¶
Quand vous n'avez pas besoin de tourner à chaque image, attendez plus longtemps.
Thread.Wait(ms) suspend le thread et le reprend plus tard, sans bloquer le jeu
ni les autres threads.
Thread.Create(function()
while true do
SetCharHealth(GetPlayerChar(GetPlayerId()), 200)
Thread.Wait(1000) -- une fois par seconde
end
end)
C'est le motif auquel les mods ScriptHookDotNet sont écrits : un script porté garde sa structure.
| Fonction | Effet |
|---|---|
Thread.Create(fn, ...) |
Démarre un thread et rend un identifiant. Les arguments qui suivent sont transmis à fn. |
Thread.Wait(ms) |
Suspend le thread courant. Thread.Wait(0) reprend à l'image suivante. |
Thread.Stop(id) |
Arrête un thread, rend true s'il était encore vivant. |
Thread.Count() |
Nombre de threads vivants. |
Deux points à retenir :
- Une erreur dans un thread ne tue que ce thread. Elle est journalisée, le thread est retiré, et les autres continuent.
Thread.Wait()compte du temps réel, pas du temps de jeu. Une partie en pause ne réveille rien, et tous les délais échus se déclenchent d'un coup à la reprise.
Wait() tout court n'existe pas
GTA IV possède un natif nommé WAIT, donc le global Wait appartient au jeu et non à
l'ordonnanceur. Écrivez toujours Thread.Wait(ms). Le natif reste joignable par
Native.Call("WAIT", ...).
Détecter une Touche du Clavier (Input.IsKeyDown)¶
Pour savoir si le joueur appuie sur une touche, utilisez Input.IsKeyDown(code_touche).
Thread.Create(function()
while true do
if Input.IsKeyDown(0x73) then -- Touche F4
Log.Print("La touche F4 a été pressée !")
end
Thread.Wait(0)
end
end)
Tableau des Codes de Touches Principales¶
Voici les codes Windows (Virtual-Key) les plus fréquents à copier-coller dans vos scripts :
| Touche | Code Hexadécimal | Code Décimal | Description |
|---|---|---|---|
| F1 | 0x70 |
112 | Touche F1 |
| F2 | 0x71 |
113 | Touche F2 |
| F3 | 0x72 |
114 | Touche F3 |
| F4 | 0x73 |
115 | Touche F4 (Standard pour les menus trainers) |
| F5 | 0x74 |
116 | Touche F5 |
| F6 | 0x75 |
117 | Réservé (Éditeur de code en jeu intégré) |
| F7 | 0x76 |
118 | Touche F7 |
| F8 | 0x77 |
119 | Touche F8 |
| F9 | 0x78 |
120 | Touche F9 |
| Shift | 0x10 |
16 | Touche Maj / Shift |
| Ctrl | 0x11 |
17 | Touche Contrôle / Ctrl |
| Alt | 0x12 |
18 | Touche Alt |
| Espace | 0x20 |
32 | Barre d'espace |
| Entrée | 0x0D |
13 | Touche Entrée |
| Échap | 0x1B |
27 | Touche Échap / Escape |
| Tab | 0x09 |
9 | Touche Tabulation |
| Flèche Haut | 0x26 |
38 | Flèche directionnelle Haut |
| Flèche Bas | 0x28 |
40 | Flèche directionnelle Bas |
| Flèche Gauche | 0x25 |
37 | Flèche directionnelle Gauche |
| Flèche Droite | 0x27 |
39 | Flèche directionnelle Droite |
| Touche E | 0x45 |
69 | Lettre E (Interaction) |
| Touche T | 0x54 |
84 | Lettre T (Chat / Texte) |
| Touche X | 0x58 |
88 | Lettre X |
| Touche Z | 0x5A |
90 | Lettre Z |
| 0 à 9 | 0x30 à 0x39 |
48 à 57 | Chiffres au-dessus des lettres |
| Pavé Numérique | 0x60 à 0x69 |
96 à 105 | Chiffres du pavé numérique (Numpad) |