Outils Ogamien
#1
Bonsoir à tous,
Pour mon premier script je me lance dans une usine à gaz ^^
Voici donc le premier outil de la liste : le calculateur de temps de trajet
Ce script n'est pas opérationnel ...
j'ai une erreur au lancement de l'eggdrop :
Citation :missing close-brace ..... (file "script/ogame.tcl line 127)
et je comptais à vrai dire un peu sur vous pour m'aider à le corriger car je trouve pas cette foutu close-brace manquante Wink
D'autre part j'aurais souhaité avoir un commentaire sur la façon de m'y prendre. Merci par avance de vos conseils et suggestions.
Code :
#########################################################
#                            
#       Outils Ogamiens B0t|Phantom Par Ph4gE        
#                            
#    http://deathnote.knx.free.fr            
#                            
#########################################################

bind pub - !tools tools

#OUTILS
proc tools {nick host hand chan args} {
if {$chan == "#deathnote"} {
putserv "PRIVMSG $chan :\037Liste des outils disponibles\037 : \002Calculateur de vol : !fly\002"
putserv "PRIVMSG $chan :\037Descrption d'un outil\037 : \002!notice <nom de l'outil>\002"
    }
}

#NOTICE
bind pub - !notice notice

proc notice { nick uhost handle channel arg } {
    if {[llength $arg]==0} {
        putserv "PRIVMSG $channel :Veuillez entrer un nom d'outil pour voir sa notice. Exemple !notice <nom de l'outil>"
        }
    if { $arg== "fly" } {
        putserv "PRIVMSG $channel : L'outil !fly calcule le temps de vol en fonction des paramètres que vous indiquez de la manière suivante: "
        putserv "PRIVMSG $channel : !fly <Galaxie de départ> <Système de départ> <Galaxie de destination> <Système de destination> <Technologie Combustion> <Technologie Impulsion> <Technologie Propulsion> <Vaisseau le plus lent> <Planète de départ> <Planète de destination> <Vitesse> "
        putserv "PRIVMSG $channel : Abréviation correcte pour les vaisseaux : "
        putserv "PRIVMSG $channel : Grand Transporteur (GT) "
        putserv "PRIVMSG $channel : Sonde (S) "
        putserv "PRIVMSG $channel : Recycleur (RC) "
        putserv "PRIVMSG $channel : Chasseurs Léger (CLE) "
        putserv "PRIVMSG $channel : Petit Transporteur (PT) "
        putserv "PRIVMSG $channel : Chasseur Lourd (CL) "
        putserv "PRIVMSG $channel : Croiseur (CR) "
        putserv "PRIVMSG $channel : Vaisseau de colonisation (COLO) "
        putserv "PRIVMSG $channel : Bombardier (BOMB) "
        putserv "PRIVMSG $channel : Vaisseau de bataille (VB) "
        putserv "PRIVMSG $channel : Traqueur (TR) "
        putserv "PRIVMSG $channel : Destructeur (DR) "
        putserv "PRIVMSG $channel : Etoile de la mort (RIP) "        
    }
}

########################################################################################################################
#    FORMULES OGAMIENNES : Calcul du temps de trajet
#    http://bord.ogame.fr/thread.php?treadid=675631
#
#####################################
#Dans le même système solaire
#####################################
#10 + [35 000 / (% vitesse)* Racine ((1 000 000 + distance absolue entre les deux planètes * 5000)/vitesse du vaisseau)]
#if { $sdep==$sdest } {
#            set distpl { $pldep - $pldest }
#            set temps { 10 + (35000 / 100 * sqrt((1000000 + abs($distpl) * 5000) / $vitvaisseau)) }
#}
###########################
#Dans la même galaxie
###########################
#10 + [35 000 / (% vitesse)* Racine ((2 700 000 + (écart de système)*95000)/vitesse du vaisseau)]
#if { $gdep==$gdest } {
#            set distsys { $sdep - $sdest }
#            set temps { 10 + (35000 / $vitesse * sqrt((2700000 + abs($distsys) * 95000) / $vitvaisseau )) }
#}
###########################
#Sur son champs de ruine
###########################
#10 + [35 000 / (% vitesse)* Racine (5000/vitesse du vaisseau)]
#if { $pldep==$pldest } {
#        set temps { 10 + (35000 / $vitesse * sqrt(5000 / $vitvaisseau ) ) }
#}
###########################
#Au dela de la galaxie
###########################
#10 + [35 000 / (% vitesse)* Racine (écart de galaxies * 20 000 000/vitesse du vaisseau)]
#else { set temps { 10 + (35000 / $vitesse * sqrt(abs($gdep-$gdest) * 20000000 / $vitvaisseau )) } }
#
###############################
# Memo Vitesse des vaisseaux
###############################
#Vaisseau Combustion : GT(7500) - S(1000000) - RC(2000) - Clé(12500)
#---------------------------vitesse de base*(1+niveau comb/10)
#Vaisseau Impulsion : PT(10000) - CL(10000) - Cr(15000) - Colo(2500)
#---------------------------vitesse de base*(1+2*niveau imp/10)
#Vaisseau Propulsion : Bomb(5000) - VB(10000) - Tr(10000) - Dr(5000) - RIP(100)
#---------------------------vitesse de base*(1+3*niveau prop/10)
#
#
########################################################################################################################

#FLY
#if { [llength $arg]==0 } {
#    putserv "PRIVMSG $channel :Notice d'utilisation de l'outil fly : !notice fly "
#}
bind pub - !fly pub:fly

proc pub:fly { nick uhost handle channel arg } {
    set arg [split $arg]
    set gdep [lindex $arg 0]
    set sdep [lindex $arg 1]
    set gdest [lindex $arg 2]
    set sdest [lindex $arg 3]
    set comb [lindex $arg 4]
    set imp [lindex $arg 5]
    set prop [lindex $arg 6]
    set type [lindex $arg 7]
    set pldep [lindex $arg 8]
    set pldest [lindex $arg 9]
    set vitesse [lindex $arg 10]
    if { $gdep ne "" && $sdep ne "" && $gdest ne "" && $sdest ne "" && $comb ne "" && $imp ne "" && $prop ne "" && $type ne "" && $sdep ne "" && $sdest ne "" && $vitesse ne "" } {
        ## Assignation de la vitesse du vaisseau
        switch $type {
            "GT" { set vitvaisseau { 7500 * (1 + $comb / 10) }
            "S"  { set vitvaisseau { 1000000 * (1 + $comb / 10) }
            "RC" { set vitvaisseau { 2000 * (1 + $comb / 10) }
            "CLE" { set vitvaisseau { 12500 * (1 + 2 * $imp / 10) }
            "PT" } { set vitvaisseau { 10000 * (1 + 2 * $imp / 10) }
            "CL" { set vitvaisseau { 10000 * (1 + 2 * $imp / 10) }
            "CR" { set vitvaisseau { 15000 * (1 + 2 * $imp / 10) }
            "COLO" { set vitvaisseau { 2500 * (1 + 2 * $imp / 10) }
            "BOMB" { set vitvaisseau { 5000 * (1 + 3 * $prop / 10) }
            "VB" { set vitvaisseau { 10000 * (1 + 3 * $prop / 10) }
            "TR" { set vitvaisseau { 10000 * (1 + 3 * $prop / 10) }
            "DR" { set vitvaisseau { 5000 * (1 + 3 * $prop / 10) }
            "RIP" { set vitvaisseau { 100 * (1 + 3 * $prop / 10) }
            default  { putserv "PRIVMSG $channel : Vous n'avez pas précisé de type de vaisseau " }
        }
        ## Dans le même système solaire    
        if { $sdep == $sdest } {
            set distpl { $pldep - $pldest }        
            set temps {10 + (35000 / $vitesse * sqrt((1000000 + abs($distpl) * 5000) / $vitvaisseau )) }
        }
        ## Dans la même galaxie
        elseif { $gdep == $gdest } {
            set distsys { $sdep - $sdest }
            set temps { 10 + (35000 / $vitesse * sqrt((2700000 + abs($distsys) * 95000) / $vitvaisseau )) }
        }
        ##Sur son champs de ruine
        elseif { $pldep == $pldest } {
            set temps { 10 + (35000 / $vitesse * sqrt(5000 / $vitvaisseau )) }
        }
        ##Au dela de la galaxie        
        else { set temps { 10 + (35000 / $vitesse * sqrt(abs($gdep-$gdest) * 20000000 / $vitvaisseau )) }
        }    
        
        
        putserv "PRIVMSG $channel : Temps de trajet d'un $type "
        putserv "PRIVMSG $channel : Depuis les coordonnées $gdep : $sdep "
        putserv "PRIVMSG $channel : Jusqu'aux coordonnées $gdest : $sdest "
        putserv "PRIVMSG $channel : Pour les niveaux $comb combustion, $imp impulsion et $prop propulsion : "
        putserv "PRIVMSG $channel : $temps "
        return 0
    }
    else {
        putserv "PRIVMSG $channel : Syntaxe : !fly <Galaxie de départ> <Galaxie de destination> <Système de départ> <Sytème de destination> <Technologie Combustion> <Technologie Impulsion> <Technologie Propulsion> <Vaisseau le plus lent> <Planète de départ> <Planète de destination> <Vitesse> "
        return 0
    }
}        

putlog "======================"
putlog "  Ogame Tools Loaded  "
putlog "======================"
Répondre Avertir
#2
A toutes fins utiles, il faut savoir qu'il est important d'équilibrer les { et } même lorsqu'ils sont situés dans des lignes mises en commentaire, car ils sont quand même lus par l'interpréteur.
Par exemple, ce morceau de code :
tcl
proc test {} {
 # ceci est un test }
 # 
 set test 1
}


provoque cette erreur :
Code :
invalid command name "}" while executing "}"
alors que tu peux constater que les accolades sont parfaitement équilibrées.



Mis à part cette remarque, j'ai parcouru vite fait le code et à vue de nez y'a un problème d'équilibrage dans ton switch :
tcl
## Assignation de la vitesse du vaisseau
 switch $type {
  "GT" { set vitvaisseau { 7500 * (1 + $comb / 10) }
  "S"  { set vitvaisseau { 1000000 * (1 + $comb / 10) }
  ...
 }



S'il reste d'autres erreurs après avoir arrangé cette partie, Aide-nous à t'aider en postant le contenu de $errorInfo de la façon expliquée.
Répondre Avertir
#3
Tout d'abord merci MenzAgitat pour ta réponse, effectivement j'avais omis toute une série de "}", du coup je me suis empressé d'activer la détection des correspondances des parenthèses sous Gedit Smile
Erreur de débutant...
Du coup est apparut une nouvelle erreur à l'exécution de la commande cette fois:
tcl
invalid command name "elseif"
 while executing
"elseif { $gdep == $gdest } { 
			set distsys { $sdep - $sdest }
			set temps { 10 + (35000 / $vitesse * sqrt((2700000 + abs($distsys) * 95000) / $vitvaisseau )) }
		}"
( procédure "pub:fly" line 47)



J'ai également la même erreur si j'utilise une condition simple avec "else" : (invalid command name "else")

Edit: J'ai trouvé, apparemment il ne faut pas commenter à l'intérieur de la condition, j'ai donc mis un commentaire général avant le premier "if" au lieu de détailler étape par étape.

Afin d'éviter un double post voici donc le nouveau problème que je rencontre:
Au niveau de l'exécution tout se passe sans erreur par contre la variable $temps me retourne la formule et non le résultat... je cherche la solution et vous tiens au courant. Si toutefois vous avez une indication n'hésitez pas à m'en faire part Wink
Répondre Avertir
#4
elseif n'est pas une commande Tcl, il s'agit d'un paramètre de la commande if.

La façon correcte de l'utiliser est la suivante :
tcl
if { condition1 } { instructions } elseif { condition2 } { instructions2 } else { instructions3 }


Voici l'équivalent en effectuant des retours à la ligne :
tcl
if { condition1 } {
  instructions
} elseif { condition2 } {
  instructions2
} else {
  instructions3
}


Note que le elseif et le else ne sont pas situés individuellement sur une ligne mais sont considérés comme étant à la suite du if en raison de la position des accolades.
Répondre Avertir
#5
MenzAgitat a écrit :A toutes fins utiles, il faut savoir qu'il est important d'équilibrer les { et } même lorsqu'ils sont situés dans des lignes mises en commentaire, car ils sont quand même lus par l'interpréteur.
Par exemple, ce morceau de code :
tcl
proc test {} {
 # ceci est un test }
 # 
 set test 1
}


provoque cette erreur :
Code :
invalid command name "}" while executing "}"
Ah ben j'apprends en lisant. Et je le note.
MenzAgitat a écrit :elseif n'est pas une commande Tcl, il s'agit d'un paramètre de la commande if.
Comme dans la plupart des (tous les) langages d'ailleurs, un elseif est une instruction conditionnelle qui ne peut qu'être à la suite d'un if.
Répondre
#6
Idem CrazyCat j'apprend une info aussi, sympa.
CrazyCat a écrit :La prochaine fois, essaye d'imaginer que j'ai un cerveau ...
Répondre Avertir
#7
Au moins mes bourdes servent à quelque chose Smile
Pour le soucis du bas de mon post précédent, c'est bon j'ai aussi trouvé, c'etait la syntaxe qui allait pas et puis je n'utilisait pas "expr" donc çà rimait a rien..
Répondre Avertir
#8
Bonjour à toutes et tous.

Serait il possible de poster la version corrigé de ce tcl s'il te plait knx ?

Merci, à bientôt
Répondre Avertir
#9
Bonjour zarkox,
mon script n'est pas complètement terminé pour le moment, si tu veux le récupérer en l'état passe me voir sur le chan #eggdrop sur epiknet ou sur #deathnote du reseau ogamenet.

J'y ai associer d'autres outils:
Calculateur de probabilité de destruction de lune et RIP attanquante
Portée des phalanges et MIP avec temps avant impact
Calculateur de cout de batiment

Bien que les calculs des temps soient opérationnels, il me manque un convertisseur secondes -> hh:mm:ss
Si une âme charitable pouvait m'indiquer comment employer la fonction clock pour arriver à mes fins et me dire si cette fonction me permet bien de réaliser cette conversion.

Pour info, je comptais évidement une fois tous les outils opérationnel, proposer mon script à la commu Wink
Répondre Avertir
#10
Tu peux peut-être essayer avec:
tcl
clock format $seconds "%H:%M:%S"


Répondre
#11
Coucou knx, c'est gentil de ta part de m'avoir répondu aussi rapidement. Je passerais te voir, promis !
Répondre Avertir
#12
J'attends avec impatience la version finale Smile
Répondre Avertir


Atteindre :


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