整理中内容
https://docs.qq.com/doc/DZHhJVm1FRERIdk9q
执行效果(调用者, 效果描述)
- 伤害事件队列 ;
- 非伤害事件队列 ;
- 按 效果描述 执行。其中:
- 描述中含 造成伤害,则:
- 伤害 伤害结算(伤害描述, 非伤害事件队列);
- 入队(伤害事件队列, ...伤害);
- 描述中含(非 造成伤害 的)事件,则:
- 按 描述 执行;
- 入队(非伤害事件队列, 描述);
- 描述中含 造成伤害,则:
- 免于被击倒角色 ;
- 被击倒角色 ;
- 对于 伤害事件 中的每个 事件:
- 若 事件.可击倒:
- 若 免于被击倒(事件.目标角色) 且 事件.目标角色 免于被击倒角色:
- 入队(免于被击倒角色, 事件.目标角色);
- 事件.可击倒
false
;
- 否则:
- 入队(被击倒角色, 事件.目标角色);
- 若 免于被击倒(事件.目标角色) 且 事件.目标角色 免于被击倒角色:
- 若 事件.可击倒:
- 纯伤害事件队列 筛选(伤害事件, 事件.可击倒);
- 击倒事件队列 筛选(伤害事件, 事件.可击倒);
- 对于 免于被击倒角色 中的每个 角色:
- (调用者, 描述) 免于被击倒描述(角色);
- 执行效果(调用者, 描述);
- 治疗值 免于被击倒治疗值(描述);
- 复苏事件 构造事件("damageOrHeal", { type: HEAL, value: 治疗值 });
- 结算事件([复苏事件]);
- 若 产出充能(效果描述):
- 增加充能(调用者);
- 结算事件(非伤害事件队列);
- 结算事件(纯伤害事件队列);
- 结算事件(击倒事件队列);
- 对于 被击倒角色 中的每个 角色:
- 若 角色 全部在场角色():
- 击倒(角色);
- 角色状态和装备 角色区实体(角色);
- 弃置(角色装备和状态)
- 若 是出战角色(角色):
- 添加异步事件(选择出战角色(角色.阵营))
- 若 角色 全部在场角色():
- 切换角色事件队列 等待异步事件();
- 结算事件(切换角色事件队列)。
结算事件(事件队列)
- 对于 事件队列 中的每个 事件:
- 待响应实体 获取全部实体(事件.发生时对局状态)
- 若 事件.类型
"damageOrHeal"
且 事件.可击倒:- 待响应实体 排序(待响应实体, 击倒事件优先级(事件.目标角色));
- 对于 待响应实体 中的每个 实体:
- 效果 响应事件(事件):
- 若 效果
null
:- 若 实体 获取全部实体() 或 事件.类型
"dispose"
:- 执行效果(实体, 效果);
- 若 实体 获取全部实体() 或 事件.类型
击倒事件优先级(目标角色)(实体)
- 若 目标角色 实体,返回 ;
- 否则,若 实体 角色区实体(目标角色),返回 ;
- 否则,返回 。
伤害结算(伤害描述, 非伤害事件队列, 伤害列表=[])
- (伤害类型, 伤害值, 目标角色) 伤害描述;
- 若 伤害类型
穿透伤害
:- 新伤害类型 查找伤害效果("change");
- 若 新伤害类型
null
:- 伤害类型 新伤害类型
- 增伤列表 查找伤害效果(伤害描述, "+")
- 元素反应 元素反应表伤害类型目标角色.附着
- 若 元素类型
null
:- 应用元素反应(元素反应, 伤害描述, 非伤害事件队列, 伤害列表);
- 对于 增伤列表 中的每个 项:
- 伤害值 伤害值 项.增伤值;
- 乘伤列表 查找伤害效果(伤害描述, "*")
- 对于 乘伤列表 中的每个 项:
- 伤害值 伤害值 项.倍率;
- 除伤列表 查找伤害效果(伤害描述, "/")
- 对于 除伤列表 中的每个 项:
- 伤害值 伤害值 项.倍率 ;
- 减伤列表 查找伤害效果(伤害描述, "-")
- 对于 减伤列表 中的每个 项:
- 伤害值 伤害值 项.减伤值 ;
- 目标角色.生命值 目标角色.生命值 伤害值 ;
- 可击倒 目标角色.生命值 ;
- 若 目标角色 伤害列表:
// 官方实现:相同角色上的第二次伤害不再引发事件
- 伤害事件 构造事件("damageOrHeal", { 目标角色, 可击倒 });
- 入队(伤害列表, 伤害事件);
- 返回 伤害列表。
应用元素反应(元素反应, 非伤害事件队列, 伤害描述, 伤害列表)
- 阵营 伤害描述.目标角色.阵营;
- 对于 元素反应:
- 匹配 扩散(元素):
- 被扩散角色 筛选(全部在场角色(), 角色.阵营 阵营 角色 目标角色);
- 对于 被扩散角色 中的每个 目标角色:
- 伤害结算({ type: 元素, value: 1, 目标角色 });
- 匹配 结晶(元素):
- 伤害描述.伤害值 伤害描述.伤害值 ;
- 生成出战状态(
结晶
);
- 匹配 感电 或 超导:
- 伤害描述.伤害值 伤害描述.伤害值 ;
- 匹配 蒸发 或 融化:
- 伤害描述.伤害值 伤害描述.伤害值 ;
- 匹配 超载:
- 伤害描述.伤害值 伤害描述.伤害值 ;
- 若 是出战角色(伤害描述.目标角色):
- 切换角色(阵营.下个角色());
- 匹配 冻结:
- 伤害描述.伤害值 伤害描述.伤害值 ;
- 附着状态(
冻结
);
- 匹配 燃烧:
- 伤害描述.伤害值 伤害描述.伤害值 ;
- 召唤(
燃烧烈焰
);
- 匹配 绽放:
- 伤害描述.伤害值 伤害描述.伤害值 ;
- 生成出战状态(
草原核
);
- 匹配 原激化:
- 伤害描述.伤害值 伤害描述.伤害值 ;
- 生成出战状态(
激化领域
);
- 匹配 扩散(元素):
- 入队(非伤害事件队列, 构造事件("elementalReaction", (元素反应, 伤害描述)))
- 返回。
回收骰子(阵营, 数量)
- 骰子列表 阵营.骰子列表;
- 排序后骰子列表 排序(骰子列表, 回收骰子优先级(骰子列表));
- 待回收骰子列表 排序后骰子列表
.first_n
(数量) - 对于 待回收骰子列表 中的每个 骰子:
- 取出首个(骰子列表,骰子);
- 返回 待回收骰子列表。
回收骰子优先级(骰子列表)(骰子)
- 万能与否 ;
- 骰子个数 骰子列表
.count
(骰子); - 骰子类型序
[CRYO, HYDRO, PYRO, ELECTRO, ANEMO, GEO, DENDRO].index_of
(骰子); - 返回 (万能与否, 骰子个数, 骰子类型序)。
查找减骰效果(骰子需求)
- 若 同色骰子(骰子需求):
- 查找减元素骰效果(骰子需求);
- 否则:
- (基础元素骰, 无色骰) 骰子需求;
- 当 基础元素骰 时:
- 当前元素 基础元素骰;
- 查找减特定元素骰效果(当前元素, 骰子需求);
- 查找减元素骰效果(骰子需求);
- 当 无色骰 时:
- 查找减特定元素骰效果(
无色
, 骰子需求); - 对于
基础元素骰类型
中的每个 骰子类型:- 查找减特定元素骰效果(骰子类型, 骰子需求);
- 查找减元素骰效果(骰子需求);
- 查找减特定元素骰效果(