• 19 Avril 2025, 03:54:56


Auteur Sujet: [Résolu] Comment bloquer une animation en véhicule  (Lu 2343 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne figther2500

  • *
  • Nouveau
  • Messages: 17
    • Voir le profil
[Résolu] Comment bloquer une animation en véhicule
« le: 11 Mars 2014, 20:16:34 »
Bonsoir j'ai remarqué que les animations sur les serveurs roleplay on peut les faire en véhicule et j'aimerais les bloquer et oui on peut mais je n'est toujour pas trouver le problème sa serais gentil si quelqun pourrait m'aider :) voici le code de l'anim


}
    if (strcmp("/fesse", cmdtext, true) == 0) {
       OnePlayAnim(playerid, "SWEET", "sweet_ass_slap", 4.0, 0, 0, 0, 0, 0); // Ass Slapping
    return 1;
}
« Modifié: 12 Mars 2014, 00:39:09 par Gzsume »

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : Comment bloquer une animation en véhicule [pawn]
« Réponse #1 le: 11 Mars 2014, 23:49:04 »
Il te suffit de sortir de la callback si ce qui est renvoyé par la fonction IsPlayerInAnyVehicle est positif.

Hors ligne figther2500

  • *
  • Nouveau
  • Messages: 17
    • Voir le profil
Re : Comment bloquer une animation en véhicule [pawn]
« Réponse #2 le: 12 Mars 2014, 00:02:09 »
je ne comprens pas très bien y'a moyen tu me montre un exsemple ou un tuto qui explique bien merci

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : Comment bloquer une animation en véhicule [pawn]
« Réponse #3 le: 12 Mars 2014, 00:27:50 »
Un bon développeur, c'est un développeur qui sait chercher par lui-même. Comme tu sembles débuter, je vais t'expliquer ça mais à l'avenir, tentes de trouver les informations par toi-même, en lisant d'autres codes source, en naviguant sur le wiki et en lisant des cours (généralement en anglais).

Sur le wiki officiel de SA-MP, on peut lire que la fonction IsPlayerInAnyVehicle (une version française est disponible) renvoie true si le joueur est dans un véhicle et false s'il ne l'est pas. Tu vas donc utiliser cette information dans ton code. Le principe est simple : une condition avec cette fonction (c'est parfait parce qu'elle renvoie true ou false, exactement ce que demande une condition) et à partir de là, tu as deux cas de figure :
  • Le joueur est effectivement dans un véhicule, auquel cas tu sors de la callback et tu ne fais rien (tu peux éventuellement lui envoyer un message) ;
  • Le joueur n'est pas dans un véhicule et dans ce cas, tu peux jouer l'animation ;

Traduit en code, ça ressemble à ça :
SI COMMANDE
  SI VEHICULE
    ENVOYER MESSAGE ERREUR
    SORTIE CALLBACK
  SINON
    JOUER ANIMATION

Pour ton information, afin de sortir de la callback, il faut renvoyer quelque-chose. Généralement, on renvoie false (0), pour indiquer que la commande n'a pas été exécutée ou true (1) pour indiquer au contraire qu'elle a été exécutée.

Je suis sympa et je te code ça, mais ce serait bien que tu tentes de le faire toi-même sans copier-coller ce qui suit, histoire d'apprendre un peu (un copier-coller, ça ne t'apprend rien).

Code: (pawn) [Sélectionner]
if(strcmp("/fesse", cmdtext, true) == 0)
{
  if(IsPlayerInAnyVehicle(playerid))
  {
    SendClientMessage(playerid, COULEUR_MESSAGE_ERREUR, /* Message d'erreur */);
    return 1;
  }

  else
  {
    OnePlayAnim(playerid, "SWEET", "sweet_ass_slap", 4.0, 0, 0, 0, 0, 0);
  }

  return 1;
}

Ce n'est pas la seule méthode à suivre pour réaliser ce que tu souhaites. Par exemple, je peux très bien rédiger ça sous la forme suivante (essaies de comprendre comment ça fonctionne, c'est très instructif) :

Code: (pawn) [Sélectionner]
if(strcmp("/fesse", cmdtext, true) == 0)
{
  if(!IsPlayerInAnyVehicle(playerid))
    return SendClientMessage(playerid, COULEUR_MESSAGE_ERREUR, /* Message d'erreur */);

  OnePlayAnim(playerid, "SWEET", "sweet_ass_slap", 4.0, 0, 0, 0, 0, 0);
}

Bonne chance pour la suite de ton apprentissage et bonne soirée. :wink:
« Modifié: 12 Mars 2014, 00:37:34 par Gzsume »

Hors ligne figther2500

  • *
  • Nouveau
  • Messages: 17
    • Voir le profil
Re : Comment bloquer une animation en véhicule [pawn]
« Réponse #4 le: 12 Mars 2014, 00:36:48 »
Merci profondément et merci aussi pour le lien du wiki :)

Hors ligne figther2500

  • *
  • Nouveau
  • Messages: 17
    • Voir le profil
Re : [Résolu] Comment bloquer une animation en véhicule
« Réponse #5 le: 12 Mars 2014, 00:44:57 »
Désolé encore de te dérangé, je voudrais faire un systeme que sa par exemple l'anim ne marche pas que dans certain vehicle j'ai cherché sur le wiki et je n'est rien trouvé

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : [Résolu] Comment bloquer une animation en véhicule
« Réponse #6 le: 12 Mars 2014, 00:51:54 »
Tu dois utiliser la fonction GetVehicleModel() et comparer ce qu'elle renvoie avec le modèle du véhicule à interdire (ou à autoriser, ça me semble plus approprié). Cette fonction prend en paramètre l'identifiant du véhicule, tu vas donc devoir imbriquer la fonction GetPlayerVehicleID() dedans.

C'est un peu complexe, alors je te donne la méthode à suivre :
Code: (pawn) [Sélectionner]
if(IsPlayerInAnyVehicle(playerid))
{
  new p_vehicleid = GetVehicleModel(GetPlayerVehicleID(playerid));

  if(p_vehicleid == /* ID du véhicule à autoriser */)
  {
    /* Animation */
  }
}

Dans l'hypothèse où le compilateur t'affiche une erreur sur la fonction GetPlayerVehicleID, retires la majuscule de la lettre D (GetPlayerVehicleId). C'est bête mais comme le Pawn est sensible à la casse, ça peut poser problème.

Hors ligne figther2500

  • *
  • Nouveau
  • Messages: 17
    • Voir le profil
Re : [Résolu] Comment bloquer une animation en véhicule
« Réponse #7 le: 12 Mars 2014, 00:55:16 »
Merci, mais je veut que se soit l'inverse si possible

édit : j'ai reussi a faire sa mais sa me met des erreurs

voici mon code
    if(strcmp("/fesse", cmdtext, true) == 0)
    {
  if OnPlayerEnterVehicle(playerid,vehicleid,ispassenger){
      if(GetVehicleModel(vehicleid) != 411)
      {
        SendClientMessage(playerid, 0x00FF00AA, "test");
        return 1;
      }


      else
      {
        OnePlayAnim(playerid, "SWEET", "sweet_ass_slap", 4.0, 0, 0, 0, 0, 0);
      }

      return 1;
    }
    }

et les erreurs :H:\Documents and Settings\****\Bureau\Serveur Samp\gamemodes\lem54.pwn(27396) : error 017: undefined symbol "vehicleid"
H:\Documents and Settings\*****\Bureau\Serveur Samp\gamemodes\lem54.pwn(27397) : error 017: undefined symbol "vehicleid"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


2 Errors.

merci de votre réponse
« Modifié: 12 Mars 2014, 02:01:34 par figther2500 »

Hors ligne Kiloutre

  • Nolife, nerd et geek passionné d'Ordinatique ! ^^
  • *
  • Grand Banditisme
  • Messages: 567
    • Voir le profil
Re : [Résolu] Comment bloquer une animation en véhicule
« Réponse #8 le: 12 Mars 2014, 02:14:47 »
Code: (pawn) [Sélectionner]
if OnPlayerEnterVehicle(playerid,vehicleid,ispassenger){Une callback ne se met jamais dans une autre callback!
Toi tu veux récupérer l'ID du véhicule du joueur, pour ensuite récupérer l'ID du modèle
Donc la fonction appropriée est:
GetPlayerVehicleID (Version Anglaise)

Si tu veux vérifier que le véhicule n'est pas celui spécifié, tu as juste à utiliser "!="(n'est pas égal à) à la place de "==" (est égal à)dans la condition du code de Gzsume

Code: (pawn) [Sélectionner]
if(p_vehicleid != /* ID du véhicule à refuser */)
Je t'invite à regarder ce tuto
http://wiki.sa-mp.com/wiki/Apprendre_le_pawn_avec_Gilux
Qui devrait t'aider sur beaucoup de points
Et je t'invite à regarder la partie "Les conditions" qui montre une liste d'opérateur (Exemple d'opérateur: "==";"!=")
« Modifié: 12 Mars 2014, 02:31:21 par Kiloutre »

[/url]

Hors ligne figther2500

  • *
  • Nouveau
  • Messages: 17
    • Voir le profil
Re : [Résolu] Comment bloquer une animation en véhicule
« Réponse #9 le: 12 Mars 2014, 13:43:51 »
J'ai reussi mais j'ai un problème c'est que la commande ne marche plus quand je suis a pieds

voici le code             if(strcmp(x_nr,"trouver",true) == 0)
    {
        if(IsPlayerInAnyVehicle(playerid))
{
  new p_vehicleid = GetVehicleModel(GetPlayerVehicleID(playerid));

  if(p_vehicleid == 411)
  {
 

        SendClientMessage(playerid, COLOR_LIGHTRED, "Vous ne pouvez pas utilisé cette commandes dans ce véhicule");
return 1;
  }
  else{
               

        tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
    SendClientMessage(playerid, COLOR_WHITE, "USAGE: /v trouver [number[1-5])");
    return 1;
}
if(strcmp(tmp, "1", true) == 0)
{
    new file[256];
format(file, sizeof(file), "LARP/Vehicles/%s.%s.ini", sendername,VehicleNames[PlayerInfo[playerid][pVeh1]-400]);

if(dini_Int(file, "Spawned") == 1)
{
      new Float:X, Float:Y, Float:Z;
        GetVehiclePos(dini_Int(file, "ID"), X, Y, Z);
    SetPlayerCheckpoint(playerid, X, Y, Z, 5);
        format(string, sizeof(string), "Votre véhicule a ete localiser. Allez au marqueur rouge.", VehicleNames[GetVehicleModel(dini_Int(file, "Model"))-400]);
        SendClientMessage(playerid, COLOR_LIGHTRED, string);
return 1;
    }
    else
    {
SendClientMessage(playerid, COLOR_LIGHTRED, "Ce véhicule n'est pas spawn !");
          return 1;
            }
}
if(strcmp(tmp, "2", true) == 0)
{
new file[256];
format(file, sizeof(file), "LARP/Vehicles/%s.%s.ini", sendername,VehicleNames[PlayerInfo[playerid][pVeh2]-400]);

if(dini_Int(file, "Spawned") == 1)
{
      new Float:X, Float:Y, Float:Z;
        GetVehiclePos(dini_Int(file, "ID"), X, Y, Z);
    SetPlayerCheckpoint(playerid, X, Y, Z, 5);
        format(string, sizeof(string), "Votre véhicule a ete localiser. Allez au marqueur rouge.", VehicleNames[GetVehicleModel(dini_Int(file, "Model"))-400]);
        SendClientMessage(playerid, COLOR_LIGHTRED, string);
return 1;
    }
    else
    {
SendClientMessage(playerid, COLOR_LIGHTRED, "Ce véhicule n'est pas spawn !");
          return 1;
            }
}
if(strcmp(tmp, "3", true) == 0)
{
new file[256];
format(file, sizeof(file), "LARP/Vehicles/%s.%s.ini", sendername,VehicleNames[PlayerInfo[playerid][pVeh3]-400]);

if(dini_Int(file, "Spawned") == 1)
{
      new Float:X, Float:Y, Float:Z;
        GetVehiclePos(dini_Int(file, "ID"), X, Y, Z);
    SetPlayerCheckpoint(playerid, X, Y, Z, 5);
        format(string, sizeof(string), "Votre véhicule a ete localiser. Allez au marqueur rouge.", VehicleNames[GetVehicleModel(dini_Int(file, "Model"))-400]);
        SendClientMessage(playerid, COLOR_LIGHTRED, string);
return 1;
    }
    else
    {
SendClientMessage(playerid, COLOR_LIGHTRED, "Ce véhicule n'est pas spawn !");
          return 1;
            }
}
if(strcmp(tmp, "4", true) == 0)
{
new file[256];
format(file, sizeof(file), "LARP/Vehicles/%s.%s.ini", sendername,VehicleNames[PlayerInfo[playerid][pVeh4]-400]);

if(dini_Int(file, "Spawned") == 1)
{
      new Float:X, Float:Y, Float:Z;
        GetVehiclePos(dini_Int(file, "ID"), X, Y, Z);
    SetPlayerCheckpoint(playerid, X, Y, Z, 5);
        format(string, sizeof(string), "Votre véhicule a ete localiser. Allez au marqueur rouge.", VehicleNames[GetVehicleModel(dini_Int(file, "Model"))-400]);
        SendClientMessage(playerid, COLOR_LIGHTRED, string);
return 1;
    }
    else
    {
SendClientMessage(playerid, COLOR_LIGHTRED, "Ce véhicule n'est pas spawn !");
          return 1;
            }
}
if(strcmp(tmp, "5", true) == 0)
{
new file[256];
format(file, sizeof(file), "LARP/Vehicles/%s.%s.ini", sendername,VehicleNames[PlayerInfo[playerid][pVeh5]-400]);

if(dini_Int(file, "Spawned") == 1)
{
      new Float:X, Float:Y, Float:Z;
        GetVehiclePos(dini_Int(file, "ID"), X, Y, Z);
    SetPlayerCheckpoint(playerid, X, Y, Z, 5);
        format(string, sizeof(string), "Votre véhicule a ete localiser. Allez au marqueur rouge.", VehicleNames[GetVehicleModel(dini_Int(file, "Model"))-400]);
        SendClientMessage(playerid, COLOR_LIGHTRED, string);
return 1;
    }
    else
    {
SendClientMessage(playerid, COLOR_LIGHTRED, "Ce véhicule n'est pas spawn !");
          return 1;
            }
}
  }
}
}

Ceci a pour bute d'empecher le /v trouver dans certain véhicule pour réglé certain usebug, mais j'ai un problème c'est que sa bloque la commande quand je suis sur le véhicule et sa marche dans d'autre véhicule, mais quand je suis a pied sa ne marche pas

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : [Résolu] Comment bloquer une animation en véhicule
« Réponse #10 le: 12 Mars 2014, 14:08:53 »
Bonjour,

Je te conseille de prendre quelques minutes pour réfléchir à ton problème. Tentes de faire un schéma comme je l'ai fait un peu plus haut, ça va t'aider à déterminer la marche à suivre. Nous sommes volontiers présents pour t'aider, mais nous ne coderons pas à ta place ; ce n'est nullement pédagogique.

Bonne journée et bonne chance !

Hors ligne figther2500

  • *
  • Nouveau
  • Messages: 17
    • Voir le profil
Re : [Résolu] Comment bloquer une animation en véhicule
« Réponse #11 le: 12 Mars 2014, 14:28:59 »
Je me suis aidé du schéma mais je ne vois pas du tous pourquoi sa ne marche pas quand je suis a pieds
j'y est passé 2heure dessus, et je fais des recherche sur le net :s

Hors ligne figther2500

  • *
  • Nouveau
  • Messages: 17
    • Voir le profil
Re : [Résolu] Comment bloquer une animation en véhicule
« Réponse #12 le: 12 Mars 2014, 17:15:15 »
C'est reglé, il ma fallue 3heure pour voir que j'avais pas fermé le { de IsPlayerInAnyVehicle