Microsoft MVP성태의 닷넷 이야기
blizzless-diiis 소개 - (C#으로 만들어진) Diablo 3 오픈 소스 서버 [링크 복사], [링크+제목 복사]
조회: 5174
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

blizzless-diiis 소개 - (C#으로 만들어진) Diablo 3 오픈 소스 서버

(닷넷 5 + C#으로 만들어진) 아래와 같은 프로젝트가 github에 있군요. ^^;

blizzless/blizzless-diiis
; https://github.com/blizzless/blizzless-diiis

우리가 생각하는 "Diablo III" 게임이 맞을 것 같은데요, 암튼, 이렇게 버젓이 오픈 소스로 올라와 있어도 괜찮은 걸까요? ^^ (혹시 Diablo III 라이선스 체계에 대해 아시는 분은 덧글 부탁드립니다.)

어쨌든 호기심이 발동해서 ^^ 한번 구성해 봤습니다.

우선, git clone으로 프로젝트를 받아둡니다.

c:\temp\d3s> git clone https://github.com/blizzless/blizzless-diiis

그다음 PostgreSQL 9.5.25를 설치해야 하는데, 이것 역시 docker로도 이미 자동화시킨 yaml 파일을 제공하므로 그대로 사용하면 됩니다. 따라서, 프로젝트의 db 폴더로 이동해 다음과 같이 docker-compose 명령을 내리면 DB 구성도 완료됩니다.

// docker desktop 버전이 설치돼 있어야 합니다.
// .\blizzless-diiis\db 디렉터리로 이동한 다음,

c:\temp\d3s\blizzless-diiis\db> docker-compose up

그다음 Visual Studio 2019를 실행시켜 .\blizzless-diiis\src 디렉터리에 있는 Blizzless-D3.sln 파일을 연 다음 빌드해 줍니다.

메인 프로젝트는 Blizzless이므로, 그것이 빌드된 경로로 이동해 컴파일된 Blizzless.exe 파일을 실행하는 것으로,

C:\temp\d3s\blizzless-diiis\src\DiIiS-NA\bin\Debug\net5.0> Blizzless.exe

서버 측 준비는 끝입니다. 참고로, 게임 서버가 정상적으로 로딩되면 이런 메시지를 마지막에 보게 됩니다.

...[생략]...
[ Info] [BZ.Net]: Loaded - 6473 items.
[ Info] [BZ.Net]: Diablo 3 Core - Loaded
[ Info] [BZ.Net]: REST server started - 127.0.0.1:8081
[ Info] [BZ.Net]: Server BlizzLess.Net started - 127.0.0.1:1119
[ Info] [GS]: Game Server Started - 127.0.0.1:2001...
[ Info] [BattleNetEmu]: Game server loaded 127.0.0.1:1937 connecting to BlizzLess.Net...
[ Info] [BattleNetEmu]: Game server was registred for BlizzLess.Net 127.0.0.1:1345.

또한, 그보다 좀 위에 보면 다음과 같이 테스트용 계정 정보가 출력됩니다.

...[생략]...
[ Info] [BZ.Net]: Initing new database, creating (test@,123456), (test1@,123456), (test2@,123456),(test3@,123456),(test4@,123456)
[ Warn] [DataBaseSystem]: Created account test@
[ Warn] [DataBaseSystem]: Created gameAccount test@
...[생략]...

혹은 직접 계정을 생성해도 됩니다. Blizzless.exe 실행 로그가 모두 출력된 이후, 다음과 같은 형식으로 계정 생성을 할 수도 있는데요,

!account add [계정id] [계정pw] [battle_net_tag]

대충 다음과 같이 추가할 수 있습니다.

...[생략: Blizzless.exe 실행 로그]...

[ Info] [GS]: Game Server Started - 127.0.0.1:2001...
[ Info] [BattleNetEmu]: Game server loaded 127.0.0.1:1937 connecting to BlizzLess.Net...
[ Info] [BattleNetEmu]: Game server was registred for BlizzLess.Net 127.0.0.1:1345.

!account add my@gmail.com test1234 my_test_accn
[ Warn] [DataBaseSystem]: GetAccountByEmail my@gmail.com: DBAccount is null!
[ Warn] [DataBaseSystem]: Created account my@gmail.com
[ Warn] [DataBaseSystem]: Created gameAccount my@gmail.com
[ Info] [CM]: Created new account my@gmail.com [user-level: User] Full BattleTag: my_test_accn#7127.




자, 서버 준비는 이것으로 끝났고 이제 클라이언트를 준비해야 합니다.

현재 서버와 호환 가능한 Diablo III 클라이언트는 2.7.4.84161 버전이라고 하는데요, 이 글을 쓰는 시점(2022-12-17) 기준으로 Blizard 측의 Battle.net 앱에서,

BATTLE.NET DESKTOP APP: DIVE INTO UNIVERSES OF EPIC ADVENTURE
; https://www.blizzard.com/en-us/apps/battle.net/desktop

다운로드한 Diablo III의 버전이 정확히 2.7.4.84161입니다. 설치가 되었으면 이제 인증서(bnetserver.p12)를 등록하는데요, 이것은 위에서 실행해 둔 Blizzless.exe의 폴더에서 찾을 수 있습니다.

따라서 그 파일을 더블 클릭하면, 비밀번호 123을 입력 후 등록이 됩니다. (시작 메뉴의 "Manage user certificates"를 통해 "Trusted Root Certification Authorities" / "Certificates"에 "Blizzard Battle.net Local Cert"라는 이름으로 등록된 것을 확인할 수 있습니다.)

자... 이제 "C:\Program Files (x86)\Diablo III"에 다운로드한 클라이언트가 아까 전에 우리가 만들어 둔 서버로 접속하도록 만들어야 하는데요, 이를 위해 2가지 방법을 제시하고 있습니다. 하나는 "%WinDir%\System32\drivers\etc\hosts" 파일에 다음의 내용을 등록하거나,

127.0.0.1 us.actual.battle.net
127.0.0.1 eu.actual.battle.net
127.0.0.1 cn.actual.battle.net
127.0.0.1 kr.actual.battle.net

아니면 위의 4개 DNS 문자열을 Diablo III 바이너리로부터 Hex 에디터 등을 이용해 127.0.0.1로 바꿔주는 것입니다.

전자의 경우, 방법이 매우 쉽지만 시스템 전역적으로 영향을 미치기 때문에 Blizzard의 모든 정식 프로그램들이 동작하지 않게 됩니다. 반면 바이너리를 직접 수정하면 이런 문제는 없지만 약간 귀찮은 면이 있습니다.

어떤 방식으로든 선택/적용했으면 이제 "C:\Program Files (x86)\Diablo III" 경로로 이동해 다음과 같은 명령어로 실행해 줍니다.

C:\Program Files (x86)\Diablo III> "Diablo III.exe" -launch

우와~~~ 진짜로 실행이 됩니다. ^^;

diablo_3_local_1.png

(2022-12-18 업데이트) 잠깐 해보니까, crash도 잘 되고 진행 사항 기억도 잘 안 되서 그냥 정품 구매하셔서 플레이하시는 것을 더 권장합니다. ^^ 그냥 C# 개발자 입장으로써 누군가의 재미있는 toy 프로젝트로 정도로 봐주시면 될 듯합니다.




상황에 따라 서버(Blizzless.exe) 실행 시 이런 (오류) 로그를 볼 수 있습니다.

[ Info] [BattleNetEmu]: Game server loaded 127.0.0.1:1910 connecting to BlizzLess.Net...
[ Info] [BZ.Net]: An attempt was made to access a socket in a way forbidden by its access permissions.
[ Info] [BattleNetEmu]: Game server was registred for BlizzLess.Net 127.0.0.1:1345.

전에도 설명했지만,

소켓 바인딩 시 "System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions" 오류 발생
; https://www.sysnet.pe.kr/2/0/12240

대개의 경우 excludedportrange에 등록돼 있을 것입니다.

C:\WINDOWS\system32> netsh int ipv4 show excludedportrange protocol=tcp

Protocol tcp Port Exclusion Ranges

Start Port    End Port
----------    --------
        80          80
      1024        1123
      1124        1223
      1388        1487
      1543        1642
      1643        1742
      1743        1842
      4430        4430
      5357        5357
      8010        8010
     50000       50059     *

* - Administered port exclusions.

오류 메시지에 보면 그 위에 1910 포트였는데요, 따라서 위에서와 같이 그 포트를 포함하고 있는 범위의 항목을 삭제해야 합니다. 삭제 방법도 이미 알려드렸는데요,

"Administered port exclusions"이 아닌 포트 범위 항목을 삭제하는 방법
; https://www.sysnet.pe.kr/2/0/12305

따라서 이런 경우 제가 올려놓은 excludedportrange 프로그램을 사용해 다음과 같이 삭제할 수 있습니다.

C:\WINDOWS\system32> excludedportrange.exe tcp 1124 1223

그런 다음 다시 실행했을 때, "An attempt was made to access a socket in a way forbidden by its access permissions." 메시지가 없으면 됩니다. 참고로, 해당 포트는 임의로 잡히는 것이기 때문에 상황에 따라 저 오류 메시지가 발생할 수도, 아닐 수도 있습니다.










[최초 등록일: ]
[최종 수정일: 12/18/2022]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




1  2  3  4  5  6  [7]  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
395정성태3/24/201117702윈도우 7/R2 - C 드라이브 용량이 부족해 SP1 설치가 안된다면?
394정성태3/23/201144170윈도우 업데이트 다운로드 폴더를 변경하는 방법 [11]
393정성태3/23/201113627누가 정치를 해야 하는가? [1]
392정성태3/19/201116649IE 9 - 사이트 고정된 바로가기의 보안 기능
391정성태3/17/201116354파수닷컴 관련하여 인터넷 익스플로러 9 작동 중지 현상에 대해서 [1]
390정성태3/15/201114700NT 서비스 단위로 CPU 사용률을 확인하는 방법
389정성태3/10/201120847Windows 7/2008 R2 SP1 설치로 늘어난 디스크 용량 줄이기 [3]
388정성태2/27/201114308[종료] 메모리(RAM) DDR3 2GB * 2EA를 드립니다. [1]
387정성태2/26/201124438기가바이트(GIGABYTE) GA-770TA-UD3 - RAID 1 구성 [1]
386정성태2/22/201113963Windows XP를 Windows 7로 업그레이드
385정성태2/21/201122257실패한 Windows 7 SP1 설치 [2]
384정성태2/17/201114939파워 서플라이(전원공급장치)에서 어떤 부품이 중요하다고 생각하세요?
383정성태2/17/201113291트레이 윈도우가 속한 프로세스 찾기
382정성태2/16/201116900RSupport(알서포트)를 이용한 원격 지원 방법
381정성태2/16/201115169노트북 램 8GB - 페이지 파일(pagefile.sys)을 없애다.
380정성태2/16/201113706인터넷 익스플로러 9 RC - 정식 버전 때 '재설치'해야 할 생각에 망설여진다면?
379정성태2/7/201121088Windows 7 - Taskhost.exe CPU 점유 문제
378정성태1/31/201115720System 이벤트 로그 - amdkmdag
376정성태1/13/201114991모니터 - 삼성 BX2431, 알파스캔 TLED24
374정성태1/7/201114590윈도우 라이브 메신저 - Windows Server 2008 R2 에서 "Remote Assistance" 활성화 하기
373정성태12/29/201013324나니아 연대기 - 새벽 출정호의 항해 트레일러 음악
372정성태12/25/201014798내용 복사(Copy & Paste)를 막은 블로그가 줄어들길 바랍니다!!! [8]
371정성태12/22/201049077뽀모도로 타이머 - 데스크톱용 [4]
370정성태12/20/201017922노트북과 PC에서 iPad를 충전시킴 ^^ [1]
369정성태12/15/201016657Adobe Reader - 마지막으로 본 페이지 기억시키는 방법 [3]
368정성태12/12/201022617새로운 취미 ^^ - 레고 마인드스톰 (LEGO Mindstorms) [2]
1  2  3  4  5  6  [7]  8  9  10  11  12  13  14  15  ...