Probleme de return pour un $submenu en variable

Résolu
MoiMdr Messages postés 64 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 19 juin 2010 - 27 mars 2010 à 13:17
WorldDMT Messages postés 871 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2012 - 28 mars 2010 à 17:31
Bonjour à tous,

Je voulais faire un menu popup en $submenu mais j'ai un souci

menu status {
  Salon-Favoris2
  .$submenu($salonFa2($1))
}
alias salonFa2 {
  var %x = 0
  while (%x < $ini(mirc.ini,chanfolder,0)) {
    %loopm2 = return coucou
    if ($1 == begin) return - 
        elseif ($1 == $calc(%x + 1)) return $readini(mirc.ini,chanfolder,n $+ %x):/join $readini(mirc.ini,chanfolder,n $+ %x)
    elseif ($1 == end) return - 
    inc %x
  }
}


Mon souci est que mes salons ne s'affichent pas, si je met ca:

elseif ($1 == $calc(%x + 1)) return d:/join $readini(mirc.ini,chanfolder,n $+ %x)

ca me met bien autant de "d" que j'ai de salon dans mon menu popup et ca joins bien les salons respectifs.
Donc c'est bien :

"return $readini(mirc.ini,chanfolder,n $+ %x)"

qui ne marche pas, j'ai tenté de faire un alias ou une autre variable en interne mais pareil , dès qu'on met une variable derrière le return %alias ca ne marche pas, si je fais ca exemple:

alias essais {
%essais = monalias
return %essais
}

et ligne pour tester :

elseif ($1 == $calc(%x + 1)) return %essais:/join $readini(mirc.ini,chanfolder,n $+ %x)

et bien ca ne me met même pas monalias dans le menu ( il reste vide et grisé)
même si je rajoute ça dans mon code du $submenu:
var %essais2 = $readini(mirc.ini,chanfolder,n $+ %x)
ou
%essais3 = return $readini(mirc.ini,chanfolder,n $+ %x)

j'ai fais au moins 10 facons differantes pour ne pas dire 20 et passer pour un mito lol

Donc si quelqu'un à une idée ca serait sympa ;)
Mon but de départ était de changer le bouton des favoris de mIRC 6.35 mais je teste mon menu dans la fenêtre de status et puis même si ca me servira pas à grand chose je voudrais bien arriver à comprendre pourquoi ca ne marche pas car peut être que ca me servira un jour pur autre chose.

Merci à tous ;)

PS: je me sert de la super aide " LA Bible pour mIRC scripteur v0.14

8 réponses

WorldDMT Messages postés 871 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2012 1
28 mars 2010 à 00:24
bon pour le probleme de la variable %loop2 existe toujour car elle est inutile
ensuite pour le $calc(%x +1) bon calculont ensemble, tu dis bien que n0 bon regarde ce que la loop fait:

alias salonFa2 {
  var %x =  0
  ; ici tu set %x a 0
  while (%x < $ini(mirc.ini,chanfolder,0)) {
    %loopm2 = return coucou <= inutile donc a suprimer
    if ($1 == begin) return -
    ; la premiere loop a valider cette condition donc %x devient 1 pour la 2eme loop
    elseif ($1 == $calc(%x + 1)) return blabla
    ; ici c'est if ($1 == 2) return $read(fichier,n1)
    elseif ($1 == end) return -
    inc %x
  }
}

tu vois?

donc pour la loop c'est $1 == %x return $read(fichier,n $calc(%x - 1)
ce qui signifi que $1 1 return $read(fichier,n0) parceque le %x 0 a été validé pour le "begin"

et pas d'aide dans le mIRC mais $calc(%x - 1) = $(},%x)

bon pour les chans il existe des chans qui contienent des commentaires et des parametres ect. comme je t'ai déja expliqué exp #chan, "blabla" c'est pourquoi j'ai utilisé $pos et $mid d'ailleur j'etais fatigué peut etre :p il suffisait d'utilisé un simple $gettok

donc c'est pourquoi le code doit etre amelioré comme celà

menu status {
  Salon-Favoris2
  .$submenu($salonFa2($1))
}
alias salonFa2 {
  var %x 0,%y $ini(mirc.ini,chanfolder,0)
  while %x <= %y {
    var %z $gettok($readini(mirc.ini,chanfolder,n $+ $(},%x)),1,44)
    if ($istok(begin.end,$1,46)) return -
    elseif ($1 == %x) return %z :join %z
    inc %x
  }
}
3
WorldDMT Messages postés 871 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2012 1
28 mars 2010 à 17:11
bof we je vois
mais c'est plus rapide de ne pas utilisé un identifieur dans la commande while donc:
var %x 0,%i $ini(mirc.ini,chanfolder,0)
while %x <= %i { ...

ceci evite de faire un calcul suplement de l'identifieur $ini() a chaque loop si non utilise $readini dans la loop une fois comme ça le $gettok aura un $v1

var %x 0
while $readini(mirc.ini,chanfolder,n $+ %x) {
  var %y $gettok($v1,1,44)
  if ($istok(begin.end,$1,46)) return -
  elseif ($1 == $calc(%x + 1)) return %y :/join %y
  inc %x
  }
3
WorldDMT Messages postés 871 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2012 1
27 mars 2010 à 20:12
salut
1- l'identificateur est collé au deux point ":"
2- ce n'est pas %x +1 c'est plutot %x - 1 (qui peux etre aussi $(},%x) qui est plus pratique)
3- il existe des parametres commentaires ect... ce qui veux dire tu trouve par exp #chan,"un chan de blabla" donc il va falloir ajouter rien que le chan c'est pourquoi je vais utiliser les identifieurs $pos et $mid
4- %loop2 est inutil

donc conclusion:
menu status {
  Salon-Favoris2
  .$submenu($salonFa2($1))
}
alias salonFa2 {
  var %x 0,%y $ini(mirc.ini,chanfolder,0)
  while %x < %y {
    var %i $readini(mirc.ini,chanfolder,n $+ $(},%x))
    var %z $iif($pos(%i,$chr(44),1),$mid(%i,1,$(},$v1)),%i))
    if ($istok(begin.end,$1,46)) return -
    elseif ($1 == %x) return %z $+ :join %z
    inc %x
  }
}
0
WorldDMT Messages postés 871 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2012 1
27 mars 2010 à 20:16
oups re rectifie la loop il en menque un "=" donc %x <= %y
menu status {
  Salon-Favoris2
  .$submenu($salonFa2($1))
}
alias salonFa2 {
  var %x 0,%y $ini(mirc.ini,chanfolder,0)
  while %x <= %y {
    var %i $readini(mirc.ini,chanfolder,n $+ $(},%x))
    var %z $iif($pos(%i,$chr(44),1),$mid(%i,1,$(},$v1)),%i))
    if ($istok(begin.end,$1,46)) return -
    elseif ($1 == %x) return %z $+ :join %z
    inc %x
  }
}
0

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

Posez votre question
MoiMdr Messages postés 64 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 19 juin 2010
27 mars 2010 à 21:23
Salut,

Donc pour le mon identifiant collé aux : et bien oui en fait mon code marche pfffff
menu status {
  Salon-Favoris
  .$submenu($salonFa2($1))
}
alias salonFa2 {
  var %x = 0
  while (%x < $ini(mirc.ini,chanfolder,0)) {
    %loopm2 = return coucou
    if ($1 == begin) return - 
    elseif ($1 == $calc(%x + 1)) return $readini(mirc.ini,chanfolder,n $+ %x) :/join $readini(mirc.ini,chanfolder,n $+ %x)
    elseif ($1 == end) return - 
    inc %x
  }
}


en fait j'avais même ps tilté alors que d'hab j'y fais bien attention mais c'est le système menu popup qui m'a embrouillé car on colle les commandes en standard comme l'exemple dans l'aide :

menu status {
Animalm
.$submenu($animalm($1))
}
alias animalm {
if ($1 == begin) return -
if ($1 == 1) {
return Cow:echo Cow
}
if ($1 == 2) return Llama:echo Llama
if ($1 == 3) return Emu:echo Emu
if ($1 == 4) return
if ($1 == end) return -
}
et vrai que j'avais même pas essayé de décoller car me disait que ca ne marcherait pas car en remplaçant mon $readini(mirc.ini,chanfolder,n $+ %x):.join... par d:/join ca marchait et affichait bien les "d" ralalalalala lol

Ensuite pour le $calc(%x + 1) Et bien si puisque dans le mirc.ini la liste commence en n0=#blabla et je ne comprend pas ton (},%x), je n'ai trouvé aucune aide sur le "(}"

Pour finir ton code marche oui mais je ne sais pas si mieux que le mien, enfin comme quoi il y a plusieurs façons de coder mais je trouve que le tiens est bcp se compliquer pour arriver au même résultat avec ttes ces variable alors que moi une me suffit, ensuite vu que $ini(mirc.ini,chanfolder,0) fait la même chose que $readini(mirc.ini,chanfolder,0)

Enfin en tous cas merci pour les : qui étaient collé pffffff dire que j'ai tenté pleins de trcus alors que c'était juste une titer erreur comme quand on colle les {ou}

Cordiallement,
Moi à nouveau Mdr lol
0
MoiMdr Messages postés 64 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 19 juin 2010
28 mars 2010 à 10:50
Salut,

pour le %loopm2 oui j'avais oublié de le virer, c'était quand je faisais mes testes ;)

Ensuite
donc pour la loop c'est $1 == %x return $read(fichier,n $calc(%x - 1)
ce qui signifi que $1 1 return $read(fichier,n0) parceque le %x 0 a été validé pour le "begin"


Je suis pas convaincu mais ca marche et ca marche aussi pour moi avec
elseif ($1 == $calc(%x + 1)) return %y :/join %y
Moi je partais du principe que tant que la boucle était pas bouclée le %x était toujours = 0 d'ou le while (%x < et pas <=

pour les description des salon ok je n'y avais pas pensé ;)
pour ta variable %y j'ai estimé que pas nécessaire vu qu'on l'appel qu'une seule fois donc j'ai modifié mon code ainsi:

menu status {
  Salon-Favoris
  .$submenu($salonFa2($1))
}
alias salonFa2 {
  var %x = 0
  while (%x < $ini(mirc.ini,chanfolder,0)) {
    var %y = $gettok($readini(mirc.ini,chanfolder,n $+ %x),1,44)
    if ($istok(begin.end,$1,46)) return -
    elseif ($1 == $calc(%x + 1)) return %y :/join %y
    inc %x
  }
}

à remarquer que while (%x < $ini(mirc.ini,chanfolder,0))
< et pas <= d'ou le $calc(%x + 1)

Mais comme ceci ca marche aussi :

menu status {
  Salon-Favoris
  .$submenu($salonFa2($1))
}
alias salonFa2 {
  var %x = 0
  while (%x <= $ini(mirc.ini,chanfolder,0)) {
    var %y = $gettok($readini(mirc.ini,chanfolder,n $+ $(},%x)),1,44)
    if ($istok(begin.end,$1,46)) return -
    elseif ($1 == %x) return %y :/join %y
    inc %x
  }
}
0
MoiMdr Messages postés 64 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 19 juin 2010
28 mars 2010 à 17:29
Salut,

Ok si c'est une histoire de rapidité ;)

Merci pour tous, :)
0
WorldDMT Messages postés 871 Date d'inscription jeudi 6 juillet 2006 Statut Membre Dernière intervention 6 janvier 2012 1
28 mars 2010 à 17:31
de rien avec plaisir
n'oubli pas de cocher reponse accepté :)

@+
0
Rejoignez-nous