Core/NetworkPackage/DTCFile/ServerPack/HA2_Package/DTCA205_tagMCVPackClear.cs
@@ -6,24 +6,17 @@ public class DTCA205_tagMCVPackClear : DtcBasic { public class DTCA205_tagMCVPackClear : DtcBasic { public override void Done(GameNetPackBasic vNetPack) { public override void Done(GameNetPackBasic vNetPack) { base.Done(vNetPack); HA205_tagMCVPackClear vNetData = vNetPack as HA205_tagMCVPackClear; if (vNetData != null) { switch ((PackType)vNetData.PackType) { case PackType.RunePack: ModelCenter.Instance.GetModel<RuneModel>().OnRunePackClear(vNetData); break; default: ModelCenter.Instance.GetModel<VirtualPackModel>().OnReceiveServerPack(vNetData); break; } } ModelCenter.Instance.GetModel<VirtualPackModel>().OnReceiveServerPack(vNetData); } } Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA3BA_tagMCTrialTowerInfo.cs
@@ -1,30 +1,30 @@ using UnityEngine; using System.Collections; using Snxxz.UI; // A3 BA 通知试炼之塔过关数 #tagMCTrialTowerInfo public class DTCA3BA_tagMCTrialTowerInfo : DtcBasic { public override void Done(GameNetPackBasic vNetPack) { base.Done(vNetPack); HA3BA_tagMCTrialTowerInfo vNetData = vNetPack as HA3BA_tagMCTrialTowerInfo; if (vNetData != null) { ModelCenter.Instance.GetModel<RuneModel>().OnRuneTowerRefresh(vNetData); ModelCenter.Instance.GetModel<RuneTowerModel>().yesterdayPassFloor = (int)vNetData.YesterDayPassLV; } } } using UnityEngine; using System.Collections; using Snxxz.UI; // A3 BA 通知试炼之塔过关数 #tagMCTrialTowerInfo public class DTCA3BA_tagMCTrialTowerInfo : DtcBasic { public override void Done(GameNetPackBasic vNetPack) { base.Done(vNetPack); HA3BA_tagMCTrialTowerInfo vNetData = vNetPack as HA3BA_tagMCTrialTowerInfo; if (vNetData != null) { ModelCenter.Instance.GetModel<RuneNewModel>().ReceivePackage(vNetData); ModelCenter.Instance.GetModel<RuneTowerModel>().yesterdayPassFloor = (int)vNetData.YesterDayPassLV; } } } System/GatheringSoul/VirtualPackModel.cs
@@ -34,7 +34,7 @@ var items = virtualPackItems[packType]; foreach (var item in items) { pool.Add(item); pool.Release(item); } } virtualPackItems.Clear(); @@ -184,8 +184,8 @@ }); foreach (var item in items) { pool.Add(item); list.Remove(item); pool.Release(item); } } if (virtualPackRefresh != null) @@ -213,6 +213,7 @@ if (pool.inactivedCount > 0) { item = pool.Get(); list.Add(item); } } if (item == null) System/KnapSack/Logic/SelectBoxItemCell.cs
@@ -44,8 +44,6 @@ switch(packType) { case PackType.RunePack: haveCnt = ModelCenter.Instance.GetModel<RuneModel>().GetRuneCountById(id); break; case PackType.GatherSoul: haveCnt = ModelCenter.Instance.GetModel<VirtualPackModel>().GetItemCountById(packType,id); break; System/Rank/RankModel.cs
@@ -85,7 +85,7 @@ { foreach (var item in rankDatas) { m_RankDataPool.Add(item); m_RankDataPool.Release(item); } } m_RankDatas.Clear(); @@ -191,7 +191,7 @@ { RankData data = rankDatas[i]; rankDatas.RemoveAt(i); m_RankDataPool.Add(data); m_RankDataPool.Release(data); } if (onRankRefresh != null) { System/Rune/RuneBreakCell.cs
File was deleted System/Rune/RuneComposeModel.cs
@@ -8,6 +8,10 @@ [XLua.LuaCallCSharp] public class RuneComposeModel : Model, IPlayerLoginOk { RuneNewModel runeModel { get { return ModelCenter.Instance.GetModel<RuneNewModel>(); } } VirtualPackModel virtualPackModel { get { return ModelCenter.Instance.GetModel<VirtualPackModel>(); } } public override void Init() { presentSelectRuneQuality = 0; @@ -15,9 +19,9 @@ ParseConfig(); PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshInfoEvent; runeModel.OnRefreshRuneTowerLv += OnRefreshRune; runeModel.OnRefreshRunePack += OnRefreshRune; runeModel.OnRefreshRuneHole += OnRefreshRune; runeModel.onRuneTowerRefresh += OnRefreshRune; virtualPackModel.virtualPackRefresh += VirtualPackRefresh; runeModel.onRuneHoleRefresh += OnRefreshRune; foreach (var _key in runeComposeDict.Keys) { @@ -35,15 +39,15 @@ public override void UnInit() { runeModel.onRuneTowerRefresh -= OnRefreshRune; runeModel.onRuneHoleRefresh -= OnRefreshRune; virtualPackModel.virtualPackRefresh -= VirtualPackRefresh; } public void OnPlayerLoginOk() { UpdateRedpoint(); } RuneModel runeModel { get { return ModelCenter.Instance.GetModel<RuneModel>(); } } #region 配置 public Dictionary<int, List<RuneComposeConfig>> runeComposeDict = new Dictionary<int, List<RuneComposeConfig>>(); @@ -96,6 +100,14 @@ } } private void VirtualPackRefresh(PackType packType) { if (packType == PackType.RunePack) { UpdateRedpoint(); } } private void OnRefreshRune() { UpdateRedpoint(); @@ -124,14 +136,14 @@ for (int i = 0; i < _list.Count; i++) { var _runeConfig = RuneConfig.Get(_list[i].TagItemID); if (runeModel.RuneTowerOpenLV < _runeConfig.TowerID) if (runeModel.passRuneTowerFloor < _runeConfig.TowerID) { continue; } var _runeComposeConfig = RuneComposeConfig.Get(_list[i].TagItemID); RuneData _data; var count1 = runeModel.GetMaxLevelRuneCnt(_runeComposeConfig.NeedItem[0], out _data); var count2 = runeModel.GetMaxLevelRuneCnt(_runeComposeConfig.NeedItem[1], out _data); RuneItem item; var count1 = runeModel.TryGetComposeRuneCount(_runeComposeConfig.NeedItem[0], out item); var count2 = runeModel.TryGetComposeRuneCount(_runeComposeConfig.NeedItem[1], out item); var magicEssence = PlayerDatas.Instance.extersion.magicEssence; if (count1 > 0 && count2 > 0 && magicEssence >= _runeComposeConfig.NeedMJ) { System/Rune/RuneComposeWin.cs
@@ -48,23 +48,14 @@ [SerializeField] Button m_ComposeBtn; [SerializeField] RedpointBehaviour m_ComposeRedpoint; RuneComposeModel m_Model; RuneComposeModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<RuneComposeModel>()); } } RuneComposeModel model { get { return ModelCenter.Instance.GetModel<RuneComposeModel>(); } } RuneModel m_RuneModel; RuneModel runeModel { get { return m_RuneModel ?? (m_RuneModel = ModelCenter.Instance.GetModel<RuneModel>()); } } RuneNewModel runeModel { get { return ModelCenter.Instance.GetModel<RuneNewModel>(); } } RuneResolveModel runeResolveModel { get { return ModelCenter.Instance.GetModel<RuneResolveModel>(); } } VirtualPackModel virtualPackModel { get { return ModelCenter.Instance.GetModel<VirtualPackModel>(); } } #region Built-in protected override void BindController() { @@ -87,8 +78,8 @@ protected override void OnPreOpen() { runeModel.OnRefreshRuneTowerLv += OnRefreshRuneTowerLv; runeModel.OnRefreshRunePack += RefreshRuneCompose; runeModel.onRuneTowerRefresh += OnRuneTowerRefresh; virtualPackModel.virtualPackRefresh += VirtualPackRefresh; PlayerDatas.Instance.playerDataRefreshEvent += OnRefreshPlayerInfo; DTC0721_tagMakeItemAnswer.MakeItemAnswerEvent += MakeItemAnswerEvent; RefreshRuneType(); @@ -101,8 +92,8 @@ protected override void OnPreClose() { runeModel.OnRefreshRuneTowerLv -= OnRefreshRuneTowerLv; runeModel.OnRefreshRunePack -= RefreshRuneCompose; runeModel.onRuneTowerRefresh -= OnRuneTowerRefresh; virtualPackModel.virtualPackRefresh -= VirtualPackRefresh; PlayerDatas.Instance.playerDataRefreshEvent -= OnRefreshPlayerInfo; DTC0721_tagMakeItemAnswer.MakeItemAnswerEvent -= MakeItemAnswerEvent; } @@ -111,7 +102,7 @@ { } #endregion private void OnRefreshRuneTowerLv() private void OnRuneTowerRefresh() { scrollerController.m_Scorller.RefreshActiveCellViews(); } @@ -168,22 +159,22 @@ ItemConfig _itemCfg = ItemConfig.Get(_cfg.NeedItem[0]); m_Rune1Img.SetSprite(_itemCfg.IconKey); RuneData _rune1 = null; var _runeCnt = runeModel.GetMaxLevelRuneCnt(_cfg.NeedItem[0], out _rune1); RuneItem _rune1 = null; var _runeCnt = runeModel.TryGetComposeRuneCount(_cfg.NeedItem[0], out _rune1); m_Rune1NumTxt.text = StringUtility.Contact(_runeCnt > 0 ? UIHelper.AppendColor(TextColType.White, _runeCnt.ToString()) : UIHelper.AppendColor(TextColType.Red, _runeCnt.ToString()), "/", 1); m_Rune1NameTxt.text = StringUtility.Contact(_itemCfg.ItemName, " Lv.", _rune1 == null ? 1 : _rune1.lv); m_Rune1NameTxt.text = StringUtility.Contact(_itemCfg.ItemName, " Lv.", _rune1 == null ? 1 : _rune1.level); m_Rune1NameTxt.color = UIHelper.GetUIColor(_itemCfg.ItemColor, true); _itemCfg = ItemConfig.Get(_cfg.NeedItem[1]); m_Rune2Img.SetSprite(_itemCfg.IconKey); RuneData _rune2 = null; _runeCnt = runeModel.GetMaxLevelRuneCnt(_cfg.NeedItem[1], out _rune2); RuneItem _rune2 = null; _runeCnt = runeModel.TryGetComposeRuneCount(_cfg.NeedItem[1], out _rune2); m_Rune2NumTxt.text = StringUtility.Contact(_runeCnt > 0 ? UIHelper.AppendColor(TextColType.White, _runeCnt.ToString()) : UIHelper.AppendColor(TextColType.Red, _runeCnt.ToString()), "/", 1); m_Rune2NameTxt.text = StringUtility.Contact(_itemCfg.ItemName, " Lv.", _rune2 == null ? 1 : _rune2.lv); m_Rune2NameTxt.text = StringUtility.Contact(_itemCfg.ItemName, " Lv.", _rune2 == null ? 1 : _rune2.level); m_Rune2NameTxt.color = UIHelper.GetUIColor(_itemCfg.ItemColor, true); _itemCfg = ItemConfig.Get(_cfg.TagItemID); @@ -192,20 +183,20 @@ if (_rune1 != null && _rune2 != null) { float _exp = 0; _exp += runeModel.GetRuneBreakExp(_rune1, true); _exp += runeModel.GetRuneBreakExp(_rune2, true); _composeLv = runeModel.GetRuneLevelByExp(_cfg.TagItemID, _exp); _exp += runeResolveModel.GetRuneResolveGetSplinters(_rune1.id, _rune1.level, true); _exp += runeResolveModel.GetRuneResolveGetSplinters(_rune2.id, _rune2.level, true); _composeLv = runeModel.GetRuneLevelBySplinters(_cfg.TagItemID, _exp); } m_ComposeRuneNameTxt.text = StringUtility.Contact(_itemCfg.ItemName, " Lv.", _composeLv); RuneConfig _tagRuneModel = RuneConfig.Get(_itemCfg.ID); int[] _runeTypes = _tagRuneModel.AttrType; var _propertyCfg = PlayerPropertyConfig.Get(_runeTypes[0]); m_ComposeRuneProperty0.text = _propertyCfg.Name; m_ComposeRunePropertyValue0.text = StringUtility.Contact("+", UIHelper.ReplacePercentage(runeModel.GetRuneAttrVal(_itemCfg.ID, m_ComposeRunePropertyValue0.text = StringUtility.Contact("+", UIHelper.ReplacePercentage(runeModel.GetPropertyValue(_itemCfg.ID, _composeLv, _runeTypes[0]), _propertyCfg.ISPercentage), _propertyCfg.ISPercentage == 1 ? "%" : string.Empty); _propertyCfg = PlayerPropertyConfig.Get(_runeTypes[1]); m_ComposeRuneProperty1.text = _propertyCfg.Name; m_ComposeRunePropertyValue1.text = StringUtility.Contact("+", UIHelper.ReplacePercentage(runeModel.GetRuneAttrVal(_itemCfg.ID, m_ComposeRunePropertyValue1.text = StringUtility.Contact("+", UIHelper.ReplacePercentage(runeModel.GetPropertyValue(_itemCfg.ID, _composeLv, _runeTypes[1]), _propertyCfg.ISPercentage), _propertyCfg.ISPercentage == 1 ? "%" : string.Empty); m_ComposeRuneNameTxt.color = UIHelper.GetUIColor(_itemCfg.ItemColor, true); } @@ -227,6 +218,15 @@ } scrollerController.Restart(); } private void VirtualPackRefresh(PackType packType) { if (packType == PackType.RunePack) { RefreshRuneCompose(); } } private void OnComposeRuneClick(CellView cell) { if (model.presentSelectComposeRune == cell.index) @@ -239,7 +239,7 @@ return; } RuneConfig _runeCfg = RuneConfig.Get(_list[cell.index].TagItemID); bool _unlockTower = _runeCfg.TowerID <= runeModel.RuneTowerOpenLV; bool _unlockTower = _runeCfg.TowerID <= runeModel.passRuneTowerFloor; if (!_unlockTower) { return; @@ -262,7 +262,7 @@ if (_cfg != null) { var _itemPathModel = ModelCenter.Instance.GetModel<GetItemPathModel>(); RuneConfig _runeCfg = RuneConfig.Get(_cfg.NeedItem[_index]); RuneTowerConfig _towerCfg = null; RuneTowerFloorConfig _runeTowerCfg = null; @@ -271,36 +271,38 @@ _runeTowerCfg = RuneTowerFloorConfig.Get(_runeCfg.TowerID); _towerCfg = RuneTowerConfig.Get(_runeTowerCfg.TowerId); } RuneData _rune = null; var _runeCnt = runeModel.GetMaxLevelRuneCnt(_cfg.NeedItem[_index], out _rune); _itemPathModel.SetRuneModel(_cfg.NeedItem[_index], _rune != null ? _rune.lv : 1, runeModel.GetRuneAttrStr(_cfg.NeedItem[_index], _rune != null ? _rune.lv : 1), _runeCfg.TowerID == 0 ? Language.Get("L1062") : Language.Get("RuneItemOrigin", _towerCfg.TowerName, _runeTowerCfg.FloorName)); RuneItem _rune = null; var _runeCnt = runeModel.TryGetComposeRuneCount(_cfg.NeedItem[_index], out _rune); var propertyDescrition = runeModel.GetRunePropertyDescription(_cfg.NeedItem[_index], _rune != null ? _rune.level : 1); var towerLabel = _runeCfg.TowerID == 0 ? Language.Get("L1062") : Language.Get("RuneItemOrigin", _towerCfg.TowerName, _runeTowerCfg.FloorName); _itemPathModel.SetRuneModel(_cfg.NeedItem[_index], _rune != null ? _rune.level : 1, propertyDescrition, towerLabel); } } private void OnComposeBtn() { RuneComposeConfig _cfg = model.GetRuneCompose(model.presentSelectRuneQuality, model.presentSelectComposeRune); RuneData _rune1 = null; var _runeCnt = runeModel.GetMaxLevelRuneCnt(_cfg.NeedItem[0], out _rune1); RuneData _rune2 = null; _runeCnt = runeModel.GetMaxLevelRuneCnt(_cfg.NeedItem[1], out _rune2); RuneItem _rune1 = null; var _runeCnt = runeModel.TryGetComposeRuneCount(_cfg.NeedItem[0], out _rune1); RuneItem _rune2 = null; _runeCnt = runeModel.TryGetComposeRuneCount(_cfg.NeedItem[1], out _rune2); if (PlayerDatas.Instance.extersion.magicEssence < _cfg.NeedMJ) { return; } if (_rune1 != null && _rune2 != null) { CA578_tagCMRuneCompound _pak = new CA578_tagCMRuneCompound(); _pak.TagItemID = (uint)_cfg.TagItemID; _pak.Cnt = 2; _pak.PackList = new byte[_pak.Cnt]; _pak.IndexList = new byte[_pak.Cnt]; _pak.PackList[0] = _rune1.packtype == (int)PackType.RunePack ? (byte)0 : (byte)1; _pak.IndexList[0] = (byte)_rune1.index; _pak.PackList[1] = _rune2.packtype == (int)PackType.RunePack ? (byte)0 : (byte)1; _pak.IndexList[1] = (byte)_rune2.index; GameNetSystem.Instance.SendInfo(_pak); CA578_tagCMRuneCompound pak = new CA578_tagCMRuneCompound(); pak.TagItemID = (uint)_cfg.TagItemID; pak.Cnt = 2; pak.PackList = new byte[pak.Cnt]; pak.IndexList = new byte[pak.Cnt]; pak.PackList[0] = (byte)_rune1.placeType; pak.IndexList[0] = (byte)_rune1.index; pak.PackList[1] = (byte)_rune2.placeType; pak.IndexList[1] = (byte)_rune2.index; GameNetSystem.Instance.SendInfo(pak); } } System/Rune/RuneModel.cs
@@ -187,78 +187,6 @@ var config = ItemConfig.Get(_itemId); return config == null ? 0 : GetRuneMaxLevel(config.ItemColor); } public string GetRuneAttrStr(int id, int level) { _textBuilder.Length = 0; RuneConfig _tagRuneModel = RuneConfig.Get(id); int[] runeTypes = _tagRuneModel.AttrType; int i = 0; for (i = 0; i < runeTypes.Length; i++) { PlayerPropertyConfig playerPro = PlayerPropertyConfig.Get(runeTypes[i]); string _str = StringUtility.Contact(playerPro.Name, "+", UIHelper.ReplacePercentage(GetRuneAttrVal(id, level, runeTypes[i]), playerPro.ISPercentage, UIHelper.GetPropertyDecimalCount(playerPro.ID)), playerPro.ISPercentage == 1 ? "%" : string.Empty, i == runeTypes.Length - 1 ? string.Empty : "\n"); _textBuilder.Append(_str); } return _textBuilder.ToString(); } public Dictionary<int, Dictionary<int, float>> runeAttrResultDict = new Dictionary<int, Dictionary<int, float>>(); public int GetRuneAttrVal(int id, int level, int type) { ItemConfig _tagChinModel = ItemConfig.Get(id); RuneConfig _tagRuneModel = RuneConfig.Get(id); float runeValue = 0; if (_tagChinModel != null && _tagRuneModel != null) { float params1 = 0; Dictionary<int, float> _dict = null; if (runeAttrResultDict.TryGetValue(type, out _dict)) { if (_dict.ContainsKey(level)) { params1 = _dict[level]; } } else { _dict = new Dictionary<int, float>(); runeAttrResultDict.Add(type, _dict); } if (params1 == 0 && !_dict.ContainsKey(level)) { Equation.Instance.Clear(); Equation.Instance.AddKeyValue(replaceValStr, level); FuncConfigConfig funcRune = FuncConfigConfig.GetRuneAttrFormula(type); params1 = Equation.Instance.Eval<float>(funcRune.Numerical1); _dict.Add(level, params1); } int[] runeTypes = _tagRuneModel.AttrType; float params2 = runeAttrDic[type][_tagChinModel.ItemColor]; var baseValue = 0; if (runeBasePropretyDict.ContainsKey(type)) { var dict = runeBasePropretyDict[type]; if (dict.ContainsKey(_tagChinModel.ItemColor)) { baseValue = dict[_tagChinModel.ItemColor]; } } if (runeTypes.Length > 1) { float coe = runeAttrAdditionDic[type]; coe = coe == 0 ? 1 : coe; runeValue = (params1 * params2 + baseValue) * coe; } else { runeValue = params1 * params2 + baseValue; } } return Mathf.FloorToInt(runeValue); } private Dictionary<int, float> runeExpResultDict = new Dictionary<int, float>(); public int GetRuneNeedExp(int id, int level) { @@ -291,59 +219,6 @@ return Mathf.FloorToInt(_levelUpExp); } public float GetRuneSoulBreakExp(RuneData _rune) { ItemConfig _itemCfg = ItemConfig.Get(_rune.id); var _treasureSoul = ModelCenter.Instance.GetModel<TreasureSoulModel>(); var _upper = (float)_treasureSoul.GetTreasureSoulValue((int)TreasurePrivilege.RuneBreakExpAdd) / 10000; if (_itemCfg.Type == RUNE_CREAMTYPE) { return _itemCfg.EffectValueA1 * _upper; } else { return runeEliteAdditonDic[_itemCfg.ItemColor] * _upper; } } public float GetRuneBreakExp(RuneData _rune, bool _compose = false) { float _exp = 0; ItemConfig _itemCfg = ItemConfig.Get(_rune.id); var _treasureSoul = ModelCenter.Instance.GetModel<TreasureSoulModel>(); var _upper = (float)_treasureSoul.GetTreasureSoulValue((int)TreasurePrivilege.RuneBreakExpAdd) / 10000; if (_itemCfg.Type == RUNE_CREAMTYPE) { return _itemCfg.EffectValueA1 + _itemCfg.EffectValueA1 * _upper; } for (int i = 1; i <= _rune.lv; i++) { if (i == 1 && !_compose) { _exp += runeEliteAdditonDic[_itemCfg.ItemColor] + runeEliteAdditonDic[_itemCfg.ItemColor] * _upper; } else { _exp += GetRuneNeedExp(_rune.id, i - 1); } } return _exp; } public int GetRuneLevelByExp(int id, float _exp) { float _totalExp = 0; var maxlevel = runeQualityMaxLevel != null ? runeQualityMaxLevel.Values.Last() : 0; for (int i = 1; i < maxlevel; i++) { _totalExp += GetRuneNeedExp(id, i); if (_totalExp > _exp) { return i; } } return maxlevel; } #endregion public const int RUNE_REDPOINT_INTERVAL = 100; private Redpoint runeRedpoint = new Redpoint(1, 108); @@ -504,20 +379,6 @@ if (RuneSplinters > GetRuneNeedExp(runeData.id, runeData.lv) && runeData.lv < GetRuneMaxLevelByItem(runeData.id)) { return true; } } return false; } public bool CanLevelUpRune(out int _hole) { _hole = 0; for (int i = 0; i < RUNE_HOLE_COUNT; i++) { if (CanLevelUpRune(i)) { _hole = i; return true; } } @@ -877,19 +738,6 @@ } } public int GetRuneCountById(int _itemId) { var count = 0; foreach (var _rune in runePackData.Values) { if (_rune.id == _itemId) { count += 1; } } return count; } /// <summary> ///得到所有的解锁符印Id /// </summary> @@ -920,240 +768,6 @@ return unlockDict; } public bool CanEquipRune(int _color, out int _hole) { _hole = 0; foreach (var _rune in runePackData.Values) { var _itemCfg = ItemConfig.Get(_rune.id); if (_itemCfg.Type == RUNE_CREAMTYPE) { continue; } else { if (_itemCfg.ItemColor >= _color) { if (CanEquipHoleRune(_itemCfg.ID, _itemCfg.ItemColor, out _hole)) { return true; } } } } return false; } public bool CanEquipBetterRune(int _hole) { foreach (var rune in runePackData.Values) { if (IsBetterRune(rune, _hole)) { return true; } } return false; } public bool IsBetterRune(RuneData rune, int _hole) { if (rune.IsRuneCream) { return false; } var runeHole = GetHoleRune(_hole); if (runeHole == null) { return false; } var runeHoleConfig = RuneConfig.Get(runeHole.id); var itemHoleConfig = ItemConfig.Get(runeHole.id); var propertyType = runeHoleConfig.AttrType[0]; if (runeHoleConfig == null) { return false; } var runeConfig = RuneConfig.Get(rune.id); bool same = false; for (int i = 0; i < runeConfig.AttrType.Length; i++) { if (runeConfig.AttrType[i] == propertyType) { same = true; break; } } if (!same) { return false; } bool isDoubleRuneHole = runeComposeModel.m_RuneBothPropertys.Contains(runeHole.id); bool isDoubleRune = runeComposeModel.m_RuneBothPropertys.Contains(rune.id); if (isDoubleRuneHole != isDoubleRune) { return isDoubleRune && GetCurrentDoublePropCount() < GetDoublePropLimitCount(); } var itemConfig = ItemConfig.Get(rune.id); return itemConfig.ItemColor > itemHoleConfig.ItemColor; } public bool CanEquipHoleRune(int id, int _color, out int _hole) { _hole = 0; for (int i = 0; i < RUNE_HOLE_COUNT; i++) { if (!IsRuneHoleOpen(i)) { return false; } var _rune = GetHoleRune(i); if (runeComposeModel.m_RuneBothPropertys.Contains(id)) { if (GetDoublePropLimitCount() <= GetCurrentDoublePropCount()) { return false; } } if (_rune == null) { if (IsSameInHoleRune(id, i)) { continue; } _hole = i; return true; } else { var _itemCfg = ItemConfig.Get(_rune.id); if (_itemCfg.ItemColor < _color && !IsSameInHoleRune(id, i)) { _hole = i; return true; } } } return false; } public RuneData GetPackRune(int index) { RuneData data = null; runePackData.TryGetValue(index, out data); return data; } public List<RuneData> runePackList { get; set; } public void OnRuneTowerRefresh(HA3BA_tagMCTrialTowerInfo vNetData) { if (runeTowerOpenLv != vNetData.PassLV) { runeTowerOpenLv = vNetData.PassLV; if (OnRefreshRuneTowerLv != null) { OnRefreshRuneTowerLv(); } } UpdateRedpoint(); } public bool IsSameInHoleRune(int id, int hole) { var _runeConfig = RuneConfig.Get(id); for (int i = 0; i < _runeConfig.AttrType.Length; i++) { if (IsSameRune(_runeConfig.AttrType[i], hole)) { return true; } } return false; } public bool IsSameRune(int type, int hole) { foreach (int key in runeHoleData.Keys) { if (key == hole) { continue; } RuneConfig _runeCfg = RuneConfig.Get(runeHoleData[key].id); for (int i = 0; i < _runeCfg.AttrType.Length; i++) { if (type == _runeCfg.AttrType[i]) { return true; } } } return false; } public void IsSameRune(int id, ref List<int> sameHoles) { sameHoles.Clear(); var _runeConfig = RuneConfig.Get(id); if (_runeConfig == null) { return; } for (int i = 0; i < _runeConfig.AttrType.Length; i++) { var sameHole = SameRuneHole(_runeConfig.AttrType[i]); if (sameHole != -1) { sameHoles.Add(sameHole); } } } public int SameRuneHole(int type) { foreach (int key in runeHoleData.Keys) { RuneConfig _runeCfg = RuneConfig.Get(runeHoleData[key].id); for (int i = 0; i < _runeCfg.AttrType.Length; i++) { if (type == _runeCfg.AttrType[i]) { return key; } } } return -1; } public int GetOpenTowerCnt(bool includeSpecial = false) { int Cnt = 0; for (int i = 0; i < RUNE_HOLE_COUNT; i++) { if (IsSpeicalHole(i) && !includeSpecial) { continue; } if (IsRuneHoleOpen(i)) { Cnt++; } else { break; } } return Cnt; } public void ClearRuneData() { runePackData.Clear(); runeHoleData.Clear(); } public event Action JumpToComposeEvent; public void JumpToRuneCompose() { @@ -1165,85 +779,6 @@ } } } #region 符印分解选择品质记录 bool specialItemColorMark = false; public bool IsQualityMark(int itemColor) { if (itemColor == 4) { return specialItemColorMark; } var playerId = PlayerDatas.Instance.baseData.PlayerID; return LocalSave.GetBool(StringUtility.Contact("RuneBreakSelect_", playerId, "_", itemColor), itemColor == 1); } public void SetQualityMark(int itemColor, bool mark) { if (itemColor == 4) { specialItemColorMark = mark; return; } var playerId = PlayerDatas.Instance.baseData.PlayerID; LocalSave.SetBool(StringUtility.Contact("RuneBreakSelect_", playerId, "_", itemColor), mark); } #endregion #region 符印合成 public int GetMaxLevelRuneCnt(int _id, out RuneData _runeData) { int _Cnt = 0; _runeData = null; foreach (var _rune in runePackData.Values) { if (_rune.id == _id) { if (_runeData == null || _rune.lv >= _runeData.lv) { _runeData = _rune; } _Cnt++; } } foreach (var _rune in runeHoleData.Values) { if (_rune.id == _id) { if (_runeData == null || _rune.lv >= _runeData.lv) { _runeData = _rune; } _Cnt++; break; } } return _Cnt; } #endregion #region 符印分解 public List<RuneData> runeBreakList { get; set; } private Dictionary<int, bool> m_RuneBreakEnableDict = new Dictionary<int, bool>(); public Dictionary<int, bool> runeBreakEnableDict { get { return m_RuneBreakEnableDict; } } private List<Transform> m_RuneBreakRects = new List<Transform>(); public List<Transform> runeBreakRects { get { return m_RuneBreakRects; } } public event Action OnRefreshBreakRune; public void UpdateBreakRune() { if (OnRefreshBreakRune != null) { OnRefreshBreakRune(); } } #endregion } public struct SpecialRuneHoleCondition System/Rune/RuneNewModel.cs
@@ -10,12 +10,15 @@ Dictionary<int, RuneItem> m_RuneHoleItems = new Dictionary<int, RuneItem>(); Dictionary<int, PropertyCompute> m_PropertyComputeDict = new Dictionary<int, PropertyCompute>(); Dictionary<int, RuneHoleCondition> m_RuneHoleConditions = new Dictionary<int, RuneHoleCondition>(); Dictionary<int, RuneHoleRedpoint> m_RuneHoleRedpoints = new Dictionary<int, RuneHoleRedpoint>(); Dictionary<int, List<int>> m_RunePropertys = new Dictionary<int, List<int>>(); Dictionary<int, float> levelUpFormulaCostDict = new Dictionary<int, float>(); Dictionary<int, float> levelUpQualityCostModulus; Dictionary<int, int> m_QualityMaxLevels; Dictionary<int, int> m_MultiPropertyRuneInlayDict; List<int> m_MultiPropertyRunes = new List<int>(); int[] specialHoleRemindLevels = null; string levelUpCostFormula = string.Empty; float levelUpMultiPropertyModulus = 1f; @@ -27,6 +30,9 @@ public int passRuneTowerFloor { get; private set; } public bool unlockingSpecialHole { get; set; } public readonly Redpoint redpoint = new Redpoint(108, RUNE_REDPOINT_BASE); public readonly Redpoint specialHoleRedpoint = new Redpoint(RUNE_REDPOINT_BASE, redpointIndex++); int m_SelectHole = 0; public int selectHole @@ -48,10 +54,14 @@ public const int RUNE_TYPE = 30; public const int RUNE_CREAMTYPE = 31; public const int RUNE_HOLE_COUNT = 9; public const int RUNE_REDPOINT_BASE = 10801; public static int redpointIndex = 1080100; public event Action onRuneHoleRefresh; public event Action<int> onOpenNewHole; public event Action onSelectHoleRefresh; public event Action onRuneTowerRefresh; static StringBuilder sb = new StringBuilder(); @@ -61,6 +71,8 @@ { ParseConfig(); virtualPackModel.virtualPackRefresh += VirtualPackRefresh; FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshEvent; } public void OnBeforePlayerDataInitialize() @@ -72,11 +84,15 @@ public void OnPlayerLoginOk() { serverInited = true; RefreshRedpoint(); RefreshSpecialHoleRedpoint(); } public override void UnInit() { virtualPackModel.virtualPackRefresh -= VirtualPackRefresh; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshEvent; } void ParseConfig() @@ -123,11 +139,13 @@ levelUpCostFormula = levelUpConfig.Numerical1; levelUpQualityCostModulus = ConfigParse.GetDic<int, float>(levelUpConfig.Numerical2); levelUpMultiPropertyModulus = float.Parse(levelUpConfig.Numerical3); //runeEliteAdditonDic = ConfigParse.GetDic<int, float>(levelUpConfig.Numerical4); { var funcConfig = FuncConfigConfig.Get("RuneDoubleInlayCnt"); m_MultiPropertyRuneInlayDict = ConfigParse.GetDic<int, int>(funcConfig.Numerical1); funcConfig = FuncConfigConfig.Get("RuneSpecialRedLevel"); specialHoleRemindLevels = ConfigParse.GetMultipleStr<int>(funcConfig.Numerical1); } @@ -156,6 +174,11 @@ specialHole = 8; } for (int i = 0; i < RUNE_HOLE_COUNT; i++) { m_RuneHoleRedpoints.Add(i, new RuneHoleRedpoint(RUNE_REDPOINT_BASE)); } } public bool TryGetRuneHoleItem(int hole, out RuneItem runeItem) @@ -171,6 +194,42 @@ public bool TryGetRunePropertys(int id, out List<int> propertys) { return m_RunePropertys.TryGetValue(id, out propertys); } public int TryGetComposeRuneCount(int id, out RuneItem item) { var count = 0; item = null; List<int> items = null; if (virtualPackModel.TryGetItems(PackType.RunePack, out items)) { foreach (var packIndex in items) { RuneItem _item; if (virtualPackModel.TryGetItem(PackType.RunePack, packIndex, out _item) && _item.id == id) { if (item == null || _item.level >= item.level) { item = _item; } count++; } } } foreach (var _item in m_RuneHoleItems.Values) { if (_item.id == id) { if (item == null || _item.level >= item.level) { item = _item; } count++; break; } } return count; } public int GetPropertyValue(int id, int level, int type) @@ -268,6 +327,26 @@ return count; } public int GetRuneLevelBySplinters(int id, float essence) { var totalEssence = 0f; var config = ItemConfig.Get(id); var maxlevel = 0; if (m_QualityMaxLevels.ContainsKey(config.ItemColor)) { maxlevel = m_QualityMaxLevels[config.ItemColor]; } for (int i = 1; i < maxlevel; i++) { totalEssence += GetLevelUpRequireRuneEssence(id, i); if (totalEssence > essence) { return i; } } return maxlevel; } public bool IsRuneHoleOpen(int hole, uint state) { return MathUtility.GetBitValue(state, (ushort)hole); @@ -327,6 +406,121 @@ if (TryGetRuneHoleItem(hole, out item)) { return item.IsExistSameProperty(id); } return false; } public bool IsBetterRuneWithHole(int id, int hole) { var itemConfig = ItemConfig.Get(id); if (itemConfig == null || itemConfig.Type == RUNE_CREAMTYPE) { return false; } RuneItem item = null; if (!TryGetRuneHoleItem(hole, out item)) { return false; } if (!item.IsExistSameProperty(id)) { return false; } var itemHoleConfig = ItemConfig.Get(item.id); return itemConfig.ItemColor > itemHoleConfig.ItemColor; } public bool SatisfyLevelUpHole(int hole) { if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Rune)) { return false; } RuneItem item; if (TryGetRuneHoleItem(hole, out item)) { var essence = PlayerDatas.Instance.extersion.runeEssence; if (!IsRuneMaxLevel(item.id, item.level) && essence >= GetLevelUpRequireRuneEssence(item.id, item.level)) { return true; } } return false; } public bool SatisfyInlayHole(int hole) { if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Rune)) { return false; } if (!IsRuneHoleOpen(hole, holeState) || m_RuneHoleItems.ContainsKey(hole)) { return false; } virtualPackModel.GetItemIndexs(PackType.RunePack, ref cacheItemIndexs); foreach (var index in cacheItemIndexs) { RuneItem item; if (virtualPackModel.TryGetItem(PackType.RunePack, index, out item)) { if (item.itemType == RUNE_CREAMTYPE || IsSameWithOtherRuneHole(item.id, hole)) { continue; } if (IsMultiPropertyRune(item.id) && GetMultiPropertyInlayCount() <= GetMultiPropertyHoleCount()) { continue; } return true; } } return false; } public bool SatisfyInlayBetterHole(int hole) { if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Rune)) { return false; } if (!IsRuneHoleOpen(hole, holeState) || !m_RuneHoleItems.ContainsKey(hole)) { return false; } var runeHoleItem = m_RuneHoleItems[hole]; var isDoubleRuneHole = IsMultiPropertyRune(runeHoleItem.id); var multiPropertyHoleCount = GetMultiPropertyHoleCount(); var multiPropertyLimitCount = GetMultiPropertyInlayCount(); virtualPackModel.GetItemIndexs(PackType.RunePack, ref cacheItemIndexs); foreach (var index in cacheItemIndexs) { RuneItem item; if (virtualPackModel.TryGetItem(PackType.RunePack, index, out item)) { if (!IsBetterRuneWithHole(item.id, hole)) { continue; } var isDoubleRune = IsMultiPropertyRune(item.id); if (!isDoubleRuneHole && isDoubleRune) { if (multiPropertyHoleCount >= multiPropertyLimitCount) { continue; } } return true; } } return false; } @@ -456,6 +650,18 @@ { onRuneHoleRefresh(); } RefreshRedpoint(); RefreshSpecialHoleRedpoint(); } public void ReceivePackage(HA3BA_tagMCTrialTowerInfo package) { passRuneTowerFloor = (int)package.PassLV; if (onRuneTowerRefresh != null) { onRuneTowerRefresh(); } } private void VirtualPackRefresh(PackType packType) @@ -466,9 +672,151 @@ } } private void PlayerDataRefreshEvent(PlayerDataType dataType) { if (dataType == PlayerDataType.RuneSplinters) { RefreshRedpoint(); } if (dataType == PlayerDataType.LV) { RefreshSpecialHoleRedpoint(); } } private void OnFuncStateChangeEvent(int id) { if (id == (int)FuncOpenEnum.Rune) { RefreshRedpoint(); } } /// <summary> ///1.有可操作的时候仅按优先级显示1个红点 ///2.优先级:可镶嵌>可替换>可升级 ///3.同时有可镶嵌,可替换,可升级的符印孔时,默认只显示1个红点在镶嵌孔上 ///4.镶嵌:同时存在2个或以上的孔可镶嵌时,优先显示在孔位低的孔上,当孔上镶嵌了符印后,红点在下一个可镶嵌孔位置上显示,直至没有新符印可镶嵌,才继续判断更好品质符印的替换逻辑 ///5.替换:同上,有可替换更好品质的符印时,显示红点,同时多个时,从孔位低的开始显示,直到没有可替换的孔,再判断符印可升级的逻辑 ///6.升级:仅一个符印满足升级条件时,红点在该孔上;同时存在多个符印孔可升级时,红点显示在符印等级最低的孔上;符印等级相同时,红点显示在消耗少的孔上;升级需要的精华相同时,按孔位低的优先显示红点 ///7.右下角操作按钮:可镶嵌时镶嵌按钮红点显示;替换和升级同时满足时,仅替换按钮显示红点;无镶嵌和替换时,升级按钮红点显示 ///8.选中有红点的符印孔时,符印孔上的红点隐藏不显示 /// </summary> List<int> cacheItemIndexs = new List<int>(); List<int> levelUpSorts = new List<int>(); void RefreshRedpoint() { var levelUpHole = 100; var replaceHole = 100; if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Rune)) { replaceHole = ExistEmptyHoleSatisfyInlay(); if (replaceHole != 100) { RefreshRedpoint(replaceHole, levelUpHole); return; } for (int i = 0; i < RUNE_HOLE_COUNT; i++) { if (SatisfyInlayBetterHole(i)) { replaceHole = i; break; } } if (replaceHole != 100) { RefreshRedpoint(replaceHole, levelUpHole); return; } for (int i = 0; i < RUNE_HOLE_COUNT; i++) { if (SatisfyLevelUpHole(i)) { levelUpSorts.Add(i); } } if (levelUpSorts.Count > 0) { levelUpSorts.Sort(CompareLevelUp); levelUpHole = levelUpSorts[0]; } } RefreshRedpoint(replaceHole, levelUpHole); } void RefreshRedpoint(int replaceHole, int levelUpHole) { for (int i = 0; i < RUNE_HOLE_COUNT; i++) { m_RuneHoleRedpoints[i].SetRedpoint(levelUpHole == i, replaceHole == i); } } int ExistEmptyHoleSatisfyInlay() { for (int i = 0; i < RUNE_HOLE_COUNT; i++) { if (SatisfyInlayHole(i)) { return i; } } return 100; } int CompareLevelUp(int lhs, int rhs) { RuneItem lhsItem; RuneItem rhsItem; if (TryGetRuneHoleItem(lhs, out lhsItem) && TryGetRuneHoleItem(rhs, out rhsItem)) { if (lhsItem.level != rhsItem.level) { return lhsItem.level.CompareTo(rhsItem.level); } var _cost_x = GetLevelUpRequireRuneEssence(lhsItem.id, lhsItem.level); var _cost_y = GetLevelUpRequireRuneEssence(rhsItem.id, rhsItem.level); if (_cost_x != _cost_y) { return _cost_x.CompareTo(_cost_y); } } return lhs.CompareTo(rhs); } public void SetDayRemind() { if (specialHoleRedpoint.state == RedPointState.Simple) { DayRemind.Instance.SetDayRemind(DayRemind.RUNE_SPECIAL_HOLE, true); RefreshSpecialHoleRedpoint(); } } private void RefreshSpecialHoleRedpoint() { var requireRemind = false; if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Rune)) { if (!DayRemind.Instance.GetDayRemind(DayRemind.RUNE_SPECIAL_HOLE)) { RuneHoleCondition condition; if (IsRuneHoleOpen(specialHole, holeState) && TryGetRuneHoleCondition(specialHole, out condition)) { if (PlayerDatas.Instance.baseData.LV >= condition.playerLevel && PlayerDatas.Instance.baseData.LV >= specialHoleRemindLevels[0] && PlayerDatas.Instance.baseData.LV < specialHoleRemindLevels[1]) { requireRemind = true; } } } } specialHoleRedpoint.state = requireRemind ? RedPointState.Simple : RedPointState.None; } public class PropertyCompute @@ -549,6 +897,26 @@ } } } public class RuneHoleRedpoint { public readonly Redpoint redpoint; public readonly Redpoint levelUpRedpoint; public readonly Redpoint replaceRedpoint; public RuneHoleRedpoint(int baseId) { redpoint = new Redpoint(baseId, RuneNewModel.redpointIndex++); levelUpRedpoint = new Redpoint(redpoint.id, RuneNewModel.redpointIndex++); replaceRedpoint = new Redpoint(redpoint.id, RuneNewModel.redpointIndex++); } public void SetRedpoint(bool levelUp, bool replace) { levelUpRedpoint.state = levelUp ? RedPointState.Simple : RedPointState.None; replaceRedpoint.state = replace ? RedPointState.Simple : RedPointState.None; } } } public class RuneItem : VirtualPackItem System/Rune/RunePreviewCell.cs
@@ -28,7 +28,7 @@ [SerializeField] Button m_RuneBtn; [SerializeField] RectTransform m_Rune; RuneModel model { get { return ModelCenter.Instance.GetModel<RuneModel>(); } } RuneNewModel model { get { return ModelCenter.Instance.GetModel<RuneNewModel>(); } } public void Display(int _id) { @@ -62,7 +62,7 @@ _runeTowerCfg = RuneTowerFloorConfig.Get(_runeCfg.TowerID); _towerCfg = RuneTowerConfig.Get(_runeTowerCfg.TowerId); } _itemPathModel.SetRuneModel(itemCfg.ID, 1, model.GetRuneAttrStr(itemCfg.ID, 1), _itemPathModel.SetRuneModel(itemCfg.ID, 1, model.GetRunePropertyDescription(itemCfg.ID, 1), _runeCfg.TowerID == 0 ? Language.Get("L1062") : Language.Get("RuneItemOrigin", _towerCfg.TowerName, _runeTowerCfg.FloorName)); } } System/Rune/RuneResolveCell.cs
New file @@ -0,0 +1,122 @@ using Snxxz.UI; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System; namespace Snxxz.UI { public class RuneResolveCell : CellView { [SerializeField] RuneResolveItem[] m_ResolveItems; RuneResolveModel runeResolveModel { get { return ModelCenter.Instance.GetModel<RuneResolveModel>(); } } List<int> itemIndexs { get { return runeResolveModel.itemIndexs; } } public void Display(int line) { for (int i = 0; i < m_ResolveItems.Length; i++) { var index = line * m_ResolveItems.Length + i; m_ResolveItems[i].SetActive(index < itemIndexs.Count); if (index < itemIndexs.Count) { m_ResolveItems[i].Display(line, index); } } } } [Serializable] public class RuneResolveItem { [SerializeField] Transform m_Container; [SerializeField] Image m_Icon; [SerializeField] Text m_RuneName; [SerializeField] Text m_Property; [SerializeField] Transform m_ContainerSelect; [SerializeField] Button m_Select; RuneNewModel model { get { return ModelCenter.Instance.GetModel<RuneNewModel>(); } } RuneResolveModel runeResolveModel { get { return ModelCenter.Instance.GetModel<RuneResolveModel>(); } } VirtualPackModel virtualPackModel { get { return ModelCenter.Instance.GetModel<VirtualPackModel>(); } } List<Transform> resolveObjs { get { return runeResolveModel.resolveObjs; } } List<int> itemIndexs { get { return runeResolveModel.itemIndexs; } } Dictionary<int, bool> resolveSigns { get { return runeResolveModel.resolveSigns; } } public void Display(int line, int index) { if (index < itemIndexs.Count) { var packIndex = itemIndexs[index]; RuneItem item; if (!virtualPackModel.TryGetItem(PackType.RunePack, packIndex, out item)) { return; } m_Select.SetListener(() => { OnSelect(line, index); }); var config = ItemConfig.Get(item.id); if (item.itemType == RuneModel.RUNE_TYPE) { m_RuneName.text = StringUtility.Contact(config.ItemName, " lv.", item.level); m_Property.text = model.GetRunePropertyDescription(item.id, item.level); } else if (item.itemType == RuneModel.RUNE_CREAMTYPE) { m_RuneName.text = config.ItemName; m_Property.text = Language.Get("L1079", config.EffectValueA1); } m_RuneName.color = UIHelper.GetUIColor(config.ItemColor, true); m_Icon.SetSprite(config.IconKey); bool selected = resolveSigns.ContainsKey(index) && resolveSigns[index]; m_ContainerSelect.gameObject.SetActive(selected); if (selected) { if (!resolveObjs.Contains(m_Container)) { resolveObjs.Add(m_Container); } } else { if (resolveObjs.Contains(m_Container)) { resolveObjs.Remove(m_Container); } } } } private void OnSelect(int line, int index) { if (resolveSigns.ContainsKey(index)) { resolveSigns[index] = !resolveSigns[index]; } runeResolveModel.RefreshResolveSelect(line); } public void SetActive(bool active) { m_Container.gameObject.SetActive(active); if (!active && resolveObjs.Contains(m_Container)) { resolveObjs.Remove(m_Container); } } } } System/Rune/RuneResolveCell.cs.meta
File was renamed from System/Rune/RuneBreakCell.cs.meta @@ -1,12 +1,12 @@ fileFormatVersion: 2 guid: 03abe2a6e856101419eddf66c4ac3e5f timeCreated: 1515063903 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: fileFormatVersion: 2 guid: 03abe2a6e856101419eddf66c4ac3e5f timeCreated: 1515063903 licenseType: Free MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/Rune/RuneResolveModel.cs
@@ -8,12 +8,22 @@ { Dictionary<int, float> m_RuneBaseResolveSplinters; public List<ushort> resolveItems = new List<ushort>(); public List<Transform> resolveObjs = new List<Transform>(); public List<int> itemIndexs = new List<int>(); public Dictionary<int, bool> resolveSigns = new Dictionary<int, bool>(); bool specialItemColorSign = false; public readonly Redpoint redpoint = new Redpoint(108, 10802); public event Action<int> onResolveSelect; RuneNewModel runeModel { get { return ModelCenter.Instance.GetModel<RuneNewModel>(); } } public override void Init() { ParseConfig(); StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish; } @@ -113,6 +123,14 @@ var playerId = PlayerDatas.Instance.baseData.PlayerID; LocalSave.SetBool(StringUtility.Contact("RuneBreakSelect_", playerId, "_", itemColor), mark); } public void RefreshResolveSelect(int line) { if (onResolveSelect != null) { onResolveSelect(line); } } } } System/Rune/RuneResolveWin.cs
@@ -25,10 +25,10 @@ [SerializeField] RectTransform m_ContainerRuneSoul; [SerializeField] Text m_RuneSoulAdd; List<ushort> resolveItems = new List<ushort>(); List<Transform> resolveObjs = new List<Transform>(); List<int> itemIndexs = new List<int>(); Dictionary<int, bool> resolveSigns = new Dictionary<int, bool>(); List<ushort> resolveItems { get { return runeResolveModel.resolveItems; } } List<Transform> resolveObjs { get { return runeResolveModel.resolveObjs; } } List<int> itemIndexs { get { return runeResolveModel.itemIndexs; } } Dictionary<int, bool> resolveSigns { get { return runeResolveModel.resolveSigns; } } bool doResolveItem = false; @@ -57,12 +57,15 @@ } m_JumpBtn0.onClick.AddListener(OnJumpRuneTower); m_JumpBtn1.onClick.AddListener(OnJumpRuneTower); m_Controller.OnRefreshCell += OnRefreshCell; } protected override void OnPreOpen() { virtualPackModel.virtualPackRefresh += VirtualPackRefresh; PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshInfoEvent; runeResolveModel.onResolveSelect += OnResolveSelect; doResolveItem = false; @@ -81,6 +84,7 @@ doResolveItem = false; virtualPackModel.virtualPackRefresh -= VirtualPackRefresh; PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshInfoEvent; runeResolveModel.onResolveSelect -= OnResolveSelect; StopAllCoroutines(); } @@ -104,7 +108,8 @@ resolveItems.Clear(); foreach (var key in resolveSigns.Keys) { if (key < itemIndexs.Count) if (resolveSigns[key] && key < itemIndexs.Count) { var index = itemIndexs[key]; RuneItem item; @@ -178,6 +183,7 @@ { if (resolveObjs[i] != null) { resolveObjs[i].gameObject.SetActive(false); var _uieffect = EffectMgr.Instance.PlayUIEffect(1007, 2500, resolveObjs[i].parent, false); _time = _uieffect != null ? _uieffect.duration : 0.0f; _uieffect.target.transform.localPosition = resolveObjs[i].localPosition; @@ -236,7 +242,7 @@ { m_Controller.Refresh(); virtualPackModel.GetItemIndexs(PackType.RunePack, ref itemIndexs); virtualPackModel.GetItemIndexs(PackType.RunePack, ref runeResolveModel.itemIndexs); itemIndexs.Sort(Compare); int _line = Mathf.CeilToInt((float)itemIndexs.Count / 4); for (int i = 0; i < _line; i++) @@ -285,6 +291,12 @@ m_RuneSoulAdd.text = Language.Get("RuneSoul", UIHelper.ReplaceLargeNum((int)_soulCnt)); } private void OnRefreshCell(ScrollerDataType type, CellView cell) { var resolveCell = cell as RuneResolveCell; resolveCell.Display(cell.index); } private void OnJumpRuneTower() { WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.RuneTower); @@ -299,6 +311,12 @@ } } private void OnResolveSelect(int line) { m_Controller.RefreshSingleCellView(line); RefreshResolveGetItems(); } void HandleAchievement() { if (AchievementGoto.achievementType == AchievementGoto.RuneResolve) System/RuneTower/RunePreviewBehaviour.cs
@@ -48,8 +48,8 @@ return; } var runeModel = ModelCenter.Instance.GetModel<RuneModel>(); var propertyValue = runeModel.GetRuneAttrStr(runeId, 1); var runeModel = ModelCenter.Instance.GetModel<RuneNewModel>(); var propertyValue = runeModel.GetRunePropertyDescription(runeId, 1); var model = ModelCenter.Instance.GetModel<GetItemPathModel>(); model.SetRuneModel(runeId, 1, propertyValue, Language.Get("RuneItemOrigin", runeTowerConfig.TowerName, towerFloorConfig.FloorName));