using UnityEngine; using UnityEngine.Networking; using System.Collections; using System.Collections.Generic; using System; using Newtonsoft.Json; [Serializable] public class QuestData { public string id; public string title; public string description; public int reward; public string actionType; public string targetId; public int requiredAmount; } [Serializable] public class QuestList { public List quests; } [System.Serializable] public class MailDataWrapper { public List mails; } public class MANAGER_RemoteData : MonoBehaviour { public static MANAGER_RemoteData Instance { get; private set; } [Header("Server Settings")] [SerializeField] private string dataUrl = "http://mc1.live-on.pro:64093/quests/quests.json"; public QuestList currentData; public static event Action OnDataLoaded; private void Awake() { if (Instance == null){ Instance = this; DontDestroyOnLoad(gameObject); } else Destroy(gameObject); } private void Start() { FetchLatestData(); } public void FetchLatestData() { StartCoroutine(DownloadJsonCoroutine()); } private IEnumerator DownloadJsonCoroutine() { using (UnityWebRequest webRequest = UnityWebRequest.Get(dataUrl)) { yield return webRequest.SendWebRequest(); if (webRequest.result == UnityWebRequest.Result.ConnectionError || webRequest.result == UnityWebRequest.Result.ProtocolError) { } else { string jsonText = webRequest.downloadHandler.text; ProcessDownloadedData(jsonText); } } } private void ProcessDownloadedData(string json) { try { // Используем JsonConvert вместо JsonUtility currentData = JsonConvert.DeserializeObject(json); if (currentData != null && currentData.quests != null) { Debug.Log($"[RemoteData] Успех! Загружено квестов: {currentData.quests.Count}"); OnDataLoaded?.Invoke(); } else { Debug.LogError("[RemoteData] Ошибка: Данные пусты после десериализации."); } } catch (Exception e) { Debug.LogError($"[RemoteData] Ошибка парсинга: {e.Message}"); } } }