• 04 Juin 2026, 13:04:21


Auteur Sujet: [Résolu] Existe-t-il une fonction qui détecte si un véhicule tombe dans l'eau ?  (Lu 1753 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Fox_Mulder

  • *
  • Criminel
  • Messages: 36
    • Voir le profil
bonjour,
je suis en train de faire un bout de script de course avec des checkpoint et je voudrais savoir s'il existe une fonction dans pawno permettant de détecter si un joueur tombe dans l'eau avec un véhicule.
Car je veux que pendant une course si un joueur tombe dans l'eau avec son véhicule qu'il soit éliminé de la course.
Merci.
« Modifié: 11 Avril 2009, 19:42:19 par Fox_Mulder »

Hors ligne ApocKalipsS

  • *
  • Gangster
  • **** | Une experience GTA IV hors du commun !
  • Messages: 1141
    • Voir le profil
Ce que je sais c'est que le niveau 0 = niveau de la mer, et que on peut pas aller plus bas sans toucher la mer.
Ou alors tu fais des zones qui entourent toute la mer.

Hors ligne Fox_Mulder

  • *
  • Criminel
  • Messages: 36
    • Voir le profil
Ah oui exact. J'y avait pas pensé à ça. Je vais essayer avec un timer qui permet de prendre la position Z de tous les joueurs en course et s'il détecte un joueur en Z <= 0 ça le disqualifie. Je vais tester ça. Merci beaucoup.  ;)

EDIT : Je viens de tester, c'est impecable. Ca disqualifie bien si le joueur va en dessous de Z0. Si quelqu'un se pose la même question voici un code :


forward verifz();
public verifz()
{
    for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerInAnyVehicle(i) == 1 && joueurencourse1[i] == 1)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(i,x,y,z);
if(GetPlayerPos(i, x, y, z) && z < 0.0)
{
    // l'action à faire si le joueur déscend en dessous du niveau de la mer.
}
}
}
}

et ceci dans "public OnGameModeInit()"

SetTimer("verifz",1000,1);
Merci pour ton aide lepro49  ;)
« Modifié: 11 Avril 2009, 19:41:33 par Fox_Mulder »

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Bonjour mulder,

afin de légèrement optimiser ton code, je te recommande de sortir les variables de la boucle (on ne les créera qu'une seule fois) et ne tester qu'une simple variable est plus rapide... il faudrait vérifier (bien sûr), mais je crois que si tu inverse joueurencourse1 et IsPlayerInAnyVehicle tu devrais obtenir un petite amélioration

forward verifz();
public verifz()
{
new Float:x, Float:y, Float:z;
for(new i=0; i<MAX_PLAYERS; i++)
{
if(joueurencourse1[i] == 1 && IsPlayerInAnyVehicle(i))
{
if(GetPlayerPos(i, x, y, z) && z < 0.0)
{
    // l'action à faire si le joueur déscend en dessous du niveau de la mer.
}
}
}
}

voilà, en espérant que l'amélioration soit notable....

++Sim++





Hors ligne Fox_Mulder

  • *
  • Criminel
  • Messages: 36
    • Voir le profil
C'est vrai que c'est mieux de sortir les variables de la boucle. Je n'y avais pas pensé mais c'est mieux de les créer qu'une seule fois.

Je vais tout de suite remplacer mon code par la correction que tu as fais.

Merci beaucoups  ;)

Hors ligne Bayshore

  • *
  • Grand Banditisme
  • Messages: 923
    • Voir le profil
Attention, la carrière dans le désert de Las Venturas et les égouts près de Ganton à Los Santos sont en dessous du niveau de la mer !

Pense à vérifier si le joueur n'est pas dans des zones comme celles-ci...

Hors ligne Fox_Mulder

  • *
  • Criminel
  • Messages: 36
    • Voir le profil
Oui ça m'a traversé l'espris mais les courses que je fais ne se passent pas en dessous du niveau 0. J'ai testé les parcours que j'ai fait et ça va ça passe.

Merci.