using asap.core; using cfg; using game; using System; using System.Collections.Generic; using System.Linq; using UnityEngine; namespace GameCore { public partial class PlayerItemData { List fishCardData = new List(); void AddFishCardData(ItemData itemData) { fishCardData.Add(itemData); } public List OpenFishCard() { if (fishCardData.Count == 0) { return new List(); } List itemDataGifts = new List(); List fishCardOpenData = new List(fishCardData); fishCardData.Clear(); for (int i = 0; i < fishCardOpenData.Count; i++) { try { var itemData = fishCardOpenData[i]; Item item = _tables.TbItem.GetOrDefault(itemData.id); var dropFishCardData = OnDropFishCard(item.SubType, item.RedirectID, itemData.id, itemData.count); if (dropFishCardData != null && dropFishCardData.Count > 0) { itemDataGifts.AddRange(dropFishCardData); } } catch (Exception e) { GameDebug.LogError($"[PlayerItemData]OpenFishCard: Exception occurred while opening fish card. Details: {e.Message}\n{e.StackTrace}"); } } return itemDataGifts; } List OnDropFishCard(int subType, int id, int itemId, int count) { List itemDataGifts = new List(); List countByQuality; List> fishCardQuality; MapData mapData; PlayerFishData playerFishData = GContext.container.Resolve(); for (int j = 0; j < count; j++) { List itemDataGift = new List(); if (subType != 1) { GeneralCardWeight generalCardWeight = _tables.TbGeneralCardWeight.GetOrDefault(id); if (generalCardWeight == null) { GameDebug.LogError($"[PlayerItemData]OnDropFishCard: Not found id({itemId}) in TbGeneralCardWeight"); return itemDataGifts; } countByQuality = generalCardWeight.CountByQuality; fishCardQuality = new List>(); int currentMapId = GContext.container.Resolve().currentMapId; //当前地图 var currentMap = _tables.TbMapData.GetOrDefault(currentMapId); int lv = GContext.container.Resolve().lv; var lastMapData = _tables.TbMapData.GetOrDefault(GContext.container.Resolve().lastMapId); //非当前地图 var dataList = new List(); var mapDataList = _tables.TbMapData.DataList; int allWeight = generalCardWeight.Weight.Sum(); for (int i = 0; i < mapDataList.Count; i++) { if (mapDataList[i].ID != currentMapId) { dataList.Add(mapDataList[i]); } if (mapDataList[i].ID == lastMapData.ID) { break; } } for (int f = 0; f < countByQuality.Count; f++) { int random = UnityEngine.Random.Range(0, allWeight); if (random < generalCardWeight.Weight[0] || dataList.Count == 0) { //当前地图 mapData = currentMap; } else { //非当前地图 mapData = dataList[UnityEngine.Random.Range(0, dataList.Count)]; } fishCardQuality.Add(mapData.FishCardList[f]); } } else { var fishCardData = _tables.TbFishCardDrop.GetOrDefault(id); if (fishCardData == null) { GameDebug.LogError($"[PlayerItemData]OnDropFishCard: Not found id({id}) in TbFishCardDrop"); return itemDataGifts; } mapData = _tables.TbMapData.GetOrDefault(fishCardData.MapID); countByQuality = fishCardData.CountByQuality; fishCardQuality = mapData.FishCardList; } for (int i = 0; i < fishCardQuality.Count; i++) { if (countByQuality[i] > 0) { int fishCardId = fishCardQuality[i][UnityEngine.Random.Range(0, fishCardQuality[i].Count)]; ulong curTotalCard = (ulong)playerFishData.GetCardDataProficiency(fishCardId); itemDataGift.Add(new ItemData() { id = fishCardId, curCount = curTotalCard, count = countByQuality[i], }); } } if (itemDataGift.Count > 0) { DropFishCardData dropFishCardData = new DropFishCardData(); dropFishCardData.FishCardItemList = itemDataGift; dropFishCardData.ItemID = itemId; itemDataGifts.Add(dropFishCardData); AddItem(itemDataGift, null); ItemData exchangeItemData = new ItemData(); for (int i = itemDataGift.Count - 1; i >= 0; i--) { if (itemDataGift[i].exchangeItemData != null) { exchangeItemData.id = itemDataGift[i].exchangeItemData.exchangeId; exchangeItemData.count += itemDataGift[i].exchangeItemData.exchangeCount; exchangeItemData.curCount = itemDataGift[i].exchangeItemData.curCount; } } if (exchangeItemData.id > 0) { dropFishCardData.exchangeItemData = exchangeItemData; } } } #if AGG using (var e = GEvent.GameEvent("item_change", gaSend: true)) { e.AddContent("item_id", id) .AddContent("state_info", "cost") .AddContent("change_num", count); } #endif return itemDataGifts; } } }