Aller au contenu principal

Projet 06 : Dynamic event

Dans le Projet 05, tu as conçu une confrontation statique de gang. Dans le Projet 06, tu crées un événement dynamique vivant inspiré des rencontres aléatoires de GTA V : deux inconnus se rencontrent dans une ruelle pour un échange suspect. Lorsque le joueur s'en mêle, la négociation dégénère : l'un des acteurs s'enfuit en courant paniqué tandis que l'autre sort une arme pour se battre, et la scène se nettoie d'elle-même une fois achevée.


La mission

Concevoir un événement dynamique d'ambiance remplissant six critères fondamentaux :

  1. Déclencher une mise en scène dynamiquement dès que le joueur s'approche à moins de 60 mètres d'un point géographique précis.
  2. Faire apparaître deux acteurs distincts (un vendeur et un acheteur) face à face en pleine conversation (Task.ChatTo).
  3. Surveiller la proximité et l'état d'armement du joueur en direct.
  4. Faire escalader la scène : l'acheteur prend la fuite à pied tandis que le vendeur ouvre le feu sur le joueur.
  5. Décharger la scène et réinitialiser l'événement si le joueur ignore la rencontre et s'éloigne au-delà de 120 mètres.
  6. Supprimer proprement toutes les entités créées lors du déchargement du script.

Spécifications, contraintes

  • Fuite à pied exclusivement : limiter la retraite de l'acheteur à un sprint pédestre avec _buyer.Task.FleeFrom(player) ; les poursuites en véhicule sont abordées plus loin.
  • Verrou d'exécution unique : utiliser des drapeaux d'état pour interdire toute réapparition ou doublon pendant qu'une scène est déjà en cours.
  • Suppression basée sur la distance : libérer la mémoire en détruisant les deux acteurs si le joueur s'éloigne à plus de 120 mètres.
  • Zéro fuite d'entité : détruire systématiquement les deux PNJ dans OnAborted.

Étapes de réalisation

  1. Déclarer les états et références : définis des champs pour _dealer, _buyer, _eventTriggered, _dealEscalated et la coordonnée cible _dealLocation.
  2. Brancher les événements : dans le constructeur, enregistre des gestionnaires pour Tick et Aborted.
  3. Gérer l'activation de proximité : dans OnTick, calcule player.Position.DistanceTo(_dealLocation). Si la scène n'est pas encore déclenchée et que le joueur est à moins de 60 mètres, appelle SpawnDealScene() et active le drapeau.
  4. Gérer le déchargement à distance : si la scène est active et que le joueur s'éloigne à plus de 120 mètres, appelle CleanUp().
  5. Évaluer les critères d'escalade : si la scène est active sans être en conflit, vérifie si le joueur entre à moins de 8 mètres ou tient une arme. Si oui, appelle EscalateConflict(player).
  6. Mettre en scène la transaction : dans SpawnDealScene, charge les deux modèles, place les acteurs à 1,5 mètre l'un de l'autre en vis-à-vis, donne une arme au vendeur et ordonne un échange via Task.ChatTo.
  7. Bâtir la cinématique d'escalade : dans EscalateConflict, réinitialise les tâches des deux PNJ, ordonne au vendeur d'attaquer le joueur et à l'acheteur de fuir à pied.
  8. Programmer le nettoyage : dans CleanUp, supprime les acteurs existants et réinitialise les drapeaux booléens. Relie CleanUp à OnAborted.

APIs, outils à explorer

  • Ped.Task.ChatTo(Ped otherPed) : ordonne à deux piétons de se faire face et de jouer des gestes de conversation naturels.
  • Ped.Task.FleeFrom(Entity target) : déclenche un sprint de panique à pied pour fuir une entité hostile ou intimidante.
  • Ped.Task.Combat(Ped target) : ordonne un assaut hostile ciblant précisément un PNJ ou le joueur.
  • Entity.Position.DistanceTo(Vector3 point) : calcule la distance euclidienne pour administrer les déclencheurs de proximité.
  • GTA.UI.Notification.PostTicker(string message, bool isImportant) : publie des alertes contextuelles au-dessus de la mini-carte.

Critères de validation

Ton mod est validé dès que :

  • Approche à moins de 60 mètres de la ruelle : le vendeur et l'acheteur apparaissent face à face en pleine conversation.
  • Approche à moins de 8 mètres ou arme dégainée : l'acheteur tourne les talons et s'enfuit en courant dans la rue, tandis que le vendeur tire.
  • Éloignement à 120 mètres en cours d'événement : les deux acteurs disparaissent proprement sans saturer le monde de déchets résiduels.
  • Rechargement avec Inser : les deux acteurs sont supprimés immédiatement.

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.