Tâches de combat
Faire combattre un PNJ dans GTA V exige deux éléments indissociables : une arme adaptée entre ses mains, et une tâche de combat orientant son agressivité vers une cible précise. Sans ces deux ingrédients, un passant armé peut simplement rester immobile ou s'enfuir au premier coup de feu.
Armer un PNJ
Pour équiper un personnage en armes et en munitions, utilise la méthode Weapons.Give :
using GTA;
public void EquiperGarde(Ped guard)
{
// Donner un pistolet avec 100 balles, dégainer immédiatement, chargé
guard.Weapons.Give(WeaponHash.Pistol, 100, true, true);
// Ajuster ses aptitudes au combat
guard.Armor = 100;
guard.Accuracy = 60; // Précision de 0 à 100 pour cent
}
Cibler un agresseur précis
Le moyen le plus fiable de déclencher un combat consiste à désigner explicitement l'entité ennemie à abattre :
guard.Task.Combat(agresseur, TaskCombatFlags.None, TaskThreatResponseFlags.None);
Cette méthode ordonne à l'intelligence artificielle de combat native de se mettre à couvert, viser, tirer, progresser et contourner la cible désignée jusqu'à sa mort ou l'annulation de l'ordre.
Éviter les méthodes de combat obsolètes
Dans les vieux tutoriels ou sur les forums, tu liras souvent :
// OBSOLÈTE dans le SHVDN moderne : à bannir
guard.Task.FightAgainstHatedTargets(50f);
FightAgainstHatedTargets est déprécié dans ScriptHookVDotNet3 moderne. Il repose sur un balayage ambiant qui échoue régulièrement à identifier les hostiles dans une fusillade rapide.
Utilise plutôt l'une de ces deux méthodes modernes :
- Combat sur cible explicite :
guard.Task.Combat(agresseur, ...)quand ton script sait précisément qui attaque (recommandé pour les gardes du corps et les missions). - Balayage de zone moderne :
guard.Task.CombatHatedTargetsAroundPedTimed(player, 50f, 10000)lorsqu'on s'appuie sur des groupes de relations.
Le drapeau BlockPermanentEvents
Les passants ambiants de Los Santos obéissent à un directeur de panique global. Si un coup de feu éclate, les passants ordinaires hurlent et s'enfuient en courant.
Si tu conçois un garde du corps scripté, un agent de sécurité ou un membre de gang qui doit obéir à tes ordres au lieu de céder à la panique ambiante, verrouille sa prise de décision :
// Empêche les événements ambiants (cris, coups de feu) d'écraser tes ordres
guard.BlockPermanentEvents = true;
Cette ligne unique fait toute la différence entre un allié discipliné et un PNJ qui détale dès qu'une sirène retentit.
Dans la leçon suivante, nous étudions les factions et l'hostilité : comment les groupes de relations définissent alliés, neutres et ennemis.