어떤 퀘스트 시스템을 추가하는가?
현재 NPC가 장비를 의뢰하여 제작한 다음 제출하는 퀘스트가 유일한데
NPC한테 장비를 받아 강화하여 제출하는 퀘스트를 추가해
다양한 퀘스트를 플레이어한테 제공하고자 합니다.
[SerializeField]
public enum OrderNPC
{
All,
Guild,
Merchant,
Wizard
}
[CreateAssetMenu(fileName = "Quest Data", menuName = "Scriptable Object/Quest Data")]
public class QuestSO : ScriptableObject
{
[Header("Quest Info")]
public int id;
[TextArea]
public string questName;
[TextArea]
public string description;
public ItemSO item;
public int itemLevel;
public int amount;
[Header("Quest Sub")]
public int day;
public bool isMain = false;
public OrderNPC npc;
[Header("QuestType")]
public bool is_Get; // 아이템 수령 여부
public ItemSO getItem; // 수령할 아이템
public int getItemLevel; // 수령할 아이템 레벨
public int getAmount; // 수령할 아이템 개수
[Header("Reward")]
public int gold;
public int exp;
}

주의해야할 예외 사항
인벤토리에 아이템을 획득 할 수 없을 때
퀘스트를 수주 하지 못하도록 예외처리를 진행해야합니다.
[이후 추가 구현 필요]
장비를 받으므로 퀘스트를 클리어 하지 못한 경우 패널티를 부여가 필요합니다.
public void AddQuest()
{
// Bool형식 메서드로 변환하여 True,False를 반환하여 조건 확인
if (QuestManager.Instance.AddQuest(questList[selectNum]))
{
orders[selectNum].detailButton.interactable = false;
orders[selectNum].questNameText.text = "퀘스트가 없습니다.";
}
}
public bool AddQuest(QuestSO quest)
{
// 퀘스트의 수령 여부 확인
if (quest.is_Get)
{
// 아이템을 획득 가능한 상태인지 확인
if (InventoryManager.Instance.inventory.CanAcquireItem(quest.getItem))
{
// 조건이 충족되면 수령아이템을 획득한다.
InventoryManager.Instance.inventory.AcquireItem(quest.getItem, quest.getItemLevel);
}
else
{
// 조건이 충족되지 않다면 이유를 UI에 출력하고 False로 반환
GameManager.UI.GetT<UI_Check>(UiName.UICheck).CheckView("인벤토리가 가득 찼습니다.");
return false;
}
}
// 수령 여부가 충족되었거나 수령 여부가 없을 경우 퀘스트를 추가하고
// 퀘스트 UI에 추가된 퀘스트슬롯을 생성하고 True를 반환
questList.Add(new Quest(quest));
GameManager.UI.GetT<UI_QuestView>(UiName.UIQuestView).InstantiateQuest(questList[questList.Count-1]);
return true;
}

