Microsoft MVP성태의 닷넷 이야기
blizzless-diiis 소개 - (C#으로 만들어진) Diablo 3 오픈 소스 서버 [링크 복사], [링크+제목 복사]
조회: 5180
글쓴 사람
정성태 (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)
368정성태12/12/201022624새로운 취미 ^^ - 레고 마인드스톰 (LEGO Mindstorms) [2]
365정성태11/30/201016178프로그래머라면! [3]파일 다운로드2
364정성태11/27/201012485성태의 트위터 정책 ^^ (Follow/Unfollow) [2]
361정성태11/21/201014178Microsoft Wireless Mobile Mouse 6000과 Arc Mouse에 대해서! [2]
359정성태11/16/201012220내가 숨쉬는 공기 - The Air I Breathe
358정성태10/30/201013463너무 어렵게 생각하지 마세요. ^^
356정성태10/25/201012603Windows Live Messenger 2011 크기 줄이는 방법
355정성태10/22/201011992TechMatch: 마이크로소프트 LCA와 MVP가 함께 NGO 단체를 대상으로 기술적인 문제를 해결
354정성태10/18/201030961윈도우 7 홈 프리미엄(Home Premium) 버전에서 "로컬 보안 정책 (secpol.msc)" 설정 [1]
352정성태10/11/201012366SEO 와 ASP.NET(JSP,ASP) / Silverlight(Flash) / Ajax
351정성태10/10/201013753구글 크롬이 클릭원스 배포였군요. ^^
350정성태10/5/201013320[종료] Visual Studio 2010 Ultimate with MSDN 구독권 1개를 드립니다. [2]
349정성태9/26/201012200How To Become A Famous Blogger
348정성태9/19/201014971cmd.exe와 command.exe의 차이점파일 다운로드1
347정성태9/17/201012419IE 9 베타 - 바로가기 창(즐겨찾기 모음)
346정성태9/17/201014079Internet Explorer 9 베타와 ActiveX, 그리고 플래시
345정성태9/13/201011453소프트웨어 패키지 스페셜리스트(Software Package Specialist)?
344정성태9/7/201015214윈도우 7 백업 오류: 0x80780048 [2]
343정성태8/31/201011948Why Embedded has become cool (again)
342정성태8/29/20101566924GB 메모리 ^^
341정성태8/19/201029441노트북과 연결되는 외부 LCD 모니터의 "Power Saving Mode" 탈출 방법 [1]
340정성태8/5/201012283Outlook 2007 블루 스크린 뜨는 문제
339정성태8/4/201015110모르나의 기도문
338정성태8/4/201011360Twitter ^^ - @techsharer
337정성태8/1/201014191컴퓨터 먼지 제거 [2]
336정성태7/26/201011576Step by Step: 암호화된 파일에 액세스가 안 될 경우 해결 방법
1  2  3  4  5  6  7  [8]  9  10  11  12  13  14  15  ...