Diablo 1.11b quest! PVPGN + d2gs + wine на freebsd 5.5

Категория: / DEV Блог / Разное
Терка следующая.
Под фрей запустить сервер diablo 2 closed (d2gs 1.11b) который без Xов, удаленно по SSH.

Ставится pvpgn. Последняя версия 1.8.0. (есть в портах).
По его настройке в сети и так уже полно доков, поэтому шаг пропускаем.
Настраивается, инсталицца! В конфигах все грамотно расписано, получаем рабочие сервисы:

BNETD,D2CS,D2DBS

Между собой линкуются. Варик, старик - работают без проблем.
Далее нужно поставить d2gs - гейм сервер дийаблы.

_http://www.pvpgn.pl/d2gs/

Польские друзья любезно предоставили возможность скачать версию сервера для 1.11b
Для работы d2gs необходим windows.

Ставим wine (собирается неуклюже из портов и тянет с собой ненужных либ для поддержки иXов)

~/scripts#=> pkg_info | grep wine
wine-0.9.42,1 Microsoft Windows compatibility layer for Unix-like systems

Всякие ttydrv по советам умных дядек не работают, поэтому ставим Xvfb (то есть юзаем).

#!/bin/sh
# скрипт для запуска виртуального буффера
killall Xvfb
/usr/X11R6/bin/Xvfb :1 -screen 0 1x1x32 &


Файлы, которые нужны для сервера.
Проверено что на системе windows xp sp2 сервер успешно выполняет свои функции..

-rw-r--r--  1 j4ck  wheel     131072 11 авг 22:40 Bnclient.dll
-rw-r--r--  1 j4ck  wheel     159744 11 авг 22:40 D2CMP.dll
-rw-r--r--  1 j4ck  wheel    1093632 11 авг 22:40 D2Client.dll
-rw-r--r--  1 j4ck  wheel     679936 11 авг 22:40 D2Common.dll
-rw-r--r--  1 j4ck  wheel      69632 11 авг 22:40 D2DDraw.dll
-rw-r--r--  1 j4ck  wheel     110592 11 авг 22:40 D2Direct3D.dll
-rw-r--r--  1 j4ck  wheel      81920 11 авг 22:40 D2GS.exe
-rw-r--r--  1 root     wheel         83 13 авг 22:02 D2GSLib-Debug.txt
-rw-r--r--  1 j4ck  wheel    1138688 11 авг 22:40 D2Game.dll
-rw-r--r--  1 j4ck  wheel      53248 11 авг 22:40 D2Gdi.dll
-rw-r--r--  1 j4ck  wheel      98304 11 авг 22:40 D2Glide.dll
-rw-r--r--  1 j4ck  wheel      77824 11 авг 22:40 D2Lang.dll
-rw-r--r--  1 j4ck  wheel     167936 11 авг 22:40 D2Launch.dll
-rw-r--r--  1 j4ck  wheel      49152 11 авг 22:40 D2MCPClient.dll
-rw-r--r--  1 j4ck  wheel     126976 11 авг 22:40 D2Multi.dll
-rw-r--r--  1 j4ck  wheel      49152 11 авг 22:40 D2Net.dll
-rw-r--r--  1 j4ck  wheel     143360 11 авг 22:40 D2Win.dll
-rw-r--r--  1 j4ck  wheel      77824 11 авг 22:40 D2gfx.dll
-rw-r--r--  1 j4ck  wheel      98304 11 авг 22:40 D2sound.dll
-rw-r--r--  1 j4ck  wheel     212992 11 авг 22:40 Fog.dll
-rw-r--r--  1 j4ck  wheel       9972 11 авг 22:40 ItemConfig.dat
-rw-r--r--  1 j4ck  wheel    5605809 11 авг 22:42 Patch_D2.mpq
-rw-r--r--  1 j4ck  wheel      95232 11 авг 22:40 SmackW32.dll
-rw-r--r--  1 j4ck  wheel     372736 11 авг 22:40 Storm.dll
-rw-r--r--  1 j4ck  wheel     200704 11 авг 22:40 binkw32.dll
-rw-r--r--  1 j4ck  wheel  266908965 11 авг 22:41 d2char.mpq
-rw-r--r--  1 j4ck  wheel  256225123 11 авг 22:41 d2data.mpq
drwxr-xr-x  2 root     wheel        512 12 авг 22:37 d2e/
-rw-r--r--  1 j4ck  wheel  250156780 11 авг 22:42 d2exp.mpq
-rw-r--r--  1 root     wheel      32158 13 авг 22:02 d2ge.log
-rw-r--r--  1 root     wheel  115275871 13 авг 22:29 d2gs.log
-rw-r--r--  1 j4ck  wheel       2333 11 авг 22:42 d2gs.script
-rw-r--r--  1 j4ck  wheel      80384 11 авг 22:40 d2server.dll
-rw-r--r--  1 j4ck  wheel       4057 11 авг 22:53 d2server.ini
-rw-r--r--  1 j4ck  wheel   51948991 11 авг 22:42 d2sfx.mpq
-rw-r--r--  1 j4ck  wheel  163021838 11 авг 22:42 d2speech.mpq
-rw-r--r--  1 root     wheel          0 11 авг 22:47 debug.log
-rw-r--r--  1 j4ck  wheel     180224 11 авг 22:40 ijl11.dll
-rwxrwxrwx  1 quake    quake     413696 11 авг 23:24 msvcp60.dll*


msvcp60.dll скопируйте со своего компьютра (его нет в комплекте wine'а).

Отредактируйте файл d2.reg замените там 2 IP сервера на свои
и выключите EnableNtMode, а то не заведется.

Выполните wine regedit d2.reg, и проверяйте system.reg на наличие новоиспеченных записей для d2gs.

Скрипт запуска сервера

#!/bin/sh
 
export WINEDEBUG='warn+all,fixme+all,err+all'
export DISPLAY=:1.0
wine c:\\d2s\\d2gs.exe


Полагаем, что bnetd с сопутствующими сервисами запущен, стартуем скрипт.
Сообщений куча, не пугайтесь. Загружается долго, моя предполагает, что обработка базы данных реестра тормозит.
Об этом говорят сообщения, если запустить wine с отладкой сообщений в режиме trace.

Начинается все с...

~/.wine/drive_c/d2s#=> ./start.sh
warn:file:wine_nt_to_unix_file_name L"\\??\\C:\\d2s\\d2gs.exe" -> "/root/.wine/dosdevices/c:/d2s/D2GS.exe" required a case-insensitive search
warn:file:wine_nt_to_unix_file_name L"\\??\\C:\\d2s\\d2gs.exe" -> "/root/.wine/dosdevices/c:/d2s/D2GS.exe" required a case-insensitive search
warn:module:alloc_module disabling no-exec because of L"d2gs.exe"
warn:file:wine_nt_to_unix_file_name L"d2gs.exe.manifest" not found in /root/.wine/dosdevices/c:/d2s
warn:ntdll:NtCreateFile L"\\??\\C:\\d2s\\d2gs.exe.manifest" not found (c0000034)
warn:file:wine_nt_to_unix_file_name L"USER32.dll" not found in /root/.wine/dosdevices/c:/d2s
warn:ntdll:NtQueryFullAttributesFile L"\\??\\C:\\d2s\\USER32.dll" not found (c0000034)
warn:file:wine_nt_to_unix_file_name L"USER32.dll" not found in /root/.wine/dosdevices/z:/disk01/diablo2
warn:ntdll:NtQueryFullAttributesFile L"\\??\\Z:\\disk01\\diablo2\\USER32.dll" not found (c0000034)
warn:file:wine_nt_to_unix_file_name L"USER32.dll" not found in /root/.wine/dosdevices/c:/windows/system32
warn:ntdll:NtQueryFullAttributesFile L"\\??\\C:\\windows\\system32\\USER32.dll" not found (c0000034)
warn:file:wine_nt_to_unix_file_name L"USER32.dll" not found in /root/.wine/dosdevices/c:/windows/system
warn:ntdll:NtQueryFullAttributesFile L"\\??\\C:\\windows\\system\\USER32.dll" not found (c0000034)
warn:file:wine_nt_to_unix_file_name L"USER32.dll" not found in /root/.wine/dosdevices/c:/windows
warn:ntdll:NtQueryFullAttributesFile L"\\??\\C:\\windows\\USER32.dll" not found (c0000034)
#
# минут 5 точно думает.
# машинка - 1Ghz/400Mb celeron
#
# запускается и начинает работать сообщениями...
#
warn:file:wine_nt_to_unix_file_name L"\\??\\C:\\d2s\\D2Server.ini" -> "/root/.wine/dosdevices/c:/d2s/d2server.ini" required a case-insensitive search
warn:file:wine_nt_to_unix_file_name L"\\??\\C:\\d2s\\D2Server.ini" -> "/root/.wine/dosdevices/c:/d2s/d2server.ini" required a case-insensitive search
warn:file:wine_nt_to_unix_file_name L"\\??\\C:\\d2s\\D2Server.ini" -> "/root/.wine/dosdevices/c:/d2s/d2server.ini" required a case-insensitive search
warn:file:wine_nt_to_unix_file_name L"\\??\\C:\\d2s\\D2Server.ini" -> "/root/.wine/dosdevices/c:/d2s/d2server.ini" required a case-insensitive search
warn:file:wine_nt_to_unix_file_name L"\\??\\C:\\d2s\\D2Server.ini" -> "/root/.wine/dosdevices/c:/d2s/d2server.ini" required a case-insensitive search
warn:file:wine_nt_to_unix_file_name L"\\??\\C:\\d2s\\D2Server.ini" -> "/root/.wine/dosdevices/c:/d2s/d2server.ini" required a case-insensitive search
warn:file:wine_nt_to_unix_file_name L"\\??\\C:\\d2s\\D2Server.ini" -> "/root/.wine/dosdevices/c:/d2s/d2server.ini" required a case-insensitive search
warn:file:wine_nt_to_unix_file_name L"D2GEVar.dat" not found in /root/.wine/dosdevices/c:/d2s
warn:ntdll:NtCreateFile L"\\??\\C:\\d2s\\D2GEVar.dat" not found (c0000034)
warn:file:CreateFileW Unable to create file L"D2GEVar.dat" (status c0000034)
warn:msvcrt:MSVCRT__sopen :failed-last error (2)


Мораль басни

После поднятия всех сервисов sockstat для них примерно такой

root     wineserver 7090  59 tcp4   *:4000                *:*
root     wineserver 7090  80 tcp4   172.16.13.37:50139    172.16.13.37:6114
root     wineserver 7090  91 tcp4   172.16.13.37:55063    172.16.13.37:6113
root     d2dbs      727   1  tcp4   172.16.13.37:6114     *:*
root     d2cs       725   4  tcp4   172.16.13.37:6113     *:*
root     d2cs       725   6  tcp4   172.16.13.37:6113     172.16.13.37:55063
root     d2cs       725   8  tcp4   172.16.13.37:6113     172.16.23.35:2101
quake    bnetd      723   6  tcp4   172.16.13.37:6112     *:*
quake    bnetd      723   9  tcp4   *:6200                *:*
quake    bnetd      723   10 tcp4   172.16.13.37:9876     *:*
quake    bnetd      723   11 tcp4   172.16.13.37:6112     172.16.13.37:52381
quake    bnetd      723   12 tcp4   172.16.13.37:6112     172.16.23.35:2059
quake    bnetd      723   17 tcp4   172.16.13.37:6112     172.16.105.91:1044


Пытаемся создать игру в diablo 2:
Показывается заставка (монах пытается зайти в храм). Полминуты ничего не происходит, затем сообщение "failed to connect".
(прим.: в нормальных условиях вход в храм озаряется ярким светом и игра стартует).

Заходим telnetом на 127.0.0.1:8888, и видим

Connetion to D2CS (172.16.13.37): connected
Connetion to D2DBS(172.16.13.37): connected
 
Game Server Net Statistic: (rate is KBytes/second)
        RecvPkts    RecvBytes   SendPkts    SendBytes
D2CS           8          216          7          217
D2DBS          0            0          2           35


Коннект сервисов осуществлен, но почему то нет коммуникации между d2gs и d2dbs...
Обратите внимание на НУЛИ напротив D2DBS... непорядок!

В логах

d2ge.log

08/13 23:24:56.175  (*)D2Server1.11b: Version 1.11b patch build 27 by marsgod. 2007-07-05
08/13 23:24:56.184  (*)D2GSPreInit: Diablo2 Game Server Library 0x010A0304
08/13 23:24:56.184  (*)D2GSPreInit: D2GSLib Version: D2GSLib 1.11.0.0 Build On Feb 16 2007 21:13:10
08/13 23:24:56.184  (*)D2GSPreInit: Core Game Version: Diablo2 LOD v1.11b
08/13 23:24:56.201  (*)D2GSPreInit: Running on Windows 2000 Version 5.0 Service Pack 4 (Build 2195)
08/13 23:24:56.201  (*)D2GSPreInit: CPU Number: 1
08/13 23:24:56.201  (*)D2GSPreInit: CPU Infomation: GenuineIntel (Type: 0 Family: 6 Model: 8 Stepping: A Brand: 1)
08/13 23:24:56.213  (*)D2GSPreInit: CPU Speed: Approx. 1002 MHz
08/13 23:24:56.213  (*)D2GSPreInit: Physical Memory: 291/379 MB
08/13 23:24:56.213  (*)D2GSPreInit: Virtual Memory: 2047/2047 MB
08/13 23:24:56.213  (*)D2GSPreInit: PageFile: 582/670 MB
08/13 23:24:56.214  (*)D2GSPreInit: Computer Name: j4ckHOST
08/13 23:24:56.214  (*)D2GSPreInit: User Name: root
08/13 23:24:57.011  (*)D2GSPreInit: Maxinum Game Number is 202
08/13 23:24:57.012  (*)PatchFogPool: Pre-Allocate 204 Pools=0x01680000  (0x12F690 bytes)
08/13 23:24:57.033  (*)PatchModule: 39 of 39 Patches Successfully Applied
08/13 23:24:57.042  (*)ScriptLoad: 11 Patches Loaded From Script File d2gs.script
08/13 23:24:57.045  (*)PatchModule: 11 of 11 Patches Successfully Applied
08/13 23:24:57.055  (*)D2GSInit: Starting up Game Server,Initializing...
08/13 23:24:57.055  (*)D2GSInit: Server Name: Diablo II Game Server
08/13 23:24:57.601  (*)D2GSInit: MPQs Initialized
08/13 23:24:57.803  (*)D2GSInit: Language Initialized
08/13 23:24:57.804  (*)D2GSInit: Pre-Cache Enabled
08/13 23:25:10.841  (*)D2GSInit: Game Data tables Initialized
08/13 23:25:10.858  (*)D2GSInit: NT Specific Features Disabled
08/13 23:25:10.860  (*)D2GSInit: Network Listening Socket Initialized
08/13 23:25:10.861  (*)D2GSInit: Callback Function Table Set up
08/13 23:25:10.864  (*)D2GSStart: Game Server Initialize done,Entering Message Loop
08/13 23:25:11.026  (*)ConfigLoad: Loading config from file C:\d2s\D2Server.ini
08/13 23:25:11.088  (*)ConfigLoad: Loaded 348 item data from ItemConfig.dat
08/13 23:25:11.093  (*)ConfigLoad: WorldEvent item loaded succssfully
08/13 23:25:11.096  (*)ConfigLoad: WorldEvent is enabled


d2gs.log

08/13 22:02:17.320 D2GEThread: Server Thread 11 Created
08/13 22:02:33.406 D2GEThread: Game Server Thread Start Successfully
08/13 22:02:33.433 D2GSResetGameList: End all game in the Game List and in the GE
08/13 22:02:33.441 D2GSConnectToD2xS: Connected to D2DBS Successfully
08/13 22:02:33.442 D2GSSendClassToD2DBS: Send connection class packet to D2DBS
08/13 22:02:33.457 watchdog_init: CreateThread watchdog_thread, 19
08/13 22:02:33.460 main: Entering Main Server Loop
08/13 22:02:33.503 D2GSConnectToD2xS: Connected to D2CS Successfully
08/13 22:02:33.505 D2GSSendClassToD2CS: Send connection class packet to D2CS
08/13 22:02:33.507 D2GSNetRecvPacket: CS socket become writable
...
08/13 23:29:39.042 D2GSNetRecvPacket: CS socket become writable
08/13 23:29:39.043 D2GSNetRecvPacket: CS socket become writable
08/13 23:29:39.044 D2GSNetRecvPacket: CS socket become writable
08/13 23:29:39.045 D2GSNetRecvPacket: CS socket become writable
08/13 23:29:39.046 D2GSNetRecvPacket: CS socket become writable
# до бесконечности
08/13 23:29:39.046 D2GSNetRecvPacket: CS socket become writable


По-видимому, Что то не так с сокетами.

И при попытке зайти в игру создается файл

~/.wine/drive_c/d2s#=>  23:31 ttyp1cat ./D2-HACK070813.txt
---------------------------------------------------------------
j4ckHOST Realm startup at 2007-08-13 22:02:18.458
---------------------------------------------------------------
22:06:06.627  [HACKLIST]  Couldn't hacklist client 1 (closed) from FILE:..\Source\D2Game\GAME\Game.cpp  LINE:1004


Аля я крутой хаксор...

Позадавал вопросы на забугорных форумах, ирках - ответов - н0ль.
Может кто поможет советом? В чем может быть проблема...



@author: J4ck
@Comments: Shit happens
@email: j4ck at molod dot ru