본문 바로가기

포트폴리오/서버연동 온라인 arpg - Knight Online

[포트폴리오(Knight Online)] - 보상 시스템 구현

 

https://teachingforme.tistory.com/33?category=1138179 

 

[포트폴리오(Knight Online)] - 퀘스트 시스템 구현

이번에는 포트폴리오에서 구현한 퀘스트 시스템에 대해 정리해보려고 한다. 퀘스트 시스템의 경우 인터넷에 정보가 꽤나 있는 편이었지만, 내가 원하는 체계적이고 확장성이 있는 방식의 퀘스

teachingforme.tistory.com

 

 

 

 이전에 퀘스트 시스템을 구현하면서 보상 시스템을 구현하지 않아서 미완성이라는 언급을 했었는데, 이번에 보상 시스템을 구현하여 이 글에서는 구현한 보상 시스템에 대해 정리를 해보려고 한다.

 

 

 

 

 

 사실 완성한지는 오래되었는데, 학기중에 졸업작품이며 과제며 바빠서 이제야 정리글을 쓰게되는것 같다. 오래되서 아예 까먹어 버리기 전에 정리를 해두는게 좋을듯 하여 이번에 정리하려고 한다.

 

 

 

 

 

보상 획득 UI

 

 

 

 

 게임에서 보상 획득 시 아이템을 서버에서 DB에 추가하는 처리를 한 후에 클라이언트에게 아이템이 정상적으로 지급이 되었다는 것을 시각적으로 보여줄 필요가 있다. 그래서 보통 위의 이미지와 같이 화면에 팝업 UI를 띄워 줌으로써 유저에게 어떤 아이템이 계정에 지급되었는지를 보여준다.

 

 

 

 

 플레이어 보상 획득 처리 자체는 서버와 DB에서 하기 때문에 클라이언트에서는 보상 획득 요청을 보내고 서버로 부터 받은 답장을 기반으로 위와같은 UI를 띄워주기만 하면 된다.

 

 

 

 

 

 

플레이어 보상 획득 과정

 

 

 

 머릿속에서 구상한 플레이어의 보상 획득 과정을 그림으로 표현하면 위와 같다. 총 4개의 과정을 거치는데, 하나씩 설명해보자면 아래와 같다.

 

 

1. 서버로 퀘스트 클리어패킷 전송

2. 서버는 데이터베이스를 통해 해당 퀘스트의 보상 정보 조회

3. 데이터베이스에서 받은 보상 정보를 기반으로 아이템 생성, 생성된 아이템 데이터를 데이터베이스에 Insert

4. 아이템 생성이 정상적으로 이루어 졌다는 것을 클라이언트에게 알리기 위해 Item Packet 전송

 

 

 

 

여기서 의문점이 생길 수 있다.

 

 

 

 

 

'그럼 플레이어가 임의의 퀘스트 클리어 패킷을 계속 전송하면 전송할 때마다 보상을 획득하게 되버리지 않는가?' 

 

 

 

 

 이 문제를 해결하기 위해 서버에서는 보상으로 지급되는 아이템을 생성하기 전에 플레이어가 실제로 해당 퀘스트를 진행중이었는지를 확인하고 진행중인 퀘스트였을 때에만 아이템을 생성하고, 이미 깬 퀘스트이거나 퀘스트가 진행중이 아니라면 해당 퀘스트 완료 패킷을 무시하게끔 구현하였다.

 

 

 

 

 

 그리고 위의 4번 과정은 플레이어에게 보상이 지급되었다는 것을 알리기 위한 과정이므로 만약 4번 과정이 진행되기 전에 플레이어가 게임을 종료하더라도, 재접속해보면 보상이 정상적으로 지급이 된다. 아이템 지급과 관련된 중요한 사항은 서버에서 전부 처리하는 구조이기 때문에 클라이언트에서는 요청만 보낼 뿐, 아이템을 직접 생성하거나 하지 못하기 때문이다.

 

 

 

 

 

 

 

 

 보상 시스템의 테스트를 위해 퀘스트 변경 패킷을 클라이언트로 부터 받았을 때 1번 스테이지 클리어에 대한 보상을 플레이어에게 지급하도록 임시로 코드를 작성하였다. 이 부분은 추후에 전투 시스템 및 스테이지 시스템이 완성이 되면 연결해서 사용할 예정이다. 이번에는 스테이지 데이터에 적힌 보상이 플레이어에게 정상적으로 지급되는지를 알아보기위해 위와 같은 테스트 코드를 삽입하였다.

 

 

 

 

 

 

 

 

 

 

보상 획득 UI

 

 

 

 보상 획득 UI는 위와 같이 구성하였다. 참고로 보상을 획득할 때 아이콘이 점점 커져서 scale 이 1까지 도달하도록 만들었다. 사진으로는 안보이니 아쉽긴 하지만, 나중에 영상으로 포트폴리오 영상을 찍을 땐 볼 수 있을 것이다.

 

 

 

 

 

 

 

 

 

 

보상 획득 후

 

 

 

 서버로부터 보상 획득 완료 패킷을 받은 후 인벤토리를 확인해보면 보상으로 받은 2개의 아이템이 정상적으로 UI에 출력된다. 또한 위의 그림과 같이 서버상에서 데이터베이스를 새로고침하면 새로 생성된 2개의 아이템이 DB table에 정상적으로 찍히는 것 또한 확인할 수 있다.

 

 

 

 

 

 

 이제 게임의 기본적인 시스템들을 갖추었으니 정말로 전투 시스템을 구현하게 될것 같다. 종강 이후에 열심히 달려서 6월 안으로 전투 시스템 및 멀티 레이드까지 구현해서 7월 안으로 포트폴리오 문서화까지 완료하는 것이 목표인데, 갈 길이 너무 멀게만 느껴진다... 일단 차근차근 해나가야 할 듯하다.