cs_YkS
Messages postés25Date d'inscriptiondimanche 12 juin 2005StatutMembreDernière intervention 6 avril 2008
-
3 mai 2007 à 20:11
cs_YkS
Messages postés25Date d'inscriptiondimanche 12 juin 2005StatutMembreDernière intervention 6 avril 2008
-
4 mai 2007 à 18:46
Bonjour à tous,
Je viens demander de l'aide sur le forum en rapport à la commande /write.
En effet j'ai codé un bot mIRC que j'étoffe au fur et à mesure depuis maintenant plus de deux ans, et j'ai récemment voulu créer dans le cadre d'un autre script, un petit script de slap, je m'explique:
Ce script est censé lorsqu'une personne tape une commande, mettre son nick dans un fichier .txt, lorsque plusieurs personnes ont tapé cette commande, que les nicks se sont donc inscrit dans le .txt les uns en dessous des autres, et qu'une de ces personnes tapes: !go, slaper toutes les personnes de ce .txt à l'exception de la personne ayant tapé !go (ça n'est pas d'une importance capitale, mais c'est une des conditions que je me suis imposé afin de rendre le script plus intéréssant à coder)
alias slapdispos {
if ($1) {
var %i 1
set %nbperf $lines(dispos-v2\slaps.txt) if ((%nbperf 0) || (%nbperf $null)) {
msg $chan Il n'y a personne à slaper, car aucune disponibilité n'a été rentrée.
halt
}
while (%i <= %nbperf) {
describe $chan demande à $read(dispos-v2\slaps.txt,%i) de se magner et de ramener son cul sur vt fastement !
inc %i
}
}
}
Ce !go, pour réaliser la contrainte que je me suis imposé, efface donc temporairement le pseudo de la personne dans le .txt, slap les pseudos restants sur le .txt, puis réinscrit le nick de la personne dans le .txt de façon à ce que cette personne soit slappée si jamais quelqu'un d'autre décidait de taper la commande...
Mais voilà le problème: Lorsque la personne tape !go son pseudo est éffacée et réécrit, mais à la dernière ligne du .txt, et non pas à la ligne où il était à l'origine, donc si c'est le dernier pseudo, ça va, mais sinon, c'est pas bon... Et j'aurais besoin que le /write réécrive le nick à la même place qu'il était initialement, car ce script fonctionne en binomme avec un 2ème .txt et du coup ça bug...
Pour résumer: Comment faire pour éffacer une ligne d'un .txt, puis pouvoir la réécrire exactement à la même place juste après ?
Contrainte: Eviter si possible les solutions ne rentrant plus dans le cadre du /write et du .txt
RCA ArKanis
Messages postés1287Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention21 février 2009 4 mai 2007 à 11:39
Ca serait plus simple pour toi de faire ton alias slapdispos comme ça :
alias slapdispos {
if (!$1) return
var %i = 1, %nbperf = $lines(dispos-v2\slaps.txt)
if (!%nbperf) {
msg $chan Il n'y a personne à slaper, car aucune disponibilité n'a été rentrée.
return
}
while (%i <= %nbperf) {
if ($read(dispos-v2\slaps.txt,%i) != $2) describe $1 demande à $v1 de se magner et de ramener son cul sur vt fastement !
inc %i
}
}
RCA ArKanis
Messages postés1287Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention21 février 2009 4 mai 2007 à 14:24
dans : if ($mot1 != $mot 2) ...
si le if est vérifié, alors $v1 vaudra $mot1 et $v2 $mot2
c'est comme $ifmatch, si tu connais, sauf que là tu choisis quel partie utiliser
dans ton cas, ça me permet de ne pas réutiliser $read(dispos-v2\slaps.txt,%i) (qui est assez long)
L'aide de mIRC donne ça :
$v1 & $v2
Returns the first and second parameters of an if-then-else comparison. So, in the case of this comparison:
if (text isin sometext) { ... }
$v1 will return "text" and $v2 will return "sometext".
Ma méthode consiste à envoyer le describe si le nick ne correspond pas à celui qui a tapé la commande, ça évite de le supprimer de la liste pour le remettre ensuite
C'est juste le if ($read(dispos-v2\slaps.txt,%i) != $2) qui permet ça
cs_YkS
Messages postés25Date d'inscriptiondimanche 12 juin 2005StatutMembreDernière intervention 6 avril 2008 4 mai 2007 à 14:14
Bah écoutez merci beaucoup, c'est nikel, j'ai simplifié mon code grâce à l'alias d'ArKanis et ça marche impec, j'aimerais seulement que tu me décrives la partie du script qui permet de ne pas slapper la personne qui dit !go parceque j'ai regardé un peu $v1 je connais pas du tout (je suis débutant hein :s) et j'avou que je n'en ai pas trop compris l'utilité.
Quant à wims merci beaucoup, ça va me servir pour une autre partie de mon script qui n'est pas simplifiable par la méthode d'ArKanis, donc encore une fois un grand merci.
Je viens pas souvent sur le forum, mais en tout cas à chaque fois je suis super bien reçu, et il est rare que je ne trouve pas réponse à mon problème. Merci :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_YkS
Messages postés25Date d'inscriptiondimanche 12 juin 2005StatutMembreDernière intervention 6 avril 2008 4 mai 2007 à 16:37
Ah ok j'pense avoir compris, j'avais effectivement cherché dans l'mIRC help, et j'avais compris le fonctionnement, mais j'en voyais pas du tout l'utilité, surtout pour ce que je voulais faire, j'avais pas compris que tu l'avais utilisé par un simple souci de simplification du code, c'est là où on reconnait les programmeurs aguéris des débutants ^^
Par contre j'dois avouer que la fin de ton alias me chiffone, enfin même si j'ai compris comment t'as fait, j'aurais pas eu les reflexes de faire comme t'as fait, sans doute par manque d'experience je sais pas.. J'ai pas bien compris l'utilité des $1 et $2... Perso j'aurais fait (en gardant le reste du code comme tu l'as fait):
if ($read(dispos-v2\slaps.txt,%i) != $nick) describe $chan demande à $v1 de se magner et de ramener son cul sur vt fastement !
inc %i
}
}
et mon if :
if ($1 == !go) slapdispos $chan $nick
Ca devrait fonctionner aussi nan ? Ou esque je devrais faire comme toi à l'identique ? Désolé pour toutes ces questions, mais j'aime bien essayer d'comprendre tout le code plutôt que de recopier bêtement, ça m'évitera de venir reposer les mêmes questions à l'avenir.
RCA ArKanis
Messages postés1287Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention21 février 2009 4 mai 2007 à 17:24
ben $1 est ton premier argument et $2 ton 2e
quand tu appelles l'alias slapdispos, tu mets derrière $chan et $nick (slapdispos $chan $nick)
$chan et $nick ne représentant qu'un mot chacun, $1 serait donc $chan et $2 $nick
Je sais pas si avec ta méthode il conserve $nick et $chan de l'évènement à l'alias mais je pense que oui
Après, y'a pas de "meilleure", à toi de prendre ce que tu préfères
Avec ma méthode, si jamais tu veux le faire manuellement, pour expérimenter par exemple, il te suffit simplement de taper /slapdispos #TonSalon UnNick
cs_YkS
Messages postés25Date d'inscriptiondimanche 12 juin 2005StatutMembreDernière intervention 6 avril 2008 4 mai 2007 à 18:46
Ouais ouais j'ai testé ça fonctionne bien avec ma méthode.
Et j'avais bien compris pour les $1 et $2 c'est juste que perso j'aurais pas pensé à mettre ça, pour moi $nick et $chan sont plus instinctifs pour faire ça.
J'ai voulu éditer mon post pour dire que ça fonctionnait correctement mais apparemment on peut pas sur ce forum..