Fix Mission Finish Bug:

-Fix possible issues that may not be completed when completing tasks of type "SubMissionFinishCnt"
This commit is contained in:
Somebody
2024-07-06 14:23:26 +08:00
parent da5d60fbb3
commit d8f144f06f
2 changed files with 3 additions and 23 deletions

View File

@@ -39,9 +39,6 @@ namespace EggLink.DanhengServer.Data.Config
public List<int>? GroupIDList { get; set; } = [];
public int SubRewardID { get; set; }
[JsonIgnore]
public OperationEnum Operation { get; set; } = OperationEnum.And;
[JsonIgnore]
public SubMissionTask<EnterFloorTaskInfo> Task { get; set; } = new();
[JsonIgnore]
@@ -65,11 +62,6 @@ namespace EggLink.DanhengServer.Data.Config
public void Loaded(int type) // 1 for EnterFloor, 2 for PropState
{
if (MainMissionID == 1000400)
{
Operation = OperationEnum.Or; // hacky way to get the Operation
}
if (type == 1)
{
try

View File

@@ -15,31 +15,19 @@ namespace EggLink.DanhengServer.Game.Mission.FinishType.Handler
public override void HandleFinishType(PlayerInstance player, SubMissionInfo info, object? arg)
{
var finish = info.Operation == OperationEnum.And;
var finishCount = 0;
foreach (var missionId in info.ParamIntList ?? [])
{
var status = player.MissionManager!.GetSubMissionStatus(missionId);
if (status != MissionPhaseEnum.Finish && status != MissionPhaseEnum.Cancel)
{
if (info.Operation == OperationEnum.And)
{
finish = false;
}
} else if (status == MissionPhaseEnum.Finish || status == MissionPhaseEnum.Cancel)
if (status == MissionPhaseEnum.Finish || status == MissionPhaseEnum.Cancel)
{
finishCount++;
if (info.Operation == OperationEnum.Or)
{
finish = true;
break;
}
}
}
if (finish)
if (finishCount >= info.Progress) // finish count >= progress, finish mission
{
player.MissionManager!.FinishSubMission(info.ID);
} else
} else // update progress
{
if (finishCount > 0)
{