GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: John_Montavedro le 28 Novembre 2010, 15:30:09

Titre: SendClientMessageToAll
Posté par: John_Montavedro le 28 Novembre 2010, 15:30:09
Bonjour, je reprends un peu le pawno ;) Mais j'ai encore! perdu la phrase qui permet d'envoyer un message à tout le monde...
Voici ce que j'ai fais (sa ne marche pas IG) :
if (strcmp(cmdtext, "/clearchat", true) == 0)
    {
        SendClientMessageToAll(blanc, "[%s] : La chatbox a été remise à zero");
        return 1;
    }

Pourriez vous m'aider, merci!
Titre: Re : SendClientMessageToAll
Posté par: Xartrick le 28 Novembre 2010, 15:50:38
A quoi correspond le %s, car je ne vois vraiment pas à quoi il correspond.
De plus, si tu veux afficher une variable, tu dois formater une phrase !

Sinon, SendClientMessageToAll est la bonne commande pour envoyer une message à tous le monde.
Titre: Re : Re : SendClientMessageToAll
Posté par: John_Montavedro le 28 Novembre 2010, 15:52:58
A quoi correspond le %s, car je ne vois vraiment pas à quoi il correspond.
De plus, si tu veux afficher une variable, tu dois formater une phrase !

Sinon, SendClientMessageToAll est la bonne commande pour envoyer une message à tous le monde.


%s -> nom de la personne qui clear
Titre: Re : SendClientMessageToAll
Posté par: Gilux le 28 Novembre 2010, 16:03:44
Salut,

if(strcmp.............)
{
     new nom[MAX_PLAYER_NAME]; // La variable qui stockera le nom
     new string[100]; // On crée la variable de phrase
     format(string,sizeof(string),"[%s] a effacé le chat",nom);
     SendClientMessage(color,string);
return 1;
}

Si tu as des questions n'hésite pas :)
Titre: Re : SendClientMessageToAll
Posté par: Jimmy_Krapovich le 28 Novembre 2010, 16:14:23
Saluut =DD

Pour un début pas mal. Mais il y a encore des choses à voir. Tout d'abbord il faut que t'apprene les variables.

/!\ Attention : A chaque fois qu'il a un %s ou %d il faudras mettre à la fin de la phrase ce qu'ils représentent.

Exemple:
format(string, sizeof(string), "* %s est malade", sendername);
         SendClientMessage(giveplayerid, COLOR_WHITE, string);

Explication:
%s = Représente des lettres et non pas des chiffres.
%d = Représente des chiffres et non pas des lettres.

Dans ton cas, le script n'a rien a représenté. Donc il affichera aux joueurs " %s: La chatbox a été remise à zéro."
Il ne faut jamais oublié ce que %s ou %d doivent représentés.

Correction:
if (strcmp(cmdtext, "/clearchat", true) == 0)
         {
                            new string[50];
                            new sendername[MAX_PLAYERS_NAME];
                            for(new i = 0; i < MAX_PLAYERS; i++)
                            ClearChatbox(i, 100);
                            format(string, sizeof(string), "* %s: La chatbox a été remise à zéro", sendername);
                            SendClientMessageToAll(COLOR_WHITE, string);        
                            return 1;
         }

PS: Attention au dessus Gilux c'est trompé, il a oublié SenClientMessageToAll


J'espère t'avoir aidé.
Titre: Re : Re : Re : SendClientMessageToAll
Posté par: Jimmy_Krapovich le 28 Novembre 2010, 16:34:48
ClearChatbox(i, 100);

et tu le trouve ou sa

Sa signifie tout les joueurs. "i++"
Titre: Re : SendClientMessageToAll
Posté par: Jimmy_Krapovich le 28 Novembre 2010, 16:38:06
Lol.. Et bah corrige moi
Titre: Re : SendClientMessageToAll
Posté par: Xartrick le 28 Novembre 2010, 17:24:59
Il faut également précisé que %d inclut que des nombres entier et non des nombres décimales.
Titre: Re : SendClientMessageToAll
Posté par: Ssk le 28 Novembre 2010, 17:58:30
Bien sur qu'il prend les nombres décimaux ^^

Tu veut plutôt que %d ainsi que %i prend les entiers décimaux ^^


 Un petit explicatif sur les nombres décimaux (http://fr.wikipedia.org/wiki/Nombre_d%C3%A9cimal)
Titre: Re : SendClientMessageToAll
Posté par: Xartrick le 28 Novembre 2010, 18:18:46
Citation de: Wiki SAMP
%d   Inserts an integer (whole) number
Citation de: Traduction Wiki SAMP
%d   Insertion d'un nombre entier

CF: http://wiki.sa-mp.com/wiki/Format (http://wiki.sa-mp.com/wiki/Format)
Titre: Re : SendClientMessageToAll
Posté par: Ssk le 28 Novembre 2010, 18:40:56
Oui, mais ce que je veut dire par la, c'est que le %i et le %d ne sont la que pour les entiers décimal réel, et pas autres chose je sais pas si tu comprend ce que je veut dire lol
Titre: Re : SendClientMessageToAll
Posté par: Xartrick le 28 Novembre 2010, 18:54:00
Non je ne comprend pas :-\.
Titre: Re : SendClientMessageToAll
Posté par: chneubeul le 28 Novembre 2010, 19:17:40
1 ou 1.0 sont des nombres décimaux.
Mais le soucis du pawno c'est qu'il ne cherche pas à savoir si c'est un nombre décimal ou pas. Juste à savoir si il est entier ou float.

Donc si le nombre (décimal) est entier %d
si c'est par exemple 1.0 %f

A+, Sam.
Titre: Re : SendClientMessageToAll
Posté par: Xartrick le 28 Novembre 2010, 19:37:34
Je comprend mieux, dans mon esprit, 1 est un nombre entier mais 1.0 est un nombre décimal même si il est réellement un nombre entier.
Titre: Re : SendClientMessageToAll
Posté par: chneubeul le 28 Novembre 2010, 19:46:08
Oui voila, ça porte à confusion. ^^
C'est dommage quand même que les nombres doivent se séparer et l'on doit utiliser des systèmes distinct pour les utiliser :( Mais obliger de faire avec ^^
Titre: Re : SendClientMessageToAll
Posté par: S!m le 29 Novembre 2010, 01:54:22
Salut,

en fait la traduction qu'il faudrait faire c'est plutôt entier vs fractionnaire.

Un nombre entier est décimal, tout comme une certaine quantité de nombre fractionnaires.

Pour être décimal, il faut que le nombre puisse s'exprimer avec un nombre fini de chiffres. Donc, les nombres périodiques, irrationnels etc.. qui s'expriment avec une infinité de chiffre (des exemples plutôt connus: PI, 1/3, 2/3..) ne sont pas décimaux.

Aussi, merci de revenir au sujet: une commande /clearchat.

À ce propos, John change le nom de ton topic pour un titre clair sinon ce sera le  :lock. Fais vite.

++Sim++
Titre: Re : SendClientMessageToAll
Posté par: Komolos le 01 Décembre 2010, 20:46:33
tu peut faire comme Jimmy ta dit :

if (strcmp(cmdtext, "/clearchat", true) == 0)
         {
                            new string[50];
                            new sendername[MAX_PLAYERS_NAME];
                            for(new i = 0; i < MAX_PLAYERS; i++)
                            ClearChatbox(i, 100);
                            format(string, sizeof(string), "* %s: La chatbox a été remise à zéro", sendername);
                            SendClientMessageToAll(COLOR_WHITE, string);       
                            return 1;
         }
[code]

Mais avec un public qui montre la variable du ClearChatBox

la voici :

[code]
public ClearChatBox(playerid, lines)
{
if (IsPlayerConnected(playerid))
{
for(new i=0; i<lines; i++)
{
new message[128];
format(message,sizeof(message), " "); // le message clear la chatbox
SendClientMessageToAll(COLOR_BLUE, message);
}
}
return 1;
}


Biensûr avec le forward.

forward ClearChatBox(playerid, lines);[/code][/code]
Titre: Re : SendClientMessageToAll
Posté par: Xartrick le 01 Décembre 2010, 20:50:34
En faite, son seul problème est de ne pas avoir formaté le texte avant de l'envoyé !
Titre: Re : SendClientMessageToAll
Posté par: S!m le 01 Décembre 2010, 22:05:49
Salut,

Komolos, pourquoi format tu ton message dans ta fonction ClearChat ? Il ne contient que des caractères constants... et pourquoi la faire en public? et ;pourquoi le paramètre playerid si tu efface la chatbox de tous les joueurs? j'aimerais comprendre...

ClearChatBox(lines)
{
for(new i=0; i<lines; i++)
{
SendClientMessageToAll(0xFFFFFFFF, "    ");//i j'aime le blanc >:)
}
return 1;
}

ce code est bien mieux, plus court, plus efficace, plus clair, ne crée pas une variable à chaque itération...

++Sim++
Titre: Re : SendClientMessageToAll
Posté par: Komolos le 02 Décembre 2010, 16:00:23
Moi j'ai fait comme ça personnellement ça marche pour tout les joueurs.
Mais toi tu as fait plus simple, j'aime ta facon de faire ^^
Titre: Re : Re : SendClientMessageToAll
Posté par: S!m le 03 Décembre 2010, 03:02:23
Salut,

Moi j'ai fait comme ça personnellement ça marche pour tout les joueurs.
Mais toi tu as fait plus simple, j'aime ta facon de faire ^^

voilà, ce n'est parce que ça fonctionne que l'on ne peut pas faire mieux.
Il y a toujours moyen d'améliorer.
Bien sur, à un certains point l'amélioration devient négligeable...

++Sim++
Titre: Re : SendClientMessageToAll
Posté par: Ssk le 03 Décembre 2010, 07:53:33
Tu peut même envoyer une ligne vide ça permet que les packets s'envoie plus rapidement, mais bon c'est négligeable ^^