Skip to content

TriggerEncapsulation.QuestSystem ​

ChapterManager 双端 ​

命名空间 TriggerEncapsulation.QuestSystem

csharp
public static class ChapterManager

章节管理器 - 管理玩家的章节进度

方法 ​

BindUI 仅客户端 ​

csharp
public static void BindUI(IChapterUI ui)

绑定章节UI

UnbindUI 仅客户端 ​

csharp
public static void UnbindUI()

解绑章节UI

InitializeClient 仅客户端 ​

csharp
public static void InitializeClient()

客户端初始化

ShutdownClient 仅客户端 ​

csharp
public static void ShutdownClient()

客户端关闭

GetLocalPlayerChapterProgress 仅客户端 ​

csharp
public static ChapterProgress? GetLocalPlayerChapterProgress(IGameLink<GameDataQuestChapter> chapterLink)

获取本地玩家的章节进度

GetLocalPlayerAllChapterProgress 仅客户端 ​

csharp
public static IEnumerable<ChapterProgress> GetLocalPlayerAllChapterProgress()

获取本地玩家所有章节进度

GetLocalPlayerUnlockedChapters 仅客户端 ​

csharp
public static IEnumerable<ChapterProgress> GetLocalPlayerUnlockedChapters()

获取本地玩家已解锁的章节

GetLocalPlayerInProgressChapters 仅客户端 ​

csharp
public static IEnumerable<ChapterProgress> GetLocalPlayerInProgressChapters()

获取本地玩家进行中的章节

GetLocalPlayerCompletedChapters 仅客户端 ​

csharp
public static IEnumerable<ChapterProgress> GetLocalPlayerCompletedChapters()

获取本地玩家已完成的章节

GetChapterProgress 双端 ​

csharp
public static ChapterProgress? GetChapterProgress(Player player, IGameLink<GameDataQuestChapter> chapterLink)

获取玩家的章节进度

GetOrCreateChapterProgress 双端 ​

csharp
public static ChapterProgress GetOrCreateChapterProgress(Player player, IGameLink<GameDataQuestChapter> chapterLink)

获取或创建章节进度

GetAllChapterProgress 双端 ​

csharp
public static IEnumerable<ChapterProgress> GetAllChapterProgress(Player player)

获取玩家所有章节进度

GetUnlockedChapters 双端 ​

csharp
public static IEnumerable<ChapterProgress> GetUnlockedChapters(Player player)

获取玩家已解锁的章节

GetInProgressChapters 双端 ​

csharp
public static IEnumerable<ChapterProgress> GetInProgressChapters(Player player)

获取玩家进行中的章节

GetCompletedChapters 双端 ​

csharp
public static IEnumerable<ChapterProgress> GetCompletedChapters(Player player)

获取玩家已完成的章节

IsChapterUnlocked 双端 ​

csharp
public static bool IsChapterUnlocked(Player player, IGameLink<GameDataQuestChapter> chapterLink)

检查章节是否已解锁

IsChapterCompleted 双端 ​

csharp
public static bool IsChapterCompleted(Player player, IGameLink<GameDataQuestChapter> chapterLink)

检查章节是否已完成

InitializePlayerChapters 双端 ​

csharp
public static void InitializePlayerChapters(Player player, IEnumerable<IGameLink<GameDataQuestChapter>> allChapters)

初始化玩家的章节数据

  • player — 玩家
  • allChapters — 所有可用章节

ClearPlayerData 双端 ​

csharp
public static void ClearPlayerData(Player player)

清理玩家数据

ClearAll 双端 ​

csharp
public static void ClearAll()

清理所有数据

Initialize 仅服务端 ​

csharp
public static void Initialize()

注册事件监听

Shutdown 仅服务端 ​

csharp
public static void Shutdown()

取消事件监听

UnlockChapter 仅服务端 ​

csharp
public static CmdResult UnlockChapter(Player player, IGameLink<GameDataQuestChapter> chapterLink)

解锁章节

StartChapter 仅服务端 ​

csharp
public static CmdResult StartChapter(Player player, IGameLink<GameDataQuestChapter> chapterLink)

开始章节

ClaimChapterRewardsAsync 仅服务端 ​

csharp
public static ValueTask<CmdResult> ClaimChapterRewardsAsync(Player player, IGameLink<GameDataQuestChapter> chapterLink)

领取章节奖励

ChapterProgress 双端 ​

命名空间 TriggerEncapsulation.QuestSystem

csharp
public class ChapterProgress

章节进度追踪

构造函数 ​

ChapterProgress 双端 ​

csharp
public ChapterProgress(IGameLink<GameDataQuestChapter> link)

属性 ​

csharp
public IGameLink<GameDataQuestChapter> Link { get; }

章节链接

Cache 双端 ​

csharp
public GameDataQuestChapter Cache { get; }

章节数据缓存

Status 双端 ​

csharp
public ChapterStatus Status { get; }

章节状态

CompletedQuestCount 双端 ​

csharp
public int CompletedQuestCount { get; }

已完成的任务数量

TotalQuestCount 双端 ​

csharp
public int TotalQuestCount { get; }

总任务数量

Progress 双端 ​

csharp
public float Progress { get; }

完成进度 (0.0 - 1.0)

IsCompleted 双端 ​

csharp
public bool IsCompleted { get; }

是否已完成

CanClaimRewards 双端 ​

csharp
public bool CanClaimRewards { get; }

是否可以领取奖励

UnlockedTime 双端 ​

csharp
public DateTime? UnlockedTime { get; }

解锁时间

CompletedTime 双端 ​

csharp
public DateTime? CompletedTime { get; }

完成时间

ChapterStatus 双端 ​

命名空间 TriggerEncapsulation.QuestSystem

csharp
public enum ChapterStatus

章节状态

枚举值 ​

  • Locked — 锁定(前置条件未满足)
  • Unlocked — 已解锁,可以开始
  • InProgress — 进行中
  • Completed — 已完成(可领取奖励)
  • RewardsClaimed — 奖励已领取

IChapterUI 双端 ​

命名空间 TriggerEncapsulation.QuestSystem

csharp
public interface IChapterUI

章节UI接口 - 用于与游戏UI系统解耦

备注

实现此接口以接收章节系统的UI事件通知。 通过 ChapterManager.BindUI 绑定实现。 public class MyChapterUI : MonoBehaviour, IChapterUI { void Start() { ChapterManager.BindUI(this); } void OnDestroy() { ChapterManager.UnbindUI(); } public void OnChapterUnlocked(IGameLink<GameDataQuestChapter> chapter, Player player) { // 显示章节解锁动画 ShowUnlockAnimation(chapter.Data?.Name?.ToString()); } // ... 其他方法实现 }

方法 ​

OnChapterUnlocked 双端 ​

csharp
void OnChapterUnlocked(IGameLink<GameDataQuestChapter> chapter, Player player)

章节解锁时调用

  • chapter — 解锁的章节
  • player — 玩家

OnChapterProgressUpdated 双端 ​

csharp
void OnChapterProgressUpdated(IGameLink<GameDataQuestChapter> chapter, Player player, int completedQuests, int totalQuests)

章节进度更新时调用

  • chapter — 章节
  • player — 玩家
  • completedQuests — 已完成任务数
  • totalQuests — 总任务数

OnChapterCompleted 双端 ​

csharp
void OnChapterCompleted(IGameLink<GameDataQuestChapter> chapter, Player player)

章节完成时调用

  • chapter — 完成的章节
  • player — 玩家

OnChapterRewardsClaimed 双端 ​

csharp
void OnChapterRewardsClaimed(IGameLink<GameDataQuestChapter> chapter, Player player)

章节奖励领取时调用

  • chapter — 章节
  • player — 玩家

RefreshChapterList 双端 ​

csharp
void RefreshChapterList(IEnumerable<ChapterProgress> chapters)

刷新章节列表显示

  • chapters — 所有章节进度

ShowChapterDetails 双端 ​

csharp
void ShowChapterDetails(ChapterProgress chapter)

显示章节详情

  • chapter — 章节进度

HideChapterDetails 双端 ​

csharp
void HideChapterDetails()

隐藏章节详情

ShowChapterCompleteCelebration 双端 ​

csharp
void ShowChapterCompleteCelebration(ChapterProgress chapter, IEnumerable<string>? rewards = null)

显示章节完成庆祝界面

  • chapter — 完成的章节
  • rewards — 章节奖励描述

IQuestUI 双端 ​

命名空间 TriggerEncapsulation.QuestSystem

csharp
public interface IQuestUI

任务UI接口,用于在客户端显示任务相关信息

备注

游戏需要实现此接口来提供具体的UI表现。任务系统会通过此接口与UI层交互, 在任务状态变化时通知UI更新。 实现要点: 所有方法都应该是非阻塞的 UI实现应该处理重复调用的情况 实现应该支持多个任务同时追踪 注册方式: // 在游戏初始化时注册UI实现 QuestUI.Register(new MyQuestUI());

方法 ​

OnQuestAccepted 双端 ​

csharp
void OnQuestAccepted(QuestInfo info)

通知任务接受

  • info — 任务信息

OnQuestCompleted 双端 ​

csharp
void OnQuestCompleted(QuestInfo info)

通知任务完成(目标达成,等待提交)

  • info — 任务信息

OnQuestTurnedIn 双端 ​

csharp
void OnQuestTurnedIn(QuestInfo info)

通知任务提交成功

  • info — 任务信息

OnQuestFailed 双端 ​

csharp
void OnQuestFailed(QuestInfo info, string? reason)

通知任务失败

  • info — 任务信息
  • reason — 失败原因

OnQuestAbandoned 双端 ​

csharp
void OnQuestAbandoned(QuestInfo info)

通知任务放弃

  • info — 任务信息

OnObjectiveProgress 双端 ​

csharp
void OnObjectiveProgress(QuestInfo questInfo, QuestObjectiveInfo objectiveInfo)

通知目标进度更新

  • questInfo — 任务信息
  • objectiveInfo — 目标信息

OnObjectiveCompleted 双端 ​

csharp
void OnObjectiveCompleted(QuestInfo questInfo, QuestObjectiveInfo objectiveInfo)

通知目标完成

  • questInfo — 任务信息
  • objectiveInfo — 目标信息

OnTrackingChanged 双端 ​

csharp
void OnTrackingChanged(QuestInfo info, bool isTracked)

通知任务追踪状态变化

  • info — 任务信息
  • isTracked — 是否追踪

ShowQuestDetail 双端 ​

csharp
void ShowQuestDetail(QuestInfo info)

显示任务详情面板

  • info — 任务信息

HideQuestDetail 双端 ​

csharp
void HideQuestDetail()

隐藏任务详情面板

RefreshQuestList 双端 ​

csharp
void RefreshQuestList(IEnumerable<QuestInfo> quests)

刷新任务列表

  • quests — 任务列表

RefreshTracker 双端 ​

csharp
void RefreshTracker(IEnumerable<QuestInfo> trackedQuests)

刷新追踪面板

  • trackedQuests — 追踪的任务列表

Quest 双端 ​

命名空间 TriggerEncapsulation.QuestSystem

csharp
public class Quest : IExecutableObject, IExecutionContext, IGameObject, IGameObject<GameDataQuest>

任务运行时实例

备注

表示一个任务的运行时状态,包括任务进度、状态和目标。 任务实例由 QuestManager 创建和管理。 任务状态流程: Inactive → InProgress → Completed → TurnedIn ↓ ↓ Failed Abandoned

构造函数 ​

Quest 双端 ​

csharp
public Quest(IGameLink<GameDataQuest> link, Player player)

创建任务实例

  • link — 任务数据链接
  • player — 任务所属玩家

属性 ​

csharp
public IGameLink<GameDataQuest> Link { get; }

任务数据链接

Cache 双端 ​

csharp
public GameDataQuest Cache { get; }

任务数据缓存

Player 双端 ​

csharp
public Player Player { get; }

任务所属玩家

Status 双端 ​

csharp
public QuestStatus Status { get; }

任务当前状态

AcceptedTime 双端 ​

csharp
public DateTime? AcceptedTime { get; }

接受任务的时间

CompletedTime 双端 ​

csharp
public DateTime? CompletedTime { get; }

完成任务的时间

IsTracked 双端 ​

csharp
public bool IsTracked { get; }

是否正在追踪

AcceptCount 双端 ​

csharp
public int AcceptCount { get; }

任务接受次数(用于可重复任务)

Objectives 双端 ​

csharp
public IReadOnlyList<QuestObjective> Objectives { get; }

任务目标列表

RequiredObjectives 双端 ​

csharp
public IEnumerable<QuestObjective> RequiredObjectives { get; }

获取必要目标列表(非可选)

OptionalObjectives 双端 ​

csharp
public IEnumerable<QuestObjective> OptionalObjectives { get; }

获取可选目标列表

AllRequiredObjectivesCompleted 双端 ​

csharp
public bool AllRequiredObjectivesCompleted { get; }

所有必要目标是否已完成

TotalProgress 双端 ​

csharp
public float TotalProgress { get; }

获取任务总进度(0-1)

IsActive 双端 ​

csharp
public bool IsActive { get; }

任务是否处于活动状态

CanAccept 双端 ​

csharp
public bool CanAccept { get; }

任务是否可接受

CanTurnIn 双端 ​

csharp
public bool CanTurnIn { get; }

任务是否可提交

CanAbandon 双端 ​

csharp
public bool CanAbandon { get; }

任务是否可放弃

IsExpired 双端 ​

csharp
public bool IsExpired { get; }

任务是否已过期(超时)

RemainingTime 双端 ​

csharp
public TimeSpan? RemainingTime { get; }

剩余时间(如果有时限)

Parent 双端 ​

csharp
public IExecutableObject? Parent { get; }

Shared 双端 ​

csharp
public ExecutionParamShared Shared { get; }

Source 双端 ​

csharp
public ITarget Source { get; }

方法 ​

InitializeClientEventListeners 仅客户端 ​

csharp
public static void InitializeClientEventListeners()

初始化客户端事件监听

CleanupClientEventListeners 仅客户端 ​

csharp
public static void CleanupClientEventListeners()

清理客户端事件监听

RefreshQuestListUI 仅客户端 ​

csharp
public static void RefreshQuestListUI()

刷新任务列表UI

ShowQuestDetailUI 仅客户端 ​

csharp
public static void ShowQuestDetailUI(Quest quest)

显示任务详情

HideQuestDetailUI 仅客户端 ​

csharp
public static void HideQuestDetailUI()

隐藏任务详情

GetObjective 双端 ​

csharp
public QuestObjective? GetObjective(int index)

根据索引获取目标

GetObjectiveByCustomId 双端 ​

csharp
public QuestObjective? GetObjectiveByCustomId(string customId)

根据自定义ID获取目标

Accept 仅服务端 ​

csharp
public CmdResult Accept()

接受任务

返回: 操作结果

TurnInAsync 仅服务端 ​

csharp
public ValueTask<CmdResult> TurnInAsync()

提交任务

返回: 操作结果

Abandon 仅服务端 ​

csharp
public CmdResult Abandon()

放弃任务

返回: 操作结果

Fail 仅服务端 ​

csharp
public CmdResult Fail(string? reason = null)

使任务失败

  • reason — 失败原因

返回: 操作结果

SetTracked 仅服务端 ​

csharp
public void SetTracked(bool tracked)

设置追踪状态

UpdateObjectiveProgress 仅服务端 ​

csharp
public bool UpdateObjectiveProgress(int objectiveIndex, int delta = 1)

更新指定目标的进度

  • objectiveIndex — 目标索引
  • delta — 进度变化量

返回: 是否成功

UpdateObjectiveProgress 仅服务端 ​

csharp
public bool UpdateObjectiveProgress(string customId, int delta = 1)

更新自定义目标的进度

  • customId — 自定义目标ID
  • delta — 进度变化量

返回: 是否成功

CompleteObjective 仅服务端 ​

csharp
public void CompleteObjective(int objectiveIndex)

完成指定目标

  • objectiveIndex — 目标索引

CompleteObjective 仅服务端 ​

csharp
public void CompleteObjective(string customId)

完成自定义目标

  • customId — 自定义目标ID

CheckTimeout 仅服务端 ​

csharp
public bool CheckTimeout()

检查并处理超时

返回: 是否已超时

QuestInfo 双端 ​

命名空间 TriggerEncapsulation.QuestSystem

csharp
public class QuestInfo

任务信息(用于UI显示)

构造函数 ​

QuestInfo 双端 ​

csharp
public QuestInfo()

属性 ​

csharp
public required IGameLink<GameDataQuest> Link { get; init; }

任务数据链接

Name 双端 ​

csharp
public required string Name { get; init; }

任务名称

Description 双端 ​

csharp
public string? Description { get; init; }

任务描述

Category 双端 ​

csharp
public string? Category { get; init; }

任务分类

Status 双端 ​

csharp
public QuestStatus Status { get; init; }

任务状态

IsTracked 双端 ​

csharp
public bool IsTracked { get; init; }

是否正在追踪

TotalProgress 双端 ​

csharp
public float TotalProgress { get; init; }

总进度(0-1)

Objectives 双端 ​

csharp
public required List<QuestObjectiveInfo> Objectives { get; init; }

目标列表

RemainingTime 双端 ​

csharp
public TimeSpan? RemainingTime { get; init; }

剩余时间(如果有时限)

RequiredLevel 双端 ​

csharp
public int? RequiredLevel { get; init; }

等级要求

CanTurnIn 双端 ​

csharp
public bool CanTurnIn { get; init; }

是否可提交

CanAbandon 双端 ​

csharp
public bool CanAbandon { get; init; }

是否可放弃

QuestManager 双端 ​

命名空间 TriggerEncapsulation.QuestSystem

csharp
public static class QuestManager

任务管理器 - 管理玩家的所有任务

备注

QuestManager 是任务系统的核心管理类,负责: 创建和管理玩家的任务实例 处理任务进度更新 监听游戏事件自动更新任务进度 提供任务查询接口 任务管理器是服务端权威的,所有任务操作都在服务端进行验证。

方法 ​

Initialize 双端 ​

csharp
public static void Initialize()

初始化任务管理器

ClearPlayer 双端 ​

csharp
public static void ClearPlayer(Player player)

清理玩家的任务数据

Clear 双端 ​

csharp
public static void Clear()

清理所有数据

CreateQuest 双端 ​

csharp
public static Quest? CreateQuest(Player player, IGameLink<GameDataQuest> questLink)

创建任务实例(不自动接受)

  • player — 玩家
  • questLink — 任务数据链接

返回: 任务实例,如果已存在返回现有实例

GetQuest 双端 ​

csharp
public static Quest? GetQuest(Player player, IGameLink<GameDataQuest> questLink)

获取玩家的任务实例

  • player — 玩家
  • questLink — 任务数据链接

返回: 任务实例,不存在返回 null

GetAllQuests 双端 ​

csharp
public static IEnumerable<Quest> GetAllQuests(Player player)

获取玩家的所有任务

GetActiveQuests 双端 ​

csharp
public static IEnumerable<Quest> GetActiveQuests(Player player)

获取玩家的活动任务(进行中或已完成)

GetInProgressQuests 双端 ​

csharp
public static IEnumerable<Quest> GetInProgressQuests(Player player)

获取玩家的进行中任务

GetCompletedQuests 双端 ​

csharp
public static IEnumerable<Quest> GetCompletedQuests(Player player)

获取玩家的已完成任务(等待提交)

GetTrackedQuests 双端 ​

csharp
public static IEnumerable<Quest> GetTrackedQuests(Player player)

获取玩家正在追踪的任务

RemoveQuest 双端 ​

csharp
public static void RemoveQuest(Player player, Quest quest)

移除任务实例

NotifyQuestAvailable 双端 ​

csharp
public static void NotifyQuestAvailable(Player player, IGameLink<GameDataQuest> questLink)

标记任务可接受

IsQuestAvailable 双端 ​

csharp
public static bool IsQuestAvailable(Player player, IGameLink<GameDataQuest> questLink)

检查任务是否可接受

GetAvailableQuests 双端 ​

csharp
public static IEnumerable<IGameLink<GameDataQuest>> GetAvailableQuests(Player player)

获取玩家可接受的任务列表

AcceptQuest 双端 ​

csharp
public static CmdResult AcceptQuest(Player player, IGameLink<GameDataQuest> questLink)

接受任务(创建并接受)

TurnInQuestAsync 双端 ​

csharp
public static ValueTask<CmdResult> TurnInQuestAsync(Player player, IGameLink<GameDataQuest> questLink)

提交任务

AbandonQuest 双端 ​

csharp
public static CmdResult AbandonQuest(Player player, IGameLink<GameDataQuest> questLink)

放弃任务

RegisterEventListeners 仅服务端 ​

csharp
public static void RegisterEventListeners()

注册游戏事件监听器,用于自动更新任务进度

备注

在游戏初始化时调用此方法,自动监听以下事件: 单位死亡事件 - 更新击杀目标 物品变化事件 - 更新收集目标 注意:区域进入事件由各个任务实例单独注册到具体的区域对象上, 参见 RegisterRegionTriggers 和 UnregisterRegionTriggers。

UnregisterEventListeners 仅服务端 ​

csharp
public static void UnregisterEventListeners()

注销事件监听器

CheckAllTimeouts 仅服务端 ​

csharp
public static void CheckAllTimeouts()

检查所有玩家的任务超时

NotifyTalkToNpc 仅服务端 ​

csharp
public static void NotifyTalkToNpc(Player player, IGameLink<GameDataUnit> npcUnit)

通知与NPC对话完成

  • player — 玩家
  • npcUnit — NPC单位数据

NotifyCustomObjectiveProgress 仅服务端 ​

csharp
public static void NotifyCustomObjectiveProgress(Player player, string customId, int delta = 1)

通知自定义目标进度更新

  • player — 玩家
  • customId — 自定义目标ID
  • delta — 进度变化量

NotifyCustomObjectiveComplete 仅服务端 ​

csharp
public static void NotifyCustomObjectiveComplete(Player player, string customId)

通知自定义目标完成

  • player — 玩家
  • customId — 自定义目标ID

QuestObjective 双端 ​

命名空间 TriggerEncapsulation.QuestSystem

csharp
public class QuestObjective : IGameObject<GameDataQuestObjective>, IGameObject

任务目标运行时实例

备注

表示一个任务目标的运行时状态,包括当前进度和完成状态。 进度更新通过 UpdateProgress 方法进行, 该方法会自动触发相关事件并检查目标是否完成。

构造函数 ​

QuestObjective 双端 ​

csharp
public QuestObjective(IGameLink<GameDataQuestObjective> link, Quest quest, int index)

创建任务目标实例

  • link — 目标数据链接
  • quest — 所属任务
  • index — 目标在任务中的索引

属性 ​

csharp
public IGameLink<GameDataQuestObjective> Link { get; }

目标数据链接

Cache 双端 ​

csharp
public GameDataQuestObjective Cache { get; }

目标数据缓存

Quest 双端 ​

csharp
public Quest Quest { get; }

所属任务

Index 双端 ​

csharp
public int Index { get; }

目标在任务中的索引

CurrentProgress 双端 ​

csharp
public int CurrentProgress { get; }

当前进度

TargetCount 双端 ​

csharp
public int TargetCount { get; }

目标数量

IsCompleted 双端 ​

csharp
public bool IsCompleted { get; }

是否已完成

IsOptional 双端 ​

csharp
public bool IsOptional { get; }

是否可选目标

IsHidden 双端 ​

csharp
public bool IsHidden { get; }

是否隐藏

ObjectiveType 双端 ​

csharp
public QuestObjectiveType ObjectiveType { get; }

目标类型

ProgressPercentage 双端 ​

csharp
public float ProgressPercentage { get; }

获取进度百分比(0-1)

方法 ​

GetDescription 双端 ​

csharp
public string GetDescription()

获取描述文本

返回: 格式化的描述文本

UpdateProgress 仅服务端 ​

csharp
public bool UpdateProgress(int delta)

更新进度(服务端)

  • delta — 进度变化量

返回: 是否更新成功

SetProgress 仅服务端 ​

csharp
public void SetProgress(int progress)

设置进度(服务端)

  • progress — 新进度值

Complete 仅服务端 ​

csharp
public void Complete()

完成目标(服务端)

Reset 仅服务端 ​

csharp
public void Reset()

重置进度(服务端)

QuestObjectiveInfo 双端 ​

命名空间 TriggerEncapsulation.QuestSystem

csharp
public class QuestObjectiveInfo

任务目标信息(用于UI显示)

构造函数 ​

QuestObjectiveInfo 双端 ​

csharp
public QuestObjectiveInfo()

属性 ​

Index 双端 ​

csharp
public int Index { get; init; }

目标索引

ObjectiveType 双端 ​

csharp
public QuestObjectiveType ObjectiveType { get; init; }

目标类型

Description 双端 ​

csharp
public required string Description { get; init; }

目标描述

CurrentProgress 双端 ​

csharp
public int CurrentProgress { get; init; }

当前进度

TargetCount 双端 ​

csharp
public int TargetCount { get; init; }

目标数量

IsCompleted 双端 ​

csharp
public bool IsCompleted { get; init; }

是否已完成

IsOptional 双端 ​

csharp
public bool IsOptional { get; init; }

是否可选

IsHidden 双端 ​

csharp
public bool IsHidden { get; init; }

是否隐藏

ProgressPercentage 双端 ​

csharp
public float ProgressPercentage { get; }

进度百分比(0-1)

QuestSystem 双端 ​

命名空间 TriggerEncapsulation.QuestSystem

csharp
public class QuestSystem : IGameClass

任务系统注册类

构造函数 ​

QuestSystem 双端 ​

csharp
public QuestSystem()

方法 ​

OnRegisterGameClass 双端 ​

csharp
public static void OnRegisterGameClass()

注册游戏类时调用

QuestUI 双端 ​

命名空间 TriggerEncapsulation.QuestSystem

csharp
public static class QuestUI

任务UI管理器,用于注册和获取当前的任务UI实现

属性 ​

Current 双端 ​

csharp
public static IQuestUI? Current { get; }

当前的任务UI实现

方法 ​

Register 双端 ​

csharp
public static void Register(IQuestUI ui)

注册任务UI实现

Unregister 双端 ​

csharp
public static void Unregister()

注销任务UI实现

CreateInfo 双端 ​

csharp
public static QuestInfo CreateInfo(Quest quest)

从Quest实例创建QuestInfo

CreateObjectiveInfo 双端 ​

csharp
public static QuestObjectiveInfo CreateObjectiveInfo(QuestObjective objective)

从QuestObjective实例创建QuestObjectiveInfo

ChapterCompletionType 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Data

csharp
public enum ChapterCompletionType

章节完成类型

枚举值 ​

  • AllQuests — 完成所有任务
  • MinimumQuests — 完成指定的最少任务数
  • AnyQuest — 完成任意一个任务
  • FinalQuest — 完成最后一个任务(主线任务链模式)

GameDataQuest 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Data

csharp
public class GameDataQuest : GameDataCategory<GameDataQuest>, IGameDataCategory<GameDataQuest>, IGameData<GameDataQuest>, IGameData

任务数据定义

备注

任务系统是 WasiCore 框架中用于管理游戏任务的核心系统。 它提供了灵活的任务定义、追踪和奖励机制。 任务系统特性: 支持多种任务目标类型(击杀、收集、对话、探索等) 支持任务链和前置任务 与奖励系统无缝集成 支持任务超时和失败条件 UI 接口解耦,支持自定义 UI 实现 服务端权威,防止客户端作弊

构造函数 ​

GameDataQuest 双端 ​

csharp
public GameDataQuest(GameLink<GameDataQuest, GameDataQuest> link)

GameDataQuest 双端 ​

csharp
public GameDataQuest(IGameLink<GameDataQuest> link)

属性 ​

DisplayName 双端 ​

csharp
public LocalizedString? DisplayName { get; set; }

任务名称(支持本地化)

Description 双端 ​

csharp
public LocalizedString? Description { get; set; }

任务描述(支持本地化)

Category 双端 ​

csharp
public LocalizedString? Category { get; set; }

任务分类标签

备注

用于 UI 分类显示,例如 "主线"、"支线"、"日常" 等

RequiredLevel 双端 ​

csharp
public int? RequiredLevel { get; set; }

任务等级要求(可选)

Icon 双端 ​

csharp
public Icon? Icon { get; set; }

任务图标路径

Objectives 双端 ​

csharp
public List<IGameLink<GameDataQuestObjective>?>? Objectives { get; set; }

任务目标列表

备注

一个任务可以有多个目标。默认情况下,所有非可选目标都需要完成才能提交任务。 目标按照 DisplayOrder 排序显示。

Rewards 双端 ​

csharp
public List<IGameLink<GameDataReward>?>? Rewards { get; set; }

任务完成奖励

备注

任务提交时发放的奖励。使用框架的奖励系统 GameDataReward

Prerequisites 双端 ​

csharp
public List<IGameLink<GameDataQuest>?>? Prerequisites { get; set; }

前置任务列表

备注

只有完成所有前置任务后,此任务才能被接受

AcceptValidators 双端 ​

csharp
public Validator? AcceptValidators { get; set; }

接受任务的验证器

备注

用于验证玩家是否满足接受任务的条件,例如等级、物品持有等

CompleteValidators 双端 ​

csharp
public Validator? CompleteValidators { get; set; }

完成任务的验证器(额外条件)

备注

除了完成所有目标外,还需要满足此验证器才能提交任务

IsRepeatable 双端 ​

csharp
public bool IsRepeatable { get; set; }

是否可重复接受

RepeatCooldown 双端 ​

csharp
public TimeSpan? RepeatCooldown { get; set; }

重复接受的冷却时间

备注

仅在 IsRepeatable 为 true 时有效

MaxAcceptCount 双端 ​

csharp
public int MaxAcceptCount { get; set; }

最大可接受次数(0表示无限制)

TimeLimit 双端 ​

csharp
public TimeSpan? TimeLimit { get; set; }

任务时限

备注

如果设置了时限,任务必须在此时间内完成,否则自动失败

AutoAbandonOnFail 双端 ​

csharp
public bool AutoAbandonOnFail { get; set; }

失败时是否自动放弃

备注

如果为 true,任务失败时会自动从任务列表中移除

CanAbandon 双端 ​

csharp
public bool CanAbandon { get; set; }

是否允许放弃任务

Visibility 双端 ​

csharp
public QuestVisibility Visibility { get; set; }

任务可见性

AutoTrack 双端 ​

csharp
public bool AutoTrack { get; set; }

是否自动追踪

备注

接受任务后是否自动添加到追踪列表

OnAcceptEffect 双端 ​

csharp
public IGameLink<GameDataEffect>? OnAcceptEffect { get; set; }

接受任务时执行的效果

OnCompleteEffect 双端 ​

csharp
public IGameLink<GameDataEffect>? OnCompleteEffect { get; set; }

完成任务时执行的效果(提交前)

OnTurnInEffect 双端 ​

csharp
public IGameLink<GameDataEffect>? OnTurnInEffect { get; set; }

提交任务时执行的效果

OnFailEffect 双端 ​

csharp
public IGameLink<GameDataEffect>? OnFailEffect { get; set; }

任务失败时执行的效果

OnAbandonEffect 双端 ​

csharp
public IGameLink<GameDataEffect>? OnAbandonEffect { get; set; }

任务放弃时执行的效果

NextQuest 双端 ​

csharp
public IGameLink<GameDataQuest>? NextQuest { get; set; }

后续任务(简单模式)

备注

提交此任务后自动触发的任务(自动接受或可接受)。 如果需要条件分支,请使用 NextQuestBranches 代替。 如果同时设置了 NextQuest 和 NextQuestBranches, 优先使用 NextQuestBranches。

AutoAcceptNextQuest 双端 ​

csharp
public bool AutoAcceptNextQuest { get; set; }

是否自动接受后续任务

备注

仅在使用 NextQuest 时有效。 使用 NextQuestBranches 时,请在各分支中单独设置。

NextQuestBranches 双端 ​

csharp
public List<QuestBranch>? NextQuestBranches { get; set; }

后续任务分支列表(高级模式)

备注

用于创建复杂的任务链,根据不同条件触发不同的后续任务。 分支选择规则: 按优先级(Priority)从小到大检查各分支 选择第一个条件满足的分支 如果没有分支满足条件,选择默认分支(IsDefault = true) 如果没有默认分支,则不触发后续任务

Chapter 双端 ​

csharp
public IGameLink<GameDataQuestChapter>? Chapter { get; set; }

所属章节

备注

可选,用于将任务归类到特定章节中进行管理。

IsChapterMainQuest 双端 ​

csharp
public bool IsChapterMainQuest { get; set; }

是否为章节主线任务

备注

如果为 true,完成此任务将影响章节的主线进度。

QuestGiver 双端 ​

csharp
public IGameLink<GameDataUnit>? QuestGiver { get; set; }

任务给予者

备注

显示在任务信息中,用于UI显示和地图标记

QuestTurnIn 双端 ​

csharp
public IGameLink<GameDataUnit>? QuestTurnIn { get; set; }

任务提交者

备注

如果不设置,默认使用 QuestGiver

GameDataQuestChapter 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Data

csharp
public class GameDataQuestChapter : GameDataCategory<GameDataQuestChapter>, IGameDataCategory<GameDataQuestChapter>, IGameData<GameDataQuestChapter>, IGameData

任务章节 - 用于组织和管理一组相关任务

备注

任务章节提供了一种将多个任务组织成逻辑单元的方式, 适用于主线剧情、支线故事线等场景。 章节特性: 包含多个任务,按顺序或并行完成 支持章节完成奖励 支持章节前置条件 支持章节进度追踪

构造函数 ​

GameDataQuestChapter 双端 ​

csharp
public GameDataQuestChapter(GameLink<GameDataQuestChapter, GameDataQuestChapter> link)

GameDataQuestChapter 双端 ​

csharp
public GameDataQuestChapter(IGameLink<GameDataQuestChapter> link)

属性 ​

DisplayName 双端 ​

csharp
public LocalizedString? DisplayName { get; set; }

章节名称

Description 双端 ​

csharp
public LocalizedString? Description { get; set; }

章节描述

Icon 双端 ​

csharp
public Icon? Icon { get; set; }

章节图标

BackgroundImage 双端 ​

csharp
public Icon? BackgroundImage { get; set; }

章节背景图

Quests 双端 ​

csharp
public List<IGameLink<GameDataQuest>?>? Quests { get; set; }

章节内的任务列表

备注

任务按列表顺序显示,但不一定需要按顺序完成(取决于各任务的前置条件)。

CompletionType 双端 ​

csharp
public ChapterCompletionType CompletionType { get; set; }

章节完成类型

MinimumQuestsRequired 双端 ​

csharp
public int MinimumQuestsRequired { get; set; }

完成章节需要的最少任务数

备注

仅在 CompletionType 为 MinimumQuests 时有效。

Rewards 双端 ​

csharp
public List<IGameLink<GameDataReward>?>? Rewards { get; set; }

章节完成奖励

Prerequisites 双端 ​

csharp
public List<IGameLink<GameDataQuestChapter>?>? Prerequisites { get; set; }

前置章节列表

备注

只有完成所有前置章节后,此章节才会解锁。

NextChapter 双端 ​

csharp
public IGameLink<GameDataQuestChapter>? NextChapter { get; set; }

后续章节

SortOrder 双端 ​

csharp
public int SortOrder { get; set; }

章节排序顺序

ShowProgress 双端 ​

csharp
public bool ShowProgress { get; set; }

是否在UI中显示章节进度

GameDataQuestObjective 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Data

csharp
public abstract class GameDataQuestObjective : GameDataCategory<GameDataQuestObjective>, IGameDataCategory<GameDataQuestObjective>, IGameData<GameDataQuestObjective>, IGameData

任务目标数据基类

备注

任务目标定义了完成任务所需达成的条件。每个任务可以有多个目标, 目标之间可以是顺序关系或并行关系。 支持的目标类型: GameDataQuestObjectiveKill - 击杀目标 GameDataQuestObjectiveCollect - 收集物品 GameDataQuestObjectiveTalkTo - 对话 GameDataQuestObjectiveReachLocation - 到达区域 GameDataQuestObjectiveCustom - 自定义目标

构造函数 ​

GameDataQuestObjective 双端 ​

csharp
public GameDataQuestObjective(GameLink<GameDataQuestObjective, GameDataQuestObjective> link)

GameDataQuestObjective 双端 ​

csharp
public GameDataQuestObjective(IGameLink<GameDataQuestObjective> link)

属性 ​

ObjectiveType 双端 ​

csharp
public abstract QuestObjectiveType ObjectiveType { get; }

目标类型

Description 双端 ​

csharp
public LocalizedString? Description { get; set; }

目标描述(支持本地化)

备注

描述文本支持参数化,例如 "击杀 {0}/{1} 只狼", 其中 {0} 是当前进度,{1} 是目标数量

TargetCount 双端 ​

csharp
public int TargetCount { get; set; }

目标数量(默认为1)

备注

需要完成的次数或数量。例如击杀5只狼,收集10个物品等。

IsOptional 双端 ​

csharp
public bool IsOptional { get; set; }

是否可选目标

备注

可选目标不影响任务完成,但可能提供额外奖励

IsHidden 双端 ​

csharp
public bool IsHidden { get; set; }

是否隐藏目标

备注

隐藏目标不在UI中显示,但仍然追踪进度

DisplayOrder 双端 ​

csharp
public int DisplayOrder { get; set; }

目标显示顺序

OnCompleteEffect 双端 ​

csharp
public IGameLink<GameDataEffect>? OnCompleteEffect { get; set; }

目标完成时的效果(可选)

备注

当目标完成时,服务端会自动执行此效果。 可用于播放音效、显示提示等。

ProgressValidators 双端 ​

csharp
public Validator? ProgressValidators { get; set; }

目标进度更新时的验证器

备注

用于验证进度更新是否有效,例如验证击杀的是否是正确的怪物

GameDataQuestObjectiveCollect 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Data

csharp
public class GameDataQuestObjectiveCollect : GameDataQuestObjective, IGameData<GameDataQuestObjectiveCollect>, IGameData

收集目标 - 收集指定类型/数量的物品

备注

用于创建需要收集特定物品的任务目标。 // 收集10个苹果 var collectApples = new GameDataQuestObjectiveCollect { Description = new LocalizedString("收集 {0}/{1} 个苹果"), TargetItems = [appleItem.ToLink()], TargetCount = 10 }; // 收集任意草药5个 var collectHerbs = new GameDataQuestObjectiveCollect { Description = new LocalizedString("收集 {0}/{1} 种草药"), ItemCategory = "Herb", TargetCount = 5 };

构造函数 ​

GameDataQuestObjectiveCollect 双端 ​

csharp
public GameDataQuestObjectiveCollect(GameLink<GameDataQuestObjective, GameDataQuestObjectiveCollect> link)

GameDataQuestObjectiveCollect 双端 ​

csharp
public GameDataQuestObjectiveCollect(IGameLink<GameDataQuestObjectiveCollect> link)

属性 ​

ObjectiveType 双端 ​

csharp
public override QuestObjectiveType ObjectiveType { get; }

TargetItems 双端 ​

csharp
public List<IGameLink<GameDataItem>?>? TargetItems { get; set; }

目标物品类型列表

备注

收集列表中任意一种物品都会计入进度

ItemCategory 双端 ​

csharp
public string? ItemCategory { get; set; }

物品分类(替代具体物品列表)

备注

如果设置,收集该分类下的任意物品都计入进度

ConsumeOnComplete 双端 ​

csharp
public bool ConsumeOnComplete { get; set; }

是否在任务完成时消耗物品

备注

如果为 true,提交任务时会从玩家背包中移除这些物品

TrackCurrentInventory 双端 ​

csharp
public bool TrackCurrentInventory { get; set; }

是否实时追踪背包数量

备注

如果为 true,进度会根据玩家当前持有的物品数量更新(丢弃物品会减少进度)。 如果为 false,只追踪累计获得的数量。

csharp
public new IGameLink<GameDataQuestObjectiveCollect> Link { get; }

GameDataQuestObjectiveCustom 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Data

csharp
public class GameDataQuestObjectiveCustom : GameDataQuestObjective, IGameData<GameDataQuestObjectiveCustom>, IGameData

自定义目标 - 通过脚本自定义条件

备注

用于创建需要自定义逻辑的任务目标。 游戏代码需要手动调用 Quest.UpdateObjectiveProgress 来更新进度。 // 自定义目标:赢得比赛 var winRace = new GameDataQuestObjectiveCustom { Description = new LocalizedString("赢得比赛"), CustomId = "win_race", TargetCount = 1 }; // 在游戏逻辑中更新进度: // quest.UpdateObjectiveProgress("win_race", 1);

构造函数 ​

GameDataQuestObjectiveCustom 双端 ​

csharp
public GameDataQuestObjectiveCustom(GameLink<GameDataQuestObjective, GameDataQuestObjectiveCustom> link)

GameDataQuestObjectiveCustom 双端 ​

csharp
public GameDataQuestObjectiveCustom(IGameLink<GameDataQuestObjectiveCustom> link)

属性 ​

ObjectiveType 双端 ​

csharp
public override QuestObjectiveType ObjectiveType { get; }

CustomId 双端 ​

csharp
public string CustomId { get; set; }

自定义目标ID

备注

用于在代码中识别和更新此目标的进度

CompletionChecker 双端 ​

csharp
public Func<IExecutionContext, bool>? CompletionChecker { get; set; }

完成条件检查器

备注

用于检查目标是否完成的自定义逻辑。 返回 true 表示目标已完成。

ProgressGetter 双端 ​

csharp
public Func<IExecutionContext, int>? ProgressGetter { get; set; }

进度获取器

备注

用于获取当前进度的自定义逻辑。 返回当前进度值。

csharp
public new IGameLink<GameDataQuestObjectiveCustom> Link { get; }

GameDataQuestObjectiveKill 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Data

csharp
public class GameDataQuestObjectiveKill : GameDataQuestObjective, IGameData<GameDataQuestObjectiveKill>, IGameData

击杀目标 - 击杀指定类型/数量的单位

备注

用于创建需要击杀特定单位的任务目标。 // 击杀5只狼 var killWolves = new GameDataQuestObjectiveKill { Description = new LocalizedString("击杀 {0}/{1} 只狼"), TargetUnits = [wolfUnit.ToLink()], TargetCount = 5 }; // 击杀任意敌对单位10个 var killAnyEnemy = new GameDataQuestObjectiveKill { Description = new LocalizedString("击杀 {0}/{1} 个敌人"), TargetCount = 10, CountAnyEnemy = true }; // 在指定区域内击杀 var killInRegion = new GameDataQuestObjectiveKill { Description = new LocalizedString("在森林区域击杀 {0}/{1} 只狼"), TargetUnits = [wolfUnit.ToLink()], TargetCount = 3, RequiredRegions = [forestRegion1, forestRegion2] // 地编中预设的区域 };

构造函数 ​

GameDataQuestObjectiveKill 双端 ​

csharp
public GameDataQuestObjectiveKill(GameLink<GameDataQuestObjective, GameDataQuestObjectiveKill> link)

GameDataQuestObjectiveKill 双端 ​

csharp
public GameDataQuestObjectiveKill(IGameLink<GameDataQuestObjectiveKill> link)

属性 ​

ObjectiveType 双端 ​

csharp
public override QuestObjectiveType ObjectiveType { get; }

TargetUnits 双端 ​

csharp
public List<IGameLink<GameDataUnit>?>? TargetUnits { get; set; }

目标单位类型列表

备注

击杀列表中任意一种单位都会计入进度。 如果为空且 CountAnyEnemy 为 true,则击杀任意敌对单位都计入。

CountAnyEnemy 双端 ​

csharp
public bool CountAnyEnemy { get; set; }

是否计算任意敌对单位

备注

如果为 true,击杀任何敌对单位都会计入进度(忽略 TargetUnits)

KillSource 双端 ​

csharp
public KillSourceType KillSource { get; set; }

击杀来源限制

备注

定义哪些单位的击杀可以计入任务进度: MainUnitOnly - 仅玩家主控单位击杀 PlayerOwnedUnit - 玩家拥有的任意单位击杀 PlayerOrAlly - 玩家或其盟友的单位击杀 AnyUserPlayer - 任意真实用户玩家击杀 AnyPlayer - 任意玩家击杀

RequiredScenes 双端 ​

csharp
public List<IGameLink<GameDataScene>?>? RequiredScenes { get; set; }

击杀需要在指定场景列表中的任意一个内

备注

指定允许的场景列表。击杀必须发生在这些场景中的任意一个内才计入进度。 如果同时设置了 RequiredRegions,则需要同时满足场景和区域条件。 如果为 null 或空,则不限制击杀场景(除非设置了 RequiredRegions)。

RequiredRegions 双端 ​

csharp
public List<IPlacedRegion>? RequiredRegions { get; set; }

击杀需要在指定的预设区域内

备注

指定在地形编辑器中预设的区域列表。击杀必须发生在这些区域中的任意一个内才计入进度。 支持 PlacedRegionCircle 和 PlacedRegionRectangle 类型的区域。 如果为 null 或空,则不限制击杀区域。

csharp
public new IGameLink<GameDataQuestObjectiveKill> Link { get; }

GameDataQuestObjectiveReachLocation 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Data

csharp
public class GameDataQuestObjectiveReachLocation : GameDataQuestObjective, IGameData<GameDataQuestObjectiveReachLocation>, IGameData

到达区域目标 - 到达指定区域/位置

备注

用于创建需要玩家到达特定位置的任务目标。 玩家进入 TargetRegions 中任意一个区域即可完成目标。 // 到达森林区域(任意一个即可) var reachForest = new GameDataQuestObjectiveReachLocation { Description = new LocalizedString("探索森林深处"), TargetRegions = [forestRegion1, forestRegion2] // 地编中预设的区域 };

构造函数 ​

GameDataQuestObjectiveReachLocation 双端 ​

csharp
public GameDataQuestObjectiveReachLocation(GameLink<GameDataQuestObjective, GameDataQuestObjectiveReachLocation> link)

GameDataQuestObjectiveReachLocation 双端 ​

csharp
public GameDataQuestObjectiveReachLocation(IGameLink<GameDataQuestObjectiveReachLocation> link)

属性 ​

ObjectiveType 双端 ​

csharp
public override QuestObjectiveType ObjectiveType { get; }

TargetRegions 双端 ​

csharp
public List<IPlacedRegion>? TargetRegions { get; set; }

目标区域列表(地编预设区域)

备注

指定在地形编辑器中预设的区域列表。玩家进入这些区域中的任意一个即可完成目标。 支持 PlacedRegionCircle 和 PlacedRegionRectangle 类型的区域。 区域可以位于不同场景中。

RequiredStayDuration 双端 ​

csharp
public TimeSpan? RequiredStayDuration { get; set; }

需要停留的时间

备注

如果设置,玩家必须在区域内停留指定时间才算完成

CompleteOnReach 双端 ​

csharp
public bool CompleteOnReach { get; set; }

是否在到达后自动完成

备注

如果为 false,需要玩家在区域内进行交互才能完成

MarkerText 双端 ​

csharp
public LocalizedString? MarkerText { get; set; }

地图标记显示文本

csharp
public new IGameLink<GameDataQuestObjectiveReachLocation> Link { get; }

GameDataQuestObjectiveTalkTo 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Data

csharp
public class GameDataQuestObjectiveTalkTo : GameDataQuestObjective, IGameData<GameDataQuestObjectiveTalkTo>, IGameData

对话目标 - 与指定NPC进行对话

备注

用于创建需要与特定NPC对话的任务目标。 // 与村长对话 var talkToChief = new GameDataQuestObjectiveTalkTo { Description = new LocalizedString("与村长交谈"), TargetUnit = villageChief.ToLink() };

构造函数 ​

GameDataQuestObjectiveTalkTo 双端 ​

csharp
public GameDataQuestObjectiveTalkTo(GameLink<GameDataQuestObjective, GameDataQuestObjectiveTalkTo> link)

GameDataQuestObjectiveTalkTo 双端 ​

csharp
public GameDataQuestObjectiveTalkTo(IGameLink<GameDataQuestObjectiveTalkTo> link)

属性 ​

ObjectiveType 双端 ​

csharp
public override QuestObjectiveType ObjectiveType { get; }

TargetUnit 双端 ​

csharp
public IGameLink<GameDataUnit>? TargetUnit { get; set; }

目标NPC单位数据

TargetDisplayName 双端 ​

csharp
public LocalizedString? TargetDisplayName { get; set; }

目标NPC的显示名称(用于UI显示)

备注

如果不设置,将使用 TargetUnit 的名称

Conversation 仅客户端 ​

csharp
public IGameLink<GameDataConversation>? Conversation { get; set; }

对话内容(可选)

备注

如果设置,与NPC对话时会自动播放此对话内容

RequireConversationComplete 双端 ​

csharp
public bool RequireConversationComplete { get; set; }

是否需要完成特定对话

备注

如果为 true,必须完成 Conversation 才算完成目标。 如果为 false,只要接近NPC并交互即可。

csharp
public new IGameLink<GameDataQuestObjectiveTalkTo> Link { get; }

QuestBranch 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Data

csharp
public class QuestBranch

任务分支 - 定义条件性后续任务

备注

用于创建复杂的任务链,根据不同条件触发不同的后续任务。 // 创建一个有多个分支的任务 var quest = new GameDataQuest { Name = new LocalizedString("选择你的道路"), NextQuestBranches = [ new QuestBranch { NextQuest = lightPathQuest.ToLink(), Condition = lightPathValidator, Priority = 1, Description = new LocalizedString("光明之路") }, new QuestBranch { NextQuest = darkPathQuest.ToLink(), Condition = darkPathValidator, Priority = 2, Description = new LocalizedString("黑暗之路") }, new QuestBranch { NextQuest = neutralPathQuest.ToLink(), IsDefault = true, Description = new LocalizedString("中立之路") } ] };

构造函数 ​

QuestBranch 双端 ​

csharp
public QuestBranch()

属性 ​

NextQuest 双端 ​

csharp
public IGameLink<GameDataQuest>? NextQuest { get; set; }

后续任务

Condition 双端 ​

csharp
public Validator? Condition { get; set; }

触发条件

备注

如果条件为 null 或验证通过,则此分支可被触发。 多个分支都满足条件时,按 Priority 选择。

Priority 双端 ​

csharp
public int Priority { get; set; }

优先级(数值越小优先级越高)

备注

当多个分支的条件都满足时,选择优先级最高(数值最小)的分支。

IsDefault 双端 ​

csharp
public bool IsDefault { get; set; }

是否为默认分支

备注

如果没有任何分支的条件满足,则触发默认分支。 一个任务只应有一个默认分支。

AutoAccept 双端 ​

csharp
public bool AutoAccept { get; set; }

是否自动接受此分支的后续任务

Description 双端 ​

csharp
public LocalizedString? Description { get; set; }

分支描述(可选,用于UI显示)

KillSourceType 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Data.Enum

csharp
public enum KillSourceType

击杀来源类型 - 定义哪些单位的击杀可以计入任务进度

枚举值 ​

  • MainUnitOnly — 仅玩家主控单位击杀
  • PlayerOwnedUnit — 玩家拥有的任意单位击杀
  • PlayerOrAlly — 玩家或其盟友的单位击杀
  • AnyUserPlayer — 任意真实用户玩家击杀
  • AnyPlayer — 任意玩家击杀

QuestObjectiveType 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Data.Enum

csharp
public enum QuestObjectiveType

任务目标类型

枚举值 ​

  • Kill — 击杀目标 - 击杀指定类型/数量的单位
  • Collect — 收集物品 - 收集指定类型/数量的物品
  • TalkTo — 与NPC对话 - 与指定NPC进行对话
  • ReachLocation — 到达区域 - 到达指定区域/位置
  • UseItem — 使用物品 - 使用指定物品
  • UseAbility — 使用技能 - 使用指定技能
  • Interact — 交互 - 与指定对象交互
  • Escort — 护送 - 护送目标到达指定位置
  • Survive — 存活 - 存活指定时间
  • Custom — 自定义 - 通过脚本自定义条件

QuestStatus 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Data.Enum

csharp
public enum QuestStatus

任务状态

枚举值 ​

  • Inactive — 未激活 - 任务尚未被接受
  • InProgress — 进行中 - 任务已被接受,正在进行
  • Completed — 已完成 - 任务目标已达成,等待提交
  • TurnedIn — 已提交 - 任务已提交并领取奖励
  • Failed — 已失败 - 任务失败
  • Abandoned — 已放弃 - 任务被玩家主动放弃

QuestVisibility 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Data.Enum

csharp
public enum QuestVisibility

任务可见性

枚举值 ​

  • Visible — 可见 - 任务在任务列表中显示
  • Hidden — 隐藏 - 任务不在任务列表中显示,但仍然追踪进度
  • Tracked — 追踪 - 任务显示在屏幕追踪区域

EventChapterCompleted 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Event

csharp
public class EventChapterCompleted : ITriggerEvent<EventChapterCompleted>

章节完成事件

构造函数 ​

EventChapterCompleted 双端 ​

csharp
public EventChapterCompleted(IGameLink<GameDataQuestChapter> chapter, Player player)

章节完成事件

属性 ​

Chapter 双端 ​

csharp
public IGameLink<GameDataQuestChapter> Chapter { get; }

Player 双端 ​

csharp
public Player Player { get; }

EventChapterProgressUpdated 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Event

csharp
public class EventChapterProgressUpdated : ITriggerEvent<EventChapterProgressUpdated>

章节进度更新事件

构造函数 ​

EventChapterProgressUpdated 双端 ​

csharp
public EventChapterProgressUpdated(IGameLink<GameDataQuestChapter> chapter, Player player, int completedQuests, int totalQuests)

章节进度更新事件

属性 ​

Chapter 双端 ​

csharp
public IGameLink<GameDataQuestChapter> Chapter { get; }

Player 双端 ​

csharp
public Player Player { get; }

CompletedQuests 双端 ​

csharp
public int CompletedQuests { get; }

TotalQuests 双端 ​

csharp
public int TotalQuests { get; }

Progress 双端 ​

csharp
public float Progress { get; }

EventChapterRewardsClaimed 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Event

csharp
public class EventChapterRewardsClaimed : ITriggerEvent<EventChapterRewardsClaimed>

章节奖励领取事件

构造函数 ​

EventChapterRewardsClaimed 双端 ​

csharp
public EventChapterRewardsClaimed(IGameLink<GameDataQuestChapter> chapter, Player player)

章节奖励领取事件

属性 ​

Chapter 双端 ​

csharp
public IGameLink<GameDataQuestChapter> Chapter { get; }

Player 双端 ​

csharp
public Player Player { get; }

EventChapterUnlocked 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Event

csharp
public class EventChapterUnlocked : ITriggerEvent<EventChapterUnlocked>

章节解锁事件

构造函数 ​

EventChapterUnlocked 双端 ​

csharp
public EventChapterUnlocked(IGameLink<GameDataQuestChapter> chapter, Player player)

章节解锁事件

属性 ​

Chapter 双端 ​

csharp
public IGameLink<GameDataQuestChapter> Chapter { get; }

Player 双端 ​

csharp
public Player Player { get; }

EventQuestAbandoned 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Event

csharp
public class EventQuestAbandoned : ITriggerEvent<EventQuestAbandoned>

任务放弃事件

构造函数 ​

EventQuestAbandoned 双端 ​

csharp
public EventQuestAbandoned(Quest quest, Player player)

任务放弃事件

属性 ​

Quest 双端 ​

csharp
public Quest Quest { get; }

Player 双端 ​

csharp
public Player Player { get; }
csharp
public IGameLink<GameDataQuest> QuestLink { get; }

EventQuestAccepted 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Event

csharp
public class EventQuestAccepted : ITriggerEvent<EventQuestAccepted>

任务接受事件

构造函数 ​

EventQuestAccepted 双端 ​

csharp
public EventQuestAccepted(Quest quest, Player player)

任务接受事件

属性 ​

Quest 双端 ​

csharp
public Quest Quest { get; }

Player 双端 ​

csharp
public Player Player { get; }
csharp
public IGameLink<GameDataQuest> QuestLink { get; }

EventQuestCompleted 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Event

csharp
public class EventQuestCompleted : ITriggerEvent<EventQuestCompleted>

任务完成事件(目标全部达成,等待提交)

构造函数 ​

EventQuestCompleted 双端 ​

csharp
public EventQuestCompleted(Quest quest, Player player)

任务完成事件(目标全部达成,等待提交)

属性 ​

Quest 双端 ​

csharp
public Quest Quest { get; }

Player 双端 ​

csharp
public Player Player { get; }
csharp
public IGameLink<GameDataQuest> QuestLink { get; }

EventQuestFailed 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Event

csharp
public class EventQuestFailed : ITriggerEvent<EventQuestFailed>

任务失败事件

构造函数 ​

EventQuestFailed 双端 ​

csharp
public EventQuestFailed(Quest quest, Player player, string? reason)

任务失败事件

属性 ​

Quest 双端 ​

csharp
public Quest Quest { get; }

Player 双端 ​

csharp
public Player Player { get; }

Reason 双端 ​

csharp
public string? Reason { get; }
csharp
public IGameLink<GameDataQuest> QuestLink { get; }

EventQuestObjectiveCompleted 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Event

csharp
public class EventQuestObjectiveCompleted : ITriggerEvent<EventQuestObjectiveCompleted>

目标完成事件

构造函数 ​

EventQuestObjectiveCompleted 双端 ​

csharp
public EventQuestObjectiveCompleted(Quest quest, QuestObjective objective, Player player)

目标完成事件

属性 ​

Quest 双端 ​

csharp
public Quest Quest { get; }

Objective 双端 ​

csharp
public QuestObjective Objective { get; }

Player 双端 ​

csharp
public Player Player { get; }
csharp
public IGameLink<GameDataQuest> QuestLink { get; }
csharp
public IGameLink<GameDataQuestObjective> ObjectiveLink { get; }

EventQuestObjectiveProgress 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Event

csharp
public class EventQuestObjectiveProgress : ITriggerEvent<EventQuestObjectiveProgress>

目标进度更新事件

构造函数 ​

EventQuestObjectiveProgress 双端 ​

csharp
public EventQuestObjectiveProgress(Quest quest, QuestObjective objective, Player player, int oldProgress, int newProgress)

目标进度更新事件

属性 ​

Quest 双端 ​

csharp
public Quest Quest { get; }

Objective 双端 ​

csharp
public QuestObjective Objective { get; }

Player 双端 ​

csharp
public Player Player { get; }

OldProgress 双端 ​

csharp
public int OldProgress { get; }

NewProgress 双端 ​

csharp
public int NewProgress { get; }
csharp
public IGameLink<GameDataQuest> QuestLink { get; }
csharp
public IGameLink<GameDataQuestObjective> ObjectiveLink { get; }

TargetCount 双端 ​

csharp
public int TargetCount { get; }

IsCompleted 双端 ​

csharp
public bool IsCompleted { get; }

EventQuestStatusChanged 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Event

csharp
public class EventQuestStatusChanged : ITriggerEvent<EventQuestStatusChanged>

任务状态变化事件

构造函数 ​

EventQuestStatusChanged 双端 ​

csharp
public EventQuestStatusChanged(Quest quest, Player player, QuestStatus oldStatus, QuestStatus newStatus)

任务状态变化事件

属性 ​

Quest 双端 ​

csharp
public Quest Quest { get; }

Player 双端 ​

csharp
public Player Player { get; }

OldStatus 双端 ​

csharp
public QuestStatus OldStatus { get; }

NewStatus 双端 ​

csharp
public QuestStatus NewStatus { get; }
csharp
public IGameLink<GameDataQuest> QuestLink { get; }

EventQuestTrackingChanged 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Event

csharp
public class EventQuestTrackingChanged : ITriggerEvent<EventQuestTrackingChanged>

任务追踪状态变化事件

构造函数 ​

EventQuestTrackingChanged 双端 ​

csharp
public EventQuestTrackingChanged(Quest quest, Player player, bool isTracked)

任务追踪状态变化事件

属性 ​

Quest 双端 ​

csharp
public Quest Quest { get; }

Player 双端 ​

csharp
public Player Player { get; }

IsTracked 双端 ​

csharp
public bool IsTracked { get; }
csharp
public IGameLink<GameDataQuest> QuestLink { get; }

EventQuestTurnedIn 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Event

csharp
public class EventQuestTurnedIn : ITriggerEvent<EventQuestTurnedIn>

任务提交事件(已领取奖励)

构造函数 ​

EventQuestTurnedIn 双端 ​

csharp
public EventQuestTurnedIn(Quest quest, Player player)

任务提交事件(已领取奖励)

属性 ​

Quest 双端 ​

csharp
public Quest Quest { get; }

Player 双端 ​

csharp
public Player Player { get; }
csharp
public IGameLink<GameDataQuest> QuestLink { get; }

ChapterMessageType 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Protocol

csharp
public enum ChapterMessageType

章节消息类型

枚举值 ​

  • Unlocked — 章节解锁
  • ProgressUpdated — 章节进度更新
  • Completed — 章节完成
  • RewardsClaimed — 章节奖励已领取

ProtoChapterMessage 双端 ​

命名空间 TriggerEncapsulation.QuestSystem.Protocol

csharp
public struct ProtoChapterMessage : IProtocolServerTransient<ProtoChapterMessage>, IBytesReplicableUnmanaged<ProtoChapterMessage>, IBytesReplicable<ProtoChapterMessage>, IProtocolServerTransient, IGameClass

章节协议消息 - 用于服务端到客户端的章节状态同步

备注

此消息用于将服务端的章节状态变化同步到客户端。 使用示例: // 服务端:发送章节解锁消息给玩家 ProtoChapterMessage.SendUnlocked(player, chapterLink); // 服务端:发送章节进度更新 ProtoChapterMessage.SendProgressUpdated(player, chapterLink, completedQuests, totalQuests);

属性 ​

MessageType 双端 ​

csharp
public ChapterMessageType MessageType { get; set; }

消息类型

ChapterHashCode 双端 ​

csharp
public int ChapterHashCode { get; set; }

章节链接的哈希码

CompletedQuests 双端 ​

csharp
public int CompletedQuests { get; set; }

已完成的任务数(用于进度更新)

TotalQuests 双端 ​

csharp
public int TotalQuests { get; set; }

总任务数(用于进度更新)

方法 ​

Handle 仅客户端 ​

csharp
public readonly void Handle()

客户端处理从服务器接收到的章节消息

SendUnlocked 仅服务端 ​

csharp
public static bool SendUnlocked(Player player, IGameLink<GameDataQuestChapter> chapterLink)

发送章节解锁消息给玩家

SendProgressUpdated 仅服务端 ​

csharp
public static bool SendProgressUpdated(Player player, IGameLink<GameDataQuestChapter> chapterLink, int completedQuests, int totalQuests)

发送章节进度更新消息给玩家

SendCompleted 仅服务端 ​

csharp
public static bool SendCompleted(Player player, IGameLink<GameDataQuestChapter> chapterLink)

发送章节完成消息给玩家

SendRewardsClaimed 仅服务端 ​

csharp
public static bool SendRewardsClaimed(Player player, IGameLink<GameDataQuestChapter> chapterLink)

发送章节奖励已领取消息给玩家