21. 퀘스트 시스템 - 카운팅과 보상

2023. 10. 6. 19:34·[게임 개발] 개발 일지/RPG

서론

이번에는 몬스터 처치 시 현재 진행중인 퀘스트의 몬스터 처치 카운트를 올리고
몬스터 처치 카운트가 목표 카운트보다 높거나 같아진다면 COMPLETE 버튼을 누를 시
퀘스트를 완료하여 보상을 지급하는 기능을 구현해 보겠습니다.

 


퀘스트 카운팅 구현

클래스 수정

퀘스트 카운팅을 위하여 Enemy 클래스를 수정하였습니다.

 

void ARPGEnemy::SetDead()
{
	ARPGAIController* AIController = Cast<ARPGAIController>(Controller);
	// AI 중단
	if (AIController)
	{
		AIController->StopAI();
	}

	AnimInstance->PlayDeadMontage();
	SetActorEnableCollision(false);

	FTimerHandle RespawnTimerHandle;
	GetWorldTimerManager().SetTimer(RespawnTimerHandle, this, &ARPGEnemy::RespawnTimer, StatComp->GetRespawnTime(), false);
	
	AController* CharacterController = GetWorld()->GetFirstPlayerController();
	IRPGBattleRewardInterface* BattleRewardInterface = Cast<IRPGBattleRewardInterface>(CharacterController->GetPawn());
	BattleRewardInterface->StatPointReward(StatComp->GetRewardStatPoint());

	TArray<FRPGQuestData>& QuestTable = RPGGameInstance->QuestTable;
	for (int32 i = 0; i < QuestTable.Num(); ++i)
	{
		// 수락한 퀘스트를 확인
		if (QuestTable[i].Accepted)
		{
			QuestTable[i].KilledCnt++;
		}
	}
}

몬스터의 사망시 호출되는 Set Dead 함수를 이용하였습니다.

먼저 게임 인스턴스의 QuestTable 구조체 배열을 참조하여 들고와서 for문을 이용해 Accepted 변수가 true인 퀘스트를 찾습니다. 
이후 찾았다면 해당 구조체의 KilledCnt를 증가시킵니다.

 

구현 결과

몬스터를 처치한 뒤 수락한 퀘스트들의 카운트만 올라있고, 수락하지 않은 퀘스트는
카운트가 오르지 않은 모습을 확인할 수 있습니다.


퀘스트 보상 구현

클래스 수정

퀘스트 보상으로 스탯 포인트를 지급해야 하는데 이를 위해서 데이터 테이블에 Reward 변수를 추가해 주었습니다!

 

void URPGQuestMainWidget::AcceptQuest()
{
	TArray<FRPGQuestData>& QuestTable = RPGGameInstance->QuestTable;
	for (int32 i = 0; i < QuestTable.Num(); ++i)
	{
...
	// 스탯 포인트 보상 지급
	IRPGBattleRewardInterface* BattleRewardInterface = Cast<IRPGBattleRewardInterface>(GetOwningPlayerPawn());
	if(BattleRewardInterface)
	{
		BattleRewardInterface->StatPointReward(QuestTable[i].Reward);
	}
...

저번에 몬스터 처치 시 보상을 주기 위해 만든 리워드 인터페이스를 이용하기로 하였습니다.

 

플레이어 컨트롤러의 폰을 가져와 리워드 인터페이스로 형변환 해 주고 스탯 포인트를 지급하는 GetRewardStatPoint 함수를 호출합니다. 리워드 스탯 포인트 함수를 통해서 전하는 인자는 완료할 수 있는 퀘스트의 Reward값 입니다!

 

구현 결과

COMPLETE 버튼을 눌러 퀘스트 완료 시 리워드 인터페이스에 의하여
파티클이 생성되고 스탯 포인트가 오르는것을 확인할 수 있습니다.

 

또한 Completed 처리 된 퀘스트는 위젯 재생성 시 나타나지 않게 됩니다.

 

여기까지 퀘스트 카운팅 및 보상의 구현이었습니다.


감사합니다!

저작자표시 (새창열림)

'[게임 개발] 개발 일지 > RPG' 카테고리의 다른 글

23. HUD 위젯 추가  (1) 2023.10.07
22. 몬스터 사망모션 캔슬 버그 수정 및 컨텐츠 추가  (0) 2023.10.06
20. 퀘스트 시스템 - 퀘스트 표시와 수락  (0) 2023.10.06
19. 퀘스트 시스템 - 데이터 테이블 구축  (0) 2023.10.05
18. 스탯 UI 구현하기 - 2  (0) 2023.10.03
'[게임 개발] 개발 일지/RPG' 카테고리의 다른 글
  • 23. HUD 위젯 추가
  • 22. 몬스터 사망모션 캔슬 버그 수정 및 컨텐츠 추가
  • 20. 퀘스트 시스템 - 퀘스트 표시와 수락
  • 19. 퀘스트 시스템 - 데이터 테이블 구축
람팜팜~
람팜팜~
:)
  • 람팜팜~
    RumPumPum
    람팜팜~
  • 전체
    오늘
    어제
    • 전체 (123)
      • 🎵 일상 (2)
      • JAVA (5)
        • 김영한의 자바 입문 (3)
      • JavaScript (12)
      • ---------------------------.. (0)
      • [게임 개발] 포트폴리오 (2)
        • RPG (1)
        • 슈터-플랫포머 (1)
      • [게임 개발] 개발 일지 (28)
        • RPG (25)
        • TopDownProject (3)
      • [게임 개발] 언리얼엔진 공부 (9)
        • 이득우의 언리얼 프로그래밍 Part.1 (6)
        • 이득우의 언리얼 프로그래밍 Part.2 (1)
        • 개인 메모 (2)
      • [게임 개발] 알고리즘 공부 (60)
        • 프로그래머스 (8)
        • 백준 (52)
        • 개인 메모 (0)
      • [게임 개발] CPP 공부 (2)
        • 이것이 C++ 이다 (1)
        • Effective C++ (0)
        • Effective Modern C++ (0)
        • 홍정모 그래픽스 새싹코스 (1)
      • [게임 개발] CS 공부 (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      참조자
      우선순위 큐
      스레드
      누적합
      역참조
      해시
      데드락
      context switching
      슬라이딩 윈도우
      투포인터
      dfs
      그리디
      메모리구조
      브루트포스
      dp
      문자열
      프로세스
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    람팜팜~
    21. 퀘스트 시스템 - 카운팅과 보상
    상단으로

    티스토리툴바