Core/GameEngine/Model/Config/ChestsAwardConfig.cs
@@ -1,6 +1,6 @@ //-------------------------------------------------------- // [Author]: Fish // [ Date ]: 2024年5月17日 // [ Date ]: 2025年3月14日 //-------------------------------------------------------- using System.Collections.Generic; @@ -17,6 +17,9 @@ public readonly int BoxID; public readonly int BoxLV; public readonly string SelectList; public readonly string FixedItem; public readonly string Probability1; public readonly string Probability2; public readonly string JobItem; public ChestsAwardConfig() @@ -37,7 +40,13 @@ SelectList = tables[3]; JobItem = tables[4]; FixedItem = tables[4]; Probability1 = tables[5]; Probability2 = tables[6]; JobItem = tables[7]; } catch (Exception ex) { Core/GameEngine/Model/TelPartialConfig/ChestsAwardConfig.cs
@@ -58,6 +58,11 @@ chestAwardDict.TryGetValue(key, out chestsAwardConfig); return chestsAwardConfig; } public static bool IsBox(int itemID) { return chestIdDict.ContainsKey(itemID); } } LogicProject/System/TreasurePavilion/TreasurePavilionModel.cs
@@ -18,6 +18,7 @@ public event Action UpdateGubaoEvent; public Dictionary<int, Dictionary<int, int[]>> probabilityDisplayDict = new Dictionary<int, Dictionary<int, int[]>>(); public int selectGubao; //从藏宝阁选中 public int showTipFromPiece = 0; //0 古宝 其他数字为古宝碎片ID public int waitActiveGubao; //激活等待显示的古宝 public int upgradeGubao; //当前升级升星的古宝 public int upgradeFuncOrder = 0;//0升星1升级 @@ -222,6 +223,7 @@ gubaoAwardDict.Clear(); gubaoItemCountDict.Clear(); getA3CBCount = 0; showTipFromPiece = 0; } LogicProject/System/TreasurePavilion/TreasurePavilionTipWin.cs
@@ -9,7 +9,7 @@ using UnityEngine; using LitJson; //显示古宝 或者 古宝碎片的详细信息 TreasurePavilionModel.Instance.showTipFromPiece public class TreasurePavilionTipWin : ILWindow { Text name; @@ -144,7 +144,12 @@ var gubaoInfo = TreasurePavilionModel.Instance.TryGetGubaoInfo(gubaoID); var config = ILGubaoConfig.Get(gubaoID); Debug.LogFormat("古宝ID:{0} 物品ID:{1}", gubaoID, config.UnlockItemID); if (gubaoInfo.Count > 0 && gubaoInfo[1] > 0) if (TreasurePavilionModel.Instance.showTipFromPiece != 0) { name.text = ItemConfig.Get(TreasurePavilionModel.Instance.showTipFromPiece).ItemName; } else if (gubaoInfo.Count > 0 && gubaoInfo[1] > 0) { name.text = config.Name + "+" + gubaoInfo[1]; } @@ -153,8 +158,11 @@ name.text = config.Name; } name.color = UIHelper.GetUIColor(config.GubaoQuality); gubaoImg.SetSprite(config.Icon); if (TreasurePavilionModel.Instance.showTipFromPiece == 0) gubaoImg.SetSprite(config.Icon); else gubaoImg.SetSprite(ItemConfig.Get(TreasurePavilionModel.Instance.showTipFromPiece).IconKey); var maxStar = ILGubaoStarConfig.GetMaxStar(gubaoID); for (int i = 0; i < starObjs.Count; i++) { @@ -180,7 +188,14 @@ var score = TreasurePavilionModel.Instance.GetGubaoScore(gubaoID); scoreText.SetActiveIL(score != 0); scoreText.text = Language.Get("DogzFunc106", score); descText.text = config.Desc; if (TreasurePavilionModel.Instance.showTipFromPiece == 0) descText.text = config.Desc; else { var itemConfig = ItemConfig.Get(TreasurePavilionModel.Instance.showTipFromPiece); descText.text = StringUtility.Contact(Language.Get("KnapS110"), " ", itemConfig.UseLV, "</r>", itemConfig.Description, "</r>", config.Desc); } var showLV = gubaoInfo.Count == 0 ? 1 : gubaoInfo[1]; //未激活显示0级 var lvConfig = ILGubaoLVConfig.Get(ILGubaoLVConfig.GetGubaoQualityLVIndex(config.GubaoType, config.GubaoQuality, showLV)); for (int i = 0; i < baseAttrList.Count; i++) @@ -301,6 +316,7 @@ { scroller.OnRefreshCell -= OnRefreshCell; scroller1.OnRefreshCell -= OnRefreshCell1; TreasurePavilionModel.Instance.showTipFromPiece = 0; } void OnRefreshCell(ScrollerDataType type, CellView cell) System/ItemTip/ItemBoxTipWin.cs
New file @@ -0,0 +1,162 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, March 12, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using LitJson; using System.Linq; namespace vnxbqy.UI { public class ItemBoxTipWin : ItemTipWin { [SerializeField] RectTransform boxItemsObj; #region Built-in protected override void OnActived() { base.OnActived(); StartCoroutine(Co_DelayOneFrame()); } #endregion IEnumerator Co_DelayOneFrame() { this.transform.localScale = new Vector3(0, 1, 0); DisplayerBoxItems(); yield return null; yield return null; this.transform.localScale = Vector3.one; } //显示宝箱中的物品 void DisplayerBoxItems() { var baseInfo = ItemTipUtility.mainTipData.baseInfo; if (!ChestsAwardConfig.IsBox(baseInfo.itemId)) { boxItemsObj.SetActive(false); return; } boxItemsObj.SetActive(true); //删除boxItemsObj的所有子物体 for (int i = 0; i < boxItemsObj.childCount; i++) { Destroy(boxItemsObj.GetChild(i).gameObject); } var config = ChestsAwardConfig.GetChestsAwardByID(baseInfo.itemId); int jobIndex = PlayerDatas.Instance.baseData.Job - 1; //优先判断 有职业区分的宝箱,职业替换物品组JobItem等同于包含了所有物品 if (!string.IsNullOrEmpty(config.JobItem)) { var arr = JsonMapper.ToObject<int[][]>(config.JobItem); for (int i = 0; i < arr.Length; i++) { //根据职业显示 CreateItemCell(arr[i][jobIndex]); } } else { List<int> itemIDs = new List<int>(); if (!string.IsNullOrEmpty(config.SelectList)) { var selectlistDict = ConfigParse.GetDic<int, int>(config.SelectList); foreach (var item in selectlistDict) { if (!itemIDs.Contains(item.Key)) { itemIDs.Add(item.Key); } } } if (!string.IsNullOrEmpty(config.FixedItem)) { var itemListDict = ConfigParse.GetDic<int, int>(config.FixedItem); foreach (var item in itemListDict) { if (!itemIDs.Contains(item.Key)) { itemIDs.Add(item.Key); } } } if (!string.IsNullOrEmpty(config.Probability1)) { var arr = JsonMapper.ToObject(config.Probability1); for (int i = 0; i < arr.Count; i++) { var itemID = int.Parse(arr[i][1][0].ToString()); if (!itemIDs.Contains(itemID)) { itemIDs.Add(itemID); } } } if (!string.IsNullOrEmpty(config.Probability2)) { var arr = JsonMapper.ToObject(config.Probability2); for (int i = 0; i < arr.Count; i++) { var itemID = int.Parse(arr[i][1][0].ToString()); if (!itemIDs.Contains(itemID)) { itemIDs.Add(itemID); } } } if (itemIDs.Count == 0) { boxItemsObj.SetActive(false); return; } for (int i = 0; i < itemIDs.Count; i++) { CreateItemCell(itemIDs[i]); } } } void CreateItemCell(int itemID) { var instance = UIUtility.CreateWidget("ItemCell", "ItemCell"); var behaviour = instance.GetComponent<ItemCell>(); behaviour.transform.SetParentEx(boxItemsObj, Vector3.zero, Quaternion.identity, Vector3.one); behaviour.Init(new ItemCellModel(itemID, false, 1)); behaviour.button.AddListener(() => { ItemTipUtility.Show(itemID); }); } } } System/ItemTip/ItemBoxTipWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: d97efcb187bdd574aa63b84722590fd2 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/ItemTip/ItemTipUtility.cs
@@ -24,17 +24,8 @@ SpiritWeapon, PeerlessChest, TreasureShow, //其他法宝tip //后续IL开发添加预设 default1, default2, default3, default4, default5, default6, default7, default8, default9, default10, BoxItem, //宝箱物品 TreasurePavilion, //古宝物品(碎片) } public class TipData @@ -338,7 +329,15 @@ { effectModel.SetTreasureID(config.EffectValueA1, 0); } break; break; case TipType.BoxItem: WindowCenter.Instance.Open<ItemBoxTipWin>(); break; case TipType.TreasurePavilion: TreasurePavilionModel.Instance.selectGubao = config.EffectValueA1; TreasurePavilionModel.Instance.showTipFromPiece = config.ID; WindowCenter.Instance.OpenIL<TreasurePavilionTipWin>(); break; default: WindowCenter.Instance.Open<ItemTipWin>(); break; @@ -416,7 +415,15 @@ break; case TipType.SpiritWeapon: WindowCenter.Instance.Open<SpiritWeaponTipWin>(); break; break; case TipType.BoxItem: WindowCenter.Instance.Open<ItemBoxTipWin>(); break; case TipType.TreasurePavilion: TreasurePavilionModel.Instance.selectGubao = item.config.EffectValueA1; TreasurePavilionModel.Instance.showTipFromPiece = item.itemId; WindowCenter.Instance.OpenIL<TreasurePavilionTipWin>(); break; default: WindowCenter.Instance.Open<ItemTipWin>(); break; @@ -446,22 +453,27 @@ } else { switch (itemConfig.Type) { case 26: case 41: case 42: WindowCenter.Instance.Open<PetMountTipWin>(); break; case 113: case 114: case 116: case 117: WindowCenter.Instance.Open<SpiritWeaponTipWin>(); break; default: WindowCenter.Instance.Open<ItemTipWin>(); break; var tipType = GetTipType(itemId); switch (tipType) { case TipType.PetMount: WindowCenter.Instance.Open<PetMountTipWin>(); break; case TipType.SpiritWeapon: WindowCenter.Instance.Open<SpiritWeaponTipWin>(); break; case TipType.BoxItem: WindowCenter.Instance.Open<ItemBoxTipWin>(); break; case TipType.TreasurePavilion: TreasurePavilionModel.Instance.selectGubao = ItemConfig.Get(itemId).EffectValueA1; TreasurePavilionModel.Instance.showTipFromPiece = itemId; WindowCenter.Instance.OpenIL<TreasurePavilionTipWin>(); break; default: WindowCenter.Instance.Open<ItemTipWin>(); break; } } } @@ -1932,13 +1944,17 @@ private static TipType GetTipType(int itemId) { var config = ItemConfig.Get(itemId); if (GeneralDefine.chestDisplayItems.Contains(itemId)) { return TipType.PeerlessChest; } if (ChestsAwardConfig.IsBox(itemId)) { return TipType.BoxItem; } var config = ItemConfig.Get(itemId); switch (config.Type) { case 101: @@ -1972,7 +1988,9 @@ case 114: case 116: case 117: return TipType.SpiritWeapon; return TipType.SpiritWeapon; case 147: return TipType.TreasurePavilion; default: return TipType.Item; } System/ItemTip/ItemTipWin.cs
@@ -249,7 +249,7 @@ if (i < operates.Count) { button.SetActive(true); button.Bind("ItemTipWin", operates[i], guid); button.Bind(this.windowInfo.name, operates[i], guid); } else { System/ItemTip/TipItemDescriptionWidget.cs
@@ -18,7 +18,12 @@ [SerializeField] Text m_UseState; ItemTipsModel tipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } } RuneModel runeModel { get { return ModelCenter.Instance.GetModel<RuneModel>(); } } RuneModel runeModel { get { return ModelCenter.Instance.GetModel<RuneModel>(); } } GatheringSoulModel gatheringSoulModel { get { return ModelCenter.Instance.GetModel<GatheringSoulModel>(); } } public void Display(int itemId) { @@ -66,7 +71,26 @@ description = description.Replace("{Rune}", sb.ToString()); } m_Description.text = description; if (config.Type == 30) { m_Description.text = StringUtility.Contact(runeModel.GetRunePropertyDescription(itemId, 1), "</r>", description); } else if (config.Type == 148) { int soulID = GatherTheSoulConfig.GetSoulIDByItemID(itemId); var soulConfig = GatherTheSoulLVConfig.GetSoulLVConfig(soulID, 1); string desc = string.Empty; for (int i = 0; i < soulConfig.LVAttrType.Length; i++) { desc += PlayerPropertyConfig.GetFullDescription(soulConfig.LVAttrType[i], soulConfig.LVAttrValue[i]) + "</r>"; } m_Description.text = StringUtility.Contact(desc, SkillConfig.Get(GatherTheSoulConfig.Get(soulID).SoulSkillTypeID).Description, "</r></r>", description); } else { m_Description.text = description; } } public void DisplayUseState(int usedCount, int maxCount) System/KnapSack/Logic/ItemOperateUtility.cs
@@ -478,7 +478,7 @@ return; } if (ChestsAwardConfig.Has(useItemModel.itemId)) if (ChestsAwardConfig.IsBox(useItemModel.itemId)) { BoxModel.SetModel(useItemModel.guid, useItemModel.itemId); return; System/KnapSack/New/ChooseItemsCell.cs
@@ -19,6 +19,8 @@ ChooseItemsModel model { get { return ModelCenter.Instance.GetModel<ChooseItemsModel>(); } } BoxGetItemModel boxModel { get { return ModelCenter.Instance.GetModel<BoxGetItemModel>(); } } PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } } RuneModel runeModel { get { return ModelCenter.Instance.GetModel<RuneModel>(); } } public void Display(int itemID) { this.itemId = itemID; @@ -159,7 +161,7 @@ txtNeed.text = Language.Get("ChooseItems04"); imgNeed.SetActive(true); } txtItemName.text = runeModel.GetRunePropertyDescription(itemId, 1); break; default: if (ItemLogicUtility.Instance.IsSatisfyEquipBetterEquip(itemId)) System/WindowBase/Window.cs
@@ -351,7 +351,7 @@ { if (windowMask != null) { Debug.Log("windowMask:" + windowMask.transform.GetSiblingIndex() + " rectTransform:" + rectTransform.GetSiblingIndex() + " name:" + this.rectTransform.name); //Debug.Log("windowMask:" + windowMask.transform.GetSiblingIndex() + " rectTransform:" + rectTransform.GetSiblingIndex() + " name:" + this.rectTransform.name); if (windowMask.transform.GetSiblingIndex() >= rectTransform.GetSiblingIndex()) { windowMask.transform.SetSiblingIndex(rectTransform.GetSiblingIndex()); System/ZhanLingH/ZhanLingHActBuyWin.cs
@@ -12,6 +12,8 @@ [SerializeField] ImageEx imgTitle; [SerializeField] TextEx txtPercentage; [SerializeField] TextEx txtMoneyCount; [SerializeField] Canvas canvas; TextEx orgPrice; VipModel vipModel { get { return ModelCenter.Instance.GetModel<VipModel>(); } } @@ -23,6 +25,8 @@ var obj = btnBuy.FindComponent("Text", "Txt_orgPrice"); if (obj != null) orgPrice = obj as TextEx; canvas.sortingLayerName = "UI"; } protected override void AddListeners() System/ZhanLingH/ZhanLingHBuyWin.cs
@@ -10,6 +10,8 @@ [SerializeField] TextEx txtTitle; [SerializeField] ImageEx imgBK; [SerializeField] TextEx txtPercentage; [SerializeField] Canvas canvas; TextEx orgPrice; VipModel vipModel { get { return ModelCenter.Instance.GetModel<VipModel>(); } } @@ -21,6 +23,7 @@ var obj = btnBuy.FindComponent("Text", "Txt_orgPrice"); if (obj != null) orgPrice = obj as TextEx; canvas.sortingLayerName = "UI"; } protected override void AddListeners() @@ -40,6 +43,7 @@ protected override void OnPreOpen() { scroller.OnRefreshCell += OnScrollerRefreshCell; Display(); }