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 :
- Structurer l'ensemble du cycle de vie via une machine à états finis explicite.
- Interroger le maillage routier pour faire apparaître une berline de luxe (
VehicleHash.Cognoscenti) et un chauffeur (PedHash.LSMicheal) lors de l'appui surF9. - Synchroniser l'installation du chauffeur au volant avant d'inviter le joueur à monter en tant que passager.
- Ordonner un trajet autonome à travers la ville en utilisant les drapeaux de conduite modernes d'évitement des collisions.
- Guider le trajet à l'aide d'un tracé GPS dynamique sur le radar et d'un marqueur cylindrique 3D au sol à destination.
- 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 commeFollowTraffic). - 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
- Définir la machine à états : crée l'énumération
ChauffeurStateregroupantInactive,BoardingDriver,WaitingForPlayer,DrivingToDestination,ArrivedetFailed. - Déclarer les champs du script : dans
Project09CompleteMod, définis des champs privés pour_state,_car,_driver,_destinationBlip,_destinationet_rewardAwarded. - Brancher les événements : dans le constructeur, enregistre des gestionnaires pour
KeyDown,TicketAborted. - Programmer l'appel du service : dans
OnKeyDown, intercepteKeys.F9si 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'étatBoardingDriver. - 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 àWaitingForPlayeret inviter le joueur à monter. - En
WaitingForPlayer: dès queplayer.IsInVehicle(_car)est vrai, appelerStartJourney(). - En
DrivingToDestination: dessiner le marqueur 3D au sol. Si la distance à destination est sous les 7 mètres, appelerCompleteJourney().
- Programmer le trajet : dans
StartJourney, instancier le blip GPS, ordonner au chauffeur de conduire vers la cible avecStopForVehicles, et passer àDrivingToDestination. - Gérer l'arrivée : dans
CompleteJourney, vérifier!_rewardAwarded, verser 1 000 $ surGame.Player.Moneyet nettoyer. - Bâtir la destruction propre : dans
CleanUp, supprimer blip, chauffeur et voiture, et réinitialiser l'état. AppelerCleanUpdansOnAborted.
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
F9prè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
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.