Core/GameEngine/DataToCtl/PackageRegedit.cs
@@ -25,6 +25,7 @@ public static void Init() { // 登记相应的数据体及对应的数据转逻辑类 Register(typeof(HB107_tagMCRolePointInfo), typeof(DTCB107_tagMCRolePointInfo)); Register(typeof(HA327_tagMCRealmExpInfo), typeof(DTCA327_tagMCRealmExpInfo)); Register(typeof(HA40C_tagGCAllFamilyBossInfo), typeof(DTCA40C_tagGCAllFamilyBossInfo)); Register(typeof(HA3B1_tagMCEquipPartStarInfo), typeof(DTCA3B1_tagMCEquipPartStarInfo)); Core/GameEngine/Model/Config/ReikiRootConfig.cs
New file @@ -0,0 +1,221 @@ //-------------------------------------------------------- // [Author]: Fish // [ Date ]: Monday, March 25, 2019 //-------------------------------------------------------- using System.Collections.Generic; using System.IO; using System.Threading; using System; using UnityEngine; [XLua.LuaCallCSharp] public partial class ReikiRootConfig { public readonly int id; public readonly Int2 propertyPerPoint; public readonly int promoteProperty; public readonly int[] promoteValue; public readonly int[] qualityArea; public ReikiRootConfig() { } public ReikiRootConfig(string input) { try { var tables = input.Split('\t'); int.TryParse(tables[0],out id); Int2.TryParse(tables[1],out propertyPerPoint); int.TryParse(tables[2],out promoteProperty); string[] promoteValueStringArray = tables[3].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); promoteValue = new int[promoteValueStringArray.Length]; for (int i=0;i<promoteValueStringArray.Length;i++) { int.TryParse(promoteValueStringArray[i],out promoteValue[i]); } string[] qualityAreaStringArray = tables[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); qualityArea = new int[qualityAreaStringArray.Length]; for (int i=0;i<qualityAreaStringArray.Length;i++) { int.TryParse(qualityAreaStringArray[i],out qualityArea[i]); } } catch (Exception ex) { DebugEx.Log(ex); } } static Dictionary<string, ReikiRootConfig> configs = new Dictionary<string, ReikiRootConfig>(); public static ReikiRootConfig Get(string id) { if (!inited) { Debug.Log("ReikiRootConfig 还未完成初始化。"); return null; } if (configs.ContainsKey(id)) { return configs[id]; } ReikiRootConfig config = null; if (rawDatas.ContainsKey(id)) { config = configs[id] = new ReikiRootConfig(rawDatas[id]); rawDatas.Remove(id); } return config; } public static ReikiRootConfig 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<ReikiRootConfig> GetValues() { var values = new List<ReikiRootConfig>(); 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 +"/ReikiRoot.txt"; } else { path = AssetVersionUtility.GetAssetFilePath("config/ReikiRoot.txt"); } var tempConfig = new ReikiRootConfig(); 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 ReikiRootConfig(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 ReikiRootConfig(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/ReikiRootConfig.cs.metacopy from Lua/Gen/SnxxzUIRolePointModelWrap.cs.meta copy to Core/GameEngine/Model/Config/ReikiRootConfig.cs.meta
File was copied from Lua/Gen/SnxxzUIRolePointModelWrap.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 15f8b5f24633ef049b97209e9decd843 timeCreated: 1550120575 guid: 98b9f6b38bc0b1841bddba5f9aa30611 timeCreated: 1553483326 licenseType: Pro MonoImporter: serializedVersion: 2 Core/GameEngine/Model/Player/Character/PlayerBaseData.cs
@@ -52,6 +52,11 @@ public int BasicsScoreAHit;//基础命中 public int BasicsDodge;//基础闪避 public uint equipShowSwitch;//装备显隐开关 public int mater;//灵根属性——金 public int wood;//灵根属性——木 public int water;//灵根属性——水 public int fire;//灵根属性——火 public int earth;//灵根属性——土 public long treasurePotentialSp { get Core/GameEngine/Model/Player/Character/PlayerExtersionData.cs
@@ -32,6 +32,7 @@ public int PickupDist; // 拾取距离 73, public int RealMapID; // 数据地图ID 79, public uint Tick; // 当前Tick 89, public int luckValue; //气运 101 public int battleValEx1; // <攻速 136 public int battleValEx3; // <增加伤害 138 public int damageReduceRate; // <减少伤害 132 Core/GameEngine/Model/Player/PlayerDatas.cs
@@ -537,6 +537,7 @@ } break; case PlayerDataType.LuckValue: extersion.luckValue = (int)value; break; case PlayerDataType.ExAttr1: break; @@ -850,7 +851,20 @@ break; case PlayerDataType.CDBPlayerRefresh_ZhuxianRate: break; case PlayerDataType.CDBPlayerRefresh_ZhuxianHurtPer: case PlayerDataType.CDBPlayerRefresh_Mater: baseData.mater = (int)value; break; case PlayerDataType.CDBPlayerRefresh_Wood: baseData.wood = (int)value; break; case PlayerDataType.CDBPlayerRefresh_Water: baseData.water = (int)value; break; case PlayerDataType.CDBPlayerRefresh_Fire: baseData.fire = (int)value; break; case PlayerDataType.CDBPlayerRefresh_Earth: baseData.earth = (int)value; break; } } Core/NetworkPackage/ClientPack/ClientToMapServer/CB2_NewFunction/CB206_tagCMAddPoint.cs
New file @@ -0,0 +1,22 @@ using UnityEngine; using System.Collections; // B2 06 玩家加点 #tagCMAddPoint public class CB206_tagCMAddPoint : GameNetPackBasic { public byte PointAttrIDCount; // 加点属性ID个数 public byte[] PointAttrIDList; // 加点属性ID列表 public ushort[] PointValueList; // 加点属性ID对应的点数列表 public CB206_tagCMAddPoint () { combineCmd = (ushort)0x03FE; _cmd = (ushort)0xB206; } public override void WriteToBytes () { WriteBytes (PointAttrIDCount, NetDataType.BYTE); WriteBytes (PointAttrIDList, NetDataType.BYTE, PointAttrIDCount); WriteBytes (PointValueList, NetDataType.WORD, PointAttrIDCount); } } Core/NetworkPackage/ClientPack/ClientToMapServer/CB2_NewFunction/CB206_tagCMAddPoint.cs.metacopy from Lua/Gen/SnxxzUIRolePointModelWrap.cs.meta copy to Core/NetworkPackage/ClientPack/ClientToMapServer/CB2_NewFunction/CB206_tagCMAddPoint.cs.meta
File was copied from Lua/Gen/SnxxzUIRolePointModelWrap.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 15f8b5f24633ef049b97209e9decd843 timeCreated: 1550120575 guid: a674b054ed830b64798519873146fc6e timeCreated: 1553496718 licenseType: Pro MonoImporter: serializedVersion: 2 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/DTCFile/ServerPack/HB1_Role/DTCB107_tagMCRolePointInfo.cs
New file @@ -0,0 +1,24 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, March 25, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using Snxxz.UI; public class DTCB107_tagMCRolePointInfo : DtcBasic { public override void Done(GameNetPackBasic vNetPack) { base.Done(vNetPack); var package = vNetPack as HB107_tagMCRolePointInfo; ModelCenter.Instance.GetModel<ReikiRootModel>().ReceivePackage(package); } } Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB107_tagMCRolePointInfo.cs.meta
File was renamed from Lua/Gen/SnxxzUIRolePointModelWrap.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 15f8b5f24633ef049b97209e9decd843 timeCreated: 1550120575 guid: de8eaad4e383f6f438a5ef4f4ecfbc63 timeCreated: 1553497409 licenseType: Pro MonoImporter: serializedVersion: 2 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 Core/NetworkPackage/ServerPack/HB1_Role/HB107_tagMCRolePointInfo.cs
New file @@ -0,0 +1,21 @@ using UnityEngine; using System.Collections; // B1 07 玩家点数信息 #tagMCRolePointInfo public class HB107_tagMCRolePointInfo : GameNetPackBasic { public byte PointAttrIDCount; // 点类型个数 public byte[] PointAttrIDList; // 点类型列表 public ushort[] PointValueList; // 点类型对应已加自由点数列表 public HB107_tagMCRolePointInfo () { _cmd = (ushort)0xB107; } public override void ReadFromBytes (byte[] vBytes) { TransBytes (out PointAttrIDCount, vBytes, NetDataType.BYTE); TransBytes (out PointAttrIDList, vBytes, NetDataType.BYTE, PointAttrIDCount); TransBytes (out PointValueList, vBytes, NetDataType.WORD, PointAttrIDCount); } } Core/NetworkPackage/ServerPack/HB1_Role/HB107_tagMCRolePointInfo.cs.metacopy from Lua/Gen/SnxxzUIRolePointModelWrap.cs.meta copy to Core/NetworkPackage/ServerPack/HB1_Role/HB107_tagMCRolePointInfo.cs.meta
File was copied from Lua/Gen/SnxxzUIRolePointModelWrap.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 15f8b5f24633ef049b97209e9decd843 timeCreated: 1550120575 guid: f06926fe399075046980dfee35b48088 timeCreated: 1553497359 licenseType: Pro MonoImporter: serializedVersion: 2 Lua/Gen/SnxxzUIRolePointModelWrap.cs
File was deleted Lua/Gen/XLuaGenAutoRegister.cs
@@ -1308,9 +1308,6 @@ translator.DelayWrapLoader(typeof(Snxxz.UI.RoleModel), SnxxzUIRoleModelWrap.__Register); translator.DelayWrapLoader(typeof(Snxxz.UI.RolePointModel), SnxxzUIRolePointModelWrap.__Register); translator.DelayWrapLoader(typeof(Snxxz.UI.TitleModel), SnxxzUITitleModelWrap.__Register); System/Role/ReikiRootModel.cs
New file @@ -0,0 +1,365 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { public class ReikiRootModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk { Dictionary<int, int> m_ReikiRootPoints = new Dictionary<int, int>(); Dictionary<int, int> m_ReikiRootFreePoints = new Dictionary<int, int>(); Dictionary<int, List<int>> m_RecommendReikiRoots = new Dictionary<int, List<int>>(); Dictionary<int, Dictionary<int, float>> m_RecommendProportion = new Dictionary<int, Dictionary<int, float>>(); Dictionary<int, int> m_MainReikiRoots = new Dictionary<int, int>(); Dictionary<int, int> m_CacheReikiRootPoints = new Dictionary<int, int>(); public List<int> reikiRoots = new List<int>(); public int freePoint { get { return (int)PlayerDatas.Instance.baseData.FreePoint; } } int m_CacheFreePoint = 0; public int cacheFreePoint { get { return m_CacheFreePoint; } set { if (m_CacheFreePoint != value) { m_CacheFreePoint = value; if (onCacheFreePointRefresh != null) { onCacheFreePointRefresh(); } } } } public int mainReikiRoot { get { var job = PlayerDatas.Instance.baseData.Job; return m_MainReikiRoots[job]; } } public int maxQuality { get; private set; } public const int FUNCTION = 36; public event Action onCacheFreePointRefresh; public event Action onReikiRootPointRefresh; public override void Init() { ParseConfig(); PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshEvent; } public void OnBeforePlayerDataInitialize() { m_ReikiRootPoints.Clear(); m_ReikiRootFreePoints.Clear(); } public void OnPlayerLoginOk() { RefreshReikiRootPoint(); } public override void UnInit() { PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshEvent; } void ParseConfig() { var funcConfig = FuncConfigConfig.Get("RecommendPoint"); var json = LitJson.JsonMapper.ToObject(funcConfig.Numerical1); foreach (var jobKey in json.Keys) { var job = int.Parse(jobKey); var _mainReikiRoot = 0; var _proportion = 0f; m_RecommendProportion.Add(job, new Dictionary<int, float>()); foreach (var idKey in json[jobKey].Keys) { var id = int.Parse(idKey); var proportion = int.Parse(json[jobKey][idKey].ToString()) / 100f; if (proportion > _proportion) { _mainReikiRoot = id; _proportion = proportion; } m_RecommendProportion[job].Add(id, proportion); } m_MainReikiRoots.Add(job, _mainReikiRoot); m_RecommendReikiRoots.Add(job, new List<int>(m_RecommendProportion[job].Keys)); } reikiRoots.Add((int)AttrEnum.Mater); reikiRoots.Add((int)AttrEnum.Wood); reikiRoots.Add((int)AttrEnum.Water); reikiRoots.Add((int)AttrEnum.Fire); reikiRoots.Add((int)AttrEnum.Earth); } public int GetReikiRootQuality(int id, int point) { var config = ReikiRootConfig.Get(id); if (config == null) { return 0; } var quality = 0; for (int i = 0; i < config.qualityArea.Length; i++) { if (point >= config.qualityArea[i]) { quality = i + 1; } else { break; } } return quality; } public int GetReikiRootQuality(int id) { if (m_ReikiRootPoints.ContainsKey(id)) { return GetReikiRootQuality(id, m_ReikiRootPoints[id]); } return GetReikiRootQuality(id, 0); } public int GetReikiRootPoint(int id) { return m_ReikiRootPoints.ContainsKey(id) ? m_ReikiRootPoints[id] : 0; } public int GetReikiRootFreePoint(int id) { return m_ReikiRootFreePoints.ContainsKey(id) ? m_ReikiRootFreePoints[id] : 0; } int GetReikiRootCachePoint(int id) { return m_CacheReikiRootPoints.ContainsKey(id) ? m_CacheReikiRootPoints[id] : 0; } public List<ReikiRootRecommend> GetReikiRootRecommendPoint(int point) { if (point == 0) { return null; } m_CacheReikiRootPoints.Clear(); foreach (var id in m_ReikiRootPoints.Keys) { m_CacheReikiRootPoints[id] = m_ReikiRootPoints[id]; } var recommends = new List<ReikiRootRecommend>(); var job = PlayerDatas.Instance.baseData.Job; var remainPoint = point; var currentMaxQuality = 1; foreach (var id in reikiRoots) { var quality = GetReikiRootQuality(id); if (quality >= currentMaxQuality) { currentMaxQuality = quality; } } if (m_RecommendReikiRoots.ContainsKey(job)) { var reikiRoots = m_RecommendReikiRoots[job]; reikiRoots.Sort(QualityCompare); while (remainPoint > 0) { var id = reikiRoots[0]; var quality = GetReikiRootQuality(id, m_CacheReikiRootPoints[id]); var addpoint = 0; if (quality >= maxQuality) { var proportions = m_RecommendProportion[job]; foreach (var key in proportions.Keys) { addpoint = Mathf.RoundToInt(remainPoint * proportions[key]); recommends.Add(new ReikiRootRecommend() { id = key, value = addpoint, }); if (!m_CacheReikiRootPoints.ContainsKey(key)) { m_CacheReikiRootPoints.Add(key, 0); } m_CacheReikiRootPoints[key] += addpoint; } remainPoint = 0; } else { addpoint = Mathf.Min(remainPoint, GetCacheQualityRequrePoint(id, quality < currentMaxQuality ? currentMaxQuality : quality + 1)); remainPoint -= addpoint; recommends.Add(new ReikiRootRecommend() { id = id, value = addpoint, }); if (!m_CacheReikiRootPoints.ContainsKey(id)) { m_CacheReikiRootPoints.Add(id, 0); } m_CacheReikiRootPoints[id] += addpoint; } } } return recommends; } int GetCacheQualityRequrePoint(int id,int quality) { var requirePoint = 0; var currebtQuality = GetReikiRootQuality(id, GetReikiRootCachePoint(id)); if (currebtQuality < quality) { var point = GetReikiRootCachePoint(id); requirePoint = GetQualityPoint(id, quality) - point; } return requirePoint; } public int GetQualityPoint(int id, int quality) { var config = ReikiRootConfig.Get(id); for (int i = 0; i < config.qualityArea.Length; i++) { if (quality == i + 1) { return config.qualityArea[i]; } } return 0; } public void GetReikiRootProperty(int id, int point, ref Dictionary<int, int> propertyDict) { var config = ReikiRootConfig.Get(id); if (!propertyDict.ContainsKey(config.propertyPerPoint.x)) { propertyDict.Add(config.propertyPerPoint.x, 0); } propertyDict[config.propertyPerPoint.x] += config.propertyPerPoint.y; if (!propertyDict.ContainsKey(config.promoteProperty)) { propertyDict.Add(config.promoteProperty, 0); } var quality = GetReikiRootQuality(id, point); propertyDict[config.promoteProperty] += GetQualityProperty(id, quality); } public int GetQualityProperty(int id, int quality) { var config = ReikiRootConfig.Get(id); var value = 0; for (int i = 0; i < config.promoteValue.Length; i++) { if (quality > i) { value = config.promoteValue[i]; } else { break; } } return value; } public void ReceivePackage(HB107_tagMCRolePointInfo package) { for (int i = 0; i < package.PointAttrIDCount; i++) { var id = package.PointAttrIDList[i]; var point = package.PointValueList[i]; m_ReikiRootFreePoints[id] = point; } } public void SendAddPoint(byte[] points, ushort[] pointValues) { var pak = new CB206_tagCMAddPoint(); pak.PointAttrIDList = points; pak.PointValueList = pointValues; pak.PointAttrIDCount = (byte)points.Length; GameNetSystem.Instance.SendInfo(pak); } int QualityCompare(int lhs, int rhs) { var lhsQuality = GetReikiRootQuality(lhs); var rhsQuality = GetReikiRootQuality(rhs); if (mainReikiRoot == lhs || mainReikiRoot == rhs) { if (lhsQuality == rhsQuality) { return mainReikiRoot == lhs ? -1 : 1; } } return lhsQuality.CompareTo(rhsQuality); } private void PlayerDataRefreshEvent(PlayerDataType dataType) { switch (dataType) { case PlayerDataType.CDBPlayerRefresh_Mater: case PlayerDataType.CDBPlayerRefresh_Wood: case PlayerDataType.CDBPlayerRefresh_Water: case PlayerDataType.CDBPlayerRefresh_Fire: case PlayerDataType.CDBPlayerRefresh_Earth: RefreshReikiRootPoint(); break; } } void RefreshReikiRootPoint() { foreach (var id in reikiRoots) { m_ReikiRootPoints[id] = (int)UIHelper.GetPropertyMapPlayerData((AttrEnum)id); } if (onReikiRootPointRefresh != null) { onReikiRootPointRefresh(); } } } public struct ReikiRootRecommend { public int id; public int value; } } System/Role/ReikiRootModel.cs.metacopy from Lua/Gen/SnxxzUIRolePointModelWrap.cs.meta copy to System/Role/ReikiRootModel.cs.meta
File was copied from Lua/Gen/SnxxzUIRolePointModelWrap.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 15f8b5f24633ef049b97209e9decd843 timeCreated: 1550120575 guid: bf54066f835418b4c9f377706c85b4ad timeCreated: 1553479811 licenseType: Pro MonoImporter: serializedVersion: 2 System/Role/ReikiRootPointBehaviour.cs
New file @@ -0,0 +1,151 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class ReikiRootPointBehaviour : MonoBehaviour { [SerializeField] Text m_PropertyName; [SerializeField] Text m_PropertyValue; [SerializeField] Text m_Point; [SerializeField] Button m_Add; [SerializeField] Button m_Sub; [SerializeField] Button m_OpenKeyboard; public int id { get; private set; } int m_CachePoint = 0; public int point { get { return m_CachePoint; } set { if (m_CachePoint != value) { m_CachePoint = value; DisplayPoint(); } } } Coroutine m_Coroutine = null; bool isPointAdd = false; bool isPointSub = false; int coroutineCount = 0; static WaitForSeconds waitSpeedFaster = new WaitForSeconds(0.05f); static WaitForSeconds waitSpeedSlow = new WaitForSeconds(0.2f); ReikiRootModel model { get { return ModelCenter.Instance.GetModel<ReikiRootModel>(); } } private void Awake() { UIEventTrigger.Get(m_Sub.gameObject).OnDown = OnSubDown; UIEventTrigger.Get(m_Sub.gameObject).OnUp = OnSubUp; UIEventTrigger.Get(m_Add.gameObject).OnDown = OnAddDown; UIEventTrigger.Get(m_Add.gameObject).OnUp = OnAddUp; } public void Display(int id) { this.id = id; DisplayBase(); DisplayPoint(); model.onReikiRootPointRefresh += OnReikiRootPointRefresh; } void DisplayBase() { var propertyConfig = PlayerPropertyConfig.Get(id); m_PropertyName.text = propertyConfig.Name; var qualiaty = model.GetReikiRootQuality(id); m_PropertyName.color = UIHelper.GetUIColor(qualiaty); m_PropertyValue.text = ((int)UIHelper.GetPropertyMapPlayerData((AttrEnum)id)).ToString(); } void DisplayPoint() { m_Point.text = point.ToString(); } private void OnAddDown(GameObject go) { isPointAdd = true; if (m_Coroutine != null) { StopCoroutine(m_Coroutine); } m_Coroutine = StartCoroutine(Co_PointRefresh(true)); } private void OnAddUp(GameObject go) { isPointAdd = false; } private void OnSubDown(GameObject go) { if (m_Coroutine != null) { StopCoroutine(m_Coroutine); } isPointSub = true; m_Coroutine = StartCoroutine(Co_PointRefresh(false)); } private void OnSubUp(GameObject go) { isPointSub = false; } IEnumerator Co_PointRefresh(bool pointUp) { while (pointUp ? isPointAdd : isPointSub) { if (pointUp && model.cacheFreePoint > 0) { point += 1; model.cacheFreePoint -= 1; } else if (!pointUp && point > 0) { point -= 1; model.cacheFreePoint += 1; } if (coroutineCount == 0) { yield return waitSpeedSlow; } else { yield return waitSpeedFaster; } coroutineCount++; } } private void OnReikiRootPointRefresh() { DisplayBase(); } public void Dispose() { model.onReikiRootPointRefresh -= OnReikiRootPointRefresh; if (m_Coroutine != null) { StopCoroutine(m_Coroutine); } isPointAdd = false; isPointSub = false; point = 0; } } } System/Role/ReikiRootPointBehaviour.cs.metacopy from Lua/Gen/SnxxzUIRolePointModelWrap.cs.meta copy to System/Role/ReikiRootPointBehaviour.cs.meta
File was copied from Lua/Gen/SnxxzUIRolePointModelWrap.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 15f8b5f24633ef049b97209e9decd843 timeCreated: 1550120575 guid: 0fd76f95c6abcdf4992d799150ccce66 timeCreated: 1553498324 licenseType: Pro MonoImporter: serializedVersion: 2 System/Role/ReikiRootWin.cs
New file @@ -0,0 +1,189 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, March 25, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class ReikiRootWin : Window { [SerializeField] List<PropertyBehaviour> m_Propertys; [SerializeField] ReikiRootPointBehaviour[] m_ReikiRootPoints; [SerializeField] Text m_FreePoint; [SerializeField] Button m_Recommend; [SerializeField] Button m_Confirm; [SerializeField] Button m_Close; Dictionary<int, int> currentPropertyDict = new Dictionary<int, int>(); Dictionary<int, int> upPropertyDict = new Dictionary<int, int>(); ReikiRootModel model { get { return ModelCenter.Instance.GetModel<ReikiRootModel>(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Recommend.AddListener(OnRecommend); m_Confirm.AddListener(Confirm); m_Close.AddListener(CloseClick); } protected override void OnPreOpen() { model.cacheFreePoint = model.freePoint; for (int i = 0; i < m_ReikiRootPoints.Length; i++) { if (i < model.reikiRoots.Count) { m_ReikiRootPoints[i].Display(model.reikiRoots[i]); } } model.onCacheFreePointRefresh += OnCacheFreePointRefresh; PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshEvent; Display(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { model.onCacheFreePointRefresh -= OnCacheFreePointRefresh; PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshEvent; for (int i = 0; i < m_ReikiRootPoints.Length; i++) { m_ReikiRootPoints[i].Dispose(); } } protected override void OnAfterClose() { } #endregion void Display() { DisplayFreePoint(); DisplayProperty(); } void DisplayFreePoint() { m_FreePoint.text = model.cacheFreePoint.ToString(); } void DisplayProperty() { currentPropertyDict.Clear(); upPropertyDict.Clear(); foreach (var reikiRootPoint in m_ReikiRootPoints) { var id = reikiRootPoint.id; var point = model.GetReikiRootPoint(id); model.GetReikiRootProperty(id, point, ref currentPropertyDict); var cachePoint = point + reikiRootPoint.point; model.GetReikiRootProperty(id, cachePoint, ref upPropertyDict); } var index = 0; foreach (var property in currentPropertyDict.Keys) { if (index < m_Propertys.Count) { m_Propertys[index].gameObject.SetActive(true); var value = currentPropertyDict[property]; var add = upPropertyDict.ContainsKey(property) ? (upPropertyDict[property] - value) : 0; m_Propertys[index].DisplayAdd(property, value, add); } index++; } for (int i = index; i < m_Propertys.Count; i++) { m_Propertys[i].gameObject.SetActive(false); } } private void OnRecommend() { var recommends = model.GetReikiRootRecommendPoint(model.freePoint); if (recommends != null) { foreach (var reikiRootPoint in m_ReikiRootPoints) { var point = 0; var list = recommends.FindAll((x) => { return x.id == reikiRootPoint.id; }); if (list != null) { foreach (var recommend in list) { point += recommend.value; } } reikiRootPoint.point = point; } if (model.cacheFreePoint == 0) { OnCacheFreePointRefresh(); } model.cacheFreePoint = 0; } } private void Confirm() { if (model.freePoint != model.cacheFreePoint) { var ids = new byte[m_ReikiRootPoints.Length]; var values = new ushort[m_ReikiRootPoints.Length]; for (int i = 0; i < m_ReikiRootPoints.Length; i++) { ids[i] = (byte)m_ReikiRootPoints[i].id; values[i] = (ushort)m_ReikiRootPoints[i].point; } model.SendAddPoint(ids, values); } } private void OnCacheFreePointRefresh() { DisplayFreePoint(); DisplayProperty(); } private void PlayerDataRefreshEvent(PlayerDataType dataType) { if (dataType == PlayerDataType.FreePoint) { foreach (var reikiRootPoint in m_ReikiRootPoints) { reikiRootPoint.point = 0; } model.cacheFreePoint = model.freePoint; } } } } System/Role/ReikiRootWin.cs.metacopy from Lua/Gen/SnxxzUIRolePointModelWrap.cs.meta copy to System/Role/ReikiRootWin.cs.meta
File was copied from Lua/Gen/SnxxzUIRolePointModelWrap.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 15f8b5f24633ef049b97209e9decd843 timeCreated: 1550120575 guid: d925264697762074988dcfbc6d29d623 timeCreated: 1553498163 licenseType: Pro MonoImporter: serializedVersion: 2 System/Treasure/PotentialItemBehaviour.cs
File was deleted System/Treasure/PotentialItemBehaviour.cs.meta
File was deleted System/Treasure/PotentialItemUseWin.cs
File was deleted System/Treasure/PotentialItemUseWin.cs.meta
File was deleted System/Treasure/TreasureBaseWin.cs
@@ -198,8 +198,6 @@ private void OnDragComplete(int result) { if (NewBieCenter.Instance.inGuiding || WindowCenter.Instance.IsOpen<TreasureNewStageWin>() || WindowCenter.Instance.IsOpen<PotentialItemUseWin>() || WindowCenter.Instance.IsOpen<TreasureSoulActiveWin>() || WindowCenter.Instance.IsOpen<GetItemPathWin>() || WindowCenter.Instance.IsOpen<DemonTreasurePropertyWin>() System/Treasure/TreasureNewStageWin.cs
File was deleted System/Treasure/TreasureNewStageWin.cs.meta
File was deleted System/WindowBase/ModelCenter.cs
@@ -230,6 +230,7 @@ RegisterModel<EquipStrengthModel>(); RegisterModel<RuneModel>(); RegisterModel<RuneResolveModel>(); RegisterModel<ReikiRootModel>(); inited = true; } Utility/EnumHelper.cs
@@ -552,7 +552,11 @@ CDBPlayerRefresh_SoulCore = 198,//聚魂-核心环 CDBPlayerRefresh_Honor = 199, //# 荣誉值 CDBPlayerRefresh_ZhuxianRate = 200, //# 荣誉值 CDBPlayerRefresh_ZhuxianHurtPer = 201, //# 荣誉值 CDBPlayerRefresh_Mater = 201, //# 灵根属性-金 CDBPlayerRefresh_Wood = 202,//# 灵根属性-木 CDBPlayerRefresh_Water = 203,//# 灵根属性-水 CDBPlayerRefresh_Fire = 204,//# 灵根属性-火 CDBPlayerRefresh_Earth = 205,//# 灵根属性-土 }; /** 背包类型码定义 */ @@ -795,6 +799,12 @@ SkillReducePerE = 113, //杏黄旗技能减伤百分比 SkillReducePerF = 114, //嗜天斧技能减伤百分比 SkillReducePerG = 115, //射日神弓技能减伤百分比 Luck = 120,//气运 Mater = 201,//金 Wood = 202,//木 Water = 203,//水 Fire = 204,//火 Earth = 205,//土 } public enum TextColType Utility/UIHelper.cs
@@ -146,7 +146,7 @@ /// </summary> /// <param name="type"></param> /// <returns></returns> public static float GetPropertyMapPlayerData(AttrEnum type) public static int GetPropertyMapPlayerData(AttrEnum type) { switch (type) { @@ -232,6 +232,18 @@ return PlayerDatas.Instance.extersion.skillAtkRateReduce; case AttrEnum.NpcHurtAddPer: return PlayerDatas.Instance.extersion.NpcHurtAddPer; case AttrEnum.Luck: return PlayerDatas.Instance.extersion.luckValue; case AttrEnum.Mater: return PlayerDatas.Instance.baseData.mater; case AttrEnum.Wood: return PlayerDatas.Instance.baseData.wood; case AttrEnum.Water: return PlayerDatas.Instance.baseData.water; case AttrEnum.Fire: return PlayerDatas.Instance.baseData.fire; case AttrEnum.Earth: return PlayerDatas.Instance.baseData.earth; } return 0; }