Core/GameEngine/Model/Config/HazyRegionConfig.cs
New file @@ -0,0 +1,228 @@ //-------------------------------------------------------- // [Author]: Fish // [ Date ]: Monday, April 08, 2019 //-------------------------------------------------------- using System.Collections.Generic; using System.IO; using System.Threading; using System; using UnityEngine; [XLua.LuaCallCSharp] public partial class HazyRegionConfig { public readonly int id; public readonly int incidentType; public readonly string name; public readonly int dungeonId; public readonly int lineId; public readonly int point; public readonly int alchemyLevel; public readonly int[] reward; public readonly string PortraitID; public HazyRegionConfig() { } public HazyRegionConfig(string input) { try { var tables = input.Split('\t'); int.TryParse(tables[0],out id); int.TryParse(tables[1],out incidentType); name = tables[2]; int.TryParse(tables[3],out dungeonId); int.TryParse(tables[4],out lineId); int.TryParse(tables[5],out point); int.TryParse(tables[6],out alchemyLevel); string[] rewardStringArray = tables[7].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries); reward = new int[rewardStringArray.Length]; for (int i=0;i<rewardStringArray.Length;i++) { int.TryParse(rewardStringArray[i],out reward[i]); } PortraitID = tables[8]; } catch (Exception ex) { DebugEx.Log(ex); } } static Dictionary<string, HazyRegionConfig> configs = new Dictionary<string, HazyRegionConfig>(); public static HazyRegionConfig Get(string id) { if (!inited) { Debug.Log("HazyRegionConfig 还未完成初始化。"); return null; } if (configs.ContainsKey(id)) { return configs[id]; } HazyRegionConfig config = null; if (rawDatas.ContainsKey(id)) { config = configs[id] = new HazyRegionConfig(rawDatas[id]); rawDatas.Remove(id); } return config; } public static HazyRegionConfig 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<HazyRegionConfig> GetValues() { var values = new List<HazyRegionConfig>(); 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 +"/HazyRegion.txt"; } else { path = AssetVersionUtility.GetAssetFilePath("config/HazyRegion.txt"); } var tempConfig = new HazyRegionConfig(); 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 HazyRegionConfig(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 HazyRegionConfig(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/HazyRegionConfig.cs.metacopy from System/HazyRegion/HazyRegionEventBehaviour.cs.meta copy to Core/GameEngine/Model/Config/HazyRegionConfig.cs.meta
File was copied from System/HazyRegion/HazyRegionEventBehaviour.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: f157de73adafe7e40943853257e03a6d timeCreated: 1554360030 guid: 3404c0f308cb2174bb7b93e12c3110bd timeCreated: 1554693663 licenseType: Pro MonoImporter: serializedVersion: 2 Core/NetworkPackage/ServerPack/HA3_Function/HA315_tagMCDailyActionCnt.cs
@@ -22,6 +22,8 @@ ActionInfo[i] = new tagMCDailyActionInfo(); TransBytes(out ActionInfo[i].ActionID, vBytes, NetDataType.DWORD); TransBytes(out ActionInfo[i].DayFinishCnt, vBytes, NetDataType.WORD); TransBytes(out ActionInfo[i].DayBuyTimes, vBytes, NetDataType.BYTE); TransBytes(out ActionInfo[i].DayItemTimes, vBytes, NetDataType.BYTE); TransBytes(out ActionInfo[i].WeekFinishCnt, vBytes, NetDataType.DWORD); } } @@ -30,6 +32,8 @@ { public uint ActionID; // ID public ushort DayFinishCnt; // 今日已完成次数 public byte DayBuyTimes; //今日购买次数 public byte DayItemTimes; //今日物品增加次数 public uint WeekFinishCnt; // 本周已完成次数 } System/CrossServerOneVsOne/CrossServerWin.cs
@@ -13,6 +13,7 @@ [SerializeField] Button closeBtn; [SerializeField] FunctionButton arenaFunc; [SerializeField] FunctionButton bossFunc; [SerializeField] FunctionButton m_HazyRegion; [SerializeField] FunctionButtonGroup funcGroup; #region Built-in protected override void BindController() @@ -26,6 +27,7 @@ rightBtn.AddListener(ClickRight); arenaFunc.AddListener(ClickArenaFunc); bossFunc.AddListener(ClickBossFunc); m_HazyRegion.AddListener(OpenHazyRegion); } protected override void OnPreOpen() @@ -69,6 +71,12 @@ WindowCenter.Instance.Open<CrossServerOneVsOneWin>(); } private void OpenHazyRegion() { CloseSubWindows(); WindowCenter.Instance.Open<HazyRegionWin>(); } private void ClickRight() { funcGroup.TriggerNext(); System/DailyQuest/DailyQuestData.cs
@@ -49,6 +49,13 @@ } } public struct DailyQuestTimes { public int completeTimes; public int dayBuyTimes; public int dayUseItemTimes; } public class DailyQuestOpenTime { public int id; System/DailyQuest/DailyQuestModel.cs
@@ -65,7 +65,7 @@ Dictionary<int, int> dungeonToDailyQuestTable = new Dictionary<int, int>(); Dictionary<int, int> dailyActionToDailyQuestTable = new Dictionary<int, int>(); List<DailyQuestActiveValueReward> dailyQuestActiveValueRewards = new List<DailyQuestActiveValueReward>(); Dictionary<int, int> dailyQuestCompletedTimes = new Dictionary<int, int>();//除了副本的其他任务放在这里 Dictionary<int, DailyQuestTimes> dailyQuestTimes = new Dictionary<int, DailyQuestTimes>();//除了副本的其他任务放在这里 Dictionary<int, DailyQuestOpenTime> dailyQuestOpenTimes = new Dictionary<int, DailyQuestOpenTime>(); Dictionary<int, Dictionary<int, List<int>>> questCalendar = new Dictionary<int, Dictionary<int, List<int>>>(); @@ -251,6 +251,16 @@ { case 11: return Math.Max(dailyQuestOpenTime.DayTimes, GetDailyQuestCompletedTimes(_dailyQuestId)); case 25: if (dailyQuestTimes.ContainsKey(config.RelatedID)) { return dailyQuestOpenTime.DayTimes + dailyQuestTimes[config.RelatedID].dayBuyTimes + dailyQuestTimes[config.RelatedID].dayUseItemTimes; } else { return dailyQuestOpenTime.DayTimes; } default: return dailyQuestOpenTime.DayReKind > 0 ? dailyQuestOpenTime.DayTimes : dailyQuestOpenTime.WeekTimes; } @@ -272,9 +282,9 @@ switch (config.RelatedType) { case 1: if (dailyQuestCompletedTimes.ContainsKey(config.RelatedID)) if (dailyQuestTimes.ContainsKey(config.RelatedID)) { return dailyQuestCompletedTimes[config.RelatedID]; return dailyQuestTimes[config.RelatedID].completeTimes; } else { @@ -297,9 +307,9 @@ public int GetDailyQuestCompletedNums(int relatedID) { if (dailyQuestCompletedTimes.ContainsKey(relatedID)) if (dailyQuestTimes.ContainsKey(relatedID)) { return dailyQuestCompletedTimes[relatedID]; return dailyQuestTimes[relatedID].completeTimes; } else { @@ -339,11 +349,19 @@ var dailyAction = _serverInfo.ActionInfo[i]; if (dailyAction.DayFinishCnt > 0) { dailyQuestCompletedTimes[(int)dailyAction.ActionID] = dailyAction.DayFinishCnt; dailyQuestTimes[(int)dailyAction.ActionID] = new DailyQuestTimes() { completeTimes = dailyAction.DayFinishCnt, dayBuyTimes = dailyAction.DayBuyTimes, dayUseItemTimes = dailyAction.DayItemTimes, }; } else { dailyQuestCompletedTimes[(int)dailyAction.ActionID] = (int)dailyAction.WeekFinishCnt; dailyQuestTimes[(int)dailyAction.ActionID] = new DailyQuestTimes() { completeTimes = (int)dailyAction.WeekFinishCnt, }; } if (dailyActionToDailyQuestTable.ContainsKey((int)dailyAction.ActionID)) System/HazyRegion/HazyRegionCyclicScroll.cs
@@ -36,7 +36,7 @@ { for (int i = 0; i < infiniteItems.Count; i++) { var behaviour = infiniteItems[i] as HazyRegionEventBehaviour; var behaviour = infiniteItems[i] as HazyRegionIncidentBehaviour; behaviour.alphaTween.SetStartState(); } @@ -46,7 +46,7 @@ for (int i = 0; i < infiniteItems.Count; i++) { var behaviour = infiniteItems[i] as HazyRegionEventBehaviour; var behaviour = infiniteItems[i] as HazyRegionIncidentBehaviour; behaviour.linerMove.duration = behaviour.alphaTween.duration; var fromX = content.anchoredPosition.x + width / 2 + cellSize.x; behaviour.linerMove.from = content.anchoredPosition.SetX(fromX); System/HazyRegion/HazyRegionEntranceBehaviour.cs
File was deleted System/HazyRegion/HazyRegionEntrancePanel.cs
New file @@ -0,0 +1,114 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class HazyRegionEntrancePanel : MonoBehaviour { [SerializeField] Text m_OpenTime; [SerializeField] Text m_Times; [SerializeField] Button m_BuyTimes; [SerializeField] Button m_Goto; HazyRegionModel model { get { return ModelCenter.Instance.GetModel<HazyRegionModel>(); } } DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } } private void Awake() { m_BuyTimes.AddListener(BuyTimes); m_Goto.AddListener(Goto); } public void Display() { DisplayOpenTime(); DisplayTimes(); } void DisplayTimes() { var totalTimes = dailyQuestModel.GetDailyQuestTotalTimes((int)DailyQuestType.HazyRegion); var completedTimes = dailyQuestModel.GetDailyQuestCompletedTimes((int)DailyQuestType.HazyRegion); var times = Mathf.Clamp(totalTimes - completedTimes, 0, totalTimes); m_Times.text = StringUtility.Contact(times, "/", totalTimes); } void DisplayOpenTime() { DailyQuestOpenTime dailyQuestOpenTime; if (dailyQuestModel.TryGetOpenTime((int)DailyQuestType.HazyRegion, out dailyQuestOpenTime)) { HourMinute hourMinute; if (dailyQuestOpenTime.TryGetNextOpenTime(out hourMinute)) { m_OpenTime.text = Language.Get("HazyRegionOpenTime", hourMinute.hourBegin.ToString("D2"), hourMinute.minuteBegin.ToString("D2"), hourMinute.hourEnd.ToString("D2"), hourMinute.minuteEnd.ToString("D2")); } } } private void Goto() { var error = 0; if (TryOpenHazyReion(out error)) { model.SendOpenHazyRegion(); } else { HandleErrorMessage(error); } } private void BuyTimes() { } bool TryOpenHazyReion(out int error) { error = 0; var questState = dailyQuestModel.GetQuestState((int)DailyQuestType.HazyRegion); if (questState != DailyQuestModel.DailyQuestState.Normal) { switch (questState) { case DailyQuestModel.DailyQuestState.OutTime: error = 1; break; case DailyQuestModel.DailyQuestState.CanBuyTimes: error = 2; break; case DailyQuestModel.DailyQuestState.Completed: error = 3; break; } return false; } return true; } void HandleErrorMessage(int error) { switch (error) { case 1: break; case 2: break; case 3: break; } } public void Dispose() { } } } System/HazyRegion/HazyRegionEntrancePanel.cs.meta
System/HazyRegion/HazyRegionEventBehaviour.cs
File was deleted System/HazyRegion/HazyRegionIncidentBehaviour.cs
@@ -1,11 +1,40 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class HazyRegionIncidentBehaviour : MonoBehaviour public class HazyRegionIncidentBehaviour : ScrollItem { [SerializeField] HazyRegionCyclicScroll m_CyclicScroll; [SerializeField] UIAlphaTween m_AlphaTween; [SerializeField] UILinerMove m_LinerMove; [SerializeField] Image m_IncidentTitle; [SerializeField] Text m_DepletionPoint; [SerializeField] Image m_Bottom; [SerializeField] Image m_Icon; [SerializeField] Transform m_ContainerBoss; [SerializeField] Image m_BossName; [SerializeField] Text m_PlayerCount; [SerializeField] Transform m_ContainerCrossServer; [SerializeField] Transform m_ContainerItem; [SerializeField] ItemCell[] m_Items; [SerializeField] Transform m_ContainerPlaying; [SerializeField] Transform m_ContainerCompleted; [SerializeField] Transform m_ContainerSelect; public UIAlphaTween alphaTween { get { return m_AlphaTween; } } public UILinerMove linerMove { get { return m_LinerMove; } } public override void Display(object _data) { base.Display(_data); } } } System/HazyRegion/HazyRegionIncidentBehaviour.cs.meta
@@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: cdcd39451a860ce4692d08aab3ae1afb timeCreated: 1554371897 guid: f157de73adafe7e40943853257e03a6d timeCreated: 1554360030 licenseType: Pro MonoImporter: serializedVersion: 2 System/HazyRegion/HazyRegionIncidentPanel.cs
New file @@ -0,0 +1,87 @@ using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class HazyRegionIncidentPanel : MonoBehaviour { [SerializeField] HazyRegionCyclicScroll m_CyclicScroll; [SerializeField] Slider m_Slider; [SerializeField] Text m_Point; [SerializeField] Button m_Back; [SerializeField] Button m_Goto; List<int> incidents = new List<int>(); HazyRegionModel model { get { return ModelCenter.Instance.GetModel<HazyRegionModel>(); } } private void Awake() { m_Back.AddListener(OnBack); m_Goto.AddListener(Goto); } public void Display() { DisplayPoint(); DisplayIncidents(); } void DisplayIncidents() { incidents.Clear(); incidents.AddRange(model.GetAllIncidents()); incidents.Sort(Compare); m_CyclicScroll.Init(incidents); m_CyclicScroll.DisplayAnimation(); } void DisplayPoint() { var point = Mathf.Min(model.point, model.limitPoint); m_Point.text = StringUtility.Contact(point, "/", model.limitPoint); m_Slider.value = Mathf.Clamp01((float)point / model.limitPoint); } int Compare(int lhs, int rhs) { HazyRegionModel.Incident lhs_incident; HazyRegionModel.Incident rhs_incident; if (model.TryGetIncident(lhs, out lhs_incident) && model.TryGetIncident(rhs, out rhs_incident)) { if (lhs_incident.type != rhs_incident.type) { return lhs_incident.type.CompareTo(rhs_incident.type); } var type = lhs_incident.type; switch (type) { case HazyRegionModel.IncidentType.Boss: break; case HazyRegionModel.IncidentType.GrassLand: break; } } return 0; } private void OnBack() { } private void Goto() { } public void Dispose() { m_CyclicScroll.Dispose(); } } } System/HazyRegion/HazyRegionIncidentPanel.cs.meta
File was renamed from System/HazyRegion/HazyRegionEventBehaviour.cs.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 guid: f157de73adafe7e40943853257e03a6d timeCreated: 1554360030 guid: cdcd39451a860ce4692d08aab3ae1afb timeCreated: 1554371897 licenseType: Pro MonoImporter: serializedVersion: 2 System/HazyRegion/HazyRegionModel.cs
@@ -1,17 +1,40 @@ using System.Collections; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Snxxz.UI { public class HazyRegionModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk { List<Incident> m_Incidents = new List<Incident>(); Dictionary<int, Incident> m_Incidents = new Dictionary<int, Incident>(); public int limitPoint { get; private set; } public int point { get; private set; } public bool playing { get; private set; } public bool isServerPrepare { get; private set; } int m_SelectIncident; public int selectIncident { get { return m_SelectIncident; } set { if (m_SelectIncident != value) { m_SelectIncident = value; if (selectIncidentRefresh != null) { selectIncidentRefresh(); } } } } public event Action selectIncidentRefresh; public override void Init() { ParseConfig(); } public void OnBeforePlayerDataInitialize() @@ -30,15 +53,33 @@ } public void ReceivePackage() void ParseConfig() { } public bool TryGetIncident(int id, out Incident incident) { return m_Incidents.TryGetValue(id, out incident); } public ICollection<int> GetAllIncidents() { return m_Incidents.Keys; } public void SendBackHazyRegion() { } public class Incident public void SendOpenHazyRegion() { public int type; public IncidentState state; } public void ReceivePackage() { } public enum IncidentState @@ -47,6 +88,21 @@ Processing, Complete, } public enum IncidentType { Precious, Adventure, Boss, GrassLand, } public class Incident { public int id; public IncidentType type; public IncidentState state; } } } System/HazyRegion/HazyRegionWin.cs
@@ -14,8 +14,8 @@ public class HazyRegionWin : Window { [SerializeField] HazyRegionEntranceBehaviour m_EntranceBehaviour; [SerializeField] HazyRegionIncidentBehaviour m_IncidentBehaviour; [SerializeField] HazyRegionEntrancePanel m_EntrancePanel; [SerializeField] HazyRegionIncidentPanel m_IncidentPanel; HazyRegionStage m_Stage = HazyRegionStage.Entrance; HazyRegionStage stage @@ -28,8 +28,10 @@ switch (m_Stage) { case HazyRegionStage.Entrance: CloseHazyRegionEntrance(); break; case HazyRegionStage.Playing: CloseHazyRegionIncident(); break; } @@ -38,13 +40,17 @@ switch (m_Stage) { case HazyRegionStage.Entrance: OpenHazyRegionEntrance(); break; case HazyRegionStage.Playing: OpenHazyRegionIncident(); break; } } } } HazyRegionModel model { get { return ModelCenter.Instance.GetModel<HazyRegionModel>(); } } #region Built-in protected override void BindController() @@ -57,12 +63,25 @@ protected override void OnPreOpen() { m_Stage = HazyRegionStage.Entrance; m_EntrancePanel.gameObject.SetActive(false); m_IncidentPanel.gameObject.SetActive(false); } protected override void OnActived() { base.OnActived(); m_Stage = model.playing ? HazyRegionStage.Playing : HazyRegionStage.Entrance; switch (stage) { case HazyRegionStage.Entrance: OpenHazyRegionEntrance(); break; case HazyRegionStage.Playing: OpenHazyRegionIncident(); break; } } protected override void OnAfterOpen() @@ -71,6 +90,8 @@ protected override void OnPreClose() { m_EntrancePanel.Dispose(); m_IncidentPanel.Dispose(); } protected override void OnAfterClose() @@ -78,8 +99,24 @@ } #endregion void Display() void OpenHazyRegionEntrance() { m_EntrancePanel.Display(); } void OpenHazyRegionIncident() { m_IncidentPanel.Display(); } void CloseHazyRegionIncident() { m_IncidentPanel.Dispose(); } void CloseHazyRegionEntrance() { m_EntrancePanel.Dispose(); } enum HazyRegionStage Utility/EnumHelper.cs
@@ -291,6 +291,7 @@ CrossServerPk = 31, AllianceBoss1 = 32, AllianceBoss2 = 33, HazyRegion = 35, //JadeDynastyBoss = 32,--诛仙功能暂时关闭 //JadeDynastyTower = 33, }