Aller au contenu principal

Projet 09 : Complete mod

C'est ton examen de fin de cursus. Tout ce que tu as appris au fil des cinq étapes se rassemble dans un cahier des charges professionnel complet. Tu vas concevoir de bout en bout un mod VIP Chauffeur Service complet, combinant requêtes de nœuds routiers, embarquement synchronisé d'un chauffeur PNJ, conduite IA autonome, repères radar dynamiques, marqueurs d'arrivée au sol, récompense financière et gestion de l'échec en cas de destruction du véhicule.


La mission

Concevoir et programmer un mod de service de chauffeur VIP complet répondant à six exigences majeures :

  1. Structurer l'ensemble du cycle de vie via une machine à états finis explicite.
  2. Interroger le maillage routier pour faire apparaître une berline de luxe (VehicleHash.Cognoscenti) et un chauffeur (PedHash.LSMicheal) lors de l'appui sur F9.
  3. Synchroniser l'installation du chauffeur au volant avant d'inviter le joueur à monter en tant que passager.
  4. Ordonner un trajet autonome à travers la ville en utilisant les drapeaux de conduite modernes d'évitement des collisions.
  5. Guider le trajet à l'aide d'un tracé GPS dynamique sur le radar et d'un marqueur cylindrique 3D au sol à destination.
  6. Gérer les conditions de fin : verser un pourboire protégé de 1 000 $ à l'arrivée, traiter la destruction du véhicule par un arrêt d'urgence sécurisé et garantir un déchargement sans encombre.

Spécifications, contraintes

  • Machine à états finis : formaliser la progression avec une énumération explicite (ChauffeurState) plutôt qu'une multitude de booléens enchevêtrés.
  • Drapeaux de conduite modernes : utiliser exclusivement VehicleDrivingFlags.StopForVehicles (proscrire les drapeaux obsolètes comme FollowTraffic).
  • Synchronisation d'embarquement : attendre que le chauffeur soit physiquement assis au volant (_driver.IsInVehicle(_car)) avant d'afficher l'instruction au joueur.
  • Sécurité anti-destruction : interrompre immédiatement la mission et alerter le joueur si le véhicule est détruit (_car.IsDead) pendant le transit.
  • Zéro fuite d'entité : supprimer complètement le véhicule, le chauffeur et le blip dans OnAborted.

Étapes de réalisation

  1. Définir la machine à états : crée l'énumération ChauffeurState regroupant Inactive, BoardingDriver, WaitingForPlayer, DrivingToDestination, Arrived et Failed.
  2. Déclarer les champs du script : dans Project09CompleteMod, définis des champs privés pour _state, _car, _driver, _destinationBlip, _destination et _rewardAwarded.
  3. Brancher les événements : dans le constructeur, enregistre des gestionnaires pour KeyDown, Tick et Aborted.
  4. Programmer l'appel du service : dans OnKeyDown, intercepte Keys.F9 si inactif. Trouve le nœud routier, charge les modèles, instancie la voiture et le chauffeur, ordonne au chauffeur d'entrer dans la voiture et passe à l'état BoardingDriver.
  5. Gérer la boucle d'actualisation (OnTick) :
    • Tester en priorité le garde-fou : si la voiture est détruite, notifier l'échec et nettoyer.
    • En BoardingDriver : dès que _driver.IsInVehicle(_car) est vrai, passer à WaitingForPlayer et inviter le joueur à monter.
    • En WaitingForPlayer : dès que player.IsInVehicle(_car) est vrai, appeler StartJourney().
    • En DrivingToDestination : dessiner le marqueur 3D au sol. Si la distance à destination est sous les 7 mètres, appeler CompleteJourney().
  6. Programmer le trajet : dans StartJourney, instancier le blip GPS, ordonner au chauffeur de conduire vers la cible avec StopForVehicles, et passer à DrivingToDestination.
  7. Gérer l'arrivée : dans CompleteJourney, vérifier !_rewardAwarded, verser 1 000 $ sur Game.Player.Money et nettoyer.
  8. Bâtir la destruction propre : dans CleanUp, supprimer blip, chauffeur et voiture, et réinitialiser l'état. Appeler CleanUp dans OnAborted.

APIs, outils à explorer

  • Ped.Task.EnterVehicle(Vehicle vehicle, VehicleSeat seat, int timeout, float speed, EnterVehicleFlags flag) : ordonne à un PNJ de se diriger vers un véhicule, d'ouvrir la portière et de s'asseoir.
  • Ped.Task.DriveTo(Vehicle vehicle, Vector3 target, float radius, VehicleDrivingFlags flags, float speed) : commande à un conducteur IA de naviguer le long du réseau routier vers une coordonnée cible.
  • VehicleDrivingFlags.StopForVehicles : drapeau de navigation moderne ordonnant à l'IA de respecter la signalisation, de ralentir derrière les obstacles et d'éviter les collisions.
  • Ped.IsInVehicle(Vehicle vehicle) : vérifie qu'une entité est physiquement assise à l'intérieur d'un véhicule.
  • Vehicle.IsDead : indique si un véhicule a été détruit, a explosé ou a sombré dans l'eau.

Critères de validation

Ton mod est validé dès que :

  • Appui sur F9 près d'une rue : la Cognoscenti apparaît calée sur l'asphalte. Le chauffeur s'avance, ouvre la portière et s'installe au volant.
  • Montée dans le siège passager : le chauffeur confirme le départ, le tracé GPS apparaît sur la mini-carte et la voiture s'insère de manière fluide dans le trafic.
  • Arrivée à proximité : le cylindre 3D jaune est parfaitement visible au sol au point de destination.
  • Franchissement des 7 mètres : la course se conclut, 1 000 $ sont versés une seule fois et toutes les entités sont effacées proprement.
  • Test de destruction : faire exploser la voiture déclenche l'arrêt d'urgence et réinitialise le système sans planter.
  • Rechargement avec Inser : la voiture, le chauffeur et le repère radar sont supprimés instantanément.

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.