diff --git a/Assets/Scripts/Managers/DialogueManager.cs b/Assets/Scripts/Managers/DialogueManager.cs
index 4b5bdfa859abb2b74ec2fc00447cfc798fe51d9b..0e9b30a4a1afbdf6057adf3e075c4ac74890d615 100644
--- a/Assets/Scripts/Managers/DialogueManager.cs
+++ b/Assets/Scripts/Managers/DialogueManager.cs
@@ -23,6 +23,16 @@ public class DialogueManager : MonoBehaviour
     public Text npcDialogueBox;
     public Text playerResponse;
 
+    private bool[] hasTalked = new bool[4];
+    public bool[] HasTalked
+    {
+        get => hasTalked;
+        set
+        {
+            hasTalked = value;
+        }
+    }
+
     // Start is called before the first frame update
     void Start()
     {
@@ -102,6 +112,7 @@ public class DialogueManager : MonoBehaviour
 
     private void StartConvo()
     {
+        hasTalked[GlobalStateManager.Instance.IdxQuest] = true;
         isTalking = true;
         curResponseTracker = 0f;
         dialogueUI.SetActive(true);
diff --git a/Assets/Scripts/Quest/Temple/Temple.cs b/Assets/Scripts/Quest/Temple/Temple.cs
index f2e2d99e71185a023d984387f8b1903beb97f8e2..b43992e80ea662ad81d0a61058fe0e8f82a913b5 100644
--- a/Assets/Scripts/Quest/Temple/Temple.cs
+++ b/Assets/Scripts/Quest/Temple/Temple.cs
@@ -64,7 +64,8 @@ public class Temple : MonoBehaviour
     // Update is called once per frame
     void Update()
     {
-        if (playerOnRange && Input.GetKeyDown(KeyCode.G))
+        var hasTalked = GlobalStateManager.Instance.HasTalked[idxCurrentQuest];
+        if (playerOnRange && Input.GetKeyDown(KeyCode.G) && hasTalked)
         {
             ToastManager.Instance.ShowToast("ENTERING QUEST",1);
             EnteringQuest();
@@ -121,6 +122,15 @@ public class Temple : MonoBehaviour
     {
         if (other.CompareTag("Player"))
         {
+            playerOnRange = true;
+
+            var hasTalkeds = GlobalStateManager.Instance.HasTalked;
+            if (!hasTalkeds[idxCurrentQuest])
+            {
+                ToastManager.Instance.ShowToast("Talk first with wizard", 1);
+                return;
+            }
+
             if (onQuest)
             {
                 ToastManager.Instance.ShowToast("- Good Luck with your Quest -",1);
@@ -130,7 +140,6 @@ public class Temple : MonoBehaviour
                 ToastManager.Instance.ShowToast("- Press G to Enter Quest " +
                     (idxCurrentQuest+1) + " - ",1);
             }
-            playerOnRange = true;
         }   
     }
 
diff --git a/Assets/Scripts/States/GlobalStateManager.cs b/Assets/Scripts/States/GlobalStateManager.cs
index dbe4210efa0deb919a0190a3e90162c4be89366c..3aad6a5254ccb76abab5c98633f55fe84c8cdab5 100644
--- a/Assets/Scripts/States/GlobalStateManager.cs
+++ b/Assets/Scripts/States/GlobalStateManager.cs
@@ -24,6 +24,19 @@ public class GlobalStateManager : MonoBehaviour
     }
     private PetHealth petHealth;
     private CheatManager cheatManager;
+    private DialogueManager dialogueManager;
+    public DialogueManager DialogueManager
+    {
+        get
+        {
+            if (dialogueManager == null)
+            {
+                dialogueManager = FindObjectOfType<DialogueManager>();
+            }
+
+            return dialogueManager;
+        }
+    }
 
     private void Awake()
     {
@@ -45,6 +58,7 @@ public class GlobalStateManager : MonoBehaviour
         _temple = FindObjectOfType<Temple>();
         petHealth = FindObjectOfType<PetHealth>();
         cheatManager = FindObjectOfType<CheatManager>();
+        dialogueManager = FindObjectOfType<DialogueManager>();
     }
 
     public int Money
@@ -89,6 +103,15 @@ public class GlobalStateManager : MonoBehaviour
         }
     }
 
+    public bool[] HasTalked
+    {
+        get => DialogueManager.HasTalked;
+        set
+        {
+            DialogueManager.HasTalked = value;
+        }
+    }
+
     private PetManager _petManager;
     public PetManager petManager
     {
@@ -190,7 +213,7 @@ public class GlobalStateManager : MonoBehaviour
         var metaStateSave = new MetaStateSave("name");
         var playerStateSave = new PlayerStateSave(PlayerName, Money, Health, IdxQuest, playerWeapons);
         var petStateSave = new PetStateSave(PetHealth, (int)GameControl.control.petIdx);
-        var globalStateSave = new GlobalStateSave(TimePlayed, Cheats);
+        var globalStateSave = new GlobalStateSave(TimePlayed, Cheats, HasTalked);
 
         var state = new StateSave(metaStateSave, playerStateSave, petStateSave, globalStateSave);
         return state;
@@ -237,5 +260,6 @@ public class GlobalStateManager : MonoBehaviour
         // TODO: global state save
         GlobalManager.Instance.TimePlayed = state.globalStateSave.timePlayed;
         cheatManager.loadCheat(state.globalStateSave.cheats);
+        HasTalked = state.globalStateSave.hasTalked;
     }
 }
diff --git a/Assets/Scripts/States/StateSave.cs b/Assets/Scripts/States/StateSave.cs
index f925f4cce9ef4726eb1f2bcb4574b8e50ba33ed5..61555a5c2624d7dc3d780a89334f12346c7435f1 100644
--- a/Assets/Scripts/States/StateSave.cs
+++ b/Assets/Scripts/States/StateSave.cs
@@ -98,11 +98,13 @@ public class GlobalStateSave
 {
     public double timePlayed;
     public bool[] cheats;
+    public bool[] hasTalked;
 
-    public GlobalStateSave(double timePlayed, bool[] cheats)
+    public GlobalStateSave(double timePlayed, bool[] cheats, bool[] hasTalked)
     {
         this.timePlayed = timePlayed;
         this.cheats = cheats;
+        this.hasTalked = hasTalked;
     }
 
     public override string ToString()