# 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再启动游戏。

## 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

### 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:请检查文本中是否含有`<STYL`和`</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直接使用*
# 本文由Stellaraven 结合群内各种问题编写。还有问题请到群*259616154*内咨询。

# Thank For Your Reading
