Un classique de l'usage intempestif de strtok.
La fonction strtok sert à découper une chaîne en morceaux. La coupure se fait au niveau des espaces.
Classiquement, on fait un premier strtok pour extraire la commande de la ligne saisie par le joueur.
Ensuite, en fonction des commandes, on peut faire d'autre strotk pour extraire les paramètres de la commande.
Mais la fonction strtok renvoie TOUJOURS une chaîne sans espace.
Dans ton cas, la ligne saisie contient plusieurs espaces (exemple : "/asay Le texte a affiché").
Le premier strtok (fait au début de OnPlayerCommandText et commun à toutes les commandes) renvoie la chaîne "/asay" qui correspond à la commande saisie. Jusqu'ici, tout est correct.
Dans le code de ta commande /asay, tu fais un deuxième strtok qui lui va renvoyer le morceau suivant ("Le" si on reprend l'exemple précédent). C'est ce morceau qui sera affiché et ce morceau seulement.
Pour corriger ton problème, il ne faut pas faire de strtok mais dire au serveur qu'il affiche à partir du caractère suivant l'espace qui se trouve juste après la commande.
La fonction strtok met à jour la variable idx en lui affectant l'index du premier caractère du prochain morceau. Dans ton cas, idx correspond donc au premier caractère de la chaîne que tu veux afficher.
Il suffit donc de remplacer la ligne
result = strtok(cmdtext, idx);par
format (result, 128, "%s", cmdtext[idx]);et le tour est joué.
NB : L'appel à format permet de copier le contenu de cmdtext à partir du caractère pointé par idx dans result.
++
Syg