GTAOnline.net

San Andreas Multiplayer (sa:mp) => Problèmes et bugs => Discussion démarrée par: Gilux le 16 Juin 2010, 23:34:50

Titre: Détruire des véhicules au respawn
Posté par: Gilux le 16 Juin 2010, 23:34:50
Salut, je fais un menu /veh avec quelques véhicules sous forme de DIALOG_STYLE_LIST, mais je voudrais faire en sorte que lorsqu'ils respawnent, ils soient détruits.
Parce que je met DestroyVehicle(vehicleid) Dans OnVehicleSpawn, mais il détruit même ceux ajoutés grâce à AddStaticVehicleEx...

Il faudrait donc faire une exception, mais je ne vois pas comment faire... J'ai essayé avec une variable mais je n'ai pas réussi  :(

Voila un bout du code

Code: (pawn) [Sélectionner]
case 8: // Windsor (ID 555)
            {
    new Float:x, Float:y, Float:z, Float:Angle;
    new Vehicule;
if (IsPlayerInAnyVehicle(playerid))
{
SendClientMessage(playerid,rouge,"Tu as déja un véhicule, sors de celui-ci pour en obtenir un autre !");
}
else
{
                GetPlayerPos(playerid,x,y,z);
GetPlayerFacingAngle(playerid, Angle);
Vehicule = CreateVehicle(555,x,y,z,Angle,-1,-1,30);
PutPlayerInVehicle(playerid,Vehicule,0);
}
            }
public OnVehicleSpawn(vehicleid)
{
if (vehicleid == Vehicule)
{
DestroyVehicle(vehicleid);
}
return 1;
}
Mais ça me renvoie C:\Users\proprietaire\Desktop\serveur\filterscripts\Vehicules.pwn(283) : error 017: undefined symbol "Vehicule" alors que je l'ai déclaré :(

Merci de votre aide   :laugh

++
Titre: Re : Détruire des véhicules au respawn
Posté par: cristab le 17 Juin 2010, 13:28:46
ben le mieux c'est en cree le vehicule tu lui met une var est quand il respawn tu le detruit c'est assez simple au final
Titre: Re : Détruire des véhicules au respawn
Posté par: Syg le 18 Juin 2010, 10:44:37
J'ai eu ce problème dans le script de Lalu's Stunt.
Voici ma solution :

Tu déclares une variable globale qui contiendra l'ID du dernier véhicule créé dans OnGameModeInit
new NbVehicules;

public OnGameModeInit ()
{
...
AddStaticVehicleEx (...);
AddStaticVehicleEx (...);

NbVehicules = AddStaticVehicleEx (...);
/*!!!  Il ne doit plus y avoir d'ajout de véhicule après cette ligne !!! */

...
}
NB : La variable NbVehicules peut être aussi utilisée partout dans le script lorsqu'on a besoin de faire une boucle sur tous les véhicules du serveur (respawn de tous les véhicules par exemple).

Maintenant, on utilise le fait que les nouveaux véhicules créés par les joueurs (avec CreateVehicle) auront forcément des ID supérieurs au dernier véhicule créé par le serveur (dont l'ID est NbVehicules) :
public OnVehicleSpawn (vehicleid)
{
/* Si c'est un véhicule crée par un joueur */
if (vehicleid > NbVehicules)
{
/* On le détruit */
DestroyVehicle (vehicleid);
}
return true;
}

Voilà, simple et efficace.

++
Syg