using System; using System.Collections.Generic; //活动通用信息 public class GeneralActInfoManager : GameSystemManager { public override void Init() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEventOnRelogin; } public override void Release() { DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeEventOnRelogin; } private void OnBeforePlayerDataInitializeEventOnRelogin() { actSignInfos.Clear(); } #region 活动通用模版 活动签到奖励 public Dictionary> actSignInfos = new(); public event Action OnUpdateActSignInfosEvent; public void UpdateActSignPlayerInfo(HAA20_tagSCActSignPlayerInfo vNetData) { if (vNetData == null) return; if (!actSignInfos.TryGetValue(vNetData.ActType, out var actNumDict)) { actNumDict = new Dictionary(); actSignInfos[vNetData.ActType] = actNumDict; } actNumDict[vNetData.ActNum] = vNetData.SignAward; OnUpdateActSignInfosEvent?.Invoke(vNetData.ActType, vNetData.ActNum); } public bool TryGetSignAward(int actType, int actNum, out uint reward) { reward = 0; if (!actSignInfos.TryGetValue(actType, out var actNumDict)) return false; if (!actNumDict.TryGetValue(actNum, out reward)) return false; return true; } public bool IsDaySigned(int actType, int actNum, int dayNum) { if (dayNum < 1 || dayNum > 32) return false; if (!TryGetSignAward(actType, actNum, out uint signAward)) return false; return ((signAward >> dayNum) & 1u) == 1u; } // 活动如果有搭配签到,一般在活动包中会有ActType信息,如AA21封包中的ActType public void SendGetSignReward(int actType, int actNum) { string actTypeStr = actType.ToString(); var pack = new CA504_tagCMPlayerGetReward { RewardType = 70, DataEx = (uint)actNum, DataExStr = actTypeStr, DataExStrLen = (byte)actTypeStr.Length }; GameNetSystem.Instance.SendInfo(pack); } #endregion }