Подключение бота к серверу

Материал из RO-fan
Перейти к: навигация, поиск

Получение информации о сервере

Вместе с OpenKore идут настройки только для официальных серверов, но не для приватных. Из-за того, что приватных серверов великое множество, невозможно поддерживать настройки для них в актуальном состоянии. Таким образом, игрокам приватных серверов следует выяснить самостоятельно настройки их серверов, пользуясь при этом данным руководством.

Прежде чем приступить к чтению руководства, просмотрите список неподдерживаемых серверов. На вашем сервере может быть защита от ботов, что может препятствовать OpenKore и такой сервер не будет поддерживаться OpenKore.

OpenKore нуждается в следующей информации о сервере Ragnarok Online, прежде чем сможет залогиниться:

  • Название сервера.
  • Адрес сервера в интернете (IP-адрес или доменное имя) и номер порта.
  • Параметры сервера: master_version, version, charBlockSize и serverEncoding - кодировку текста.
  • СерверТип serverType сервера.
  • addTableFolders для поиска табличных файлов с настройками OpenKore.

Существует два подробных руководства по сбору информации о сервере с помощью WPE или Wireshark. Если описанные тут WPE и Wireshark не работают, то подобным образом можно воспользоваться и другими утилитами.


WPE (Winsock Packet Editor)

1. Скачайте WPE и распакуйте.

  • Перед скачиванием, отключите ваш антивирус, так как он может принять WPE за вирус и удалить его. Вы скачиваете WPE под свою ответственность, никто иной не будет виноват, если ваш компьютер сломается.
  • Вам может потребоваться программа для распаковки архива с WPE. Наиболее распространённые ахиваторы WinRAR и 7zip.

2. Запустите клиент Ragnarok Online но не вводите пока логин и пароль! Оставьте сейчас Ragnarok и запустите WPE.

3. В окне WPE щёлкните по кнопке Target Program.

Targetyc.png


4. Откроется новое окно, найдите в нём запущенный клиент Ragnarok Online и дважды щёлкните по нему.

Clickrag.png
Примечание: Некоторые серверы скрывают свой настоящий выполняемый файл, переименовывая его (например из xxxRO.exe в xxxx.dll или xxxxx.bin), так что не переживайте, если запущенный файл не является .exe-файлом.


5. В окне WPE щёлкните по кнопке Play button.

Play.png


6. Перейдите назад в окно клиента Ragnarok Online и попробуйте залогиниться.

Примечание: Не обязательно вводить правильные логин и пароль.


7. Вернитесь в окно WPE и щёлкните по кнопке Stop button.

Stopjw.png


8. Откроется новое окно с перехваченными данными. Один из отправленных на сервер пакетов будет логин-пакетом, в котором находятся version, master_version, IP-адрес и порт сервера. Запишите значения на бумажку, они потом пригодятся. Логин-пакеты отличаются от сервера к серверу. Логин-пакеты начинаются с 64 00 или 02 B0. Логин-пакету могут предшествовать другие, например пакет 02 04 длиной 18 байт (в этом случае нужно настроить опцию clientHash).

На следующем рисунке показан перехваченный логин-пакет, содержащий version и master_version.
Inforb.png
Условные обозначения:
  1. - version. Беззнаковое целочисленное значение длиной 4 байта, записанное в шестнадцатиричной системе счисления. Младший байт слева (т.н. little-endian).
  2. - IP-адрес
  3. - порт
  4. - master_version. Беззнаковое целочисленное значение длиной 1 байт, записанное в шестнадцатиричной системе счисления.


9. Чтобы перевести значения version и master_version в понятный для OpenKore десятеричный формат, смотри раздел - перевод чисел в десятеричную систему.

Wireshark

1. Скачайте и установите Wireshark.

2. Запустите клиент Ragnarok Online но не вводите пока логин и пароль! Оставьте сейчас Ragnarok и запустите Wireshark.

3. В окне Wireshark перейдите по меню Capture > Options или нажмите Ctrl + K.

Capiture.png


4. В открывшемся окне в правом верхнем поле выберите сетевой интерфейс, с которого вы хотите перехватывать пакеты. Если вы не уверены, какой сетевой интерфейс использовать, выберите тот, у которого прописан ваш IP-адрес в интернете, или же хотя бы не стоит unknown. Можно также перепробовать их все и выбрать тот, с которого можно перехватить пакеты. Все остальные параметры найстройте так, как показано на рисунке.

Options.png


5. После настройки всех параметров, щёлкните по кнопке Start и перейдите назад в окно клиента Ragnarok Online. Попробуйте залогиниться. Примечание: Не обязательно вводить правильные логин и пароль.


6. После ввода логина и пароля вернитесь в окно Wireshark и щёлкните по кнопке Stop.

Stop.png


7. В главном окне Wireshark можно увидеть записи о перехваченных TCP-сегментах. Отсейте ненужные, используя в фильтре пакетов введённый вами логин.

Введите в поле Filter одно из двух:
 eth contains "xxxxxx" или eth contains xxxxxx
Вместо xxxxxx подставьте логин, который вы использовали при входе в Ragnarok, и нажмите Enter. В данном пример логин был Mushroom.
Filter.png


8. Теперь останется только одна запись о перехваченном пакете, щёлкните по записи и получите кое-какую информацию о пакете. Здесь вы найдёте IP-адрес и порт сервера.

Ip.png
Запишите IP-адрес и порт сервера на бумажку, они понадобятся позже.


9. Щёлкните по этой же записи правой кнопкой мыши, в появившемся меню выберите Follow TCP Stream.

Tcp.png


10. Откроется новое окно, внизу слева выберите Hex Dump.

Hex.png


11. Теперь у нас есть логин-пакет. Запишите version и master version на бумажку.

Packets.png


12. Чтобы перевести значения version и master version в понятный для OpenKore десятеричный формат, смотри раздел - перевод чисел в десятеричную систему.

Определение charBlockSize

1. С помощью клиента создать чара на аккаунте, закрыть клиент.

2. Включить в боте дебаг входящих пакетов.

3. Законнектиться ботом, дойти до чар селлекта (чара не выбирать), посмотреть размер пакета с чарами, закрыть бота.

4. С помощью клиента создать второго чара на аккаунте, закрыть клиент.

5. Законнектиться ботом, дойти до чар селлекта (чара не выберать), посмотреть новый размер пакета с чарами, закрыть бота.

6. Подсчитать разницу между вторым и первым пакетами - это и будет значение charBlockSize.

Перевод чисел из 16-ричной системы в 10-тичную

Выдернутые из перехваченных пакетов version и master version записаны сейчас в шестнадцетиричном формате (основание системы счисления равно 16), а OpenKore ожидает их увидеть в десятичном формате (основание равно 10). Поэтому их надо перевести из одной системы счисления в другую.

Перевести числа в десятичную систему счисления можно при помощи обычного калькулятора Windows.

1. Откройте калькулятор Windows Start > Accessories > Calculator.

calc.png

2. Откройте меню View и выберите пункт Scientific.

sci.png

3. Выберите шестнадцетиричную систему счисления, щёлкнув по переключателю Hex.

hexa.png

4. Введите в калькулятор полученное ранее шестнадцетиричное значение master_version или version. В данном примере шестнадцетиричное значение master_version равно 10.

type.png
Важно! Поле master_version имеет длину 4 байта. Старшинство байт в пакете идёт слева направо. В калькуляторе Windows старшинство байт идёт наоборот, справа налево. Поэтому, вводя шестнадцатеричные значения в калькулятор, следует поменять порядок следования байт наоборот. Например в пакете встречается следующее поле master_version: 10 14 00 00. Тогда их перевёрнутая последовательность будет 00 00 14 10. Ведущие нули можно отбросить, они ничего не значат, получается 14 10. Вот это и надо ввести в калькулятор в 16ричном режиме, а затем перевести в 10-ную систему. Получается, что 14 10 hex = 5136 dec. (а не 4116).

5. Выберите десятичную систему счисления, щёлкнув по переключателю Dec.

dec.png

6. После этого число автоматически переведётся в десятичную систему счисления.

done.png

Следуя приведённой инструкции необходимо перевести в десятичную систему счисления настройки сервера master_version и version.

Прописать настройки сервера в OpenKore

OpenKore читает настройки сервера из файла tables\servers.txt. Если вашего сервера нет в списке, тогда добавьте в этот файл новую запись. Если же ваш сервер уже есть в списке, тогда измените существующую запись. После изменения файла servers.txt следует перезапустить OpenKore.

Синтаксис

Записи в файле servers.txt имеют следующий формат:

[<server name>]
ip <ip-адрес или dns-имя>
port <номер>
version <число>
master_version <число> 
serverType <название сервертипа>
charBlockSize <число>
addTablesFolder [<пути до папок>]
recvpackets [<имя файла>]
serverEncoding <кодировка>


#Следующие настройки сервера необязательны:
clientHash [<строка 16-ричных чисел>]
pinCode [<булев флаг>]
captcha [<булев флаг>]
chatLangCode [<булев флаг>]
field_<location> [<имя файла>]
gameGuard [<флаг>]
private [<булев флаг>]
paddedPackets [<булев флаг>]
paddedPackets_attackID [<заголовки пакетов>]
paddedPackets_skillUseID [<заголовки пакетов>]
secureLogin [<булев флаг>]
secureLogin_type [<тип>]
secureLogin_requestCode [<строка 16-ричных чисел>]
secureLogin_account [<булев флаг>]
storageEncryptKey [<ключ шифрования>]
masterLogin_packet [<заголовок пакета>]

Обязательные

[<server name>]
Название игрового сервера, должно быть между квадратных скобок [ и ].
ip <ip-адрес или dns-имя>
IP-адрес или DNS-имя логин-сервера.
port <номер>
Номер порта логин-сервера. Обычно - 6900.
version <number>
Десятичное число, обозначающее версию сервера.
master_version <number>
Десятичное число, обозначающее мастер-версию сервера.
serverType <название сервертипа>
Так называемый СерверТип. Каждый официальный сервер имеет свой сервертип. Приватные сервера используют kRO-шные сервертипы в соответствии с датой компиляции запускаемых файлов клиента.
charBlockSize [<число>]
Длина в байтах блока информации о персонаже. На данный момент поддерживаются следующие значения: 106 (по умолчанию), 108, 112, 116, 128, 132, 136, 140, 144, 147. Эта настройка сервера прописывается если у чара отображается неправильно имя, джоб и левел во время выбора персонажа в аккаунте (см. FAQ. 5.4 Корявый список персонажей на аккаунте).
addTablesFolder <пути до папок>
Список путей до папок (относительно папки tables), в которых нужно искать табличные файлы.
Используется только если не был указан параметр командной строки --tables.
Для использования англоязычных табличных файлов можно прописать
addTableFolders translated/kRO_english
или же
addTableFolders iRO
recvpackets [<имя файла>]
Имя файла с ресивпакетами конкретно для вашего сервера. Стандартное значение - recvpackets.txt. Поиск файла ведётся по списку табличных папок - addTablesFolder. См. также руководство Извлечение ресивпакетов. Хотя эта настройка не обзательна, но очень желательна.
serverEncoding <кодировка текста>
Кодировка текста. Кодировка текста не определяется автоматически, поэтому её нужно прописывать руками. Вот список возможных кодировок:
Кодировка текста Используется в языках
Western Английский язык, или другой, основанный на латинском алфавите язык. Например немецкий, французский, португальский, а также индонезийский и другие.
Simplified Chinese Упрощённый китайский.
Traditional Chinese Традиционный китайский.
Korean Корейский язык.
Russian Русский язык, или другой, основанный на кириллице.
Japanese Японский язык.
Thai Тайский язык.

Необязательные

clientHash [<строка 16-ричных чисел>]
Клиенты RO начиная с 2013 года могут отсылать первым пакетом сумму MD5 файла клиента. Заголовок таких пакетов: 0204. Если в WPE вы перехватили первый пакет с таким заголовком, то следует настроить данную опцию, например, clientHash 82d12c914f5ad48fd96fcf7ef4cc492d. Это значение будет видно в перехваченном пакете, а также можно подсчитать MD5 сумму файла клиента.
pinCode [<булев флаг>]
Если до выбора чара необходимо вводить пин-код, то следует здесь поставить 1. В противном случае эта опция не нужна.
captcha [<булев флаг>]
Заставляет OpenKore использовать "капчу".
chatLangCode [<булев флаг>]
Если chatLangCode 1, то из сообщений удаляется код языка.
gameGuard [<флаг>]
Исользуется в случае использования на сервере GameGuard или HackShield. Смотри также Poseidon.
private [<булев флаг>]
Пропишите настройку сервера private 1, если OpenKore пытается соединиться с map-сервером по неправильному IP-адресу. Обычно такое случается на пиратских серверах.
masterLogin_packet [<заголовок пакета>]
Переопределяет заголовок логин-пакета (но не трогает его структуру). Если заголовок логин-пакета отличается от 0064 (стандарт), то для режима XKore 2 следует обязательно указать правильный заголовок логин-пакета.
field_<локация> <имя файла>
Для <локации> OpenKore будет использовать файл <имя файла>.fld. Этот параметр полезен, если на вашем сервере используются устаревшие или модифицированные локации. Пример: использовать morocc-old.fld вместо morocc.fld:
field_morocc morocc-old
Смотри также гайд по созданию *.fld-файлов: FLD Creation Guide.
dead 1
Сервер мёртв, закрылся. Такой сервер нельзя выбрать из списка. Если сервер уже прописан в конфигурации, то выдаётся соответствующее сообщение об ошибке. Добавлено в ревизии 8566.
dead_message <сообщение>
Пояснение о закрытии сервера. По умолчанию будет стандартное: Server you've selected (%s) is now marked as dead.
Пример для http://euro-ro.net/: euRO was closed on September 30, 2010. There used to be transfers to fRO, check out their website.
title <название сервера>
Название сервера, какое будет показано в списке при выборе сервера. Можно менять как кому удобно, в отличии от идентификатора сервера, который лучше не трогать.
В квадратных скобках - идентификатор сервера, который следует переименовывать только если игровые серверы или их порядок изменился. В таких случаях надо будет ещё раз указать на правильный сервер.
Появилось в ревизии 8564.
Пример. Вместо "International - iRO: Loki Classic" будет показано "International - iRO: Loki (Classic-compatible)":
[International - iRO: Loki Classic]
title International - iRO: Loki (Classic-compatible)

Пример

[RMS Renewal Test Server]
ip 69.197.167.236
port 6900
master_version 2
version 51
serverType kRO_RagexeRE_2014_10_22b
serverEncoding Western
charBlockSize 147
addTableFolders kRO/RagexeRE_2014_10_22b;translated;translated/kRO_english;kRO
clientHash 82d12c914f5ad48fd96fcf7ef4cc492d
pinCode 1


Примечание. Смотри также (!) recvpackets.txt /для каждого сервака свой? (почти FAQ).