Toretto

strcmp qui ne provoque rien

11 messages dans ce sujet

Salut, j'ai un petit problème, je ne suis ni fort ni débutant en pawn, je me considère entre les deux, "average", passons. J'ai un petit problème avec mon code issu d'un script de level (expérience) avec une touche de statistiques. Pour info je suis passé par @Tysanio qui m'a expliqué mais j'ai pas vraiment compris, ainsi que @C_far & @AceK (je vous remercie tous les trois d'ailleurs) chacun m'a expliqué un point différent, et m'ont conseillés de passer par le forum dans la partie d'aide & assistance, et me voilà. Je vous laisse avec le code, si besoin de plus d'explications...Voir le code entier...Quelques lignes je suis là!

 

if(strcmp("/niveau", cmd, true, 10)  == 0)
    {
        // ici tu ajoutes si le joueur de ton serveur est co ou pas
        if(gPlayerLogged[playerid] == 1)
        {
            new stats[248];
            format(stats, sizeof(stats), "_______________________");
            SendClientMessage(playerid,lightgreen,stats);
            format(stats, sizeof(stats), " *** %s ***",playername);
            SendClientMessage(playerid,white,stats);
            format(stats, sizeof(stats), " Général: Niveau [%d], Expérience [%d/%d]",PlayerInfo[playerid][pLevel],PlayerInfo[playerid][pExp],expamount);
            SendClientMessage(playerid,white,stats);
        }
        return 1;
    }
    return 0;

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Comme je te l'ai dit, passe par zcmd (ou un autre processeur de commandes), tu te casseras moins la tête déjà.

Et dans ton cas, y a qu'une chose à faire : print et printf ;)

 

Là si une personne tape clairement "/niveau", strcmp te renverra la valeur 0 (pour rappel strcmp n'est pas une fonction native qui renvoie une valeur booléenne, mais bien une valeur entière 0/1/-1).

Donc si rien ne s'affiche, ça doit venir de ta condition avec le tableau gPlayerLogged, à toi de print sa valeur pour voir si ça correspond à ce que tu attends.

1 personne aime ça

Partager ce message


Lien à poster
Partager sur d’autres sites
	//if(strcmp("/niveau", cmd, true, 10)  == 0)
    if(strcmp(cmd, "/niveau", true) == 0)
	{
        if(gPlayerLogged[playerid] == 1)// Ici sa doit merder
        {
            new stats[248];
            format(stats, sizeof(stats), "_______________________");
            SendClientMessage(playerid,lightgreen,stats);
            format(stats, sizeof(stats), " *** %s ***",playername);
            SendClientMessage(playerid,white,stats);
            format(stats, sizeof(stats), " Général: Niveau [%d], Expérience [%d/%d]",PlayerInfo[playerid][pLevel],PlayerInfo[playerid][pExp],expamount);
            SendClientMessage(playerid,white,stats);
        }
        print("playerlogged est a 0 .");
		return 1;
    }
    return 0;

 

Modifié par Marcus62

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai essayé ton code mais ça ne marche toujours pas.

Je vais essayer de remplacer strcmp par zcmd voir ce que ça donne.

Partager ce message


Lien à poster
Partager sur d’autres sites

Mais tu as vérifié que la valeur de gPlayerLogged[playerid] soit égale à 1 au mois ? Un petit printf et c'est torché.

 

Modifié par Gacha

Partager ce message


Lien à poster
Partager sur d’autres sites

Quand tu fait la commande voit tu sur la console le print ?

Partager ce message


Lien à poster
Partager sur d’autres sites

D'abord :

print("playerlogged est a 0 .");

apparaîtra dans tout les cas !

Si tu veux éviter ça, met:

else
	print("playerlogged est a 0 .");

 

Tu peux aussi print la valeur de playerlogged:

printf("Valeur de gPlayerLogged[%d] = %d", i, gPlayerLogged[playerid]);


Cela t'aidera à savoir si ta condition if(!strcmp ...) est bien passée (même si je ne vois pas d'erreur sur cette ligne). :)
Bon courage

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah! J'ai jamais essayé de comprendre le fonctionnement de printf donc j'utilisais toujours print tout court, merci pour cette syntaxe, elle m'aidera bien et bel dans le futur. (maintenant même :) )

Partager ce message


Lien à poster
Partager sur d’autres sites
if(strcmp("/niveau", cmd, true)  == 0)
{
    printf("gPlayerLogged[%d] -> %d", playerid, gPlayerLogged[playerid]);
    // ici tu ajoutes si le joueur de ton serveur est co ou pas
    if(gPlayerLogged[playerid] == 1)
    {
        new stats[248];
        format(stats, sizeof(stats), "_______________________");
        SendClientMessage(playerid,lightgreen,stats);
        format(stats, sizeof(stats), " *** %s ***",playername);
        SendClientMessage(playerid,white,stats);
        format(stats, sizeof(stats), " Général: Niveau [%d], Expérience [%d/%d]",PlayerInfo[playerid][pLevel],PlayerInfo[playerid][pExp],expamount);
        SendClientMessage(playerid,white,stats);
    }
    return 1;
}
return 0;

@XDamienX007 Fais attention, tu as mis "i" au lieu de "playerid" dans ton printf, l'auteur n'aurait pas compris ton erreur. :P

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 02/12/2017 à 11:45, C_far a dit :

@XDamienX007 Fais attention, tu as mis "i" au lieu de "playerid" dans ton printf, l'auteur n'aurait pas compris ton erreur. :P

 

Yes, je ne sais pas pourquoi je croyais avoir vu une boucle for dans son script ^^

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 02/12/2017 à 10:45, C_far a dit :

if(strcmp("/niveau", cmd, true)  == 0)
{
    printf("gPlayerLogged[%d] -> %d", playerid, gPlayerLogged[playerid]);
    // ici tu ajoutes si le joueur de ton serveur est co ou pas
    if(gPlayerLogged[playerid] == 1)
    {
        new stats[248];
        format(stats, sizeof(stats), "_______________________");
        SendClientMessage(playerid,lightgreen,stats);
        format(stats, sizeof(stats), " *** %s ***",playername);
        SendClientMessage(playerid,white,stats);
        format(stats, sizeof(stats), " Général: Niveau [%d], Expérience [%d/%d]",PlayerInfo[playerid][pLevel],PlayerInfo[playerid][pExp],expamount);
        SendClientMessage(playerid,white,stats);
    }
    return 1;
}
return 0;

@XDamienX007 Fais attention, tu as mis "i" au lieu de "playerid" dans ton printf, l'auteur n'aurait pas compris ton erreur. :P

Je l'avais corrigée quand j'ai lancé le script ^^'

 

Problème résolu, merci aux participants.

 

 

 

 

 

@modo stp lock ou je te met une fessée

Partager ce message


Lien à poster
Partager sur d’autres sites
Guest
Ce sujet ne peut plus recevoir de nouvelles réponses.