Main/Component/UI/Core/ButtonEx.cs
@@ -52,6 +52,10 @@ public override void OnPointerDown(PointerEventData eventData) { if (this.interactable == false) { return; } base.OnPointerDown(eventData); transform.localScale = originalScale * pressedScale; } Main/Config/Configs/ItemConfig.cs
@@ -1,6 +1,6 @@ //-------------------------------------------------------- // [Author]: YYL // [ Date ]: 2025年8月5日 // [ Date ]: Wednesday, September 10, 2025 //-------------------------------------------------------- using System.Collections.Generic; Main/Core/NetworkPackage/DTCFile/ServerPack/H04_Scene/DTC0418_tagObjInfoRefresh.cs
@@ -1,6 +1,5 @@ using UnityEngine; using System.Collections; using static UnityEditor.Experimental.GraphView.GraphView; //04 18 周围对象刷新#tagObjInfoRefresh Main/System/HappyXB/HappyXBModel.cs
@@ -592,7 +592,11 @@ //英雄招募 public void HeroCallRedPoint() { if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.HappyFindTreasure)) return; if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.HappyFindTreasure)) return; if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Hero)) return; // 免费 10连 积分 bestXB10Red.state = RedPointState.None; bestXBFreeRed.state = RedPointState.None; Main/System/Hero/HeroInfo.cs
@@ -41,15 +41,7 @@ return itemHero.GetUseDataFirstValue(70); } } // 优先功能提醒类型:1觉醒 2升级 3突破 4升星 // 优先顺序: public int funcState { get { return 0; } } public bool isLock { Main/System/Hero/HeroManager.cs
@@ -10,13 +10,6 @@ //初始创建(0725),后续跟随背包事件增加删除 key = guid protected Dictionary<string, HeroInfo> heroInfoDict = new Dictionary<string, HeroInfo>(); //武将红点 //MainRedDot.HeroCardRedpoint * 1000 + hero.itemHero.gridIndex; public Action<HeroInfo> onNewHeroEvent; public Action<HeroInfo> onHeroChangeEvent; public Action<int> onHeroDeleteEvent; Main/System/HeroUI/HeroBestWin.cs
@@ -235,7 +235,7 @@ } countryImg.SetSprite(HeroUIManager.Instance.GetCountryIconName(heroConfig.Country)); awakeLevel = HeroAwakeConfig.GetMaxAwakeLV(HeroUIManager.Instance.selectForPreviewHeroID); heroLevel = HeroUIManager.Instance.GetMaxLVByBreakLV(heroConfig.Quality, breakLevel); heroLevel = HeroUIManager.Instance.GetMaxLV(heroConfig.Quality); if (awakeLevel == 0) { awakeLVText.text = Language.Get("L1094") + heroLevel; Main/System/HeroUI/HeroCardCell.cs
@@ -12,6 +12,7 @@ [SerializeField] UIHeroController heroModel; [SerializeField] Image onStateImg; [SerializeField] RedpointBehaviour redpoint; [SerializeField] Image newImage; //新标识和红点互斥 [SerializeField] Image trainStateImg; [SerializeField] Text nameText; [SerializeField] Image awakeImg; @@ -38,12 +39,23 @@ heroModel.Create(heroConfig.SkinIDList[hero.SkinIndex], heroConfig.UIScale); onStateImg.SetActive(hero.IsInTeamByTeamType(TeamType.Story)); redpoint.redpointId = MainRedDot.HeroCardRedpoint * 1000 + hero.itemHero.gridIndex; var funcState = hero.funcState; int teamPos = TeamManager.Instance.GetTeam(TeamType.Story).GetPosition(hero.itemHero.guid); if (teamPos >= 0) { redpoint.redpointId = MainRedDot.HeroCardRedpoint * 10 + teamPos; newImage.SetActive(false); } else { redpoint.redpointId = 0; newImage.SetActive(HeroUIManager.Instance.newHeroIDList.Contains(hero.heroId)); } var funcState = HeroUIManager.Instance.GetFuncState(hero); if (funcState > 0) { trainStateImg.SetActive(true); trainStateImg.SetSprite("herofuncstate" + hero.funcState); trainStateImg.SetSprite("herofuncstate" + funcState); } else { Main/System/HeroUI/HeroCollectionLvUpWin.cs
@@ -60,10 +60,10 @@ HB122_tagSCHeroInfo.tagSCHero colData; HeroUIManager.Instance.TryGetHeroBookInfo(HeroUIManager.Instance.selectCollectHeroID, out colData); var bookPer = HeroUIManager.Instance.GetHeroBookPer(HeroUIManager.Instance.selectCollectHeroID); if (state == 5) if (state == 5 || state == 2) { //已满级 titleText.text = Language.Get("HeroAwake13"); titleText.text = state == 5 ? Language.Get("HeroAwake13") : Language.Get("HeroAwake12"); fullPanel.SetActive(true); lvupPanel.SetActive(false); @@ -85,8 +85,9 @@ } else { fullImg.SetActive(true); btn.SetActive(false); fullImg.SetActive(state == 5); btn.SetActive(state == 2); btnText.text = Language.Get("L1109"); } } @@ -111,8 +112,8 @@ //激活 addPer = qualityConfig.BookInitAddPer; btnText.text = Language.Get("L1131"); //L1131 激活 awardInfo.text = Language.Get("HeroAwake10", UIHelper.GetIconNameWithMoneyType(HeroUIManager.Instance.bookMoneyType), HeroUIManager.Instance.bookMoneyValue); awardInfo.text = Language.Get("HeroAwake10", UIHelper.GetIconNameWithMoneyType(qualityConfig.BookActAwardMoney[0]), qualityConfig.BookActAwardMoney[1]); unActiveGo.SetActive(true); titleText.text = Language.Get("HeroAwake11"); } Main/System/HeroUI/HeroTrainWin.cs
@@ -88,6 +88,11 @@ [SerializeField] Text freezeAawkeLVText; [SerializeField] List<Image> starImgFreezeList; //伪红点用图片代替 [SerializeField] Image redpointAwake; [SerializeField] Image redpointGift; [SerializeField] Image redpointLVUP; string guid; HeroInfo hero; @@ -168,7 +173,7 @@ awakeCellList = new List<GameObject>(); freezeTipBtn.AddListener(() => { { freezeTipGo.SetActive(!freezeTipGo.activeSelf); }); } @@ -242,6 +247,9 @@ RefreshGift(); RefreshAwake(); RefreshFreeze(); RefreshRedImg(); HeroUIManager.Instance.RemoveNewHero(hero.heroId); } void RefreshItemLockEvent(PackType type, string guid, bool lockState) @@ -333,7 +341,7 @@ { RefreshStars(); nameText.text = hero.breakLevel == 0 ? hero.heroConfig.Name : Language.Get("herocardbreaklv", hero.heroConfig.Name, hero.breakLevel); nameText.color = UIHelper.GetUIColorByFunc(hero.Quality); if (hero.Quality >= 4) @@ -713,7 +721,65 @@ { freezeTipBtn.SetActive(false); } freezeTipGo.SetActive(false); } void RefreshRedImg() { redpointAwake.SetActive(false); redpointGift.SetActive(false); redpointLVUP.SetActive(false); if (!hero.IsInTeamByTeamType(TeamType.Story)) { return; } var heroCnt = PackManager.Instance.GetItemCountByID(PackType.Hero, hero.heroId); var itemPack = PackManager.Instance.GetSinglePack(PackType.Item); //5星后才能觉醒 if (hero.heroStar >= HeroUIManager.Instance.starLevelCanAwake) { //判断觉醒材料是否足够 var maxAwakeLV = HeroAwakeConfig.GetMaxAwakeLV(hero.heroId); if (hero.awakeLevel < maxAwakeLV) { var config = HeroQualityAwakeConfig.GetQualityAwakeConfig(hero.Quality, hero.awakeLevel); if (itemPack.GetCountById(config.UPCostItem[0]) >= config.UPCostItem[1]) { redpointAwake.SetActive(true); } } } if (heroCnt > 1) { redpointGift.SetActive(true); } var maxBreakLV = HeroBreakConfig.GetMaxBreakLv(hero.heroId); if (hero.breakLevel < maxBreakLV) { if (HeroUIManager.Instance.IsLVMaxByBreakLevel(hero)) { var breakConfig = HeroQualityBreakConfig.GetQualityBreakConfig(hero.Quality, hero.breakLevel); if (itemPack.GetCountById(breakConfig.UPCostItem[0]) >= breakConfig.UPCostItem[1]) { redpointLVUP.SetActive(true); return; } } } if (!HeroUIManager.Instance.IsLVMax(hero)) { var lvupConfig = HeroQualityLVConfig.GetQualityLVConfig(hero.Quality, hero.heroLevel); if (itemPack.GetCountById(lvupConfig.UPCostItem[0]) >= lvupConfig.UPCostItem[1]) { redpointLVUP.SetActive(true); } } } } Main/System/HeroUI/HeroUIManager.Collect.cs
@@ -16,9 +16,6 @@ public int selectHeroCollectListCountry = 0; //武将列表界面筛选国家 public int selectCollectHeroID; //选中的武将id 用于升级 public int bookMoneyType; //图鉴奖励货币类型 public int bookMoneyValue;//图鉴奖励货币数量 public int selectForPreviewHeroID; //选中的武将id 用于预览 //图鉴和皮肤的激活情况 @@ -35,6 +32,7 @@ } allHeroBookPer = GetHeroCollectBookPer(); OnHeroCollectEvent?.Invoke(); UpdateHeroBookRedpoint(); } Main/System/HeroUI/HeroUIManager.cs
@@ -1,6 +1,8 @@ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Jace.Operations; using LitJson; using UnityEngine; @@ -13,25 +15,36 @@ public int selectHeroListJob = 0; //武将列表界面 筛选职业 public int selectHeroListCountry = 0; //武将列表界面筛选国家 public string selectHeroGuid; //选中的武将id public int[] heroRedpointItemList; //有影响红点的道具 #endregion public WaitHeroFuncResponse waitResponse; //请求武将功能,与服务端交互 //用于非上阵武将战力变化时 武将ID:上次战力 //使用方法:其他功能界面设置该值即可 public KeyValuePair<string, long> lastFightPower = new KeyValuePair<string, long>(); public KeyValuePair<string, long> lastFightPower = new KeyValuePair<string, long>(); public override void Init() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize; DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnLoginLoadOK; HeroManager.Instance.onHeroChangeEvent += OnHeroChangeEvent; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; PackManager.Instance.RefreshItemEvent += RefreshItemEvent; TeamManager.Instance.OnTeamChange += OnTeamChangeEvent; ParseConfig(); InitHeroOnTeamRedpointList(); InitHeroBookRedpointList(); } public override void Release() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize; DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnLoginLoadOK; HeroManager.Instance.onHeroChangeEvent -= OnHeroChangeEvent; GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; PackManager.Instance.RefreshItemEvent -= RefreshItemEvent; TeamManager.Instance.OnTeamChange -= OnTeamChangeEvent; } void ParseConfig() @@ -42,13 +55,11 @@ rebornFormula = config.Numerical3; rebornPayBackPer = int.Parse(config.Numerical4); deletePayBackPer = int.Parse(config.Numerical5); ParseGiftConfig(); config = FuncConfigConfig.Get("HeroBook"); var arr = JsonMapper.ToObject<int[]>(config.Numerical1); bookMoneyType = arr[0]; bookMoneyValue = arr[1]; config = FuncConfigConfig.Get("HeroRedpoint"); heroRedpointItemList = JsonMapper.ToObject<int[]>(config.Numerical1); } public void OnBeforePlayerDataInitialize() @@ -58,13 +69,23 @@ awakeRebirthCnt = 0; waitResponse = default; heroCollectInfoDic.Clear(); newHeroIDList.Clear(); } void OnLoginLoadOK() { UpdateHeroCardRedpoint(); } private void OnHeroChangeEvent(HeroInfo hero) { if (!DTC0403_tagPlayerLoginLoadOK.finishedLogin) return; WaitServerResponse(hero); refreshRedPoint = true; } private void WaitServerResponse(HeroInfo hero) @@ -98,7 +119,7 @@ { var config = HeroAwakeConfig.GetHeroAwakeConfig(hero.heroId, hero.awakeLevel); if (hero.talentAwakeRandomIDList.Count > 0) { { UIManager.Instance.OpenWindow<HeroAwakeSelectGiftWin>(); } else if (config.SkillID != 0 || config.UnlockTalentSlot != 0) @@ -252,6 +273,7 @@ public int selectHeroCallListJob = 0; //筛选职业 public int selectHeroCallListCountry = 0; //筛选国家 public List<int> newHeroIDList = new List<int>(); //新武将列表 public bool IsNewHero(int heroID) { HB122_tagSCHeroInfo.tagSCHero bookInfo; @@ -262,6 +284,7 @@ //更精准的 需要比较本次抽的同武将个数 和 背包里有的个数再比较 if (HappyXBModel.Instance.GetCountInResult(heroID) >= HeroManager.Instance.GetHeroCountByID(heroID)) { AddNewHero(heroID); return true; } else @@ -275,14 +298,34 @@ } } AddNewHero(heroID); return true; } public void AddNewHero(int heroID) { if (newHeroIDList.Contains(heroID)) { return; } newHeroIDList.Add(heroID); } public void RemoveNewHero(int heroID) { if (!newHeroIDList.Contains(heroID)) { return; } newHeroIDList.Remove(heroID); refreshRedPoint = true; } List<int> allHeroCallScoreList = new List<int>(); //积分招募列表 public void SortHeroCallList() { if (allHeroCallScoreList.IsNullOrEmpty()) { { allHeroCallScoreList = HappyXBModel.Instance.GetAllGridLibItemIDByType((int)HappXBTitle.HeroCallScore); } heroCallSortList = new List<int>(); @@ -319,13 +362,11 @@ HeroConfig heroA = HeroConfig.Get(idA); HeroConfig heroB = HeroConfig.Get(idB); // 排序规则:武将品质>武将ID if (heroA.Quality != heroB.Quality) { return heroA.Quality > heroB.Quality ? -1 : 1; } return heroA.HeroID.CompareTo(heroB.HeroID); } @@ -333,6 +374,167 @@ #endregion // 优先功能提醒类型:1觉醒 2升星 3突破 4升级 // 主线上阵武将才需要提醒 觉醒>升星>突破>升级 public int GetFuncState(HeroInfo hero) { if (!hero.IsInTeamByTeamType(TeamType.Story)) { return 0; } var heroCnt = PackManager.Instance.GetItemCountByID(PackType.Hero, hero.heroId); var itemPack = PackManager.Instance.GetSinglePack(PackType.Item); //5星后才能觉醒 if (hero.heroStar < starLevelCanAwake) { if (heroCnt > 1) return 2; } else { //判断觉醒材料是否足够 var maxAwakeLV = HeroAwakeConfig.GetMaxAwakeLV(hero.heroId); if (hero.awakeLevel < maxAwakeLV) { var config = HeroQualityAwakeConfig.GetQualityAwakeConfig(hero.Quality, hero.awakeLevel); if (itemPack.GetCountById(config.UPCostItem[0]) >= config.UPCostItem[1]) { return 1; } } } if (heroCnt > 1) return 2; var maxBreakLV = HeroBreakConfig.GetMaxBreakLv(hero.heroId); if (hero.breakLevel < maxBreakLV) { if (IsLVMaxByBreakLevel(hero)) { var breakConfig = HeroQualityBreakConfig.GetQualityBreakConfig(hero.Quality, hero.breakLevel); if (itemPack.GetCountById(breakConfig.UPCostItem[0]) >= breakConfig.UPCostItem[1]) { return 3; } } } if (!IsLVMax(hero)) { var lvupConfig = HeroQualityLVConfig.GetQualityLVConfig(hero.Quality, hero.heroLevel); if (itemPack.GetCountById(lvupConfig.UPCostItem[0]) >= lvupConfig.UPCostItem[1]) { return 4; } } return 0; } #region 红点 public bool refreshRedPoint = false; List<Redpoint> heroOnTeamRedpointList = new List<Redpoint>(); //上阵的武将红点 List<Redpoint> heroBookRedpointList = new List<Redpoint>(); //图鉴所有武将红点 //新标识的红点 所有武将统一个 Redpoint newMarkRedPoint = new Redpoint(MainRedDot.HeroCardRedpoint, MainRedDot.HeroCardRedpoint * 10 + 9); void InitHeroOnTeamRedpointList() { heroOnTeamRedpointList.Clear(); for (int i = 0; i < TeamConst.MaxTeamHeroCount; i++) { heroOnTeamRedpointList.Add(new Redpoint(MainRedDot.HeroCardRedpoint, MainRedDot.HeroCardRedpoint * 10 + i)); } } //武将卡的红点:只给上阵武将刷红点(含新标识),非上阵武将的新图标按图片处理不归类为红点 void UpdateHeroCardRedpoint() { if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Hero)) return; var team = TeamManager.Instance.GetTeam(TeamType.Story); for (int i = 0; i < heroOnTeamRedpointList.Count; i++) { var redpoint = heroOnTeamRedpointList[i]; var teamHero = team.GetServerHeroByIndex(i); if (teamHero != null) { var hero = HeroManager.Instance.GetHero(teamHero.guid); if (hero != null) { if (GetFuncState(hero) > 0) { redpoint.state = RedPointState.Simple; continue; } } } redpoint.state = RedPointState.None; } newMarkRedPoint.state = newHeroIDList.Count > 0 ? RedPointState.New : RedPointState.None; } void InitHeroBookRedpointList() { heroBookRedpointList.Clear(); foreach (var key in HeroConfig.GetKeys()) { heroBookRedpointList.Add(new Redpoint(MainRedDot.HeroCardCollectRedpoint, MainRedDot.HeroCardCollectRedpoint * 10000000 + key)); } } void UpdateHeroBookRedpoint() { if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Hero)) return; foreach (var redpoint in heroBookRedpointList) { var heroID = redpoint.id % 10000000; var state = GetHeroBookState(heroID, HeroConfig.Get(heroID).Quality); if (state == 1 || state == 3 || state == 4) { redpoint.state = RedPointState.Simple; continue; } redpoint.state = RedPointState.None; } } void OnSecondEvent() { if (refreshRedPoint) { UpdateHeroCardRedpoint(); refreshRedPoint = false; } } void RefreshItemEvent(PackType packType, int index, int itemID) { if (packType != PackType.Item) return; if (heroRedpointItemList.Contains(itemID)) { refreshRedPoint = true; } } void OnTeamChangeEvent(TeamType teamType) { if (teamType == TeamType.Story) { refreshRedPoint = true; } } #endregion } #region 等待服务端响应 Main/System/KnapSack/New/CommonItemBaisc.cs
@@ -330,12 +330,11 @@ void DisPlayEffect(ItemConfig config) { if (itemBaseEffect == null) return; if (config.BaseEffectID == 0) { if (itemBaseEffect != null) { itemBaseEffect.SetActive(false); } itemBaseEffect.SetActive(false); } else { Main/System/KnapSack/PackManager.cs
@@ -434,8 +434,9 @@ if (itemGUIDDict[guid].packType == type) { itemGUIDDict.Remove(guid); DeleteItemEvent?.Invoke(type, guid, itemID, index, clearType); } //只是背包转移,不删除但也要通知 DeleteItemEvent?.Invoke(type, guid, itemID, index, clearType); } } Main/System/MainLevel/MainBossEnterWin.cs
@@ -107,9 +107,7 @@ var canChallengeBoss = AutoFightModel.Instance.CanChallengeBoss(); fightBtn.interactable = canChallengeBoss; fightBtn.SetColorful(null, canChallengeBoss); fightBtn.SetInteractable(canChallengeBoss); for (int i = 0; i < passAwards.Length; i++) { Main/System/OfficialRank/OfficialTitleCell.cs
@@ -14,14 +14,14 @@ } Transform m_OfficialRankObj; private Transform officialRankObj Image m_OfficialRankObj; private Image officialRankObj { get { if (m_OfficialRankObj == null) { m_OfficialRankObj = this.GetComponent<Transform>("OfficialTitleCell/offcialRank"); m_OfficialRankObj = this.GetComponent<Image>("OfficialTitleCell/offcialRank"); } return m_OfficialRankObj; } @@ -97,8 +97,12 @@ if (titleID == 0) { officialRankObj.SetActive(true); var config = RealmConfig.Get(offcialRank); officialRankObj.SetSprite("OfficialRank" + offcialRank); titleUIFrame.SetActive(false); officialRankText.text = RealmConfig.Get(offcialRank).Name; officialRankText.text = config.Name; officialRankText.color = OfficialRankManager.Instance.GetOfficialRankColor(config.Quality); } else { Main/System/OfficialRank/OfficialUpCell.cs
@@ -14,6 +14,7 @@ [SerializeField] Image bgImg; [SerializeField] Image finishImg; [SerializeField] Image getAwardImg; [SerializeField] GameObject getAwardEffect; [SerializeField] Text taskName; [SerializeField] Image taskProcess; [SerializeField] Text taskProcessText; @@ -29,6 +30,7 @@ stateImg.SetSprite("OfficialMisionState" + state); finishImg.SetActive(state == 2); getAwardImg.SetActive(state == 1); getAwardEffect.SetActive(state == 1); bgImg.SetSprite(state == 0 ? "OfficialMissionBG0" : "OfficialMissionBG1"); switch (config.TaskType) { Main/System/OfficialRank/OfficialUpWin.cs
@@ -106,15 +106,15 @@ missionCellArr[i].Display(ids[i]); } for (int i = 0; i < missionCellArr.Length; i++) { if (OfficialRankManager.Instance.GetMissionAwardState(i + 1) != 1) { lvUpBtn.SetColorful(null, false); return; } } lvUpBtn.SetColorful(null, true); // for (int i = 0; i < missionCellArr.Length; i++) // { // if (OfficialRankManager.Instance.GetMissionAwardState(i + 1) != 1) // { // lvUpBtn.SetColorful(null, false); // return; // } // } // lvUpBtn.SetColorful(null, true); } Main/System/Team/TeamBase.cs
@@ -295,6 +295,18 @@ return -1; // No empty position } public int GetPosition(string guid) { foreach (var hero in serverHeroes) { if (hero != null && hero.guid == guid) { return hero.positionNum; } } return -1; } // 布阵接口 private void SetTeamHero(int posNum, TeamHero hero) { Main/Utility/EnumHelper.cs
@@ -818,14 +818,14 @@ //功能开启限制类型 public enum FuncOpenEnum { Strength = 1,//装备强化 Gem = 2,//宝石镶嵌 Wing = 3,//翅膀 Hero = 1,//武将 Challenge = 2,//挑战 Official = 3,//内政 Pet = 6,//灵宠 Treasure = 7,//法宝 Mounts = 8,//坐骑 Rune = 9,//符印 Realm = 12, //境界 Realm = 12, //境界 官职 Fairy = 15,// 仙盟 FairyTask = 16, GodWeapon = 20, //神兵