GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Xx_Men_xX le 18 Mai 2013, 11:38:59
-
Bonjour,
Je ne comprend pas, comment on peut afficher un TextDraw à l'écran pendant par exemple 10 secondes. Je voudrait faire un truc du genre : le joueur tape une commande, et ensuite sa lui affiche un TextDraw au milieu de l'écran pendant 4, 5 secondes puis le TextDraw disparait. J'ai cherché sur le forum, et j'ai vu que plusieurs sujets à propos de ça, on déjà été créer , le problème c'est que je n'est toujours pas compris comment il fallait procéder :sad:. J'ai compris mais très vaguement :mellow:
Je sais(enfin, je crois) qu'il faut utiliser un SetTimerEx, et une fonction publique. Mais sa reste pour moi très vague étant donné que je débute. Pourrait-on m'expliquer clairement comment il faut s'y prendre, je suis perdu.
Je vous remercie beaucoup pour votre aide.
-
Procède par ordre logique:
- Le joueur entre sa commande.
- Un TextDraw est affiché.
- On attend 5 secondes.
- On cache le TextDraw .
À mettre en place, c'est très simple.
-
Exactement, en utilisant uniquement ces fonctions ça devrait fonctionner.
TextDrawCreate();
TextDrawShowForPlayer();
SetTimerEx();
TextDrawHideForPlayer();
:bye:
-
Exactement, en utilisant uniquement ces fonctions ça devrait fonctionner.
TextDrawCreate();
TextDrawShowForPlayer();
SetTimerEx();
TextDrawHideForPlayer();
:bye:
Ouaai :huh:. Non parceque j'ai l'air idiot mais je ne sais pas comment faire cela, pourtant je suis pas si bete que ça.
-
Tu créés le textdraw à dans OnGameModeInit() (Cf. TextDrawCreate (http://wiki.sa-mp.com/wiki/TextDrawCreate)) ensuite, tu décides de l'afficher quand le joueur fait une commande, donc...
forward Montimer(playerid);
OnPlayerCommandText()
{
... // Ta commande, elle commence par if(!strcmp(cmdtext, "/tacommande", true, 0))
TextDrawShowForPlayer(.....);// Ce bout de code dedans
SetTimerEx("Montimer", 5000/* Durée */, false /* Si il se répète */, "i" /* Obligatoire pour que le timer ne soit utiliser que par un joueur*/, playerid);
}
pubic Montimer(playerid)
{
TextDrawHideForPlayer(MonTD, playerid);
return 1;
}
Enlève le text entre /* et */ c'était juste pour t'expliquer..
Je ne peux pas plus t'aider ;)
-
Tu créés le textdraw à dans OnGameModeInit() (Cf. TextDrawCreate (http://wiki.sa-mp.com/wiki/TextDrawCreate)) ensuite, tu décides de l'afficher quand le joueur fait une commande, donc...
forward Montimer(playerid);
OnPlayerCommandText()
{
... // Ta commande, elle commence par if(!strcmp(cmdtext, "/tacommande", true, 0))
TextDrawShowForPlayer(.....);// Ce bout de code dedans
SetTimerEx("Montimer", 5000/* Durée */, false /* Si il se répète */, "i" /* Obligatoire pour que le timer ne soit utiliser que par un joueur*/, playerid);
}
pubic Montimer(playerid)
{
TextDrawHideForPlayer(MonTD, playerid);
return 1;
}
Enlève le text entre /* et */ c'était juste pour t'expliquer..
Je ne peux pas plus t'aider ;)
Coucou. J'ai corriger les quelques fautes que tu avait faite :)
J'ai créer une variable global pour stoker mon TD :
new Text:Textdraw1
Ensuite dans OnGameModeInit :
Textdraw1 = TextDrawCreate(14 ,188 , "Coucou");
TextDrawFont(Textdraw1 , 3);
TextDrawLetterSize(Textdraw1 , 1.2, 8.4);
TextDrawColor(Textdraw1, VERT);
TextDrawSetOutline(Textdraw1 , false);
TextDrawSetProportional(Textdraw1 , true);
TextDrawSetShadow(Textdraw1 , 1);
Le timer :
public MonTimer(playerid)
{
new Text:MonTD;
TextDrawHideForPlayer(playerid, MonTD);
}
forward MonTimer(playerid);
Et enfin, dans ma commande :
CMD:coucou(playerid, params[])
{
TextDrawShowForPlayer(playerid, Textdraw1);
SetTimerEx("MonTimer", 5000, false, "i", playerid);
return 1;
}
Le TextDraw s'affiche mais il RESTE afficher. Pourtant j'ai bien le TextDrawHideForPlayer dans la fonction publique et le 5000(5 secondes) dans le SetTimerEx. Si quelqu'un a une solution...
Merci pour ton aide Infu.
-
Le timer :
public MonTimer(playerid)
{
new Text:MonTD;
TextDrawHideForPlayer(playerid, MonTD);
}
forward MonTimer(playerid);
Et enfin, dans ma commande :
CMD:coucou(playerid, params[])
{
TextDrawShowForPlayer(playerid, Textdraw1);
SetTimerEx("MonTimer", 5000, false, "i", playerid);
return 1;
}
Si tu as exactement fait comme ça, tu utilises deux noms de Textdraw différents :smile:
PS: ton forward doit être avant le public :bye:
EDIT: Je viens de voir que tu as créé un nouveau textdraw à l'endroit où tu dois en fait l'effacer..
Fais comme ça:
CMD:coucou(playerid, params[])
{
TextDrawHideForPlayer(playerid, Textdraw1);
return 1;
}
-
Le timer :
public MonTimer(playerid)
{
new Text:MonTD;
TextDrawHideForPlayer(playerid, MonTD);
}
forward MonTimer(playerid);
Et enfin, dans ma commande :
CMD:coucou(playerid, params[])
{
TextDrawShowForPlayer(playerid, Textdraw1);
SetTimerEx("MonTimer", 5000, false, "i", playerid);
return 1;
}
Si tu as exactement fait comme ça, tu utilises deux noms de Textdraw différents :smile:
PS: ton forward doit être avant le public :bye:
EDIT: Je viens de voir que tu as créé un nouveau textdraw à l'endroit où tu dois en fait l'effacer..
Fais comme ça:
CMD:coucou(playerid, params[])
{
TextDrawHideForPlayer(playerid, Textdraw1);
return 1;
}
Oui, j'ai corrigé ce problème sa marche parfaitement maintenant :)
Pour ceux qui voudrait créer des TextDraw sans trop ce prendre la tete vous pouvez aller sur ce site, que je trouve très bien :smile: : http://bsndesign.webs.com/tde.htm (http://bsndesign.webs.com/tde.htm)