Core/GameEngine/Model/Config/AttrFruitConfig.cs
@@ -1,222 +1,225 @@ //-------------------------------------------------------- // [Author]: Fish // [ Date ]: Thursday, February 14, 2019 //-------------------------------------------------------- using System.Collections.Generic; using System.IO; using System.Threading; using System; using UnityEngine; [XLua.LuaCallCSharp] public partial class AttrFruitConfig { //-------------------------------------------------------- // [Author]: Fish // [ Date ]: Friday, April 19, 2019 //-------------------------------------------------------- using System.Collections.Generic; using System.IO; using System.Threading; using System; using UnityEngine; [XLua.LuaCallCSharp] public partial class AttrFruitConfig { public readonly int ID; public readonly int FuncID; public readonly int MaxUseCnt; public readonly Int2[] MaxUseCnt; public readonly string AddItemMaxCnt; public readonly int RecycleExp; public readonly int FightPowerEx; public readonly int Sort; public readonly int[] RecipeLv; public AttrFruitConfig() { } public AttrFruitConfig(string input) { try { var tables = input.Split('\t'); public readonly int drugType; public readonly int Sort; public AttrFruitConfig() { } public AttrFruitConfig(string input) { try { var tables = input.Split('\t'); int.TryParse(tables[0],out ID); int.TryParse(tables[1],out FuncID); int.TryParse(tables[2],out MaxUseCnt); int.TryParse(tables[3],out RecycleExp); int.TryParse(tables[4],out FightPowerEx); int.TryParse(tables[5],out Sort); string[] RecipeLvStringArray = tables[6].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); RecipeLv = new int[RecipeLvStringArray.Length]; for (int i=0;i<RecipeLvStringArray.Length;i++) string[] MaxUseCntStringArray = tables[2].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); MaxUseCnt = new Int2[MaxUseCntStringArray.Length]; for (int i=0;i<MaxUseCntStringArray.Length;i++) { int.TryParse(RecipeLvStringArray[i],out RecipeLv[i]); Int2.TryParse(MaxUseCntStringArray[i],out MaxUseCnt[i]); } } catch (Exception ex) { DebugEx.Log(ex); } } static Dictionary<string, AttrFruitConfig> configs = new Dictionary<string, AttrFruitConfig>(); public static AttrFruitConfig Get(string id) { if (!inited) { Debug.Log("AttrFruitConfig 还未完成初始化。"); return null; } if (configs.ContainsKey(id)) { return configs[id]; } AddItemMaxCnt = tables[3]; AttrFruitConfig config = null; if (rawDatas.ContainsKey(id)) { config = configs[id] = new AttrFruitConfig(rawDatas[id]); rawDatas.Remove(id); } int.TryParse(tables[4],out RecycleExp); return config; } int.TryParse(tables[5],out FightPowerEx); public static AttrFruitConfig Get(int id) { return Get(id.ToString()); } int.TryParse(tables[6],out drugType); public static List<string> GetKeys() { var keys = new List<string>(); keys.AddRange(configs.Keys); keys.AddRange(rawDatas.Keys); return keys; } public static List<AttrFruitConfig> GetValues() { var values = new List<AttrFruitConfig>(); values.AddRange(configs.Values); var keys = new List<string>(rawDatas.Keys); foreach (var key in keys) { values.Add(Get(key)); } return values; } public static bool Has(string id) { return configs.ContainsKey(id) || rawDatas.ContainsKey(id); } public static bool Has(int id) { return Has(id.ToString()); } public static bool inited { get; private set; } protected static Dictionary<string, string> rawDatas = new Dictionary<string, string>(); public static void Init(bool sync=false) { inited = false; var path = string.Empty; if (AssetSource.refdataFromEditor) { path = ResourcesPath.CONFIG_FODLER +"/AttrFruit.txt"; } else { path = AssetVersionUtility.GetAssetFilePath("config/AttrFruit.txt"); } var tempConfig = new AttrFruitConfig(); var preParse = tempConfig is IConfigPostProcess; if (sync) { var lines = File.ReadAllLines(path); if (!preParse) { rawDatas = new Dictionary<string, string>(lines.Length - 3); } for (int i = 3; i < lines.Length; i++) { try { var line = lines[i]; var index = line.IndexOf("\t"); if (index == -1) { continue; } var id = line.Substring(0, index); if (preParse) { var config = new AttrFruitConfig(line); configs[id] = config; (config as IConfigPostProcess).OnConfigParseCompleted(); } else { rawDatas[id] = line; } } catch (System.Exception ex) { Debug.LogError(ex); } } inited = true; } else { ThreadPool.QueueUserWorkItem((object _object) => { var lines = File.ReadAllLines(path); if (!preParse) { rawDatas = new Dictionary<string, string>(lines.Length - 3); } for (int i = 3; i < lines.Length; i++) { try { var line = lines[i]; var index = line.IndexOf("\t"); if (index == -1) { continue; } var id = line.Substring(0, index); if (preParse) { var config = new AttrFruitConfig(line); configs[id] = config; (config as IConfigPostProcess).OnConfigParseCompleted(); } else { rawDatas[id] = line; } } catch (System.Exception ex) { Debug.LogError(ex); } } inited = true; }); } } } int.TryParse(tables[7],out Sort); } catch (Exception ex) { DebugEx.Log(ex); } } static Dictionary<string, AttrFruitConfig> configs = new Dictionary<string, AttrFruitConfig>(); public static AttrFruitConfig Get(string id) { if (!inited) { Debug.Log("AttrFruitConfig 还未完成初始化。"); return null; } if (configs.ContainsKey(id)) { return configs[id]; } AttrFruitConfig config = null; if (rawDatas.ContainsKey(id)) { config = configs[id] = new AttrFruitConfig(rawDatas[id]); rawDatas.Remove(id); } return config; } public static AttrFruitConfig Get(int id) { return Get(id.ToString()); } public static List<string> GetKeys() { var keys = new List<string>(); keys.AddRange(configs.Keys); keys.AddRange(rawDatas.Keys); return keys; } public static List<AttrFruitConfig> GetValues() { var values = new List<AttrFruitConfig>(); values.AddRange(configs.Values); var keys = new List<string>(rawDatas.Keys); foreach (var key in keys) { values.Add(Get(key)); } return values; } public static bool Has(string id) { return configs.ContainsKey(id) || rawDatas.ContainsKey(id); } public static bool Has(int id) { return Has(id.ToString()); } public static bool inited { get; private set; } protected static Dictionary<string, string> rawDatas = new Dictionary<string, string>(); public static void Init(bool sync=false) { inited = false; var path = string.Empty; if (AssetSource.refdataFromEditor) { path = ResourcesPath.CONFIG_FODLER +"/AttrFruit.txt"; } else { path = AssetVersionUtility.GetAssetFilePath("config/AttrFruit.txt"); } var tempConfig = new AttrFruitConfig(); var preParse = tempConfig is IConfigPostProcess; if (sync) { var lines = File.ReadAllLines(path); if (!preParse) { rawDatas = new Dictionary<string, string>(lines.Length - 3); } for (int i = 3; i < lines.Length; i++) { try { var line = lines[i]; var index = line.IndexOf("\t"); if (index == -1) { continue; } var id = line.Substring(0, index); if (preParse) { var config = new AttrFruitConfig(line); configs[id] = config; (config as IConfigPostProcess).OnConfigParseCompleted(); } else { rawDatas[id] = line; } } catch (System.Exception ex) { Debug.LogError(ex); } } inited = true; } else { ThreadPool.QueueUserWorkItem((object _object) => { var lines = File.ReadAllLines(path); if (!preParse) { rawDatas = new Dictionary<string, string>(lines.Length - 3); } for (int i = 3; i < lines.Length; i++) { try { var line = lines[i]; var index = line.IndexOf("\t"); if (index == -1) { continue; } var id = line.Substring(0, index); if (preParse) { var config = new AttrFruitConfig(line); configs[id] = config; (config as IConfigPostProcess).OnConfigParseCompleted(); } else { rawDatas[id] = line; } } catch (System.Exception ex) { Debug.LogError(ex); } } inited = true; }); } } } Core/GameEngine/Model/Config/AttrFruitConfig.cs.meta
@@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 95c7a3606abde144bbf29969de2b9bd4 timeCreated: 1550121347 timeCreated: 1555640176 licenseType: Pro MonoImporter: serializedVersion: 2 Core/GameEngine/Model/TelPartialConfig/PartialAttrFruitConfig.cs
New file @@ -0,0 +1,13 @@ using System; using System.Collections.Generic; public partial class AttrFruitConfig { public int basicUseLimit { get { return MaxUseCnt.Length > 0 && MaxUseCnt[0].x == 0 ? MaxUseCnt[0].y : 0; } } } Core/GameEngine/Model/TelPartialConfig/PartialAttrFruitConfig.cs.meta
File was renamed from Lua/Gen/AttrFruitConfigWrap.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 3211f8f2fa96a53488c0cb28b6ee2299 timeCreated: 1550122887 guid: b44b05aeb0d8c824d9abd838a17c0579 timeCreated: 1555591301 licenseType: Pro MonoImporter: serializedVersion: 2 Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA339_tagMCAttrFruitEatCntList.cs
@@ -30,6 +30,8 @@ get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PackModel>()); } } AlchemyModel model { get { return ModelCenter.Instance.GetModel<AlchemyModel>(); } } public override void Done(GameNetPackBasic vNetPack) { base.Done(vNetPack); @@ -41,6 +43,7 @@ petmodel.PetA339(vNetData); horsemodel.MountHA339(vNetData); playerPack.UpdateItemSumUseCnt(vNetData); model.ReceivePackage(vNetData); } } Core/NetworkPackage/DTCFile/ServerPack/HAD_SaleActivity.meta
File was deleted Core/NetworkPackage/DTCFile/ServerPack/HAE_Truck.meta
File was deleted Core/NetworkPackage/DTCFile/ServerPack/HAF_Merge.meta
File was deleted Core/NetworkPackage/DTCFile/ServerPack/HB0_Event.meta
File was deleted Core/NetworkPackage/ServerPack/HA3_Function/HA339_tagMCAttrFruitEatCntList.cs
@@ -17,12 +17,14 @@ for (int i = 0; i < count; i ++) { EatCntList[i] = new tagMCAttrFruitEatCnt(); TransBytes (out EatCntList[i].ItemID, vBytes, NetDataType.DWORD); TransBytes (out EatCntList[i].EatCnt, vBytes, NetDataType.WORD); TransBytes (out EatCntList[i].EatCnt, vBytes, NetDataType.WORD); TransBytes (out EatCntList[i].AddItemCnt, vBytes, NetDataType.DWORD); } } public class tagMCAttrFruitEatCnt { public uint ItemID; //果实物品ID public ushort EatCnt; //已使用个数 public ushort EatCnt; //已使用个数 public uint AddItemCnt; //增幅丹使用个数 } } Core/NetworkPackage/ServerPack/HAD_SaleActivity.meta
File was deleted Core/NetworkPackage/ServerPack/HAE_Truck.meta
File was deleted Core/NetworkPackage/ServerPack/HAF_Merge.meta
File was deleted Core/NetworkPackage/ServerPack/HB0_Event.meta
File was deleted Lua/Gen/AttrFruitConfigWrap.cs
File was deleted Lua/Gen/XLuaGenAutoRegister.cs
@@ -70,9 +70,6 @@ translator.DelayWrapLoader(typeof(AreaCameraConfig), AreaCameraConfigWrap.__Register); translator.DelayWrapLoader(typeof(AttrFruitConfig), AttrFruitConfigWrap.__Register); translator.DelayWrapLoader(typeof(AuctionConfig), AuctionConfigWrap.__Register); System/Alchemy/AlchemyBaseWin.cs
@@ -16,6 +16,7 @@ [SerializeField] FunctionButtonGroup m_FuncGroup; [SerializeField] FunctionButton m_AlchemyNormal; [SerializeField] FunctionButton m_AlchemyFairy; [SerializeField] FunctionButton m_AlchemyDrug; [SerializeField] Button m_Close; [SerializeField] Button m_Left; [SerializeField] Button m_Right; @@ -29,6 +30,7 @@ { m_AlchemyNormal.AddListener(ShowAlchemyNormal); m_AlchemyFairy.AddListener(ShowAlchemyFairy); m_AlchemyDrug.AddListener(ShowAlchemyDrug); m_Left.AddListener(()=> { m_FuncGroup.TriggerLast(); @@ -82,6 +84,13 @@ functionOrder = m_AlchemyNormal.order; } private void ShowAlchemyDrug() { CloseSubWindows(); WindowCenter.Instance.Open<AlchemyUseDrugWin>(); functionOrder = m_AlchemyDrug.order; } private void CloseSubWindows() { var children = WindowConfig.Get().FindChildWindows("AlchemyBaseWin"); System/Alchemy/AlchemyDrugBriefBehaviour.cs
@@ -47,7 +47,7 @@ if (index < m_Propertys.Length) { m_Propertys[index].gameObject.SetActive(true); m_Propertys[index].Display(property, s_Propertys[property]); m_Propertys[index].DisplayUpper(property, s_Propertys[property]); index++; } } System/Alchemy/AlchemyModel.cs
@@ -10,6 +10,9 @@ Dictionary<int, AlchemyCount> m_AlchemyCounts = new Dictionary<int, AlchemyCount>(); Dictionary<int, int> m_AlchemyQualityLucks = new Dictionary<int, int>(); Dictionary<int, List<Item>> m_AlchemyMaterials = new Dictionary<int, List<Item>>(); Dictionary<int, AlchemyDrugUseLimit> m_AlchemyDrugUseLimits = new Dictionary<int, AlchemyDrugUseLimit>(); List<int> m_AlchemyDrugs = new List<int>(); List<int> m_AlchemyDrugQualitys = new List<int>(); int m_SelectQuality = 0; public int selectQuality @@ -56,6 +59,7 @@ public event Action selectQualityRefresh; public event Action selectAlchemyRefresh; public event Action alchemyStateRefresh; public event Action alchemyDrugUseRefresh; PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } } @@ -69,12 +73,20 @@ m_AlchemyTimes.Clear(); stoveLevel = 0; stoveExp = 0; foreach (var item in m_AlchemyDrugUseLimits.Values) { item.SetTimes(0, 0); } isServerPrepare = false; } public void OnPlayerLoginOk() { isServerPrepare = true; } public override void UnInit() { } void ParseConfig() @@ -139,6 +151,25 @@ } } } { var configs = AttrFruitConfig.GetValues(); foreach (var config in configs) { if (config.FuncID == 2) { m_AlchemyDrugs.Add(config.ID); var itemConfig = ItemConfig.Get(config.ID); if (!m_AlchemyDrugQualitys.Contains(itemConfig.LV)) { m_AlchemyDrugQualitys.Add(itemConfig.LV); } m_AlchemyDrugUseLimits.Add(config.ID, new AlchemyDrugUseLimit(config.ID)); } } m_AlchemyDrugQualitys.Sort(); } } public bool TryGetAlchemyStartTime(int alchemyId, out uint tick) @@ -165,6 +196,11 @@ public bool TryGetAlchemyMaterials(int alchemyId, out List<Item> items) { return m_AlchemyMaterials.TryGetValue(alchemyId, out items); } public bool TryGetAlchemyUseLimit(int id,out AlchemyDrugUseLimit drugUseLimit) { return m_AlchemyDrugUseLimits.TryGetValue(id, out drugUseLimit); } public float GetAlchemySuccRate(int alchemyId) @@ -206,6 +242,34 @@ return seconds > 0 ? 1 : 2; } return 0; } public ICollection<int> GetDrugQualitys() { return m_AlchemyDrugQualitys; } public ICollection<int> GetAlchemyDrugs() { return m_AlchemyDrugs; } public int GetAlchemyDrugState(int id)//0-可服用丹药 1-达到上限 2-没有丹药 3-没有提升空间 { AlchemyDrugUseLimit drugUseLimit; if (TryGetAlchemyUseLimit(id, out drugUseLimit)) { if (!drugUseLimit.IsReachLimit()) { var count = packModel.GetItemCountByID(PackType.Item, id); return count > 0 ? 0 : 2; } else { return drugUseLimit.CanUpgradeLimit() ? 1 : 3; } } return int.MaxValue; } public bool IsGraspRecipe(int alchemyId) @@ -264,14 +328,6 @@ if (package.ItemID != 0) { if (package.ItemCnt > 0)//炼丹成功 { } else//炼丹失败 { } if (isServerPrepare) { if (!NewBieCenter.Instance.inGuiding && WindowCenter.Instance.IsOpen<AlchemyBaseWin>()) @@ -292,8 +348,22 @@ } } public override void UnInit() public void ReceivePackage(HA339_tagMCAttrFruitEatCntList vNetData) { for (int i = 0; i < vNetData.count; i++) { var data = vNetData.EatCntList[i]; AlchemyDrugUseLimit drugUseLimit; if (TryGetAlchemyUseLimit((int)data.ItemID, out drugUseLimit)) { drugUseLimit.SetTimes(data.EatCnt, (int)data.AddItemCnt); } } if (alchemyDrugUseRefresh != null) { alchemyDrugUseRefresh(); } } } @@ -314,5 +384,92 @@ max = 1, }; } public class AlchemyDrugUseLimit { public readonly int id; public readonly Item addItem; public readonly int addLimitPerTimes; Dictionary<int, int> realmLimits = new Dictionary<int, int>(); public int addTimes { get; private set; } public int eatTimes { get; private set; } PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } } public AlchemyDrugUseLimit(int id) { this.id = id; var config = AttrFruitConfig.Get(id); foreach (var realmLimit in config.MaxUseCnt) { realmLimits.Add(realmLimit.x, realmLimit.y); } if (string.IsNullOrEmpty(config.AddItemMaxCnt)) { var array = LitJson.JsonMapper.ToObject<int[]>(config.AddItemMaxCnt); addItem = new Item() { id = array[0], count = array[1], }; addLimitPerTimes = array[2]; } } public void SetTimes(int eatTimes, int addTimes) { this.eatTimes = eatTimes; this.addTimes = addTimes; } public int GetUseLimit() { var times = 0; var realmLevel = PlayerDatas.Instance.baseData.realmLevel; foreach (var level in realmLimits.Keys) { if (realmLevel >= level) { times = realmLimits[level]; } } times += addTimes * addLimitPerTimes; return times; } public bool IsReachLimit() { var limit = GetUseLimit(); return eatTimes >= limit; } public bool CanUpgradeLimit() { if (addItem.id != 0) { return true; } if (GetNextUpgradeRealm() > 0) { return true; } return false; } public int GetNextUpgradeRealm() { var realmLevel = PlayerDatas.Instance.baseData.realmLevel; foreach (var level in realmLimits.Keys) { if (realmLevel < level) { return level; } } return 0; } } } System/Alchemy/AlchemySortBehaviour.cs
New file @@ -0,0 +1,165 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class AlchemySortBehaviour : MonoBehaviour { [SerializeField] AlchemySortType m_AlchemySortType; [SerializeField] Button m_Func; [SerializeField] Image m_Arrow; [SerializeField] Transform m_ContainerSort; [SerializeField] ScrollerController m_Controller; List<int> m_Sorts = new List<int>(); Dictionary<int, bool> m_SortEnables = new Dictionary<int, bool>(); bool m_OpenSort = false; bool openSort { get { return m_OpenSort; } set { if (m_OpenSort != value) { m_OpenSort = value; OnSortChange(); } } } public static event Action onSortRefresh; AlchemyModel model { get { return ModelCenter.Instance.GetModel<AlchemyModel>(); } } private void Awake() { m_Controller.OnRefreshCell += OnRefreshCell; m_Func.SetListener(() => { DisplaySorts(); }); } public void Display() { m_ContainerSort.gameObject.SetActive(false); m_OpenSort = false; if (m_Sorts.Count == 0) { switch (m_AlchemySortType) { case AlchemySortType.AlchemyType: m_Sorts.Add((int)AlchemyType.Normal); m_Sorts.Add((int)AlchemyType.Fairy); break; case AlchemySortType.Quality: var qualities = model.GetDrugQualitys(); m_Sorts.AddRange(qualities); break; } m_Sorts.RemoveAll((x) => { return x == 0; }); } SetSortEnable(0, true); DisplaySortState(); } void DisplaySortState() { m_Arrow.transform.localEulerAngles = new Vector3(0, 0, openSort ? 0 : 180); } void DisplaySorts() { m_ContainerSort.gameObject.SetActive(true); if (m_Controller.GetNumberOfCells(m_Controller.m_Scorller) == 0) { m_Controller.Refresh(); m_Controller.AddCell(ScrollerDataType.Header, 0); for (int i = 0; i < m_Sorts.Count; i++) { m_Controller.AddCell(ScrollerDataType.Header, m_Sorts[i]); } m_Controller.Restart(); } else { m_Controller.JumpIndex(0); m_Controller.m_Scorller.RefreshActiveCellViews(); } } public bool IsSortEnabled(int sort) { if (sort == 0) { var allEnabled = true; foreach (var _sort in m_Sorts) { if (!IsSortEnabled(_sort)) { allEnabled = false; break; } } return allEnabled; } return m_SortEnables.ContainsKey(sort) && m_SortEnables[sort]; } public void SetSortEnable(int sort, bool enabled, bool single = true) { if (sort == 0) { foreach (var _sort in m_Sorts) { SetSortEnable(_sort, enabled, false); } m_Controller.m_Scorller.RefreshActiveCellViews(); return; } m_SortEnables[sort] = enabled; if (single) { m_Controller.m_Scorller.RefreshActiveCellViews(); } } private void OnRefreshCell(ScrollerDataType type, CellView cell) { var sortCell = cell as AlchemySortCell; sortCell.Display(this, m_AlchemySortType, cell.index); } private void OnSortChange() { DisplaySortState(); if (!openSort) { if (onSortRefresh != null) { onSortRefresh(); } } } private void LateUpdate() { openSort = m_ContainerSort.gameObject.activeSelf; } public enum AlchemySortType { AlchemyType, Quality, } } } System/Alchemy/AlchemySortBehaviour.cs.metacopy from Lua/Gen/AttrFruitConfigWrap.cs.meta copy to System/Alchemy/AlchemySortBehaviour.cs.meta
File was copied from Lua/Gen/AttrFruitConfigWrap.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 3211f8f2fa96a53488c0cb28b6ee2299 timeCreated: 1550122887 guid: 8d0cf26a245665c4fa46d6d4d650ce64 timeCreated: 1555592475 licenseType: Pro MonoImporter: serializedVersion: 2 System/Alchemy/AlchemySortCell.cs
New file @@ -0,0 +1,54 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class AlchemySortCell : CellView { [SerializeField] Text m_ClassifyName; [SerializeField] Button m_Select; [SerializeField] Image m_Sign; public void Display(AlchemySortBehaviour behaviour, AlchemySortBehaviour.AlchemySortType sortType, int sort) { switch (sortType) { case AlchemySortBehaviour.AlchemySortType.AlchemyType: switch (sort) { case 0: m_ClassifyName.text = "全部丹药"; break; case 1: m_ClassifyName.text = "普通丹药"; break; case 2: m_ClassifyName.text = "仙丹"; break; } break; case AlchemySortBehaviour.AlchemySortType.Quality: if (sort == 0) { m_ClassifyName.text = "全部品级"; } else { m_ClassifyName.text = string.Format("{0}品", sort); } break; } m_Select.SetListener(() => { behaviour.SetSortEnable(sort, !behaviour.IsSortEnabled(sort)); }); m_Sign.gameObject.SetActive(behaviour.IsSortEnabled(sort)); } } } System/Alchemy/AlchemySortCell.cs.metacopy from Lua/Gen/AttrFruitConfigWrap.cs.meta copy to System/Alchemy/AlchemySortCell.cs.meta
File was copied from Lua/Gen/AttrFruitConfigWrap.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 3211f8f2fa96a53488c0cb28b6ee2299 timeCreated: 1550122887 guid: 2a3c15a23b90e344492c9007a9fff2d0 timeCreated: 1555639353 licenseType: Pro MonoImporter: serializedVersion: 2 System/Alchemy/AlchemyUseDrugCell.cs
New file @@ -0,0 +1,134 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class AlchemyUseDrugCell : CellView { [SerializeField] ItemCell m_Item; [SerializeField] Slider m_Slider; [SerializeField] Text m_UseCount; [SerializeField] PropertyBehaviour[] m_Propertys; [SerializeField] Button m_Func; [SerializeField] Text m_FuncLabel; static Dictionary<int, int> propertys = new Dictionary<int, int>(); AlchemyModel model { get { return ModelCenter.Instance.GetModel<AlchemyModel>(); } } PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } } public void Display(int itemId) { var count = packModel.GetItemCountByID(PackType.Item, itemId); var itemModel = new ItemCellModel(itemId, true, (ulong)count); m_Item.Init(itemModel); m_Item.button.SetListener(() => { var itemData = new ItemAttrData(itemId, true, (ulong)count); ModelCenter.Instance.GetModel<ItemTipsModel>().SetItemTipsModel(itemData); }); var eatTimes = 0; AlchemyDrugUseLimit drugUseLimit; if (model.TryGetAlchemyUseLimit(itemId, out drugUseLimit)) { var useLimit = drugUseLimit.GetUseLimit(); m_UseCount.text = StringUtility.Contact(drugUseLimit.eatTimes, "/", useLimit); m_Slider.value = Mathf.Clamp01((float)drugUseLimit.eatTimes / useLimit); eatTimes = drugUseLimit.eatTimes; } GetProperty(itemId, ref propertys); var index = 0; foreach (var key in propertys.Keys) { if (index < m_Propertys.Length) { m_Propertys[index].gameObject.SetActive(true); m_Propertys[index].DisplayUpper(key, propertys[key] * eatTimes); index++; } } for (int i = index; i < m_Propertys.Length; i++) { m_Propertys[i].gameObject.SetActive(false); } var state = model.GetAlchemyDrugState(itemId); m_Func.SetInteractable(m_FuncLabel, state == 0 || state == 1); switch (state) { case 0: case 2: m_FuncLabel.text = "服用丹药"; break; case 1: case 3: m_FuncLabel.text = "达到上限"; break; } m_Func.SetListener(() => { OnFunc(itemId); }); } private void OnFunc(int itemId) { var state = model.GetAlchemyDrugState(itemId); switch (state) { case 0: var list = packModel.GetItemsById(PackType.Item, itemId); if (list != null && list.Count > 0) { if (ItemOperateUtility.Instance.CheckItemUselimit(itemId)) { ItemOperateUtility.Instance.UseItem(list[0].guid); } } break; case 1: break; } } static void GetProperty(int itemId, ref Dictionary<int, int> dict) { dict.Clear(); var itemConfig = ItemConfig.Get(itemId); if (itemConfig == null) { return; } if (itemConfig.Effect1 != 0) { dict.Add(itemConfig.Effect1, itemConfig.EffectValueA1); } if (itemConfig.Effect2 != 0) { dict.Add(itemConfig.Effect2, itemConfig.EffectValueA2); } if (itemConfig.Effect3 != 0) { dict.Add(itemConfig.Effect3, itemConfig.EffectValueA3); } if (itemConfig.Effect4 != 0) { dict.Add(itemConfig.Effect4, itemConfig.EffectValueA4); } if (itemConfig.Effect5 != 0) { dict.Add(itemConfig.Effect5, itemConfig.EffectValueA5); } } } } System/Alchemy/AlchemyUseDrugCell.cs.metacopy from Lua/Gen/AttrFruitConfigWrap.cs.meta copy to System/Alchemy/AlchemyUseDrugCell.cs.meta
File was copied from Lua/Gen/AttrFruitConfigWrap.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 3211f8f2fa96a53488c0cb28b6ee2299 timeCreated: 1550122887 guid: 210ff610f75a03f44ab2fb9a3723fa59 timeCreated: 1555645883 licenseType: Pro MonoImporter: serializedVersion: 2 System/Alchemy/AlchemyUseDrugWin.cs
New file @@ -0,0 +1,132 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, April 18, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class AlchemyUseDrugWin : Window { [SerializeField] ScrollerController m_Controller; [SerializeField] AlchemySortBehaviour m_AlchemyTypeSort; [SerializeField] AlchemySortBehaviour m_AlchemyQualitySort; List<int> displayItems = new List<int>(); AlchemyModel model { get { return ModelCenter.Instance.GetModel<AlchemyModel>(); } } PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } } #region Built-in protected override void BindController() { m_Controller.lockType = EnhanceLockType.KeepVertical; } protected override void AddListeners() { m_Controller.OnRefreshCell += OnRefreshCell; } protected override void OnPreOpen() { m_AlchemyTypeSort.Display(); m_AlchemyQualitySort.Display(); Display(); AlchemySortBehaviour.onSortRefresh += OnSortRefresh; model.alchemyDrugUseRefresh += AlchemyDrugUseRefresh; packModel.refreshItemCountEvent += RefreshItemCountEvent; } protected override void OnAfterOpen() { } protected override void OnPreClose() { AlchemySortBehaviour.onSortRefresh -= OnSortRefresh; model.alchemyDrugUseRefresh -= AlchemyDrugUseRefresh; packModel.refreshItemCountEvent -= RefreshItemCountEvent; } protected override void OnAfterClose() { } #endregion void Display() { DisplayDrugs(); } void DisplayDrugs() { m_Controller.Refresh(); displayItems.Clear(); var items = model.GetAlchemyDrugs(); foreach (var id in items) { var config = AttrFruitConfig.Get(id); var itemConfig = ItemConfig.Get(id); if (m_AlchemyTypeSort.IsSortEnabled(config.drugType) && m_AlchemyQualitySort.IsSortEnabled(itemConfig.LV)) { displayItems.Add(id); } } displayItems.Sort(Compare); for (int i = 0; i < displayItems.Count; i++) { m_Controller.AddCell(ScrollerDataType.Header, displayItems[i]); } m_Controller.Restart(); } private void OnSortRefresh() { DisplayDrugs(); } private void AlchemyDrugUseRefresh() { DisplayDrugs(); } private void OnRefreshCell(ScrollerDataType type, CellView cell) { var useDrugCell = cell as AlchemyUseDrugCell; useDrugCell.Display(cell.index); } private void RefreshItemCountEvent(PackType packType, int arg2, int itemId) { if (packType == PackType.Item && displayItems.Contains(itemId)) { DisplayDrugs(); } } private int Compare(int lhs, int rhs) { var lhs_state = model.GetAlchemyDrugState(lhs); var rhs_state = model.GetAlchemyDrugState(rhs); return lhs_state.CompareTo(rhs_state); } } } System/Alchemy/AlchemyUseDrugWin.cs.metacopy from Lua/Gen/AttrFruitConfigWrap.cs.meta copy to System/Alchemy/AlchemyUseDrugWin.cs.meta
File was copied from Lua/Gen/AttrFruitConfigWrap.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 3211f8f2fa96a53488c0cb28b6ee2299 timeCreated: 1550122887 guid: 32c4145a1f8723e4e86eccd23b4a07d6 timeCreated: 1555592173 licenseType: Pro MonoImporter: serializedVersion: 2 System/KnapSack/Logic/ItemOperateUtility.cs
@@ -614,7 +614,7 @@ var usedCountTotal = packModel.GetItemTotalUsedTimes(item.itemId); var fruitConfig = AttrFruitConfig.Get(item.itemId); if (fruitConfig != null && (usedCountTotal >= fruitConfig.MaxUseCnt || useCnt > fruitConfig.MaxUseCnt)) if (fruitConfig != null && (usedCountTotal >= fruitConfig.basicUseLimit || useCnt > fruitConfig.basicUseLimit)) { error = 1; return false; System/KnapSack/Logic/MakeDrugCell.cs
@@ -75,7 +75,7 @@ nameText.text = itemConfig.ItemName; nameText.color = UIHelper.GetUIColor(itemConfig.ItemColor, true); numSlider.minValue = 0; numSlider.maxValue = fruitConfig.MaxUseCnt; numSlider.maxValue = fruitConfig.basicUseLimit; if (itemConfig.Effect1 != 0) { attrDict.Add(itemConfig.Effect1, itemConfig.EffectValueA1); @@ -135,7 +135,7 @@ } attrDesText.text = attrSB.ToString(); useBtn.RemoveAllListeners(); if (useNum < fruitConfig.MaxUseCnt) if (useNum < fruitConfig.basicUseLimit) { reachMaxUse.SetActive(false); useBtnText.text = Language.Get("KnapS103"); System/KnapSack/Logic/PackModel.cs
@@ -1028,7 +1028,7 @@ int remainSumCnt = 0; if (fruitConfig != null) { remainSumCnt = fruitConfig.MaxUseCnt - sumHaveUseCnt; remainSumCnt = fruitConfig.basicUseLimit - sumHaveUseCnt; if (remainSumCnt <= remainDayCnt && itemModel.count > remainSumCnt) { count = (ulong)remainSumCnt; @@ -1689,7 +1689,7 @@ if (fruitConfig == null) return false; int useNum = GetItemTotalUsedTimes(fruitConfig.ID); if (useNum >= fruitConfig.MaxUseCnt) if (useNum >= fruitConfig.basicUseLimit) { return true; } @@ -1713,7 +1713,7 @@ for (int i = 0; i < limitlist.Count; i++) { progress += ((float)1 / limitlist.Count) * ((float)GetItemTotalUsedTimes(limitlist[i].ID) / limitlist[i].MaxUseCnt); progress += ((float)1 / limitlist.Count) * ((float)GetItemTotalUsedTimes(limitlist[i].ID) / limitlist[i].basicUseLimit); } return progress * 100; } System/KnapSack/Logic/RoleElixirTipWin.cs
@@ -177,25 +177,25 @@ private void CreateCell() { fruitlist = playerPack.GetDrugOrderByCnt(); ctrl.Refresh(); for (int i = 0; i < fruitlist.Count; i++) { int[] recipeLvs = fruitlist[i].RecipeLv; if(recipeLvs != null) { for(int j= 0; j < recipeLvs.Length; j++) { if(blastModel.sortDruglist.Contains(recipeLvs[j])) { ctrl.AddCell(ScrollerDataType.Header, i); break; } } } } ctrl.Restart(); //fruitlist = playerPack.GetDrugOrderByCnt(); //ctrl.Refresh(); //for (int i = 0; i < fruitlist.Count; i++) //{ // int[] recipeLvs = fruitlist[i].RecipeLv; // if(recipeLvs != null) // { // for(int j= 0; j < recipeLvs.Length; j++) // { // if(blastModel.sortDruglist.Contains(recipeLvs[j])) // { // ctrl.AddCell(ScrollerDataType.Header, i); // break; // } // } // } // //} //ctrl.Restart(); } System/Mount/MountModel.cs
@@ -302,7 +302,7 @@ { continue; } if (_DicMountItem[key] >= AttrFruit.MaxUseCnt) if (_DicMountItem[key] >= AttrFruit.basicUseLimit) { continue; } @@ -716,7 +716,7 @@ } return iSHint; case HorseEnum.HorseStone: int _maxuse = AttrFruitConfig.Get(id).MaxUseCnt; int _maxuse = AttrFruitConfig.Get(id).basicUseLimit; if (_DicMountItem.ContainsKey(id)) { if (_maxuse > _DicMountItem[id]) System/Mount/MountStoneTipsWin.cs
@@ -140,7 +140,7 @@ _MountStoneItem.ItemNum.text = hs_number.ToString() + "/1"; bagIndex = playerPack.GetSinglePack(PackType.Item).GetItemIndexsAppointedCount(_id, 1); } int _maxuse = AttrFruitConfig.Get(_id).MaxUseCnt; int _maxuse = AttrFruitConfig.Get(_id).basicUseLimit; _MountStoneItem.PetExpNum.text = tag_Item[_id].ToString() + "/" + _maxuse.ToString(); _MountStoneItem.Slider.value = (float)Math.Round((float)tag_Item[_id] / _maxuse, 2, MidpointRounding.AwayFromZero); SpiritBeastsText(_id.ToString(), _MountStoneItem.Some_text, tag_Item[_id]); @@ -339,7 +339,7 @@ private bool IsUse(int Id) { int hs_number = playerPack.GetItemCountByID(PackType.Item, Id);//魂石数量 int _maxuse = AttrFruitConfig.Get(Id.ToString()).MaxUseCnt; int _maxuse = AttrFruitConfig.Get(Id.ToString()).basicUseLimit; if (tag_Item.ContainsKey(Id)) { if (hs_number > 0 && _maxuse > tag_Item[Id]) @@ -353,7 +353,7 @@ private bool IsFull(int Id) { bool IsBool = true; int _maxuse = AttrFruitConfig.Get(Id.ToString()).MaxUseCnt; int _maxuse = AttrFruitConfig.Get(Id.ToString()).basicUseLimit; if (tag_Item.ContainsKey(Id)) { if (tag_Item[Id] >= _maxuse) System/Pet/PetModel.cs
@@ -257,7 +257,7 @@ int type = 0; foreach (var key in _TagPetItem.Keys) { if (_TagPetItem[key] >= AttrFruitConfig.Get(key).MaxUseCnt) if (_TagPetItem[key] >= AttrFruitConfig.Get(key).basicUseLimit) { continue; } @@ -778,7 +778,7 @@ } return iSHint; case PetEnum.PetStone: int _maxuse = AttrFruitConfig.Get(id).MaxUseCnt; int _maxuse = AttrFruitConfig.Get(id).basicUseLimit; if (_TagPetItem.ContainsKey(id)) { if (_maxuse > _TagPetItem[id]) System/Pet/PetStoneTipsWin.cs
@@ -137,7 +137,7 @@ _MountStoneItem.ItemNum.text = hs_number.ToString() + "/1"; bagIndex = playerPack.GetSinglePack(PackType.Item).GetItemIndexsAppointedCount(_id, 1); } int _maxuse = AttrFruitConfig.Get(_id).MaxUseCnt; int _maxuse = AttrFruitConfig.Get(_id).basicUseLimit; _MountStoneItem.PetExpNum.text = tag_Item[_id].ToString() + "/" + _maxuse.ToString(); _MountStoneItem.Slider.value = (float)Math.Round((float)tag_Item[_id] / _maxuse, 2, MidpointRounding.AwayFromZero); SpiritBeastsText(_id.ToString(), _MountStoneItem.Some_text, tag_Item[_id]); @@ -360,7 +360,7 @@ private bool IsUse(int Id) { int hs_number = playerPack.GetItemCountByID(PackType.Item, Id);//魂石数量 int _maxuse = AttrFruitConfig.Get(Id.ToString()).MaxUseCnt; int _maxuse = AttrFruitConfig.Get(Id.ToString()).basicUseLimit; if (tag_Item.ContainsKey(Id)) { if (hs_number > 0 && _maxuse > tag_Item[Id]) @@ -374,7 +374,7 @@ private bool IsFull(int Id) { bool IsBool = true; int _maxuse = AttrFruitConfig.Get(Id.ToString()).MaxUseCnt; int _maxuse = AttrFruitConfig.Get(Id.ToString()).basicUseLimit; if (tag_Item.ContainsKey(Id)) { if (tag_Item[Id] >= _maxuse) System/RoleParticulars/ViewPetHorseStoneCell.cs
@@ -38,7 +38,7 @@ var stoneConfig = AttrFruitConfig.Get(itemId); if (stoneConfig != null) { m_Slider.value = (float)count / stoneConfig.MaxUseCnt; m_Slider.value = (float)count / stoneConfig.basicUseLimit; m_UseNum.text = StringUtility.Contact(count, "/", stoneConfig.MaxUseCnt); }