From 0537119a9d1cb2c87286a6bc3ff38157b4f510b3 Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期二, 20 一月 2026 15:50:56 +0800
Subject: [PATCH] 400 【常规】跑马灯 接入Gm广播消息封包

---
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA001_tagBroadCastInfo.cs.meta |   11 ++
 Main/Core/NetworkPackage/ServerPack/HA0_Sys/HA001_tagBroadCastInfo.cs.meta           |   11 ++
 Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs                                 |    1 
 Main/System/Message/GMNotify.cs.meta                                                 |   11 ++
 Main/Main.cs                                                                         |    1 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA001_tagBroadCastInfo.cs      |   14 +++
 Main/System/Message/GMNotify.cs                                                      |  118 +++++++++++++++++++++++++++++
 Main/Core/NetworkPackage/ServerPack/HA0_Sys/HA001_tagBroadCastInfo.cs                |   27 ++++++
 8 files changed, 194 insertions(+), 0 deletions(-)

diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA001_tagBroadCastInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA001_tagBroadCastInfo.cs
new file mode 100644
index 0000000..6bc84f7
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA001_tagBroadCastInfo.cs
@@ -0,0 +1,14 @@
+using UnityEngine;
+using System.Collections;
+
+//A0 01 Gm骞挎挱娑堟伅#tagBroadCastInfo
+
+public class DTCA001_tagBroadCastInfo : DtcBasic
+{
+    public override void Done(GameNetPackBasic vNetPack)
+    {
+        base.Done(vNetPack);
+        HA001_tagBroadCastInfo vNetData = vNetPack as HA001_tagBroadCastInfo;
+        GMNotifyManager.Instance.Notify(vNetData);
+    }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA001_tagBroadCastInfo.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA001_tagBroadCastInfo.cs.meta
new file mode 100644
index 0000000..198c9ed
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA0_Sys/DTCA001_tagBroadCastInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 42dceab20a12bc14da587223f4d76510
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
index de27332..8228824 100644
--- a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
+++ b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
@@ -147,6 +147,7 @@
         Register(typeof(HB161_tagSCFuncPresetInfoList), typeof(DTCB161_tagSCFuncPresetInfoList));
         Register(typeof(HB162_tagSCFuncPresetSwitchInfo), typeof(DTCB162_tagSCFuncPresetSwitchInfo));
         Register(typeof(HB163_tagSCBatPresetSwitchInfo), typeof(DTCB163_tagSCBatPresetSwitchInfo));
+        Register(typeof(HA001_tagBroadCastInfo), typeof(DTCA001_tagBroadCastInfo));
     }
 
     //涓诲伐绋嬫敞鍐屽皝鍖�
diff --git a/Main/Core/NetworkPackage/ServerPack/HA0_Sys/HA001_tagBroadCastInfo.cs b/Main/Core/NetworkPackage/ServerPack/HA0_Sys/HA001_tagBroadCastInfo.cs
new file mode 100644
index 0000000..084257c
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA0_Sys/HA001_tagBroadCastInfo.cs
@@ -0,0 +1,27 @@
+using UnityEngine;
+using System.Collections;
+
+//A0 01 Gm骞挎挱娑堟伅#tagBroadCastInfo
+
+public class HA001_tagBroadCastInfo : GameNetPackBasic {
+    public uint StartTime;
+    public uint EndTime;
+    public ushort Interval;    //鏃堕棿闂撮殧
+    public ushort MsgLen;
+    public string Msg;    //size = MsgLen
+    public byte IsDelOthers;    //鏄惁鍒犻櫎鍏朵粬鐨�
+
+    public HA001_tagBroadCastInfo () {
+        _cmd = (ushort)0xA001;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out StartTime, vBytes, NetDataType.DWORD);
+        TransBytes (out EndTime, vBytes, NetDataType.DWORD);
+        TransBytes (out Interval, vBytes, NetDataType.WORD);
+        TransBytes (out MsgLen, vBytes, NetDataType.WORD);
+        TransBytes (out Msg, vBytes, NetDataType.Chars, MsgLen);
+        TransBytes (out IsDelOthers, vBytes, NetDataType.BYTE);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HA0_Sys/HA001_tagBroadCastInfo.cs.meta b/Main/Core/NetworkPackage/ServerPack/HA0_Sys/HA001_tagBroadCastInfo.cs.meta
new file mode 100644
index 0000000..f9120ed
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA0_Sys/HA001_tagBroadCastInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8a5084f76f1b2d9469bcaebf5c3dbc79
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Main.cs b/Main/Main.cs
index 0e8361f..35335b9 100644
--- a/Main/Main.cs
+++ b/Main/Main.cs
@@ -103,6 +103,7 @@
         managers.Add(EquipRecordManager.Instance);
         managers.Add(MinggeManager.Instance);
         managers.Add(FuncPresetManager.Instance);
+        managers.Add(GMNotifyManager.Instance);
 
         foreach (var manager in managers)
         {
diff --git a/Main/System/Message/GMNotify.cs b/Main/System/Message/GMNotify.cs
new file mode 100644
index 0000000..e541c2e
--- /dev/null
+++ b/Main/System/Message/GMNotify.cs
@@ -0,0 +1,118 @@
+锘縰sing System;
+using System.Collections;
+using System.Collections.Generic;
+
+
+public class GMNotifyManager : GameSystemManager<GMNotifyManager>
+{
+    public override void Init()
+    {
+        GlobalTimeEvent.Instance.secondEvent += SecondEvent;
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEventOnRelogin;
+        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk;
+    }
+
+    public override void Release()
+    {
+        GlobalTimeEvent.Instance.secondEvent -= SecondEvent;
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEventOnRelogin;
+        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk;
+    }
+
+    public void OnBeforePlayerDataInitializeEventOnRelogin()
+    {
+        gmNotifies.Clear();
+        serverInited = false;
+    }
+
+    public void OnPlayerLoginOk()
+    {
+        serverInited = true;
+    }
+
+    private List<GMNotifyMessgae> gmNotifies = new List<GMNotifyMessgae>();
+
+    private ArrayList infoArray = new ArrayList();
+
+    private bool serverInited = false;
+
+    private void SecondEvent()
+    {
+        if (!serverInited)
+        {
+            return;
+        }
+        for (int i = 0; i < gmNotifies.Count; i++)
+        {
+            var _notify = gmNotifies[i];
+            if (!CheckNotify(_notify))
+            {
+                gmNotifies.RemoveAt(i);
+                _notify = null;
+                i--;
+                continue;
+            }
+            if (CheckSend())
+            {
+                if ((TimeUtility.ServerNow - _notify.nextNotifyTime).TotalSeconds >= 0)
+                {
+                    var _totalMinutes = (int)(TimeUtility.ServerNow - _notify.start).TotalMinutes;
+                    var _detalMinutes = (_totalMinutes / _notify.interval + 1) * _notify.interval;
+                    _notify.nextNotifyTime = _notify.start.AddTicks(_detalMinutes * TimeSpan.TicksPerMinute);
+                    Notify(_notify);
+                }
+            }
+        }
+    }
+
+    public void Notify(HA001_tagBroadCastInfo package)
+    {
+        if (package.IsDelOthers == 1)
+        {
+            gmNotifies.Clear();
+        }
+        gmNotifies.Add(new GMNotifyMessgae()
+        {
+            start = TimeUtility.GetTime(package.StartTime),
+            end = TimeUtility.GetTime(package.EndTime),
+            message = UIHelper.ServerStringTrim(package.Msg).Replace(@"\", string.Empty),
+            interval = package.Interval,
+            nextNotifyTime = TimeUtility.GetTime(package.StartTime),
+        });
+    }
+
+    private void Notify(GMNotifyMessgae _notify)
+    {
+        ServerTipDetails.ShowMarquee(_notify.message, null, 10);
+        ChatManager.Instance.AddSysData(_notify.message, infoArray, ChatChannel.World, false);
+    }
+
+    private bool CheckNotify(GMNotifyMessgae _notify)
+    {
+        if ((TimeUtility.ServerNow - _notify.end).TotalSeconds > 0)
+        {
+            return false;
+        }
+        return true;
+    }
+
+    private bool CheckSend()
+    {
+        if (StageManager.Instance.currentStage == StageName.Login)
+        {
+            return false;
+        }
+        return true;
+    }
+
+    public class GMNotifyMessgae
+    {
+        public DateTime start;
+        public DateTime end;
+        public DateTime nextNotifyTime;
+        public int interval;//鍒嗛挓
+        public string message = string.Empty;
+    }
+}
+
+
diff --git a/Main/System/Message/GMNotify.cs.meta b/Main/System/Message/GMNotify.cs.meta
new file mode 100644
index 0000000..d880cc3
--- /dev/null
+++ b/Main/System/Message/GMNotify.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f42b6a1b0c4602c47a26401533a82716
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

--
Gitblit v1.8.0