using UnityEngine;
using System.Linq;
///
/// Simple debug script to help troubleshoot quest system issues
///
public class QuestSystemDebugger : MonoBehaviour
{
[Header("Debug Options")]
public bool enableDebugLogs = true;
public bool autoDebugOnStart = true;
private void Start()
{
if (autoDebugOnStart)
{
// Wait a frame to ensure all systems are initialized
Invoke(nameof(DebugQuestSystem), 0.5f);
}
}
[ContextMenu("Debug Quest System")]
public void DebugQuestSystem()
{
LogDebug("=== QUEST SYSTEM DEBUG ===");
// Check QuestManager
DebugQuestManager();
// Check AdventurersGuild
DebugAdventurersGuild();
// Check Quest Assets
DebugQuestAssets();
LogDebug("=== DEBUG COMPLETE ===");
}
private void DebugQuestManager()
{
LogDebug("--- QuestManager ---");
if (QuestManager.Instance == null)
{
LogDebug("❌ QuestManager.Instance is NULL!");
return;
}
LogDebug($"✅ QuestManager found");
LogDebug($"📊 Current Renown: {QuestManager.Instance.GetRenown()}");
LogDebug($"📋 Active Quests: {QuestManager.Instance.GetActiveQuests().Count}");
LogDebug($"🎯 Can Accept More: {QuestManager.Instance.CanAcceptMoreQuests()}");
}
private void DebugAdventurersGuild()
{
LogDebug("--- AdventurersGuild ---");
var guild = FindFirstObjectByType();
if (guild == null)
{
LogDebug("❌ AdventurersGuild component not found!");
return;
}
LogDebug($"✅ AdventurersGuild found");
var questBoard = guild.GetQuestBoard();
LogDebug($"📋 Quest Board Count: {questBoard.Count}");
if (questBoard.Count > 0)
{
LogDebug("📝 Quest Board Contents:");
foreach (var quest in questBoard)
{
LogDebug($" - {quest.questTitle} (Renown: {quest.minimumRenown}, Reward: {quest.goldReward}g)");
}
}
else
{
LogDebug("⚠️ Quest Board is empty - calling RefreshQuestBoard()");
guild.RefreshQuestBoard();
var refreshedBoard = guild.GetQuestBoard();
LogDebug($"📋 After refresh: {refreshedBoard.Count} quests");
}
}
private void DebugQuestAssets()
{
LogDebug("--- Quest Assets ---");
// Check Resources folder for quests
var allQuests = Resources.LoadAll("");
LogDebug($"📚 Total Quest assets in Resources: {allQuests.Length}");
if (allQuests.Length > 0)
{
LogDebug("📝 Available Quest Assets:");
foreach (var quest in allQuests)
{
LogDebug($" - {quest.questTitle} (Min Renown: {quest.minimumRenown}, File: {quest.name})");
}
}
else
{
LogDebug("⚠️ No Quest assets found in Resources folder!");
}
// Check specific subfolders
var questSubfolders = new string[] { "Quests", "Quests/Combat", "Quests/Rescue", "Quests/Retrieval", "Quests/Exploration" };
foreach (var folder in questSubfolders)
{
var folderQuests = Resources.LoadAll(folder);
if (folderQuests.Length > 0)
{
LogDebug($"📁 {folder}: {folderQuests.Length} quests");
}
}
}
[ContextMenu("Create Test Quest")]
public void CreateTestQuest()
{
LogDebug("Creating runtime test quest...");
if (QuestManager.Instance == null)
{
LogDebug("❌ QuestManager not found!");
return;
}
var testQuest = ScriptableObject.CreateInstance();
testQuest.questTitle = "Debug Test Quest";
testQuest.questDescription = "A simple test quest for debugging the quest system.";
testQuest.questType = QuestType.Combat;
testQuest.difficulty = QuestDifficulty.Easy;
testQuest.timeLimitDays = 7;
testQuest.targetAreaName = "Test Area";
testQuest.targetMapPosition = new Vector2Int(50, 50);
testQuest.goldReward = 100;
testQuest.renownReward = 10;
testQuest.minimumRenown = 0; // Ensure it's available to new players
testQuest.goals.Add(new QuestGoal
{
description = "Test objective",
goalType = QuestGoalType.KillEnemies,
targetName = "TestEnemy",
targetCount = 1
});
bool accepted = QuestManager.Instance.AcceptQuest(testQuest);
LogDebug($"Test quest acceptance: {(accepted ? "✅ SUCCESS" : "❌ FAILED")}");
}
[ContextMenu("Add Renown")]
public void AddTestRenown()
{
if (QuestManager.Instance != null)
{
// Use reflection or debug method to add renown
LogDebug("Adding test renown (this is a debug feature)");
// In a real implementation, you'd need a way to modify renown for testing
}
}
private void LogDebug(string message)
{
if (enableDebugLogs)
{
Debug.Log($"[QuestDebugger] {message}");
}
}
}