Skip to content

CoreLib 动作 ​

EmakiCooking 注册到 CoreLib 的动作段及其参数, 失败行为与使用前提如下

前置条件: EmakiCooking 启用后, 营养值, 阈值复查和配方奖励段 (段就是动作管道里的一节) 已自动追加到 CoreLib 动作注册表, 直接引用即可. 这些段可以用在其他模块的动作列表, CoreLib 管道模板, 或者第三方通过 CoreLib 管道引擎触发的管道里

NOTE

下列段由 EmakiCooking 注册; CoreLib 自带通用段见 CoreLib 动作系统. 当前段 ID 只使用下表中的规范名, 不再提供历史别名入口. 旧的 emakicookingaddnutrition 现在写作 cooking_add_nutrition, 其余同理

段 ID ​

七个段的目标要求都是 REQUIRED_ENTITY, 非玩家目标会跳过

段 ID操作说明
cooking_add_nutrition增加营养值增加指定营养类型当前值
cooking_remove_nutrition扣除营养值扣除指定营养类型当前值
cooking_set_nutrition设置营养值设置指定营养类型当前值
cooking_clear_nutrition清空营养值将指定类型或全部类型设为各自 min
cooking_reset_nutrition重置营养值将指定类型或全部类型设为各自 default
cooking_recheck_nutrition_threshold复查阈值重新评估目标玩家的单项与组合营养阈值
cooking_run_recipe_reward执行配方奖励通过 CookingRewardService 执行已加载配方的某个结果分支

"作用于谁"由 source 决定, 不再有 target 参数: 作用于执行者自己写 self, 指定玩家用 player_by_name

营养增减与设置 ​

cooking_add_nutrition, cooking_remove_nutrition, cooking_set_nutrition 共用同一组参数

参数类型必填默认值说明
typeSTRING是—营养类型 ID
amountEXPRESSION是—营养数值, 可写 CoreLib 表达式
yaml
actions:
  - 'self | cooking_add_nutrition type=satiety amount=5'
  - 'self | cooking_remove_nutrition type=hydration amount=3'
  - 'player_by_name name=PlayerName | cooking_set_nutrition type=hydration amount=80'
  # amount 写成表达式
  - 'self | cooking_add_nutrition type=satiety amount=%var.base%*1.5'

成功时输出 type, old_value, new_value. type 写成空白会在运行时以 INVALID_CONFIG 失败; 营养服务拒绝这次操作时以 REJECTED 失败并带上原因

清空与重置营养 ​

cooking_clear_nutrition 把营养值设为对应类型的 min; cooking_reset_nutrition 设为对应类型的 default. 两者的区别是: 一个把玩家饿到底, 一个把玩家还原到中性状态

参数类型必填默认值说明
typeSTRING否""营养类型 ID; 为空时处理全部已注册类型
yaml
actions:
  - 'self | cooking_clear_nutrition type=hydration'
  - 'player_by_name name=PlayerName | cooking_reset_nutrition'

type 指向未注册的类型时以 INVALID_CONFIG 失败; 没有任何已注册类型时跳过. 遇到第一个失败的类型就停止, 不会留下改了一半的营养记录

阈值复查 ​

cooking_recheck_nutrition_threshold 重新评估目标玩家的营养阈值. 无参数

yaml
actions:
  - 'self | cooking_recheck_nutrition_threshold'
  - 'player_by_name name=PlayerName | cooking_recheck_nutrition_threshold'

营养系统未启用或该玩家还没有缓存记录时按跳过处理, 这两种情况都不算故障

配方奖励 ​

cooking_run_recipe_reward 会查找已加载配方, 并通过 CookingRewardService 的统一出口发放产物, 执行结果动作. 它不会临时构造新配方; recipe 必须已经由对应工位加载器加载

参数类型必填默认值说明
recipeSTRING是—配方 ID
stationSTRING否""工位 (世界里用来做菜的那块方块) 的目录名; 为空时遍历所有工位加载器
outcomeSTRING否success结果名或路径, 如 success, perfect, result.success. 不含 . 时自动补成 result.<名字>
drop_resultBOOLEAN否false是否把产物掉落在目标位置, 而不是进入背包
include_outputsBOOLEAN否true是否发放结果分支中的 outputs
include_actionsBOOLEAN否true是否执行结果分支中的 actions
phaseSTRING否""记录在嵌套动作上的阶段名; 为空时自动生成为 cooking.action.recipe.<配方 ID>
yaml
actions:
  - 'player_by_name name=PlayerName | cooking_run_recipe_reward recipe=apple_pie station=oven outcome=success'
  - 'self | cooking_run_recipe_reward recipe=tea outcome=result.perfect drop_result=true include_actions=false'

recipe 为空, station 不是已知工位, 配方查不到, 都会以 INVALID_CONFIG 失败. 结果分支既没有 outputs 也没有 actions (或两个开关都关掉) 时按跳过处理. 成功时输出 recipe, station, outcome, outputs, actions, target

奖励链是异步且不等待结果的, 所以这个段成功只代表发放已提交, 不代表已完成. 嵌套的配方动作运行在这个段没有构建的上下文里, 管道的上下文声明检查不会延伸进去

使用提示 ​

  • amount 声明为 EXPRESSION, 参数文本里的占位符会先被渲染再交给表达式引擎求值, 所以 %var.*%, 模块写入的上下文占位符与 PlaceholderAPI 占位符都能直接参与运算
  • 营养服务或配方奖励服务未就绪时, 对应段以 MISSING_CONTEXT 失败而不是不报错地跳过
  • 嵌套配方动作可见的占位符包括 recipe_id, recipe_name, station_type, 以及带 cooking_ 前缀的同名写法和 cooking_outcome