Microsoft MVP성태의 닷넷 이야기
blizzless-diiis 소개 - (C#으로 만들어진) Diablo 3 오픈 소스 서버 [링크 복사], [링크+제목 복사]
조회: 5166
글쓴 사람
정성태 (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)
336정성태7/26/201011561Step by Step: 암호화된 파일에 액세스가 안 될 경우 해결 방법
335정성태7/26/201013117어느 대학의 IT 교재
334정성태7/22/201015535마이크로소프트 웹 사이트 연결이 안될 때 [1]
333정성태7/19/201021351SYSTEM에 의해서 파일이 잠기는 현상
332정성태7/18/201013001누가 Internet Explorer의 보안을 낮췄을까?
331정성태7/15/201019870네이버우클릭+복사방지 해제방법
330정성태7/12/201020881탐색기에서 끌기(Drag) 동작이 안될 때
329정성태7/6/201014137[종료] Visual Studio 2010 Ultimate with MSDN 구독권 1개를 드립니다. [3]
328정성태7/4/201017338유튜브(Youtube) 동영상을 파일로 저장하는 방법
327정성태6/23/201013840Ho'oponopono
326정성태6/5/201015708쓸만한 노트북 쿨러 추천
325정성태5/30/201013159Pokarekare Ana, You Raise Me Up ...
322정성태5/17/201011988PC 에 먼지 제거하세요. 블루스크린 뜹니다. ^^
321정성태5/17/201016086Youtube(유튜브) 버퍼링 문제 해결 [1]
320정성태5/16/201012370처음 가본 오대산...
319정성태5/16/201013809미국 ‘일하고 싶은 직장 1위’ SAS 가보니…
318정성태5/12/201012083드라마보다 더 드라마틱한 게임 유저들의 이야기 [2]
317정성태5/12/201013035제니퍼소프트 - 제니퍼 닷넷 출시 기자간담회 [2]
316정성태5/8/201024812Windows 7 64비트 + IE 8에서의 알패스 "자동 채움" 동작시키기
315정성태5/8/201012754우리 집 창밖 풍경! [2]
314정성태5/4/201015012Step by Step: "테스트 모드 Windows 7 빌드 7600"가 표시된다
313정성태4/30/201011543The 15 most toxic places to live
312정성태4/30/201011185하이브리드카 사 봐야 본전 뽑기도 어렵다
311정성태4/24/201014181SSD 달린 새 컴퓨터 ^^ [1]
309정성태4/13/201026049ATI Radeon에서 HDMI 연결 시 1080p 화면이 축소되는 경우 해결책 [1]
308정성태4/7/201013862[종료] DDR2 2GB 메모리 2개 드립니다.
1  2  3  4  5  6  7  8  [9]  10  11  12  13  14  15  ...