GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Franky™ le 30 Avril 2009, 01:32:44

Titre: [Résolu] Systeme de Level perso
Posté par: Franky™ le 30 Avril 2009, 01:32:44
Salut

Voila je suis entrain de faire un systeme de Level perso.

Genre Quand un joueur gagne 1000$ il gagne un level.
Enfin à la base ça devais faire ça.
Mais ça ne fait rien. hum

Voila mon code:
Citer
public Level()
{
    for(new i = 0; i < MAX_PLAYERS; i++)
   {
       if (InfoJoueur["i"][aMoney] == 1000)
       {
             InfoJoueur["i"][aLevel]++;
          SendClientMessage(i, WHITE, "Vous êtes monté d'un Level.");
       }
   }
}

En sachant que j'ai aucune erreur ni de warn.
d'ailleur j'ai fait se code vite fait, mais pour moi (en etand pas fortiche) je vois pas d'autre moyen de faire se que j'aimerai faire lol.

Si une personne pourrai m'aidé sa serai cool :P

Marchii

PS: ne faite pas gaffe au "i" c'est normal ^^, sinon sa met tout en italique mdr

++ Franky
Titre: Re : Systeme de Level perso
Posté par: Syg le 30 Avril 2009, 11:57:02
Premièrement, vérifie bien que ta fonction Level() est appelée quelque part dans ton script (dans un timer ou une callback par exemple).

Ensuite, la ligne
if (InfoJoueur["i"][aMoney] == 1000)indique qu'il faut que le joueur est exactement 1000 pour monter d'un level.
De plus, si ta fonction est appelé dans un timer, le joueur montera d'un level à chaque appel si son score reste à 1000.

Le mieux serait de faire une fonction de ce genre appelée dans un timer :
public Level()
{
    for(new i = 0; i < MAX_PLAYERS; i++)
   {
       if (InfoJoueur["i"][aMoney] >= 1000)
       {
             InfoJoueur["i"][aLevel]++;
             InfoJoueur["i"][aMoney] = 0; // Pour éviter que le joueur prenne plusieurs levels à la suite
             SendClientMessage(i, WHITE, "Vous êtes monté d'un Level.");
       }
   }
}

Si tu ne veux pas que le joueur perde son argent, il faudra passer par un nouvelle variable (score par exemple) qui sera incrémenter en même temps que son argent mais remise à 0 lorsque le joueur change de level.
Ou alors, faire quelque chose de plus fastidieux du genre :
       if (InfoJoueur["i"][aMoney] >= 1000 && InfoJoueur["i"][aMoney] < 2000)
       {
             InfoJoueur["i"][aLevel] = 1;
             SendClientMessage(i, WHITE, "Vous êtes monté au niveau 1.");
       }
       else if (InfoJoueur["i"][aMoney] >= 2000 && InfoJoueur["i"][aMoney] < 3000)
       {
             InfoJoueur["i"][aLevel] = 2;
             SendClientMessage(i, WHITE, "Vous êtes monté au niveau 2.");
       }
       ...

++
Syg
Titre: Re : Systeme de Level perso
Posté par: Franky™ le 30 Avril 2009, 12:11:30
oui Merci, c'est la deuxième solution que j'avais prévu de faire, mais sens perdre l'argent.

Je vais essayé tout ça, je te tien au courant

EDIT:

Merci ça fonctionne, mais mon SendClientMessage arrete pas de flooder quand j'ai passé la barre des 1000.


++ Franky
Titre: Re : Systeme de Level perso
Posté par: Nikko™ le 30 Avril 2009, 16:21:22
Normal regarde:
       if (InfoJoueur["i"][aMoney] >= 1000 && InfoJoueur["i"][aMoney] < 2000)
       {
             InfoJoueur["i"][aLevel] = 1;
             SendClientMessage(i, WHITE, "Vous êtes monté au niveau 1.");
       }
       else if (InfoJoueur["i"][aMoney] >= 2000 && InfoJoueur["i"][aMoney] < 3000)
       {
             InfoJoueur["i"][aLevel] = 2;
             SendClientMessage(i, WHITE, "Vous êtes monté au niveau 2.");
       }

La, si un joueur est entre 1000 et quelque chose d'autre (nimporte quoi au dessus) ca lui envera un message ...

++
nikko
Titre: Re : Systeme de Level perso
Posté par: Franky™ le 30 Avril 2009, 16:44:46
Alors je fait comment ?

car si j'eleve ça: && InfoJoueur[aMoney] < 2000   ça ne change rien ça fait pareil j'ai tester

je doit faire quoi pour que sa puisse envoyé qu'une fois le message...

++ Franky
Titre: Re : Systeme de Level perso
Posté par: Nikko™ le 30 Avril 2009, 16:52:59
Pour faire au plus simple, tu met ta variable en test du genre:

if (InfoJoueur["i"][aMoney] >= 1000 && InfoJoueur["i"][aMoney] < 2000)
{
if(InfoJoueur["i"][aLevel] < 1)
{
InfoJoueur["i"][aLevel] = 1;
SendClientMessage(i, WHITE, "Vous êtes monté au niveau 1.");
}
else
{
}
}
else if (InfoJoueur["i"][aMoney] >= 2000 && InfoJoueur["i"][aMoney] < 3000)
{
if(InfoJoueur["i"][aLevel] < 2)
{
InfoJoueur["i"][aLevel] = 2;
SendClientMessage(i, WHITE, "Vous êtes monté au niveau 2.");
}
else
{
}
}

++
nikko
Titre: Re : Systeme de Level perso
Posté par: Franky™ le 30 Avril 2009, 18:16:40
Super merci, ça fonctionne parfaitement...

Merci a vous deux.

++ Franky
Titre: Re : Systeme de Level perso
Posté par: Nikko™ le 30 Avril 2009, 18:27:53
ya pas de quoi ;)

++
nikko
Titre: Re : [Résolu] Systeme de Level perso
Posté par: LePtitClown le 03 Mai 2009, 13:19:38
Slt

Franky ton système de level m'a l'air bien
Pourrais tu m'expliquer comment en faire une du même type ( tu seras dans les crédits )??

A++ :)