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 FishingBoxs = new(); public Dictionary FishingNewBoxs = new(); public Dictionary FishingBoxOpenNum = new(); public int FishingBoxScore; public int CurFishingBoxLevel; public FishingBoxData() { var firstItemID = FishingBoxDataProvier.firstFishingBoxID; for (int i = 0; i < FishingBoxDataProvier.QualityCount; i++) { FishingBoxs.Add(firstItemID + i, 0); FishingNewBoxs.Add(firstItemID + i, 0); } } public void InitData(string data) { if (string.IsNullOrEmpty(data) == false) { var boxData = Newtonsoft.Json.JsonConvert.DeserializeObject(data); FishingBoxs = boxData.FishingBoxs; FishingNewBoxs = boxData.FishingNewBoxs; FishingBoxOpenNum = boxData.FishingBoxOpenNum; FishingBoxScore = boxData.FishingBoxScore; CurFishingBoxLevel = boxData.CurFishingBoxLevel; var firstItemID = FishingBoxDataProvier.firstFishingBoxID; for (int i = 0; i < FishingBoxDataProvier.QualityCount; i++) { if (!FishingBoxs.ContainsKey(firstItemID + i)) { FishingBoxs.Add(firstItemID + i, 0); } if (!FishingNewBoxs.ContainsKey(firstItemID + i)) { FishingNewBoxs.Add(firstItemID + i, 0); } } } } 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); } Save(); } public void Save() { PlayFabMgr.Instance.UpdateUserDataValue("FishingBoxData", JsonMapper.ToJson(this)); } public int GetFishingBoxCount(int itemID) { if (FishingNewBoxs.ContainsKey(itemID)) { return FishingNewBoxs[itemID]; } return 0; } public int GetNextValidFishingBoxSelectedID() { foreach (var box in FishingBoxs) { var id = box.Key; if (box.Value > 0) { return id; } } return -1; } public void AddBoxOpenCount(int itemID, int count) { if (FishingBoxOpenNum.ContainsKey(itemID)) { FishingBoxOpenNum[itemID] += count; } else FishingBoxOpenNum.Add(itemID, count); Save(); } 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 int EventTipID; public bool IsUnclocked; public bool CanSwitchBox; private int _curSelectedID; /// /// 0-4 /// private int _curSelectedQuality; private int maxOpenCount; public int CurSelectedID { get { return _curSelectedID; } set { _curSelectedID = value; _curSelectedQuality = GetQualityByID(value); } } //public int CurSelectedQuality //{ // get // { // return _curSelectedQuality; // } // set // { // _curSelectedQuality = value; // if (_curSelectedQuality < 0 || _curSelectedQuality > QualityCount - 1) // { // _curSelectedQuality += QualityCount; // _curSelectedQuality %= QualityCount; // } // _curSelectedID = GetIDByQuality(_curSelectedQuality); // } //} //public int CurBoxLevel //{ // get // { // var level = Data.CurFishingBoxLevel; // if (level == 0) // { // Data.CurFishingBoxLevel = 1; // Data.Save(); // } // var len = _boxLevels.Count; // if (level > len) // { // Data.CurFishingBoxLevel = 1; // Data.Save(); // } // return Data.CurFishingBoxLevel; // } // set // { // var count = value; // if (value == 0) // { // count = 1; // } // var len = _boxLevels.Count; // if (value > len) // { // count = 1; // } // Data.CurFishingBoxLevel = count; // Data.Save(); // } //} public FishingBoxData Data; public FishingBoxDataProvier(Tables table) { firstFishingBoxID = table.TbBox.DataList[0].ID; QualityCount = table.TbBox.DataList.Count; _items = table.TbItem.DataMap; _itemDropPackages = table.TbItemDropPackage.DataMap; _boxLevels = table.TbBoxLevel.DataMap; _boxInits = table.TbBoxInit.DataMap; _boxes = table.TbBox.DataMap; maxOpenCount = table.TbGlobalConfig.BoxMaxOpenCount; Data = GContext.container.Resolve(); } #region TablesData private Dictionary _items; private Dictionary _itemDropPackages; private Dictionary _boxLevels; private Dictionary _boxes; private Dictionary _boxInits; #endregion public void Init() { CanSwitchBox = true; CurSelectedID = Data.GetNextValidFishingBoxSelectedID() == -1 ? firstFishingBoxID : Data.GetNextValidFishingBoxSelectedID(); } #region Get Function public List GetFishingBoxDropID(int itemID = -1) { if (itemID == -1) { itemID = CurSelectedID; } 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 string GetFishingBoxName(int itemID = -1) //{ // if (itemID == -1) // { // return LocalizationMgr.GetFormatTextValue(_items[CurSelectedID].Name_l10n_key); // } // return LocalizationMgr.GetFormatTextValue(_items[itemID].Name_l10n_key); //} //public string GetFishingBoxRewardTitle(int itemID = -1) //{ // if (itemID == -1) // { // return LocalizationMgr.GetFormatTextValue(_itemDropPackages[CurSelectedID].Desc_l10n_key); // } // return LocalizationMgr.GetFormatTextValue(_itemDropPackages[itemID].Desc_l10n_key); //} //public string GetFishingBoxDesc(int itemID = -1) //{ // if (itemID == -1) // { // return LocalizationMgr.GetFormatTextValue(_items[CurSelectedID].Desc_l10n_key); // } // return LocalizationMgr.GetFormatTextValue(_items[itemID].Desc_l10n_key); //} //public string GetFishingBoxTitleImg(int itemID = -1) //{ // var name = "bg_fishingbox_title_"; // if (itemID == -1) // { // return name + (CurSelectedQuality + 1); // } // return name + (GetQualityByID(itemID) + 1); //} //public string GetFishingBoxTipImg(int itemID = -1) //{ // var name = "bg_fishingbox_tips_"; // if (itemID == -1) // { // return name + (CurSelectedQuality + 1); // } // return name + (GetQualityByID(itemID) + 1); //} //public string GetFishingBoxIcon(int itemID = -1) //{ // if (itemID == -1) // { // return _items[CurSelectedID].Icon; // } // return _items[itemID].Icon; //} public int GetQualityByID(int itemID) { return _items[itemID].Quality; } public int GetIDByQuality(int quality) { return firstFishingBoxID + quality; } //public void SetBoxRewardScore(int itemID, int count) //{ // ChangeCurScore(_boxes[itemID].PointsGain * count); //} //InfoBar //public void GetRewardsInfo(List infos, int itemID = -1) //{ // foreach (var info in infos) // { // info.Tran.gameObject.SetActive(false); // } // ItemDropPackage fishingBox; // if (itemID == -1) // { // fishingBox = _itemDropPackages[CurSelectedID]; // } // else // fishingBox = _itemDropPackages[CurSelectedID]; // var uiService = GContext.container.Resolve(); // for (int i = 0; i < fishingBox.ItemDisplay.Count; i++) // { // var item = _items[fishingBox.ItemDisplay[i]]; // var name = LocalizationMgr.GetFormatTextValue(item.Name_l10n_key); // var desc = ""; // var prob = fishingBox.ProbDisplay[i] * 100; // if (item.Type == 1 && item.SubType == 2) // { // var bate = GContext.container.Resolve().GetExtraCoinMag(1); // var nums = fishingBox.CountDisplay[i].Split('-').ToList(); // var descs = nums.Select(x => int.Parse(x) * bate).ToList(); // for (int j = 0; j < descs.Count - 1; j++) // { // desc += Mathf.Round(descs[j] / 10) * 10 + "-"; // } // desc += Mathf.Round(descs[descs.Count - 1] / 10) * 10 + " " + prob + "%"; // } // else // { // desc = fishingBox.CountDisplay[i] + " " + prob + "%"; // } // infos[i].Reset(name, desc); // uiService.SetImageSprite(infos[i].Img, item.Icon); // infos[i].Tran.gameObject.SetActive(true); // } //} //ProgressBar //public int GetCurScore() //{ // return Data.FishingBoxScore; //} //public int GetRequriedScore() //{ // return _boxLevels[CurBoxLevel].PointsRequired; //} public void ChangeCurScore(int value) { Data.FishingBoxScore += value; Data.Save(); } //public string GetBoxRewardIcon() //{ // var id = _boxLevels[CurBoxLevel].BoxID; // return _items[id].Icon; //} //public int GetBoxRewardID() //{ // return _boxLevels[CurBoxLevel].BoxID; //} //public void OnGetBoxReward() //{ // Data.FishingBoxScore -= _boxLevels[CurBoxLevel].PointsRequired; // Data.SetFishingBoxCount(_boxLevels[CurBoxLevel].BoxID, 1); // CurBoxLevel = CurBoxLevel + 1; //} //SelectedBar public int GetBoxCount(int itemID = -1) { if (itemID == -1) { return Data.GetFishingBoxCount(CurSelectedID); } return Data.GetFishingBoxCount(itemID); } //public int GetBoxToOpenCount(int itemID = -1) //{ // var count = GetBoxCount(itemID); // return count > maxOpenCount ? maxOpenCount : count; //} #endregion }