Aller au contenu principal

Anatomie d'un script

Tout mod scripté dans GTA V avec ScriptHookVDotNet repose sur une classe unique qui hérite de GTA.Script. Dès que tu comprends les quatre rouages de cette classe, lire n'importe quel mod en circulation devient simple.

Le squelette minimal

Voici la structure la plus dépouillée d'un script fonctionnel :

using System;
using System.Windows.Forms;
using GTA;

public sealed class AnatomyScript : Script
{
public AnatomyScript()
{
Tick += OnTick;
KeyDown += OnKeyDown;
Aborted += OnAborted;
}

private void OnTick(object sender, EventArgs e)
{
}

private void OnKeyDown(object sender, KeyEventArgs e)
{
}

private void OnAborted(object sender, EventArgs e)
{
}
}

La déclaration de la classe

public sealed class AnatomyScript : Script

Trois éléments comptent ici :

  • public : SHVDN inspecte ta DLL par réflexion au démarrage. Si ta classe n'est pas public, le chargeur ne la voit pas et l'ignore complètement.
  • sealed : Indique au compilateur qu'aucune autre classe n'héritera de celle-ci. C'est une bonne habitude C# pour la clarté et l'optimisation.
  • : Script : L'héritage. En héritant de GTA.Script, tu déclares ta classe au gestionnaire de fibres de SHVDN. C'est lui qui instancie ton script au lancement ou lors d'un rechargement.

Le constructeur : là où tu branches les événements

public AnatomyScript()
{
Tick += OnTick;
KeyDown += OnKeyDown;
Aborted += OnAborted;
}

Le constructeur ne s'exécute qu'une seule fois, au moment où SHVDN charge ton script. N'y place aucune logique lourde de gameplay. Son unique rôle est de brancher les écouteurs d'événements :

  • Tick : S'exécute en continu à chaque image (ou selon la cadence de la fibre). C'est là que vivent les vérifications permanentes.
  • KeyDown : Se déclenche quand le joueur enfonce une touche du clavier. C'est le point d'entrée des actions manuelles.
  • Aborted : Se déclenche quand le script est déchargé, que ce soit par la touche de rechargement (Insert) ou à la fermeture du jeu. C'est ton contrat de nettoyage.

Les trois événements principaux

Tick : la simulation continue

OnTick tourne des dizaines de fois par seconde. Si tu écris du code ici sans condition de garde, il tourne en boucle permanente. Vérifie toujours tes prérequis avant d'agir :

private void OnTick(object sender, EventArgs e)
{
// Ne rien faire tant que le personnage joueur n'est pas chargé et actif
if (Game.Player.Character == null || !Game.Player.Character.Exists())
{
return;
}
}

KeyDown : la réaction instantanée

OnKeyDown reçoit un argument KeyEventArgs qui contient e.KeyCode. Il ne s'exécute que lorsque la touche s'abaisse :

private void OnKeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F6)
{
GTA.UI.Notification.PostTicker("Touche F6 pressée.", false);
}
}

Aborted : la garantie de nettoyage

Si ton script fait apparaître un PNJ, crée un véhicule ou modifie des paramètres globaux du jeu, OnAborted doit remettre la scène en ordre. Si tu oublies cette étape, chaque rechargement de script laisse des entités fantômes derrière lui en jeu :

private void OnAborted(object sender, EventArgs e)
{
// Supprimer les entités créées, restaurer les réglages par défaut
}

Dans la leçon suivante, nous passons en revue les types de données fondamentaux que tu manipuleras à l'intérieur de ces méthodes.