GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: scott1 le 14 Janvier 2011, 13:09:03
-
Bonjour à toutes et à tous,
dans le but d'un système, ou j'utilise PHP/MySQL/pwn,
j'ai remarqué que le php/html/css etait plus intelligent que le pwn.
En effet quand la ligne est trop longue, il fait un saut de ligne a la place du dernier espace pour rester dans le cadre du thème.
malheureusement, je remarque que pawno est moins intelligent, donc dans mon dialog, il ne me rétrécira jamais les lignes.
J'aimerais donc savoir comment faire pour qu'a partir du moment ou il y a trop de caractère et que le dialogue est trop large, il me le coupe automatiquement a l'espace précédent avec un \n.
merci d'avance.
j'espère que vous m'avez compris :D
-
C'est juste une idée mais tu peux utiliser la fonction strlen de PHP : http://fr2.php.net/strlen (http://fr2.php.net/strlen) pour connaître la longueur d'une chaîne de caractères ;)
++
-
la je parle en pwn, mais si j'utilise ça, je risque de tomber dans un mot et le couper s'est pas pas beau
-
Salut,
Le pawno n'est pas moins intelligent ou '' moins " performant qu'un autre code. C'est juste que ces possibilités sont moindres, mais tu peut créé une fonction qui va te permettre de couper et sauvegarder une chaine de caractères via du code qui relève du C/C++
Déjà, il faut faire une boucle qui va repère les espaces et en même temps vérifier si il existe un autre espace après, ou si la chaine dépasse 128 caractères, si on est dans ce cas, alors on va venir couper à cette espace donc on relèveras a quel bit est l'espace pour la sauvegarde et l'envoie de la seconde chaine.
A+, Sam.
-
Arf je connais pas le c/c++ :D
merci quand même, maintenant je sais que je doit utilisez un plugin.
-
Non, du tout.. >.< Le pawno est une variante du C/C++ simplifiez, certes mais ça y ressemble vachement. J'essayerais de faire une petite fonction, grâce à l'aide de Syg, qui m'avait déjà filer un coup de main à ce sujet. Mais là fonction qu'il m'avait fait filer ne traiter pas certain cas.
-
Ce n'est pas le pawn qui n'est pas intelligent, c'est sa-mp qui ne préfère pas gérer ça ^^
-
Je suis pas plus intelligent xD, je ne sais pas comment faire xD
-
Salut, je te propose un petit exercice. Essaye de le faire en recherchant des bouts de code et j'te dirais tes erreurs, et te donnerais une correction. Mais essaye franchement, au pire essaye de marquer comment tu pense faire le code en francais genre :
si a supérieur à x etc..
-
Merci pour ton aide.
Dans un premier temps, je pensait à ça,
new longueur=strlen(mastring);
if(longueur > 256)
{
strins(mastring, "\n", longueur/2,3);
}
Mais bon pas très esthétique, et peut être pas fonctionnel. et ça ne coupe pas pas forcement aux espace.
Le mieux je pense serais de faire une boucle qui vérifie tout les caractère pour voir si il y a des espaces.
-
J'ai fais un petit code que je pense être l'une des meilleurs solutions pour ton problème.
12347 215431 comment vas tu comment vas tu comment vas tu comment vas tu comment vas tu comment vas tu comment donc rahahalet nez
12347 215431 comment vas tu comment vas tu comment vas tu comment vas tu comment vas tu comment vas tu comment donc rahahalet STOP nez
SAMPStringLimiter(string[])
{
new stringlength = 0, sentencelength = 0, wordlength = 0;
stringlength = strlen(string); // Récupération de la taille de la phrase
for(new i = 0; i < stringlength; i++) // Boucle sur tous les caractères de la phrase
{
if(string[i] == 32) // Espace
{
if((sentencelength + wordlength) > 128) // Prédiction pour s'aretter
{
print("STOP !");
}
wordlength = 0; // Remet la taille du mot courrant à zéro
}
else
{
wordlength++; // Incrémentation de la taille du mot
}
sentencelength++; // Incrémentation de la taille de la phrase
}
}
-
Merci Xatrick, mais pourrait tu m'expliquer comment utiliser? Car je seche :s
-
Pour l'instant, ce code est obsolète mais il pourrait te mener sur la voie ;).
Tu as juste à l'utiliser en lui fournissant la chaîne à couper.
SAMPStringLimiter("12347 215431 comment vas tu comment vas tu comment vas tu comment vas tu comment vas tu comment vas tu comment donc rahahalet nez");
-
Je doit faire mon
strins
mais je sais pas a quelle position démarrer :s
-
Je t'ai fais une include, peut-être que cela te parleras plus.
/* Text Splitting for long text
*
* (c) Copyleft 2011-2012, Xartrick
* This work is submitted under Beerware rights.
*
* By Xartrick
*/
#if defined _x_textsplit_included
#endinput
#endif
#define _x_textsplit_included
#pragma library textsplit
#include <a_samp>
forward SAMPStringLimiter(string[]);
forward split(strsrc[], strdest[][], delimiter);
SAMPStringLimiter(string[])
{
new stringlength = 0, sentencelength = 0, wordlength = 0;
new sentence[2][128];
stringlength = strlen(string);
for(new i = 0; i < stringlength; i++)
{
if(string[i] == 32)
{
if((sentencelength + wordlength) > 128)
{
string[i] = '£';
break;
}
wordlength = 0;
}
else
{
wordlength++;
}
sentencelength++;
}
split(string, sentence, '£');
return sentence;
}
split(strsrc[], strdest[][], delimiter)
{
new i = 0, li = 0, aNum = 0, len = 0;
while(i <= strlen(strsrc))
{
if(strsrc[i] == delimiter || i == strlen(strsrc))
{
len = strmid(strdest[aNum], strsrc, li, i, 128);
strdest[aNum][len] = 0;
li = i+1;
aNum++;
}
i++;
}
return 1;
}
À placer dans /pawno/include/ (par défaut).
Exemple d'utilisation:
new chaine[BIG_ARRAY] = "Ceci est un simple texte pour comprendre comme mon (Xartrick) include fonctionne, elle permet de couper un texte en deux parties (seulement) si celui-ci est trop long (128 caractères).";
new result[2][128];
result = SAMPStringLimiter(chaine);
printf("%s", result[0]);
printf("%s", result[1]);
-
Repondre, merci a toi !, je n'ai plus qu'a trouver comment mettee mes \n.
Tout grand merci
-
Quel usage veut-tu faire de ceci ?
Une personne envoi un message et tu le coupe en deux phrases si celle-ci est trop longue ?
-
S'est pour mon dialogue, j'aimerais que si le message est superieu a 128, qu'il me mette un "
" a l'espace le plus proche, pour éviter que mon tableau ne soit trop large et ne sorte de l'écran.
Double post
Salut, donc j'ai utilisé ton code mais je l'ai modifier.
SAMPStringLimiter(string[])
{
new stringlength = 0, sentencelength = 0, wordlength = 0;
stringlength = strlen(string);
new string2[1024];
strmid(string2, string, 0, 1024, 1024);
printf(string);
for(new i = 0; i < stringlength; i++)
{
printf(string);
printf(string[i]);
if(string[i] == 32)
{
if((sentencelength + wordlength) > 128)
{
strins(string2, "\n", i,1024);
sentencelength = 0;
}
wordlength = 0;
}
else
{
wordlength++;
}
sentencelength++;
}
printf(string);
return string2;
}
le soucis s'est que je suis obliger d'utiliser une autre string
new string2[1024];
strmid(string2, string, 0, 1024, 1024);
Car avec mes
printf(string);
printf(string[i]);
je vois que le premier me donne toute la ligne, le second, la ligne moin la lettre qui se trouve en i et ce qu'il y a avant
et que donc a mon return string, j'obtien un blanc.
Est il possible de faire autrement pour ne pa devoir utiliser 2 string?
merci !