Kerrigan
Messages postés
708
Date d'inscription
lundi 15 juillet 2002
Statut
Membre
Dernière intervention
17 mars 2005
17 juin 2004 à 14:14
On va faire le code pas a pas histoire ne pas te lacher un gros code sans que tu ne comprennes rien
en meme temps tu veras mon cheminement lors de l'élaboration du code.
on *:text:*Mower*:#: {
var %mot = $gettok($1-,$rand(1,$gettok($1-,0,32)),32)
var %phrase = $read(d:\log.txt, w, $+(*,%mot,*))
msg $chan $nick %phrase
}
Pour faire simple
%mot va prendre un mot au hasard dans la phrase
et cette fonction :
$read(d:\log.txt, w, $+(*,%mot,*))
Va rechercher une phrase qui contient %mot dans le fichier texte
Par contre je ne sais pas si c'est une phrase tirée au hasard.
pour eviter les "je" et les "du"
on *:text:*Mower*:#: {
var %except = je,du,à,ce,que
var %mot = $gettok($1-,$rand(1,$gettok($1-,0,32)),32)
while ($findtok(%except,%mot,1,44)) {
%mot = $gettok($1-,$rand(1,$gettok($1-,0,32)),32)
}
var %phrase = $read(d:\log.txt, w, $+(*,%mot,*))
msg $chan $nick %phrase
}
Cette ligne verifie que le mot "%mot" n'est pas présent dans
la liste de mot a éviter.
while ($findtok(%except,%mot,1,44)) {
%mot = $gettok($1-,$rand(1,$gettok($1-,0,32)),32)
}
En meme temps en prenant cette syntaxe on aura un problème si la phrase du type c'est : "je je je je je je je".
La ton mirc va geler. Donc on va mettre une instruction de sortie
var %j = 1
while ( $findtok(%except,%mot,1,44) || %j <= $gettok($1-,0,32) ) {
%mot = $gettok($1-,$rand(1,$gettok($1-,0,32)),32)
inc %j
}
en gros si la boucle essai trop de fois de trouver un mot correct ( le nombre d'essai permis est egale au nombre de mot possible) elle s'arrete et te laissera respirer (ouf :) )
ensuite si un mot correct n'a pas été trouvé malgré la boucle plus haut, on dira au code ne pas envoyer de phrase :
if ($findtok(%except,%mot,1,44)) { halt }
grace a cette comande
au final le code ressemble a :
on *:text:*Mower*:#: {
var %except = je,du,à,ce,que
var %mot = $gettok($1-,$rand(1,$gettok($1-,0,32)),32)
var %j = 1
while ( $findtok(%except,%mot,1,44) || %j <= $gettok($1-,0,32) ) {
%mot = $gettok($1-,$rand(1,$gettok($1-,0,32)),32)
inc %j
}
if ($findtok(%except,%mot,1,44)) { halt }
var %phrase = $read(d:\log.txt, w, $+(*,%mot,*))
msg $chan $nick %phrase
}
on peut aisément optimiser ce code mais c'est pas le but ici.
j'espere que mes commentaires t'auront aidé. Reste a régler le problème de la phrase au hasard la je vois pas trop.
Je n'ai rien testé mais a priori ça marche.
en cas de problème tu feras les corrections toi meme comme un grand. C'est comme ça qu'on progresse.