[Bug1000268]修改引导时有几率卡死可能的原因

main
yurui 2024-10-21 17:09:56 +08:00
parent fa7fceb55c
commit c88a831761
1 changed files with 27 additions and 12 deletions

View File

@ -41,6 +41,10 @@ namespace Gameplay.Guide
/// </summary>
private int reactionID = ConditionReactor.INVALID_ALLOC_ID;
/// <summary>
/// 当前完成的引导id防止服务器没保存成功
/// </summary>
private int curCompleteId = 0;
/// <summary>
/// 特殊pv引导id
/// </summary>
private int pvGuideID = 1000;
@ -127,13 +131,18 @@ namespace Gameplay.Guide
if (IsGuiding)
return;
if (ConditionReactor.INVALID_ALLOC_ID != reactionID)
ConditionReactor.Instance.RemoveReaction(reactionID);
//if (ConditionReactor.INVALID_ALLOC_ID != reactionID)
//ConditionReactor.Instance.RemoveReaction(reactionID);
if (completeStepId == 0)
completeStepId = (int)Actor.Instance.Logic.GetCount((uint)LogicID.NewGuideProgress);
if (0 == completeStepId)
{
if (0 == curCompleteId)
curCompleteId = (int)Actor.Instance.Logic.GetCount((uint)LogicID.NewGuideProgress);
}
else
curCompleteId = completeStepId;
int groupId = GetGuideGroupId(completeStepId);
int groupId = GetGuideGroupId(curCompleteId);
if (!dicGuideCfg.TryGetValue(groupId, out LinkedList<DataGuideCfg> linkCfg))
return;
@ -145,7 +154,7 @@ namespace Gameplay.Guide
return;
}
reactionID = ConditionReactor.Instance.AddReaction(curGroup.CurStep.Cfg.BeginCondition, OnBeginGuide);
//reactionID = ConditionReactor.Instance.AddReaction(curGroup.CurStep.Cfg.BeginCondition, OnBeginGuide);
}
catch (Exception e)
{
@ -171,6 +180,7 @@ namespace Gameplay.Guide
return;
}
curCompleteId = curGroup.CurStep.Cfg.Id;
NetHelper.SaveGuideProgress((uint)curGroup.CurStep.Cfg.Id); // 完成引导步骤,保存服务器
DebugUtil.Log($"<color=#00FA9A>完成引导步骤服务器保存引导id:{curGroup.CurStep.Cfg.Id}</color>");
queueTime.Clear();
@ -244,6 +254,7 @@ namespace Gameplay.Guide
return;
}
curCompleteId = linkedCfg.Last.Value.Id;
NetHelper.SaveGuideProgress((uint)linkedCfg.Last.Value.Id); // 跳过引导步骤,保存服务器
DebugUtil.Log($"<color=#00FA9A>跳过引导组服务器保存引导id:{linkedCfg.Last.Value.Id}</color>");
EndGuide(false);
@ -258,6 +269,7 @@ namespace Gameplay.Guide
DebugUtil.Log("跳过所有引导");
GuideConfig guideConfig = TableManager.Instance.Tables.GuideConfig;
DataGuideCfg cfg = guideConfig.DataList[^1];
curCompleteId = cfg.Id;
NetHelper.SaveGuideProgress((uint)cfg.Id);
if (!isEditor &&
!IsPlayPVVideo &&
@ -289,9 +301,14 @@ namespace Gameplay.Guide
/// <returns></returns>
public bool CheckComplete(int guideId)
{
int curCompleteStepId = (int)Actor.Instance.Logic.GetCount((uint)LogicID.NewGuideProgress);
if (0 == curCompleteId)
{
int curCompleteStepId = (int)Actor.Instance.Logic.GetCount((uint)LogicID.NewGuideProgress);
return curCompleteStepId >= guideId;
return curCompleteStepId >= guideId;
}
return curCompleteId >= guideId;
}
/// <summary>
@ -442,8 +459,8 @@ namespace Gameplay.Guide
if (!conditionResult)
return;
ConditionReactor.Instance.RemoveReaction(reactionID);
this.reactionID = ConditionReactor.INVALID_ALLOC_ID;
//ConditionReactor.Instance.RemoveReaction(reactionID);
//this.reactionID = ConditionReactor.INVALID_ALLOC_ID;
if (IsGuiding)
return;
@ -451,8 +468,6 @@ namespace Gameplay.Guide
try
{
SetGuideState();
int completeStepId = (int)Actor.Instance.Logic.GetCount((uint)LogicID.NewGuideProgress);
DebugUtil.Log($"<color=#00FA9A>已完成的引导步骤id{completeStepId}开始引导组id:{curGroup.GroupId}</color>");
curGroup.BeginGuide();
}
catch (Exception e)