• 19 Avril 2025, 16:56:19


Auteur Sujet: [Résolu] Payday avec level  (Lu 1923 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne benbenleboss

  • *
  • Nouveau
  • Messages: 7
    • Voir le profil
[Résolu] Payday avec level
« le: 02 Août 2013, 02:36:18 »
Bonjour/Bonsoir à tous

J'ai pris un system de payday qui marche parfaitement mais quand j'ai ajouté des bout de codes pour vérifier le level du joueurs, il ne marche plus...
PS : Je n'est pas d'erreur
Voici le code :
forward payday(playerid); //En haut de mon GM
OnGameModeInit()
{
SetTimer("payday", 60000, 1); // Toutes les 60 secondes.
}
public payday(playerid)
{
    new hh, mm, ss;
    gettime( hh, mm, ss ); // Format : Heures, Minutes, Secondes.
    if( mm == 0 )
    {
for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i))
{
new level = PlayerInfo[playerid][pLevel];
new string[952];
if(level == 1)
{
new Payday = 10000;
GivePlayerMoney(playerid, Payday);
SendClientMessage(playerid, couleur_vert_clair,"{F6F600} ________________________________________________________________\n");
SendClientMessage(playerid, couleur_vert_clair,"{F6F600}|________________________ Jours de Paye _________________________|\n");
format(string, sizeof(string), "{F6F600}|____________________ {00F600}Vous avez reçu %s${F6F600} ____________________|\n", Payday);
SendClientMessage(i, couleur_vert_clair, string);
SendClientMessage(playerid, couleur_vert_clair,"{F6F600} ________________________________________________________________\n");
}
if(level == 2)
{
new Payday = 20000;
GivePlayerMoney(playerid, Payday);
SendClientMessage(playerid, couleur_vert_clair,"{F6F600} ________________________________________________________________\n");
SendClientMessage(playerid, couleur_vert_clair,"{F6F600}|________________________ Jours de Paye _________________________|\n");
format(string, sizeof(string), "{F6F600}|____________________ {00F600}Vous avez reçu %s${F6F600} ____________________|\n", Payday);
SendClientMessage(i, couleur_vert_clair, string);
SendClientMessage(playerid, couleur_vert_clair,"{F6F600} ________________________________________________________________\n");
}
}
}
return 1;
}

Merci d'avance.

EDIT : Tout marche parfaitement merci à vous !
« Modifié: 13 Août 2013, 18:35:10 par benbenleboss »

Hors ligne Kiloutre

  • Nolife, nerd et geek passionné d'Ordinatique ! ^^
  • *
  • Grand Banditisme
  • Messages: 567
    • Voir le profil
Re : Payday avec level
« Réponse #1 le: 02 Août 2013, 02:41:39 »
Bonsoir, peux-tu nous indiquer où sont les boûts de code que tu as rajouté ?
Ah et, la variable level est inutile, tu peux directement utiliser PlayerInfo[playerid][pLevel] ;)
Pareil pour la variable Payday, tu peux directement utiliser les valeurs que tu souhaites ^^

[/url]

Hors ligne benbenleboss

  • *
  • Nouveau
  • Messages: 7
    • Voir le profil
Re : Payday avec level
« Réponse #2 le: 02 Août 2013, 03:00:26 »
Merci pour ta réponse et voilà le code de base que tu ma demander :
public payday(playerid)
{
    new hh, mm, ss;
    gettime( hh, mm, ss );//-> Gives at ??:00 -> every hour (10:00/11:00 and etc)

    if( mm == 0 )
    {
    for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i))
    {
new string[128];
new RandomPay = random(50000 - 10000) + 10000;// new RandomPay = random(MAX - MIN) + MIN;
GivePlayerMoney( playerid, RandomPay );
    SendClientMessage(playerid, COLOR_WHITE,"Look You recived a paycheck!");
    format(string, sizeof(string), "You have recieve a check of $%i", RandomPay);
SendClientMessage(i, COLOR_WHITE, string);
    SendClientMessage(playerid, COLOR_WHITE,"-------------------------");
    }
}
    return 1;
}

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : Payday avec level
« Réponse #3 le: 02 Août 2013, 03:38:58 »
Je pense que le problème vient de la variable level, il faudrait que tu vérifie qu'elle contient bien 1 ou 2.

printf("%i", level);
  • Fait bien attention quand tu n'utilise pas d'accolade, c'est tout-à-fait correct, mais il ne faut pas s'emmêler les pinceaux.

  • Tu peux factoriser ton code: dans les deux conditions, seule la variable Payday change, c'est dommage d'utiliser des données pour du vent.

  • Un message ne peut pas faire plus de 128 caractères, c'est l'une des limites de SA:MP, ta variable string est donc inutilement grande.

  • Si pour chaque niveau du joueur, la somme est augmenté de 10.000, tu peux faire une simple multiplication plutôt qu'une multitude de condition.
Avec cette liste de conseil, on se retrouve avec le code suivant:

public payday(playerid) {
    new hh,
        mm,
        ss;
   
    gettime(hh, mm, ss);
   
    if (mm == 0) {
        for (new i = 0; i < MAX_PLAYERS; i++) {
            if (IsPlayerConnected(i)) {
                new level = PlayerInfo[playerid][pLevel],
                    money = level * 10000;
                new string[128];
               
                printf("Player level: %i\n", level);
               
                GivePlayerMoney(playerid, money);
                SendClientMessage(playerid, couleur_vert_clair, "{F6F600} ________________________________________________________________\n");
                SendClientMessage(playerid, couleur_vert_clair, "{F6F600}|________________________ Jours de Paye _________________________|\n");
                format(string, sizeof(string), "{F6F600}|____________________ {00F600}Vous avez reçu %s${F6F600} ____________________|\n", money);
                SendClientMessage(i, couleur_vert_clair, string);
                SendClientMessage(playerid, couleur_vert_clair, "{F6F600} ________________________________________________________________\n");
            }
        }
    }
   
    return 1;
}

À toi de nous dire comment le code se comporte maintenant.

Hors ligne benbenleboss

  • *
  • Nouveau
  • Messages: 7
    • Voir le profil
Re : Payday avec level
« Réponse #4 le: 02 Août 2013, 10:31:26 »
Merci mais le code ne fonctionne toujours pas, je comprend pas... Je pense que c'est à cause de i et de playerid car on utilise une fois i et après playerid, donc voilà...

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : Payday avec level
« Réponse #5 le: 02 Août 2013, 14:19:08 »
Petite remarque : c'est risqué d'utiliser un timer de 60 secondes pour vérifier les minutes. Parfois les timers freezent un peu et, de ce que j'ai testé, il se peut que ce soit exécuté toutes les 59 secondes (pas de problème) ou... toutes les 61 secondes. Auquel cas personne ne recevra de paie.

Hors ligne benbenleboss

  • *
  • Nouveau
  • Messages: 7
    • Voir le profil
Re : Payday avec level
« Réponse #6 le: 03 Août 2013, 13:26:41 »
J'ai essayé de changé :
SetTimer("payday", 60000, 1);par :
SetTimer("payday", 59000, 1);Mais sa ne marche toujours pas :/
Quelqu'un aurait une idée svp ?

Hors ligne Gzsume

  • *
  • Compétent dans l'inutile
  • Messages: 2236
    • Voir le profil
Re : Payday avec level
« Réponse #7 le: 03 Août 2013, 20:12:06 »
Ma remarque n'apporte pas de solution au problème posé mais est un conseil d'utilisable pour t'en éviter de nouveaux.

Hors ligne benbenleboss

  • *
  • Nouveau
  • Messages: 7
    • Voir le profil
Re : Payday avec level
« Réponse #8 le: 04 Août 2013, 13:19:13 »
Oui mais sa aurait pu très bien être ça le soucis  :dry: Mais bon je sais pas du tout pourquoi cela ne marche pas  :cry:

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : Payday avec level
« Réponse #9 le: 04 Août 2013, 14:20:03 »
Tu ne suis même pas les informations que je te propose, tu fais un bête copier/coller, et puis basta...
C'est vraiment désolant !

Sinon, après relecture attentive du code, j'ai comprit ce qui se passe.

Tu créer ta fonction qui attend un paramètre qui est l'indice du joueur, mais tu fais une boucle qui tourne sur tous les joueurs, le paramètre est donc inutile.
De ce fait, quand tu récupère le niveau du joueur, tu utilise ce paramètre et non la variable d'itération.

Vu que tu as l'air de mauvaise fois, je te laisse ton code corrigé, et te laisse dans ton ignorance, de toute façon, tu n'as pas envie de comprendre, juste de faire un truc qui marche:


forward payday();

public OnGameModeInit()
{
SetTimer("payday", 60000, true);
}

public payday() {
    new hh, mm, ss;
    gettime( hh, mm, ss );
    if( mm == 0 )
    {
for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i))
{
new level = PlayerInfo[i][pLevel];
new string[952];
if(level == 1)
{
new Payday = 10000;
GivePlayerMoney(i, Payday);
SendClientMessage(i, couleur_vert_clair,"{F6F600} ________________________________________________________________\n");
SendClientMessage(i, couleur_vert_clair,"{F6F600}|________________________ Jours de Paye _________________________|\n");
format(string, sizeof(string), "{F6F600}|____________________ {00F600}Vous avez reçu %s${F6F600} ____________________|\n", Payday);
SendClientMessage(i, couleur_vert_clair, string);
SendClientMessage(i, couleur_vert_clair,"{F6F600} ________________________________________________________________\n");
}
if(level == 2)
{
new Payday = 20000;
GivePlayerMoney(i, Payday);
SendClientMessage(i, couleur_vert_clair,"{F6F600} ________________________________________________________________\n");
SendClientMessage(i, couleur_vert_clair,"{F6F600}|________________________ Jours de Paye _________________________|\n");
format(string, sizeof(string), "{F6F600}|____________________ {00F600}Vous avez reçu %s${F6F600} ____________________|\n", Payday);
SendClientMessage(i, couleur_vert_clair, string);
SendClientMessage(i, couleur_vert_clair,"{F6F600} ________________________________________________________________\n");
}
}
}
return 1;
}

Bonne journée...

Hors ligne benbenleboss

  • *
  • Nouveau
  • Messages: 7
    • Voir le profil
Re : Payday avec level
« Réponse #10 le: 06 Août 2013, 19:40:00 »
Si, si, j'ai suivi les informations que tu ma donné, qui m'aide beaucoup. Donc si j'ai tout bien suivi le code devrait donné ceci:
forward payday();

public OnGameModeInit()
{
SetTimer("payday", 60000, true);
}

public payday() {
    new hh,
        mm,
        ss;
   
    gettime(hh, mm, ss);
   
    if (mm == 0) {
        for (new i = 0; i < MAX_PLAYERS; i++) {
            if (IsPlayerConnected(i)) {
                new level = PlayerInfo[i][pLevel],
                    money = level * 10000;
                new string[128];
               
                printf("Player level: %i\n", level);

                if(level >= 10)
                {
                    money = 100000;
                }
               
                GivePlayerMoney(i, money);
                SendClientMessage(i, couleur_vert_clair, "{F6F600} ________________________________________________________________\n");
                SendClientMessage(i, couleur_vert_clair, "{F6F600}|________________________ Jours de Paye _________________________|\n");
                format(string, sizeof(string), "{F6F600}|____________________ {00F600}Vous avez reçu %i${F6F600} ____________________|\n", money);
                SendClientMessage(i, couleur_vert_clair, string);
                SendClientMessage(i, couleur_vert_clair, "{F6F600} ________________________________________________________________\n");
            }
        }
    }
   
    return 1;
}

Je vais tester, normalement ça devrait marcher et encore merci.
« Modifié: 13 Août 2013, 19:24:33 par benbenleboss »

Hors ligne Xartrick

  • *
  • C & Pawn Programmer
  • Messages: 1391
    • Voir le profil
    • Xartrick's Area
Re : Payday avec level
« Réponse #11 le: 08 Août 2013, 00:58:11 »
Je te demandé de me donner la valeur de retour du code suivant:

printf("Player level: %i\n", level);
Mais tu ne m'as pas répondu, voilà pourquoi ce message.
Maintenant, cela devrait fonctionner.

Hors ligne benbenleboss

  • *
  • Nouveau
  • Messages: 7
    • Voir le profil
Re : [Résolu] Payday avec level
« Réponse #12 le: 13 Août 2013, 18:36:31 »
Tout marche parfaitement, merci à vous, plus particulièrement à toi Xartrick !
Je rajoute la balise Résolu.

PS : Désoler j'avait pas compris que tu voulais la réponse pour savoir ce que faisait :printf("Player level: %i\n", level); Je penser que tu voulais savoir si le code marcher.. Encore désoler.
« Modifié: 13 Août 2013, 18:43:44 par benbenleboss »