Aller au contenu principal

Projet 02 : Ped spawner

Dans le Projet 01, tu as modifié un paramètre d'environnement global. Dans le Projet 02, tu crées ta toute première entité physique vivante dans Los Santos. Ton objectif est de concevoir un spawner au clavier robuste : streamer le modèle d'un acteur en mémoire, positionner le piéton devant le joueur grâce aux vecteurs spatiaux, verrouiller la création contre les doublons et garantir une suppression propre aussi bien sur commande qu'au rechargement du script.


La mission

Concevoir un spawner de piéton fiable répondant à cinq exigences essentielles :

  1. Streamer le modèle d'un PNJ de manière asynchrone en mémoire avec un délai d'attente sécurisé.
  2. Calculer une position 3D à 2 mètres devant le joueur à l'aide de l'arithmétique vectorielle.
  3. Faire apparaître le piéton orienté dans la direction du joueur lors d'un appui sur Pavé numérique 1.
  4. Empêcher strictement les doublons : refuser la création et alerter le joueur si une entité est déjà active.
  5. Supprimer l'entité immédiatement lors d'un appui sur Pavé numérique 0, et garantir l'absence totale de fuite d'entité lors du rechargement.

Spécifications, contraintes

  • Hygiène mémoire : libérer systématiquement le modèle streamé via MarkAsNoLongerNeeded() dans un bloc finally pour ne pas saturer la mémoire du jeu.
  • Entité active unique : suivre le piéton dans un champ privé _spawned et vérifier systématiquement _spawned != null ainsi que _spawned.Exists() avant toute action.
  • Mathématiques spatiales : calculer les coordonnées d'apparition avec la formule player.Position + player.ForwardVector * 2f.
  • Zéro fuite d'entité : implémenter un nettoyage complet dans OnAborted pour que le rechargement à chaud ne laisse aucun PNJ orphelin dans le monde.

Étapes de réalisation

  1. Suivre l'état de l'entité : déclare un champ privé private Ped _spawned; dans ta classe de script.
  2. Brancher les événements : dans le constructeur, enregistre des gestionnaires pour KeyDown et Aborted.
  3. Bloquer les doublons : au début de la routine de spawn, vérifie si _spawned n'est pas nul et s'il existe dans le monde. Si oui, affiche un téléscripteur et interromps la méthode.
  4. Streamer le modèle : instancie un objet Model avec PedHash.Trevor et appelle model.Request(2000). Si la requête échoue ou expire, libère le modèle et quitte.
  5. Calculer la position et instancier : dans un bloc try-finally, récupère le joueur, calcule le décalage de 2 mètres avec player.ForwardVector, et invoque World.CreatePed.
  6. Libérer le modèle : dans le bloc finally, appelle impérativement model.MarkAsNoLongerNeeded().
  7. Programmer la suppression : crée une méthode auxiliaire qui vérifie l'existence de _spawned, appelle _spawned.Delete() et réinitialise le champ à null.
  8. Relier les touches et le déchargement : associe Keys.NumPad1 à la création, Keys.NumPad0 à la destruction, et appelle la méthode de suppression dans OnAborted.

APIs, outils à explorer

  • GTA.Model : wrapper représentant une ressource de modèle présente dans les archives du jeu.
  • Model.Request(int timeout) : charge de façon asynchrone la géométrie, les textures et le squelette en mémoire RAM.
  • Model.MarkAsNoLongerNeeded() : signale au gestionnaire de mémoire que le script n'a plus besoin du fichier source.
  • GTA.World.CreatePed(Model model, Vector3 position, float heading) : fait apparaître physiquement un piéton dans l'univers de jeu.
  • Ped.ForwardVector : vecteur unitaire normalisé indiquant la direction exacte vers laquelle l'entité regarde.
  • Entity.Exists() : valide que le handle natif de l'entité est alloué et toujours présent dans l'univers de jeu.
  • Entity.Delete() : supprime immédiatement l'entité du monde physique et libère ses ressources natives.

Critères de validation

Ton mod est validé dès que :

  • Appui sur Pavé numérique 1 : Trevor apparaît exactement à 2 mètres devant le joueur, orienté dans la même direction.
  • Deuxième appui sur Pavé numérique 1 : le message "Un PNJ est deja present. Supprime-le d'abord." signale qu'un piéton est déjà actif, et aucun clone n'apparaît.
  • Appui sur Pavé numérique 0 : Trevor disparaît instantanément et la référence interne est réinitialisée.
  • Trevor présent en jeu et appui sur Inser : Trevor est supprimé proprement sans laisser de PNJ fantôme dans Los Santos.

Solution, explications

Partner
Solution vérifiée et explications du code

Le sujet, les contraintes et les étapes de réalisation restent 100% libres pour t'exercer par toi-même. Le code source de référence vérifié et les explications détaillées de production sont réservés aux membres du tier Partner.