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({)\;
mode # +oooooo [ [ $+($ $+ %sdfwea) ] ] [ [ $+($chr(36) $+ $calc( %sdfwea + 1 )) ] ] [ [ $+($ $+ $calc( %sdfwea + 2 )) ] ] [ [ $+($ $+ $calc( %sdfwea + 3 )) ] ] [ [ $+($ $+ $calc( %sdfwea + 4 )) ] ] [ [ $+($ $+ $calc( %sdfwea + 5 )) ] ]
;//eine kompliziert aussehende zeile welche ein sehr einfaches prinzip hat ^^ $1 ist im nicklist menu der erste nick, den man anklickt "[ [ $+($ $+ %sdfwea) ] ]" hier sieht man evaluations brackets ( [ [ ] ] ) um das ergebnis nochmal abzurufen ( wenn z.B. in %ip $ip stehen würde dann müsste man //echo -a [ [ %ip ] ] machen um seine ip zu bekommen und nicht $ip ) $+($ $+ %sdfwea) ergibt $1 also der erst selektierte nick, jedoch da man das $+( 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 [ [ $+($chr(36) $+ $calc( %sdfwea + 1 )) ] ] genommen $calc ist wie ein taschnrechner mit dem rechne ich %sdfwea und 1 zusammen dann kommt aus der $+() funktion $2 heraus mir den [[]] ist das der 2. selektierte nick ^^ und das geht so weiter bis $6 da +oooooo ^^\\;
;// erstma ne pause machen und das obrige nochmal durchlesen falls mans nich verstanden hat bis hier her ^^\\;
inc %sdfwea 6
;//hier fügen wir der variabel %sdfwea 6 hinzu damit wir 7 bekommen ( inc steht für increase )\\;
}
;//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 $7 weiter ^^\\;
}
;//das alles nochmal mit deop devoice und voice\\;
.Deop:{
var %sdfwea = 1
var %dafl = $snick(#,0)
var %asffa = $ceil($calc( %dafl / 6 ))
while ( %sdfwea <= %dafl ) { mode # -oooooo [ [ $+($ $+ %sdfwea) ] ] [ [ $+($chr(36) $+ $calc( %sdfwea + 1 )) ] ] [ [ $+($ $+ $calc( %sdfwea + 2 )) ] ] [ [ $+($ $+ $calc( %sdfwea + 3 )) ] ] [ [ $+($ $+ $calc( %sdfwea + 4 )) ] ] [ [ $+($ $+ $calc( %sdfwea + 5 )) ] ] | inc %sdfwea 6 }
}
.Voice:{
var %sdfwea = 1
var %dafl = $snick(#,0)
var %asffa = $ceil($calc( %dafl / 6 ))
while ( %sdfwea <= %dafl ) { mode # +vvvvvv [ [ $+($ $+ %sdfwea) ] ] [ [ $+($chr(36) $+ $calc( %sdfwea + 1 )) ] ] [ [ $+($ $+ $calc( %sdfwea + 2 )) ] ] [ [ $+($ $+ $calc( %sdfwea + 3 )) ] ] [ [ $+($ $+ $calc( %sdfwea + 4 )) ] ] [ [ $+($ $+ $calc( %sdfwea + 5 )) ] ] | inc %sdfwea 6 }
}
.Devoice:{
var %sdfwea = 1
var %dafl = $snick(#,0)
var %asffa = $ceil($calc( %dafl / 6 ))
;//die while wie oben erklärt bnur in eine zeile gefasst^^\\;
while ( %sdfwea <= %dafl ) { mode # -vvvvvv [ [ $+($ $+ %sdfwea) ] ] [ [ $+($chr(36) $+ $calc( %sdfwea + 1 )) ] ] [ [ $+($ $+ $calc( %sdfwea + 2 )) ] ] [ [ $+($ $+ $calc( %sdfwea + 3 )) ] ] [ [ $+($ $+ $calc( %sdfwea + 4 )) ] ] [ [ $+($ $+ $calc( %sdfwea + 5 )) ] ] | inc %sdfwea 6 }
}
}
;//hier noch ein kleines script für $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\\;
on *:join:*:#:{ if ( $nick == $me ) || ( $nick == L ) || ( $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) )\\;
;//ich abe gerade keine lust mehr zum erklären^^ ich update das vllt ma noch^^ das wichtigste an dem tutorial war eh o.g.\\;
alias botservini { return $shortfn($+($mircdirstuff\,� 36;network,.Botserv.ini)) }
alias botserv { return $readini($+($botservini),$1,&# 036;1) }
alias botservchecken {
if ( !$isdir($mircdirstuff ) { mkdir stuff }
if ( Q ison $1 ) {
writeini -n $botservini $1 Q 1
writeini -n $botservini $1 L 0
writeini -n $botservini $1 $1 Q
}
if ( L ison $1 ) {
writeini -n $botservini $1 Q 0
writeini -n $botservini $1 L 1
writeini -n $botservini $1 $1 L
}
if ( L !ison $1 ) && ( Q !ison $1 ) {
writeini -n $botservini $1 Q 0
writeini -n $botservini $1 L 0
writeini -n $botservini $1 $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 ^^