Types de données
Quand tu conçois un mod, tu passes ton temps à stocker des informations et à tester leur état : le joueur est-il dans un véhicule ? Combien de millisecondes avant la prochaine vérification ? Vers quelle météo basculer ? Le C# met à ta disposition des types précis pour chaque cas d'usage.
Les types primitifs du quotidien
Quatre types fondamentaux constituent le socle de presque tous les mods :
bool: Vauttrue(vrai) oufalse(faux). Parfait pour les drapeaux d'état :private bool _missionActive;.int: Un entier relatif (32 bits). Utilisé pour les compteurs, les index ou les chronomètres en millisecondes :private int _prochaineVerification;.float: Un nombre décimal à virgule flottante (simple précision). Indispensable dans un univers 3D pour les vitesses, les distances et les angles d'orientation. N'oublie jamais le suffixefen C# :private float _vitesse = 15.5f;.string: Une chaîne de caractères entre guillemets doubles. Utilisée pour les notifications, les noms de modèles ou les chemins de fichiers :string message = "Mission lancée";.
Les types spécifiques au moteur de GTA
SHVDN fournit des types taillés sur mesure pour l'écosystème du jeu :
GTA.Math.Vector3: Représente une position ou une direction dans l'espace 3D avec ses composantesX,YetZ:Vector3 positionJoueur = Game.Player.Character.Position;GTA.Weather: Une énumération (enum) de tous les états météo reconnus par le moteur :Weather meteoActuelle = World.Weather;World.Weather = Weather.ExtraSunny;
Variables locales contre champs de classe
L'endroit où tu déclares une variable décide de sa durée de vie. C'est ici que la plupart des débutants perdent des heures en débogage :
Variables locales : temporaires au sein d'une méthode
Une variable locale est déclarée à l'intérieur d'une méthode. Elle naît quand la méthode est appelée et disparaît dès que l'exécution quitte ce bloc :
private void OnKeyDown(object sender, KeyEventArgs e)
{
// Créée au moment de la touche, détruite dès la fin de ce bloc
float distance = 10.0f;
}
Champs : l'état persistant d'une image à l'autre
Comme OnTick tourne soixante fois par seconde, toute variable déclarée dans OnTick est réinitialisée à chaque image. Si tu veux mémoriser qu'une mission a commencé ou l'heure à laquelle tu as envoyé un message, déclare un champ au niveau de la classe :
public sealed class SurveillanceMeteo : Script
{
// Ces champs survivent d'une image à l'autre
private bool _messageAffiche;
private int _prochaineVerification;
private void OnTick(object sender, EventArgs e)
{
if (_messageAffiche)
{
return;
}
if (Game.GameTime > _prochaineVerification)
{
_messageAffiche = true;
GTA.UI.Screen.ShowSubtitle("Bienvenue à Los Santos", 3000);
}
}
}
Remarque la convention de nommage : les champs privés d'une classe commencent par un trait de soulignement (_messageAffiche). Cela permet de savoir au premier coup d'œil si l'on manipule un état persistant ou un calcul temporaire.
Dans la leçon suivante, nous abordons le contrôle de flux : prendre des décisions avec les conditions if et les boucles.