trivia.tcl [résolu]
#6
Visiblement, le problème est le même que celui que MenzAgitat avait rencontré sur le script JService au passage à eggdrop 1.6.19 (d'ailleurs les deux codes sont carrément semblables en certains points ><).
Le problème viendrait de cette partie:
tcl
if {[catch {incr tghintnum}]!=0} {
        set tghintnum 0
        regsub -all -- "\[^A-Za-z0-9\]" [no_accent $tgcurrentanswer] "" _hintchars
        set tgmaxhintcurrent [expr [strlen $_hintchars]<=$tgmaxhint?[expr [strlen $_hintchars]-1]:$tgmaxhint]
        catch {tgunbindhintcmd}
        if {$tgmaxhintcurrent>0} {
            set tgrebindhinttimer [utimer $tgtempnohint tgbindhintcmd]
        }
    }
    if {$tghintnum >= [expr $tgmaxhintcurrent+1]} {
        incr tgmissed



Et surtout plus particulièrement de cette ligne:
tcl
if {[catch {incr tghintnum}]!=0} {


Le but de cette ligne est de vérifier si la variable tghintnum existe, et de l'incrémenter.
Si elle n'existe pas, elle est initialisée à 0, et on entre dans la boucle.
C'est quand même un peu bidon, et ça provoque des erreur dans le catch

Pour comprendre d'ou viens le problème, il faut regarder de plus prêt la commande incr.
Vous comprendrez mieux en voyant ceci :
Boulet #1 a écrit :firartix@Manchot:~$ tclsh8.4
% incr stupidVar 1
can't read "stupidVar": no such variable
Boulet #2 a écrit :firartix@Manchot:~$ tclsh8.5
% incr stupidVar 1
1

En effet, depuis la version 8.5 de TCL, la commande incr ne provoque plus d'erreur si elle n'est pas initialisée : elle l'initialise à 0 et continue normalement
Du coup, l'erreur (variable inexistante) n'est pas detectée, et on entre pas dans la boucle. Et au final, la variable tgmaxhintcurrent n'existe pas, et le script se casse les dents sur la vérification d'après !
En réalité, c'est très simple à corriger. La variable étant mise à 0 si elle n'existe pas (donc l'incr n'a pas d'effet), il suffit de vérifier si elle existe
J'ai déjà testé ce code sur JService, et il fonctionne :

tcl
if {![info exists tghintnum]} {
        set tghintnum 0
        regsub -all -- "\[^A-Za-z0-9\]" [no_accent $tgcurrentanswer] "" _hintchars
        set tgmaxhintcurrent [expr [strlen $_hintchars]<=$tgmaxhint?[expr [strlen $_hintchars]-1]:$tgmaxhint]
        catch {tgunbindhintcmd}
        if {$tgmaxhintcurrent>0} {
            set tgrebindhinttimer [utimer $tgtempnohint tgbindhintcmd]
        }
    } else { incr tghintnum }
    if {$tghintnum >= [expr $tgmaxhintcurrent+1]} {
        incr tgmissed



Les seuls changement étant le remplacement du catch par un info exists (pour vérifier l'existance de la variable) et l'ajout du else à la fin du bloc if (pour incrémenter la variable si elle existait)
Répondre Avertir


Messages dans ce sujet
trivia.tcl [résolu] - par EricPompier - 04/06/2009, 20:10
RE: trivia.tcl - par EricPompier - 04/06/2009, 22:24
RE: trivia.tcl - par CrazyCat - 04/06/2009, 22:35
RE: trivia.tcl - par Moune - 26/06/2009, 11:37
RE: trivia.tcl - par BdS - 26/06/2009, 11:51
RE: trivia.tcl - par Artix - 26/06/2009, 11:53
RE: trivia.tcl - par Moune - 26/06/2009, 12:54
RE: trivia.tcl [résolu] - par lesny - 24/11/2010, 04:22
RE: trivia.tcl [résolu] - par lesny - 05/12/2010, 05:48

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté