临时添加关于伤害检测修改,其他细节等新版本稳定后再更新

This commit is contained in:
Stellaraven 2024-04-10 15:49:24 +08:00
parent 874a476a0a
commit fc956b4637
1 changed files with 69 additions and 13 deletions

View File

@ -2,7 +2,24 @@
针对部分用户使用 MHW 更多定型文mod时遇到的问题提供可能的处理方式若尚未解决问题可加群*259616154*咨询
编写时mod版本0.1.6
编写时mod版本0.2.0
## mod更新日志
特性:
支持单个动作内的多个伤害数据统计
所有内部实现全部采用async/await异步
单个trigger的执行转为创建异步任务支持内部长时间阻塞
由于主动式伤害收集模式的实现现在可以检查伤害为0的情况
Break Changes:
原配置文件 trigger_on.damage 条件取消,由 check.damage 替代
具体参考新配置文件样例
## 目录
@ -459,7 +476,7 @@ mhw游戏中可用的字体颜色对应代码如下
如红字所说后面那个fsmid对应的数值就是武器当前执行的动作id。有了这个id就可以参考[Q3.2](#q32-怎么创建一个完整的自动文本?)制作自动文本了
*方案二*luaengine适合除了编辑自动文本的需求外存在其他数据获取需求对基于luaengine编写的mod感兴趣或有制作意图的用户
*方案二***luaengine**适合除了编辑自动文本的需求外存在其他数据获取需求对基于luaengine编写的mod感兴趣或有制作意图的用户
luaengine相关就不在这阐述了一切相关问题请移步踩蘑菇luaengine教程贴https://www.caimogu.cc/post/943219.html
@ -528,9 +545,9 @@ param = "<STYL MOJI_GREEN_DEFAULT><SIZE 40>飞!<STYL MOJI_LIGHTBLUE_DEFAULT><S
### Q3.9 怎么设置发送间隔以防止说话太多刷屏?
A:mas-config.toml内已经内置了全局延迟发送功能默认为1秒具体请参考配置文件(*mod作者贴心的给你放在了最前面还加了注释哦*)
A:mas-config.toml内已经内置了全局间隔功能默认为1秒具体请参考配置文件(*mod作者贴心的给你放在了最前面还加了注释哦*)
如果想给单个触发器设置延迟发送,可以参考如下代码:
如果想给单个触发器设置间隔发送,可以参考如下代码:
```toml
[[trigger]]
action_mode = "random"
@ -607,37 +624,76 @@ param = "*超解"
### Q3.12 怎么给动作添加伤害检测?
A使用新的触发器条件`[trigger.trigger_on.damage]`来检测,具体使用方式如下:
A使用新的触发器条件`[trigger.check]`来检测,具体使用方式如下:
这里是使用真蓄作为检测
```toml
# ========== 真蓄造成伤害 ==========
[[trigger]]
action_mode = "sequential_all"
[trigger.trigger_on.damage]
value = { gt = 200 }
# 这是mod作者与0.1.5版本添加的新的触发器条件用于检测该动作的伤害是否大于一定值这里写200即真蓄伤害大于200则触发该触发器。你也可以把gt改为lt表示小于200则触发该触发器。
[trigger.trigger_on.fsm]
new = { target = 3, id = {in = [135,136,137]} }
[[trigger.check]]
weapon_type.value = 0
# 武器检测
[[trigger.check]]
fsm.value = { target = 3, id = {in = [135,136,137]} }
# 鉴于伤害检测会占用触发器条件检测故mod作者将动作检测改为可设置多个的`trigger.check`并放到这里以防止出现两个trigger_on导致加载配置时出现冲突的情况
[trigger.check.damage]
# damage和旧版本的伤害检测条件相同用于检测该动作的伤害是否大于一定值这里写200即真蓄伤害大于200则触发该触发器。你也可以把gt改为lt表示小于200则触发该触发器。
damage = { gt = 200 }
# fsm检测的目的是检测并累计该动作期间的伤害值(目前只能实现单个动作的检测,多个动作的检测需要后续更新)
fsm = { target = 3, id = 137 }
# timeout检测动作的延时毫秒计数2000为2秒
timeout = 2000
# mod作者已经将伤害检测改为可设置多个的`trigger.check`并放到这里,`trigger.trigger_on。damage`已经不再适用于新版本
[[trigger.action]]
cmd = "SendChatMessage"
param = "<STYL MOJI_LIGHTBLUE_DEFAULT><SIZE 30>强击真蓄!造成了<SIZE 40>{{damage}}<SIZE 30>伤害</SIZE></STYL>"
param = "<STYL MOJI_LIGHTBLUE_DEFAULT><SIZE 30>强击真蓄!造成了<SIZE 40>{{damage}}<SIZE 30>伤害</SIZE></STYL>"
```
上述代码若正常运行则在任意触发强击的真蓄力斩伤害大于等于200时发送如下文本
上述代码若正常运行,则在触发强击的真蓄力斩伤害大于等于200时发送如下文本
![alt text](img/image-30.png)
**注:任何动作要添加伤害检测时请务必使用上述的格式来编写自动文本,否则当一个触发器内同时存在两个`trigger.trigger_on`结构时mod会报错并触发如下警告**
#### 现在已经实现了伤害为空的检测条件即伤害统计的部分是基于时间段内造成的伤害进行检测可以设置大于0造成伤害或者小于等于0不造成伤害或者负伤害所以理论上总伤害为0时可以判定为未命中
未命中的代码如下:
```toml
# ========== 太刀登龙失败 ==========
[[trigger]]
action_mode = "sequential_all"
name = "太刀登龙失败"
# 动作检测
[trigger.trigger_on.fsm]
new = { target = 3, id = 92 }
# 武器检测
[[trigger.check]]
weapon_type.value = 3
[[trigger.check]]
[trigger.check.damage]
damage = { le = 0 }
# 伤害检测小于0时可以被视为未命中你用骰子剑造成负伤害也会被算进去lt=0的情况下总和为负值时也会触发
fsm = { target = 3, id = 92 }
timeout = 2000
[[trigger.action]]
cmd = "SendChatMessage"
param = "*悲报:太刀侠空登了"
```
**注:现在已经去除了:`trigger.trigger_on.damage`,现在使用该代码进行伤害检测时,会出现报错。**
![alt text](img/image-31.png)
*`trigger.trigger_on`只能检测一个元素,该触发器内检测到多个元素。* **报错如是说到...**
# 本文由Stellaraven 结合群内各种问题编写。还有问题请到群*259616154*内咨询。
# Thanks For Your Reading