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

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

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

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

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

Openkore НЕ работает на серверах с защитами: Frost, Gepard, EAC (EasyAntiCheat) и пр.

Для коннекта OpenKore к серверу Ragnarok Online необходимо указать следующую информацию:

  • название сервера;
  • адрес сервера в интернете (IP-адрес или доменное имя) и номер порта;
  • параметры сервера: master_version, version, charBlockSize и serverEncoding - кодировку текста;
  • serverType - тип сервера ("язык" общения OpenKore с сервером RO);
  • 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 имеют следующий формат:

[<имя_сервера>]
ip <ip-адрес или dns-имя>
port <номер>
version <число>
master_version <число> 
serverType <название сервертипа>
serverEncoding <кодировка>
charBlockSize <число>
addTablesFolder [<пути до папок>]
#Следующие настройки сервера необязательны:
private [<булев флаг>]
recvpackets [<имя файла>]
chatLangCode [<булев флаг>]
storageEncryptKey [<ключ шифрования>]
field_<location> [<имя файла>]
clientHash [<строка 16-ричных чисел>]
captcha [<булев флаг>]

gameGuard [<флаг>]

secureLogin [<булев флаг>]
secureLogin_type [<тип>]
secureLogin_requestCode [<строка 16-ричных чисел>]
secureLogin_account [<булев флаг>]

paddedPackets [<булев_флаг>]
paddedPackets_attackID [<заголовки_пакетов>]
paddedPackets_skillUseID [<заголовки_пакетов>]

masterLogin_packet [<заголовок_пакета>]

dead <булев флаг>
dead_message <текст>
title <название_сервера>

pinCode [<булев_флаг>]
charDeleteDateType <булев_флаг>
blockingPlayerCancel <булев_флаг>
rankingSystemType <булев_флаг>
itemListType <булев_флаг>

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

[<имя_сервера>]
Название игрового сервера, должно быть между квадратных скобок [ и ].
ip <ip-адрес или dns-имя>
IP-адрес или DNS-имя логин-сервера. Логин-сервер, чар-сервер и мап-сервера могут иметь разные ИП-адреса.
port <номер>
Номер порта логин-сервера. Обычно - 6900.
version <номер>
Десятичное число, обозначающее версию сервера.
master_version <номер>
Десятичное число, обозначающее мастер-версию сервера.
serverType <название_серверТипа>
Это "язык" общения OpenKore с сервером RO. Каждый официальный сервер имеет свой serverType. Приватные сервера используют kRO-шные serverType в соответствии с датой компиляции запускаемых файлов клиента.
serverEncoding <кодировка>
Кодировка текста. Кодировка текста не определяется автоматически, поэтому её нужно прописывать руками. Вот список возможных кодировок:
Кодировка текста Используется в языках
Western Английский язык, или другой, основанный на латинском алфавите язык. Например немецкий, французский, португальский, а также индонезийский и другие.
Simplified Chinese Упрощённый китайский.
Traditional Chinese Традиционный китайский.
Korean Корейский язык.
Russian Русский язык, или другой, основанный на кириллице.
Japanese Японский язык.
Thai Тайский язык.


charBlockSize <число>
Длина в байтах блока информации о персонаже в пакете 'received_characters' в чар-селекте.
На данный момент поддерживаются следующие значения: 106 (по умолчанию), 108, 112, 116, 124, 128, 132, 136, 140, 144, 145, 146, 147, 155.
charBlockSize kRO дата Версия OpenKore Примечание
периодически появляются новые значения charBlockSizes
155 a6d3f87 exp int64
147 df50355
146 3aeba6a
145 3001eab and 8fa8dfa обновление iRO's Doram
144 2011-10-25 876acab
140 2011-09-28 876acab "change slot feature"
136 2011-01-11 b5b8e07 "robe"
132 2010-08-03 b5b8e07 "дата удаления"
128 daefa83
124 3b07ffe bRO (bitfrost update)
116 addabe5
112 9862177 Topic on the forum
108 9862177 Topic on the forum
106 (default)

Даты приведены для справки, любой сервер может изменить их.

В коде Athena charBlockSize генерирует функция mmo_char_tobuf


addTablesFolder <пути до папок>
Список путей до папок (относительно папки tables), в которых нужно искать табличные файлы.
Используется только если не был указан параметр командной строки --tables.
Для использования англоязычных табличных файлов можно прописать
addTableFolders translated/kRO_english
или же
addTableFolders iRO

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

private [<булев флаг>]
Пропишите настройку сервера private 1, если OpenKore пытается соединиться с map-сервером по неправильному IP-адресу. Обычно такое случается на пиратских серверах.
recvpackets [<имя файла>]
Имя файла с ресивпакетами конкретно для вашего сервера. Стандартное значение - recvpackets.txt. Поиск файла ведётся по списку табличных папок - addTablesFolder. См. также руководство Извлечение ресивпакетов. Хотя эта настройка не обзательна, но очень желательна.
chatLangCode [<булев флаг>]
Если chatLangCode 1, то из сообщений удаляется код языка.
field_<локация> <имя файла>
Для <локации> OpenKore будет использовать файл <имя файла>.fld. Этот параметр полезен, если на вашем сервере используются устаревшие или модифицированные локации. Пример: использовать morocc-old.fld вместо morocc.fld:
field_morocc morocc-old
Смотри также гайд по созданию *.fld-файлов: FLD Creation Guide.
clientHash [<строка 16-ричных чисел>]
Клиенты RO начиная с 2013 года могут отсылать первым пакетом сумму MD5 файла клиента. Заголовок таких пакетов: 0204. Если в WPE вы перехватили первый пакет с таким заголовком, то следует настроить данную опцию, например, clientHash 82d12c914f5ad48fd96fcf7ef4cc492d. Это значение будет видно в перехваченном пакете, а также можно подсчитать MD5 сумму файла клиента.
captcha [<булев флаг>]
Заставляет OpenKore использовать "капчу".
gameGuard [<флаг>]
Исользуется в случае использования на сервере GameGuard или HackShield. Смотри также Poseidon.
masterLogin_packet [<заголовок пакета>]
Переопределяет заголовок логин-пакета (но не трогает его структуру). Если заголовок логин-пакета отличается от 0064 (стандарт), то для режима XKore 2 следует обязательно указать правильный заголовок логин-пакета.
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)
pinCode [<булев_флаг>]
Если до выбора чара необходимо вводить пин-код, то следует здесь поставить 1. В противном случае эта опция не нужна.
charDeleteDateType <булев_флаг>
Установите 1 если ваш сервер для удаления чара требуется ввести текущую дату.
blockingPlayerCancel <булев_флаг>
Установите 1 если ваш сервер при смене карты и телепорте требут отправку пакета 'blocking_player_cancel' (0447). Не работает только в режиме XKore 1
rankingSystemType <булев_флаг>
Установите 1 если ваш сервер использует один общий пакет 'rank_general' (097C), вместо 'rank_killer', 'rank_taekwon', 'rank_alchemist', 'rank_blacksmith'
itemListType <булев_флаг>
Установите 1 если ваш сервер использует 'item_list packets' (0B08 ~ 0B0B) пакеты вместо обычного списка.
Смотри github PR#2887


Пример

[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).