Подключение бота к серверу — различия между версиями

Материал из Руководство по OpenKore
Перейти к: навигация, поиск
(Необязательные)
 
(не показано 45 промежуточных версий 3 участников)
Строка 1: Строка 1:
В списках опенкоры имеется много информации о серверах. Но некоторых серверов в этих списках нет, и иногда информация меняется (например меняется IP сервера или обновляется софт). Этот гайд вам поможет определить нужную информацию для подключения к серверу. Прочтите данный гайд полностью и внимательно! Если вы сталкнулись с проблемами, дочитайте этот гайд до конца, прежде чем задавать вопросы на форуме или IRC!
+
==Получение информации о сервере==
Прежде чем пытаться подключится к серверу, проверьте не находится ли данный сервер в списке "неподдерживаемых", чтобы все ваши усилия не стали напрасными.
+
Вместе с OpenKore идут настройки только для официальных серверов, но не для приватных. Из-за того, что приватных серверов великое множество, невозможно поддерживать настройки для них в актуальном состоянии. Таким образом, игрокам приватных серверов следует выяснить самостоятельно настройки их серверов, пользуясь при этом данным руководством.
Для того чтобы OpenKore смогла подключится к серверу ей потребуется следующая информация:
 
  
*Название сервера.
+
Прежде чем приступить к чтению руководства, просмотрите список [[unsupported servers|неподдерживаемых серверов]]. На вашем сервере может быть защита от ботов, что может препятствовать OpenKore и такой сервер не будет поддерживаться OpenKore.
*Ip и порт сервера.
+
<div style="color: red">Openkore НЕ работает на серверах с защитами: Frost, Gepard, EAC (EasyAntiCheat) и пр.</div>
*Master Version сервера.
 
*Version сервера. (не путайте с master version)
 
*Encoding сервера(на русских серверах везде стоит ставить ServerEcoding Russian).
 
*Тип сервера (serverType).  
 
  
 +
Для коннекта OpenKore к серверу Ragnarok Online необходимо указать следующую информацию:
  
==Получение информации сервера==
+
* название сервера;
Есть 2 способа получения данных, с помощью [http://wpepro.net WPE] или [http://www.wireshark.org Wireshark]. Самый легкий это способ через WPE, потому что многие игроки знают, что это такое и с чем его едят. Но некоторые сервера блокирует WPE, но не будем отчаиватся ведь нам может помочь Wireshark.
+
* адрес сервера в интернете ([[wikipedia:IP address|IP-адрес]] или [[wikipedia:hostname|доменное имя]]) и [[wikipedia:computer port (software)|номер порта]];
 +
* параметры сервера: '''master_version''', '''version''', '''charBlockSize''' и '''serverEncoding''' - кодировку текста;
 +
* [[serverType]] - тип сервера ("язык" общения OpenKore с сервером RO);
 +
* '''addTableFolders''' для поиска табличных файлов с настройками OpenKore.
  
===WPE (Winsock Packet Editor)===
+
Существует два подробных руководства по сбору информации о сервере с помощью [http://wpepro.net WPE] или [http://www.wireshark.org Wireshark]. Если описанные тут WPE и Wireshark не работают, то подобным образом можно воспользоваться и другими утилитами.
:'''1.''' Скачайте и распакуйте WPE. Скачать его можно тут [http://wpepro.net/download.html].  
 
::'''<span style="color:red">Перед закачкой, удостоверьтесь что антивирусы выключены, т.к антивирусы определяют WPE как вирус, но на самом деле это очень полезный сниффер, после установки добавте его в исключения, чтобы антивирус нам не надоедал.</span>'''
 
  
::'''''Примечание.''''': Для распаковки нам понадобятся программы, одну из них можно скачать тут [http://www.rarlab.com/ WinRAR], а другую тут [http://www.7-zip.org/ 7zip].
 
  
:'''2.''' Запустите клиент '''''но не логинтесь!''''' Перед вами окошко с логином и вводом пароля, запускаем WPE.
+
===WPE (Winsock Packet Editor)===
 +
'''1.''' [http://wpepro.net/index.php?categoryid=4 Скачайте WPE] и распакуйте.
 +
:* Перед скачиванием, отключите ваш антивирус, так как он может принять WPE за вирус и удалить его. '''Вы скачиваете WPE под свою ответственность''', никто иной не будет виноват, если ваш компьютер сломается.
 +
:* Вам может потребоваться программа для распаковки архива с WPE. Наиболее распространённые ахиваторы [http://www.rarlab.com/ WinRAR] и [http://www.7-zip.org/ 7zip].
  
:'''3.''' В окне WPE кликаем на кнопочку '''''Target Programs'''''.
+
'''2.''' Запустите клиент Ragnarok Online '''''но не вводите пока логин и пароль!''''' Оставьте сейчас Ragnarok и запустите WPE.
::[[File:Targetyc.png]]
 
  
 +
'''3.''' В окне WPE щёлкните по кнопке '''Target Program'''.
 +
:[[File:Targetyc.png]]
  
::В появившемся окошке находим экзешник с вашим клиентом и нажамаем OPEN.
 
:::[[File:clickrag.png]]
 
  
::'''''Примечание.''''' Некоторые .exe файлы сныканы, т.е переименованы (например xxxRO.exe имеет название binadds.dll), так что особо не парьтесь.
+
'''4.''' Откроется новое окно, найдите в нём запущенный клиент Ragnarok Online и дважды щёлкните по нему.
 +
:[[File:Clickrag.png]]
 +
:'''''Примечание:''''' Некоторые серверы скрывают свой настоящий выполняемый файл, переименовывая его (например из xxxRO.exe в xxxx.dll или xxxxx.bin), так что не переживайте, если запущенный файл не является .exe-файлом.
  
  
:'''4.''' Далее жмем '''Play button'''.
+
'''5.''' В окне WPE щёлкните по кнопке '''Play button'''.
::[[File:play.png]]
+
:[[File:Play.png]]
  
  
:'''5.''' Логинемся. Вам не нужно подключатся к мап-серверу, только логинимся т.е вводим логин пароль и ОК.
+
'''6.''' Перейдите назад в окно клиента Ragnarok Online и попробуйте залогиниться.
::'''''Примечание.''''' Чтобы не увели аккаунт не выкладывайте полную информацию о своем логине.
+
:'''''Примечание:''''' Не обязательно вводить правильные логин и пароль.
  
  
:'''6.''' Возвращаемся к WPE и жмем '''Stop button'''
+
'''7.''' Вернитесь в окно WPE и щёлкните по кнопке '''Stop button'''.
::[[File:stopjw.png]]
+
:[[File:Stopjw.png]]
  
  
::A window will open with some packets. Here we can find the server's '''version and master_version, IP and port'''.
+
'''8.''' Откроется новое окно с перехваченными данными. Один из отправленных на сервер пакетов будет '''логин-пакетом''', в котором находятся '''version''', '''master_version''', '''IP-адрес''' и '''порт''' сервера. Запишите значения на бумажку, они потом пригодятся. Логин-пакеты отличаются от сервера к серверу. Логин-пакеты начинаются с '''64 00''' или '''02 B0'''. Логин-пакету могут предшествовать другие, например пакет '''02 04''' длиной 18 байт (в этом случае нужно настроить опцию '''clientHash''').
::The packets will be different on each server, but most of the time it will start with '''64 00'''.
+
:На следующем рисунке показан перехваченный логин-пакет, содержащий '''version''' и '''master_version'''.
::These are the packets that contains the version and master_version. Write them down because they are going to be used later.
+
:[[File:Inforb.png]]
:::[[File:inforb.png]]
+
:'''Условные обозначения''':
 +
# - version. Беззнаковое целочисленное значение длиной 4 байта, записанное в [http://ru.wikipedia.org/wiki/Шестнадцатеричная_система_счисления шестнадцатиричной системе счисления]. Младший байт слева (т.н. [http://ru.wikipedia.org/wiki/Порядок_байтов little-endian]).
 +
# - IP-адрес
 +
# - порт
 +
# - master_version. Беззнаковое целочисленное значение длиной 1 байт, записанное в [http://ru.wikipedia.org/wiki/Шестнадцатеричная_система_счисления шестнадцатиричной системе счисления].
  
::'''Legend''':
 
:#Version.
 
:#IP
 
:#Port
 
:#Master version
 
  
 +
'''9.''' Чтобы перевести значения '''version''' и '''master_version''' в понятный для OpenKore десятеричный формат, смотри раздел - [[Подключение бота к серверу#Перевод чисел из 16-ричной системы в 10-тичную|перевод чисел в десятеричную систему]].
  
:'''7.''' Now, the '''version and master version''' need to be converted, because they are a hexadecimal number (base-16) and Kore expects a decimal number (base-10). Use [http://www.statman.info/conversions/hexadecimal.html this calculator]. With the numbers converted, you can now make openkore use it. See [[Connectivity Guide#Passing server information to OpenKore|Passing server information to OpenKore]].
+
===Wireshark===
 +
'''1.''' [http://www.wireshark.org/download.html Скачайте] и установите Wireshark.
  
 +
'''2.''' Запустите клиент Ragnarok Online '''''но не вводите пока логин и пароль!''''' Оставьте сейчас Ragnarok и запустите Wireshark.
  
===Wireshark===
+
'''3.''' В окне Wireshark перейдите по меню '''Capture > Options''' или нажмите '''Ctrl + K'''.
:'''1.''' Download and install Wireshark. (Download link [http://www.wireshark.org/download.html here]).
+
:[[File:Capiture.png]]
  
:'''2.''' Open your ragnarok but '''''don't login yet!''''' Leave it on the login screen and open Wireshark.
 
  
:'''3.''' At Wireshark's window, go to '''Capture > Options''' on the upper menu or press '''Ctrl + K'''.
+
'''4.''' В открывшемся окне в правом верхнем поле выберите сетевой интерфейс, с которого вы хотите перехватывать пакеты. Если вы не уверены, какой сетевой интерфейс использовать, выберите тот, у которого прописан ваш IP-адрес в интернете, или же хотя бы не стоит '''''unknown'''''. Можно также перепробовать их все и выбрать тот, с которого можно перехватить пакеты. Все остальные параметры найстройте так, как показано на рисунке.
::[[File:Capiture.png]]
+
:[[File:Options.png]]
  
  
:'''4.''' In the "Interface" dropdown box, select an interface which you want to capture on. If you're unsure which interface to use, select the one whose IP address is equal to your ip address or is not '''''unknown'''''. Alternatively you can try all of them and use the one that records the packets. Set the others settings like the images bellow:
+
'''5.''' После настройки всех параметров, щёлкните по кнопке '''Start''' и перейдите назад в окно клиента Ragnarok Online. Попробуйте залогиниться.
::[[File:options.png]]
+
'''''Примечание:''''' Не обязательно вводить правильные логин и пароль.
  
  
:'''5.''' After configuring the options, click on '''Start button''' and go back to your ragnarok and login. Loginning to the map-server is not needed, the login-server is enough.
+
'''6.''' После ввода логина и пароля вернитесь в окно Wireshark и щёлкните по кнопке '''Stop'''.
::'''''Note.''''' Valid information are not needed.
+
:[[File:Stop.png]]
  
:'''6.''' After loginning, go back to Wireshark and press the '''Stop button'''.
 
::[[File:stop.png]]
 
  
 +
'''7.''' В главном окне Wireshark можно увидеть записи о перехваченных TCP-сегментах. Отсейте ненужные, используя в фильтре пакетов введённый вами логин.
 +
:Введите в поле '''Filter''' одно из двух:
 +
  eth contains "xxxxxx" или eth contains xxxxxx
 +
:Вместо '''''xxxxxx''''' подставьте логин, который вы использовали при входе в Ragnarok, и нажмите '''Enter'''. В данном пример логин был '''Mushroom'''.
 +
:[[File:Filter.png]]
  
:'''7.''' In the Wireshark main window you can see the TCP segments that were captured. Fill in the packet filter, but what to fill in depends on the username you used to login.
 
::Enter this in the "Filter" text box:
 
  eth contains "xxxxxx" or eth contains xxxxxx
 
  
::Replace '''''xxxxxx''''' with your username that you used to login and press enter. In my example, my username was Mushroom.
+
'''8.''' Теперь останется только одна запись о перехваченном пакете, щёлкните по записи и получите кое-какую информацию о пакете. Здесь вы найдёте '''IP-адрес''' и '''порт''' сервера.
:::[[File:filter.png]]
+
:[[File:Ip.png]]
 +
: Запишите '''IP-адрес''' и '''порт''' сервера на бумажку, они понадобятся позже.
  
 +
 +
'''9.''' Щёлкните по этой же записи правой кнопкой мыши, в появившемся меню выберите '''Follow TCP Stream'''.
 +
:[[File:Tcp.png]]
  
:'''8.''' You will now have only one entry, click on it and you will have some information about it. This is where you are going to get the server's IP and port.
 
::[[File:ip.png]]
 
  
 +
'''10.''' Откроется новое окно, внизу слева выберите '''Hex Dump'''.
 +
:[[File:Hex.png]]
  
::: Write down your ip and port because you are going to need them later.
 
  
+
'''11.''' Теперь у нас есть логин-пакет. Запишите '''version''' и '''master version''' на бумажку.
:'''9.''' On the entry again, right-click on it and go to '''Follow TCP Stream'''.
+
:[[File:Packets.png]]
::[[File:tcp.png]]
 
  
  
:'''10.''' A new window will open, in the bottom left, select '''Hex Dump'''.
+
'''12.''' Чтобы перевести значения '''version''' и '''master version''' в понятный для OpenKore десятеричный формат, смотри раздел - [[Подключение бота к серверу#Перевод чисел из 16-ричной системы в 10-тичную|перевод чисел в десятеричную систему]].
::[[File:hex.png]]
 
  
 +
===Определение charBlockSize===
 +
'''1.''' С помощью клиента создать чара на аккаунте, закрыть клиент.
  
:'''11.''' Now we got the login packets. Take a look at it and write down the packets that contains the '''version and master version''' numbers. They are marked on the image bellow.
+
'''2.''' Включить в боте [[debugPacket received|дебаг входящих пакетов]].
::[[File:packets.png]]
 
  
 +
'''3.''' Законнектиться ботом, дойти до чар селлекта (чара не выбирать), посмотреть размер пакета с чарами, закрыть бота.
  
:'''12.''' With the informations above, you have to convert them, because they're a hexadecimal number (base-16) and Kore expects a decimal number (base-10). You can use [http://www.statman.info/conversions/hexadecimal.html this calculator]. With the numbers converted, you can now make openkore use it. See the section bellow for how to use it.
+
'''4.''' С помощью клиента создать второго чара на аккаунте, закрыть клиент.
  
 +
'''5.''' Законнектиться ботом, дойти до чар селлекта (чара не выберать), посмотреть новый размер пакета с чарами, закрыть бота.
  
==Passing server information to OpenKore==
+
'''6.''' Подсчитать разницу между вторым и первым пакетами - это и будет значение '''charBlockSize'''.
OpenKore reads server information from a file named servers.txt. The file is on ''tables'' folder.
 
  
If your server is not listed in the file, then add a new entry. If your server is already listed, then modify the existing entry. Here is the format:
+
== Перевод чисел из 16-ричной системы в 10-тичную ==
 +
Выдернутые из перехваченных пакетов '''version''' и '''master version''' записаны сейчас в шестнадцетиричном формате (основание системы счисления равно 16), а OpenKore ожидает их увидеть в десятичном формате (основание равно 10). Поэтому их надо перевести из одной системы счисления в другую.  
  
[Server's Name] -> Your server's name. Must be between '[' and ']'
+
Перевести числа в десятичную систему счисления можно при помощи обычного калькулятора Windows.
ip x.x.x.x -> Your server's IP.
 
port xxxx -> Your server's port number.
 
master_version xx -> Your server's master_version. The one that you converted from hex to
 
  decimal.
 
version xx -> The server's version. The one that you converted from hex to decimal.
 
serverType xxx -> Your serverType. For privates default one is 8_4. Officials one have
 
  their own.
 
charBlockSize xx -> Set this if you are getting wrong char name and job name. Default is 106.
 
serverEncoding xxxx -> Character encoding. More information read bellow.
 
private 1 -> Only set this if the bot connects to the wrong map server IP.
 
  Used by private servers.
 
recvpackets xxxxxx.txt -> Your recvpackets' name file. It this option is not set, it will use
 
  the default one (recvpackets.txt). More informations read bellow.
 
  
 +
'''1.''' Откройте калькулятор Windows '''Start > Accessories > Calculator'''.
 +
:[[File:calc.png]]
  
And here is an example:
+
'''2.''' Откройте меню '''View''' и выберите пункт '''Scientific'''.
[MushroomRO]
+
:[[File:sci.png]]
ip 127.0.0.1
 
port 6900
 
master_version 16
 
version 20
 
serverType 8_4
 
charBlockSize 108
 
serverEncoding Western
 
recvpackets mush-recvpackets.txt
 
  
After having modified servers.txt, restart OpenKore.
+
'''3.''' Выберите шестнадцетиричную систему счисления, щёлкнув по переключателю '''Hex'''.
 +
:[[File:hexa.png]]
  
 +
'''4.''' Введите в калькулятор полученное ранее шестнадцетиричное значение '''master_version''' или '''version'''. В данном примере шестнадцетиричное значение '''master_version''' равно '''10'''.
 +
:[[File: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).
  
===Character encoding===
+
'''5.''' Выберите десятичную систему счисления, щёлкнув по переключателю '''Dec'''.
The character encoding cannot be automatically detected, but here's a list of possible character encodings that you can use:  
+
:[[File:dec.png]]
  
{| class="wikitable" border="1" cellspacing="0"
+
'''6.''' После этого число автоматически переведётся в десятичную систему счисления.
|-style=background-color:#F9F9F9;
+
:[[File:done.png]]
!Encoding
 
!Language used
 
|-
 
|align=center|Western
 
|  English, or a language which uses a Roman-based alphabet. For example, German, French, Portuguese, etc., but also Indonesian.  
 
|-
 
|align=center|Simplified Chinese
 
|  Simplified Chinese.
 
|-
 
|align=center|Traditional Chinese
 
|  Traditional Chinese.
 
|-
 
|align=center|Korean
 
|  Korean
 
|-
 
|align=center|Russian
 
|  Russian, or a Cyrillic-based language.  
 
|-
 
|align=center|Japanese
 
|  Japanese
 
|-
 
|align=center|Thai
 
|  Thai
 
|}
 
  
==Packet Length Extractor==
+
Следуя приведённой инструкции необходимо перевести в десятичную систему счисления настройки сервера '''master_version''' и '''version'''.
Packet Length Extractor is a program which retreives the packet lengths from the RO client and stores them in recvpackets.txt.
 
If you're having server problems, such as:
 
*Packet Tokenizer: Unknown switch: xxxx
 
*Getting disconnected after a few seconds
 
*NPCs, players and monsters are not recognized by Kore
 
  
Then generating a new recvpackets.txt might solve the problem. It's advisable to '''''always''''' extract the recvpackets for any server that you will play. The file must be on tables folder.
+
== Прописать настройки сервера в OpenKore ==
 +
OpenKore читает настройки сервера из файла '''tables\servers.txt'''. Если вашего сервера нет в списке, тогда добавьте в этот файл новую запись. Если же ваш сервер уже есть в списке, тогда измените существующую запись. После изменения файла '''servers.txt''' следует перезапустить OpenKore.
  
'''''Note.''''' You may have problems extracting the recvpackets if your server's client has some kind of protection.
+
=== Синтаксис ===
 +
Записи в файле 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 <булев флаг>
 +
 
 +
preLoginCode <булев флаг>
 +
 +
paddedPackets <булев_флаг>
 +
paddedPackets_attackID <заголовки_пакетов>
 +
paddedPackets_skillUseID <заголовки_пакетов>
 +
 +
masterLogin_packet <заголовок_пакета>
 +
 +
dead <булев флаг>
 +
dead_message <текст>
 +
title <название_сервера>
 +
 +
pinCode <булев_флаг>
 +
charDeleteDateType <булев_флаг>
 +
blockingPlayerCancel <булев_флаг>
 +
rankingSystemType <булев_флаг>
 +
itemListType <булев_флаг>
  
 +
=== Обязательные ===
 +
; [<имя_сервера>]
 +
: Название игрового сервера, '''должно быть''' между квадратных скобок '''[''' и ''']'''.
 +
{{:ip}}
 +
{{:port}}
 +
{{:version}}
 +
{{:master_version}}
 +
{{:serverType}}
 +
{{:serverEncoding}}
 +
{{:charBlockSize}}
 +
{{:addTableFolders}}
  
===About Recvpackets===
+
=== Необязательные ===
The network data that the server sends to Kore, is a byte stream. Kore must be able to recognize messages inside that byte stream to be able to do something with it. But the size of the messages can vary from to server to server. Recvpackets.txt contains information about the size of each message, so Kore can correctly split the byte stream into messages.
+
{{:private}}
 +
{{:recvpackets}}
 +
{{:chatLangCode}}
 +
{{:storageEncryptKey}}
 +
{{:field}}
 +
{{:clientHash}}
 +
{{:captcha}}
 +
{{:gameGuard}}
 +
{{:secureLogin}}
 +
<!--
 +
сюда включены:
 +
secureLogin_type <флаг>
 +
secureLogin_requestCode <hex_строка>
 +
secureLogin_account <булев_флаг>
 +
-->
 +
{{:preLoginCode}}
 +
{{:masterLogin_packet}}
 +
<!--
 +
paddedPackets [<булев_флаг>]
 +
paddedPackets_attackID [<заголовки_пакетов>]
 +
paddedPackets_skillUseID [<заголовки_пакетов>]
 +
-->
 +
{{:OTP_ip}}
 +
{{:OTP_port}}
 +
{{:dead_message}}
 +
{{:title}}
 +
{{:pinCode}}
 +
{{:charDeleteDateType}}
 +
{{:blockingPlayerCancel}}
 +
{{:rankingSystemType}}
 +
{{:itemListType}}
 +
{{:itemListUseOldType}}
 +
{{:ignoreAntiCheatWarning}}
  
 +
=== Пример ===
 +
[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
  
===Download===
+
'''Примечание.''' Смотри также [https://ro-fan.ru/viewtopic.php?f=7&t=3934 (!) recvpackets.txt /для каждого сервака свой? (почти FAQ)].
There are two programs you can use to extract the recvpackets:
 
*JCV's RO Tools
 
*OpenKore Packet Length Extractor
 
 
 
It's better to use JCV's RO Tools as it is more up to date and have some fixes for newer clients. Also it's much easier to maintain, but it has undesirable and outdated options in addition to the packet extractor.
 
*[http://www.megaupload.com/?d=7PXQ9J1N JCV's RO Tools v1.0.3]
 
*[http://www.megaupload.com/?d=MLUVJLSL OpenKore Packet Length Extractor v1.1.0]
 

Текущая версия на 03:45, 12 марта 2023

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

Вместе с 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 <булев флаг>
 
preLoginCode <булев флаг>

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. Это "язык" общения 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 (по умолчанию), 175.
charBlockSize kRO дата Версия OpenKore Примечание
периодически появляются новые значения charBlockSizes
175 2020-10-07 a6d3f87 HP and SP int64
155 (по умолчанию) a6d3f87 exp int64
147 2014-10-22 df50355 walk_speed long
146 3aeba6a
145 2014-10-16 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 last_map 16 Bytes
124 3b07ffe bRO (bitfrost update)
116 addabe5
112 9862177 Topic on the forum
108 9862177 Topic on the forum
106

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

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

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


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

private <булев_флаг>
Иногда при подключение OpenKore к map-серверу видно, что он пытается соединиться по неправильному IP-адресу (не тот, который прописан в параметре ip). Это встречается на некоторых пиратских серверах. В этом случае вам надо установить значение 1.
recvpackets <имя_файла>
Имя файла с пакетами для вашего сервера. Значение по умолчанию: recvpackets.txt. Поиск файла ведётся по списку табличных папок - addTableFolders.
Пакеты - это своеобразный язык общение клиента с сервером. С помощью них бот принимает и отправляет информацию на сервер РО.
У каждого сервера свой набор пакетов, поэтому их следует извлечь. См. руководство по извлечению ресивпакетов.
chatLangCode <булев_флаг>
Установите 1 если ваш сервер использует в сообщениях чата так называемые "language codes". Обычно в консоли OpenKore такие сообщения выглядят как: |00 тро-ло-ло
storageEncryptKey [<ключи_шифрования>]
В этом параметре OpenKore хранит так называемый "storage encryption key" - ключи шифрования для открытия кафры.
field_<локация> <имя файла>
Данный параметр позволяет задать синоним к имени локации. Этот параметр полезен, если на вашем сервере используются устаревшие или модифицированные локации. Например, вы используете один дистрибутив OpenKore для разных серверов РО. На одном из них используется старый моррок (файл morocc-old.fld), а на втором - новый (разрушенный) (файл morocc.fld), но в игре эти локации называются одинаково: "morocc". Тогда в настройках первого сервера следует указать field_morocc morocc-old, в настройках второго можно ничего не указывать, т.к. будет использоваться файл по умолчанию: morocc.fld
Смотри также гайд по созданию *.fld-файлов: FLD Creation Guide.
clientHash <строка_16-ричных_чисел>
Клиенты RO начиная с 2013 года для подключения к серверу могут отсылать первым пакетом MD5-сумму файла клиента. Это своеобразная защита от модификации ragexe.exe. Заголовок таких пакетов: 0204. Если в WPE вы перехватили первый пакет с таким заголовком, то следует настроить данную опцию, например: clientHash 82d12c914f5ad48fd96fcf7ef4cc492d
Это значение будет видно в перехваченном пакете. Также можно подсчитать MD5-сумму файла клиента. Обычно файл называется ragexe.exe. Не следует его путать с лаунчером.
captcha <булев_флаг>
Установите 1 если для входа на ваш сервер требуется ввести капчу.
gameGuard <флаг>
Укажите значение в случае использования на сервере GameGuard или HackShield. Смотри также Poseidon.
Возможные значения: 0, 1, 2
secureLogin <флаг>
Укажите значение в случае использования на сервере "secureLogin".
secureLogin_type <флаг>
Укажите тип "secureLogin" в случае его использования на сервере. От этого значения зависит какой пакет будет отправлен на сервер.
secureLogin_requestCode <hex_строка>
OpenKore будет использовать для подключения к серверу код, прописанный в этом параметре. Если в этом параметре указано какое-либо значение, то параметр "secureLogin_type" будет проигнорирован.
Значением параметра является <hex_строка>, т.е. строка из байтов в шестнадцатеричном представлении, разделённых пробелами, например: 04 02 22 37 D7 FC
secureLogin_account <булев_флаг>
Похоже, что это используется только при "secureLogin = 3" в пакете '01FA' 'master_login'
preLoginCode <булев_флаг>
Если на вашем сервере используется отправка специального пакета перед отправкой 'master_login', то здесь следует поставить "1". Похоже сейчас это нигде не используется.
masterLogin_packet <заголовок_пакета>
Переопределяет заголовок логин-пакета (но не трогает его структуру). Если заголовок логин-пакета отличается от 0064 (стандарт), то для режима XKore 2 следует обязательно указать правильный заголовок логин-пакета.
Возможные значения: 0825
OTP_ip <ip-адрес или dns-имя>
IP-адрес или DNS-имя логин-сервера (при использовании OTP - One Time Password)
OTP_port <номер>
Номер порта логин-сервера (при использовании OPT - One Time Password)
dead <булев_флаг>
Установите 1 если ваш сервер закрылся. Такой сервер нельзя выбрать из списка. Если сервер уже прописан в конфигурации, то выдаётся соответствующее сообщение об ошибке.
Добавлено в ревизии 8566.
dead_message <сообщение>
Пояснение о закрытии сервера. Сообщение по умолчанию: Server you've selected (%s) is now marked as dead.
Пример для euRO сервера будет отображаться: euRO was closed on September 30, 2010. There used to be transfers to fRO, check out their website.
# http://euro-ro.net/
[Europe - euRO]
dead 1
dead_message euRO was closed on September 30, 2010. There used to be transfers to fRO, check out their website.
title <название_сервера>
Название сервера, которое будет показано в списке при выборе сервера. Можно принимать любое значение, в отличии от "[<имя_сервера>]", которое лучше не трогать.
Пример: вместо 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 (0B08 ~ 0B0B) пакеты вместо обычного списка.
Смотри github PR#2887
itemListUseOldType <булев_флаг>
Установите 1 если ваш сервер использует старый тип предметов при отображении списка предметов.
Смотри github PR#3700
ignoreAntiCheatWarning <булев флаг>
Если включено, то OpenKore будет игнорировать предупреждения от систем защиты. Иначе бот будет закрыт.
На данный момент это работает только с защитой EAC (Easy Anti-Cheat).


Пример

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