Files
SVSimServer/SVSim.BattleEngine/Engine/Wizard/CardMaster.cs
gamer147 0d9d8acae0 feat(battle-engine): M1 auto-copy closure (782 battle-logic files)
Compile-driven bulk-copy loop (tools/engine-port/m1_copy_loop.py) pulled the precise reference closure of the battle-core roots, stopping at the classify god-object/View-VFX-UI boundary. 782 files; no re-explosion (M0 had estimated ~order 1000). Residual frontier = 52 shim-classified + 80 external (Unity/BCL) types to author next.
2026-06-05 16:57:20 -04:00

270 lines
7.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Cute;
using LitJson;
using Wizard.Battle.Recovery;
namespace Wizard;
public class CardMaster
{
public class UpdateInfo
{
public bool NeedUpdateLocalCardMaster { get; private set; }
public string NewCardMasterHash { get; private set; }
public UpdateInfo(JsonData data)
{
if (data.Keys.Contains("card_master_hash"))
{
NeedUpdateLocalCardMaster = true;
NewCardMasterHash = data["card_master_hash"].ToString();
}
else
{
NeedUpdateLocalCardMaster = false;
NewCardMasterHash = string.Empty;
}
}
}
public enum CardMasterId
{
Default = 1,
NextCardMaster
}
private const int CARD_ID_CLASS_CHECK = 100;
private static Dictionary<CardMasterId, CardMaster> _dictCardMaster = null;
private readonly IDictionary<int, CardParameter> m_cardParameters;
private readonly IDictionary<string, int> _hashIdCardId;
private CardParameter _classCardParam;
public static CardMasterId BatttleCardMasterId { get; private set; } = CardMasterId.Default;
public static CardMaster GetInstance(CardMasterId cardMasterId)
{
if (_dictCardMaster == null)
{
return null;
}
CardMaster value = null;
_dictCardMaster.TryGetValue(cardMasterId, out value);
return value;
}
public static CardMaster GetInstanceForBattle()
{
return GetInstance(BatttleCardMasterId);
}
public static void DeleteAllInstance()
{
_dictCardMaster = null;
BatttleCardMasterId = CardMasterId.Default;
}
private CardMaster(List<CardCSVData> cardList)
{
m_cardParameters = cardList.ToDictionary((CardCSVData entry) => int.Parse(entry.card_id), (CardCSVData entry) => new CardParameter(entry));
if (!IsUseLocalCardMaster())
{
_hashIdCardId = cardList.ToDictionary((CardCSVData entry) => entry.CardHashId, (CardCSVData entry) => int.Parse(entry.card_id));
}
_classCardParam = new CardParameter();
}
public static void InitializeCardMaster(UpdateInfo cardMasterUpdateInfo, Action onSuccess)
{
Dictionary<CardMasterId, string> dictCardMasterCSV = null;
if (cardMasterUpdateInfo.NeedUpdateLocalCardMaster)
{
UIManager.GetInstance().createInSceneCenterLoading(notBlack: false, notCollider: false, force: false, Data.SystemText.Get("System_0053"));
GetCardMasterTask task = new GetCardMasterTask(cardMasterUpdateInfo.NewCardMasterHash);
UIManager.GetInstance().StartCoroutine(Toolbox.NetworkManager.Connect(task, delegate
{
dictCardMasterCSV = ParseJsonToCardMasterCSV(task.CardMasterJsonData);
SaveLocalCardMasterCSV(dictCardMasterCSV, cardMasterUpdateInfo.NewCardMasterHash);
CreateAllCardMasterByCSV(dictCardMasterCSV);
onSuccess.Call();
}, BaseTask.OnRequestFailed, BaseTask.OnFailedErrorCode, encrypt: true, useJson: false, showLoadingIcon: false));
ClearSaveData();
}
else if (CardMasterLocalFileUtility.ReadLocalCardMasterCSV(out dictCardMasterCSV))
{
CreateAllCardMasterByCSV(dictCardMasterCSV);
onSuccess.Call();
}
}
private static void ClearSaveData()
{
PlayerPrefsWrapper.SetBool(PlayerPrefsWrapper.DECK_INTRO_IS_MYROTATION_COPY_EQUAL_PERIOD, flag: false);
PlayerPrefsWrapper.SetBool(PlayerPrefsWrapper.DECK_INTRO_IS_MYROTATION_COPY_NOT_EQUAL_PERIOD, flag: true);
}
private static void SaveLocalCardMasterCSV(Dictionary<CardMasterId, string> dictCardMasterCSV, string cardMasterHash)
{
CardMasterLocalFileUtility.WriteAllCardMasterLocalFile(dictCardMasterCSV, cardMasterHash);
RecoveryRecordManagerBase.DeleteRecoveryFile();
}
private static void CreateAllCardMasterByCSV(Dictionary<CardMasterId, string> dictCardMasterCSV)
{
if (_dictCardMaster == null)
{
_dictCardMaster = new Dictionary<CardMasterId, CardMaster>();
}
foreach (KeyValuePair<CardMasterId, string> item in dictCardMasterCSV)
{
CardMaster cardMaster = CreateCardMaster(item.Key, item.Value);
if (cardMaster != null)
{
_dictCardMaster[item.Key] = cardMaster;
}
}
}
private static Dictionary<CardMasterId, string> ParseJsonToCardMasterCSV(JsonData cardMaster)
{
Dictionary<CardMasterId, string> dictionary = new Dictionary<CardMasterId, string>();
foreach (CardMasterId value in Enum.GetValues(typeof(CardMasterId)))
{
int num = (int)value;
string text = num.ToString();
if (cardMaster.Keys.Contains(text))
{
string text2 = cardMaster[text].ToString();
if (text2 != "")
{
dictionary[value] = text2;
}
}
}
return dictionary;
}
private static CardMaster CreateCardMaster(CardMasterId cardMasterId, string cardMasterCSV)
{
if (cardMasterCSV == "")
{
return null;
}
List<string[]> list = Utility.ConvertCSV_Array(cardMasterCSV, removeTitle: false);
int count = list.Count;
List<CardCSVData> list2 = new List<CardCSVData>(count);
Dictionary<string, CardCSVData> dictionary = new Dictionary<string, CardCSVData>(count);
int num = 0;
foreach (string[] item in list)
{
CardCSVData cardCSVData = new CardCSVData(item, num);
list2.Add(cardCSVData);
dictionary.Add(cardCSVData.card_id, cardCSVData);
num++;
}
foreach (CardCSVData item2 in list2)
{
item2.CorrectPremiumResourceId(dictionary);
}
return new CardMaster(list2);
}
public static bool IsClass(int cardId)
{
return cardId < 100;
}
public static bool IsMutationCardCheck(int baseCardID)
{
if (baseCardID > 800000000)
{
return baseCardID % 800000000 < 10000000;
}
return false;
}
public static bool IsChoiceBraveCardCheck(int baseCardId)
{
return baseCardId / 1000000 == 930;
}
public IEnumerable<CardParameter> GetAllParameters()
{
return m_cardParameters.Values;
}
public List<int> GetAllCardIds()
{
return m_cardParameters.Keys.ToList();
}
public CardParameter GetCardParameterFromId(int cardId)
{
if (IsClass(cardId))
{
return _classCardParam;
}
m_cardParameters.TryGetValue(cardId, out var value);
return value;
}
public CardParameter GetCardParamFromCardHashId(string cardHashId)
{
_hashIdCardId.TryGetValue(cardHashId, out var value);
return GetCardParameterFromId(value);
}
public bool CardExists(int cardId)
{
return m_cardParameters.Keys.Contains(cardId);
}
public List<int> GetSameCardListByBaseCardId(int baseCardId)
{
List<int> list = new List<int>();
foreach (KeyValuePair<int, CardParameter> cardParameter in m_cardParameters)
{
CardParameter value = cardParameter.Value;
if (value.BaseCardId == baseCardId)
{
list.Add(value.CardId);
}
}
return list;
}
public void RegisterCardParameter(int cardId, CardParameter cardParam)
{
m_cardParameters.Add(cardId, cardParam);
}
public void UnregisterCardParameter(int cardId)
{
m_cardParameters.Remove(cardId);
}
public static void SetBattleCardMasterId(CardMasterId cardMasterId)
{
BatttleCardMasterId = cardMasterId;
}
public static void SetBattleCardMasterId(int cardMasterId)
{
if (Enum.IsDefined(typeof(CardMasterId), cardMasterId))
{
SetBattleCardMasterId((CardMasterId)cardMasterId);
}
}
public static bool IsUseLocalCardMaster()
{
return false;
}
}