• 09 Juillet 2025, 02:58:24


Auteur Sujet: Détruire véhicule aprés qu'il est spawn  (Lu 1263 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne JohnAnto

  • *
  • Criminel
  • Messages: 34
    • Voir le profil
Détruire véhicule aprés qu'il est spawn
« le: 18 Janvier 2013, 16:11:24 »
Bonjours,

Je connais la fonction DestroyVehicule mais je sais pas m'en servir :/
Donc j'ai fais un fs pour pouvoir spawn des véhicule mais quand un véhicule et spawner et qu'on en spawn un autre, et bien il reste, sa fais que les véhicule vont s'accumulé et sa vas pourrir la map. Bien évidemment faudrait qu'ils se détruisent automatiquement sans que l'on est besoin de faire une commande genre /vdestroy
Prefer the quality is better now

Hors ligne Infu

  • *
  • Modo LS - Admin FnF
  • Messages: 3551
    • Voir le profil
Re : Détruire véhicule aprés qu'il est spawn
« Réponse #1 le: 18 Janvier 2013, 16:22:42 »
Faut que tu attribues un nom aux véhicules que tu spawn.
Ensuite, tu peux détruire ce véhicule en utilisant ce nom.

Code: (pawn) [Sélectionner]
new nom;
nom = CreateVehicle(....);
DestroyVehicle(nom);



Adju ♥
(-_-)



Hors ligne chneubeul

  • *
  • Gangster
  • GTA Online Addict :)
  • Messages: 1132
    • Voir le profil
Re : Détruire véhicule aprés qu'il est spawn
« Réponse #2 le: 18 Janvier 2013, 17:56:51 »
Salut,

une petite chose, kick le joueur du véhicule avant de détruire le véhicule :p

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : Détruire véhicule aprés qu'il est spawn
« Réponse #3 le: 18 Janvier 2013, 19:42:14 »
Alors ce genre de système est très simple à mettre en place.
Pour cela, tu vas avoir besoin de:



Alors, le but est de vérifié si un joueur à déjà crée un véhicule en lisant une variable, si c'est le cas, on vérifie s'il existe.
S'il existe, on le détruit puis on créé un nouveau véhicule.
S'il n'existe pas, on créer un véhicule directement.

Donc, la fonction
CreateVehicle retourne l'indice du véhicule créé, il faut donc garder cette valeur dans un tableau avec un indice correspondant au joueur courant.

Citer
Returns: The ID of the vehicle created (NOTE: starts at 1).

On sait que les véhicules commence à l'indice 1, on peut donc utilisé 0 comme valeur d'initialisation.

Code: (pawn) [Sélectionner]
new spawnedVehicle[MAX_PLAYERS] = { 0 };
Maintenant qu'on à ça, lorsqu'un joueur demande de faire apparaître un véhicule, on vérifie si l'indice n'est pas 0, si il n'est pas à 0, on vérifie si le véhicule existe, et enfin si c'est le cas, on le détruit.

Code: (pawn) [Sélectionner]
if ( spawnedVehicle[playerid] != 0 ) {
    if ( IsValidVehicle(spawnedVehicle[playerid]) ) {
        DestroyVehicle(spawnedVehicle[playerid]);
       
        spawnedVehicle[playerid] = 0;
    }
}

Après cette vérification, on peut créer sans soucis notre véhicule:

Code: (pawn) [Sélectionner]
spawnedVehicle[playerid] = CreateVehicle(modelid, x, y, z, angle, color1, color2, respawn_delay);
Maintenant, quand un joueur va se déconnecter, son véhicule va rester là, sans conducteur, on peut donc, dans la fonction évènementielle OnPlayerDisconnect utiliser le code précédent pour supprimer son véhicule si il en a créé un et si il existe toujours.
Pour cela, on va factoriser le code.


Code: (pawn) [Sélectionner]
stock destroyPlayerVehicle(playerid) {
    if ( spawnedVehicle[playerid] != 0 ) {
        if ( IsValidVehicle(spawnedVehicle[playerid]) ) {
            DestroyVehicle(spawnedVehicle[playerid]);
           
            spawnedVehicle[playerid] = 0;
        }
    }
}

À présent, dans notre demande de création de véhicule, on aura qu'à appeler cette fonction, lui laisser faire son boulot et créer directement le véhicule, et lors de la déconnexion, l'appeler simplement.

Code: (pawn) [Sélectionner]
destroyPlayerVehicle(playerid);

spawnedVehicle[playerid] = CreateVehicle(modelid, x, y, z, angle, color1, color2, respawn_delay);

Code: (pawn) [Sélectionner]
public OnPlayerDisconnect(playerid, reason) {
    destroyPlayerVehicle(playerid);
}

Et voilà, ton système fonctionne et ne laissera plus de véhicule fantôme.

Remarque: Ce message est volontairement appuyé sur les détails, il montre comment on doit raisonner simplement pour créer un système simple.