성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
Digital Stories
방명록
최근 덧글
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
기타
생각의 전환
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 ext='true' style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>blizzless-diiis 소개 - (C#으로 만들어진) Diablo 3 오픈 소스 서버</h1> <p> (닷넷 5 + C#으로 만들어진) 아래와 같은 프로젝트가 github에 있군요. ^^;<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > blizzless/blizzless-diiis ; <a target='tab' href='https://github.com/blizzless/blizzless-diiis'>https://github.com/blizzless/blizzless-diiis</a> </pre> <br /> 우리가 생각하는 "Diablo III" 게임이 맞을 것 같은데요, 암튼, 이렇게 버젓이 오픈 소스로 올라와 있어도 괜찮은 걸까요? ^^ (혹시 Diablo III 라이선스 체계에 대해 아시는 분은 덧글 부탁드립니다.)<br /> <br /> 어쨌든 호기심이 발동해서 ^^ 한번 구성해 봤습니다.<br /> <br /> 우선, git clone으로 프로젝트를 받아둡니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > c:\temp\d3s> <span style='color: blue; font-weight: bold'>git clone https://github.com/blizzless/blizzless-diiis</span> </pre> <br /> 그다음 PostgreSQL 9.5.25를 설치해야 하는데, 이것 역시 docker로도 이미 자동화시킨 yaml 파일을 제공하므로 그대로 사용하면 됩니다. 따라서, 프로젝트의 db 폴더로 이동해 다음과 같이 docker-compose 명령을 내리면 DB 구성도 완료됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > // <a target='tab' href='https://www.docker.com/products/docker-desktop/'>docker desktop</a> 버전이 설치돼 있어야 합니다. // .\blizzless-diiis\db 디렉터리로 이동한 다음, c:\temp\d3s\blizzless-diiis\db> <span style='color: blue; font-weight: bold'>docker-compose up</span> </pre> <br /> 그다음 Visual Studio 2019를 실행시켜 .\blizzless-diiis\src 디렉터리에 있는 Blizzless-D3.sln 파일을 연 다음 빌드해 줍니다.<br /> <br /> 메인 프로젝트는 Blizzless이므로, 그것이 빌드된 경로로 이동해 컴파일된 Blizzless.exe 파일을 실행하는 것으로,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\temp\d3s\blizzless-diiis\src\DiIiS-NA\bin\Debug\net5.0> <span style='color: blue; font-weight: bold'>Blizzless.exe</span> </pre> <br /> 서버 측 준비는 끝입니다. 참고로, 게임 서버가 정상적으로 로딩되면 이런 메시지를 마지막에 보게 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > ...[생략]... [ 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. </pre> <br /> 또한, 그보다 좀 위에 보면 다음과 같이 테스트용 계정 정보가 출력됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > ...[생략]... [ 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@ ...[생략]... </pre> <br /> 혹은 직접 계정을 생성해도 됩니다. Blizzless.exe 실행 로그가 모두 출력된 이후, 다음과 같은 형식으로 계정 생성을 할 수도 있는데요,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > !account add [계정id] [계정pw] [battle_net_tag] </pre> <br /> 대충 다음과 같이 추가할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > ...[생략: 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. <span style='color: blue; font-weight: bold'>!account add my@gmail.com test1234 my_test_accn</span> [ 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. </pre> <br /> <hr style='width: 50%' /><br /> <br /> 자, 서버 준비는 이것으로 끝났고 이제 클라이언트를 준비해야 합니다.<br /> <br /> 현재 서버와 호환 가능한 Diablo III 클라이언트는 2.7.4.84161 버전이라고 하는데요, 이 글을 쓰는 시점(2022-12-17) 기준으로 Blizard 측의 Battle.net 앱에서,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > BATTLE.NET DESKTOP APP: DIVE INTO UNIVERSES OF EPIC ADVENTURE ; <a target='tab' href='https://www.blizzard.com/en-us/apps/battle.net/desktop'>https://www.blizzard.com/en-us/apps/battle.net/desktop</a> </pre> <br /> 다운로드한 Diablo III의 버전이 정확히 2.7.4.84161입니다. 설치가 되었으면 이제 인증서(bnetserver.p12)를 등록하는데요, 이것은 위에서 실행해 둔 Blizzless.exe의 폴더에서 찾을 수 있습니다.<br /> <br /> 따라서 그 파일을 더블 클릭하면, 비밀번호 123을 입력 후 등록이 됩니다. (시작 메뉴의 "Manage user certificates"를 통해 "Trusted Root Certification Authorities" / "Certificates"에 "Blizzard Battle.net Local Cert"라는 이름으로 등록된 것을 확인할 수 있습니다.)<br /> <br /> 자... 이제 "C:\Program Files (x86)\Diablo III"에 다운로드한 클라이언트가 아까 전에 우리가 만들어 둔 서버로 접속하도록 만들어야 하는데요, 이를 위해 2가지 방법을 제시하고 있습니다. 하나는 "%WinDir%\System32\drivers\etc\hosts" 파일에 다음의 내용을 등록하거나,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 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 </pre> <br /> 아니면 위의 4개 DNS 문자열을 Diablo III 바이너리로부터 Hex 에디터 등을 이용해 127.0.0.1로 바꿔주는 것입니다.<br /> <br /> 전자의 경우, 방법이 매우 쉽지만 시스템 전역적으로 영향을 미치기 때문에 Blizzard의 모든 정식 프로그램들이 동작하지 않게 됩니다. 반면 바이너리를 직접 수정하면 이런 문제는 없지만 약간 귀찮은 면이 있습니다.<br /> <br /> 어떤 방식으로든 선택/적용했으면 이제 "C:\Program Files (x86)\Diablo III" 경로로 이동해 다음과 같은 명령어로 실행해 줍니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\Program Files (x86)\Diablo III> <span style='color: blue; font-weight: bold'>"Diablo III.exe" -launch</span> </pre> <br /> 우와~~~ 진짜로 실행이 됩니다. ^^;<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='diablo_3_local_1.png' src='/SysWebRes/bbs/diablo_3_local_1.png' /><br /> <br /> (2022-12-18 업데이트) 잠깐 해보니까, crash도 잘 되고 진행 사항 기억도 잘 안 되서 그냥 정품 구매하셔서 플레이하시는 것을 더 권장합니다. ^^ 그냥 C# 개발자 입장으로써 누군가의 재미있는 toy 프로젝트로 정도로 봐주시면 될 듯합니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 상황에 따라 서버(Blizzless.exe) 실행 시 이런 (오류) 로그를 볼 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > [ Info] [BattleNetEmu]: Game server loaded 127.0.0.1:1910 connecting to BlizzLess.Net... <span style='color: blue; font-weight: bold'>[ Info] [BZ.Net]: An attempt was made to access a socket in a way forbidden by its access permissions.</span> [ Info] [BattleNetEmu]: Game server was registred for BlizzLess.Net 127.0.0.1:1345. </pre> <br /> 전에도 설명했지만,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 소켓 바인딩 시 "System.Net.Sockets.SocketException: An attempt was made to access a socket in a way forbidden by its access permissions" 오류 발생 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/12240'>https://www.sysnet.pe.kr/2/0/12240</a> </pre> <br /> 대개의 경우 excludedportrange에 등록돼 있을 것입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\WINDOWS\system32> <span style='color: blue; font-weight: bold'>netsh int ipv4 show excludedportrange protocol=tcp</span> Protocol tcp Port Exclusion Ranges Start Port End Port ---------- -------- 80 80 1024 1123 <span style='color: blue; font-weight: bold'>1124 1223</span> 1388 1487 1543 1642 1643 1742 1743 1842 4430 4430 5357 5357 8010 8010 50000 50059 * * - Administered port exclusions. </pre> <br /> 오류 메시지에 보면 그 위에 1910 포트였는데요, 따라서 위에서와 같이 그 포트를 포함하고 있는 범위의 항목을 삭제해야 합니다. 삭제 방법도 이미 알려드렸는데요,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > "Administered port exclusions"이 아닌 포트 범위 항목을 삭제하는 방법 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/12305'>https://www.sysnet.pe.kr/2/0/12305</a> </pre> <br /> 따라서 이런 경우 제가 올려놓은 excludedportrange 프로그램을 사용해 다음과 같이 삭제할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C:\WINDOWS\system32> excludedportrange.exe tcp 1124 1223 </pre> <br /> 그런 다음 다시 실행했을 때, "An attempt was made to access a socket in a way forbidden by its access permissions." 메시지가 없으면 됩니다. 참고로, 해당 포트는 임의로 잡히는 것이기 때문에 상황에 따라 저 오류 메시지가 발생할 수도, 아닐 수도 있습니다.<br /> </p><br /> <br /> </div>
첨부파일
스팸 방지용 인증 번호
2071
(왼쪽의 숫자를 입력해야 합니다.)