대형 프로젝트 - C# + 유니티로 만드는 MMORPG 게임 개발/(6) 라이브서비스

2D MMO 라이브 서비스 - (1 - 5) Hp 연동 (1)

monstro 2025. 9. 8. 10:55
728x90
반응형

- 개요

프로젝트에 플레이어를 연동하는 것에 이어서 Hp를 연동해보겠습니다.

또, 게임에 로그인하여 로비에 입장한 플레이어마다 플레이어의 DB 아이디를 저장하도록 구조를 변경하겠습니다.

 

 - 사전 작업 (1) : proto 파일

 

LobbyPlayerInfo 패킷에 위와 같이 PlayerDbId 정보를 추가하였습니다.

따라서 기존의 패킷들을 1씩 증가시키도록 수정하였습니다.

 

- 사전 작업 (2) : Extensions 클래스

 

Extension 메서드를 저장하는 Extensions 클래스를 생성하였습니다.

AppDbContext를 대상으로 예외처리하여 SaveChanges 함수를 호출하는 SaveChangesEx 함수를 추가하였습니다.

 

1) ClientSession_PreGame 클래스

HandleLogin 함수 수정사항 (1)

 

HandleLogin 함수 수정사항 (2)

 

HandleLogin 함수를 위와 같이 수정하였습니다.

로그인하여 로비에 입장한 플레이어의 PlayerDbId를 패킷에 저장하고,

로그인했지만 DB에 존재하지 않던 플레이어는 SaveChangesEx 함수를 호출하여 DB에 생성하도록 수정하였습니다.

 

HandleCreatePlayer 함수 수정사항

 

HandleCreatePlayer 함수를 위와 같이 수정하였습니다.

게임에 입장하면서 생성할 캐릭터를 DB에서 찾지 못했다면, SaveChangesEx 함수를 호출하여 생성하고

로비에서 사용할 LobbyPlayerInfo 패킷의 정보에 PlayerDbId를 설정하도록 로직을 수정합니다.

 

HandleEnterGame 함수 수정사항

 

HandleEnterGame 함수를 위와 같이 수정하였습니다.

게임에 입장한 플레이어의 PlayerDbId를 PlayerInfo로부터 받아와 설정합니다.

 

2) Player 클래스

 

PlayerDbId 프로퍼티를 추가하여 플레이어의 DB 아이디를 설정합니다.

 

 

OnLeaveGame 함수를 위와 같이 추가하였습니다.

해당 함수는 플레이어가 퇴장하면서 호출하는데, 플레이어의 변경된 Hp를 DB에 저장하는 역할을 수행합니다.

 

3) GameRoom 클래스

 

LeaveGame 함수를 위와 같이 수정하여 플레이어가 맵을 떠나기 이전에

플레이어로부터 OnLeaveGame 함수를 호출합니다.

 

- 최종 실행 결과

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

 

위와 같이 감소한 체력이 재시작하는 경우 유지되는 것을 확인할 수 있습니다.

 

- 남아있는 문제

현재 남아있는 문제는 다음과 같습니다.

  • 서버가 다운되면 DB에 저장되지 않은 정보는 날아가게 됨
  • 플레이어가 퇴장하자마자 DB에 저장하므로 단계적인 처리가 이뤄지지 않음

따라서 위의 문제를 수정해보도록 하겠습니다.

728x90
반응형