Вторник, 30.04.2024, 07:55


Главная
Регистрация
Вход
Head is Out There Приветствую Вас Висп | RSS  
Меню сайта

Категории каталога
StealthBot [6]
Небольшое руководство по StealthBot
Правила [1]

Наш опрос
Нужно ли нам DOTa подразделение?
Всего ответов: 407

Главная » Статьи » FAQ » StealthBot

StealthBot Script
Самые интересные возможности бота, самые 'понтовые' вещи, которые делаются с помощью ботов, пишутся на VBS.
Я не ошибусь, если назову Бейсик (BASIC - Begginners Allpurpose Symbolic Instruction Code, т.е символический командный универсальный код для начинающего самым простым языком программирования. Даже при небольшом опыте, программы можно писать практически не задумываясь. Свою историю этот язык программирования высокого уровня начал в далеком 1963 году. Именно тогда небольшой группой студентов последнего курса Дортмутского колледжа под чутким руководством профессора Дж. Кемени и была разработана самая первая версия этого языка. В то время, помимо Бейсика, широко были распространены также Fortran, Cobol, Algol, PL/1, Focal и Pascal. Из них, до настоящего времени дожили, пожалуй лишь Паскаль и Бейсик, сильно изменившись при этом.

Как это не прискорбно для ярых противников Microsoft, но именно эта компания способствовала широкому распространению Бейсика (вспомним Quick Basic). По моему опыту писать на нем было удобнее, чем на Turbo Basic компании Borland, которая более известна по языку C++. Повсеместная "Виндуализация" PC компьютеров, вынудила к разработке версии Бейсика для Windows приложений. Таким клоном в 1991 году стал Visual Basic, позволяющий визуально создавать прикладные программы, довольно приличного уровня. Но все же, по моему мнению, из за простоты Visual Basic сдает свои позиции тем же Си и Java. С появлением всемирной сети Internet, и языка HTML стало возможным создание активных приложений на веб страницах. Единственным языком для этих целей был Java Script. Да, именно был. Когда свет увидел Microsoft Internet Explorer 3.0, в нем, помимо поддержки Java script появилась и поддержка Visual Basic Scripting Edition, или просто VBscript. Как известно, JavaScript был разработан Netscape и поначалу стал известен как LiveScript. После шумихи вокруг Java, Netscape переименовала его в JavaScript, когда получила лицензию от Sun. Microsoft самостоятельно разработала JScript для своего броузера, за что правда тоже не избежала разбирательств с Sun.

Если вы собираетесь кодить скрипты сами, то обязательно прочтите это. Этот справочник требует от вас минимум базовых умений в программровании и понимании понятий, типа переменная, цикл, функция.
"Справочная информация


Cравнение VBScript и JavaScript.

Прежде чем начинать познавать VBScript, давайте сравним две одинаковые, простые программы на JS и VBS. Это будет полезным для тех, кто знает JavaScript (к коим я не отношусь.
Суть программы: вводим текст в верхнее поле, нажимаем кнопку "Скопировать" и текст копируется в нижнее поле.
Java Script VB Script


JAVA в Web

<FORM NAME=forma>
<INPUT TYPE="text" NAME="text1"><BR>
<INPUT TYPE="text" NAME="text2"><BR>
<INPUT TYPE="button" NAME="knopka" VALUE="Скопировать" OnClick=copyfun()>
</FORM>

<SCRIPT LANGUAGE="JavaScript">

function copyfun()
{
var copytext;
copytext=document.forma.text1.value;
document.forma.text2.value=copytext;
}

</SCRIPT>
<FORM NAME=forma>
<INPUT TYPE="text" NAME="text1"><BR>
<INPUT TYPE="text" NAME="text2"><BR>
<INPUT TYPE="button" NAME="knopka" VALUE="Скопировать" OnClick=copyfun()>
</FORM>


VBS в Web

<SCRIPT LANGUAGE="VBScript">

sub copyfun

dim copytext
copytext=document.forma.text1.value
document.forma.text2.value=copytext
end sub

</SCRIPT>


Да, как видно, различий практически нет. JS поддерживает только функции, VBS и функции и процедуры (подпрограммы). Так же следует отметить, что VBS отличие от JS не чувствителен к регистру символов, т.е. для него что copyfun(), что CoPYfuN() - один пес. Так что можете сделать выводы, тем, кто знает ява скрипт, будет легко освоить VBS, а тем кто не знает пока ни того не другого будет еще легче, поскольку переучиваться не придется. Учиться лучше на примерах, поэтому постараюсь их здесь приводить побольше. Я надеюсь, что Вы хотя бы умеете писать программы на обыкновенном Бейсике (QB или TB)? Тогда эта статья именно для Вас.


[...]

Что такое эти процедуры? Процедура это общее название функций или подпрограмм. Имеет синтаксис:
sub name_событие ....... end sub.
name - это имя процедуры, например мы написали, что кнопка "загадать число" называется "chislo", значит подпрограмма sub chislo_onclick выполнится при нажатии на эту кнопку.
событие - то, что может "случиться" в окне броузера. Например "onclick" означает, что процедура выполнится, при нажатии на кнопку, предварительно заданную в форме (как в нашем случае). Существует несколько видов событий. Из самых распространенных можно отметить: window_onload - запускается при полной загрузке документа:


[...]


Справочная информация. Некоторые операторы и функции.

Чтобы Вам было легче экспериментировать в написании скриптов, приведем основные операторы и функции VBscript. А то начнете писать PRINT "привет" или пытаться закончить цикл For оператором Next x
СИНТАКСИС ПРИМЕР ОПИСАНИЕ

Операторы работы с массивами.
Dim имя_массива (индексы) dim a(10),b(20,30) Объявление массива
Erase имя_массива erase a Очистка содержимого массива

Операторы присваивания.
переменная = значение a=137 a=b c="привет" Присваивание
Set переменная = объект set a=document.forma1 Присваивание переменной значени ссылки на объект.

Комментарии.
' комментарии ' текст
Rem комментарии rem текст

Константы Boolean.
переменная = False if a=false then ... Значение типа boolean равное 0
переменная = True if a=true then ... Значение типа boolean равное -1

Функции.
Abs (число) a = abs(-1.34) ... a=1.34 Абсолютное значение числа
Asc (символ) a = asc("s") ... a=115 ANSI код символа
Chr (число) a = chr(115) ... a="s" Символ соответствующий коду
Fix (число) a = fix(-1.5) ... a=-1 Целое число, округление
Int (число) a = int(-1.5) ... a=-2 Целое число, округление
Hex (число) a = hex(543) ... a="21F" Шестнадцатиричное представление
Oct (число) a = oct(543) ... a="1037" Восьмеричное представление
Sgn (число) a = sgn(-1.3) ... a=-1 Знак числа
Date a = date ... a =

[...]

Операторы используемые в выражениях
Привожу просто список, надеюсь все и так ясно:
+ And / = Eqv ^ > <= Imp <> \ < => Mod * - Or & Xor

Текстовые Функции
Instr (начало, строка, искомая подстрока) If Instr(1,mail,@) then ... Возвращает номер символа в строке с которого начинается исходная подстрока
Lcase (строка) a=Lcase("ПРивЕТ") ... a="привет" Преобразование символов строки в строчные буквы
Ucase (строка) a=Ucase("ПРивЕТ") ... a="ПРИВЕТ" Преобразование символов строки в заглавные буквы
Left (строка,N символов) a=Left("Привет",3) ... a="При" Левая часть строки длинной N символов
Right (строка,N символов) a=Right("Привет",3) ... a="вет" Правая часть строки длинной N символов
Len (строка) a=Len("Привет") ... a=6 Длина строки
Ltrim (строка) a=Ltrim(" Привет ",) a="Привет " Удаляет начальные пробелы
Rtrim (строка) a=Rtrim(" Привет ",) a=" Привет" Удаляет конечные пробелы
Trim (строка) a=Ttrim(" Привет ",) a="Привет" Удаляет начальные и конечные пробелы
Mid (строка, начало, N символов) a=Mid("Привет",3,2) a="ве" Часть строки с позиции "начало" и длиной N символов
Left(строка,N символов) a=Left("Привет",3) a="При" Левая часть строки длинной N символов
Space (N) a=Space(5) Строка из N пробелов
String (N символов, символ) a=String(5,"A") a="AAAAA" Строка из N символов
Ltrim (строка) a=Ltrim(" Привет ",) a="Привет " Удаляет начальные пробелы

Ветвление и циклы

Вызов подпрограммы

Call имя_событие

...
Выполняет код хотя бы один раз, пока условие не будет истинным

Loop Until условие Do
a=a+1
Loop Until a>=5
Do

...
Выполняет код хотя бы один раз, пока условие справедливо

Loop While условие Do
a=a+1
Loop While a<5
Do Until условие

...
Повторяет выполнение кода, пока условие не станет истинным

Loop Do Until a>=5
a=a+1
Loop
Do While условие

...
Повторяет выполнение кода, пока условие справедливо

Loop Do While a<5
a=a+1
Loop
For счетчик=начало To конец Step шаг

...
Выполнение кода при выполнении условия

next For i=1 to 5
a=a+1
next Цикл
IF условие Then
действие1
Else
действие2
End if IF a>1 Then alert"больше"
Select Case X
Case значение1
действие
Case значение2
действие2

...
Выборочное выполнение кода при совпадении значения

End select Select Case X
Case 10
alert"x=10"
Case 20
alert"x=20"
End select
While условие
действие
Wend While a<5
a=a+1
Wend 'Выполнение кода пока условие истинно

Oбъявление функций и процедур

Dim переменная Dim a Объявление переменной
Sub имя_событие
код
End sub Sub but_onclick
Alert x
End sub Подпрограмма
Function имя(параметры)
код
End function Function(x,y)
x=x*y
End function Функция
Exit ... Exit Do (For, Function, Sub) Досрочный выход

[...]

Основные типы данных VBscript

Наверное, те кто знаком со "старым" бейсиком, еще помнят, что для обозначения символьной переменной надо было писать знак бакса или солнышка (a$="привет"). В VBscript этого делать не следует, он имеет только один тип данных, называемый VARIANT. Он может содержать как символы так и числа разной точности. Поэтому для того, чтобы точно определить тип данных, желательно использовать функции преобразования. К примеру, текст вводимый в поле формы имеет текстовый формат, и попытка сложить цифру "3" с цифрой "2" приведет к результату "32":




sub summa

summatext1=document.formasum.summa1.value

summatext2=document.formasum.summa2.value

alert summatext1+summatext2

end sub



Поэтому надо сделать так, чтобы переменные summatext1 и summatext2 были преобразованы в целые числа функцией Cint(переменная):




sub summa



summatext1=Cint(document.formasum.summa1.value)

summatext2=Cint(document.formasum.summa2.value)

alert summatext1+summatext2



end sub




Подтипы данных VARIANT.
ПОДТИП ФУНКЦИЯ ПРЕОБРАЗОВАНИЯ ОПИСАНИЕ

Epty - Автоматически присваивается новым переменным, когда им еще не присвоено явное значение.
Null - Указывает на то, что переменная не содержит допустимых данных.
Boolean CBool(x) Используется для обозначения логических переменных, принимающих два допустимых значения True или False
Byte CByte(x) Самый короткий тип данных принимающий значение 0..255
Integer CInt(x) Целый тип в пределах -32768 .. 32768
Long CLng(x) Длинный тип целой переменной в пределах -2147483648 .. 2147483647
Single CSngl(x) Тип чисел с плавающей точкой одинарной точности
Double CDbl(x) Тип чисел с плавающей точкой двойной точности
Date/Time CDate(x) Число в формате отображающее время и дату от 1 января 100 года до 31 декабря 9999 года
Currency CCur(x) Специальный числовой формат для денежных величин
String CStr(x) Символьные тип данных
Object - Ссылка на объекты ole, html, ActiveX
Error - Тип данных предназначенный для хранения номеров ошибок

Некоторые правила VBscript

В заключении следует упомянуть некоторые основные приемы при написании кода скрипта.

Если код не умещается в одной строке, то можно использовать символ продолжения строки:



if a=1 and b=2 or c=3 then alert a

можно написать как

if a=1 _

and b=2 _

or c=3 _

then alert a


Для "склеивания" двух численных переменных лучше использовать знак "&" чем "+", т.е. a="при" b="вет" тогда a&b="привет"

[...]

Также вы можете прочитать справочную информацию по VBS (на английском) тут.

В любом случае, далее часть обязательна для всех.
Весь скрипт VBS который мы будем писать, содержится в файле script.txt в каталоге с ботом. Откройте его. Что мы видим? С первого взгляда просто некоторое количество бессмысленного кода.

Давайте-ка напишем наш первый код, тем самым пройдя 'крещение огнем' для бот-скриптеров.

Весь код в Script.txt разбит по разным процедурам (Sub'aм). Давайте рассмотрим процедуру

Sub Event_UserTalk(Username, Flags, Message, Ping)

End Sub.


Итак, мы видим, что объявлена процедура Event_UserTalk. В ней объявлены переменные, которые будут использловаться в ней. Это:

Username - Имя пользователя, запустившего скрипт или выполняющего условие.

Flags - Флаги и доступ юзера.

Message Тело сообщения пользователя без имени.

Ping - Пинг юзера.

Процедура UserTalk - это общение в чате BNet'a. т.е. если написать внутри этой процедуры условие, наример, Если кто-то в чате написал "", то надо ответить ему "Real !", то оно будет работать только, если код написан тут. Немного сумбурно, но вы разберетесь.

Сразу хочу сказать, что мы будем для выведения текста на экран пользоваться функцией ADDQ().


Давайте посмотрим, как ей пользоваться:
...
ADDQ Ping 'Будет выведен пинг
ADDQ Username 'Имя пользователя
ADDQ "Hello World" 'Строку
...

Так. Но это более или менее просто. Сейчас нам требуются сведения из справочного материала.

Давайте создадим условие, на основе которого будет проводиться та самая проверка того, что написал юзер на канале.

Итак, мы хотим следующее:


Если бот слышит "", то
Он пишет "Real !"
И затыкается


Синтаксис проверки условия не будет незнакомым, любому программисту.
Операторных скобок не существует как факт, каждый If заканчивается End If'ом.
Давайте выполним задачу

If lcase(Message)="" Then
ADDQ "Real !"
End If

Lcase, как сказано в спрваочном материале, делает все заглавные буквы маленькими, чтобы не было различий между и LoL или LOL.


3rror: Hi there
mOp-Z1gorro: Hi manag
4F.Inviz: hey u guys
'Тут срабатывает проверка бота, и он делает то, что мы ему сказали.
4F.Bot: Real !


Вот так будет действовать бот, если код написан в Usertalk'e.

В окончание статьи, я напишу что каждая процедура делает.

Sub Event_UserTalk(Username, Flags, Message, Ping) - Общение на канале, и в личное сообщение, но не работает, если пишут через /emote

Event_WhisperFromUser(Username, Flags, Message) - Срабатывает только тогда, когда бот получает личное сообщение

Sub Event_UserEmote(Username, Flags, Message) - когда юзер пишет через /emote

Sub Event_ServerError(Message) - когда бот получает ошибку из Battle.net
(когда текст красным цветом, например, если юзер не найден)

Sub Event_ServerInfo(Message) - когда бот получает сообщение от сервера Battle.net (когда текст синим цветом, например, когда BNet говорит, что юзер на каком-то канале)

Sub Event_UserJoins(Username, Flags, Message, Ping, Product, Level, OriginalStatstring) - когда юзер входит на канал (аналог Greet Message)

Sub Event_UserLeaves(Username, Flags) - когда юзер уходит с канала

Sub Event_FlagUpdate(Username, NewFlags, Ping) - обновление статуса игрока. Например, если его банят с канала

Sub Event_LoggedOn(Username, Product) - Когда бот залогинился на BNet'e

Sub Event_UserInChannel(Username, Flags, Message, Ping, Product) - выполняется один раз с каждым юзером сидящим на канале

Sub scTimer_Timer() - выполняется каждые X милисекунд.

Sub Event_PressedEnter(Text) - срабатывает каждый раз, перед тем, как владелец бота написал в окне бота и нажал Enter.

Sub Event_Close() - срабатывает перед тем, как бот отключается.
Категория: StealthBot | Добавил: PAND-or (11.06.2007)
Просмотров: 3897 | Комментарии: 3 | Рейтинг: 5.0/2 |

Всего комментариев: 3
3 Леха  
0
СПС ЗА ПОЗНАНИЯ И ВСЕТАКИ, ГДЕ ЭТО ПИСАТЬ! И ПОСОВЕТУЙТЕ ЕСЛИ Я ХОЧУ ПОПРОБОВАТЬ САМ СДЕЛАТЬ БОТА!)))))) БУДУ ЖДАТЬ ОТВЕТА НА ПОЧТОВЫЙ АДРЕС (SNOWDOG07@MAIL.RU) ИЛИ В АСЮ(344674361)! ЗАРАНИЕ БОЛЬШОЕ СПАСИБО!!!!!!!!

2 PAND-or  
0
Открываешь script.txt в корневом каталоге бота.
И изменяешь что и как тебе надо.
Либо заменяешь на готовый скрипт

И важно внимательно смотреть, за открытием и закрытием функций

if
End if

Sub
End Sub

из-за одной неверной записи весь скрипт может не работать :)


1 Enelar  
0
Спс, я кажись просмотрел, но где про то, как пичать в фаил???

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Статистика каталога статей
Последние материалы Самое читаемое

Ud vs Танки

[09.07.2007]

DOUBLE ELIMINATION

[01.07.2007]

StealthBot Script

[11.06.2007]

StealthBot Setting

[11.06.2007]

Форма входа

Поиск

Друзья сайта
  • Clan Mipt

  • Статистика


    PAND-or © 2024