115 lines
No EOL
2.5 KiB
C#
115 lines
No EOL
2.5 KiB
C#
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<QuestData> quests;
|
|
}
|
|
|
|
[System.Serializable]
|
|
public class MailDataWrapper
|
|
{
|
|
public List<MailEntry> 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<QuestList>(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}");
|
|
}
|
|
}
|
|
} |