using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; public class QuestAction : MonoBehaviour { public QuestScriptable questData; bool isRegistered = false; public UnityEvent OnComplete; public bool isFinalAction = true; public List resourceCheckEntries; private void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Player") && other.transform == playerNetwork.localPlayerTransform) { foreach(QuestCompleteResourceCheckEntry entry in resourceCheckEntries) //Check if has all resources { int stockCount = playerNetwork.localPlayerTransform.GetComponent().inventoryManager.GetStock(entry.resource.type); if(stockCount < entry.amount) { Debug.Log($"Not enough {entry.resource.type}, need {entry.amount}, found {stockCount}"); return; } } foreach(QuestCompleteResourceCheckEntry entry in resourceCheckEntries){ //Remove resources if(playerNetwork.localPlayerTransform.GetComponent().inventoryManager.GetStock(entry.resource.type) < entry.amount){ }else{ playerNetwork.localPlayerTransform.GetComponent().inventoryManager.RemoveItem(entry.resource.type, entry.amount); } } OnComplete.Invoke(); Debug.Log("QuestAction: QuestAction completed"); if (isFinalAction) { playerNetwork.localPlayerTransform.GetComponent().CompleteQuest(questData); } gameObject.SetActive(false); } } public void activate() { gameObject.SetActive(true); } void Update() { if (playerNetwork.localPlayerTransform != null && !isRegistered) { Register(); } } void Register() { playerNetwork.registerQuestAction(this); isRegistered = true; gameObject.SetActive(false); } } [Serializable ] public class QuestCompleteResourceCheckEntry { public item resource; public int amount; }