GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: feldbrau le 09 Décembre 2008, 15:47:17
-
Salut a tous,
Suite a une suggestion de certains de mes joueurs, je suis en train de faire un systeme de Barre style Sims. Tous est presque scripté, , tous fonctionne nikel mais je suis obligé de passé via une commande pour afficher le textdraw. Je voudrais savoir si l'on peut mettre plusieur textdraw en meme temps?
J'arrive a mettre un textdraw "Toilette" (par exemple) a coté de la barre, mais lorsque je met un autre texte en dessous de Toilette ("Hygiene"), il n'y a que hygiene qui s'affiche et la barre des toilettes. Meme probleme avec la barre, si je met les deux barres, c'est celle qui s'affiche en dernier qui reste et l'autre "meurt".
Merci d'avance, si vous avez pas compris quelque chose demandez ;)
@++
-
Salut,
j'ai déjà eu ce problème, utiliserais tu souvent la fonction TextDrawDestroy?? car lorsque je m'en servais elle semblait parfois détruire tout les textdraw, surement lorsqu'elle est mal utilisée... sinon je voit pas dsl :(
++Sim++
-
Enfait je me suis basé sur le systeme de tAxI ca barre de vie vehicule (dispo dans le XVM) et j'ai adapté ces bases a se que je voulais faire. Le truc c'est que indépendamment les textdraw s'affiche bien. En attendant de voir de nouvelles réponses, je vais essayer de faire se que tu dit ;) (regarder les destroy)
Merci.
-
Je confirme, la fonction TextDrawDestroy est bugguée et détruit TOUS les textdraws (ou du moins elle les cache).
NB : Non vérifié en 0.2.X
Je te conseille d'utiliser les fonctions TextDrawShowForPlayer, TextDrawHideForPlayer et TextDrawSetString (sachant que la dernière est suffisante pour un TextDraw affiché en permanence) après avoir créer les TextDraw dans OnGameInit (la destruction devra se faire dans OnGameModeExit).
NB : Si il s'agit d'un filterscript, il faut créer les TD dans OnFilterScriptInit et les détruire dans OnFilterScriptExit.
Sinon, il y a une limite au nombre global de TextDraw mais je crois qu'elle est très haute (1024 si ma mémoire est bonne).
++
Syg
-
Pour te répondre Syg:
Je confirme, la fonction TextDrawDestroy est bugguée et détruit TOUS les textdraws (ou du moins elle les cache).
NB : Non vérifié en 0.2.X
En 0.2X ca doit être pareil, vu que je bosse dessus en ce moment et c'est avec elle que je script et test ^^
Je te conseille d'utiliser les fonctions TextDrawShowForPlayer, TextDrawHideForPlayer et TextDrawSetString (sachant que la dernière est suffisante pour un TextDraw affiché en permanence) après avoir créer les TextDraw dans OnGameInit (la destruction devra se faire dans OnGameModeExit).
NB : Si il s'agit d'un filterscript, il faut créer les TD dans OnFilterScriptInit et les détruire dans OnFilterScriptExit.
Hélas, en commençant la lecture de ce passage j'ai eu un espoire mais c'est déja se que j'utilise dans mon systeme (peut-etre mal utilisé). . .
Sinon, il y a une limite au nombre global de TextDraw mais je crois qu'elle est très haute (1024 si ma mémoire est bonne).
Je cofirme ^^, j'ai était farfouillé le wiki et avec du mal j'ai pu trouvé les nouvelles limite depuis 0.2.2 R3 (Par la meme occasion, pour ceux qui n'ont pas fait gaffe, la nouvelle limite de voiture et de 126 officiellement mais j'ai testé et ca crash a partir de 122 donc un peu moins du double de model possible :D)
Si tu veut voir un peu plus le script au cas ou ca aiderai, demande moi jte l'enverrais par PM. Je sais que c'est un script facile a faire mais je préfère pas partager le code pour le moment.
Merci de ton attention,
A bientot.
-
Sa ressemble a mon systeme de besoin que j'avait fait.
Il marchait mais fait attention car souvent sa marche quand on est tout seul mais quand on commence a etre une dizaine sa marche plus ou sa marche mal.bref moi j'ai trouver la solution j'ia pas mit de barre textdraw.Et les Setimer bug parfois il lance plein de fois l'action mais sa je sait pas de ou sa vient bref fait attention a sa car ses chiant a les voires
-
Je confirme limite de TextDraws 1024.
SOURCE : http://wiki.sa-mp.com/wiki/Limits (http://wiki.sa-mp.com/wiki/Limits)]http://wiki.sa-mp.com/wiki/Limits
-
Je viens de faire un test sur mon script à tout faire.
Je créer 3 TextDraws à chaque fois qu'un joueur se connecte et je commence à les afficher au moment où il spawn.
Tout marche très bien pour moi avec 2 joueurs (je n'ai que 2 machines, je n'ai pas pu tester avec plus).
En "haut" du script :
new Text:Text1Seconde[MAX_PLAYERS];
new Text:Text2Seconde[MAX_PLAYERS];
new Text:Text3Seconde[MAX_PLAYERS];
new Compteur[MAX_PLAYERS] = -1;
forward UpdateTextDraws ();
public UpdateTextDraws ()
{
new string[61];
/* Boucle sur les joueurs */
for (new i=0 ; i<MAX_PLAYERS ; i++)
{
/* Si le joueur est connecté et que son compteur est lancé */
if (IsPlayerConnected (i) && Compteur[i] != -1)
{
/* Incrémentation du compteur pour le joueur */
Compteur[i]++;
/* Fabrication de la chaine */
for (new j=0 ; j<Compteur[i] ; j++)
{
string[j]='-';
}
string[Compteur[i]]=0;
/* Mise à jour des TextDraws */
TextDrawSetString (Text1Seconde[i], string);
if (Compteur[i]%2 == 0)
{
TextDrawSetString (Text2Seconde[i], string);
}
if (Compteur[i]%3 == 0)
{
TextDrawSetString (Text3Seconde[i], string);
}
if (Compteur[i] == 60)
{
Compteur[i] = 0;
}
}
}
}
Dans OnGameModeInit :
SetTimer ("UpdateTextDraws", 1000, true);
Dans OnPlayerConnect :
Text1Seconde[playerid] = TextDrawCreate (320.00, 370.00, " ");
TextDrawFont (Text1Seconde[playerid], 3);
TextDrawSetProportional (Text1Seconde[playerid], 2);
TextDrawAlignment (Text1Seconde[playerid], 2);
TextDrawSetOutline (Text1Seconde[playerid], 1);
TextDrawSetShadow (Text1Seconde[playerid], 0);
TextDrawColor (Text1Seconde[playerid], 0x00AA00FF);
TextDrawBackgroundColor (Text1Seconde[playerid], 0x005500FF);
TextDrawHideForPlayer (playerid, Text1Seconde[playerid]);
Text2Seconde[playerid] = TextDrawCreate (320.00, 380.00, " ");
TextDrawFont (Text2Seconde[playerid], 3);
TextDrawSetProportional (Text2Seconde[playerid], 2);
TextDrawAlignment (Text2Seconde[playerid], 2);
TextDrawSetOutline (Text2Seconde[playerid], 1);
TextDrawSetShadow (Text2Seconde[playerid], 0);
TextDrawColor (Text2Seconde[playerid], 0x00AA00FF);
TextDrawBackgroundColor (Text2Seconde[playerid], 0x005500FF);
TextDrawHideForPlayer (playerid, Text2Seconde[playerid]);
Text3Seconde[playerid] = TextDrawCreate (320.00, 390.00, " ");
TextDrawFont (Text3Seconde[playerid], 3);
TextDrawSetProportional (Text3Seconde[playerid], 2);
TextDrawAlignment (Text3Seconde[playerid], 2);
TextDrawSetOutline (Text3Seconde[playerid], 1);
TextDrawSetShadow (Text3Seconde[playerid], 0);
TextDrawColor (Text3Seconde[playerid], 0x00AA00FF);
TextDrawBackgroundColor (Text3Seconde[playerid], 0x005500FF);
TextDrawHideForPlayer (playerid, Text3Seconde[playerid]);
Dans OnPlayerSpawn :
/* On demarre l'affichage des TextDraws */
Compteur[playerid]=0;
TextDrawShowForPlayer (playerid, Text1Seconde[playerid]);
TextDrawShowForPlayer (playerid, Text2Seconde[playerid]);
TextDrawShowForPlayer (playerid, Text3Seconde[playerid]);
Dans OnPlayerDisconnect :
/* Destructions des TextDraws */
Compteur[playerid] = -1;
TextDrawDestroy (Text1Seconde[playerid]);
TextDrawDestroy (Text2Seconde[playerid]);
TextDrawDestroy (Text3Seconde[playerid]);
++
Syg
-
Le problème n'est pas l'affichage sur plusieurs client, le probleme c'est d'afficher toutes les barres en meme temps sur l'écran d'un client en l'occurence 4 (Toilette, Hygiene, Vie Social, Energie)
En gros ca serait faire comme un gametext mais en textdraw vu que les gametext sont moyen a configuré comme il faut.
-
Si tu regardes bien mon, exemple, tu verras que j'avais bien compris ton problème, l'exemple que je donne affiche 3 TextDraws pour chaque joueur.
Ces trois TextDraw sont indépendant entre eux (même si il affiche la même chaîne mais à des intervalles différents) et indépendant d'un joueur à l'autre (puisque le compteur ne démarre que quand le joueur spawn).
Je pense que ceci correspond tout à fait à ce que tu veux faire. Pour ça, il suffit d'adapter le fonction UpdateTextDraws de mon exemple pour que chaque TextDraw affiche une chaîne différente et indépendante de la chaîne des autres TextDraw.
++
Syg
-
D'accord merci, j'avoue ne pas avoir lu tous le code. Raison: J'ai vu parlé qu'il n'y avait pasde problème d'affichage lors de multiple connection donc j'ai déduit vite mais mal désolé ^^.
Je vais voir ca tous de suite (ou taleur il se fait tard) et je tiendrais au courant ;)
Encore merci
EDIT:
C'est bon tout fonctionne nikel pour la limite de TextDraw :) Merci encore.
Maintenant j'ai encore un autre problème mais je vais essayer de le régler, si ca va pas j'ouvrirai un autre topis, vu que ce n'est plus la limite de textdraw qui m'embete ^^.
-
Merci de votre aide ^^
Grace à ça on pourra avancé plus vite lol
++ Franky