GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: 69scorpion le 24 Septembre 2009, 10:11:01

Titre: Cmd a texte
Posté par: 69scorpion le 24 Septembre 2009, 10:11:01
Bonjour voila  j'ai fait une commande pour passer le permis automatique avec des questions ou il faut répondre avec un chiffre mon problème c'est que la cmd ne prend pas les chiffres quand je tape "1" il ne valide pas la commande voila un bout de mon code :

        new id;
    tmp = strtok(text, id);
    id = strvalEx(tmp);
if((strcmp("1", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("1")))
{
    SendClientMessage(playerid, COLOR_YELLOW2, "Mauvaise réponse.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Vous venez de loupé votre permis.");
    PlayerInfo[playerid][pCarLic] = 0;
    TutTime[playerid] = 1;
SetPlayerPos(playerid, -2021.6069,-116.7008,1035.1719);
GameTextForPlayer(playerid, "~r~Permis Non Obtenu",5000,1);
SetPlayerInterior(playerid,3);
TogglePlayerControllable(playerid, 1);
    return 0;
}

Merci d'avance
Titre: Re : Cmd a texte
Posté par: cristab le 24 Septembre 2009, 12:01:31
tu devrait plutot utiliser la callback OnPlayerText
Titre: Re : Cmd a texte
Posté par: 69scorpion le 24 Septembre 2009, 12:22:52
Moi j'ai fais  une callaback public PermisAuto(playerid, text[])
Titre: Re : Cmd a texte
Posté par: Ssk le 24 Septembre 2009, 12:56:11
        new id;
    tmp = strtok(text, id);
    id = strval(tmp);
if(id == 1)
{
    SendClientMessage(playerid, COLOR_YELLOW2, "Mauvaise réponse.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Vous venez de loupé votre permis.");
    PlayerInfo[playerid][pCarLic] = 0;
    TutTime[playerid] = 1;
SetPlayerPos(playerid, -2021.6069,-116.7008,1035.1719);
GameTextForPlayer(playerid, "~r~Permis Non Obtenu",5000,1);
SetPlayerInterior(playerid,3);
TogglePlayerControllable(playerid, 1);
    return 0;
}

STRCMP compare des array c 'est bien comme tu a fait, mais comme tu est sur que le gars va entrer un chiffre utilise strval et compare id avec le chiffre voulu
Titre: Re : Cmd a texte
Posté par: 69scorpion le 24 Septembre 2009, 13:02:01
if(id == 1) >>> si je tape 1 sa devrait marché ??
Titre: Re : Cmd a texte
Posté par: cristab le 24 Septembre 2009, 13:09:23
tout a fait sa veut dire

si le joueur tape 1 il a rater son permis par contre

au plus simple tu devrait mettre comme ceci


if(id != Bonne_Reponse)
{
      SendClientMessage(playerid, COLOR_YELLOW2, "Mauvaise réponse.");
      SendClientMessage(playerid, COLOR_LIGHTRED, "Vous venez de loupé votre permis.");
      PlayerInfo[playerid][pCarLic] = 0;
      TutTime[playerid] = 1;
      SetPlayerPos(playerid, -2021.6069,-116.7008,1035.1719);
      GameTextForPlayer(playerid, "~r~Permis Non Obtenu",5000,1);
      return 0;
   }
   else
   {
      SendClientMessage(playerid,couleur,"text comme quoi il a reussi");
   }
tout en definissant en haute de ton script

#define Bonne_Reponse 0  //si la bonne reponse est 0


EDIT tu devrait meme ajouter
if(id >MAX_REPONSE)
{
   SendClientMessage(playerid,couleur,"ta reponse doit etre entre la 0 et la "#MAX_REPONSE"");
}

#define MAX_REPONSE 4 //si il a 4 choix
Titre: Re : Cmd a texte
Posté par: 69scorpion le 24 Septembre 2009, 17:43:58
Ok j'ai compris donc les réponses a met questions doit tous être au numero 1
Titre: Re : Cmd a texte
Posté par: cristab le 24 Septembre 2009, 18:48:32
pas forcement tout dependras comment tu va proceder
Titre: Re : Cmd a texte
Posté par: 69scorpion le 24 Septembre 2009, 21:43:12
Ca ne marche pas sa compile sans erreur mais quand je test par exemple je tapez "1" sa me met "1" dans le chat au lieu de validé la réponse.

voici mon code :

public PermisAuto1(playerid, text[])
{
new tmp[256];
{
    ClearChatbox(playerid, 10);
        new id;
    tmp = strtok(text, id);
    id = strval(tmp);
    if(id >MAX_REPONSE)
{
    SendClientMessage(playerid,COLOR_RED,"Ta réponse doit être entre la 1 et la 3");
}
if(id != Mauvaise_Reponse)
{
SendClientMessage(playerid, COLOR_YELLOW2, "Mauvaise réponse.");
SendClientMessage(playerid, COLOR_LIGHTRED, "Vous venez de loupé votre permis.");
PlayerInfo[playerid][pCarLic] = 0;
SetPlayerPos(playerid, -2021.6069,-116.7008,1035.1719);
GameTextForPlayer(playerid, "~r~Permis Non Obtenu",5000,1);
SetPlayerInterior(playerid,3);
TogglePlayerControllable(playerid, 1);
return 0;
}
Titre: Re : Cmd a texte
Posté par: Ssk le 25 Septembre 2009, 13:31:26
dans id met ca pour voir

id = strval(text);
Titre: Re : Cmd a texte
Posté par: cristab le 25 Septembre 2009, 13:46:31
de genre de fonction PermisAuto1(playerid, text[]) fait penser que tu utilise la callback OnPlayerText je serais toi je reverait ceci car le mieux dans ce cas serais d'utilise la fonction strcmp
Titre: Re : Cmd a texte
Posté par: 69scorpion le 25 Septembre 2009, 23:48:46
J'ai déplacé mon code je l'ai mit dans le callback OnPlayerText , Tout les touche marche("1","2") sauf qu'en je tape "3" sa met l'écrire dans le chat ??


Voici mon new code :

else if(PassageCode[playerid] > 0)
{
if (PassageCode[playerid]== 1)
{
    ClearChatbox(playerid, 10);
  new idx;
    tmp = strtok(text, idx);
        if ((strcmp("1", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("1")))
{
    SendClientMessage(playerid, COLOR_YELLOW2, "Mauvaise réponse.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Vous venez de loupé votre permis.");
SetPlayerPos(playerid, -2021.6069,-116.7008,1035.1719);
GameTextForPlayer(playerid, "~r~Permis Non Obtenu",5000,1);
SetPlayerInterior(playerid,3);
TogglePlayerControllable(playerid, 1);
    return 0;
}
        else if ((strcmp("2", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("2")))
{
    SendClientMessage(playerid, COLOR_YELLOW2, "Mauvaise réponse.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Vous venez de loupé votre permis.");
SetPlayerPos(playerid, -2021.6069,-116.7008,1035.1719);
GameTextForPlayer(playerid, "~r~Permis Non Obtenu",5000,1);
SetPlayerInterior(playerid,3);
TogglePlayerControllable(playerid, 1);
    return 0;
}
        else if ((strcmp("3", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("3")))
{
    SendClientMessage(playerid, COLOR_YELLOW2, "Bonne réponse.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Félicitaions, vous venez de repondre à la 1ère Question.");
PassageCode[playerid] = 2;
    SendClientMessage(playerid, COLOR_YELLOW2, "2ème Question.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "On roûle sur quelle coté de la route ?");
    SendClientMessage(playerid, COLOR_LIGHTRED, "1- Gauche");
    SendClientMessage(playerid, COLOR_LIGHTRED, "2- Droite ou Gauche");
    SendClientMessage(playerid, COLOR_LIGHTRED, "3- Droite");
    SendClientMessage(playerid, COLOR_YELLOW2, "Repondez avec le numero de la reponse!");
}
}
Titre: Re : Cmd a texte
Posté par: Syg le 25 Septembre 2009, 23:52:06
Tu as oublié
return 0;à la suite de
SendClientMessage(playerid, COLOR_YELLOW2, "Repondez avec le numero de la reponse!");
++
Syg
Titre: Re : Cmd a texte
Posté par: 69scorpion le 26 Septembre 2009, 00:01:12
A oui sa marche  Merci je peut peut savoir quelle est la différence entre return 1; et return 0;
Titre: Re : Cmd a texte
Posté par: cristab le 26 Septembre 2009, 00:20:50
return0; empeche l'affichage dans le chat donc ne renvoie pas ce que tu ecrit tandis que le return1; lui te renveras sur le chat ce que tu a taper


en gros return1; renvoi ce que tu tape

return0; ne renvoi rien
Titre: Re : Cmd a texte
Posté par: 69scorpion le 26 Septembre 2009, 01:43:30
ah ok merci ;)
Titre: Re : Cmd a texte
Posté par: 69scorpion le 20 Juillet 2010, 11:56:12
Bonjour,

Dsl du double post j'ai un autre souci après avoir passer son permis tout ce qu'on tape dans le chat avec la touche T, n'apparait pas (pour celui qui a passé son permis) mais il s'affiche pour les joueurs connectés sur le serveur (GM RP).

Merci

PS : Toujours le même Code.

Edit :

Voila mon code

if(PassageCode[playerid] > 0)
{
if (PassageCode[playerid]== 1)
{
  new idx;
    tmp = strtok(text, idx);
        if ((strcmp("1", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("1")))
{
    SendClientMessage(playerid, 0xFF0000FF, "Mauvaise réponse.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Vous venez de loupé votre permis.");
SetPlayerPos(playerid, 1499.3594,1306.5313,1093.2891);
GameTextForPlayer(playerid, "~r~Permis Non Obtenu",5000,1);
SetPlayerInterior(playerid,3);
TogglePlayerControllable(playerid, 1);
TakingLesson[playerid] = 0;
    return 0;
}
        else if ((strcmp("2", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("2")))
{
    SendClientMessage(playerid, 0xFF0000F, "Bonne réponse.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Félicitaions, vous venez de répondre à la 1ère Question.");
PassageCode[playerid] = 2;
    SendClientMessage(playerid, COLOR_YELLOW2,  "2ème Question:");
        SendClientMessage(playerid, COLOR_GREEN,    "==============================================");                               
    SendClientMessage(playerid, COLOR_LIGHTRED, "On roûle sur quelle côté de la route ?");
SendClientMessage(playerid, COLOR_LIGHTRED, "1- Droite");
    SendClientMessage(playerid, COLOR_LIGHTRED, "2- Droite ou Gauche");
SendClientMessage(playerid, COLOR_LIGHTRED, "3- Gauche");
        SendClientMessage(playerid, COLOR_GREEN,    "==============================================");                           
    SendClientMessage(playerid, COLOR_YELLOW2,  "Répondez en entrant le numero de la réponse!");
    return 0;
}
        else if ((strcmp("3", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("3")))
{
    SendClientMessage(playerid, 0xFF0000FF, "Mauvaise réponse.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Vous venez de loupé votre permis.");
SetPlayerPos(playerid, 1499.3594,1306.5313,1093.2891);
GameTextForPlayer(playerid, "~r~Permis Non Obtenu",5000,1);
SetPlayerInterior(playerid,3);
TogglePlayerControllable(playerid, 1);
TakingLesson[playerid] = 0;
    return 0;
}
return 0;
}

else if (PassageCode[playerid]==2)
{
  new idx;
    tmp = strtok(text, idx);
        if ((strcmp("1", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("1")))
{
    SendClientMessage(playerid, 0xFF0000F, "Bonne réponse.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Félicitaions, vous venez de repondre à la 2ème Question.");
PassageCode[playerid] = 3;
    SendClientMessage(playerid, COLOR_LIGHTRED, "3ème Question:");
        SendClientMessage(playerid, COLOR_GREEN,    "==============================================");                                 
    SendClientMessage(playerid, COLOR_YELLOW2, "Que signifie les deux ligne blanche situer aux intersection de la route.");
SendClientMessage(playerid, COLOR_LIGHTRED, "1- Se se sont les lignes blanches du peintre");
    SendClientMessage(playerid, COLOR_LIGHTRED, "2- Elles servent a rien");
    SendClientMessage(playerid, COLOR_LIGHTRED, "3- Se sont des stops");
        SendClientMessage(playerid, COLOR_GREEN,    "==============================================");                 
    SendClientMessage(playerid, COLOR_YELLOW2, "Répondez en entrant le numero de la réponse!");
    return 0;
}
else if ((strcmp("2", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("2")))
{
    SendClientMessage(playerid, 0xFF0000FF, "Mauvaise réponse.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Vous venez de loupé votre permis.");
SetPlayerPos(playerid, 1499.3594,1306.5313,1093.2891);
GameTextForPlayer(playerid, "~r~Permis Non Obtenu",5000,1);
SetPlayerInterior(playerid,3);
TogglePlayerControllable(playerid, 1);
TakingLesson[playerid] = 0;
    return 0;
}
else if ((strcmp("3", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("3")))
{
    SendClientMessage(playerid, 0xFF0000FF, "Mauvaise réponse.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Vous venez de loupé votre permis.");
SetPlayerPos(playerid, 1499.3594,1306.5313,1093.2891);
GameTextForPlayer(playerid, "~r~Permis Non Obtenu",5000,1);
SetPlayerInterior(playerid,3);
TogglePlayerControllable(playerid, 1);
TakingLesson[playerid] = 0;
    return 0;
}
return 0;
}

else if (PassageCode[playerid]==3)
{
  new idx;
    tmp = strtok(text, idx);
        if ((strcmp("1", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("1")))
{
    SendClientMessage(playerid, 0xFF0000FF, "Mauvaise réponse.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Vous venez de loupé votre permis.");
SetPlayerPos(playerid, 1499.3594,1306.5313,1093.2891);
GameTextForPlayer(playerid, "~r~Permis Non Obtenu",5000,1);
SetPlayerInterior(playerid,3);
TogglePlayerControllable(playerid, 1);
TakingLesson[playerid] = 0;
    return 0;
}
else if ((strcmp("2", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("2")))
{
    SendClientMessage(playerid, 0xFF0000FF, "Mauvaise réponse.");
    SendClientMessage(playerid, COLOR_LIGHTRED, "Vous venez de loupé votre permis.");
SetPlayerPos(playerid, 1499.3594,1306.5313,1093.2891);
GameTextForPlayer(playerid, "~r~Permis Non Obtenu",5000,1);
SetPlayerInterior(playerid,3);
TogglePlayerControllable(playerid, 1);
TakingLesson[giveplayerid] = 0;
    return 0;
}
else if ((strcmp("3", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("3")))
{
    SendClientMessage(playerid, 0xFF0000F, "Bonne réponse.");
    SendClientMessage(playerid, COLOR_BLUE, "Félicitaions, vous venez d'obtenir votre permis de conduire.");
SetPlayerPos(playerid, 1499.3594,1306.5313,1093.2891);
GameTextForPlayer(playerid, "~b~Permis Obtenu",5000,1);
SetPlayerInterior(playerid,3);
TogglePlayerControllable(playerid, 1);
PlayerInfo[playerid][pCarLic] = 1;
TakingLesson[playerid] = 0;
    return 0;
}
}
  return 0;
}
Titre: Re : Cmd a texte
Posté par: 69scorpion le 22 Juillet 2010, 17:36:44
UPPP
Titre: Re : Cmd a texte
Posté par: D0os-Nox le 22 Juillet 2010, 19:04:06
Bonjour, Pour afficher ce que tu ecrie dans le chat à la place du dernier return 0; mais return 1;

Cristab te la dit précédemment ce que sa représenté  ...

Citer
return0; empeche l'affichage dans le chat donc ne renvoie pas ce que tu ecrit tandis que le return1; lui te renveras sur le chat ce que tu a taper


en gros return1; renvoi ce que tu tape

return0; ne renvoi rien

 :closedeyes D0os-Nox  ;D