GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: jonjon le 12 Avril 2009, 11:42:44
-
Bonjour, alors voilà j'ai réalisé pour mon serveur un petit FS qui affiche une barre de petit besoin et je n'arrive pas à la faire fonctionner... :s Quand je vais sur mon serveur la barre ne diminue pas... alors que je pense avoir tout bien fait. 0 warnings, 0 erreurs.
Donc voici mon script sur pastebin : http://pastebin.gtaonline.fr/pastebin.php?show=557 (http://pastebin.gtaonline.fr/pastebin.php?show=557)
Un petit screen vous montrant un aperçu du script est disponible ci-dessous.
Ps : ne faites pas attention au temps du timer ^^ il est petit car c'est pour les tests... c'est plus rapide.
Ps2 : ce script m'a pris une heure voir deux heures (en comptant les tests) pour le réaliser donc s'il vous plait ne recopiez pas bêtement mon script.
Cordialement, Jon.
-
Salut,
Je sais pas t'aider pour ce problème mais je viens de tester ton FS et il me bloque toutes mes cmds qui sont sur mon GM
Même pour se loguer /login impossible de le faire...
Voila c'etais une info pour pas que sa t'arrive ^^
++ Franky
-
salut, effectivement voilà une erreur bête , j'ai mi un return 1 à la place d'un return 0. Mais ça résout pas mon problème.... :S
Cordialement, j0n
-
Ta esseyé de mettre un TextDrawDestroy puis un TextDrawCreate a la place de TextDrawSetString(BesoinBar[playerid],"..");
Juste pour tester si ca viens de la ... ??
++
nikko
-
Ce n'est pas là non plus d'où viens l'erreur ^^
-
Effectivement, le TextDrawSetString suffit depuis la 0.2.X.
J'ai jeté un coup d'oeil à ton FS :
L'erreur principale (qui fait que ton TextDraw n'est pas mis à jour) est ton timer :
SetTimerEx("Timerbesoin", 180000, false, "99", 1);
Ce timer n'est lancé qu'une seule fois (paramètre false) donc la variable besoin ne sera incrémentée qu'une seule fois et ne changera plus de valeur par la suite.
De plus, les paramètres "99" et 1 ne correspondent à rien.
La deuxième erreur, que tu ne verras pas vu en étant tout seul vient de la variable besoin elle même.
Il n'y a qu'une seule variable pour tous les joueurs .... !!
Il faudrait en faire un tableau pour chaque joueur est sa variable à lui.
++
Syg
-
Merci Syg ça m'a bien avancé, ma variable se change bien, j'ai fais un test de variable et ça fonctionne impec. Par contre quand besoin arrive à 6 et quand sa arrive à ci-dessous:
if(besoin == 6)
{
TextDrawSetString(BesoinBar[playerid],"");
if(Health >= 100)
{
SetPlayerHealth(playerid, 70.0);
return 1;
}
if(Health >= 70)
{
SetPlayerHealth(playerid, 50.0);
return 1;
}
if(Health >= 50)
{
SetPlayerHealth(playerid, 30.0);
return 1;
}
if(Health >= 30)
{
SetPlayerHealth(playerid, 10.0);
return 1;
}
if(Health >= 10)
{
SetPlayerHealth(playerid, 0.0);
return 1;
}
return 1;
}
le serveur crashe.... :s
Quelqu'un sait pourquoi ?
Cordialement, Jon
-
j ai as compris pourquoi tu met si la variable health est plus grande que 10 on le tue et si elle est plus grande de 50 on lui baisse ca vie c 'est bete car au final il meurt le gars puisque la variable est toujours au dessus de 10
-
Je plutôt que si la vie est en dessous de 30, il y a l'action du 10, mais si la vie est entre 50 et 30, il y a l'action du 30, etc.
-
Oui mais ça
if(Health >= 10)
C'est dit, si "Health" est plus grand (>) ou egale (=) que 10 patati patata.
Donc pour moi je pense que sa serai mieu de remplacer > par < sa ferai donc
si "Health" est plus petit (<) ou egale (=) que 10 patati patata.
Sa serai mieu, et c'est peu être pour ça que ton serveur il crash, car tu est toujours au dessu de 10 donc il va toujours faire cette variable...
Mais c'est pas qu'avec le 10.
Mais avec tout que ta mis ça.
ça sera mieu comme ca je trouve:
if(besoin == 6)
{
TextDrawSetString(BesoinBar[playerid],"");
if(Health <= 100)
{
SetPlayerHealth(playerid, 70.0);
return 1;
}
if(Health <= 70)
{
SetPlayerHealth(playerid, 50.0);
return 1;
}
if(Health <= 50)
{
SetPlayerHealth(playerid, 30.0);
return 1;
}
if(Health <= 30)
{
SetPlayerHealth(playerid, 10.0);
return 1;
}
if(Health <= 10)
{
SetPlayerHealth(playerid, 0.0);
return 1;
}
return 1;
}
++ Franky
-
Salut,
franky, le code orignal est bien meilleur,
dans ton cas, peu importe la vie du joueur, elle sera sous 100 avant d,être sous 70, donc le cas du 100 sera toujours (à quelques exceptions près) validé.
le mieu serait plutôt:
SetPlayerHealth(playerid, Health - 20.0);
et plus aucun besoin de test
++Sim++
-
Le problème de crash vient de cette ligne :
TextDrawSetString(BesoinBar[playerid],"");Le serveur n'aime pas les chaînes vide dans les TextDraw.
Met ceci à la place :
TextDrawSetString(BesoinBar[playerid]," ");NB : Il y a un espace entre les guillemets.
++
Syg
-
Salut, oui merci Syg. C'est Sim qui m'a aidé à finir mon script !!! Un grand merci à Sim car il y avait pas mal de fautes qui m'a corrigé :) et maintenant le script fonctionne nickel.
Merci à tous.
Cordialement, Jon
-
T'aurais pu dire, Merci aussi à Syg, il ta donner un bon truc :-[
-
Il a dit
Merci à tous.
donc pour tous ceux qui l'ont aidé ^^
WL