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
-
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:
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
-
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
-
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
-
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
-
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
-
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
-
Super merci, ça fonctionne parfaitement...
Merci a vous deux.
++ Franky
-
ya pas de quoi ;)
++
nikko
-
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++ :)