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 :
- Streamer le modèle d'un PNJ de manière asynchrone en mémoire avec un délai d'attente sécurisé.
- Calculer une position 3D à 2 mètres devant le joueur à l'aide de l'arithmétique vectorielle.
- Faire apparaître le piéton orienté dans la direction du joueur lors d'un appui sur
Pavé numérique 1. - Empêcher strictement les doublons : refuser la création et alerter le joueur si une entité est déjà active.
- 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 blocfinallypour ne pas saturer la mémoire du jeu. - Entité active unique : suivre le piéton dans un champ privé
_spawnedet vérifier systématiquement_spawned != nullainsi 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
OnAbortedpour que le rechargement à chaud ne laisse aucun PNJ orphelin dans le monde.
Étapes de réalisation
- Suivre l'état de l'entité : déclare un champ privé
private Ped _spawned;dans ta classe de script. - Brancher les événements : dans le constructeur, enregistre des gestionnaires pour
KeyDownetAborted. - Bloquer les doublons : au début de la routine de spawn, vérifie si
_spawnedn'est pas nul et s'il existe dans le monde. Si oui, affiche un téléscripteur et interromps la méthode. - Streamer le modèle : instancie un objet
ModelavecPedHash.Trevoret appellemodel.Request(2000). Si la requête échoue ou expire, libère le modèle et quitte. - Calculer la position et instancier : dans un bloc
try-finally, récupère le joueur, calcule le décalage de 2 mètres avecplayer.ForwardVector, et invoqueWorld.CreatePed. - Libérer le modèle : dans le bloc
finally, appelle impérativementmodel.MarkAsNoLongerNeeded(). - 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. - Relier les touches et le déchargement : associe
Keys.NumPad1à la création,Keys.NumPad0à la destruction, et appelle la méthode de suppression dansOnAborted.
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
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.