mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-03 04:36:03 +08:00
43 lines
1.7 KiB
C#
43 lines
1.7 KiB
C#
using EggLink.DanhengServer.Data;
|
|
using EggLink.DanhengServer.Enums.Mission;
|
|
using EggLink.DanhengServer.Enums.Quest;
|
|
using EggLink.DanhengServer.GameServer.Game.Player;
|
|
|
|
namespace EggLink.DanhengServer.GameServer.Game.Quest;
|
|
|
|
public class UnlockHandler(PlayerInstance player)
|
|
{
|
|
public PlayerInstance Player { get; } = player;
|
|
|
|
public bool GetUnlockStatus(int unlockId)
|
|
{
|
|
GameData.FuncUnlockDataData.TryGetValue(unlockId, out var unlockData);
|
|
if (unlockData == null) return false;
|
|
|
|
// judge
|
|
foreach (var condition in unlockData.Conditions)
|
|
switch (condition.Type)
|
|
{
|
|
case ConditionTypeEnum.WorldLevel:
|
|
if (Player.Data.WorldLevel < int.Parse(condition.Param)) return false; // less than it
|
|
break;
|
|
case ConditionTypeEnum.FinishMainMission:
|
|
if (Player.MissionManager?.GetMainMissionStatus(int.Parse(condition.Param)) !=
|
|
MissionPhaseEnum.Finish) return false;
|
|
break;
|
|
case ConditionTypeEnum.InStoryLine:
|
|
if (Player.StoryLineManager?.StoryLineData.CurStoryLineId != int.Parse(condition.Param))
|
|
return false;
|
|
break;
|
|
case ConditionTypeEnum.PlayerLevel:
|
|
if (Player.Data.Level < int.Parse(condition.Param)) return false;
|
|
break;
|
|
case ConditionTypeEnum.FinishSubMission:
|
|
if (Player.MissionManager?.GetSubMissionStatus(int.Parse(condition.Param)) !=
|
|
MissionPhaseEnum.Finish) return false;
|
|
break;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
} |