hch
2026-01-26 aa84cb62bebb9c8a4e586bcc1ec28eb7a16a8860
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
using 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;
    }
}