You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.9 KiB
90 lines
2.9 KiB
1 month ago
|
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;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|