more-auto-shoutouts-docs/README.md

367 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Monster Hunter World - More Auto Shouts: Q&A
针对部分用户使用 MHW 更多定型文mod时遇到的问题提供可能的处理方式若尚未解决问题可加群*259616154*咨询
编写时mod版本0.1.4
# 下面根据问题类别进行分类,共分为三个板块
## 1.安装类问题
### Q 1.1 为什么我用狩技盒子安装了mod游戏正常启动但是mod没有生效
A: 请检查相关前置是否按正确路径安装,`Stracker's loader` 及其配套的 `!CRCBypass.dll` 是否为最新的。
mod本体文件安装路径 `steamapps\common\Monster Hunter World\nativePC\plugins`
确保上述文件夹内至少存在这两个文件
![alt text](img/image-2.png)
前置安装路径如下
`Strack's Loader` 前置的压缩包解压,我们能看到如下内容
![alt text](img/image-3.png)
将其放入 `steamapps\common\Monster Hunter World` 中即可
`!CRCBypass.dll` 装在 `steamapps\common\Monster Hunter World\nativePC\plugins`
大部分情况下按正确路径安装mod可以保证mod正常生效
### Q 1.2 为什么我安装了mod但是游戏崩溃了
A:如果你已经按照 [Q1.1](#q-11-为什么我用狩技盒子安装了mod游戏正常启动但是mod没有生效) 中的安装路径正确安装了对应的前置与mod请检查你的狩技盒子中的mod或者手动安装的mod与本mod是否存在冲突。
检查方法删除所有mod一并将下图中所有的非文件夹文件除了启动程序![alt text](img/image-5.png)外以及文件夹nativePC![alt text](img/image-6.png)删除,并验证游戏完整性
![alt text](img/image-1.png)
在这里验证游戏完整性
![alt text](img/image-7.png)
完整性检查完毕后,重新按 [Q1.1](#q-11-为什么我用狩技盒子安装了mod游戏正常启动但是mod没有生效) 中的步骤安装前置和mod。
## 2.使用类问题
### Q2.1 我在启动游戏时弹窗内出现如下情况,怎么办?
![alt text](img/image-9.png)
A: 经典的过期前置问题。在去年mhw最后一次为支持新语言更新后一个叫`hid.dll`的文件在mhw根目录中会导致游戏崩溃请将其删除并更新前置。
### Q2.2 我在启动游戏时弹窗内出现如下情况,怎么办?
![alt text](img/image-8.png)
A类似的情况例如显示dll无法加载等文件加载失败说明mod安装路径或者前置可能存在问题请检查mod安装路径或者更新前置并按照 [Q1.1](#q-11-为什么我用狩技盒子安装了mod游戏正常启动但是mod没有生效) 中的安装路径正确安装前置和mod。
### Q2.3 我在启动游戏时弹窗内出现如下情况,怎么办?
![alt text](img/image-11.png)
A: 126错误是文件找不到此外该情况还出现了 [Q2.2](#q22-我在启动游戏时弹窗内出现如下情况怎么办) 的情况,首先按 [Q2.2](#q22-我在启动游戏时弹窗内出现如下情况怎么办) 处理过期文件再将mod按 [Q1.1](#q-11-为什么我用狩技盒子安装了mod游戏正常启动但是mod没有生效) 的方式正确安装mod
### Q2.4 尝试通过日志获取fsm信息出现下面情况怎么办
![alt text](img/image-10.png)
A该情况是因为前版本0.1.0未更新debug功能请更新版本
### Q2.5 我在启动游戏时弹窗内出现如下情况,怎么办?
![alt text](img/image-12.png)
A: ![alt text](img/image-13.png)
作者在踩蘑菇原文已经说的非常清楚了,请自己将**文件**![alt text](img/image-14.png)的*名字*修改为mas-config.toml。*改个名都有人能改错吗?真的有!*
### Q2.6 我在启动游戏时弹窗内出现如下情况,怎么办?
![alt text](img/image-15.png)![alt text](img/image-16.png)
A: 这些错误都是文本型错误说明你的配置文件中存在不正确的文本或者触发器格式导致mod加载时出现错误。请打开mas-config.toml并按日志内![alt text](img/image-17.png)![alt text](img/image-18.png)所显示的行列数找到相关的错误原因并按照[Q3.2]( #q32-怎么创建一个完整的自动文本?)进行修复。
### Q2.7:为什么我在游戏内发言过多被系统禁言然后禁言消息会自动弹出,干扰战斗?
A:这就要怪你自己咯,设那么多又发那么多,被禁言后做出触发自动文本动作导致游戏中的你强行发言被弹窗警告。*少说点吧,话痨*
### Q2.8:怎么让配置文件方便观察和编辑?
A: 请使用vscode打开mas-config.toml并安装toml插件即可方便的编辑和浏览配置文件。
### Q2.9:为什么我的文件名是mas-config.toml而情况和[Q2.5](#q25 -为什么我在启动游戏时弹窗内出现如下情况怎么办) 一样?
A: 你可能在![alt text](img/image.png)这个地方没把*显示扩展名*![alt text](img/image-23.png)打开把它打开然后再改名或者直接将配置文件名字改成mas-config再启动游戏。
### Q2.10:现在这个mod有什么游戏内的快捷指令吗
A: 当前版本已添加三个快捷指令,直接在游戏内聊天栏输入对应指令即可
`!mas reload`: 重新加载自动文本配置,用于自动文本的热修改,效果如图
![alt text](img/image-26.png)
`!mas disable`: 游戏内禁用自动文本,输入后游戏将不会再发送自动文本,效果如图
![alt text](img/image-27.png)
`!mas enable`: 游戏内启用自动文本,在自动文本被禁用后输入,游戏将再次发送自动文本,效果如图
![alt text](img/image-28.png)
***特别注意***:快捷指令是**基于检测玩家发送的消息而执行的**,所以如果你发出的游戏内快捷指令**能被其他玩家接收到的话**那么其他安装了此mod的玩家也会**执行**你发送出去的快捷指令。同理,
其他安装了此mod的玩家发送mod的快捷指令的时候你的mhw程序也会**执行**他们发送的指令。(*这就是所谓的ddos攻击吧*
## 3. 编辑类和文本类问题
### Q3.1 怎么打开toml文件
A: 正常情况下可使用记事本打开mas-config.toml文件但作者建议使用vscode打开并安装toml相关插件以方便编辑。
### Q3.2 怎么创建一个完整的自动文本?
A**配置文件** `mas-config.toml` 存在可供参考的示例,请参考示例进行创建。
配置文件由多个`触发器`构成。每个触发器包含`触发条件(Condition)`和`行为(Action)`两个部分组成。
`行为`目前只支持发送游戏内消息
发送类型目前有如下形式:
**sequential_all: 顺序执行全部**
**sequential_one: 顺序执行下一个**
**random: 随机选取执行**
**触发条件**用于检测状态,只要源码允许,触发器可检测游戏内任何可能存在的状态并激活**发送器**
下面以一个自动文本案例举例说明。
```toml
[[trigger]]
action_mode = "random"
```
这是一个触发条件控制,其中*random*说明发送模式为随机选取发送器内文本发送。
```toml
[trigger.trigger_on.fsm]
new = { target = 3, id = 87 }
[[trigger.check]]
weapon_type.value = 3
```
这里用到了两个条件,第一个`trigger_on`表示这是一个触发器条件。
触发器条件有且仅有一个,表示当发生触发器所指示的事件时,若满足设置的条件,则执行触发器。
一个是检测玩家的动作,`{ target = 3, id = 87 }`为动作`气刃突刺`
另一个是检测玩家的武器,`trigger.check.weapon_type.value = 3`说明检测时玩家只有使用太刀才能触发。
```toml
[[trigger.action]]
cmd = "SendChatMessage"
param = "<STYL MOJI_GREEN_DEFAULT><SIZE 30>注意闪避,太刀侠要准备登龙了!</SIZE></STYL>"
[[trigger.action]]
cmd = "SendChatMessage"
param = "<STYL MOJI_GREEN_DEFAULT><SIZE 30>气刃突刺!</SIZE></STYL>"
[[trigger.action]]
cmd = "SendChatMessage"
param = "<STYL MOJI_GREEN_DEFAULT><SIZE 30>黑龙歼灭刀将要使用一种从天而降的刀法</SIZE></STYL>"
```
这个是行为,用于发送文本。
```toml
[[trigger]]
action_mode = "random"
[trigger.trigger_on.fsm]
new = { target = 3, id = 87 }
[[trigger.check]]
weapon_type.value = 3
[[trigger.action]]
cmd = "SendChatMessage"
param = "<STYL MOJI_GREEN_DEFAULT><SIZE 30>注意闪避,太刀侠要准备登龙了!</SIZE></STYL>"
[[trigger.action]]
cmd = "SendChatMessage"
param = "<STYL MOJI_GREEN_DEFAULT><SIZE 30>气刃突刺!</SIZE></STYL>"
[[trigger.action]]
cmd = "SendChatMessage"
param = "<STYL MOJI_GREEN_DEFAULT><SIZE 30>黑龙歼灭刀将要使用一种从天而降的刀法</SIZE></STYL>"
```
这个是完整的自动文本,自己创建时请以此作为参考。检测器类型可能根据需求变化较大,该部分建议参考`mas-config.toml`内触发器格式编辑。
### Q3.3 怎么编辑文本?
A彩色文本和字体大小都是游戏内置支持。标记格式参考如下
```text
<STYL MOJI_GREEN_DEFAULT><SIZE 30>黑龙歼灭刀将要使用一种从天而降的刀法</SIZE></STYL>
```
其中:`<STYL MOJI_GREEN_DEFAULT>`决定字体颜色,颜色参考如下:
![alt text](img/image-20.png)
mhw游戏中可用的字体颜色对应代码如下
```text
<STYL MOJI_RED_DEFAULT> </STYL> RED #FF0000 RGB(255, 0, 0)
<STYL MOJI_GREEN_DEFAULT> </STYL> GREEN #008000 RGB(0, 128, 0)
<STYL MOJI_BLUE_DEFAULT> </STYL> BLUE #0000FF RGB(0, 0, 255)
<STYL MOJI_PURPLE_DEFAULT> </STYL> MEDIUMPURPLE #9370DB RGB(147, 112, 219)
<STYL MOJI_YELLOW_DEFAULT> </STYL> YELLOW #FFFF00 RGB(255, 255, 0)
<STYL MOJI_ORANGE_DEFAULT> </STYL> ORANGE #FFA500 RGB(255, 165, 0)
<STYL MOJI_LIGHTBLUE_DEFAULT> </STYL> LIGHTBLUE #ADD8E6 RGB(173, 216, 230)
<STYL MOJI_LIGHTGREEN_DEFAULT> </STYL> LIGHTGREEN #90EE90 RGB(144, 238, 144)
<STYL MOJI_LIGHTYELLOW_DEFAULT> </STYL> LIGHTYELLOW #FFFFE0 RGB(255, 255, 224)
<STYL MOJI_SLGREEN_DEFAULT> </STYL> TEA GREEN #D0F0C0 RGB(208, 240, 192)
<STYL MOJI_BROWN_DEFAULT> </STYL> CHOCOLATE #2B1700 or darker
<STYL MOJI_WHITE_DEFAULT> </STYL> WHITE #FFFFFF RGB(255, 255, 255)
<STYL MOJI_WHITE_DEFAULT2> </STYL> GAINSBORO #DCDCDC RGB(220, 220, 220)
<STYL MOJI_WHITE_SELECTED2> </STYL> SILVER #C0C0C0 RGB(192, 192, 192)
<STYL MOJI_BLACK_DEFAULT> </STYL> BLACK #000000 RGB(0, 0, 0)
```
`<SIZE 30>`代表文本的字号,字号大小参考如下:
![alt text](img/image-21.png)
作者和编者都建议不要对长文本应用过大的字号,带来的观感并不会尽如人意的...
`黑龙歼灭刀将要使用一种从天而降的刀法`是一个示例文本,这个就是你触发条件后发在游戏里面的文本(*想怎么下头的写法就怎么下头吧,决定权在你*)
### Q3.4:怎么去寻找武器的动作即fsm
本文给出两种方案一种是基于0.1.1版本的更新debug一种是基于踩蘑菇大佬*Alcedo*所开发的luaengine框架。
*方案一*debug适合仅使用此mod编辑自动文本的用户
打开游戏根目录下的loader-config.json可以看到
```
{
"logfile": false,
"logcmd": true,
"logLevel": "ERROR",
"outputEveryPath": false,
"enablePluginLoader": true
}
```
将`"logLevel": "ERROR",`中的`ERROR`改为`DEBUG`,保存并重启游戏,此时游戏会输出大量日志,在进入训练场并使用武器执行动作后,在日志中找到如下内容
![alt text](img/image-22.png)
如红字所说后面那个fsmid对应的数值就是武器当前执行的动作id。有了这个id就可以参考[Q3.2](#q32-怎么创建一个完整的自动文本?)制作自动文本了
*方案二*luaengine适合除了编辑自动文本的需求外存在其他数据获取需求对基于luaengine编写的mod感兴趣或有制作意图的用户
luaengine相关就不在这阐述了一切相关问题请移步踩蘑菇luaengine教程贴https://www.caimogu.cc/post/943219.html
## 注现在已添加简易fsmID表格, 如果不想自己去测可以参考[为Monster Hunter World - More Auto Shouts 制作的简易Fsm ID 表](fsmID.md)。但是该表内只录取部分笔者认为常用的fsm其他fsm请自行按照[Q3.2](#q32-怎么创建一个完整的自动文本?)进行查找。
### Q3.5:怎么让一个触发器检测多个动作?
A:使用`in`函数以判断事件的值是否包含在数组内。
下面举个例子,以铳枪的龙杭炮为例。
```toml
[[trigger]]
action_mode = "sequential_all"
[trigger.trigger_on.fsm]
new = { target = 3, id = {in = [110,112,114]} }
# in是一个函数用于判断事件的值是否包含在数组内需要用花括号{}包起来。
[[trigger.check]]
weapon_type.value = 7
[[trigger.action]]
cmd = "SendChatMessage"
param = "<STYL MOJI_LIGHTBLUE_DEFAULT><SIZE 25>龙杭炮发射</SIZE></STYL>"
```
龙杭炮有三个射击方向分别为正常派生的下段炮击突进上捞派生的中段炮击以及站姿上捞派生的上段炮击这三个炮击的动作fsmid是分开的分别为110下段112中段114上段
现在使用in函数将这三个fsmid放入一个数组内触发器检测到玩家使用铳枪时会检测到玩家当前执行的动作fsmid是否包含在数组内若包含则激活触发器并发送文本![alt text](img/image-25.png)。
### Q3.6:为什么我的文本修饰了还是默认的文本?
A:请检查文本中是否含有`</SIZE>`和`</STYL>`,这两个标签是用于控制文本样式的,请检查文本段的末尾中否含有这两个标签, 如果没有会导致该文本无法被检测到颜色和字体的修改,并以默认形式的文本发送。
### Q3.7:为什么我的文本只说了一部分?
A:一个param内的文本所包含的字节数存在上限128个字节现举例说明
```toml
param = "<STYL MOJI_LIGHTGREEN_DEFAULT><SIZE 30>一二三四五六七八九十壹贰叄肆伍陆柒捌玖拾甲乙丙丁戊己庚辛壬癸</SIZE></STYL>"
#双引号中的内容"<STYL MOJI_LIGHTGREEN_DEFAULT><SIZE 30>一二三四五六七八九十壹贰叄肆伍陆柒捌玖拾甲乙丙丁戊己庚辛壬癸"是被计算进字符的部分
```
*汉字*和*全角标点符号*占**三个字节**,所有的*英文字母*,*数字*和*半角标点符号*占**一个字节**。
写入的字段中包含了30个汉字其他字母数字和半角符号合计39个合计字节是30*3+39=129个。让我们看看发出去的文本会是啥样
![alt text](img/image-4.png)
如图写入了30个汉字实际上只发出来了29个说明输入文本时字段包含的字节数超过上限129>128,导致文本中最后一个汉字的字符被截断无法被输出。笔者建议设置自动文本时不要使文本部分的汉字与中文标点符号数量超过30否则会使发送时文本因超过字节上限被截断。
### Q3.8:怎么设置复合的颜色和字号文本,比如![alt text](img/image-24.png)这样的?
A:gmd支持在同一句话中使用分隔的多个颜色和字号tag对不同的文本段标注具体可参考如下代码上图中三色字体飞圆斩的**发送器**
```toml
[[trigger.action]]
cmd = "SendChatMessage"
param = "<STYL MOJI_GREEN_DEFAULT><SIZE 40>飞!<STYL MOJI_LIGHTBLUE_DEFAULT><SIZE 45>圆!<STYL MOJI_RED_DEFAULT><SIZE 50>斩!</SIZE></STYL>"
```
每一段文本的前面都有一个控制样式的标签,标签的格式请参考[Q3.3](#q33-怎么编辑文本)中的编辑方式,每一段不同样式文本的标签排序**必须**按照颜色`<STYL MOJI_GREEN_DEFAULT>`在前字号`<SIZE 40>`在后顺序排列。
*这里将文本代码放入了一个发送器的param内可以复制粘贴放入任意param直接使用*
### Q3.9:怎么设置发送间隔以防止说话太多刷屏?
A:mas-config.toml内已经内置了全局延迟发送功能默认为1秒具体请参考配置文件(*mod作者贴心的给你放在了最前面还加了注释哦*)
如果想给单个触发器设置延迟发送,可以参考如下代码:
```toml
[[trigger]]
action_mode = "random"
# 设置该触发器发送间隔为1秒
cooldown = 1
[trigger.trigger_on.fsm]
new = { target = 3, id = 11 }
[[trigger.check]]
weapon_type.value = 2
[[trigger.action]]
cmd = "SendChatMessage"
param = "<STYL MOJI_RED_DEFAULT><SIZE 30>开启鬼人化</SIZE></STYL>"
```
在**触发条件**(详见[Q3.2](#q32-怎么创建一个完整的自动文本?))的代码
```toml
[[trigger]]
action_mode = "random"
```
下面添加`cooldown`字段,即可设置单触发器的发送间隔(以秒计算)。
# 本文由Stellaraven 结合群内各种问题编写。还有问题请到群*259616154*内咨询。
# Thanks For Your Reading