为GEE引擎开发任务脚本,核心思路围绕变量分层存储、触发节点编排与任务状态机三个模块构建。这套设计方法不依赖特定任务类型,可适配杀怪、收集、对话、到达坐标等常见任务形式。
变量分层存储决定任务数据的持久性与作用域。人物私有变量(U0-U255)用于存储每个玩家的任务进度,例如U1记录当前执行的任务编号,U2记录杀怪计数,U3记录收集物品数量。全局变量(G0-G99)控制服务器级别的任务开放状态,例如G1值为1时开放第一章主线任务,G2值为0时表示节日活动未开启。A变量(A0-A99)存储全局字符串,用于记录任务名称或描述文本,便于NPC对话时动态调用。变量编号规划需在脚本编写前完成映射表,避免后续开发中编号冲突。
任务状态机将每个任务拆解为未接取、进行中、可完成、已完成四个状态。未接取状态下,NPC对话显示任务介绍和接取选项;进行中状态显示当前进度和任务目标;可完成状态触发完成按钮或自动交付逻辑;已完成状态屏蔽重复接取。状态切换通过`MOV`命令写入私有变量实现,例如`MOVU10`表示未接取,`MOVU11`表示进行中,`MOVU12`表示可完成,`MOVU13`表示已完成。
触发节点编排是任务进度的驱动机制。杀怪计数使用`[@OnKillMob]`标签拦截每次击杀事件,在标签内通过`CHECKVAR`判断当前U1值是否为进行中状态,再通过`EQUAL`匹配怪物名称,匹配成功后执行`CALCVAR`累加U2计数。计数达到目标后执行`MOVU12`将状态切换为可完成。收集物品使用拾取触发`[@PickUpItem]`或使用触发`[@StdModeFunc]`,配合`CHECKITEM`检查背包内物品数量,数量达标后切换状态。到达坐标使用`[@EnterMap]`或定时器`[@OnTimer]`检测玩家坐标,坐标匹配后触发进度更新。
任务接取与交付通过NPC对话脚本实现。在NPC脚本的`[@main]`标签中,使用`CHECKVAR`检查U1状态值,根据状态输出不同的对话选项。状态为0时显示“接取任务”选项,点击后执行`MOVU11`并给予任务物品或触发首杀计数。状态为1时显示当前进度,进度数据通过`<$STR(U2)>`变量嵌入对话文本。状态为2时显示“交付任务”选项,点击后执行奖励发放命令,然后`MOVU13`标记完成。状态为3时显示“已完成”灰色文字,不再提供可点击选项。
奖励发放模块位于交付逻辑中。使用`GIVE`命令发放物品奖励,`CHANGEEXP`增加经验值,`GAMEGOLD`增加金币,`CHANGEPERMISSION`授予称号或特殊权限。奖励类型可配置为随机池,使用`RANDOM`函数配合多个`GIVE`分支实现差异化掉落。完成后的任务入口判断使用`CHECKVAR`检测U1是否为3,若为已完成则直接跳转到已完成对话段,不再触发接取流程。
任务链扩展需在状态机中引入前置任务判断。在接取逻辑中使用`CHECKVARU1`检测前序任务状态,仅当前序任务状态为已完成时开放当前任务的接取选项。全局变量G控制章节开放条件,例如第一章所有任务完成后通过`MOVG11`开放第二章任务NPC的对话入口。取消任务功能需在状态为进行中时提供放弃选项,执行`MOVU10`重置所有相关私有变量,并将任务物品从背包中回收。
变量分层存储决定任务数据的持久性与作用域。人物私有变量(U0-U255)用于存储每个玩家的任务进度,例如U1记录当前执行的任务编号,U2记录杀怪计数,U3记录收集物品数量。全局变量(G0-G99)控制服务器级别的任务开放状态,例如G1值为1时开放第一章主线任务,G2值为0时表示节日活动未开启。A变量(A0-A99)存储全局字符串,用于记录任务名称或描述文本,便于NPC对话时动态调用。变量编号规划需在脚本编写前完成映射表,避免后续开发中编号冲突。
任务状态机将每个任务拆解为未接取、进行中、可完成、已完成四个状态。未接取状态下,NPC对话显示任务介绍和接取选项;进行中状态显示当前进度和任务目标;可完成状态触发完成按钮或自动交付逻辑;已完成状态屏蔽重复接取。状态切换通过`MOV`命令写入私有变量实现,例如`MOVU10`表示未接取,`MOVU11`表示进行中,`MOVU12`表示可完成,`MOVU13`表示已完成。
触发节点编排是任务进度的驱动机制。杀怪计数使用`[@OnKillMob]`标签拦截每次击杀事件,在标签内通过`CHECKVAR`判断当前U1值是否为进行中状态,再通过`EQUAL`匹配怪物名称,匹配成功后执行`CALCVAR`累加U2计数。计数达到目标后执行`MOVU12`将状态切换为可完成。收集物品使用拾取触发`[@PickUpItem]`或使用触发`[@StdModeFunc]`,配合`CHECKITEM`检查背包内物品数量,数量达标后切换状态。到达坐标使用`[@EnterMap]`或定时器`[@OnTimer]`检测玩家坐标,坐标匹配后触发进度更新。
任务接取与交付通过NPC对话脚本实现。在NPC脚本的`[@main]`标签中,使用`CHECKVAR`检查U1状态值,根据状态输出不同的对话选项。状态为0时显示“接取任务”选项,点击后执行`MOVU11`并给予任务物品或触发首杀计数。状态为1时显示当前进度,进度数据通过`<$STR(U2)>`变量嵌入对话文本。状态为2时显示“交付任务”选项,点击后执行奖励发放命令,然后`MOVU13`标记完成。状态为3时显示“已完成”灰色文字,不再提供可点击选项。
奖励发放模块位于交付逻辑中。使用`GIVE`命令发放物品奖励,`CHANGEEXP`增加经验值,`GAMEGOLD`增加金币,`CHANGEPERMISSION`授予称号或特殊权限。奖励类型可配置为随机池,使用`RANDOM`函数配合多个`GIVE`分支实现差异化掉落。完成后的任务入口判断使用`CHECKVAR`检测U1是否为3,若为已完成则直接跳转到已完成对话段,不再触发接取流程。
任务链扩展需在状态机中引入前置任务判断。在接取逻辑中使用`CHECKVARU1`检测前序任务状态,仅当前序任务状态为已完成时开放当前任务的接取选项。全局变量G控制章节开放条件,例如第一章所有任务完成后通过`MOVG11`开放第二章任务NPC的对话入口。取消任务功能需在状态为进行中时提供放弃选项,执行`MOVU10`重置所有相关私有变量,并将任务物品从背包中回收。

