GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: chneuls le 19 Octobre 2010, 22:04:01

Titre: [Demande Aide] Couper un message
Posté par: chneuls le 19 Octobre 2010, 22:04:01
Bonsoir, je suis de retour pour Syg, Sim etc.. ( petite question : Ou est passée Cristab ? Il avais arrêter GTA et là le pawn ? :o)


Tout est dans le titre. Donc j'aimerais que quand le joueur dépasse son taux de caractère quand il écris une phrase c'est à dire 128 bits, on l'a coupe au dernier mot et on stock le reste pour l'envoyer ensuite.
Sur un exemple cela donnerais :

- Imaginons, cette phrase '' J'aimerais être découper aprés 128 bits " face 128 bits, ce qui n'est pas le cas
je voudrais que cette phrase se coupe par exemple aprés le 128 ce qui donnerais,

Sam_Giancana : J'aimerais être découper après 128 <-- 128 bits on coupe et on renvoie à la ligne
bits <-- donc ici !

Merci de votre aide
 :cheers
Titre: Re : [Demande Aide] Couper un message
Posté par: Aegoss le 19 Octobre 2010, 22:22:59
J'ai essayé Google Translator... error écrit en gros.

Si tu fais une version française de ton post, je pense qu'on va pouvoir t'aider .
Titre: Re : [Demande Aide] Couper un message
Posté par: chneuls le 19 Octobre 2010, 22:27:04
De quoi Aegoss ? Oo
Titre: Re : [Demande Aide] Couper un message
Posté par: Ssk le 19 Octobre 2010, 22:42:56
Béh j'ai aussi, pas compris, sinon, tu doit confondre 128 bits et 128 octets, et aussi en pawn c'est des variables de 4 octets ( 32 bits ), et un tableau de 128 cell fait 512 octets ( 4096 bits ).


Ne confond pas caractères et bit ^^

Si tu parle de couper le message après qu'il est dépassé 128 caractères, béh pas besoin de le faire car sur samp la limite de caractères dans la chatbox ( donc dans l'entrer de texte ) est de 128 caractères ^^
Titre: Re : [Demande Aide] Couper un message
Posté par: chneuls le 20 Octobre 2010, 10:11:29
Oui scuse moi Sasuke ;)
En plus la honte.. je travail sur l'électronique et ça j'utilise souvent x'D
Bref :)
Oui mais justement, c'est que si un joueurs dépasse 128 chars je voudrais couper là et restaurer la fin du message ( que sa:mp coupe lui même ) pour qu'il n'a pas à le retaper ^^
Titre: Re : [Demande Aide] Couper un message
Posté par: Ssk le 20 Octobre 2010, 12:59:00
béh tu peut pas trop vu que samp découpe à 128 caractères on peut pas connaitre les autres ^^
Titre: Re : [Demande Aide] Couper un message
Posté par: Syg le 20 Octobre 2010, 14:17:32
C'est même mieux que ça, Sazuke, SAMP ne permet pas de saisir plus de 128 caractères dans le chat.

Par contre, dans le cas où le script rajoute un bout de chaîne (par exemple l'ID du joueur comme sur Lalu's Stunt), il se peut que la chaîne finale à afficher dépasse les 128 caractères.
Dans ce cas, il faut rechercher l'espace qui se trouve juste avant le 128° caractère et couper la chaîne à cet endroit là.
Ensuite, on utilise deux fois SendPlayerMessageToAll pour afficher les deux morceaux de la chaînes.

++
Syg
Titre: Re : [Demande Aide] Couper un message
Posté par: chneuls le 20 Octobre 2010, 21:01:50
Tout à fait ça Syg, mais mis à part Strlen pour compter le nombre de caractères, je sais pas faire.
Je suppose qu'il faudra créé un petit strtok ? non ?
Pourrais tu me montrer un début de script que j'essayerais de comprendre et compléter. Au moins, j'aurais appris encore une nouvelle chose :p

Merci :D
Titre: Re : [Demande Aide] Couper un message
Posté par: Syg le 20 Octobre 2010, 23:03:56
Non, pas de strtok.
De plus ici, il n'est pas possible d'utiliser une fonction toute faite (il en existe une en C mais elle n'a pas d'équivalent en PAWN).

Donc on fait simple :
new Chaine[255]; //<- Ça c'est la chaîne qui contiendra le message à afficher
new FinChaine[128];
new i;

// ICI, ON REMPLI LA CHAINE D'UNE FACON OU D'UNE AUTRE

/* Si la chaîne fait plus de 128 caractères */
if (strlen (Chaine) > 128)
{
   /* On part du 128° caractère et on remonte la chaîne jusqu'à ce qu'on trouve un espace */
   i=128;
   while (Chaine[i]!=' ' && i>0) // NB : Il y a un espace entre les deux quotes
   {
      i--; // Caractère précédent
   }

   /* A ce niveau, i nous donne l'index de l'endroit où il faut couper la chaine */
   /* On remplace l'espace par un 0 binaire qui va terminer la chaine à cette endroit */
   Chaine[i] = 0;

   /* On affiche les deux parties de la chaine */
   SendPlayerMessageToAll (playerid, Chaine); //Première partie qui se termine sur le caractère i
   SendPlayerMessageToAll (playerid, Chaine[i+1]); //Deuxième partie de la chaine qui commence au caractère i+1
}
else
{
   /* On affiche la chaine sans traitement */
   SendPlayerMessageToAll (playerid, Chaine);
}
NB : Code testé et approuvé par mes soins pour les besoins de cette réponse

A faire : Traiter le cas où la chaine ne contient pas d'espace (cas où i vaut 0 lorsqu'on sort de la boucle while)
Je te laisse traiter ce cas, ça te fera un bon exercice.

++
Syg
Titre: Re : [Demande Aide] Couper un message
Posté par: chneuls le 21 Octobre 2010, 10:15:18
Oki, merci beaucoup Syg ;)
Je travaille sur mon un autre système en ce moment ( Caravane ) que je posterais bien entendu puis j'essayerais de faire ton truc, dans tous les cas, j'te met au courant :)


Edit :

J'ai regarder un peu est :
ta variable FinChaine est inutilisé ? Pourquoi ? ^^
J'ai tester sans espace, ce qu'il se passe, c'est que ça coupe à 128 chars.. ^^
Titre: Re : [Demande Aide] Couper un message
Posté par: Syg le 21 Octobre 2010, 16:31:24
Pour la variable FinChaine, c'est juste que au début j'avais l'intention de copier la fin de la chaine dans une autre variable mais je me suis rendu compte qu'elle ne servait à rien et j'ai oublié de la supprimer. Tu peux donc la supprimer aussi.

Concernant le cas où la chaîne ne contient pas d'espace, je n'ai pas testé moi-même.
Si le code fonctionne comme ça, tant mieux.

++
Syg

Titre: Re : [Demande Aide] Couper un message
Posté par: chneuls le 21 Octobre 2010, 18:29:40
Merci beaucoup pour m'avoir '' fait " le travail mais je crois que j'ai '' compris '' vaguement mais bon c'est déjà ça :D
Titre: Re : [Demande Aide] Couper un message
Posté par: cristab le 22 Octobre 2010, 16:56:18
Bonsoir, je suis de retour pour Syg, Sim etc.. ( petite question : Ou est passée Cristab ? Il avais arrêter GTA et là le pawn ? :o)

Bonsoir

Je vais repondre a ta question tout simplement que j'ai arreter pendant tres peu de temps est a mon retour trop de changement pas le gout de revoir et voir les nouvelle fonction ect ect don sa bon voila puis plus le jeu pour tester non plus.

Mais je ne repeterais jamais assez le pawn et juste une question de logique.

++
Titre: Re : [Demande Aide] Couper un message
Posté par: chneuls le 22 Octobre 2010, 17:33:48
Citer
Mais je ne repeterais jamais assez le pawn et juste une question de logique.

Jamais dit le contraire.. justement, voila là faiblesse du pawn, on dépend trop de sa:mp >.<
Titre: Re : [Demande Aide] Couper un message
Posté par: Ssk le 22 Octobre 2010, 17:58:51
Tu dépend pas de SA:MP, le pawn est un langage à part qui n'a rien d'exclusive à SA:MP.


Sinon si tu veut des nouvelles fonctions faut avoir beaucoup de connaissance en memory hacking pour créer des plugins côté client <-> serveur pour avoir des choses supplémentaire comme le plugin audio d'incognito ( qui n'est pas du memory hacking ), ou bien le plugin control NPC qui est dispo sur le forum sa-mp.com ^^
Titre: Re : [Demande Aide] Couper un message
Posté par: chneuls le 22 Octobre 2010, 18:28:51
Je pensais à la team SA:MP qui à lancer le projet et qui nous fournis les fonctions.

Le memory hacking, faut déjà le coder ;) J'vais voir pour apprendre à fond des codes autres que pawno, j'connais un peu de C/C++ mais bon, j'utilise pas couramment, ^^