Main/Config/Configs/FBDJGEffectConfig.cs
@@ -1,6 +1,6 @@ //-------------------------------------------------------- // [Author]: YYL // [ Date ]: Thursday, January 8, 2026 // [ Date ]: 2026年1月28日 //-------------------------------------------------------- using System.Collections.Generic; @@ -21,6 +21,7 @@ public int EffQuality; public int AttrID; public int AttrValue; public int RandWeight; public override int LoadKey(string _key) { @@ -41,6 +42,8 @@ int.TryParse(tables[3],out AttrID); int.TryParse(tables[4],out AttrValue); int.TryParse(tables[5],out RandWeight); } catch (Exception exception) { Main/Config/Configs/HeroTalentConfig.cs
@@ -1,6 +1,6 @@ //-------------------------------------------------------- // [Author]: YYL // [ Date ]: 2025年8月5日 // [ Date ]: Wednesday, January 28, 2026 //-------------------------------------------------------- using System.Collections.Generic; @@ -21,6 +21,9 @@ public int Quality; public int AttrID; public int AttrValue; public int InitWeight; public int WashWeight; public int AweakWeight; public override int LoadKey(string _key) { @@ -41,6 +44,12 @@ int.TryParse(tables[3],out AttrID); int.TryParse(tables[4],out AttrValue); int.TryParse(tables[5],out InitWeight); int.TryParse(tables[6],out WashWeight); int.TryParse(tables[7],out AweakWeight); } catch (Exception exception) { Main/System/BeautyMM/BeautyMMTravelWin.cs
@@ -172,10 +172,21 @@ { continue; } if (index >= rateNameText.Length) { break; } rateNameText[index].text = ItemConfig.Get(config.AwardItemID).ItemName + "x" + config.AwardItemCnt; rateText[index].text = config.ShowRate; index++; } for (int i = index; i < rateNameText.Length; i++) { rateNameText[i].text = ""; rateText[i].text = ""; } horseRateText.text = TravelEventConfig.Get(101).ShowRate; } Main/System/BoneField/AdsManager.cs
@@ -29,7 +29,7 @@ { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeEvent; DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= UpdateRedpoint; DungeonManager.Instance.UpdateFBInfoListEvent += OnUpdateFBInfoChangeEvent; DungeonManager.Instance.UpdateFBInfoListEvent -= OnUpdateFBInfoChangeEvent; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; } Main/System/FuncPreset/FuncPresetChooseCells.cs
@@ -44,6 +44,11 @@ curFuncType = funcType; var selectID = FuncPresetManager.Instance.GetFuncPresetIDByBattleType(battleType, funcType); if (unFoldID != 0 && selectID != unFoldID) { //其他地方切换了方案,需要验证当前展开是不是同一个 unFoldID = 0; } var showCount = FuncPresetManager.Instance.GetShowFuncPresetCount(funcType); unFoldBtn.SetActive(showCount > 4); unFoldBtn.AddListener(() => Main/System/Guild/GuildManager.cs
@@ -180,7 +180,7 @@ public int zbgOrgPriceValue; public int zbgChangFamilyCD; public List<int> cutCntListForTalk = new List<int>(); public int familyRecordMaxCount; void ParseConfig() { @@ -219,6 +219,9 @@ zbgOrgPriceValue = int.Parse(config.Numerical2); zbgChangFamilyCD = int.Parse(config.Numerical3); cutCntListForTalk = JsonMapper.ToObject<List<int>>(config.Numerical4); config = FuncConfigConfig.Get("FamilyNote"); familyRecordMaxCount = int.Parse(config.Numerical1); } @@ -865,7 +868,7 @@ return false; } bool restart = false; for (int i = 0; i < vNetData.FamilyActionList.Length; i++) { int playerID = (int)vNetData.FamilyActionList[i].Value1; Main/System/Guild/GuildNoteHeaderCell.cs
New file @@ -0,0 +1,14 @@ using System.Collections.Generic; using UnityEngine; public class GuildNoteHeaderCell : MonoBehaviour { [SerializeField] TextEx date; public void Display(int index, List<GuildNoteData> datas) { if (datas.IsNullOrEmpty() || index < 0 || index >= datas.Count) return; date.text = datas[index].Info; } } Main/System/Guild/GuildNoteHeaderCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: c3a277ed730042a4987a4cc292e794a5 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Guild/GuildNoteNormalCell.cs
New file @@ -0,0 +1,30 @@ using System; using System.Collections.Generic; using UnityEngine; public class GuildNoteNormalCell : MonoBehaviour { [SerializeField] TextEx time; [SerializeField] TextEx content; public void Display(int index, List<GuildNoteData> datas) { if (datas.IsNullOrEmpty() || index < 0 || index >= datas.Count) return; DateTime currentTime = TimeUtility.GetTime(datas[index].Time); time.text = currentTime.ToString("HH:mm"); content.text = datas[index].Info; } public float GetHeight(string info) { float height = 0f; if (string.IsNullOrEmpty(info)) return height; content.text = info; height = content.preferredHeight; return height; } } Main/System/Guild/GuildNoteNormalCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: e8536aad1963a3244986aedefefbcd5c MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Guild/GuildNoteWin.cs
New file @@ -0,0 +1,227 @@ using System; using System.Collections.Generic; using System.Linq; using Cysharp.Threading.Tasks; using UnityEngine; /// <summary> /// 公会日志界面 /// </summary> public class GuildNoteWin : UIBase { [SerializeField] Color32 nameColor; [SerializeField] Transform noNote; [SerializeField] Transform hasNote; [SerializeField] GuildNoteNormalCell guildNoteNormalCell; [SerializeField] ScrollerController scroller; [SerializeField] TextEx maxCount; protected override void OnPreOpen() { GuildManager.Instance.EnterOrQuitGuildEvent += OnEnterOrQuitGuildEvent; GuildManager.Instance.FamilyActionInfoEvent += OnFamilyActionInfoEvent; scroller.OnGetDynamicSize += OnGetChatDynamicSize; scroller.OnRefreshCell += OnRefreshCell; maxCount.text = Language.Get("Guild_82", GuildManager.Instance.familyRecordMaxCount); GuildManager.Instance.QueryFamilyAction(PlayerDatas.Instance.fairyData.fairy.FamilyID, GuildManager.MemberChangeActionType); } protected override void OnPreClose() { GuildManager.Instance.EnterOrQuitGuildEvent -= OnEnterOrQuitGuildEvent; GuildManager.Instance.FamilyActionInfoEvent -= OnFamilyActionInfoEvent; scroller.OnGetDynamicSize -= OnGetChatDynamicSize; scroller.OnRefreshCell -= OnRefreshCell; } private void OnEnterOrQuitGuildEvent(bool isEnter) { DelayCloseWindow().Forget(); } private bool OnGetChatDynamicSize(ScrollerDataType type, int index, out float height) { height = 0; if (list.IsNullOrEmpty() || index < 0 || index >= list.Count) return false; var data = list[index]; switch (type) { case ScrollerDataType.Header: height = 19; return true; case ScrollerDataType.Normal: height = guildNoteNormalCell.GetHeight(data.Info); return true; } return true; } private void OnRefreshCell(ScrollerDataType type, CellView cell) { if (type == ScrollerDataType.Header) { var _cell = cell.GetComponent<GuildNoteHeaderCell>(); _cell?.Display(cell.index, list); } else { var _cell = cell.GetComponent<GuildNoteNormalCell>(); _cell?.Display(cell.index, list); } } private void OnFamilyActionInfoEvent(int familyID, int actionType) { if (familyID != PlayerDatas.Instance.fairyData.fairy.FamilyID) return; if (actionType != GuildManager.MemberChangeActionType) return; Display(); } List<GuildNoteData> list; private void Display() { if (!GuildManager.Instance.TryGetFamilyActions(GuildManager.MemberChangeActionType, out var actions)) { hasNote.SetActive(false); noNote.SetActive(true); return; } list = GetShowGuildNoteDataList(actions); bool isNullOrEmpty = list.IsNullOrEmpty(); if (isNullOrEmpty) { hasNote.SetActive(false); noNote.SetActive(true); return; } scroller.Refresh(); if (!isNullOrEmpty) { for (int i = 0; i < list.Count; i++) { if (list[i].ShowType == 0) { scroller.AddCell(ScrollerDataType.Header, i); } else { scroller.AddCell(ScrollerDataType.Normal, i); } } } scroller.Restart(); noNote.SetActive(isNullOrEmpty); hasNote.SetActive(!isNullOrEmpty); } private List<GuildNoteData> GetShowGuildNoteDataList(HA513_tagMCFamilyActionInfo.tagMCFamilyAction[] actions) { List<GuildNoteData> list = GetGuildNoteDataList(actions); if (list.IsNullOrEmpty()) return null; var result = new List<GuildNoteData>(); int lastDay = -1; foreach (var noteData in list) { // 获取当前条目所属日期 DateTime currentTime = TimeUtility.GetTime(noteData.Time); int currentDay = TimeUtility.GetPassDays((int)noteData.Time); // 检查是否需要插入日期标题 if (lastDay == -1 || currentDay != lastDay) { // 获取目标天的凌晨时间戳 DateTime dayStartTime = TimeUtility.GetDayStartTime(currentTime.Year, currentTime.Month, currentTime.Day); int dayStartSeconds = (int)(dayStartTime - TimeUtility.OriginalTime).TotalSeconds; result.Add(new GuildNoteData { ShowType = 0, // 标题类型 Time = (uint)dayStartSeconds, Info = currentTime.ToString("yyyy-MM-dd"), }); } result.Add(noteData); lastDay = currentDay; } return result; } private List<GuildNoteData> GetGuildNoteDataList(HA513_tagMCFamilyActionInfo.tagMCFamilyAction[] actions) { if (actions.IsNullOrEmpty()) return null; var result = new List<GuildNoteData>(); int maxCount = GuildManager.Instance.familyRecordMaxCount; // 倒序遍历actions,并限制数量 int count = 0; for (int i = actions.Length - 1; i >= 0 && count < maxCount; i--) { var action = actions[i]; string info = GetInfo(action); result.Add(new GuildNoteData { ShowType = 1, // 内容类型 Time = action.Time, Info = info, }); count++; } return result.OrderBy(a => a.Time).ToList(); } private string GetInfo(HA513_tagMCFamilyActionInfo.tagMCFamilyAction data) { if (data == null || data.Value1 != 2) return string.Empty; switch (data.Value2) { case 0: return Language.Get("Guild_52", GetColorStr(data.Name)); case 1: return Language.Get("Guild_53", GetColorStr(data.Name)); case 2: return Language.Get("Guild_55", GetColorStr(data.Name)); case 4: if (data.Value3 > data.Value4) { return Language.Get("Guild_54", GetColorStr(data.Name), GetColorStr(RichTextMsgReplaceConfig.GetRichReplace("FAMILY", (int)data.Value3))); } else { return Language.Get("Guild_83", GetColorStr(data.Name), GetColorStr(RichTextMsgReplaceConfig.GetRichReplace("FAMILY", (int)data.Value3))); } case 3: default: return string.Empty; } } private string GetColorStr(string name) { return UIHelper.AppendColor(nameColor, name); } } public class GuildNoteData { public uint Time; //时间戳 public int ShowType; //显示用途类型 0-标题(年-月-日) 1-内容 public string Info; //信息 } Main/System/Guild/GuildNoteWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: f0e090843a250514f8fabb9b8713e625 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Guild/GuildOPWin.cs
@@ -43,7 +43,7 @@ noteBtn.AddListener(() => { // UIManager.Instance.OpenWindow<GuildNoteWin>(); UIManager.Instance.OpenWindow<GuildNoteWin>(); }); } Main/System/Guild/PlayerFairyData.cs
@@ -29,6 +29,7 @@ // 0-成员,1-精英,2-副盟主,3-盟主 public int leaderID; public string leaderName; // // 精英 public List<int> elitePlayerIDList = new List<int>(); // // 副盟主 @@ -102,6 +103,7 @@ if (member.FmLV == 3) { leaderID = (int)member.PlayerID; leaderName = member.Name; } } @@ -142,6 +144,7 @@ memberDic.Clear(); memberIDList.Clear(); leaderID = 0; leaderName = string.Empty; } int SortMember(int id1, int id2) Main/System/HeroUI/HeroGiftLineCell.cs
@@ -6,10 +6,10 @@ [SerializeField] GiftBaseCell[] cardList; public void Display(int index, List<int> configList) { { for (int i = 0; i < cardList.Length; i++) { if (index < configList.Count) if (index + i < configList.Count) { var giftID = configList[index + i]; var giftLV = HeroUIManager.Instance.maxGiftLevel; Main/System/HeroUI/HeroGiftWin.cs
@@ -17,7 +17,7 @@ protected override void OnPreOpen() { scroller.OnRefreshCell += OnRefreshCell; CreateScroller(); } @@ -27,10 +27,22 @@ } private List<int> GetKeys() { List<int> res = new List<int>(); foreach (var config in HeroTalentConfig.GetValues()) { if (config.InitWeight == 0 || config.WashWeight == 0 || config.AweakWeight == 0) continue; res.Add(config.TalentID); } return res; } List<int> configList = new List<int>(); void CreateScroller() { configList = HeroTalentConfig.GetKeys().ToList(); configList = GetKeys(); var totalCount = configList.Count; scroller.Refresh(); Main/System/InternalAffairs/AffairBaseWin.cs
@@ -26,6 +26,7 @@ [SerializeField] HeroSkinModel[] funcNPCs; [SerializeField] Transform[] talkRects; [SerializeField] Text[] talkTexts; [SerializeField] UIEffectPlayer autoMGEffect; protected override void InitComponent() { @@ -58,12 +59,14 @@ GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshEvent; GlobalTimeEvent.Instance.fiveSecondEvent += OnFiveSecondEvent; MinggeManager.Instance.ChangeAutoEvent += ChangeAutoEvent; Display(); if (GoldRushManager.Instance.openAutoGoldRush) { { GoldRushManager.Instance.GetAllAward(); } ChangeAutoEvent(); } protected override void OnPreClose() @@ -73,8 +76,28 @@ GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent; PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshEvent; GlobalTimeEvent.Instance.fiveSecondEvent -= OnFiveSecondEvent; MinggeManager.Instance.ChangeAutoEvent -= ChangeAutoEvent; } void ChangeAutoEvent() { if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Mingge)) { return; } if (MinggeManager.Instance.isStartAuto) { autoMGEffect.Play(); funcNPCs[5].GetModel().PlayAnimation("suanming", true); } else { autoMGEffect.Stop(); funcNPCs[5].GetModel().PlayAnimation("idle", true); } } protected override void OnOpen() { GoldRushManager.Instance.ResumeAutoWorking(); Main/System/KnapSack/PackManager.cs
@@ -182,6 +182,8 @@ { refrechPackEvent(packType); } RefreshItemEvent?.Invoke(packType, -1, -1); //只做一次通知用 DelayNotifyPackChange(packType); } Main/System/Main/MainWin.cs
@@ -32,6 +32,7 @@ [SerializeField] Text multiFightText; [SerializeField] Transform gameTip; //10连 [SerializeField] Transform mgTip; bool isForcePlayFightUIAnim = true; //强制播放战斗锤子框动画 @@ -69,6 +70,7 @@ EventBroadcast.Instance.AddListener<string>(EventName.BATTLE_START, OnBattleStart); base.OnPreOpen(); mgTip.SetActive(false); // 刷新UI Display(); } @@ -107,6 +109,8 @@ GlobalTimeEvent.Instance.fiveSecondEvent -= OnFiveSecondEvent; } } mgTip.SetActive(MinggeManager.Instance.isPauseAuto); } void DisplayTopBar() @@ -120,6 +124,10 @@ { multiFightText.text = Language.Get("MultiFight", AutoFightModel.Instance.fightCost); } if (_ui.name == "MinggeWin") { mgTip.SetActive(false); } } //战斗按钮动画 Main/System/Message/GMNotify.cs
@@ -15,8 +15,8 @@ public override void Release() { GlobalTimeEvent.Instance.secondEvent -= SecondEvent; DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEventOnRelogin; DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk; DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeEventOnRelogin; DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOk; } public void OnBeforePlayerDataInitializeEventOnRelogin() Main/System/Mingge/MinggeAutoSetCell.cs
New file @@ -0,0 +1,58 @@ using UnityEngine; using UnityEngine.UI; using System; //命格自动的各个选项内容,统一用一个按类型区分 public class MinggeAutoSetCell : CellView { [SerializeField] Text contentText; [SerializeField] Image selectImg; [SerializeField] Button selectBtn; //type 滚动条用途类型 //index 根据类型自定义 public void Display(int type, int index, MinggeAutoSet autoSet, Action<int> onSelect) { if (type == 1) { //品质 string qualityName = Language.Get("L1039", MGGuayuQualityConfig.Get(index).ColorName); contentText.text = Language.Get("Mingge30", UIHelper.AppendColor(index, qualityName, true, 2)); selectImg.SetActive(autoSet.quanlity == index); } else if (type == 2) { //战斗属性 contentText.text = index == 0 ? Language.Get("Mingge33") : PlayerPropertyConfig.Get(index).Name; selectImg.SetActive(autoSet.fightAttrID == index); } else if (type == 3) { //抗性属性 contentText.text = index == 0 ? Language.Get("Mingge33") : PlayerPropertyConfig.Get(index).Name; selectImg.SetActive(autoSet.deFightAttrID == index); } else if (type == 4) { //命格技能 contentText.text = index == 0 ? Language.Get("Mingge33") : Language.Get($"MinggeSkillType_{index}"); selectImg.SetActive(autoSet.skillID == index); } else if (type == 5) { //消耗数量 contentText.text = index.ToString(); selectImg.SetActive(MinggeManager.Instance.autoCostCount == index); } selectBtn.AddListener(() => { onSelect?.Invoke(index); }); } } Main/System/Mingge/MinggeAutoSetCell.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: 77c0bb1754a43d14985f5b7a2942530e MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Mingge/MinggeAutoSetWin.cs
New file @@ -0,0 +1,530 @@ using System; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; public class MinggeAutoSetWin : UIBase { [SerializeField] ScrollRect scrollRect; [SerializeField] GroupButtonEx[] presetBtns; List<Text> presetNameTexts = new List<Text>(); [SerializeField] Button selectQualityBtn; //品质选择 [SerializeField] Text qualityText; [SerializeField] ScrollerController qualityScroller; [SerializeField] Toggle startToggle; [SerializeField] Toggle fightPowerToggle; //战斗力 [SerializeField] Toggle andFPToggle; [SerializeField] Toggle orFPToggle; [SerializeField] Toggle attrToggle; //属性 [SerializeField] Button fightAttrBtn; //六大战斗属性 + 先手 [SerializeField] Text fightAttrText; [SerializeField] ScrollerController fightAttrScroller; [SerializeField] Button deFightAttrBtn; //六大战斗抗性属性 [SerializeField] Text deFightAttrText; [SerializeField] ScrollerController deFightAttrScroller; [SerializeField] Toggle skillToggle; //技能 [SerializeField] Button skillBtn; [SerializeField] Text skillText; [SerializeField] ScrollerController skillScroller; [SerializeField] Toggle andSkillToggle; [SerializeField] Toggle orSkillToggle; [SerializeField] Toggle useMoreItemToggle; //使用更多物品 不勾选默认消耗1个 [SerializeField] Button useMoreItemBtn; [SerializeField] Text useMoreItemText; [SerializeField] ScrollerController useMoreItemScroller; [SerializeField] Text itemNameText; [SerializeField] Toggle speedUPToggle; //加速 特效播放加速 [SerializeField] Button startBtn; [SerializeField] Button cancelBtn; MinggeAutoSet autoSetData; int selectPresetID = 0; protected override void InitComponent() { presetNameTexts.Clear(); for (int i = 0; i < presetBtns.Length; i++) { int index = i + 1; presetBtns[i].AddListener(() => { selectPresetID = index; Display(); }); presetNameTexts.Add(presetBtns[i].GetComponentInChildren<Text>()); } selectQualityBtn.AddListener(() => { qualityScroller.SetActive(true); }); startToggle.onValueChanged.AddListener((bool isOn) => { ClickStartToggle(isOn); }); fightPowerToggle.onValueChanged.AddListener((bool isOn) => { autoSetData.fightPowerToggle = isOn; FixAndOrFBToggle(); FixAndOrSkillToggle(); }); andFPToggle.onValueChanged.AddListener((bool isOn) => { ClickAndOrFPToggle(isOn); }); orFPToggle.onValueChanged.AddListener((bool isOn) => { ClickAndOrFPToggle(isOn); }); attrToggle.onValueChanged.AddListener((bool isOn) => { autoSetData.fightAttrToggle = isOn; FixAndOrFBToggle(); FixAndOrSkillToggle(); }); fightAttrBtn.AddListener(() => { fightAttrScroller.SetActive(true); }); deFightAttrBtn.AddListener(() => { deFightAttrScroller.SetActive(true); }); skillToggle.onValueChanged.AddListener((bool isOn) => { autoSetData.skillToggle = isOn; FixAndOrFBToggle(); FixAndOrSkillToggle(); }); skillBtn.AddListener(() => { skillScroller.SetActive(true); }); andSkillToggle.onValueChanged.AddListener((bool isOn) => { ClickAndOrSkillToggle(isOn); }); orSkillToggle.onValueChanged.AddListener((bool isOn) => { ClickAndOrSkillToggle(isOn); }); useMoreItemToggle.onValueChanged.AddListener((bool isOn) => { MinggeManager.Instance.autoCostToggle = isOn; }); useMoreItemBtn.AddListener(() => { useMoreItemScroller.SetActive(true); }); speedUPToggle.onValueChanged.AddListener((bool isOn) => { if (!InvestModel.Instance.IsInvested(InvestModel.monthCardType)) { speedUPToggle.SetIsOnWithoutNotify(false); SysNotifyMgr.Instance.ShowTip("MinggeAuto5"); UIManager.Instance.OpenWindow<PrivilegeCardWin>(); return; } MinggeManager.Instance.autoSpeedUP = isOn; }); startBtn.AddListener(() => { if (!MinggeManager.Instance.qlNotNotify && PackManager.Instance.GetItemCountByID(PackType.Item, MinggeManager.Instance.qlItemID) > 0) { ConfirmCancel.ToggleConfirmCancel( Language.Get("L1003"), Language.Get("Mingge31"), Language.Get("TianziBillborad08"), Language.Get("Mingge35"), Language.Get("Mingge34"), (bool isOK, bool isToggle) => { if (isOK) { CloseWindow(); UIManager.Instance.OpenWindow<MinggePrayWin>(); } else { MinggeManager.Instance.StartAuto(true); } MinggeManager.Instance.qlNotNotify = isToggle; }, false ); return; } MinggeManager.Instance.StartAuto(true); }); cancelBtn.AddListener(() => { MinggeManager.Instance.StartAuto(false); cancelBtn.SetActive(false); startBtn.SetActive(true); }); } protected override void OnPreOpen() { selectPresetID = FuncPresetManager.Instance.GetFuncPresetID((int)FuncPresetType.Mingge); if (MinggeManager.Instance.isStartAuto) { MinggeManager.Instance.isPauseAuto = true; SysNotifyMgr.Instance.ShowTip("MinggeAuto4"); } qualityScroller.OnRefreshCell += OnRefreshQualityCell; fightAttrScroller.OnRefreshCell += OnRefreshFightAttrCell; deFightAttrScroller.OnRefreshCell += OnRefreshDeFightAttrCell; skillScroller.OnRefreshCell += OnRefreshSkillCell; useMoreItemScroller.OnRefreshCell += OnRefreshUseMoreItemCell; CreateScroller(); DisplayPresetBtns(); Display(); } protected override void OnPreClose() { MinggeManager.Instance.isPauseAuto = false; if (MinggeManager.Instance.isStartAuto) { SysNotifyMgr.Instance.ShowTip("MinggeAuto3"); MinggeManager.Instance.CalcEquip(); } qualityScroller.OnRefreshCell -= OnRefreshQualityCell; fightAttrScroller.OnRefreshCell -= OnRefreshFightAttrCell; deFightAttrScroller.OnRefreshCell -= OnRefreshDeFightAttrCell; skillScroller.OnRefreshCell -= OnRefreshSkillCell; useMoreItemScroller.OnRefreshCell -= OnRefreshUseMoreItemCell; } public void Display() { autoSetData = MinggeManager.Instance.GetMGAutoSet(selectPresetID); if (autoSetData == null) { return; } string qualityName = Language.Get("L1039", MGGuayuQualityConfig.Get(autoSetData.quanlity).ColorName); qualityText.text = Language.Get("Mingge30", UIHelper.AppendColor(autoSetData.quanlity, qualityName, true, 2)); startToggle.SetIsOnWithoutNotify(autoSetData.startToggle); fightPowerToggle.SetIsOnWithoutNotify(autoSetData.fightPowerToggle); andFPToggle.SetIsOnWithoutNotify(autoSetData.andOrFPToggle == 1); orFPToggle.SetIsOnWithoutNotify(autoSetData.andOrFPToggle == 2); attrToggle.SetIsOnWithoutNotify(autoSetData.fightAttrToggle); fightAttrText.text = autoSetData.fightAttrID == 0 ? Language.Get("Mingge33") : PlayerPropertyConfig.Get(autoSetData.fightAttrID).Name; deFightAttrText.text = autoSetData.deFightAttrID == 0 ? Language.Get("Mingge33") : PlayerPropertyConfig.Get(autoSetData.deFightAttrID).Name; skillToggle.SetIsOnWithoutNotify(autoSetData.skillToggle); skillText.text = autoSetData.skillID == 0 ? Language.Get("Mingge33") : Language.Get($"MinggeSkillType_{autoSetData.skillID}"); andSkillToggle.SetIsOnWithoutNotify(autoSetData.andOrSkillToggle == 1); orSkillToggle.SetIsOnWithoutNotify(autoSetData.andOrSkillToggle == 2); useMoreItemToggle.SetIsOnWithoutNotify(MinggeManager.Instance.autoCostToggle); useMoreItemText.text = MinggeManager.Instance.autoCostCount.ToString(); itemNameText.text = ItemConfig.Get(MinggeManager.Instance.tyItemID).ItemName; cancelBtn.SetActive(MinggeManager.Instance.isStartAuto); startBtn.SetActive(!MinggeManager.Instance.isStartAuto); } public void DisplayPresetBtns() { var cnt = FuncPresetManager.Instance.GetUnlockCnt((int)FuncPresetType.Mingge); if (cnt == 1) { cnt = 0; } if (cnt > 0) { scrollRect.SetActive(true); for (int i = 0; i < presetBtns.Length; i++) { if (i < cnt) { presetBtns[i].SetActive(true); presetNameTexts[i].text = FuncPresetManager.Instance.GetFuncPreset((int)FuncPresetType.Mingge, i + 1).PresetName; } else { presetBtns[i].SetActive(false); } } presetBtns[selectPresetID - 1].SelectBtn(); //滚动到 selectPresetID 位置 scrollRect.horizontalNormalizedPosition = selectPresetID < 4 ? 0 : selectPresetID * 1f / cnt; } else { scrollRect.SetActive(false); } } void ClickStartToggle(bool isOn) { autoSetData.startToggle = isOn; if (!isOn) { //检查多方案中至少一个勾选 if (!MinggeManager.Instance.CanChangeStartToFalse(selectPresetID)) { startToggle.SetIsOnWithoutNotify(true); autoSetData.startToggle = true; SysNotifyMgr.Instance.ShowTip("MinggeAuto2"); } } } void ClickAndOrFPToggle(bool isOn) { //只有战斗和其他的激活后才能 勾选 FixAndOrFBToggle(); } void ClickAndOrSkillToggle(bool isOn) { //技能和其他任一激活后才能 勾选 FixAndOrSkillToggle(); } void FixAndOrFBToggle() { //只有战斗和属性激活后才能 勾选 //帮取消的情况 if (!fightPowerToggle.isOn || !attrToggle.isOn) { if (andFPToggle.isOn) { andFPToggle.SetIsOnWithoutNotify(false); } if (orFPToggle.isOn) { orFPToggle.SetIsOnWithoutNotify(false); } } //帮勾选的情况,默认勾同时 if (fightPowerToggle.isOn && attrToggle.isOn) { if (!andFPToggle.isOn && !orFPToggle.isOn) { andFPToggle.SetIsOnWithoutNotify(true); } } RefreshAndOrFBToggleValue(); } void FixAndOrSkillToggle() { //技能和其他任一激活后才能 勾选 //帮取消的情况 if (!skillToggle.isOn || (!attrToggle.isOn && !fightPowerToggle.isOn)) { if (andSkillToggle.isOn) { andSkillToggle.SetIsOnWithoutNotify(false); } if (orSkillToggle.isOn) { orSkillToggle.SetIsOnWithoutNotify(false); } } //帮勾选的情况,默认勾同时 if (skillToggle.isOn && (attrToggle.isOn || fightPowerToggle.isOn)) { if (!andSkillToggle.isOn && !orSkillToggle.isOn) { orSkillToggle.SetIsOnWithoutNotify(true); } } RefreshAndOrSkillToggleValue(); } void RefreshAndOrFBToggleValue() { if (andFPToggle.isOn) { autoSetData.andOrFPToggle = 1; } else if (orFPToggle.isOn) { autoSetData.andOrFPToggle = 2; } else { autoSetData.andOrFPToggle = 0; } } void RefreshAndOrSkillToggleValue() { if (andSkillToggle.isOn) { autoSetData.andOrSkillToggle = 1; } else if (orSkillToggle.isOn) { autoSetData.andOrSkillToggle = 2; } else { autoSetData.andOrSkillToggle = 0; } } void CreateScroller() { var rateList = MinggeManager.Instance.GetQLRate(MinggeManager.Instance.m_Lingying); //倒序删除 概率为0的 直到有概率大于0的 for (int i = rateList.Count - 1; i >= 0; i--) { if (rateList[i] == 0) { rateList.RemoveAt(i); } else { break; } } var rect = qualityScroller.GetComponent<RectTransform>(); rect.sizeDelta = new Vector2(rect.sizeDelta.x, rateList.Count * 50); qualityScroller.Refresh(); for (int i = 1; i <= rateList.Count; i++) { qualityScroller.AddCell(ScrollerDataType.Header, i); } qualityScroller.Restart(); fightAttrScroller.Refresh(); for (int i = 0; i < MinggeManager.Instance.fightAttrIDList.Length; i++) { fightAttrScroller.AddCell(ScrollerDataType.Header, MinggeManager.Instance.fightAttrIDList[i]); } fightAttrScroller.Restart(); deFightAttrScroller.Refresh(); for (int i = 0; i < MinggeManager.Instance.deFightAttrIDList.Length; i++) { deFightAttrScroller.AddCell(ScrollerDataType.Header, MinggeManager.Instance.deFightAttrIDList[i]); } deFightAttrScroller.Restart(); skillScroller.Refresh(); //特殊处理 需要加上第一个任意 for (int i = 0; i <= MinggeManager.Instance.minggeSkillTypeIDList.Length; i++) { if (i == 0) { skillScroller.AddCell(ScrollerDataType.Header, 0); } else { skillScroller.AddCell(ScrollerDataType.Header, MinggeManager.Instance.minggeSkillTypeIDList[i - 1]); } } skillScroller.Restart(); useMoreItemScroller.Refresh(); for (int i = 0; i < MinggeManager.Instance.autoCostCntList.Length; i++) { useMoreItemScroller.AddCell(ScrollerDataType.Header, MinggeManager.Instance.autoCostCntList[i]); } useMoreItemScroller.Restart(); } void OnRefreshQualityCell(ScrollerDataType type, CellView cell) { var _cell = cell as MinggeAutoSetCell; _cell.Display(1, cell.index, autoSetData, (value) => { qualityScroller.SetActive(false); autoSetData.quanlity = value; string qualityName = Language.Get("L1039", MGGuayuQualityConfig.Get(autoSetData.quanlity).ColorName); qualityText.text = Language.Get("Mingge30", UIHelper.AppendColor(autoSetData.quanlity, qualityName, true, 2)); }); } void OnRefreshFightAttrCell(ScrollerDataType type, CellView cell) { var _cell = cell as MinggeAutoSetCell; _cell.Display(2, cell.index, autoSetData, (value) => { fightAttrScroller.SetActive(false); autoSetData.fightAttrID = value; fightAttrText.text = autoSetData.fightAttrID == 0 ? Language.Get("Mingge33") : PlayerPropertyConfig.Get(autoSetData.fightAttrID).Name; }); } void OnRefreshDeFightAttrCell(ScrollerDataType type, CellView cell) { var _cell = cell as MinggeAutoSetCell; _cell.Display(3, cell.index, autoSetData, (value) => { deFightAttrScroller.SetActive(false); autoSetData.deFightAttrID = value; deFightAttrText.text = autoSetData.deFightAttrID == 0 ? Language.Get("Mingge33") : PlayerPropertyConfig.Get(autoSetData.deFightAttrID).Name; }); } void OnRefreshSkillCell(ScrollerDataType type, CellView cell) { var _cell = cell as MinggeAutoSetCell; _cell.Display(4, cell.index, autoSetData, (value) => { skillScroller.SetActive(false); autoSetData.skillID = value; skillText.text = autoSetData.skillID == 0 ? Language.Get("Mingge33") : Language.Get($"MinggeSkillType_{autoSetData.skillID}"); }); } void OnRefreshUseMoreItemCell(ScrollerDataType type, CellView cell) { var _cell = cell as MinggeAutoSetCell; _cell.Display(5, cell.index, autoSetData, (value) => { useMoreItemScroller.SetActive(false); MinggeManager.Instance.autoCostCount = value; useMoreItemText.text = MinggeManager.Instance.autoCostCount.ToString(); }); } } Main/System/Mingge/MinggeAutoSetWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: cb3d1b698a5646743b6cab34a223e267 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Mingge/MinggeEquipWin.cs
@@ -7,7 +7,6 @@ { [SerializeField] MinggeEquipChangeCell oldEquipCell; [SerializeField] MinggeEquipChangeCell newEquipCell; [SerializeField] Transform presetObj; [SerializeField] ScrollRect scrollRect; [SerializeField] GroupButtonEx[] presetBtns; List<Text> presetNameTexts = new List<Text>(); @@ -41,6 +40,15 @@ protected override void OnPreClose() { PackManager.Instance.RefreshItemEvent -= RefreshItemEvent; MinggeManager.Instance.equipShowPresetID = 0; MinggeManager.Instance.selectFloorEquip = null; if (!UIManager.Instance.IsOpened<MinggeAutoSetWin>()) { MinggeManager.Instance.isPauseAuto = false; } MinggeManager.Instance.redpointAuto.state = RedPointState.None; } void RefreshItemEvent(PackType packType, int index, int itemID) @@ -61,7 +69,7 @@ } if (cnt > 0) { presetObj.SetActive(true); scrollRect.SetActive(true); for (int i = 0; i < presetBtns.Length; i++) { if (i < cnt) @@ -80,7 +88,7 @@ } else { presetObj.SetActive(false); scrollRect.SetActive(false); } if (MinggeManager.Instance.selectFloorEquip == null || MinggeManager.Instance.selectFloorEquip.config == null) { Main/System/Mingge/MinggeManager.cs
@@ -2,6 +2,7 @@ using UnityEngine; using LitJson; using System; using System.Linq; public class MinggeManager : GameSystemManager<MinggeManager> @@ -20,11 +21,8 @@ public Dictionary<int, long> minggeAttrDict = new Dictionary<int, long>(); //自动设置 public int autoCostCnt; //自动推演消耗个数 public bool isOpenAuto; public bool qlNotNotify; //配置 public const int TotleEquip = 12; //一套装备的总数 @@ -39,21 +37,25 @@ public override void Init() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeRelogin; DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize; PackManager.Instance.RefreshItemEvent += RefreshItemEvent; DTCA814_tagMCMakeItemAnswer.MakeItemAnswerEvent += OnEquipResult; DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOK; FuncPresetManager.Instance.OnFuncPresetUseDataEvent += OnFuncPresetUseDataEvent; GlobalTimeEvent.Instance.MSEvent += OnMSEvent; ParseConfig(); } public override void Release() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeRelogin; DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize; PackManager.Instance.RefreshItemEvent -= RefreshItemEvent; DTCA814_tagMCMakeItemAnswer.MakeItemAnswerEvent -= OnEquipResult; DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOK; FuncPresetManager.Instance.OnFuncPresetUseDataEvent -= OnFuncPresetUseDataEvent; GlobalTimeEvent.Instance.MSEvent -= OnMSEvent; } @@ -69,6 +71,13 @@ minggeItemTypeList = JsonMapper.ToObject<int[]>(config.Numerical4); minggeSkillTypeIDList = JsonMapper.ToObject<int[]>(config.Numerical5); config = FuncConfigConfig.Get("MinggeTY2"); fightAttrIDList = JsonMapper.ToObject<int[]>(config.Numerical1); deFightAttrIDList = JsonMapper.ToObject<int[]>(config.Numerical2); autoCostCntList = JsonMapper.ToObject<int[]>(config.Numerical3); autoTYCDs = JsonMapper.ToObject<float[]>(config.Numerical4); needOfficialRank = int.Parse(config.Numerical5); for (int i = 0; i < minggeItemTypeList.Length; i++) { minggeSkillEquipPlaceList.Add(MGGuayuTypeConfig.Get(minggeItemTypeList[i]).EquipPlace); @@ -77,17 +86,26 @@ } private void OnBeforePlayerDataInitialize() private void OnBeforePlayerDataInitializeRelogin() { m_GanwuLV = 1; m_GanwuExp = 0; m_Lingying = 0; isStartAuto = false; isPauseAuto = false; qlNotNotify = false; } private void OnBeforePlayerDataInitialize() { waitTYOPPack = false; } void OnPlayerLoginOK() { InitAutoSet(); UpdateRedPoint(); redpointAuto.state = RedPointState.None; } private void OnEquipResult(HA814_tagMCMakeItemAnswer info) @@ -96,7 +114,7 @@ return; OnOPCallbackEvent?.Invoke(0); } void RefreshItemEvent(PackType type, int index, int itemID) @@ -141,7 +159,7 @@ public void UpdateMinggeInfo(HB132_tagSCMinggeInfo netPack) { var beforeLV= m_GanwuLV; var beforeLV = m_GanwuLV; m_GanwuLV = netPack.GanwuLV; m_GanwuExp = (int)netPack.GanwuExp; m_Lingying = (int)netPack.Lingying; @@ -220,10 +238,23 @@ } //自动处理: 判断分解 和战力高低 和决定是哪个方案下的装备对比 int autoPreseetID; if (!AutoCalcMG(equip, out autoPreseetID)) { return false; } //非自动情况下,默认当前方案 equipShowPresetID = FuncPresetManager.Instance.GetFuncPresetIDByBattleType((int)BattlePreSetType.Story, (int)FuncPresetType.Mingge); if (autoPreseetID == 0) { equipShowPresetID = FuncPresetManager.Instance.GetFuncPresetIDByBattleType((int)BattlePreSetType.Story, (int)FuncPresetType.Mingge); } else { equipShowPresetID = autoPreseetID; } selectFloorEquip = equip; if (UIManager.Instance.IsOpened<MinggeWin>()) { @@ -236,6 +267,12 @@ { UIManager.Instance.OpenWindow<MinggeEquipWin>(); } } else { //打开界面 且外部提醒有需要处理的装备,在关闭界面的时候判断重置标识 isPauseAuto = true; redpointAuto.state = RedPointState.Simple; } return true; @@ -270,6 +307,22 @@ var pack = new CB250_tagCSMinggeTuiyan(); pack.Count = (byte)count; GameNetSystem.Instance.SendInfo(pack); if (isStartAuto && UIManager.Instance.IsOpened<MinggeWin>()) { //显示特效 var ui = UIManager.Instance.GetUI<MinggeWin>(); ui.tyEffect.onComplete = null; ui.tyEffect.Play(); if (autoSpeedUP) { ui.tyEffect.speedRate = autoTYCDs[0] / autoTYCDs[1]; } else { ui.tyEffect.speedRate = 1; } } } public void SendChangeMingge(int selectMinggePresetID, int dropIndex, bool autodec) @@ -325,7 +378,50 @@ } public List<int> GetQLRate(int value) { var keys = MGLingyingQualityConfig.GetKeys(); keys.Sort(); int littleValue = 0; int bigValue = 0; for (int i = 0; i < keys.Count; i++) { var key = keys[i]; if (value < key) { bigValue = key; littleValue = keys[i - 1]; break; } else if (i == keys.Count - 1 && value >= key) { bigValue = key; littleValue = key; } } var littleRateList = MGLingyingQualityConfig.Get(littleValue).ItemColorWeightList; if (littleValue == bigValue) { return littleRateList.ToList(); } var bigRateList = MGLingyingQualityConfig.Get(bigValue).ItemColorWeightList; //对比下一阶段的灵应值配置,比较同品质的权重差值与两个阶段的灵应差值求出每增加1点灵应对某个品质的权重变化值,变化值可能提升或者降低 var rateList = new List<int>(); for (int i = 0; i < littleRateList.Length; i++) { var littleRateValue = littleRateList[i]; var bigRateValue = bigRateList[i]; var diffRate = littleRateValue + (bigRateValue - littleRateValue) / (float)(bigValue - littleValue) * (value - littleValue); rateList.Add((int)diffRate); } return rateList; } #region 红点 @@ -333,7 +429,7 @@ Redpoint redpointMG = new Redpoint(MainRedDot.RedPoint_Mingge, MainRedDot.RedPoint_Mingge * 10 + 1); Redpoint redpointPray = new Redpoint(MainRedDot.RedPoint_Mingge, MainRedDot.RedPoint_Mingge * 10 + 2); Redpoint redpointPreset = new Redpoint(MainRedDot.RedPoint_Mingge, MainRedDot.RedPoint_Mingge * 10 + 3); public Redpoint redpointAuto = new Redpoint(MainRedDot.RedPoint_Mingge, MainRedDot.RedPoint_Mingge * 10 + 4); void UpdateRedPoint() { @@ -344,7 +440,7 @@ { return; } if (PackManager.Instance.GetItemCountByID(PackType.Item, tyItemID) > 0) if (PackManager.Instance.GetItemCountByID(PackType.Item, tyItemID) > 0 && !isStartAuto) { redpointMG.state = RedPointState.Simple; } @@ -360,4 +456,505 @@ } #endregion #region 自动设置 public int[] fightAttrIDList; public int[] deFightAttrIDList; public int[] autoCostCntList; public float[] autoTYCDs; //秒 public float autoTYTime; public int needOfficialRank; //公共部分 public bool autoCostToggle { get { return LocalSave.GetBool($"MGCost_{PlayerDatas.Instance.baseData.PlayerID}", false); } set { LocalSave.SetBool($"MGCost_{PlayerDatas.Instance.baseData.PlayerID}", value); } } public int autoCostCount { get { return LocalSave.GetInt($"MGCostCnt_{PlayerDatas.Instance.baseData.PlayerID}", 1); } set { LocalSave.SetInt($"MGCostCnt_{PlayerDatas.Instance.baseData.PlayerID}", value); } } public bool autoSpeedUP { get { return LocalSave.GetBool($"MGSpeedUP_{PlayerDatas.Instance.baseData.PlayerID}", false); } set { LocalSave.SetBool($"MGSpeedUP_{PlayerDatas.Instance.baseData.PlayerID}", value); } } public event Action ChangeAutoEvent; bool m_IsStartAuto; //是否开启自动 public bool isStartAuto { get { return m_IsStartAuto; } private set { m_IsStartAuto = value; isPauseAuto = false; UpdateRedPoint(); ChangeAutoEvent?.Invoke(); } } public bool isPauseAuto; //开启的情况下,因为某些原因暂停自动 //每套方案各自的信息 public List<MinggeAutoSet> autoSetList = new List<MinggeAutoSet>(); public void InitAutoSet() { autoSetList.Clear(); if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Mingge)) { return; } var maxCnt = PresetUnlockConfig.GetFuncPresetMaxCount((int)FuncPresetType.Mingge); for (int i = 1; i <= maxCnt; i++) { var autoSet = new MinggeAutoSet(); autoSet.presetID = i; autoSetList.Add(autoSet); } } public MinggeAutoSet GetMGAutoSet(int presetID) { for (int i = 0; i < autoSetList.Count; i++) { if (autoSetList[i].presetID == presetID) { return autoSetList[i]; } } return null; } //检查至少要有一个启动中 public bool CanChangeStartToFalse(int presetID) { for (int i = 0; i < autoSetList.Count; i++) { if (autoSetList[i].presetID != presetID && autoSetList[i].startToggle) { return true; } } return false; } public void StartAuto(bool isStart) { if (isStart) { bool canStart = false; for (int i = 0; i < autoSetList.Count; i++) { if (autoSetList[i].startToggle) { canStart = true; } } if (!canStart) { SysNotifyMgr.Instance.ShowTip("MinggeAuto2"); isStartAuto = false; return; } if (!ItemLogicUtility.CheckItemCount(PackType.Item, tyItemID, autoCostCount, 2)) { isStartAuto = false; return; } } UIManager.Instance.CloseWindow<MinggeAutoSetWin>(); isStartAuto = isStart; if (isStartAuto) { //先处理装备一次,后续通过物品包自动处理 CalcEquip(); } else { SysNotifyMgr.Instance.ShowTip("MinggeAuto1"); } } //自动处理装备,返回成功代表需要手动处理装备,其他情况一律返回false如分解 或防范 bool AutoCalcMG(ItemModel mgEquip, out int autoPreseetID) { autoPreseetID = 0; if (mgEquip == null) { return false; } if (!isStartAuto) return true; //优先判断当前方案命格 var curPresetID = FuncPresetManager.Instance.GetFuncPresetID((int)FuncPresetType.Mingge); var autoSet = GetMGAutoSet(curPresetID); if (!CanDecomposeMG(mgEquip, autoSet)) { autoPreseetID = curPresetID; return true; } //判断其他方案 for (int i = 0; i < autoSetList.Count; i++) { if (autoSetList[i].presetID == curPresetID) { continue; } if (!CanDecomposeMG(mgEquip, autoSetList[i])) { autoPreseetID = autoSetList[i].presetID; return true; } } SendDecompose(new byte[] { (byte)mgEquip.gridIndex }); return false; } //单方案判断,未开启的也当作可分解,外层多套判断有一套需要就是需要穿戴 bool CanDecomposeMG(ItemModel mgEquip, MinggeAutoSet autoSet) { if (!autoSet.startToggle) { return true; } if (mgEquip.config.ItemColor < autoSet.quanlity) { //品质不满足 return true; } if (!autoSet.fightPowerToggle && !autoSet.fightAttrToggle && !autoSet.skillToggle) { //都不勾选 return true; } //先判断技能,再判断属性 最后战力(比较消耗) //技能勾选的情况 if (autoSet.skillToggle && !autoSet.fightPowerToggle && !autoSet.fightAttrToggle) { return !IsSkillOK(mgEquip, autoSet); } if (autoSet.skillToggle && autoSet.fightAttrToggle && !autoSet.fightPowerToggle) { if (autoSet.andOrSkillToggle == 1) { return !(IsSkillOK(mgEquip, autoSet) && IsFightAttrOK(mgEquip, autoSet)); } else { return !(IsSkillOK(mgEquip, autoSet) || IsFightAttrOK(mgEquip, autoSet)); } } if (autoSet.skillToggle && autoSet.fightPowerToggle && !autoSet.fightAttrToggle) { if (autoSet.andOrSkillToggle == 1) { return !(IsSkillOK(mgEquip, autoSet) && IsFightPowerOK(mgEquip, autoSet)); } else { return !(IsSkillOK(mgEquip, autoSet) || IsFightPowerOK(mgEquip, autoSet)); } } if (autoSet.skillToggle && autoSet.fightPowerToggle && autoSet.fightAttrToggle) { if (autoSet.andOrSkillToggle == 1 && autoSet.andOrFPToggle == 1) { return !(IsSkillOK(mgEquip, autoSet) && IsFightAttrOK(mgEquip, autoSet) && IsFightPowerOK(mgEquip, autoSet)); } else if (autoSet.andOrSkillToggle == 1 && autoSet.andOrFPToggle == 2) { return !((IsSkillOK(mgEquip, autoSet) && IsFightAttrOK(mgEquip, autoSet)) || IsFightPowerOK(mgEquip, autoSet)); } else if (autoSet.andOrSkillToggle == 2 && autoSet.andOrFPToggle == 1) { return !((IsFightAttrOK(mgEquip, autoSet) && IsFightPowerOK(mgEquip, autoSet)) || IsSkillOK(mgEquip, autoSet)); } else { return !(IsSkillOK(mgEquip, autoSet) || IsFightAttrOK(mgEquip, autoSet) || IsFightPowerOK(mgEquip, autoSet)); } } //属性勾选的情况 if (autoSet.fightAttrToggle && !autoSet.fightPowerToggle) { return !IsFightAttrOK(mgEquip, autoSet); } if (autoSet.fightAttrToggle && autoSet.fightPowerToggle) { if (autoSet.andOrFPToggle == 1) { return !(IsFightAttrOK(mgEquip, autoSet) && IsFightPowerOK(mgEquip, autoSet)); } else { return !(IsFightAttrOK(mgEquip, autoSet) || IsFightPowerOK(mgEquip, autoSet)); } } //战力勾选的情况 if (autoSet.fightPowerToggle) { return !IsFightPowerOK(mgEquip, autoSet); } return false; } //技能是否满足条件 bool IsSkillOK(ItemModel mgEquip, MinggeAutoSet autoSet) { var skillID = EquipModel.Instance.GetEquipSkillID(mgEquip); if (skillID == 0) { return false; } if (autoSet.skillID == 0) { //任意 return true; } if (skillID != autoSet.skillID) { return false; } return true; } //属性是否满足条件 bool IsFightAttrOK(ItemModel mgEquip, MinggeAutoSet autoSet) { var fightAttrs = EquipModel.Instance.GetEquipFightAttrs(mgEquip); // 如果指定了属性,则检查装备是否包含该属性 bool deFightAttrOK = autoSet.deFightAttrID == 0 || fightAttrs.Contains(autoSet.deFightAttrID); bool fightAttrOK = autoSet.fightAttrID == 0 || fightAttrs.Contains(autoSet.fightAttrID); return deFightAttrOK && fightAttrOK; } bool IsFightPowerOK(ItemModel mgEquip, MinggeAutoSet autoSet) { long showFightPower = FightPowerManager.Instance.GetFightPowerMinggeChange(mgEquip, autoSet.presetID); if (showFightPower >= 0) { return true; } return false; } public void AutoTY() { //先处理装备,再推演 // 每一套方案都要综合判断 // if (CalcEquip()) // { // return; // } if (UIManager.Instance.IsOpened<MinggeEquipWin>()) { return; } if (!PackManager.Instance.GetItems(PackType.MinggeDrop).IsNullOrEmpty()) { return; } if (!ItemLogicUtility.CheckItemCount(PackType.Item, tyItemID, autoCostCount, 1)) { isStartAuto = false; SysNotifyMgr.Instance.ShowTip("MinggeAuto1"); return; } SendTY(autoCostCount); autoTYTime = Time.time; } void OnMSEvent() { if (isPauseAuto) { return; } if (!isStartAuto) { return; } if (Time.time - autoTYTime < autoTYCDs[autoSpeedUP ? 1 : 0]) { return; } AutoTY(); } #endregion } public class MinggeAutoSet { public int presetID; public bool startToggle { get { return LocalSave.GetBool($"MGStart{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", false); } set { LocalSave.SetBool($"MGStart{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value); } } public int quanlity { get { return LocalSave.GetInt($"MGQuanlity{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", 1); } set { LocalSave.SetInt($"MGQuanlity{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value); } } public bool fightPowerToggle { get { return LocalSave.GetBool($"MGFightPower{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", false); } set { LocalSave.SetBool($"MGFightPower{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value); } } //0 都不勾选 1同时 2 或者 public int andOrFPToggle { get { return LocalSave.GetInt($"MGAndOrFP{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", 0); } set { LocalSave.SetInt($"MGAndOrFP{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value); } } public bool fightAttrToggle { get { return LocalSave.GetBool($"MGFightAttr{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", false); } set { LocalSave.SetBool($"MGFightAttr{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value); } } public int fightAttrID { get { return LocalSave.GetInt($"MGFightAttrID{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", 0); } set { LocalSave.SetInt($"MGFightAttrID{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value); } } public int deFightAttrID { get { return LocalSave.GetInt($"MGDeFightAttrID{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", 0); } set { LocalSave.SetInt($"MGDeFightAttrID{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value); } } public bool skillToggle { get { return LocalSave.GetBool($"MGSkill{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", false); } set { LocalSave.SetBool($"MGSkill{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value); } } public int skillID { get { return LocalSave.GetInt($"MGSkillID{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", 0); } set { LocalSave.SetInt($"MGSkillID{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value); } } //0 都不勾选 1同时 2 或者 public int andOrSkillToggle { get { return LocalSave.GetInt($"MGAndOrSkill{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", 0); } set { LocalSave.SetInt($"MGAndOrSkill{presetID}_{PlayerDatas.Instance.baseData.PlayerID}", value); } } } Main/System/Mingge/MinggePrayWin.cs
@@ -60,8 +60,8 @@ void DisplayPrayRate() { qlValueText.text = MinggeManager.Instance.m_Lingying.ToString(); var littleRateList = GetRate(MinggeManager.Instance.m_Lingying); var bigRateList = GetRate(MinggeManager.Instance.m_Lingying + useCnt); var littleRateList = MinggeManager.Instance.GetQLRate(MinggeManager.Instance.m_Lingying); var bigRateList = MinggeManager.Instance.GetQLRate(MinggeManager.Instance.m_Lingying + useCnt); for (int i = 0; i < prayRateCells.Length; i++) { @@ -109,49 +109,6 @@ } public List<int> GetRate(int value) { var keys = MGLingyingQualityConfig.GetKeys(); keys.Sort(); int littleValue = 0; int bigValue = 0; for (int i = 0; i < keys.Count; i++) { var key = keys[i]; if (value < key) { bigValue = key; littleValue = keys[i - 1]; break; } else if (i == keys.Count - 1 && value >= key) { bigValue = key; littleValue = key; } } var littleRateList = MGLingyingQualityConfig.Get(littleValue).ItemColorWeightList; if (littleValue == bigValue) { return littleRateList.ToList(); } var bigRateList = MGLingyingQualityConfig.Get(bigValue).ItemColorWeightList; //对比下一阶段的灵应值配置,比较同品质的权重差值与两个阶段的灵应差值求出每增加1点灵应对某个品质的权重变化值,变化值可能提升或者降低 var rateList = new List<int>(); for (int i = 0; i < littleRateList.Length; i++) { var littleRateValue = littleRateList[i]; var bigRateValue = bigRateList[i]; var diffRate = littleRateValue + (bigRateValue - littleRateValue) / (float)(bigValue - littleValue) * (value - littleValue); rateList.Add((int)diffRate); } return rateList; } } Main/System/Mingge/MinggeWin.cs
@@ -7,7 +7,7 @@ { [SerializeField] Button seeAttrBtn; [SerializeField] MinggeEquipCell[] equipCells; [SerializeField] UIEffectPlayer tyEffect; //推演特效 [SerializeField] public UIEffectPlayer tyEffect; //推演特效 [SerializeField] Image dropIcon; [SerializeField] Image dropSkillIcon; [SerializeField] MoneyMoveByPath moneyMoveByPathCell; //掉落物金钱 @@ -49,7 +49,7 @@ } AttributeManager.Instance.OpenMinggeSimpleAttributeWin(MinggeManager.Instance.minggeAttrDict, skillDict); }); tyBtn.AddListener(SendTuiyan); tyBtn.AddListener(CheckTuiyan); for (int i = 0; i < suiteNameTexts.Length; i++) { int index = i; @@ -78,6 +78,7 @@ MinggeManager.Instance.OnMinggeInfoUpdate += OnMinggeInfoUpdate; UIManager.Instance.OnCloseWindow += OnCloseWindow; FuncPresetManager.Instance.OnFuncPresetUseDataEvent += OnFuncPresetUseDataEvent; MinggeManager.Instance.ChangeAutoEvent += ChangeAutoEvent; lastLV = MinggeManager.Instance.m_GanwuLV; lastExp = MinggeManager.Instance.m_GanwuExp; Display(); @@ -92,7 +93,17 @@ MinggeManager.Instance.OnMinggeInfoUpdate -= OnMinggeInfoUpdate; UIManager.Instance.OnCloseWindow -= OnCloseWindow; FuncPresetManager.Instance.OnFuncPresetUseDataEvent -= OnFuncPresetUseDataEvent; MinggeManager.Instance.ChangeAutoEvent -= ChangeAutoEvent; } protected override void NextFrameAfterOpen() { if (MinggeManager.Instance.isPauseAuto) { MinggeManager.Instance.CalcEquip(); } } void OnCloseWindow(UIBase win) { @@ -112,6 +123,20 @@ Display(); } void ChangeAutoEvent() { if (MinggeManager.Instance.isStartAuto) { autoImg.SetActive(false); autoEffect.Play(); } else { autoImg.SetActive(true); autoEffect.Stop(); } } void Display() { DisplayMGGanwu(); @@ -123,6 +148,8 @@ presetChooseCells.Display((int)BattlePreSetType.Story, (int)FuncPresetType.Mingge); funPresetBtn.SetActive(FuncPresetManager.Instance.IsPreShow()); ChangeAutoEvent(); } void RefreshItemEvent(PackType type, int index, int itemID) { @@ -214,8 +241,43 @@ moneyMoveByPathCell.PlayAnimation(MinggeManager.Instance.deitemID, 8, 2); } void CheckTuiyan() { if (!MinggeManager.Instance.qlNotNotify && PackManager.Instance.GetItemCountByID(PackType.Item, MinggeManager.Instance.qlItemID) > 0) { ConfirmCancel.ToggleConfirmCancel( Language.Get("L1003"), Language.Get("Mingge31"), Language.Get("TianziBillborad08"), Language.Get("Mingge35"), Language.Get("Mingge34"), (bool isOK, bool isToggle) => { if (isOK) { UIManager.Instance.OpenWindow<MinggePrayWin>(); } else { SendTuiyan(); } MinggeManager.Instance.qlNotNotify = isToggle; }, false ); return; } SendTuiyan(); } void SendTuiyan() { if (MinggeManager.Instance.isStartAuto) { MinggeManager.Instance.StartAuto(false); } if (MinggeManager.Instance.CalcEquip()) { return; @@ -231,7 +293,12 @@ return; } tyEffect.onComplete += () => if (MinggeManager.Instance.isStartAuto) { MinggeManager.Instance.StartAuto(false); } tyEffect.speedRate = 1; tyEffect.onComplete = () => { MinggeManager.Instance.SendTY(1); }; @@ -295,7 +362,16 @@ void AutoTY() { if (InvestModel.Instance.IsInvested(InvestModel.monthCardType) || PlayerDatas.Instance.baseData.realmLevel >= MinggeManager.Instance.needOfficialRank) { UIManager.Instance.OpenWindow<MinggeAutoSetWin>(); } else { SysNotifyMgr.Instance.ShowTip("MinggeAuto6", RealmConfig.Get(PlayerDatas.Instance.baseData.realmLevel).Name); UIManager.Instance.OpenWindow<PrivilegeCardWin>(); } } } Main/System/PhantasmPavilion/PhantasmPavilionManager.cs
@@ -84,6 +84,8 @@ { if (type != PackType.Item) return; if (itemID <= 0) return; if (ItemConfig.Get(itemID).Type != 146) return; UpdateRedPoint(); Main/System/WarlordPavilion/WarlordPavilionManager.cs
@@ -346,6 +346,8 @@ foreach (var config in FBDJGEffectConfig.GetValues()) { int attrId = config.AttrID; if (config.RandWeight == 0) continue; if (!attrIds.Contains(attrId)) { attrIds.Add(attrId);