Структура XML файла или как самому расширить функциональность
Профили миров хранятся в папке worlds, которая должна лежать вместе с исполняемым файлом.
Файл формата XML должен иметь окончание xml. Рассмотрим пример профиля Территории:
- Код: Выделить всё
<?xml version="1.0" encoding="utf-8" ?>
<world>
<description>
<name>Территория</name>
<version>1.0</version>
<author>FaKk2</author>
<contact>ICQ#: 82656023</contact>
<requires>1.0</requires>
</description>
<menus caption="Features">
<menu>
<name>Log In</name>
<run>login_page</run>
</menu>
<menu>
<name>Toggle Private Messages</name>
<run>set_private_only</run>
</menu>
<menu>
<name>-</name>
<run></run>
</menu>
<menu>
<name>About</name>
<run>show_about</run>
</menu>
</menus>
<code>
<function name="login_page">
window.location.href="http://www.territory.ru/";
</function>
<function name="show_about">
alert("This world file is made by FaKk2");
</function>
<function name="set_private_only">
if (this.location.href.indexOf('/main.php') > 0)
this.frames["bottom"].document.links[2].fireEvent("onclick");
</function>
</code>
</world>
Тег descriptionВ этом теге расположена информация о файле. Содержание показывается в окне "Manage Worlds".
Тег menusВ этом теге описаны элементы меню, которое будет показано при выборе этого профиля. Меню будет показано в том порядке что и здесь.
Тег name определяет надпись пункта меню.
Тег run определяет название функции которая будет исполнена при нажатии на этот пункт.
Тег codeТег code содержит те функции, что указаны в пунктах меню. Название должно быть уникальным, порядок не важен.
В коде функции можно использовать любой JScript (JavaScript) код. Код будет выполнятся относительно окна браузера, таким образом у вас есть доступ ко всему.
ПримерНа примере Территории создадим пункт меню которое будет устанавливать тип принимаемых сообщений - все/приват.
Подобная кнопка есть внизу экрана, слева от поля ввода сообщения. Открываем исходник страницы (right click->View Source), ищем "Приватные сообщения" (подпись картинки).
Видим код:
- Код: Выделить всё
<td height=24 valign=center>
<a href="#" onclick="setFilter();">
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
if (top.privateOnly) {
document.write('<img src=images/design/b_chat_2_on.gif alt="Приватные сообщения" name="private" id="private" width=19 height=19 vspace=0 border=0 align=absbottom>');
} else {
document.write('<img src=images/design/b_chat_2.gif alt="Приватные сообщения" name="private" id="private" width=19 height=19 vspace=0 border=0 align=absbottom>');
}
</SCRIPT>
</a>
</td>
Вот и наша ссылка:
- Код: Выделить всё
<a href="#" onclick="setFilter();">
Из этой строки видно, что тип сообщений регулирует ф-ция setFilter(). Значит мы либо вызываем ее либо эмулируем нажатие на картинку. Из-за того что я хочу показать как работать с обьектами, мы будет эмулировать нажатие.
Воспользуемся услугами DOM, для ознакомления с которой сходите по
ссылкеИтак мы находимся на уровне главного окна и нам нужно спуститься "вниз" к нужной ссылке и вызвать ее нажатие. Также нужно знать что окно игры разбито на фреймы (из ИЕ меню View->Source). Из вышеприведенной ссылки и метода тыка доходим до
- Код: Выделить всё
this.frames["bottom"].document.links[2].fireEvent("onclick")
Исследование удобно производить с помощью JScript Command Line (в меню Base) обрамляя в alert(); для отображения информации.
Правильное программирование предполагает обработку ошибок. Ведь в процессе исследования вы наверняка заметили, что неверный путь к элементу вызывает исключение. Данный код должен работать только когда пользователь залогинился в игру. Для этого добавим проверку текущего пути:
- Код: Выделить всё
if (this.location.href.indexOf('/main.php') > 0)
this.frames["bottom"].document.links[2].fireEvent("onclick");
Как только код написан, его можно внедрить в среду (т.е. сам проект). Для этого по примеру создаем меню и функцию. Все, вы только что создали свое собственное расширение игры.
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.