157 lines
4.3 KiB
C#
157 lines
4.3 KiB
C#
using asap.core;
|
|
using cfg;
|
|
using game;
|
|
using GameCore;
|
|
using LitJson;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
[Serializable]
|
|
public class FishingBoxData
|
|
{
|
|
public Dictionary<int, int> FishingNewBoxs = new();
|
|
public Dictionary<int, int> FishingBoxOpenNum = new();
|
|
|
|
public void InitData(string data)
|
|
{
|
|
if (string.IsNullOrEmpty(data) == false)
|
|
{
|
|
var boxData = Newtonsoft.Json.JsonConvert.DeserializeObject<FishingBoxData>(data);
|
|
//FishingNewBoxs = boxData.FishingNewBoxs;
|
|
FishingBoxOpenNum = boxData.FishingBoxOpenNum;
|
|
|
|
//var firstItemID = FishingBoxDataProvier.firstFishingBoxID;
|
|
//for (int i = 0; i < FishingBoxDataProvier.QualityCount; i++)
|
|
//{
|
|
// if (!FishingNewBoxs.ContainsKey(firstItemID + i))
|
|
// {
|
|
// FishingNewBoxs.Add(firstItemID + i, 0);
|
|
// }
|
|
//}
|
|
}
|
|
}
|
|
public void InitDataNew(string data)
|
|
{
|
|
if (string.IsNullOrEmpty(data) == false)
|
|
{
|
|
var boxData = data.Split(';');
|
|
FishingBoxOpenNum = new Dictionary<int, int>();
|
|
for (int i = 0; i < boxData.Length; i++)
|
|
{
|
|
var itemData = boxData[i].Split(',');
|
|
if (itemData.Length == 2)
|
|
{
|
|
int itemID = int.Parse(itemData[0]);
|
|
int openNum = int.Parse(itemData[1]);
|
|
FishingBoxOpenNum.Add(itemID, openNum);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
public void SetFishingBoxCount(int itemID, int value)
|
|
{
|
|
if (value < 0)
|
|
GContext.Publish(new ConditionTypeEvent { type = ConditionType.OpenFishBoxCount, count = -value });
|
|
if (FishingNewBoxs.ContainsKey(itemID))
|
|
{
|
|
FishingNewBoxs[itemID] += value;
|
|
}
|
|
else
|
|
{
|
|
FishingNewBoxs.Add(itemID, value);
|
|
}
|
|
}
|
|
public string GetString()
|
|
{
|
|
string fishingBoxOpenNum = "";
|
|
foreach (var box in FishingBoxOpenNum)
|
|
{
|
|
fishingBoxOpenNum += box.Key + "," + box.Value + ";";
|
|
}
|
|
return fishingBoxOpenNum.TrimEnd(';');
|
|
}
|
|
|
|
public int GetFishingBoxCount(int itemID)
|
|
{
|
|
if (FishingNewBoxs.ContainsKey(itemID))
|
|
{
|
|
return FishingNewBoxs[itemID];
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
public void AddBoxOpenCount(int itemID, int count)
|
|
{
|
|
if (FishingBoxOpenNum.ContainsKey(itemID))
|
|
{
|
|
FishingBoxOpenNum[itemID] += count;
|
|
}
|
|
else
|
|
FishingBoxOpenNum.Add(itemID, count);
|
|
GContext.container.Resolve<PlayerData>().SavePlayerData();
|
|
}
|
|
public int GetFishingBoxOpenCount(int itemID)
|
|
{
|
|
if (FishingBoxOpenNum.ContainsKey(itemID))
|
|
{
|
|
return FishingBoxOpenNum[itemID];
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
|
|
}
|
|
public class FishingBoxDataProvier
|
|
{
|
|
public static int QualityCount;
|
|
public static int firstFishingBoxID;
|
|
|
|
public bool IsUnclocked;
|
|
|
|
public FishingBoxData Data;
|
|
|
|
public FishingBoxDataProvier(Tables table)
|
|
{
|
|
firstFishingBoxID = table.TbBox.DataList[0].ID;
|
|
QualityCount = table.TbBox.DataList.Count;
|
|
_itemDropPackages = table.TbItemDropPackage.DataMap;
|
|
_boxInits = table.TbBoxInit.DataMap;
|
|
Data = GContext.container.Resolve<FishingBoxData>();
|
|
}
|
|
|
|
#region TablesData
|
|
private Dictionary<int, ItemDropPackage> _itemDropPackages;
|
|
private Dictionary<int, BoxInit> _boxInits;
|
|
#endregion
|
|
|
|
#region Get Function
|
|
public List<int> GetFishingBoxDropID(int itemID)
|
|
{
|
|
Data.AddBoxOpenCount(itemID, 1);
|
|
if (_boxInits.ContainsKey(itemID))
|
|
{
|
|
var boxInit = _boxInits[itemID];
|
|
var openCout = Data.GetFishingBoxOpenCount(itemID);
|
|
if (openCout <= boxInit.DropChange.Count && openCout != 0)
|
|
{
|
|
return _itemDropPackages[boxInit.DropChange[openCout - 1]].DropList;
|
|
}
|
|
}
|
|
|
|
return _itemDropPackages[itemID].DropList;
|
|
}
|
|
|
|
public int GetIDByQuality(int quality)
|
|
{
|
|
return firstFishingBoxID + quality;
|
|
}
|
|
|
|
public int GetBoxCount(int itemID)
|
|
{
|
|
return Data.GetFishingBoxCount(itemID);
|
|
}
|
|
|
|
#endregion
|
|
}
|