Core/GameEngine/Model/Config/DungeonConfig.cs
@@ -1,18 +1,18 @@ //-------------------------------------------------------- // [Author]: Fish // [ Date ]: Wednesday, May 15, 2019 //-------------------------------------------------------- using System.Collections.Generic; using System.IO; using System.Threading; using System; using UnityEngine; [XLua.LuaCallCSharp] public partial class DungeonConfig { //-------------------------------------------------------- // [Author]: Fish // [ Date ]: Thursday, May 16, 2019 //-------------------------------------------------------- using System.Collections.Generic; using System.IO; using System.Threading; using System; using UnityEngine; [XLua.LuaCallCSharp] public partial class DungeonConfig { public readonly int ID; public readonly int DataMapID; public readonly int LineID; @@ -28,24 +28,25 @@ public readonly int SweepItemID; public readonly int SweepCostCnt; public readonly string StepTime; public readonly string RefreshNPC; public readonly int[] BossActorID; public readonly int[] Rewards; public readonly string[] RewardCountDescriptions; public readonly string Description; public readonly int AutomaticATK; public readonly int MapButton; public readonly int ShowNewItemTip; public DungeonConfig() { } public DungeonConfig(string input) { try { var tables = input.Split('\t'); public readonly int ShowNewItemTip; public DungeonConfig() { } public DungeonConfig(string input) { try { var tables = input.Split('\t'); int.TryParse(tables[0],out ID); int.TryParse(tables[1],out DataMapID); @@ -81,198 +82,199 @@ StepTime = tables[14]; string[] BossActorIDStringArray = tables[15].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); RefreshNPC = tables[15]; string[] BossActorIDStringArray = tables[16].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); BossActorID = new int[BossActorIDStringArray.Length]; for (int i=0;i<BossActorIDStringArray.Length;i++) { int.TryParse(BossActorIDStringArray[i],out BossActorID[i]); } string[] RewardsStringArray = tables[16].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); string[] RewardsStringArray = tables[17].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); Rewards = new int[RewardsStringArray.Length]; for (int i=0;i<RewardsStringArray.Length;i++) { int.TryParse(RewardsStringArray[i],out Rewards[i]); } RewardCountDescriptions = tables[17].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); RewardCountDescriptions = tables[18].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); Description = tables[18]; Description = tables[19]; int.TryParse(tables[19],out AutomaticATK); int.TryParse(tables[20],out AutomaticATK); int.TryParse(tables[20],out MapButton); int.TryParse(tables[21],out MapButton); int.TryParse(tables[21],out ShowNewItemTip); } catch (Exception ex) { DebugEx.Log(ex); } } static Dictionary<string, DungeonConfig> configs = new Dictionary<string, DungeonConfig>(); public static DungeonConfig Get(string id) { if (!inited) { Debug.Log("DungeonConfig 还未完成初始化。"); return null; } if (configs.ContainsKey(id)) { return configs[id]; } DungeonConfig config = null; if (rawDatas.ContainsKey(id)) { config = configs[id] = new DungeonConfig(rawDatas[id]); rawDatas.Remove(id); } return config; } public static DungeonConfig 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<DungeonConfig> GetValues() { var values = new List<DungeonConfig>(); 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 +"/Dungeon.txt"; } else { path = AssetVersionUtility.GetAssetFilePath("config/Dungeon.txt"); } configs.Clear(); var tempConfig = new DungeonConfig(); 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 DungeonConfig(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 DungeonConfig(line); configs[id] = config; (config as IConfigPostProcess).OnConfigParseCompleted(); } else { rawDatas[id] = line; } } catch (System.Exception ex) { Debug.LogError(ex); } } inited = true; }); } } } int.TryParse(tables[22],out ShowNewItemTip); } catch (Exception ex) { DebugEx.Log(ex); } } static Dictionary<string, DungeonConfig> configs = new Dictionary<string, DungeonConfig>(); public static DungeonConfig Get(string id) { if (!inited) { Debug.Log("DungeonConfig 还未完成初始化。"); return null; } if (configs.ContainsKey(id)) { return configs[id]; } DungeonConfig config = null; if (rawDatas.ContainsKey(id)) { config = configs[id] = new DungeonConfig(rawDatas[id]); rawDatas.Remove(id); } return config; } public static DungeonConfig 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<DungeonConfig> GetValues() { var values = new List<DungeonConfig>(); 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 +"/Dungeon.txt"; } else { path = AssetVersionUtility.GetAssetFilePath("config/Dungeon.txt"); } var tempConfig = new DungeonConfig(); 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 DungeonConfig(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 DungeonConfig(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/DungeonConfig.cs.meta
@@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: 2ba0eb2bd821fca4884c500add41380d timeCreated: 1557892172 timeCreated: 1557978286 licenseType: Pro MonoImporter: serializedVersion: 2 Core/GameEngine/Model/Config/TaskFeedbackConfig.cs
@@ -1,6 +1,6 @@ //-------------------------------------------------------- // [Author]: Fish // [ Date ]: Wednesday, May 15, 2019 // [ Date ]: Thursday, May 16, 2019 //-------------------------------------------------------- using System.Collections.Generic; @@ -19,8 +19,10 @@ public readonly string equips; public readonly string items; public readonly string sideTasks; public readonly string reikiRoot; public readonly int[] succGuide; public readonly int[] failGuide; public readonly int[] failFuncs; public readonly string remind; public TaskFeedbackConfig() @@ -45,21 +47,30 @@ sideTasks = tables[5]; string[] succGuideStringArray = tables[6].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); reikiRoot = tables[6]; string[] succGuideStringArray = tables[7].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); succGuide = new int[succGuideStringArray.Length]; for (int i=0;i<succGuideStringArray.Length;i++) { int.TryParse(succGuideStringArray[i],out succGuide[i]); } string[] failGuideStringArray = tables[7].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); string[] failGuideStringArray = tables[8].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); failGuide = new int[failGuideStringArray.Length]; for (int i=0;i<failGuideStringArray.Length;i++) { int.TryParse(failGuideStringArray[i],out failGuide[i]); } remind = tables[8]; string[] failFuncsStringArray = tables[9].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); failFuncs = new int[failFuncsStringArray.Length]; for (int i=0;i<failFuncsStringArray.Length;i++) { int.TryParse(failFuncsStringArray[i],out failFuncs[i]); } remind = tables[10]; } catch (Exception ex) { Core/GameEngine/Model/Config/TaskFeedbackConfig.cs.meta
@@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: b80a883f246077d46ab59d6938182ec9 timeCreated: 1557911827 timeCreated: 1557997420 licenseType: Pro MonoImporter: serializedVersion: 2 Core/GameEngine/Model/Config/TaskFeedbackFuncConfig.cs
New file @@ -0,0 +1,208 @@ //-------------------------------------------------------- // [Author]: Fish // [ Date ]: Thursday, May 16, 2019 //-------------------------------------------------------- using System.Collections.Generic; using System.IO; using System.Threading; using System; using UnityEngine; [XLua.LuaCallCSharp] public partial class TaskFeedbackFuncConfig { public readonly int id; public readonly string name; public readonly int jump; public readonly int guide; public TaskFeedbackFuncConfig() { } public TaskFeedbackFuncConfig(string input) { try { var tables = input.Split('\t'); int.TryParse(tables[0],out id); name = tables[1]; int.TryParse(tables[2],out jump); int.TryParse(tables[3],out guide); } catch (Exception ex) { DebugEx.Log(ex); } } static Dictionary<string, TaskFeedbackFuncConfig> configs = new Dictionary<string, TaskFeedbackFuncConfig>(); public static TaskFeedbackFuncConfig Get(string id) { if (!inited) { Debug.Log("TaskFeedbackFuncConfig 还未完成初始化。"); return null; } if (configs.ContainsKey(id)) { return configs[id]; } TaskFeedbackFuncConfig config = null; if (rawDatas.ContainsKey(id)) { config = configs[id] = new TaskFeedbackFuncConfig(rawDatas[id]); rawDatas.Remove(id); } return config; } public static TaskFeedbackFuncConfig 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<TaskFeedbackFuncConfig> GetValues() { var values = new List<TaskFeedbackFuncConfig>(); 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 +"/TaskFeedbackFunc.txt"; } else { path = AssetVersionUtility.GetAssetFilePath("config/TaskFeedbackFunc.txt"); } var tempConfig = new TaskFeedbackFuncConfig(); 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 TaskFeedbackFuncConfig(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 TaskFeedbackFuncConfig(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/TaskFeedbackFuncConfig.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: b2d416872ed7b3048a5b2d4696c3541f timeCreated: 1557994779 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/EquipGem/EquipStrengthModel.cs
@@ -645,7 +645,7 @@ { strengthLevel = EquipStrengthDic[serverPlace].StrengthLevel; } var stage = strengthLevel / 20; var stage = strengthLevel / 10; if (minStage > stage) { System/HazyRegion/HazyDemonKingModel.cs
@@ -47,7 +47,7 @@ public void OnPlayerLoginOk() { if (IsInDungeon) if (IsInDemonKingDungeon(PlayerDatas.Instance.baseData.MapID)) { var config = HazyRegionConfig.Get(hazyRegionModel.processingIncidentId); ClientDungeonStageUtility.RequestStartClientDungeon(config.dungeonId, config.lineId); System/HazyRegion/HazyGrassModel.cs
@@ -56,7 +56,7 @@ public void OnPlayerLoginOk() { if (IsInDungeon) if (IsInGrassDungeon(PlayerDatas.Instance.baseData.MapID)) { var config = HazyRegionConfig.Get(hazyRegionModel.processingIncidentId); ClientDungeonStageUtility.RequestStartClientDungeon(config.dungeonId, config.lineId); System/MainInterfacePanel/TaskFeedbackFuncWin.cs
New file @@ -0,0 +1,117 @@ //-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, May 16, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class TaskFeedbackFuncWin : Window { [SerializeField] TaskFeedbackFunc[] m_Funcs; TaskFeedbackModel model { get { return ModelCenter.Instance.GetModel<TaskFeedbackModel>(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { for (int i = 0; i < m_Funcs.Length; i++) { var index = i; m_Funcs[i].button.AddListener(() => { OnFunc(index); }); } } protected override void OnPreOpen() { Display(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } #endregion void Display() { for (int i = 0; i < m_Funcs.Length; i++) { m_Funcs[i].button.gameObject.SetActive(i < model.taskFeedbackFuncs.Count); if (i < model.taskFeedbackFuncs.Count) { var config = TaskFeedbackFuncConfig.Get(model.taskFeedbackFuncs[i]); if (config != null) { m_Funcs[i].label.text = config.name; } } } } private void OnFunc(int index) { CloseImmediately(); if (index < model.taskFeedbackFuncs.Count) { var config = TaskFeedbackFuncConfig.Get(model.taskFeedbackFuncs[index]); if (config != null) { if (config.jump != 0) { WindowJumpMgr.Instance.WindowJumpTo((JumpUIType)config.jump); } else if (config.guide != 0) { var guideConfig = GuideConfig.Get(config.guide); if (guideConfig == null) { DebugEx.LogFormat("引导<color=#ff0000>{0}</color>未添加", config.guide); return; } switch ((GuideType)guideConfig.Type) { case GuideType.Functional: FunctionalGuideCenter.Instance.StartGuide(config.guide); break; default: NewBieCenter.Instance.StartNewBieGuide(config.guide); break; } } } } } [Serializable] public struct TaskFeedbackFunc { public Button button; public Text label; } } } System/MainInterfacePanel/TaskFeedbackFuncWin.cs.meta
New file @@ -0,0 +1,12 @@ fileFormatVersion: 2 guid: 4c045d6076e0f1f4abf90ccee2848dc9 timeCreated: 1557989419 licenseType: Pro MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: System/MainInterfacePanel/TaskFeedbackModel.cs
@@ -7,6 +7,8 @@ { Dictionary<int, TaskFeedback> m_TaskFeedbacks = new Dictionary<int, TaskFeedback>(); public readonly List<int> taskFeedbackFuncs = new List<int>(); ReikiRootModel reikiRootModel { get { return ModelCenter.Instance.GetModel<ReikiRootModel>(); } } PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } } TaskModel taskModel { get { return ModelCenter.Instance.GetModel<TaskModel>(); } } @@ -77,6 +79,25 @@ } } break; case TaskFeedbackType.ReikiPoint: { if (!string.IsNullOrEmpty(config.reikiRoot)) { var json = LitJson.JsonMapper.ToObject(config.reikiRoot); feedback.reikiRoots = new Dictionary<int, List<int[]>>(); foreach (var jobKey in json.Keys) { var job = int.Parse(jobKey); var intArray = LitJson.JsonMapper.ToObject<int[][]>(json[jobKey].ToJson()); feedback.reikiRoots.Add(job, new List<int[]>()); for (int i = 0; i < intArray.Length; i++) { feedback.reikiRoots[job].Add(intArray[i]); } } } } break; } m_TaskFeedbacks.Add(config.taskId, feedback); @@ -102,6 +123,7 @@ case TaskFeedbackType.Guide: case TaskFeedbackType.Equip: case TaskFeedbackType.ItemCount: case TaskFeedbackType.SkyTowerFightPoint: { int condition = 0; if (IsSatisfyCondition(feedback, out condition)) @@ -117,6 +139,12 @@ if (!string.IsNullOrEmpty(config.remind)) { SysNotifyMgr.Instance.ShowTip(config.remind); } if (config.failFuncs != null && config.failFuncs.Length > 0) { taskFeedbackFuncs.Clear(); taskFeedbackFuncs.AddRange(config.failFuncs); WindowCenter.Instance.Open<TaskFeedbackFuncWin>(); } if (config.failGuide != null && config.failGuide.Length > 0) @@ -143,6 +171,12 @@ { SysNotifyMgr.Instance.ShowTip(config.remind); } if (config.failFuncs != null && config.failFuncs.Length > 0) { taskFeedbackFuncs.Clear(); taskFeedbackFuncs.AddRange(config.failFuncs); WindowCenter.Instance.Open<TaskFeedbackFuncWin>(); } var index = feedback.IndexOfSideTasks(condition); if (config.failGuide != null && index >= 0 && index < config.failGuide.Length) @@ -168,6 +202,12 @@ if (!string.IsNullOrEmpty(config.remind)) { SysNotifyMgr.Instance.ShowTip(config.remind); } if (config.failFuncs != null && config.failFuncs.Length > 0) { taskFeedbackFuncs.Clear(); taskFeedbackFuncs.AddRange(config.failFuncs); WindowCenter.Instance.Open<TaskFeedbackFuncWin>(); } if (!IsSatisfySideTask(feedback.sideTasks, out condition)) { @@ -219,6 +259,20 @@ case TaskFeedbackType.SideTask: return IsSatisfySideTask(feedback.sideTasks, out condition); case TaskFeedbackType.ReikiPoint: { if (feedback.reikiRoots != null) { var job = PlayerDatas.Instance.baseData.Job; var reikiRoots = feedback.reikiRoots[job]; foreach (var reikiRoot in reikiRoots) { if (reikiRootModel.GetReikiRootPoint(reikiRoot[0]) < reikiRoot[1]) { return false; } } } } return reikiRootModel.GetReikiRootTotalPoint() >= config.condition; case TaskFeedbackType.Equip: { @@ -251,6 +305,15 @@ } return true; } case TaskFeedbackType.SkyTowerFightPoint: { var skyTowerConfig = SkyTowerConfig.Get(config.condition); if (skyTowerConfig != null) { return PlayerDatas.Instance.baseData.FightPoint >= skyTowerConfig.fightPower; } } break; } return false; } @@ -281,6 +344,7 @@ public List<int[]> sideTasks; public int[] equipCondition; public List<Item> items; public Dictionary<int, List<int[]>> reikiRoots; public int IndexOfSideTasks(int taskId) { @@ -309,6 +373,7 @@ Guide = 6, FightPowerSideTask = 7, ItemCount = 8, SkyTowerFightPoint = 9, } } System/Message/RichNormalEvent.cs
@@ -178,7 +178,26 @@ colorType = RichTextMgr.Inst.presentRichText.colorType == RichText.ColorType.Dark ? 0 : 1; } var fightPoint = PlayerDatas.Instance.baseData.FightPoint; var targetValue = int.Parse(dic["myfightpoint"]); var targetValue = 0; var infoArray = dic["myfightpoint"].Split('_'); if (infoArray.Length > 1) { switch (infoArray[0]) { case "skytower": var config = SkyTowerConfig.Get(infoArray[1]); if (config != null) { targetValue = config.fightPower; } break; } } else { int.TryParse(dic["myfightpoint"], out targetValue); } if (fightPoint < targetValue) { var label = dic.ContainsKey("replacelabel1") ? dic["replacelabel1"] : string.Empty; System/Mount/MountModel.cs
@@ -53,6 +53,8 @@ public bool IsOk = false; public List<int> ListEffectSkill = new List<int>(); private int HorseDanExp = 0;//坐骑丹经验 private int autoActiveHorseId = 0; private bool hasSendAutoActive = false; PackModel _playerPack; PackModel playerPack { get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel<PackModel>()); } @@ -72,7 +74,8 @@ { ToAddSorting(); playerPack.refreshItemCountEvent += OnItemRefreshEvent; MountWin.RedPointMountDan += RedPointMountDan; MountWin.RedPointMountDan += RedPointMountDan; FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; MountSkillAndItem(); MountNumberPreservation(); string str = FuncConfigConfig.Get("MountSkillEffect").Numerical1; @@ -98,6 +101,9 @@ integrationSkills.Add(effectValue, intArray[i]); } } funcConfig = FuncConfigConfig.Get("AutoActivePetHorse"); autoActiveHorseId = int.Parse(funcConfig.Numerical2); var _horseSkills = GetMountSkillAndItem.Keys; foreach (var skillId in _horseSkills) @@ -125,6 +131,7 @@ { MountWin.RedPointMountDan -= RedPointMountDan; playerPack.refreshItemCountEvent -= OnItemRefreshEvent; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; } @@ -132,6 +139,7 @@ public void OnBeforePlayerDataInitialize() { IsOk = false; hasSendAutoActive = false; _HorseIDNow = string.Empty; HorseIDNow = 0; _DicHorse.Clear(); @@ -286,8 +294,43 @@ } MountChangeRedPoint(); MountDanRed(); var config = HorseConfig.Get(autoActiveHorseId); if (config != null && id == config.UnlockItemID) { TryAutoActiveHorse(); } } } private void OnFuncStateChangeEvent(int funcId) { if (funcId == (int)FuncOpenEnum.Mounts) { TryAutoActiveHorse(); } } private void TryAutoActiveHorse() { if (IsOk && FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Mounts) && !_DicHorse.ContainsKey(autoActiveHorseId) && !hasSendAutoActive) { var horseConfig = HorseConfig.Get(autoActiveHorseId); if (horseConfig != null) { var itemCount = playerPack.GetItemCountByID(PackType.Item, horseConfig.UnlockItemID); if (itemCount >= horseConfig.UnlockItemCnt) { hasSendAutoActive = true; var pak = new CA501_tagPlayerActivateHorse(); pak.HorseID = (uint)autoActiveHorseId; GameNetSystem.Instance.SendInfo(pak); } } } } private void MountStoneRed()//坐骑魂石红点 { System/Pet/PetModel.cs
@@ -47,7 +47,7 @@ public int PetStoneItemId = 0;//用来记录坐骑魂石的ID public bool IsOk = false; public bool isServerPrepare { get; private set; } private int PetDanExp = 0;//灵宠丹经验 public List<int> ListEffectSkill = new List<int>(); PackModel _playerPack; @@ -59,6 +59,8 @@ public Dictionary<int, string> petLvNameDict { get; private set; } public int curPetId { get; set; } public int petUpgradeToolId { get; set; } public int autoActivePetId { get; private set; } public bool hasSendAutoActive { get; private set; } public event Action PlayerLoginOkData; private Dictionary<int, int> DicDefaultPet = new Dictionary<int, int>(); @@ -113,6 +115,9 @@ } } funcConfig = FuncConfigConfig.Get("AutoActivePetHorse"); autoActivePetId = int.Parse(funcConfig.Numerical1); var configs = PetInfoConfig.GetValues(); foreach (var config in configs) { @@ -148,7 +153,8 @@ public void OnBeforePlayerDataInitialize() { Wait = true; IsOk = false; isServerPrepare = false; hasSendAutoActive = false; _TagPetItem.Clear(); _DicPetBack.Clear(); PetNow = 0; @@ -167,7 +173,7 @@ { OnItemRefreshEvent(singPack.type, index, singPack.GetAllItems()[index].itemId); } IsOk = true; isServerPrepare = true; if (PlayerLoginOkData != null) { PlayerLoginOkData(); @@ -233,15 +239,41 @@ PetActivateRedPoint(); GetCultivateRedPoint(); var config = PetInfoConfig.Get(autoActivePetId); if (config != null && id == config.UnLockNeedItemID) { TryAutoActivePet(); } } } private void OnFuncStateChange(int obj) private void OnFuncStateChange(int funcId) { if (obj == 6) if (funcId == (int)FuncOpenEnum.Pet) { PetStoneRed(); PetActivateRedPoint(); GetCultivateRedPoint(); TryAutoActivePet(); } } private void TryAutoActivePet() { if (isServerPrepare && FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Pet) && !_DicPetBack.ContainsKey(autoActivePetId) && !hasSendAutoActive) { var petConfig = PetInfoConfig.Get(autoActivePetId); if (petConfig != null) { var itemCount = playerPack.GetItemCountByID(PackType.Item, petConfig.UnLockNeedItemID); if (itemCount >= petConfig.UnLockNeedItemCnt) { hasSendAutoActive = true; SendBreakPetLockQuest(autoActivePetId); } } } } @@ -645,7 +677,7 @@ } _petBack.ItemPlace = petIndex;//宠物位置索引 _DicPetBack.Add(petId, _petBack); if (Event_H0704Add != null && IsOk) if (Event_H0704Add != null && isServerPrepare) { Event_H0704Add(); } @@ -667,14 +699,14 @@ } _DicPetBack[petId].ItemPlace = petIndex; if (Event_H0704Update != null && IsOk) if (Event_H0704Update != null && isServerPrepare) { Event_H0704Update(petId); } if (_DicPetBack[petId].PetStatus == 1) { PetNow = petId; if (Event_SpiritPetPlay != null && IsOk) if (Event_SpiritPetPlay != null && isServerPrepare) { Event_SpiritPetPlay(petState); System/Role/ReikiRootModel.cs
@@ -77,6 +77,8 @@ public int selectReikiRoot { get; set; } public bool openFromTreasureSkill { get; set; } public readonly Redpoint redpoint = new Redpoint(101, 10103); public event Action onCacheFreePointRefresh; System/Role/ReikiRootWin.cs
@@ -22,6 +22,7 @@ [SerializeField] Text m_FreePoint; [SerializeField] Button m_Reset; [SerializeField] Text m_ResetLabel; [SerializeField] Button m_GetPath; [SerializeField] Button m_Confirm; [SerializeField] Button m_Rule; @@ -65,6 +66,7 @@ m_Reset.AddListener(OnReset); m_Confirm.AddListener(Confirm); m_Rule.AddListener(OnRule); m_GetPath.AddListener(GetPath); m_NumKeyboard.onValueChange.AddListener(OnPointValChange); m_NumKeyboard.onConfirm.AddListener((bool isOk) => @@ -130,6 +132,7 @@ } treasureSkillModel.newSatisfyActiveExpertDirty = false; model.openFromTreasureSkill = false; StopAllCoroutines(); } @@ -150,7 +153,7 @@ } } if (treasureSkillModel.newSatisfyActiveExpertDirty) if (treasureSkillModel.newSatisfyActiveExpertDirty && !model.openFromTreasureSkill) { if (!WindowCenter.Instance.IsOpen<ReikiRootQualityPromoteWin>()) { @@ -334,6 +337,13 @@ WindowCenter.Instance.Open<ReikiRootRuleWin>(); } private void GetPath() { RealmRecommandEquipGetWayWin.equipGetWays.Clear(); RealmRecommandEquipGetWayWin.equipGetWays.AddRange(model.reikiRootGetWays); WindowCenter.Instance.Open<RealmRecommandEquipGetWayWin>(); } private void OnFlyComplete() { StartCoroutine(Co_DisplayReikis()); System/Skill/ExpertSkillActiveRemindWin.cs
@@ -14,9 +14,11 @@ public class ExpertSkillActiveRemindWin : Window { [SerializeField] Text m_Reiki; [SerializeField] Text m_Remind; [SerializeField] Button m_GotoReiki; [SerializeField] Button m_GetPath; [SerializeField] Button m_Confirm; [SerializeField] Button m_Cancel; [SerializeField] Button m_Close; public static int skillId = 0; @@ -32,7 +34,8 @@ protected override void AddListeners() { m_GotoReiki.AddListener(GotoReiki); m_GetPath.AddListener(GetPath); m_Confirm.AddListener(Confirm); m_Cancel.AddListener(CloseClick); m_Close.AddListener(CloseClick); } @@ -65,27 +68,50 @@ var requireProperty = skillConfig.RequireProperty(); var requireValue = skillConfig.RequirePropertyValue(); var propertyConfig = PlayerPropertyConfig.Get(requireProperty); m_Remind.text = Language.Get("ExpertSkillActiveRemind", propertyConfig.Name, requireValue); if (reikiRootModel.freePoint + reikiRootModel.GetReikiRootPoint(requireProperty) >= requireValue) var point = requireValue - reikiRootModel.GetReikiRootPoint(requireProperty); if (reikiRootModel.freePoint >= point) { m_GotoReiki.gameObject.SetActive(true); m_GetPath.gameObject.SetActive(false); m_Reiki.text = StringUtility.Contact(propertyConfig.Name, ":", requireValue); m_Reiki.color = UIHelper.GetUIColor(TextColType.Green, true); m_GotoReiki.gameObject.SetActive(false); m_Confirm.gameObject.SetActive(true); m_Cancel.gameObject.SetActive(true); m_Remind.gameObject.SetActive(true); } else { m_GotoReiki.gameObject.SetActive(false); m_GetPath.gameObject.SetActive(true); m_Reiki.text = StringUtility.Contact(propertyConfig.Name, ":", requireValue , Language.Get("ExpertSkillActiveRemind", point)); m_Reiki.color = UIHelper.GetUIColor(TextColType.Red, true); m_GotoReiki.gameObject.SetActive(true); m_Confirm.gameObject.SetActive(false); m_Cancel.gameObject.SetActive(false); m_Remind.gameObject.SetActive(false); } } } private void GetPath() private void Confirm() { TreasurePotential expert; if (model.TryGetPotential(skillId, out expert)) { var level = 0; model.TryGetExpertActiveLevel(skillId, out level); var skillConfig = SkillConfig.Get(skillId + level); var requireProperty = skillConfig.RequireProperty(); var requireValue = skillConfig.RequirePropertyValue(); var propertyConfig = PlayerPropertyConfig.Get(requireProperty); var point = requireValue - reikiRootModel.GetReikiRootPoint(requireProperty); if (reikiRootModel.freePoint >= point) { reikiRootModel.SendAddPoint(new byte[1] { (byte)requireProperty }, new ushort[1] { (ushort)point }); } } CloseImmediately(); RealmRecommandEquipGetWayWin.equipGetWays.Clear(); RealmRecommandEquipGetWayWin.equipGetWays.AddRange(reikiRootModel.reikiRootGetWays); WindowCenter.Instance.Open<RealmRecommandEquipGetWayWin>(); } private void GotoReiki() @@ -94,6 +120,7 @@ WindowCenter.Instance.CloseImmediately("ExpertSkillSelectWin"); var skillConfig = SkillConfig.Get(skillId); reikiRootModel.selectReikiRoot = skillConfig.RequireProperty(); reikiRootModel.openFromTreasureSkill = true; WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.RolePoint); } } System/Skill/ExpertSkillSelectWin.cs
@@ -238,7 +238,7 @@ m_Select.gameObject.SetActive(activeLevel > 0 && !satisfyActive && !used); m_Active.gameObject.SetActive(satisfyActive || error == 3); m_Active.SetColorful(m_ActiveLabel, satisfyActive); //m_Active.SetColorful(m_ActiveLabel, satisfyActive); if (satisfyActive || error == 3) { System/WindowJump/WindowJumpMgr.cs
@@ -713,6 +713,7 @@ SetJumpLogic<LootPreciousFrameWin>(_tagWinSearchModel.TABID); break; case JumpUIType.FairyAuction: case JumpUIType.FullServerAuction: SetJumpLogic<AuctionHouseWin>(_tagWinSearchModel.TABID); break; case JumpUIType.HazyRegion: @@ -1677,6 +1678,7 @@ Alchemy5 = 316, RealmEquip1 = 317, Alchemy6 = 318, FullServerAuction = 319, DhszTs = 1001,//定海神针功法提升界面 HyqTs = 1002,//皓月枪功法提升界面 Utility/ConfigInitiator.cs
@@ -292,7 +292,8 @@ normalTasks.Add(new ConfigInitTask("AlchemyCountConfig", () => { AlchemyCountConfig.Init(); }, () => { return AlchemyCountConfig.inited; })); normalTasks.Add(new ConfigInitTask("CollectNpcConfig", () => { CollectNpcConfig.Init(); }, () => { return CollectNpcConfig.inited; })); normalTasks.Add(new ConfigInitTask("TreasureChapterConfig", () => { TreasureChapterConfig.Init(); }, () => { return TreasureChapterConfig.inited; })); normalTasks.Add(new ConfigInitTask("TaskFeedbackConfig", () => { TaskFeedbackConfig.Init(); }, () => { return TaskFeedbackConfig.inited; })); normalTasks.Add(new ConfigInitTask("TaskFeedbackConfig", () => { TaskFeedbackConfig.Init(); }, () => { return TaskFeedbackConfig.inited; })); normalTasks.Add(new ConfigInitTask("TaskFeedbackFuncConfig", () => { TaskFeedbackFuncConfig.Init(); }, () => { return TaskFeedbackFuncConfig.inited; })); } static List<ConfigInitTask> doingTasks = new List<ConfigInitTask>();