Probleme fichier.txt

cs_Bioxyd Messages postés 5 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 9 mars 2008 - 9 mars 2008 à 23:10
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 - 10 mars 2008 à 20:14
Bonsoir tout le monde



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Voila je vous explique mon problème je suis entrain de créer un bot script pour un chan de blague.


Je voudrais que le bot lise un texte aléatoire qui va être dans un fichier.txt


Jusque la j’arrive à le faire avec ce code :

on *:text:!blague_start:#:{
  timerblague 0 40 /msg $chan $!read(blague.txt, %i 1) | inc %i
}


on *:text:!blague_stop:#:{
  timerblague off
}


Mes le problème ses que je voudrais pouvoir lire 4 lignes à la fois comment je pourrais faire SVP

6 réponses

cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
9 mars 2008 à 23:46
Tu fait ton compteur avec une variable globale de nom %i, c'est pas très prudent, pour lire 4 lignes, fait simplement ce que tu fait 4 fois :

on *:text:*:#:{
if ($1 == !blague_start) {
var %a 4
while (%a) {
 inc %cmpt
 .timerblague $+ %a 0 40 msg $chan $!read(blague.txt,%cmpt ) if (%cmpt $lines(blague.txt)) %cmpt 0
 %a = %a - 1
 }
}
elseif ($1 == !blague_stop) .timerblague* off
}
0
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
9 mars 2008 à 23:53
"pour un chan de blague" < ça m'a beaucoup fait rire, merci :o)

Pour ton problème, ça dépend si tu dois lire 4 lignes à chaque fois ou non. Si tu dois lire 4 lignes à chaque fois, c'est facile, je t'explique comment faire en dessous (ce forum n'est pas là pour donner des codes tout cuits....). Si non, il faut que le bot sache comment commencer & s'arrêter, donc tu devras structurer ton fichier en conséquence.

Si c'est bien 4 lignes à chaque fois :
- la première blague prend les lignes 1 à 4
- la seconde les lignes 5 à 8
- etc.

Donc :
- tu gardes ton "timerblague" mais tu renvoies sur un alias : genre "timerblague 0 40 direblague"
- et donc tu te fais un alias "alias direblague { ... }"
- dans cet alias il faut :
  1- compter le nombre de lignes dans ton fichier grace à $lines et l'enregistrer dans une variable locale, par exemple %lines
  2- définir une blague au hasard qui sera lue : tu cherches à trouver un nombre aléatoire, multiple de 4, entre 1 et %lines : donc : $rand(1,%lines) te donne un de ces nombres mais sans le côté "multiple de 4", qui peut s'obtenir par "$calc(X % 4 * 4)" où X est à remplacer bien sûr
  3- ensuite, tu lis les 4 lignes en commençant à la ligne trouvée à l'étape précédente, et tu en lis 4, ça tu devrais y arriver (au besoin, /help $read, voir /help while si tu veux faire un truc propre)

Améliorations possible : utilisation de /play (à vérifier... je n'ai jamais trop utilisé)

Bon courage ! Si tu n'arrives pas à coder certaines de ces étapes, n'hésite pas à revenir, mais par pitié les gens, ne lui donnez pas un code tout cuit :o)
0
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
9 mars 2008 à 23:54
Ah raté.
Vilain wims !

(au passage, Bioxyd, il y a des trucs qui ne veulent rien dire dans ton code de départ, c'est un miracle si ça marche)
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
10 mars 2008 à 00:00
Je lui ai simplement fait la while, il avait le reste...
Le seul truc bizarre dans son code c'est ça : , %i 1)
Ceci reviens a prendre une phrase aléatoire dans le fichier (je pense que c'est un typo)
Il pourrait utiliser /play, mais c'est plus compliqué.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 5
10 mars 2008 à 08:43
Y'a aussi le " | inc %i " derrière :-)
Je penche plutôt pour une boucle while copiée/collée sans avoir été comprise avant, puis des essais successifs de [Suppr.] pour corriger les erreurs.
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
10 mars 2008 à 20:14
Le | inc %i n'est pas bizarre en soi, il sert uniquement de compteur, histoire de faire les blagues une par une, de la première ligne a la $lines(blague.txt) $+ ieme :)
Bon sinon, ya des erreurs dans le/son/mon code (on parle de betement copier :( ?) :

Il voulait bel et bien l'effet "aleatoire", juste 4 fois, le code devient plus court !! :

on *:text:*:#:{
if ($1 == !blague_start) {
var %a 4
while (%a) {
.timerblague $+ %a 1 $calc(44 - %a) msg $chan $!read(blague.txt)
dec %a
}
elseif ($1 == blague_stop) .timerblague* off
}

En revanche, il est possible que deux même lignes sortent plusieurs fois durant les 4 /msg, j'ai même fais en sorte que les timers est une seconde d'écart
0
Rejoignez-nous