using Sog; namespace Game; public abstract class AbstractLoopActivity : AbstractActivity { protected override void OnTick(PlayerOnGame player, ActivityType activityType, out bool changed) { changed = false; var now = GameServerUtils.GetTimeSecond(); changed = false; var groups = ActivityDescMgr.Instance.GetActivityDescByType(activityType); if (groups == null) { return; } ref var activityData = ref player.RoleData.ActivityInfo; //当前类型的活动存在 var index = -1; foreach (var desc in groups) { for (var i = 0; i < activityData.Count; i++) { if (activityData[i].ActID == desc.id) { index = i; break; } } } var newActId = groups[^1].id; //活动状态发生改变, if (index >= 0) { var oldActId = activityData[index].ActID; var state = ActivitySvc.GetActivityState(player, oldActId); var oldDesc = ActivityDescMgr.Instance.GetConfig(oldActId); //活动状态发生改变, if ((int)state != activityData[index].State) { OnStateChange(player, oldDesc.id, state); activityData[index].State = (int)state; //更新活动状态 changed = true; } //当活动结束之后,所有后续处理都需要在这个之前,否则任务数据没了 if (state == ActivityState.ActivityEnded) { RemoveTask(player, oldDesc.activityTask); RemoveTask(player, oldDesc.activityDailyTask); RemoveTask(player, oldDesc.activityWeekTask); DeleteActPayItemData(player,oldDesc.id); } //活动在有效期内 if (state == ActivityState.InProgress) { ref var info = ref activityData[index]; if (!AppTime.IsSameDay(info.RefreshTime, now)) { RefreshDaily(player, ref info); info.RefreshTime = now; changed = true; } } //玩法结束 if (state == ActivityState.GameplayEnded || state == ActivityState.ActivityEnded) { activityData.RemoveAt(index); changed = true; } } else { var state = ActivitySvc.GetActivityState(player, newActId); if (state == ActivityState.InProgress)////新活动开始 { AddActivity(player, newActId, (int)ActivityState.InProgress); OnStateChange(player, newActId, state); changed = true; } } } }