Aller au contenu principal

Objectifs de mission

Une mission est bien plus qu'un simple rassemblement d'entités : c'est un contrat clair avec le joueur. Le jeu lui indique quoi faire, surveille sa progression, réagit s'il échoue ou abandonne, et lui remet une récompense gratifiante quand il triomphe.

Les sous-titres : la narration cinématographique

Alors que les notifications de l'écran en haut à gauche (GTA.UI.Notification.PostTicker) sont idéales pour les indices discrets, les missions de GTA V transmettent les dialogues majeurs via des Sous-titres au bas de l'écran :

// Afficher un sous-titre pendant 4 secondes (4000 ms)
GTA.UI.Screen.ShowSubtitle("~y~Objectif :~s~ Rejoins le point de largage avant d'être repéré.", 4000);

Tu peux utiliser les codes de couleur natifs :

  • ~y~ : Jaune (texte standard de mission)
  • ~r~ : Rouge (danger / ennemis)
  • ~g~ : Vert (alliés / objectifs atteints)
  • ~b~ : Bleu
  • ~s~ : Rétablir le blanc standard

Les trois issues d'une mission

Toute architecture de mission propre doit prévoir trois issues distinctes :

  1. La victoire : Le joueur atteint l'objectif dans les règles.
  2. L'échec : Le joueur meurt, un VIP à escorter est abattu ou le véhicule cible explose.
  3. L'abandon : Le joueur se lasse, fait demi-tour et part à l'autre bout de la carte.
private void EvaluerStatutMission(Ped player)
{
// Condition d'échec : mort du joueur
if (player.IsDead)
{
SurEchecMission("Tu es mort.");
return;
}

// Condition d'abandon : s'éloigner trop loin de la zone de jeu
if (player.Position.DistanceTo(_pointDepart) > 500f)
{
SurAbandonMission();
return;
}

// Condition de victoire : atteindre le point balisé
if (player.Position.DistanceTo(_pointArrivee) < 2.5f)
{
SurVictoireMission();
}
}

La récompense unique : drapeau en mémoire seule

Dans le Projet 07, accomplir la mission rapporte de l'argent au joueur. Le piège classique du débutant consiste à écrire Game.Player.Money += 500 dans OnTick dès que le joueur est à moins de 2,5 mètres. Comme OnTick tourne 60 fois par seconde, rester deux secondes dans le marqueur rapporte $60,000 !

Verrouille l'attribution avec un drapeau booléen en mémoire :

private bool _recompenseAttribuee;

private void SurVictoireMission()
{
if (_recompenseAttribuee)
{
return;
}

_recompenseAttribuee = true;
Game.Player.Money += 500;
GTA.UI.Notification.PostTicker("Mission réussie : +500 $ reçus.", false);

NettoyerMission();
}

Garde les choses simples : le Projet 07 utilise uniquement un drapeau mémoire. La persistance sur disque au redémarrage du jeu fait l'objet du Projet 08.

Dans le Projet 07, tu assembles ces pièces pour bâtir une mission complète du début à la fin.