Microsoft MVP성태의 닷넷 이야기
blizzless-diiis 소개 - (C#으로 만들어진) Diablo 3 오픈 소스 서버 [링크 복사], [링크+제목 복사]
조회: 5172
글쓴 사람
정성태 (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)
499정성태2/16/2016177242016년 작업 PC ^^ [2]
498정성태12/17/201513559BTN 앱에서 법문에 대한 댓글을 작성하는 방법
497정성태10/2/201520090NVIDIA Surround 설정/해제를 간편하게 하는 방법?
496정성태9/30/201517276도서 - 누워서 읽는 알고리즘 [1]
495정성태9/3/201516672도서 - Embedded Recipes [2]
494정성태8/21/201517110마이크로소프트 워드 문서에서 위/아래 첨자 단어 검색하는 방법 [2]
493정성태8/11/201514758XBox One의 헤일로 게임 ^^ [2]
492정성태6/1/201515052윈도우 10 무료 업그레이드 예약 시작
491정성태5/9/201521305hiberfil.sys 파일의 위치를 옮길 수 있을까요?
490정성태4/15/201527210(가능한 정확한 발음의) 대불정능엄신주 [3]파일 다운로드2
489정성태3/24/201518844파티션 관리 프로그램 추천 - MiniTool Partition Wizard
488정성태3/20/201533666유튜브(youtube) 동영상을 다운로드 하는 프로그램 youtube-dl 소개 [14]
487정성태2/19/201530524미라캐스트 vs 크롬캐스트파일 다운로드1
486정성태2/11/201518383성태도 해본 ^^ PC-Fi 구성 [2]파일 다운로드1
484정성태10/5/201428464GTX660으로 모니터 3대를 Surround로 연결(5760*1080 해상도) [3]
483정성태9/17/201438802비트코인 지갑 생성 및 채굴 방법 [5]
482정성태7/28/201420016질문/답변 게시물이 일부 폭파되었습니다. [9]
481정성태7/2/201422239한국장학재단(www.kosaf.go.kr) 서류 제출의 첨부 파일 등록 안되는 문제 [5]
480정성태6/11/201416036국내 미러링 사이트의 존재 이유가??? [2]
479정성태5/10/201418188IITC 도구 - Ingress의 Link/Field를 확인하는 방법 [4]
478정성태4/1/201414264일본 출장 시 남긴 오사카의 Ingress 필드
477정성태1/25/201415747세바시 335회 그래, 여기까지 잘 왔다 @김창옥 서울여대 기독교학과 겸임교수
476정성태1/21/201417088세상에 단 하나 뿐인 C# 머그컵 [2]
475정성태1/19/201416033차에 블랙박스 꼭 달으세요. ^^ [2]
474정성태1/15/201423379Internet Explorer 11 - GDI 리소스 누수로 화면 깨짐 현상 [1]
473정성태1/14/201415291Google+ Hangouts 대신 예전의 구글톡(Google Talk)을 사용하고 싶다면? [1]
1  2  [3]  4  5  6  7  8  9  10  11  12  13  14  15  ...