GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: figther2500 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;
}
-
Il te suffit de sortir de la callback si ce qui est renvoyé par la fonction IsPlayerInAnyVehicle est positif.
-
je ne comprens pas très bien y'a moyen tu me montre un exsemple ou un tuto qui explique bien merci
-
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 (http://wiki.sa-mp.com/wiki/) de SA-MP, on peut lire que la fonction IsPlayerInAnyVehicle (http://wiki.sa-mp.com/wiki/IsPlayerInAnyVehicle) (une version française (http://wiki.sa-mp.com/wiki/IsPlayerInAnyVehicle_FR) 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).
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) :
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:
-
Merci profondément et merci aussi pour le lien du wiki :)
-
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é
-
Tu dois utiliser la fonction GetVehicleModel() (http://wiki.sa-mp.com/wiki/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() (http://wiki.sa-mp.com/wiki/GetPlayerVehicleID) dedans.
C'est un peu complexe, alors je te donne la méthode à suivre :
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.
-
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
-
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 (http://wiki.sa-mp.com/wiki/GetPlayerVehicleID_FR) (Version Anglaise (http://wiki.sa-mp.com/wiki/GetPlayerVehicleID))
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
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 (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 (http://wiki.sa-mp.com/wiki/Apprendre_le_pawn_avec_Gilux#Les_conditions)" qui montre une liste d'opérateur (Exemple d'opérateur: "==";"!=")
-
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
-
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 !
-
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
-
C'est reglé, il ma fallue 3heure pour voir que j'avais pas fermé le { de IsPlayerInAnyVehicle