Microsoft MVP성태의 닷넷 이야기
blizzless-diiis 소개 - (C#으로 만들어진) Diablo 3 오픈 소스 서버 [링크 복사], [링크+제목 복사]
조회: 5142
글쓴 사람
정성태 (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)
552정성태2/20/20241010Windows - 바탕화면에 검은 영역의 빈 공간을 삭제하는 방법
551정성태2/18/20241087DropBox - PermissionError: [WinError 5] Access is denied: 'C:\\Users\\...'
550정성태10/31/20231977윈도우 탐색기의 "새로 만들기" 메뉴에 "텍스트 문서" 항목이 없는 경우 - 두 번째 이야기
549정성태4/20/20233975youtube-dl을 파이썬으로 실행하는 방법
548정성태4/15/20233583Galaxy Buds2를 Windows에 연결한 경우 (Stereo가 아닌) Mono로 들리는 문제
547정성태1/28/20234040JetBrains Omea Reader에서 TLS 1.2 모드의 https 서버로부터 RSS 구독이 안 되는 경우 해결 방법파일 다운로드1
546정성태12/17/20225142blizzless-diiis 소개 - (C#으로 만들어진) Diablo 3 오픈 소스 서버
545정성태11/29/20226378[종료] [2차] "시작하세요 C# 10" 서적 나눔합니다. (5권)
544정성태11/6/20223895Camtasia - "변경된" 볼륨을 일괄 설정하는 방법
543정성태11/4/20226554[종료] "시작하세요 C# 10" 서적 나눔합니다. (4권 한정)
542정성태6/8/20225419입력 포커스를 가져가는 응용 프로그램을 확인하는 방법 - FocusLogger
541정성태6/7/20225163특정 USB 장치가 인식이 안 되는 문제
540정성태5/25/20224972구글 검색 시 "ko-kr"이 아닌 "en-us"에 해당하는 자료 검색 방법
539정성태5/23/20224891문법에 맞지 않는 learn.microsoft.com의 C++ 소스 코드
538정성태5/18/20225041WACOM Intuos Pro PTH-660 사용 후기 (개발자 입장)
537정성태3/17/20225482eFriend Plus 설치 후 실행이 안 되는 문제가 발생한다면?
536정성태1/13/202270372021년 블로그 기부 수익 공개 ^^
535정성태11/25/202175242021년 새로운 PC
534정성태10/19/20217685파판14 - 에오르제아의 시간 알람을 위한 C# WinForms 응용 프로그램 [1]파일 다운로드1
533정성태10/6/202110341모바일 브라우저에서 "비공개 연결이 아닙니다." NET::ERR_CERT_AUTHORITY_INVALID 오류가 발생하는 현상 [1]
531정성태9/1/2021699316GB로도 모자란 근래의 개발 환경
530정성태7/27/20215375그동안 마이크로소프트 계정으로 가입한 웹 서비스 및 응용 프로그램을 알아내는 방법
529정성태7/18/20215727C:\$Windows.~BT 용도와 삭제하는 방법
528정성태7/17/20217360Logitech Webcam이 있는 경우, %LOCALAPPDATA%\temp\LWSDebugOut.txt 파일의 (무제한) 증가 현상
527정성태7/13/20215585Microsoft Edge의 뉴스 알림 창 끄는 방법
[1]  2  3  4  5  6  7  8  9  10  11  12  13  14  15  ...