Exercice d'escouade
Dans le Projet 03, tu as conçu un garde du corps individuel avec un suivi décalé manuel (FollowToOffsetFromEntity). C'est la solution idéale pour un allié unique car tu gardes le contrôle absolu de sa distance et de son flanc.
Si tu souhaites orchestrer une escouade de trois ou quatre gardes se déplaçant de concert en formation tactique, gérer manuellement chaque décalage devient lourd. GTA V intègre pour cela un moteur de groupe dédié : PedGroup.
Cet exercice est un approfondissement facultatif. Il est auto-suffisant et ne constitue pas un prérequis obligatoire pour la suite du parcours.
Les six étapes d'un PedGroup
Piloter une escouade dans ScriptHookVDotNet respecte toujours ces six étapes :
- Obtenir le groupe du meneur : Accéder à
player.PedGroup. - Créer le suiveur : Faire apparaître un PNJ allié et activer
IsPersistent = true. - Verrouiller l'appartenance : Activer
ped.NeverLeavesGroup = truepour que l'IA ne déserte pas en pleine action. - Ajouter au groupe : Appeler
group.Add(ped, false)(falsesignifiant membre et non chef). - Régler la formation : Choisir une valeur de l'énumération
Formation(ex.FollowInLineouDefault). - Ajuster l'espacement : Appeler
group.SetFormationSpacing(2.5f).
L'implémentation validée d'escouade
Voici le script complet et autonome correspondant au snippet validé S01 :
using System;
using GTA;
public sealed class GroupFollowFormation : Script
{
private Ped _guard;
public GroupFollowFormation()
{
Tick += OnTick;
Aborted += OnAborted;
}
private void OnTick(object sender, EventArgs e)
{
Ped player = Game.Player.Character;
if (player == null || !player.Exists())
{
return;
}
if (_guard != null && _guard.Exists())
{
return;
}
Model model = new Model(PedHash.Security01SMM);
if (!model.IsValid || !model.IsInCdImage || !model.Request(2000))
{
model.MarkAsNoLongerNeeded();
return;
}
try
{
_guard = World.CreatePed(model, player.Position + player.RightVector * 2.5f, player.Heading);
if (_guard == null || !_guard.Exists())
{
return;
}
_guard.IsPersistent = true;
_guard.NeverLeavesGroup = true;
// Étapes 1 & 4 : Ajouter à l'escouade du joueur
PedGroup group = player.PedGroup;
group.Add(_guard, false);
// Étapes 5 & 6 : Définir la formation et l'espacement
group.Formation = Formation.FollowInLine;
group.SetFormationSpacing(2.5f);
}
finally
{
model.MarkAsNoLongerNeeded();
}
}
private void OnAborted(object sender, EventArgs e)
{
if (_guard != null && _guard.Exists())
{
_guard.Delete();
}
}
}
Les formations disponibles
L'énumération GTA.Formation propose quatre dispositions tactiques :
Default: Suivi informel autour du chef.FollowInLine: File indienne marchant directement dans les pas du chef.CircleAroundLeader: Cordon de sécurité à 360 degrés.Pair: Marche en binôme côte à côte.
Quand tu ajoutes deux ou trois gardes selon ce modèle, le moteur natif assigne automatiquement à chacun sa place dans la formation, sans aucun calcul manuel de trigonométrie.
Dans la leçon suivante du cursus, nous passons des piétons aux véhicules : nœuds routiers et placement propre sur l'asphalte.