GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Taylor le 21 Octobre 2011, 15:58:56

Titre: [Problème] Tuto ne suit pas
Posté par: Taylor le 21 Octobre 2011, 15:58:56
Bonjour,

Je rencontre un problème que je ne comprend pas d'où cela peut venir.
Je vous explique:

Quand on n'est a l'inscription, on clique si on n'est un homme ou une femme, quand je clique sur "homme" sa poursuit le tuto mais quand je clique sur "femme" sa suit pas le tutoriel et sa enlève le tableau. Donc si on veux reaparaitre le tableau tu fais "/t (texte)" et il te réafiche le tableau et ainsi de suite le problème suit...

Le truck que je trouve bizzare c'est que j'ai comparer a un autre gm, le scripte est exactement pareil et dans l'autre gm sa fonctionne...

Voilà le scripte:

Défine :
#define TUTOMENU 7 // By Tomy Copyright By InterGaming
Dans OnDialogResponse:
   if(dialogid == TUTOMENU)
   {
if(response)
{
new tmp[256];//variable pour notre format
format(tmp, 256, "homme", inputtext) || format(tmp, 256, "femme", inputtext)
return OnPlayerText(playerid, tmp);//
}
else//si pas de reponse
    {
        new tmp[256];//variable pour notre format
format(tmp, 256, "femme", inputtext) || format(tmp, 256, "femme", inputtext)
return OnPlayerText(playerid, tmp);//
    }
   }

Et le scripte du tuto: (parti 1)

public SetPlayerSpawn(playerid)
{
    if(IsPlayerNPC(playerid)) return 1;
if(IsPlayerConnected(playerid))
{
    SetPlayerSkin(playerid, PlayerInfo[playerid][pChar]);
    if(PlayerInfo[playerid][pTut] == 0)
    {
gOoc[playerid] = 1; gNews[playerid] = 1; gFam[playerid] = 1;
SetPlayerInterior(playerid, 3);
PlayerInfo[playerid][pInt] = 3;
SetPlayerPos(playerid, 330.6825,163.6688,1014.1875);
SetPlayerFacingAngle(playerid, 280);
TogglePlayerControllable(playerid, 0);
RegistrationStep[playerid] = 1;
//SendClientMessage(playerid, COLOR_YELLOW, "Veuillez remplir ce formulaire s'il vous plait. Il nous permettra d'avoir plus d'informations sur vous.");
//SendClientMessage(playerid, 0x87C1D7F6, "~~~~~~~~~~~~~~~~Etape 1~~~~~~~~~~~~~~~~");
//SendClientMessage(playerid, COLOR_WHITE, "Êtes vous un Homme ou une Femme ? (Ecrivez ce que vous êtes)");
//SendClientMessage(playerid, 0x87C1D7F6, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
new tutomsg[256];
format(tutomsg,256,"Nous te souhaitons tout d'abord la bienvenue sur notre serveur, American World. \nNotre base de donnée demande de fournir quelques informations pour pouvoir s'inscrire correctement \n\nPremière information: Vous êtes un homme ou bien une Femme?");
ShowPlayerDialog(playerid,TUTOMENU,DIALOG_STYLE_MSGBOX,"[Menu d'inscription] ~ Informations N°1 ~ ",tutomsg,"Homme","Femme");
return 1;
    }

Suite: (parti 2)

if(RegistrationStep[playerid] > 0)
{
    if(RegistrationStep[playerid] == 1)
    {
        new idx;
    tmp = strtok(text, idx);
    if((strcmp("homme", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("homme")))
{
    PlayerInfo[playerid][pSex] = 1;
    //SendClientMessage(playerid, 0x87C1D7F6, "~~~~~~~~~~~~~~~~Etape 2~~~~~~~~~~~~~~~~");
    //SendClientMessage(playerid, COLOR_YELLOW2, "D'accord, donc vous êtes un Homme.");
    //SendClientMessage(playerid, COLOR_WHITE, "Quelle est votre date de naissance? (Utilisez jj/mm/aaaa)");
    //SendClientMessage(playerid, 0x87C1D7F6, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    new maleskin;
    maleskin = random(sizeof(CivMalePeds));
                new tuto1msg[256];
                SendClientMessage(playerid, COLOR_YELLOW2, "Vous avez indiquez que vous êtes donc un Homme.");
    format(tuto1msg,256,"Procédure de l'information suivante en cours... \nProcédure effectuer avec succès. \nDeuxième information : Quel est votre dâte de naissance ? \nVeuillez fournir votre date de naissance ci-dessous :");
    //format(tuto1msg,256,"Procédure de l'information suivante en cours... /nProcédure réussis avec succès./nVeuillez fournir votre date de naissance ci-dessous :");
    ShowPlayerDialog(playerid,TUTOMENU1,DIALOG_STYLE_INPUT,"[Menu du tutoriel] ~ Information N°2 ~",tuto1msg,"Valider","Annuler");
    SetPlayerSkin(playerid, maleskin);
    PlayerInfo[playerid][pChar] = maleskin;
    RegistrationStep[playerid] = 2;
    return 0;
}
else if((strcmp("femme", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("femme")))
{
    PlayerInfo[playerid][pSex] = 2;
    //SendClientMessage(playerid, 0x87C1D7F6, "~~~~~~~~~~~~~~~~Etape 2~~~~~~~~~~~~~~~~");
    //SendClientMessage(playerid, COLOR_YELLOW2, "D'accord, donc vous êtes une Femme.");
    //SendClientMessage(playerid, COLOR_WHITE, "Quelle est votre date de naissance? (Utilisez jj/mm/aaaa)");
    //SendClientMessage(playerid, 0x87C1D7F6, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    new femaleskin;
    femaleskin = random(sizeof(CivFemalePeds));
                new tuto1msg[256];
                SendClientMessage(playerid, COLOR_YELLOW2, "Vous avez indiquez que vous êtes donc une Femme.");
    //format(tuto1msg,256,"NQuelle Est Votre Date de votre naissance? (JJ/MM/ANNE) :");
    format(tuto1msg,256,"Notre base de donnée demande de founir votre date de naissance pour s'inscrire./n/nVeuillez fournir votre date de naissance ci-dessous :");
    ShowPlayerDialog(playerid,TUTOMENU1,DIALOG_STYLE_INPUT,"Menu Du Tutoriel Etape 2 ",tuto1msg,"Valider","Annuler");
    SetPlayerSkin(playerid, femaleskin);
    //SetPlayerSkin(playerid, femaleskin);
    PlayerInfo[playerid][pChar] = femaleskin;
    RegistrationStep[playerid] = 2;
    return 0;
}
else
{
new tutomsg[256];
format(tutomsg,256,"Je n'ai pas trés bien compris!\nVous êtes un Homme ou une Femme? :");
ShowPlayerDialog(playerid,TUTOMENU,DIALOG_STYLE_MSGBOX,"Menu D'inscription Etape 1 ",tutomsg,"Homme","Femme");
}
return 0;
}
else if(RegistrationStep[playerid] == 2)
    {
        new year, month,day;
getdate(year, month, day);
        new DateInfo[3][20];
split(text, DateInfo, '/');
if(year - strvalEx(DateInfo[2]) > 100 || strvalEx(DateInfo[2]) < 1 || strvalEx(DateInfo[2]) >= year)
{
    new tuto2msg[256];//variable pour le format
    format(tuto2msg,256,"Vous êtes beaucoup trop vieux ! \nQuelle Est Votre Date de votre naissance? (JJ/MM/ANNE) :");
    ShowPlayerDialog(playerid,TUTOMENU1,DIALOG_STYLE_INPUT,"Menu Du Tutoriel Etape 2 ",tuto2msg,"Valider","Annuler");
    return 0;
}
new check = year - strvalEx(DateInfo[2]);
if(check == year)
{
    new tuto2msg[256];//variable pour le format
    format(tuto2msg,256,"Vous êtes beaucoup trop vieux ! \nQuelle Est Votre Date de votre naissance? (JJ/MM/ANNE) :");
    ShowPlayerDialog(playerid,TUTOMENU1,DIALOG_STYLE_INPUT,"Menu Du Tutoriel Etape 2 ",tuto2msg,"Valider","Annuler");
    return 0;
}
if(strvalEx(DateInfo[1]) > month)
{
    check -= 1;
}
else if(strvalEx(DateInfo[1]) == month && strval(DateInfo[0]) > day)
{
    check -= 1;
}
PlayerInfo[playerid][pAge] = check;
SendClientMessage(playerid, 0x87C1D7F6, "~~~~~~~~~~~~~~~~Etape 4~~~~~~~~~~~~~~~~");
format(string, sizeof(string), "D'accord, vous avez donc %d ans.",PlayerInfo[playerid][pAge]);
SendClientMessage(playerid, COLOR_YELLOW2, string);
RegistrationStep[playerid] = 3;
SendClientMessage(playerid, COLOR_WHITE, "Quelle est votre Origine? (Tapez : USA, Europe, Asie ou Afrique)");
SendClientMessage(playerid, 0x87C1D7F6, "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
return 0;
    }

Merci beaucoup de votre aide.
Titre: Re : [Problème] Tuto ne suit pas
Posté par: cristab le 21 Octobre 2011, 18:10:27
la reponse et la else//si pas de reponse
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Xartrick le 21 Octobre 2011, 19:39:40
if(dialogid == TUTOMENU)
{
if(response)
{
new tmp[256];

format(tmp, 256, "homme", inputtext) || format(tmp, 256, "femme", inputtext)

return OnPlayerText(playerid, tmp);
}
else
{
new tmp[256];

format(tmp, 256, "femme", inputtext) || format(tmp, 256, "femme", inputtext)
return OnPlayerText(playerid, tmp);
}
}

format(tmp, 256, "homme", inputtext) || format(tmp, 256, "femme", inputtext)
format(tmp, 256, "femme", inputtext) || format(tmp, 256, "femme", inputtext)
What is the fuque?
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Ssk le 21 Octobre 2011, 19:57:41
Ce code est un crime contre la programmation.

Je freepost, je le sais.
Titre: Re : Re : [Problème] Tuto ne suit pas
Posté par: Taylor le 21 Octobre 2011, 21:02:25
if(dialogid == TUTOMENU)
{
if(response)
{
new tmp[256];

format(tmp, 256, "homme", inputtext) || format(tmp, 256, "femme", inputtext)

return OnPlayerText(playerid, tmp);
}
else
{
new tmp[256];

format(tmp, 256, "femme", inputtext) || format(tmp, 256, "femme", inputtext)
return OnPlayerText(playerid, tmp);
}
}

J'enleve donc

}
else
{
new tmp[256];

format(tmp, 256, "femme", inputtext) || format(tmp, 256, "femme", inputtext)
return OnPlayerText(playerid, tmp);

C'est ce qu'il faut faire ou pas?
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Xartrick le 21 Octobre 2011, 21:49:14
Tu formate n'importe comment tes variables, tu utilise des opérateurs alors que c'est inutile et source d'erreur.

if(dialogid == TUTOMENU)
{
if(response)
{
new tmp[256];

format(tmp, sizeof(tmp), "homme");

return OnPlayerText(playerid, tmp);
}
else
{
new tmp[256];

format(tmp, sizeof(tmp), "femme");

return OnPlayerText(playerid, tmp);
}
}
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Taylor le 21 Octobre 2011, 21:59:28
Ah je me suis dit aussi qu'il y avais des truck qui sert a rien.

Je viens de test IG mais toujours rien...
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Taylor le 23 Octobre 2011, 23:34:26
Up.
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Xartrick le 26 Octobre 2011, 02:05:59
Hier j'ai mit un glaçon dans mon Coca, mais rien.

Que veut dire rien ici ? RIEN.

Dans ton avant dernier message, c'est pareil, tu nous dis vaguement ce que tu as fais -- un copier/coller surement -- et tu nous dit qu'il se passe rien.
Donne nous des détails sur ce que tu as fais, sur ce que tu en as déduit, bouge toi si tu veux que nous ont se bouge pour t'aider.
Titre: Re : Re : [Problème] Tuto ne suit pas
Posté par: Taylor le 01 Novembre 2011, 01:16:17
Hier j'ai mit un glaçon dans mon Coca, mais rien.

Que veut dire rien ici ? RIEN.

Dans ton avant dernier message, c'est pareil, tu nous dis vaguement ce que tu as fais -- un copier/coller surement -- et tu nous dit qu'il se passe rien.
Donne nous des détails sur ce que tu as fais, sur ce que tu en as déduit, bouge toi si tu veux que nous ont se bouge pour t'aider.

O

Bien, j'ai pris le tableau d'un autre gm et je l'ai mi dans mon gm, j'ai défini ce qu'il fallait et ensuite aller tester IG si les deux case marchait, je me suis ensuite aperçu que la deuxième case "annuler" ne marchais pas dOnc ne kick pas. J'ai chercher à changer le nom du dialogue comme "12345" et changer par "1" mais le résultat de ce changement n'a rien donner donc n'a pas kick.

PS: le problème de homme/femme est régler, je répond ici pour le problème du bouton "annuler" = kick.
 Voila, j'espère avoir été clair.
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Xartrick le 01 Novembre 2011, 12:29:15
How to Create a Dialog - SA-MP Wiki (http://wiki.sa-mp.com/wiki/How_to_Create_a_Dialog)

Bonne lecture.
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Taylor le 01 Novembre 2011, 15:39:40
J'ai suivi comme demandé dans le wiki, ça ne résous toujours pas mon problème.

Ce que je cherche n'est pas de cliquer sur "continuer" mais de cliquer sur "Annuler" pour que l'on kick ce joueur après le click du bouton n°2.

J'ai ajouté bien évidement un "Kick(playerid);" après le else mais je viens de voir que quand tu click sur la case "annuler" avec la souris rien se passe mais quand t’appuie entrée sur le clavier ça te kick.

On se rapproche déjà donc maintenant il reste que je trouve comment kick quand on clique avec la souris dans la case "annuler"...
Titre: Re : Re : [Problème] Tuto ne suit pas
Posté par: Brian Turner le 01 Novembre 2011, 16:53:29
Tu formate n'importe comment tes variables, tu utilise des opérateurs alors que c'est inutile et source d'erreur.

if(dialogid == TUTOMENU)
{
if(response)
{
new tmp[256];

format(tmp, sizeof(tmp), "homme");

return OnPlayerText(playerid, tmp);
}
else
{
new tmp[256];

format(tmp, sizeof(tmp), "femme");

return OnPlayerText(playerid, tmp);
}
}

On peut faire encore mieux non?
if(dialogid == TUTOMENU)
{
if(response)
{
return OnPlayerText(playerid, "homme");
}
else
{

return OnPlayerText(playerid, "femme");
}
}
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Xartrick le 01 Novembre 2011, 21:05:23
@Brian Turner: Oui, effectivement.
@Taylor: Ce que je voulais te montrer, c'est que tu n'utilises pas la variable response correctement.


OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);

playerid    - The ID of the player who responded to the dialog box.
dialogid    - The ID of the dialog the player responded to, assigned in ShowPlayerDialog.
response    - 1 for first button and 0 for second button
listitem    - The ID of the list item selected by the player.
inputtext[] - The text entered into the input box by the player or the selected list item text.

response - 1 for first button and 0 for second button
inputtext[] - The text entered into the input box by the player or the selected list item text.
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Taylor le 01 Novembre 2011, 21:27:34
Donc je dois utiliser la variable response comme ça:

    if(response == 0)
    {

J'ai faux ? j'ai mis comme ça mais la ça ne kick pas du tout.
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Xartrick le 01 Novembre 2011, 23:37:10
Cherche à comprendre, c'est tous ce que je peux te dire.
Te donner la réponse ne t'aiderai pas.
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Taylor le 02 Novembre 2011, 12:31:33
Bah franchement, je compare deux dialog lun d'entre eux marche, il y'a rien a changer....

Oui je cherche à comprendre depuis le début du problème mais je ny arrive pas.
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Xartrick le 05 Novembre 2011, 11:36:04
J'ai repensé à ton problème et je pense que ta démarche pourrait être amélioré.
Pourquoi utilise la fonction évènementielle OnPlayerText alors que tu peux transmettre toi même les réponses directement.
Si tu clique sur le bouton homme, tu sais que la personne est un homme, pourquoi s'embêter à renvoyer ce résultat alors que tu peux le traiter directement.
Ce que je veux dire, c'est que tu peux utiliser plusieurs tableaux successifs pour demander des informations, et aussi, les récupérer.
Titre: Re : Re : [Problème] Tuto ne suit pas
Posté par: Taylor le 05 Novembre 2011, 12:39:28
J'ai repensé à ton problème et je pense que ta démarche pourrait être amélioré.
Pourquoi utilise la fonction évènementielle OnPlayerText alors que tu peux transmettre toi même les réponses directement.
Si tu clique sur le bouton homme, tu sais que la personne est un homme, pourquoi s'embêter à renvoyer ce résultat alors que tu peux le traiter directement.
Ce que je veux dire, c'est que tu peux utiliser plusieurs tableaux successifs pour demander des informations, et aussi, les récupérer.


Oui mais tu n'a pas très bien compris le problème, quand on clique sur "homme" tout marche parfait mais c'est quand on clique sur "femme" que sa ne marche pas. Je clique sur "femme" ça m’enlève le tableau et je reste sur place freezer, connecté sans tableau, rien...

Ensuite je parle des boutons du tableau, il y a surement un bouton "Continuer" et bien "Annuler" mon problème ce pose sur le bouton "Annuler" je n'arrive pas a faire kick le joueur quand on clique sur ce bouton. J'ai bien vérifié la fonction response, le else, le kickplayer, au final quand on clique sur le bouton "Annuler" le tableau disparait sans réponse. Pour se faire kicker il faut mettre la souris sur le bouton "annuler" et appuyer entrée sur le clavier mais ce n'est pas ce que je veut.

J'ai pourtant bien suivis le wiki, tes réponses mais ça me ramène pas a la résolution de mon problème...
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Xartrick le 05 Novembre 2011, 13:55:21
Ce que je te propose peut régler se problème, mais tu n'as pas l'air de vouloir te bouger pour que cela fonctionne, je veux bien t'aider, mais pas te mâcher le travail.
Titre: Re : Re : [Problème] Tuto ne suit pas
Posté par: Taylor le 05 Novembre 2011, 14:39:45
Ce que je te propose peut régler se problème, mais tu n'as pas l'air de vouloir te bouger pour que cela fonctionne, je veux bien t'aider, mais pas te mâcher le travail.

Je peux te dire que je bouge tout les jours pour règler ce problème et je ne cherche pas à me donner le travaill directement mais de m'aider.

Je ne sais pas ce tu me propose en se moment même, je sais déjà que tu m'a proposée de ajouter la fonction response donc je l'ai ajoutée.
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Xartrick le 05 Novembre 2011, 15:34:33
response est une variable et non une fonction, je ne te demande pas de l'ajouter.
Ensuite, je te propose de travailler directement avec les valeurs reçu et non avec la fonction OnPlayerText.
Titre: Re : Re : [Problème] Tuto ne suit pas
Posté par: Taylor le 05 Novembre 2011, 16:07:11
response est une variable et non une fonction, je ne te demande pas de l'ajouter.
Ensuite, je te propose de travailler directement avec les valeurs reçu et non avec la fonction OnPlayerText.


Bien d'accord,  je vais faire comme tu me la proposer.

Les valeurs reçu je dois le mettre ou donc ?
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Xartrick le 05 Novembre 2011, 18:44:16
Dans ton cas, si la variable response vaut un, cela signifie que le joueur est un homme, sinon, si la variable response est zéro, cela veut dire que le joueur est une femme.
Titre: Re : Re : [Problème] Tuto ne suit pas
Posté par: Taylor le 05 Novembre 2011, 19:18:57
Dans ton cas, si la variable response vaut un.
Je ne comprend pas trop "si la variable response vaut un."

Je ne comprend pas aussi comment mettre la variable response qui vaut un(1) ou zéro(0)
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Xartrick le 05 Novembre 2011, 19:36:35
Je te donne simplement des indications pour tes comparaisons.
Tu n'as pas l'air de comprendre ce que tu fais, je vais donc en rester là.
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Taylor le 05 Novembre 2011, 21:55:24
Je te l'ai déjà dit, le tableau avec Homme ou Femme je l'est laisser tomber...

Je suis au problème du "annuler" que sa kick pas.
Je sais ce que je fais sur le tableau et je comprend. Cependant je comprend pas comment faire pour résoudre le problème c'est tout.

Si tu veux en rester la, je te dit merci comeme de ton aide.
Titre: Re : [Problème] Tuto ne suit pas
Posté par: Xartrick le 06 Novembre 2011, 10:23:48
ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "Titre", "Information", "Valider", "Fermer);
Ce code ouvre une fenêtre (une message box avec comme titre Titre, comme texte Information, avec comme premier bouton Valider et comme second Fermer.

Quand l'utilisateur aura effectué une action sur cette fenêtre, on passera pas la fonction évènementielle OnDialogResponse.
Dans cette dernière, on pourra détecter quelle fenêtre à était utilisé, sur quelle bouton l'utilisateur à appuyé mais également le texte qu'il à entré ou l'indice du texte qu'il a choisi.


if (dialogid == 0)          // if (!(dialogid))
{
    if (response == 1)      // if (response)
    {
        // Bouton "Valuder"
    }
    else if (response == 0) // else
    {
        // Bouton "Fermer"
    }
}

Avec ceci, cela fonctionne parfaitement.