cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 20 nov. 2008 à 02:16
pour mon dialog avec des effet bizzare en fête mon vista avais un pb avec le gamma donc je ne voyais pas ca, puis tout le monde me disé, chelou la tete de t'es dialog donc voila pk je ne voyais pas le pb du dialog lol......
pingyan
Messages postés29Date d'inscriptionmardi 22 janvier 2008StatutMembreDernière intervention 9 novembre 2010 19 nov. 2008 à 15:43
moi j'ai testé c pas mal.
ça a l'air de fonctioner
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 15 nov. 2008 à 19:56
Oulah... Oui oui pardon, rien à voir avec la destruction de variable en effet :(
Encore une fois, je me suis emmêlé les pinceaux d'un forum à l'autre.
Au temps pour moi.
(Je vais arrêter de poster quelques temps, je crois -_-)
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 15 nov. 2008 à 19:49
Euh nan, je parle avec mes connaissance en mirc la, rien avoir avec le C ^^, et euh ou est ce que je me trompe ? Il me semble que tu vois des choses dans mes posts...
"$null n'est pas 0. mettre une variable à $null revient à la détruire ($null renvoit 1 si la variable existe, 0 sinon.)
Or une variable à 0 existe, et n'est donc pas $null."
$null n'est pas 0, ok
mettre une variable a $null reviens a la detruire, non et pour preuve :
alias demonstr {
var %a
;%a est locale et vaut $null, d'apres ce que tu dis, rien qu'en ecrivant //var %a, on detruit la variable ? ca n'a pas de sens
%a = $null
;la variable %a reste local, j'ai explicitement ecris le = $null...
;tjs d'apres toi, ici on detruirai donc la variable
%a = 5
;%a vaut 5 ici, et pourtant cette variable reste local, si elle avait ete detruite, le fait d'ecrire %a = l'aurait rendu globale, et pourtant elle est tjs local *normalement* (non teste mais bon)
}
($null renvoit 1 si la variable existe, 0 sinon.) la je t'avou que j'suis largue, $null renvoi 1 ou 0 ??
Or une variable à 0 existe, et n'est donc pas $null, tjs ok.
c'est bien beau, on sait tout les deux que :
if (%a) est vrai si %a est different de 0, de $false et de $null, d'ou mon optimisation, lui il stock des valeurs 'on' et il ecris :
if (... == on)
dans le cas contraire, il delete la valeur 'on' de la table, (la valeur deviens $null !), et vu qu'il compare tjs a 'on', la condition devient bien fausse, et c'est bien l'effet voulu.
maintenant, il pourrait tres bien ecrire if (...) puisque dans tout les cas, soit la valeur est 'on', (different de 0, $false, et $null) soit la valeur est $null, ecrire 1 au lieu de 'on' fait gagner un caractere, mais ca reviens au meme.En fait dans mon ancien post, je ne faisait que lui dire d'ecrire if (...) au lieu de if (... == on), c'est surement bcp plus clair a present.
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 15 nov. 2008 à 19:10
Wims, les cours de C t'ont vachement servi ^^
Je précise cependant que tu te trompes également en disant :
"Pareil qu'avec les valeur $null/0 ou 1 au lieu de on et off, ici :"
$null n'est pas 0. mettre une variable à $null revient à la détruire ($null renvoit 1 si la variable existe, 0 sinon.)
Or une variable à 0 existe, et n'est donc pas $null.
//var %a 1 | echo -a $iif(%a == $null,nul,pas nul) ;renvoie 'pas nul'
//var %a 0 | echo -a $iif(%a == $null,nul,pas nul) ;renvoie 'pas nul'
//echo -a $iif(%a == $null,nul,pas nul) ;renvoie 'nul' (en imaginant que %s n'a pas été créée précédemment)
Sinon, pour le $did($did), exact je n'avais pas vu que le mot d'avant (item de la htable) changeait, j'ai fait d'ailleurs d'autres fautes, en me relisant.
Bon, je me corrige donc :
Elseif ($devent == Edit) {
if ($did = 13) { hadd -m data cmdBL $did(13) | if ($hget(data)) hsave data data\data.txt }
Elseif ($did = 14) { hadd -m data cmdunBL $did(14) | if ($hget(data)) hsave data data\data.txt }
Elseif ($did = 16) { hadd -m data cmdlistbl $did(16) | if ($hget(data)) hsave data data\data.txt }
Elseif ($did = 18) { hadd -m data blraison $did(18) | if ($hget(data)) hsave data data\data.txt }
}
devientelseif (($devent edit) && (($did 13) || ($did == 14) || ($did == 16) || ($did == 18))) {
var %items cmdBL cmdunBL cmdlistbl blraison
hadd -m data $gettok(%items,$calc($did -12),32) $did($did) | if ($hget(data)) hsave data data\data.txt
}
Dites moi si je me suis trompé, mais je pense que c'est bon (de mémoire). Ca reste un peu lourd quand même mais ça montre pas mal la bonne utilisation des parenthèses dans uen condition, et on économise 2 lignes.
Bon voilà...
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 15 nov. 2008 à 17:20
Ok, si vous etes chaud pour parler d'optimisation, ya du taff la :
Je reprend un truc de Uaip, qui reprend lui meme le code original :
elseif (($did 14) || ($did 16) || ($did == 18)) {
hadd -m data cmdunBL $did($did) | if ($hget(data)) hsave data data\data.txt
}
Donc deja, l'item de la table n'est pas le meme ds le code original selon le $did, donc mauvaise correction de Uaip la :p, on peut utilise un $replace en fonction de $did, ca fait un peu bourrin mais sa passe
Bon moi j'aurais utiliser $istok pour la condition, je trouve ca mieux, mais c'est pas ca qui me 'chagrine', ce que je trouve drole, c'est d'ecrire :
j'ajoute ds la table 'data'
si ya qqch ds la table data, je la sauvegarde
la condition est completement inutile, c'est comme dire "var %a 1 | if (%a 1) { }"
Bon sinon, niveau petit truc de merde, mais qui rende le code tjs meilleur :
un $exists renvois toujours $true ou $false, donc au lieu d'ecrire if ($exists() == $true) on peut directement ecrire if ($exists())
au lieu de stocker toute tes valeur de htable sur on ou off, utilise les valeur $null et 1, ca te permet, pareil, d'ecrire if ($hget()) au lieu du "== on"
if ($did 5) { .timer 1 0 dialog -x $dname | if ($me isop $active) && ($hget(data,blunban) on) && ($hget(data,BLactive) == on) bav $active | if ($hget(data)) hsave data data\data.txt }
Pareil qu'avec les valeur $null/0 ou 1 au lieu de on et off, ici :
# Elseif ($did = 9) {
# if ($did(9).state == 1) { Hadd -m data Blop on }
# else { Hdel data BLop }
# }
# Elseif ($did = 8) {
# if ($did(8).state == 1) { hadd -m data Blunban on }
# Else { Hdel data blunban }
# }
# Elseif ($did = 19) {
# if ($did(19).state == 1) { hadd -m data Blinfos on }
# Else { Hdel data blinfos }
# }
le .state renvoi (pas tjs, mais bref) 0 ou 1, donc tu peux directement ecrire :
# Elseif ($did = 9) hadd -m data Blop $did(9).state
# Elseif ($did = 8) hadd -m data Blunban $did(8).state
# Elseif ($did = 19) hadd -m data Blinfos $did(19).state
ce qui est legerement plus clair et simple... (j'ai vire les { } parce qu'elle ne sont pas obligatoire ici)
on remarque que pour le $did == 10, ca deviens moins interessant d'appliquer cette methode
Pour en revenir a l'alias blacklisted, il est vraiment pas performant, je prend le pire exemple expres :
imaginons un salon de 800 personnes, avec un fichier de black list vieux depuis pas ;al de temps, qui contient environ 700 lignes, on va dire que sur les 800 personnes, y'en a 16 qui sont ds le fichier, tu vas faire une boucle sur les 800 personnes, plus une boucle imbrique sur 700 lignes, et au final tu vas poses 32 (2*16, puisque +bb) ban, 16 kick ainsi qu'afficher 16 tips, aie aie aie, tu devrais revoir un peu tout ca, mettre des secu pour pas excess flood, pour pas afficher des Tips inutiles, et pour ca :
-regarde la command /filter, elle scannera le fichier pour toi en recherchant l'host du Nieme pseudo du salon
-si veux tient a utiliser les tip, plutot que d'en cree un nouveau pour chaque truc, edit le tips actuel
-regarde bien /filter, c'est tres puissant !
dans l'alias deldb tu apelles un alias error, j'ai pas vu l'alias ds le code, et il me semble que mirc utilise deja un $error donc pas conseille de l'apelle comme ca...
dans l'event on op, si on te reop comme ca pour le fun, tu relances entierement l'alias, tu devrais faire en sorte de detecter que c'est l'op quand tu rejoin le salon.
Voila, j'espere que tu vas modifie les trucs les plus importants.
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 14 nov. 2008 à 21:50
eu pour mdx perso moi j'vois pas de quoi tu parle quand me parle de trace alors j'suis aveugle.. car la j'aime bien comme c'est..
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 14 nov. 2008 à 21:39
la oui :D
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 14 nov. 2008 à 20:59
PosTich, mon commentaire te disait en gros de virer ta merde de mdx qui ne sert strictement à rien, qui prend non seulement de la place en mémoire mais qui alourdit également le temps d'exécution de ton dialog.
Peut-être que là c'est plus clair.
Je ne code plus de mIRC depuis un moment déjà, donc j'en ai un peu zappé les subtilités. Cependant mes commentaires n'étaient pas inutiles, mais puisque tu ne sais pas chercher par toi même, alors je vais chercher (ou plutôt rechercher dans mes archives) les solutions.
Pour virer tes traces moches des backgrounds de tes contrôles :
;Changement du fond du contrôle
dll mdx.dll SetColor <dialog> background <RGB>
;Changement du fond du texte du contrôle
dll \mdx.dll SetColor <dialog> text <RGB>
;Changement de la couleur du texte du contrôle
dll mdx.dll SetColor <dialog> textbg <RGB>
Dans ton While (%f <= $lines(data\bl.txt)) devient %lines $lines(data\bl.txt) | while (%f <= %lines)
Elseif ($did = 14) { hadd -m data cmdunBL $did(14) | if ($hget(data)) hsave data data\data.txt }
Elseif ($did = 16) { hadd -m data cmdlistbl $did(16) | if ($hget(data)) hsave data data\data.txt }
Elseif ($did = 18) { hadd -m data blraison $did(18) | if ($hget(data)) hsave data data\data.txt }
devientelseif (($did 14) || ($did 16) || ($did == 18)) {
hadd -m data cmdunBL $did($did) | if ($hget(data)) hsave data data\data.txt
}
Tu mets des dans tes conditions au lieu de
C'est bourré de fautes d'orthographe:
ligne 50 "Lorsque vous voulez Blacklisté"
ligne 146 "Vous n'avez rien selectionner dans la list, la supression ne peut ce faire." (3fautes en une phrase)
Enfin, on est obligé de relancer mIRC pour charger/Initialiser la htable, c'est pas cool.
Voilà, en espérant qu'il soit "utile", là, mon commentaire.
WorldDMT
Messages postés871Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 20121 14 nov. 2008 à 19:57
commentaire ça veu pas dire aide
on est libre de dire ce qu'on veut
si tu trouve nos commentaires inutile bah nous on trouve ton code inutile alors
:)
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 14 nov. 2008 à 19:45
1) quesque tu en sais que je connais pas du tout $regsubex ?
2) mon alias marche bien c'est pas marqué expert dans la source... c'est sur on peut toujours Optimiser..
3) quand je parlé de commentaires inutiles j'parlé pas de ceux de tofu,worlDMT,Wims.. mais de pingyan et uaip qui kiff la critique mais qui ne fait pas avancé, quand la critique est constructive j'suis d'accord..
bref (:
WorldDMT
Messages postés871Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 20121 14 nov. 2008 à 18:31
donc c'est ça ce que tu as compris de faire l'alias avec $ialchan().nick :S
tofu a dit pour le who c'est ce que tu dois mettre dans l'alias en utilisant l'ialchan
bon bref oublie le $ialchan c'est encore mieu puisque tu devra accompagné par une $regsubex et là je vois que ça va etre compliqué pour toi
mais essaye en tou cas /help $regsubex
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 14 nov. 2008 à 16:35
"ah le $ialchan(host,#salon,nb).nick je connaissais pas merci j'vais refaire l'alias ^^
( enfin un commentaire qui sert )"
En gros, un commentaire qui sert, c'est quand on te donne directement la réponse à un problème ?
Déjà, si tu avais posté ta source en suivant les règles du site, ça nous aurait économisé les 12 premiers commentaires.
Ensuite, quand on te signale que ton algo n'est pas optimisé au top, ou que tu utilises des ressources en trop (ça c'est mon opinion perso) soit tu ne réponds pas, soit tu rétorques en expliquant ton choix.
Ensuite les commentaires de tofu sont très intéressants, je trouve. (ça ne veut pas dire que les autres ne le sont pas).
Bref, j'avoue que celui-là était inutile par contre, mais je voulais (chieur que je suis) juste nuancer tes propos.
Je reste quand même têtu en voyant tous les fichiers que tu mets à dl pour une simple blacklist... (et tu n'as toujours pas corrigé la faute signalée par wims ^^).
Promis, le prochain commentaire que je laisse sera plus pertinent et construit :$
cs_tofu
Messages postés1726Date d'inscriptionvendredi 12 septembre 2003StatutMembreDernière intervention13 juin 20091 14 nov. 2008 à 08:13
le problème que pose l'utilisation de l'ial, c'est que cet identifieur n'est remplit que lorsqu'un "/who" a été réalité sur le salon entier si je me souviens bien.
De fait, si ce n'est pas fait manuellement, seront présent dans l'ial uniquement les adresses des gens étant entrés après toi sur le salon. (il me semble que lorsqu'une personne entre sur le salon alors qu'on y est déjà présent, là par contre le who est réalisé plus ou moins automatiquement enfin bref)
Du coup, quelque soit la situation, pour être sur d'avoir les infos, il faut forcer la mise à jour de l'ial à travers des /who ... Au final je ne sais pas quelle solution est là plus simple et surtout la moins couteuse en temps d'exécution.
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 14 nov. 2008 à 01:45
alias blacklisted {
var %f 1
while (%f <= $lines(data\bl.txt)) {
if ($read(data\bl.txt,%f) iswm $address($ialchan($read(data\bl.txt,%f),#,%f).nick,5)) {
Mode $chan +bb $read(data\bl.txt,%f) $address($ialchan($read(data\bl.txt,%f),#,%f).nick,2)
Kick $chan $ialchan($read(data\bl.txt,%f),#,%f).nick $replace($hget(data,blraison),<nick>,$nick,<chan>,$chan,<nicks>,$nick(#,0),<me>,$me)
if ($hget(data,blinfos) == on) noop $tip(Blacklist,- Blacklist -,Blacklisted Alerte : $nick ,5,icones\bl.ico)
}
Inc %f 1
}
}
j'ai fait ca sans success j'doit mal mis prendre avec le $ialchan j'sais pas.....
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 14 nov. 2008 à 01:24
ah le $ialchan(host,#salon,nb).nick je connaissais pas merci j'vais refaire l'alias ^^
( enfin un commentaire qui sert )
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 14 nov. 2008 à 01:21
qui ta parlé de chan 1 ? et chan 2 , la blacklist agit sur tout les salons mais je compte le faire pour que ca sois par chan..
WorldDMT
Messages postés871Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 20121 13 nov. 2008 à 20:22
mais j'ai oublié de te demandé là si tu met quelqun dans la blacklist sur chan1
si il entre sur chan2 il sera kick? esque ça sera normal?
WorldDMT
Messages postés871Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 20121 13 nov. 2008 à 18:13
pour l'alias blacklisted
le but c'est de kické tout ceux qui sont dans la liste blackliste
alors pas besoin de 2 while de cette maniere utilise plutot ta liste noir avec $ialchan().nick
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 13 nov. 2008 à 18:04
Déjà c'est pas DaPo qui a dit ça mais moi ^^
Et si tu avais lu correctement mon post tu aurais vu que :
- j'ai dit que je n'avais pas testé ton code (donc le problème ne vient pas de moi)
- je m'étais uniquement basé sur ton screen, donc au lieu de dire "chez moi ça fait pas ça", tu regardes le screen que tu as posté et tu verras (aucun rapport avec problèmes de compatibilité XP / Vista vu que ton screen est sous Vista)...
WorldDMT
Messages postés871Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 20121 13 nov. 2008 à 17:49
rien a y voir avec le OS
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 13 nov. 2008 à 13:33
DaPo à dit :
Salut.
Je peux pas tester ton code, je suis pas chez moi.
Cependant, en me basant sur le screen...
Pourquoi utiliser mdx ?
Pourquoi mettre une ListView si tu n'utilises qu'une colonne ? C'est complètement inutile et ça utilise des ressources pour rien. Idem pour la ToolBar.
Et si tu mets une couleur de fond à ton dialog, fais au moins pareil pour tes contrôles, parce-que les bandes grisâtres à chaque checkbox, c'est moche.
je répond : ba c'est bizzare moi j'ai pas ca, mais bon j'suis sosu vista donc peut etre sous xp ca donne un vieille effet..
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 13 nov. 2008 à 13:17
En addition avec ce qu'a dis tofu, test egalement tout ce qu'est capable de faire ton script, tout les conditions, il y a enormement d'erreur de logique ds ton code, mais c'est comprehensible, personne ne code pareil, par contre, a la ligne 159 (sur le site) tu as oublie un $ sur un $me, ce genre de chose devrait pas arriver.Je sais que tofu, tu avais fait un tuto sur cmt optimiser les codes, ca serait pas con de le resortir .
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 13 nov. 2008 à 13:15
Salut.
Je peux pas tester ton code, je suis pas chez moi.
Cependant, en me basant sur le screen...
Pourquoi utiliser mdx ?
Pourquoi mettre une ListView si tu n'utilises qu'une colonne ? C'est complètement inutile et ça utilise des ressources pour rien. Idem pour la ToolBar.
Et si tu mets une couleur de fond à ton dialog, fais au moins pareil pour tes contrôles, parce-que les bandes grisâtres à chaque checkbox, c'est moche.
Je comprends qu'utiliser mdx sert à rendre ton dialog "plus beau", mais là ce n'est pas du tout l'intérêt de la source, donc bon...
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 13 nov. 2008 à 10:36
(pingyan) la preuve que tu à pas testé ma blacklist elle fait ca aussi et tu peut déocher le unban, ce n'est pas un ban à vue...
pingyan
Messages postés29Date d'inscriptionmardi 22 janvier 2008StatutMembreDernière intervention 9 novembre 2010 13 nov. 2008 à 08:39
salut postich xD je te connais dis donc mdr
bon sinon vu la maniere dont c tourné j'aime pas trop.
car tout les addon de bl , il ban quand la personne est pas la. donc quand ça unban ça reban deriere !! et c moche apres sur le general !
ce qui serais cool, c une bl qui ban juste quand tu join le salon !!
cs_tofu
Messages postés1726Date d'inscriptionvendredi 12 septembre 2003StatutMembreDernière intervention13 juin 20091 13 nov. 2008 à 08:22
A mon sens il y a une faute de conception de ton algo.
Dans ton aliase "blacklisted", tu fais deux boucles imbriquées:
La première regarde chaque pseudonyme présent sur le salon
La seconde qui s'applique sur chaque pseudonyme, va vérifier qu'il n'est pas blacklisté (sur une expression quelconque de son hostname)
Cependant, cette imbrication n'est utile que pour un seul évènement: Quand tu devient opérateur du salon.
Sinon, lors d'un unban, d'un join ou même de l'input, il n'y a pas besoin de scanner tous les pseudos du salon étant donné que tu sais sur quel pseudo agir si besoin.
A mon sens, il vaudrait mieux garder uniquement la seconde boucle (celle qui scanne la blacklist) dans l'aliase blacklisted, et externaliser la boucle qui regarde l'ensemble des pseudos du salon aux seuls évênements qui en ont besoin.
Mine de rien, la complexité de ton algo passera de O(n²) en O(n) pour les évênements qui ne nécessitent pas de regarder tous les pseudos (ce qui n'est pas négligeable sur d'importants salons si la blacklist est importante également).
Je te dis ça parce que c'est ce que tu avais commencé à faire maladroitement avec l'évènement "join" en faisant un c/c de la seconde boucle uniquement.
Du coup, quelque soit l'évènement, tu aurais une aliase qui scanne ta blacklist, et a côté de cela les différences de traitement selon l'évènement seraient gérées dans le bloc de celui-ci (ce qui paraît plus logique)
Sinon en ce qui concerne les oublis de fichiers etc, le plus simple étant de tester dans une VM avant de poster. Au moins on est sur du fonctionnement sur une machine vierge et les possibles altérations dues à ce qui était déjà installé sur la machine de la personne ne peuvent pas être imputées à l'auteur.
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 12 nov. 2008 à 22:37
Ah oui non pardon, j'ai mal lu, dsl WorldDMT
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 12 nov. 2008 à 22:10
ah oué donc si quelqu'un Join un salon, si il est blacklisté j'vais avois une erreur comme quoi je ne peus pas le kicker. donc de faire if $me isop # j'n'est pas cette erreur..
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 12 nov. 2008 à 22:07
Lol... WorldDMT, ce qu'il aurait fallu lui dire, c'est qu'il est impossible d'etre operateur sur un on join, (ou nimporte quel autre mode), donc ca sert a rien de change le isop en @, ca reste completement inutile :)
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 12 nov. 2008 à 21:50
retrouve mieux *
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 12 nov. 2008 à 21:48
pour les @ au on join par habitude j'ai mis $me isop # , mais bon j'my retoure mieux comme ça ce n'est pas important.. pour l'alias blacklisted il marche bien aucun probléme.
WorldDMT
Messages postés871Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 20121 12 nov. 2008 à 21:31
bon quelque truc
je vois dans les event "if ($me isop #)" là tu remplace par un "@" dans le level pareil pour "if ($nick != $me)" tu remplace par "!" donc :
On *:Join:#:{
if ($me isop #) && ($nick !$me) && ($hget(data,BLactive) on) {
devient
On @!*:Join:#:{
if ($hget(data,BLactive) == on) {
aussi
On *:unban:#:{ if ($me isop #) && ($hget(data,blunban) on) && ($hget(data,BLactive) on) {
devient
On @*:unban:#:{ if (($hget(data,blunban)) && ($hget(data,BLactive)) == on) {
je pense que $address($nick,5) $ial($nick) et $addres($nick,2) $wildsite
alias blacklisted avec 2 while ça bug pas ça??
bon bref dejà ça ya encore plein de truc mais bon je vais voir demain je suis de passage là
@+ :)
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 12 nov. 2008 à 21:03
j'avais zapé bar.mdx et j'me suis appercu que j'avais oublié des icones -.-
WorldDMT
Messages postés871Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 20121 12 nov. 2008 à 20:57
chantier de commantaire* je voulais dire
WorldDMT
Messages postés871Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 20121 12 nov. 2008 à 20:56
et ça c'est quoi?
$mdx SetControlMDX 2,4,5 ToolBar flat nodivider list arrows wrap > dll\bars.mdx
ou est le bar.mdx!!
et là il y a un chantier a commentaire :/
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 12 nov. 2008 à 20:53
tu à quoi comme erreur ?
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 12 nov. 2008 à 20:51
chez moi mon code marche trés bien ^^
WorldDMT
Messages postés871Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 20121 12 nov. 2008 à 20:43
t'es sur d'avoir tout mis??
teste bien ton code avant de posté c'est le reglement que tu ne sui pas là :/
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 12 nov. 2008 à 20:36
voila j'ai rajouter la dll + l'alias que j'avais zapé ^^
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 12 nov. 2008 à 20:33
ah desolé j'ai oublié la dll et l'alias desolé ^^
WorldDMT
Messages postés871Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 20121 12 nov. 2008 à 20:30
salut
je pense que c'est pas dur de mettre le code ici!!
je pense que tu as oublié le MDX.dll ^^
et le $mdx ou est cette alias??
bref rien ne marche!!
cs_PosTiCh
Messages postés53Date d'inscriptionmercredi 12 novembre 2008StatutMembreDernière intervention24 novembre 2008 12 nov. 2008 à 19:02
d\l le zip :]
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 12 nov. 2008 à 18:48
Chouette encore un addon de black list certainement super innovateur...
En plus le code n'est meme pas visible directement, cmt on fait pour critiquer :( ?
20 nov. 2008 à 02:16
19 nov. 2008 à 15:43
ça a l'air de fonctioner
15 nov. 2008 à 19:56
Encore une fois, je me suis emmêlé les pinceaux d'un forum à l'autre.
Au temps pour moi.
(Je vais arrêter de poster quelques temps, je crois -_-)
15 nov. 2008 à 19:49
"$null n'est pas 0. mettre une variable à $null revient à la détruire ($null renvoit 1 si la variable existe, 0 sinon.)
Or une variable à 0 existe, et n'est donc pas $null."
$null n'est pas 0, ok
mettre une variable a $null reviens a la detruire, non et pour preuve :
alias demonstr {
var %a
;%a est locale et vaut $null, d'apres ce que tu dis, rien qu'en ecrivant //var %a, on detruit la variable ? ca n'a pas de sens
%a = $null
;la variable %a reste local, j'ai explicitement ecris le = $null...
;tjs d'apres toi, ici on detruirai donc la variable
%a = 5
;%a vaut 5 ici, et pourtant cette variable reste local, si elle avait ete detruite, le fait d'ecrire %a = l'aurait rendu globale, et pourtant elle est tjs local *normalement* (non teste mais bon)
}
($null renvoit 1 si la variable existe, 0 sinon.) la je t'avou que j'suis largue, $null renvoi 1 ou 0 ??
Or une variable à 0 existe, et n'est donc pas $null, tjs ok.
c'est bien beau, on sait tout les deux que :
if (%a) est vrai si %a est different de 0, de $false et de $null, d'ou mon optimisation, lui il stock des valeurs 'on' et il ecris :
if (... == on)
dans le cas contraire, il delete la valeur 'on' de la table, (la valeur deviens $null !), et vu qu'il compare tjs a 'on', la condition devient bien fausse, et c'est bien l'effet voulu.
maintenant, il pourrait tres bien ecrire if (...) puisque dans tout les cas, soit la valeur est 'on', (different de 0, $false, et $null) soit la valeur est $null, ecrire 1 au lieu de 'on' fait gagner un caractere, mais ca reviens au meme.En fait dans mon ancien post, je ne faisait que lui dire d'ecrire if (...) au lieu de if (... == on), c'est surement bcp plus clair a present.
15 nov. 2008 à 19:10
Je précise cependant que tu te trompes également en disant :
"Pareil qu'avec les valeur $null/0 ou 1 au lieu de on et off, ici :"
$null n'est pas 0. mettre une variable à $null revient à la détruire ($null renvoit 1 si la variable existe, 0 sinon.)
Or une variable à 0 existe, et n'est donc pas $null.
//var %a 1 | echo -a $iif(%a == $null,nul,pas nul) ;renvoie 'pas nul'
//var %a 0 | echo -a $iif(%a == $null,nul,pas nul) ;renvoie 'pas nul'
//echo -a $iif(%a == $null,nul,pas nul) ;renvoie 'nul' (en imaginant que %s n'a pas été créée précédemment)
Sinon, pour le $did($did), exact je n'avais pas vu que le mot d'avant (item de la htable) changeait, j'ai fait d'ailleurs d'autres fautes, en me relisant.
Bon, je me corrige donc :
Elseif ($devent == Edit) {
if ($did = 13) { hadd -m data cmdBL $did(13) | if ($hget(data)) hsave data data\data.txt }
Elseif ($did = 14) { hadd -m data cmdunBL $did(14) | if ($hget(data)) hsave data data\data.txt }
Elseif ($did = 16) { hadd -m data cmdlistbl $did(16) | if ($hget(data)) hsave data data\data.txt }
Elseif ($did = 18) { hadd -m data blraison $did(18) | if ($hget(data)) hsave data data\data.txt }
}
devientelseif (($devent edit) && (($did 13) || ($did == 14) || ($did == 16) || ($did == 18))) {
var %items cmdBL cmdunBL cmdlistbl blraison
hadd -m data $gettok(%items,$calc($did -12),32) $did($did) | if ($hget(data)) hsave data data\data.txt
}
Dites moi si je me suis trompé, mais je pense que c'est bon (de mémoire). Ca reste un peu lourd quand même mais ça montre pas mal la bonne utilisation des parenthèses dans uen condition, et on économise 2 lignes.
Bon voilà...
15 nov. 2008 à 17:20
Je reprend un truc de Uaip, qui reprend lui meme le code original :
elseif (($did 14) || ($did 16) || ($did == 18)) {
hadd -m data cmdunBL $did($did) | if ($hget(data)) hsave data data\data.txt
}
Donc deja, l'item de la table n'est pas le meme ds le code original selon le $did, donc mauvaise correction de Uaip la :p, on peut utilise un $replace en fonction de $did, ca fait un peu bourrin mais sa passe
Bon moi j'aurais utiliser $istok pour la condition, je trouve ca mieux, mais c'est pas ca qui me 'chagrine', ce que je trouve drole, c'est d'ecrire :
j'ajoute ds la table 'data'
si ya qqch ds la table data, je la sauvegarde
la condition est completement inutile, c'est comme dire "var %a 1 | if (%a 1) { }"
Bon sinon, niveau petit truc de merde, mais qui rende le code tjs meilleur :
un $exists renvois toujours $true ou $false, donc au lieu d'ecrire if ($exists() == $true) on peut directement ecrire if ($exists())
au lieu de stocker toute tes valeur de htable sur on ou off, utilise les valeur $null et 1, ca te permet, pareil, d'ecrire if ($hget()) au lieu du "== on"
if ($did 5) { .timer 1 0 dialog -x $dname | if ($me isop $active) && ($hget(data,blunban) on) && ($hget(data,BLactive) == on) bav $active | if ($hget(data)) hsave data data\data.txt }
je suis curieux de connaitre le but du timer ici
# Elseif ($did = 2) { addbl | did -i $dname 1 1 headertext Pseudo/Host Blacklisté : $lines(data\bl.txt) }
# Elseif ($did = 4) { delbl | did -i $dname 1 1 headertext Pseudo/Host Blacklisté : $lines(data\bl.txt) }
la, on remarque que tu fait pratiquement la meme chose, tu peux economiser une ligne en utilisant $iif :
Elseif ($istok(2.4,$did,46)) { $iif($did == 2,addbl,delbl) | did -i $dname 1 1 headertext Pseudo/Host Blacklisté : $lines(data\bl.txt) }
Pareil qu'avec les valeur $null/0 ou 1 au lieu de on et off, ici :
# Elseif ($did = 9) {
# if ($did(9).state == 1) { Hadd -m data Blop on }
# else { Hdel data BLop }
# }
# Elseif ($did = 8) {
# if ($did(8).state == 1) { hadd -m data Blunban on }
# Else { Hdel data blunban }
# }
# Elseif ($did = 19) {
# if ($did(19).state == 1) { hadd -m data Blinfos on }
# Else { Hdel data blinfos }
# }
le .state renvoi (pas tjs, mais bref) 0 ou 1, donc tu peux directement ecrire :
# Elseif ($did = 9) hadd -m data Blop $did(9).state
# Elseif ($did = 8) hadd -m data Blunban $did(8).state
# Elseif ($did = 19) hadd -m data Blinfos $did(19).state
ce qui est legerement plus clair et simple... (j'ai vire les { } parce qu'elle ne sont pas obligatoire ici)
on remarque que pour le $did == 10, ca deviens moins interessant d'appliquer cette methode
Pour en revenir a l'alias blacklisted, il est vraiment pas performant, je prend le pire exemple expres :
imaginons un salon de 800 personnes, avec un fichier de black list vieux depuis pas ;al de temps, qui contient environ 700 lignes, on va dire que sur les 800 personnes, y'en a 16 qui sont ds le fichier, tu vas faire une boucle sur les 800 personnes, plus une boucle imbrique sur 700 lignes, et au final tu vas poses 32 (2*16, puisque +bb) ban, 16 kick ainsi qu'afficher 16 tips, aie aie aie, tu devrais revoir un peu tout ca, mettre des secu pour pas excess flood, pour pas afficher des Tips inutiles, et pour ca :
-regarde la command /filter, elle scannera le fichier pour toi en recherchant l'host du Nieme pseudo du salon
-si veux tient a utiliser les tip, plutot que d'en cree un nouveau pour chaque truc, edit le tips actuel
-regarde bien /filter, c'est tres puissant !
dans l'alias deldb tu apelles un alias error, j'ai pas vu l'alias ds le code, et il me semble que mirc utilise deja un $error donc pas conseille de l'apelle comme ca...
dans l'event on op, si on te reop comme ca pour le fun, tu relances entierement l'alias, tu devrais faire en sorte de detecter que c'est l'op quand tu rejoin le salon.
Voila, j'espere que tu vas modifie les trucs les plus importants.
14 nov. 2008 à 21:50
14 nov. 2008 à 21:39
14 nov. 2008 à 20:59
Peut-être que là c'est plus clair.
Je ne code plus de mIRC depuis un moment déjà, donc j'en ai un peu zappé les subtilités. Cependant mes commentaires n'étaient pas inutiles, mais puisque tu ne sais pas chercher par toi même, alors je vais chercher (ou plutôt rechercher dans mes archives) les solutions.
Pour virer tes traces moches des backgrounds de tes contrôles :
;Changement du fond du contrôle
dll mdx.dll SetColor <dialog> background <RGB>
;Changement du fond du texte du contrôle
dll \mdx.dll SetColor <dialog> text <RGB>
;Changement de la couleur du texte du contrôle
dll mdx.dll SetColor <dialog> textbg <RGB>
Ensuite, question optimisation,
$iif((!$dialog(Bav)),dialog -m bav bav,dialog -v bav)) devient dialog $iif((!$dialog(Bav)),-m bav,dialog -v)) bav
Dans ton While (%f <= $lines(data\bl.txt)) devient %lines $lines(data\bl.txt) | while (%f <= %lines)
Elseif ($did = 14) { hadd -m data cmdunBL $did(14) | if ($hget(data)) hsave data data\data.txt }
Elseif ($did = 16) { hadd -m data cmdlistbl $did(16) | if ($hget(data)) hsave data data\data.txt }
Elseif ($did = 18) { hadd -m data blraison $did(18) | if ($hget(data)) hsave data data\data.txt }
devientelseif (($did 14) || ($did 16) || ($did == 18)) {
hadd -m data cmdunBL $did($did) | if ($hget(data)) hsave data data\data.txt
}
Tu mets des dans tes conditions au lieu de
C'est bourré de fautes d'orthographe:
ligne 50 "Lorsque vous voulez Blacklisté"
ligne 146 "Vous n'avez rien selectionner dans la list, la supression ne peut ce faire." (3fautes en une phrase)
Enfin, on est obligé de relancer mIRC pour charger/Initialiser la htable, c'est pas cool.
Voilà, en espérant qu'il soit "utile", là, mon commentaire.
14 nov. 2008 à 19:57
on est libre de dire ce qu'on veut
si tu trouve nos commentaires inutile bah nous on trouve ton code inutile alors
:)
14 nov. 2008 à 19:45
2) mon alias marche bien c'est pas marqué expert dans la source... c'est sur on peut toujours Optimiser..
3) quand je parlé de commentaires inutiles j'parlé pas de ceux de tofu,worlDMT,Wims.. mais de pingyan et uaip qui kiff la critique mais qui ne fait pas avancé, quand la critique est constructive j'suis d'accord..
bref (:
14 nov. 2008 à 18:31
tofu a dit pour le who c'est ce que tu dois mettre dans l'alias en utilisant l'ialchan
bon bref oublie le $ialchan c'est encore mieu puisque tu devra accompagné par une $regsubex et là je vois que ça va etre compliqué pour toi
mais essaye en tou cas /help $regsubex
14 nov. 2008 à 16:35
( enfin un commentaire qui sert )"
En gros, un commentaire qui sert, c'est quand on te donne directement la réponse à un problème ?
Déjà, si tu avais posté ta source en suivant les règles du site, ça nous aurait économisé les 12 premiers commentaires.
Ensuite, quand on te signale que ton algo n'est pas optimisé au top, ou que tu utilises des ressources en trop (ça c'est mon opinion perso) soit tu ne réponds pas, soit tu rétorques en expliquant ton choix.
Ensuite les commentaires de tofu sont très intéressants, je trouve. (ça ne veut pas dire que les autres ne le sont pas).
Bref, j'avoue que celui-là était inutile par contre, mais je voulais (chieur que je suis) juste nuancer tes propos.
Je reste quand même têtu en voyant tous les fichiers que tu mets à dl pour une simple blacklist... (et tu n'as toujours pas corrigé la faute signalée par wims ^^).
Promis, le prochain commentaire que je laisse sera plus pertinent et construit :$
14 nov. 2008 à 08:13
De fait, si ce n'est pas fait manuellement, seront présent dans l'ial uniquement les adresses des gens étant entrés après toi sur le salon. (il me semble que lorsqu'une personne entre sur le salon alors qu'on y est déjà présent, là par contre le who est réalisé plus ou moins automatiquement enfin bref)
Du coup, quelque soit la situation, pour être sur d'avoir les infos, il faut forcer la mise à jour de l'ial à travers des /who ... Au final je ne sais pas quelle solution est là plus simple et surtout la moins couteuse en temps d'exécution.
14 nov. 2008 à 01:45
var %f 1
while (%f <= $lines(data\bl.txt)) {
if ($read(data\bl.txt,%f) iswm $address($ialchan($read(data\bl.txt,%f),#,%f).nick,5)) {
Mode $chan +bb $read(data\bl.txt,%f) $address($ialchan($read(data\bl.txt,%f),#,%f).nick,2)
Kick $chan $ialchan($read(data\bl.txt,%f),#,%f).nick $replace($hget(data,blraison),<nick>,$nick,<chan>,$chan,<nicks>,$nick(#,0),<me>,$me)
if ($hget(data,blinfos) == on) noop $tip(Blacklist,- Blacklist -,Blacklisted Alerte : $nick ,5,icones\bl.ico)
}
Inc %f 1
}
}
j'ai fait ca sans success j'doit mal mis prendre avec le $ialchan j'sais pas.....
14 nov. 2008 à 01:24
( enfin un commentaire qui sert )
14 nov. 2008 à 01:21
13 nov. 2008 à 20:22
si il entre sur chan2 il sera kick? esque ça sera normal?
13 nov. 2008 à 18:13
le but c'est de kické tout ceux qui sont dans la liste blackliste
alors pas besoin de 2 while de cette maniere utilise plutot ta liste noir avec $ialchan().nick
13 nov. 2008 à 18:04
Et si tu avais lu correctement mon post tu aurais vu que :
- j'ai dit que je n'avais pas testé ton code (donc le problème ne vient pas de moi)
- je m'étais uniquement basé sur ton screen, donc au lieu de dire "chez moi ça fait pas ça", tu regardes le screen que tu as posté et tu verras (aucun rapport avec problèmes de compatibilité XP / Vista vu que ton screen est sous Vista)...
13 nov. 2008 à 17:49
13 nov. 2008 à 13:33
Salut.
Je peux pas tester ton code, je suis pas chez moi.
Cependant, en me basant sur le screen...
Pourquoi utiliser mdx ?
Pourquoi mettre une ListView si tu n'utilises qu'une colonne ? C'est complètement inutile et ça utilise des ressources pour rien. Idem pour la ToolBar.
Et si tu mets une couleur de fond à ton dialog, fais au moins pareil pour tes contrôles, parce-que les bandes grisâtres à chaque checkbox, c'est moche.
je répond : ba c'est bizzare moi j'ai pas ca, mais bon j'suis sosu vista donc peut etre sous xp ca donne un vieille effet..
13 nov. 2008 à 13:17
13 nov. 2008 à 13:15
Je peux pas tester ton code, je suis pas chez moi.
Cependant, en me basant sur le screen...
Pourquoi utiliser mdx ?
Pourquoi mettre une ListView si tu n'utilises qu'une colonne ? C'est complètement inutile et ça utilise des ressources pour rien. Idem pour la ToolBar.
Et si tu mets une couleur de fond à ton dialog, fais au moins pareil pour tes contrôles, parce-que les bandes grisâtres à chaque checkbox, c'est moche.
Je comprends qu'utiliser mdx sert à rendre ton dialog "plus beau", mais là ce n'est pas du tout l'intérêt de la source, donc bon...
13 nov. 2008 à 10:36
13 nov. 2008 à 08:39
bon sinon vu la maniere dont c tourné j'aime pas trop.
car tout les addon de bl , il ban quand la personne est pas la. donc quand ça unban ça reban deriere !! et c moche apres sur le general !
ce qui serais cool, c une bl qui ban juste quand tu join le salon !!
13 nov. 2008 à 08:22
Dans ton aliase "blacklisted", tu fais deux boucles imbriquées:
La première regarde chaque pseudonyme présent sur le salon
La seconde qui s'applique sur chaque pseudonyme, va vérifier qu'il n'est pas blacklisté (sur une expression quelconque de son hostname)
Cependant, cette imbrication n'est utile que pour un seul évènement: Quand tu devient opérateur du salon.
Sinon, lors d'un unban, d'un join ou même de l'input, il n'y a pas besoin de scanner tous les pseudos du salon étant donné que tu sais sur quel pseudo agir si besoin.
A mon sens, il vaudrait mieux garder uniquement la seconde boucle (celle qui scanne la blacklist) dans l'aliase blacklisted, et externaliser la boucle qui regarde l'ensemble des pseudos du salon aux seuls évênements qui en ont besoin.
Mine de rien, la complexité de ton algo passera de O(n²) en O(n) pour les évênements qui ne nécessitent pas de regarder tous les pseudos (ce qui n'est pas négligeable sur d'importants salons si la blacklist est importante également).
Je te dis ça parce que c'est ce que tu avais commencé à faire maladroitement avec l'évènement "join" en faisant un c/c de la seconde boucle uniquement.
Du coup, quelque soit l'évènement, tu aurais une aliase qui scanne ta blacklist, et a côté de cela les différences de traitement selon l'évènement seraient gérées dans le bloc de celui-ci (ce qui paraît plus logique)
Sinon en ce qui concerne les oublis de fichiers etc, le plus simple étant de tester dans une VM avant de poster. Au moins on est sur du fonctionnement sur une machine vierge et les possibles altérations dues à ce qui était déjà installé sur la machine de la personne ne peuvent pas être imputées à l'auteur.
12 nov. 2008 à 22:37
12 nov. 2008 à 22:10
12 nov. 2008 à 22:07
12 nov. 2008 à 21:50
12 nov. 2008 à 21:48
12 nov. 2008 à 21:31
je vois dans les event "if ($me isop #)" là tu remplace par un "@" dans le level pareil pour "if ($nick != $me)" tu remplace par "!" donc :
On *:Join:#:{
if ($me isop #) && ($nick !$me) && ($hget(data,BLactive) on) {
devient
On @!*:Join:#:{
if ($hget(data,BLactive) == on) {
aussi
On *:unban:#:{ if ($me isop #) && ($hget(data,blunban) on) && ($hget(data,BLactive) on) {
devient
On @*:unban:#:{ if (($hget(data,blunban)) && ($hget(data,BLactive)) == on) {
je pense que $address($nick,5) $ial($nick) et $addres($nick,2) $wildsite
alias blacklisted avec 2 while ça bug pas ça??
bon bref dejà ça ya encore plein de truc mais bon je vais voir demain je suis de passage là
@+ :)
12 nov. 2008 à 21:03
12 nov. 2008 à 20:57
12 nov. 2008 à 20:56
$mdx SetControlMDX 2,4,5 ToolBar flat nodivider list arrows wrap > dll\bars.mdx
ou est le bar.mdx!!
et là il y a un chantier a commentaire :/
12 nov. 2008 à 20:53
12 nov. 2008 à 20:51
12 nov. 2008 à 20:43
teste bien ton code avant de posté c'est le reglement que tu ne sui pas là :/
12 nov. 2008 à 20:36
12 nov. 2008 à 20:33
12 nov. 2008 à 20:30
je pense que c'est pas dur de mettre le code ici!!
je pense que tu as oublié le MDX.dll ^^
et le $mdx ou est cette alias??
bref rien ne marche!!
12 nov. 2008 à 19:02
12 nov. 2008 à 18:48
En plus le code n'est meme pas visible directement, cmt on fait pour critiquer :( ?
Bonne conclusion, j'aime bien :)