Salut!
Je sais que l'habitude n'est pas sur ce forum de poster des bouts de code tout fait, mais j'avais créé un système qui permettait de redimensionner des longues chaines de caractères pour les afficher à l'écran...
Je vous donne les deux versions que j'ai créées:
- Affichage du texte dans le chat avec "SendClientMessage"
[spoiler]
new str[1024]; // Stockage brut du texte (cad le texte que l'on veut redimensionner)
// Système de redimensionnement:
new tmp[256]; // Stockage du texte temporaire (cad le texte que l'on va afficher)
new StrLenMax = 100; // Longueur max du texte à afficher (en nombre de caractères)
new idx; // pour le fonctionnement du strtok
if(strlen(str) > StrLenMax) // Si texte trop long
{
new len = 0; // Longueur du texte déjà redimensionné
while(len < strlen(str)) // Tant que la taille nouveau texte est inférieur à celle du texte d'origine (donc qu'il n'a pas été recréé en entier)
{
// Ici, on décompose: on prend chaque mot un par un
new str2[128]; // Stocke un mot
str2 = strtok(str,idx); // Trouve le mot
format(tmp,256,"%s",str2); // L'integre au début de la nouvelle ligne
while(strlen(tmp) < StrLenMax) // Crée la suite de la ligne en ajoutant autant de mots que nécessaire
{
str2 = strtok(str,idx);
format(tmp,256,"%s %s",tmp,str2);
}
len = len + strlen(tmp) + 1; // Enregistre la longueur de texte redimensionné
SendClientMessageToAll(COLOR_BL,tmp); // Affiche le texte
}
}
else // Si le texte est suffisement court, l'afficher directement
{
SendClientMessageToAll(COLOR_BL,str);
}
Je résume: entrée: str, sortie: SendClientMessage
[/spoiler]
- La deuxième version qui permet d'afficher le texte dans un dialog par exemple. (En sortie, on obtient une chaine de caractère qui comporte des retours à la ligne)
[spoiler]
new str[256]; // Texte de départ
// Redimensionnement du texte:
new tmp[256]; // Stockage du texte temporaire
new StrLenMax = 60; // Longueur max du texte à afficher
new msg[512]; // Stockage du message final
if(strlen(str) > StrLenMax) // Si texte trop long
{
new len = 0; // Longueur du texte déjà redimensionné
new bool:PremiereLigne = true;
while(len < strlen(str)) // Tant que le nouveau texte est inférieur au texte d'origine (donc qu'il n'a as été recréé en entier)
{
new str2[128]; // Stocke un mot
str2 = strtok(str,idx); // Trouve le mot
format(tmp,256,"%s",str2); // L'integre au début de la nouvelle ligne
while(strlen(tmp) < StrLenMax) // Crée la suite de la ligne en ajoutant autant de mots que nécessaire
{
str2 = strtok(str,idx);
format(tmp,256,"%s %s",tmp,str2);
}
len += strlen(tmp) + 1; // Enregistre la longueur de texte redimensionné
// Colle les bouts ensemble:
if(PremiereLigne == false)
{
format(msg,512,"%s\n%s",msg,tmp);
}
if(PremiereLigne == true)
{
format(msg,512,"%s",tmp);
PremiereLigne = false;
}
}
}
else // Si le texte est suffisement court, l'afficher directement
{
format(msg,512,"%s",str);
}
Je résume: entrée: str, sortie: msg
[/spoiler]
Je ne vous encourage pas à le recopier bêtement pour la simple et bonne raison qu'il est très loin d'être optimisé (notamment en ce qui concerne la longueur de chaînes de caractères), mais aussi parce que vous pouvez aisément créer le votre! :)
L'avantage de ce système, c'est que les mots ne sont pas coupés n'importe comment.
Voilà!
Enjoy!