1

Тема: Полезные вещи

Readme файл по написанию плагинов от 7-й версии бота (лишнее вырезал).

Combots поддерживает плагины JavaScript.
Файл плагин должен иметь латинское имя и расширение .js
Все плагины хранятся в папке plugins

Как пользоваться плагинами:
При нажатии на галку вызывается главная функция плагина с параметром enabled - true
Если галку снять - вызывается главная функция с параметром enabled - false.
Чтобы перезагрузить плагин необходимо выключить-включить плагин.

Помощь при написании плагина:
Главная функция плагина должна иметь вид "function Имя файла плагина без .js (enabled){...}".
Где enabled является состояние галки напротив плагина в списке.
Пример главной функции:
function Test(enabled)
{
    if(enabled) alert('Плагин включен!');

    else alert('Плагин выключен!');
}

Необходимым элементом создания плагинов является привязание плагина к обновлению фреймов.
Этим занимается массив PluginsOnLoad.
Например у нас есть фукнция ее нужно привязать к обновлению страниц.
Делается это так PluginsOnLoad["имя плагина без .js что является именем главной функции"] = "Имя функции";
Пример PluginsOnLoad["Test"] = "TestDocumentRefreshHandler";
Чтобы отвязать функцию от обновления надо вызвать PluginsOnLoad["имя"] = "";
Функция-приниматель обновления должна быть без парамметров.
URL обновленной страницы содержится в RageRefreshed
Пример функции-handler:
function TestHandler()
{
var url = PageRefreshed;
if(url.indexOf("dungeon")>0)
    {
    //мы в подземельи
    }
else if(url.indexOf("edit=2")>0)
    {
    //мы в инвентаре в разделе Магия
    }
}

Теперь все что понадобится при плагино-строении:

top - объект верхнего уровня, в нем содержатся все фреймы
top.frames["bottom"]- фрейм строки чата (и нижних кнопок)
top.Battle.oBattle - объект-pointer к бою(!)
top.Battle.oBattle.Attack() - нажимает кнопку Вперед! в бою.
top.Chat.Self - объект-pointer к чату
top.Chat.Self.AddMessage("xxx") - добавляет сообщение в чат (! не посылает серверу а добавляет как будто принял)
mylogin - имя текущего персонажа
external.SaveFile("имя файла","текст") - сохраняет в папке plugins Файл с именем "имя файла" и содержанием "текст"
external.LoadFile("имя файла") - загружает и возвращает содержимое файла с именем "имя файла" из папки plugins

Software is like sex: it's better when it's free! © LinusTorvalds

2

Re: Полезные вещи

При выполнении запросов через DebugBar лучше всего использовать конструкцию try - catch
Пример:

try
{
   // ваш код
}
catch(err)
{
   alert(err.description)
}
Software is like sex: it's better when it's free! © LinusTorvalds

3

Re: Полезные вещи

Часто необходимо анализировать какой-нибудь текст, полученный в результате выполнения скрипта.
Длинный текст. На помощь вам приходит буфер обмена.

window.clipboardData.setData("Text","Вот сюда какой-нибудь текст");

* при первой попытке что-нибудь положить в буфер, браузер спросит у вас разрешение на это действие. В бота пихать не надо - бот, вроде, работает в silent режме и не отображает подобные диалоговые окна.

Software is like sex: it's better when it's free! © LinusTorvalds