lcy
2026-05-15 b73d85ebb89ab3e9912d0c7a26f61b8a74bd7bde
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
using System;
using System.Collections.Generic;
using LitJson;
 
public class SuperVipManager : GameSystemManager<SuperVipManager>
{
    /// <summary>渠道门槛配置 {渠道名: 累充金额/元}</summary>
    public Dictionary<string, int> channelThresholdDict = new Dictionary<string, int>();
    /// <summary>客服领取奖励列表 [[物品ID, 个数], ...]</summary>
    public int[][] customerServiceRewards;
 
    /// <summary>SuperVIP入口红点</summary>
    public Redpoint superVipRedpoint = new Redpoint(MainRedDot.SuperVIPRepoint);
 
    public override void Init()
    {
        var config = FuncConfigConfig.Get("SuperVIP");
        channelThresholdDict = JsonMapper.ToObject<Dictionary<string, int>>(config.Numerical1);
        customerServiceRewards = JsonMapper.ToObject<int[][]>(config.Numerical2);
 
        // 每次重新登录后重置红点(重新上线后显示红点)
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEventOnRelogin;
        RechargeManager.Instance.rechargeChangeEvent += OnRechargeChangeEvent;
    }
 
    public override void Release()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeEventOnRelogin;
        RechargeManager.Instance.rechargeChangeEvent -= OnRechargeChangeEvent;
    }
 
    private void OnRechargeChangeEvent()
    {
        UpdateRedpoint();
    }
 
    /// <summary>
    /// 判定SuperVIP入口是否开启
    /// 条件: 当前渠道在配置表中 且 历史累充 >= 配置门槛(元) * 100
    /// </summary>
    public bool IsEntryOpen()
    {
        var appId = VersionConfig.Get().appId;
        if (!channelThresholdDict.TryGetValue(appId, out var thresholdYuan))
            return false;
        return RechargeManager.Instance.realRecharge >= thresholdYuan * 100;
    }
 
    /// <summary>
    /// 重新登录(数据初始化前),先清除红点状态再重新判断显示
    /// </summary>
    void OnBeforePlayerDataInitializeEventOnRelogin()
    {
        superVipRedpoint.state = RedPointState.None;
        UpdateRedpoint();
    }
 
    /// <summary>
    /// 根据入口开放状态更新红点
    /// </summary>
    public void UpdateRedpoint()
    {
        superVipRedpoint.state = IsEntryOpen() ? RedPointState.Simple : RedPointState.None;
    }
 
    /// <summary>
    /// 清除红点(进入SuperVIPWin后调用)
    /// </summary>
    public void ClearRedpoint()
    {
        superVipRedpoint.state = RedPointState.None;
    }
}