mIRC-Mass o_O

03/24/2005 22:20 x]vIrus[x#1
Als ich mich gestern aufgeregt habe l messages ( chanlev ) etc einzugeben und dass das standart mirc deop/op/devoice/voice nur 4 nicks oder so gleichzeitig macht habe ich mir kurz folgendes script geschrieben.
Es ist ein einfaches script, also meinermeinung nach sollte es jeder verstehen der mit msl vertaut ist.
wie man schon an "menu nicklist {" erkennen kann handelt es sich um ein script, welches man ins remote kopieren muss, dass es funktioniert. gleichzeitig sieht man dass man ein neues menu in der nick liste hinzufügen will ( die liste mit den vielen namen auf der rechten seite eines channels )
die theorie des menus ist einfach wenn wir jetzt z.B.
--
Control
.test1
.test2
Control1
.test3
..test4
--
haben dann ist in der nicklist ein neuer eintrag mit Control und control1, das erstgenannte hat 2 untermenus ( test1 udn test2 ) und control1 hat nur 1 untermenu welches jedoch noch ein untermenu hat ^^ ( test3->test4 ) wenn wir jetzt hinter test4 ":quit" schreiben würden, dann würde sich mirc beenden wenn man test4 anklicken würde. nun zum script
menu nicklist {
Control
.L/Q-Flags
..+
...+ao ( adds auto-op ):.msg $botserv($chan) chanlev $chan $1 +ao
;//mit diesem befehl schreiben wir an $botserv ( L oder Q ) die autoop message, ( $botserv ( alias) wird unten erklärt\;
;//hierbei folgenden menus wie o.g.\;
...+vg ( adds auto-voice ):.msg $botserv($chan) chanlev $chan $1 +vg
...+m ( adds master-flag ):.msg $botserv($chan) chanlev $chan $1 +m
...+n ( adds owner-flag ):.msg $botserv($chan) chanlev $chan $1 +n
...+mn ( adds master&owner-flag ):.msg $botserv($chan) chanlev $chan $1 +mn
...+amo ( adds auto-op&master-flag ):.msg $botserv($chan) chanlev $chan $1 +amo
...+amno ( adds auto-op&master&owner-flag ):.msg $botserv($chan) chanlev $chan $1 +amno
;//das minus bewirt, dass man in einem menu ein strich zieht von links nach rechts\;
..-
;//hier nehmen wir $chr(45) anstatt minus, da man ja mit - ein strich zieht ^^ den $chr wert bekommt man indem man $asc(-) macht ( z.B. //echo -a $asc(-) in einem channel eingeben )\;
..$chr(45)
...$chr(45) $+ ao ( removes auto-op ):.msg $botserv($chan) chanlev $chan $1 -ao
...$chr(45) $+ vg ( removes auto-voice ):.msg $botserv($chan) chanlev $chan $1 -vg
...$chr(45) $+ m ( removes master-flag ):.msg $botserv($chan) chanlev $chan $1 -m
...$chr(45) $+ n ( removes owner-flag ):.msg $botserv($chan) chanlev $chan $1 -n
...$chr(45) $+ mn ( removes master&owner-flag ):.msg $botserv($chan) chanlev $chan $1 -mn
...$chr(45) $+ amo ( removes auto-op&master-flag ):.msg $botserv($chan) chanlev $chan $1 -amo
...$chr(45) $+ amno ( removes auto-op&master&owner-flag ):.msg $botserv($chan) chanlev $chan $1 -amno
...$chr(45) $+ all ( removes all flags (amnovg) ):.msg $botserv($chan) chanlev $chan $1 -amnovg
..-
..Q-only
...+
....+t (user can set topic):.msg $botserv($chan) chanlev $chan $1 +t
....+b (ban):.msg $botserv($chan) chanlev $chan $1 +b
...-
...$chr(45)
....-t (user cant set topic):.msg $botserv($chan) chanlev $chan $1 -t
....-b (unban):.msg $botserv($chan) chanlev $chan $1 -b
;//nun zu den massen ^^\;
.Op:{
;//hier nehmen wir erstmal eine eckige klammer auf damit mirc weiss dass sich der befehl den wir ausführen wollen über mehrere zeilen geht\;
var %sdfwea = 1
;// der anfang ;F\;
var %dafl = $snick(#,0)
;// $snick(#,0) zeigt die zahl an der angeklickten nicks in einem channel \;
var %asffa = $ceil($calc( %dafl / 6 ))
;//das mit dem $ceil einfach ignorieren, ich war bisher zu faul um es zu löschen, es hat in diesem script keine funktion mehr ^^\;
;//wir setzen in die variabeln die verschiedenen werde ein ( var %blubb = 1 ) setzt in die variavle %blubb 1 ein, wenn das script jedoch ausgeführt wird, ist %blubb $null ( nicht da )\;
:lop1
;//lop1 bis 4 auch einfach ignorieren ( zu faul zum löschen^^ )\;
while ( %sdfwea <= %dafl ) {
;//nun kommen wir zur while^^ also übersetzen wir mal;
solange %sdfwea(aktuelle zahl) kleiner oder gleichgroß wie %dafl( die summe der nicks die selektiert wurden ) führe folgendes aus({)&#092;;
mode # +oooooo [ [ &#036;+(&#036; &#036;+ %sdfwea) ] ] [ [ &#036;+(&#036;chr(36) &#036;+ &#036;calc( %sdfwea + 1 )) ] ] [ [ &#036;+(&#036; &#036;+ &#036;calc( %sdfwea + 2 )) ] ] [ [ &#036;+(&#036; &#036;+ &#036;calc( %sdfwea + 3 )) ] ] [ [ &#036;+(&#036; &#036;+ &#036;calc( %sdfwea + 4 )) ] ] [ [ &#036;+(&#036; &#036;+ &#036;calc( %sdfwea + 5 )) ] ]
;//eine kompliziert aussehende zeile welche ein sehr einfaches prinzip hat ^^ &#036;1 ist im nicklist menu der erste nick, den man anklickt "[ [ &#036;+(&#036; &#036;+ %sdfwea) ] ]" hier sieht man evaluations brackets ( [ [ ] ] ) um das ergebnis nochmal abzurufen ( wenn z.B. in %ip &#036;ip stehen würde dann müsste man //echo -a [ [ %ip ] ] machen um seine ip zu bekommen und nicht &#036;ip ) &#036;+(&#036; &#036;+ %sdfwea) ergibt &#036;1 also der erst selektierte nick, jedoch da man das &#036;+( benutzt hat brauch tman noch die [[]] teile ^^, irgendwie isses lang zum erklärn O_o ich hoff das liest sich jmd durch ^^. also nun weiter als nächstes habe ich [ [ &#036;+(&#036;chr(36) &#036;+ &#036;calc( %sdfwea + 1 )) ] ] genommen &#036;calc ist wie ein taschnrechner mit dem rechne ich %sdfwea und 1 zusammen dann kommt aus der &#036;+() funktion &#036;2 heraus mir den [[]] ist das der 2. selektierte nick ^^ und das geht so weiter bis &#036;6 da +oooooo ^^&#092;&#092;;
;// erstma ne pause machen und das obrige nochmal durchlesen falls mans nich verstanden hat bis hier her ^^&#092;&#092;;
inc %sdfwea 6
;//hier fügen wir der variabel %sdfwea 6 hinzu damit wir 7 bekommen ( inc steht für increase )&#092;&#092;;
}
;//while ende, wenn man mehr als 6 nicks angeklickt hat, dann gehts nochmal von vorne los nur dass die variabel jetzt 7 ist, gehts bei &#036;7 weiter ^^&#092;&#092;;
}
;//das alles nochmal mit deop devoice und voice&#092;&#092;;
.Deop:{
var %sdfwea = 1
var %dafl = &#036;snick(#,0)
var %asffa = &#036;ceil(&#036;calc( %dafl / 6 ))
while ( %sdfwea <= %dafl ) { mode # -oooooo [ [ &#036;+(&#036; &#036;+ %sdfwea) ] ] [ [ &#036;+(&#036;chr(36) &#036;+ &#036;calc( %sdfwea + 1 )) ] ] [ [ &#036;+(&#036; &#036;+ &#036;calc( %sdfwea + 2 )) ] ] [ [ &#036;+(&#036; &#036;+ &#036;calc( %sdfwea + 3 )) ] ] [ [ &#036;+(&#036; &#036;+ &#036;calc( %sdfwea + 4 )) ] ] [ [ &#036;+(&#036; &#036;+ &#036;calc( %sdfwea + 5 )) ] ] | inc %sdfwea 6 }
}
.Voice:{
var %sdfwea = 1
var %dafl = &#036;snick(#,0)
var %asffa = &#036;ceil(&#036;calc( %dafl / 6 ))
while ( %sdfwea <= %dafl ) { mode # +vvvvvv [ [ &#036;+(&#036; &#036;+ %sdfwea) ] ] [ [ &#036;+(&#036;chr(36) &#036;+ &#036;calc( %sdfwea + 1 )) ] ] [ [ &#036;+(&#036; &#036;+ &#036;calc( %sdfwea + 2 )) ] ] [ [ &#036;+(&#036; &#036;+ &#036;calc( %sdfwea + 3 )) ] ] [ [ &#036;+(&#036; &#036;+ &#036;calc( %sdfwea + 4 )) ] ] [ [ &#036;+(&#036; &#036;+ &#036;calc( %sdfwea + 5 )) ] ] | inc %sdfwea 6 }
}
.Devoice:{
var %sdfwea = 1
var %dafl = &#036;snick(#,0)
var %asffa = &#036;ceil(&#036;calc( %dafl / 6 ))
;//die while wie oben erklärt bnur in eine zeile gefasst^^&#092;&#092;;
while ( %sdfwea <= %dafl ) { mode # -vvvvvv [ [ &#036;+(&#036; &#036;+ %sdfwea) ] ] [ [ &#036;+(&#036;chr(36) &#036;+ &#036;calc( %sdfwea + 1 )) ] ] [ [ &#036;+(&#036; &#036;+ &#036;calc( %sdfwea + 2 )) ] ] [ [ &#036;+(&#036; &#036;+ &#036;calc( %sdfwea + 3 )) ] ] [ [ &#036;+(&#036; &#036;+ &#036;calc( %sdfwea + 4 )) ] ] [ [ &#036;+(&#036; &#036;+ &#036;calc( %sdfwea + 5 )) ] ] | inc %sdfwea 6 }
}
}
;//hier noch ein kleines script für &#036;botserv. die Theorie: man speichert bei einem join von sich selbst oder den bots in eine ini ob l q oder kein bot da ist&#092;&#092;;
on *:join:*:#:{ if ( &#036;nick == &#036;me ) || ( &#036;nick == L ) || ( &#036;nick == Q ) { .timer 1 1 botservchecke }
;//hier der event on join ( wenn jemand joint ) * ( nick egal ) # ( channel egal ) { wenn(if) (der nick ich L oder Q ist ) { botservchecken ( dass ist der alias (farbe grün unten) )&#092;&#092;;
;//ich abe gerade keine lust mehr zum erklären^^ ich update das vllt ma noch^^ das wichtigste an dem tutorial war eh o.g.&#092;&#092;;

alias botservini { return &#036;shortfn(&#036;+(&#036;mircdirstuff&#092;,&#0 36;network,.Botserv.ini)) }
alias botserv { return &#036;readini(&#036;+(&#036;botservini),&#036;1,&# 036;1) }
alias botservchecken {
if ( !&#036;isdir(&#036;mircdirstuff ) { mkdir stuff }
if ( Q ison &#036;1 ) {
writeini -n &#036;botservini &#036;1 Q 1
writeini -n &#036;botservini &#036;1 L 0
writeini -n &#036;botservini &#036;1 &#036;1 Q
}
if ( L ison &#036;1 ) {
writeini -n &#036;botservini &#036;1 Q 0
writeini -n &#036;botservini &#036;1 L 1
writeini -n &#036;botservini &#036;1 &#036;1 L
}
if ( L !ison &#036;1 ) && ( Q !ison &#036;1 ) {
writeini -n &#036;botservini &#036;1 Q 0
writeini -n &#036;botservini &#036;1 L 0
writeini -n &#036;botservini &#036;1 &#036;1 none
}
}
script by x]vIrus[x

ist vielleicht gut für msl script anfänger und für alle die nicht öfters die nicks anklicken will und zu faul ist es selbst zu schreiben ^^
04/19/2005 16:41 termi#2
Schön geschrieben :D
Blos diese Massmodes könnte man etwas optimieren... *fg*

Bei gelegnheit geb ich mal meine preis.
04/19/2005 16:51 termi#3
Code:
;;© by Termi

raw 352&#58;*&#58; if &#40;%args&#41; { haltdef }
raw 315&#58;*&#58; if &#40;%args&#41; { /matchmode %args | haltdef }
raw 354&#58;*&#58; if &#40;%args || %args2&#41; { haltdef }

alias mmode { /set -u4 %args &#036;1- | if &#40;&#036;chan&#40;&#036;1&#41;.ial&#41; { /matchmode %args } | else { .ial on | /who &#036;1 } }

alias matchmode {
 set %x 1 | set %y 0 | set %z 0 | set %a 1 | set %ab 0 set %mass &#036;null
 while &#40;%x &#60;= &#036;ialchan&#40;&#036;2,&#036;1,0&#41;&#41; {
  if &#40;&#40;&#036;gettok&#40;&#036;ialchan&#40;&#036;2,&#036;1,%x&#41;,1,33&#41; != &#036;me&#41; && &#40;&#036;gettok&#40;&#036;ialchan&#40;&#036;2,&#036;1,%x&#41;,1,33&#41; &#036;replace&#40;&#036;3,+,!,-,&#036;null&#41; &#036;+ &#036;replace&#40;&#036;4,o,isop,v,isvoice&#41; &#036;1&#41; && &#40;&#036;gettok&#40;&#036;ialchan&#40;&#036;2,&#036;1,%x&#41;,1,33&#41; != L&#41; && &#40;&#036;gettok&#40;&#036;ialchan&#40;&#036;2,&#036;1,%x&#41;,1,33&#41; != Q&#41;&#41; {
   set %mass &#036;addtok&#40;%mass,&#036;gettok&#40;&#036;ialchan&#40;&#036;2,&#036;1,%x&#41;,1,33&#41;,44&#41; | %y = %y + 1
  }
  if &#40;&#40;%y == &#036;modespl&#41; || &#40;%x == &#036;ialchan&#40;&#036;2,&#036;1,0&#41;&#41;&#41; {
   .timer -m 1 %z mode &#036;1 &#036;3 &#036;+ &#036;str&#40;&#036;4,&#036;modespl&#41; &#036;replace&#40;&#036;gettok&#40;%mass,1- &#036;+ &#036;modespl,44&#41;,&#036;chr&#40;44&#41;,&#036;chr&#40;32&#41;&#41;
   while &#40;%a &#60;= %y&#41; { set %mass &#036;remtok&#40;%mass,&#036;gettok&#40;%mass,%a,44&#41;,1,44&#41; | inc %a }
   inc %ab 1 
   %a = 0 | %y = 0 
   if &#40;%ab == 3 || %x == &#036;ialchan&#40;&#036;2,&#036;1,0&#41;&#41; {
    %z = %z + 750
    %ab = 0
   }
  }
  inc %x 1
 }
}
So hiers mal meins,
es ist wenn ich mich nicht irre auch möglich massmodes nur auf bestimmte masks anzuwenden :D

Pro 750 ms werden 3 cmds ausgeführt danach wird eine Pause eingelegt.

Syntax: /mmode #chan *@* - o

nur so als Beispiel....

Es wird automatisch die Chanliste mit den User geupdated damit immer die neusten Infos zurhand liegen, was aber im zweifelsfall ein paar Sekunden dauern kann.
04/19/2005 23:22 x]vIrus[x#4
Quote:
Originally posted by termi@Apr 19 2005, 16:41
Schön geschrieben :D
Blos diese Massmodes könnte man etwas optimieren... *fg*

Bei gelegnheit geb ich mal meine preis.
öü mir gefallen se :)

/edit: juhu endlich auch ma jemand da mit dem man sich unterhalten kann :)
04/19/2005 23:41 termi#5
wir können uns ja mal unterhalten für nen epvp.de Scriptsammlung ,)

Habe schon SEHR viel mit msl gemacht ca 3 Jahre schon...
von einfachen Sachen bis PicWins etc alles dabei.
04/20/2005 17:27 x]vIrus[x#6
bin zZt dabei eine scripting crew zu gründen ( anfang )
die hp is atm [Only registered and activated users can see links. Click Here To Register...] ^^
is halt noch net fertig :P ( muss noch sehr viel getan werden )
wenn du lust / zeit hast ^^ gründer sind bis jetzt olzi und ich chan ist #cx2 @ qnet
leider geht das mit der hp atm nich so schnell voran, da ich zZt prüfungen und so hab >,<


/edit

**[ /whois termi ] ????????????????????????????
****** : ? Address : [Only registered and activated users can see links. Click Here To Register...]
****** : ? Name : terminat
****** : ? Channels : @#caf @#claude @#bR4iNd3a7h #codernet.org @#toom
****** : ? Server : *.quakenet.org [ QuakeNet IRC Server ]
****** : ? Auth : insane|Termi
*[ End ] ?????????????????????????????????

bist du daS?
04/20/2005 21:07 termi#7
yes thats me
04/21/2005 14:01 Lowfyr#8
ach #cx2 war dein channel viri, wusst ichs doch

der chan is nervig wenn man die notification bubbles anhat *grml*
04/22/2005 16:05 x]vIrus[x#9
notification bubbles? ^^
04/25/2005 23:55 termi#10
ja was ganz feines :D
03/21/2006 10:36 aidas2004#11
neue Version des hehe von mIRC haben ihn bereits :D
03/31/2006 11:24 KoyTheOne#12
hat wer bot mein bocknet zu maintainen
edit: hat wer bock mein botnet zu maintainen :rolleyes: