using System; using System.Collections; using System.Collections.Generic; using System.Text.RegularExpressions; using UnityEngine; using UnityEngine.UI; using Cysharp.Threading.Tasks; public class SysNotifyMgr : SingletonMonobehaviour { /// /// 服务端下发的数据 /// private H0212_tagNotifyCode.tagNotifyStr[] sysNotifyMsg; private ArrayList tipInfoList = new ArrayList(); private Dictionary> notifyConditionDict = new Dictionary>(); public event Action sysNotifyEvent; public event Action OnSystemNotifyEvent; /// /// UserData去空格处理 /// public static Regex s_UserDataSpaceRegex = new Regex(@"'([0-9]+)':[ ]+\[(.*?)\]", RegexOptions.Singleline); private void Awake() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerDataInitializeEvent; // StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish; Co_Instance().Forget(); } private async UniTask Co_Instance() { await UniTask.Yield(); //TODO YYL // var instance = BattleHint.Instance; } private void LateUpdate() { #if UNITY_EDITOR if (Input.GetKeyDown(KeyCode.F3)) { ServerTipDetails.OpenGMPanel(); } #endif } protected override void OnDestroy() { base.OnDestroy(); DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= BeforePlayerDataInitializeEvent; // StageLoad.Instance.onStageLoadFinish -= OnStageLoadFinish; } private void OnStageLoadFinish() { ServerTipDetails.OnStageLoadFinish(); // TODO YYL // BattleHint.Instance.OnStageLoadFinish(); } private void BeforePlayerDataInitializeEvent() { ScrollTip.m_Hints.Clear(); ServerTipDetails.ClearHint(); } public void ReceiveNotifyCode(H0212_tagNotifyCode vNetData) { if (vNetData != null) { sysNotifyMsg = vNetData.Pars; tipInfoList.Clear(); for (int i = 0; i < sysNotifyMsg.Length; i++) { if (sysNotifyMsg[i].Len != 0) { var _msg = sysNotifyMsg[i].Msg; _msg = _msg.Replace(" ", string.Empty); tipInfoList.Add(_msg); } else { tipInfoList.Add(sysNotifyMsg[i].MsgInt); } } if (sysNotifyEvent != null) { sysNotifyEvent(vNetData.Msg, tipInfoList); } GetSysMsg(vNetData.Msg); } } void GetSysMsg(string key) { ///根据key从系统信息表取到消息类型 SysInfoConfig cfg = SysInfoConfig.Get(key); if (cfg == null) { #if UNITY_EDITOR string hint = Language.Get("L1093", key); ScrollTip.ShowTip(hint); ChatManager.Instance.RevChatInfo(hint); #endif } else { if (!string.IsNullOrEmpty(cfg.richText)) { if (notifyConditionDict.ContainsKey(cfg.key)) { try { if (!notifyConditionDict[cfg.key](cfg.key, tipInfoList)) { return; } } catch (Exception e) { Debug.Log(e.StackTrace); } } AnalysisSysmsg(cfg); } if (OnSystemNotifyEvent != null) { OnSystemNotifyEvent(cfg.key); } } } public void RegisterCondition(string key, Func condition) { if (!notifyConditionDict.ContainsKey(key)) { notifyConditionDict.Add(key, condition); } } public void ShowTip(string key, params object[] msg) { SysInfoConfig cfg = SysInfoConfig.Get(key); if (cfg != null) { tipInfoList.Clear(); tipInfoList.AddRange(msg); AnalysisSysmsg(cfg); } else { Debug.LogError("未找到系统提示信息: " + key); } } void AnalysisSysmsg(SysInfoConfig cfg) { SysNotifySound(cfg.sound); SysNotifyFx(cfg.effect); SysNotifyRichText(cfg.type, cfg.richText, cfg.order); } void SysNotifySound(string msg) { //DesignDebug.Log("音效信息" + msg); } void SysNotifyFx(string msg) { //DesignDebug.Log("特效信息" + msg); } void SysNotifyRichText(int[] type, string msg, int order = 0) { if (type == null || type.Length == 0) { return; } for (int i = 0; i < type.Length; i++) { switch ((SysNotifyType)type[i]) { case SysNotifyType.SysFixedTip: case SysNotifyType.SysFixedTip1: case SysNotifyType.SysScrollTip: case SysNotifyType.SysIntervalFixedTip: case SysNotifyType.SysMarqueeTip: case SysNotifyType.SysRealmTip: // TODO YYL // if (!PreFightMission.Instance.IsFinished()) // { // continue; // } break; } switch ((SysNotifyType)type[i]) { case SysNotifyType.SysFixedTip: ServerTipDetails.DisplayNormalTip(msg, tipInfoList); break; case SysNotifyType.SysChatWin: ServerTipDetails.DisplayChatTip(msg, tipInfoList); break; case SysNotifyType.SysFixedTip1: case SysNotifyType.SysScrollTip: ScrollTip.ShowTip(msg, tipInfoList, order); break; case SysNotifyType.SysIntervalFixedTip: ServerTipDetails.ShowServerTip(msg, tipInfoList, order); break; case SysNotifyType.SysMarqueeTip: ServerTipDetails.ShowMarquee(msg, tipInfoList,order); break; case SysNotifyType.SysChanelTip: ChatManager.Instance.RevChatInfo(msg, tipInfoList); break; case SysNotifyType.SysFairyQuestionTip: ChatManager.Instance.RevChatInfo(msg, tipInfoList, ChatInfoType.FairyQuestion); break; case SysNotifyType.SysFairyTip: ChatManager.Instance.RevChatInfo(msg, tipInfoList, ChatInfoType.FairyTip); break; case SysNotifyType.SysTeamTip: ChatManager.Instance.RevChatInfo(msg, tipInfoList, ChatInfoType.TeamTip); break; case SysNotifyType.SysRealmTip: if (OnSysTipEvent != null) { OnSysTipEvent(type[i], msg, tipInfoList); } break; // TODO YYL // case SysNotifyType.SysEvenKill: // BattleHint.Instance.ReceiveEvenKill(msg, tipInfoList); // break; case SysNotifyType.SysFactionTip: ChatManager.Instance.RevChatInfo(msg, tipInfoList, ChatInfoType.default2); break; } } } #region 事件 public static event Action OnSysTipEvent; #endregion public enum SysNotifyType { SysFixedTip = 1,//固定提示 SysScrollTip = 2,//滚动提示 SysIntervalFixedTip = 4,//全服固定消息提示 SysMarqueeTip = 5,//跑马灯 SysChatWin = 6, //聊天位置的提示 SysEvenKill = 7,//上古战场连杀提示 SysFixedTip1 = 11,//固定提示2 SysChanelTip = 20,//系统频道显示 SysFairyQuestionTip = 31,//仙盟频道问答提示 SysFairyTip = 32,//仙盟频道信息提示 SysTeamTip = 41,//队伍频道提示 SysFactionTip = 51, //阵营频道提示 SysRealmTip = 100,//境界提示 //后续IL开发添加预设 default1 = 200, default2, default3, default4, default5, default6, default7, default8, default9, default10, } public int Compare(SystemHintData x, SystemHintData y) { if (x.order.CompareTo(y.order) != 0) { return -x.order.CompareTo(y.order); } return x.appendTime.CompareTo(y.appendTime); } } public class SystemHintData { public DateTime appendTime; public string message; public ArrayList extentionData; public int order; }