# Monster Hunter World - More Auto Shouts: Q&A

针对部分用户使用 MHW 更多定型文mod时遇到的问题提供可能的处理方式，若尚未解决问题可加群*259616154*咨询

编写时mod版本：0.1.6

## 目录

### [1.安装类问题](#1-安装类问题)

[Q1.1:mod安装位置错误导致游戏无法加载mod的解决方法](#q-11-为什么我用狩技盒子安装了mod游戏正常启动但是mod没有生效)

[Q1.2:游戏加载mod时发生崩溃的处理方法](#q-12-为什么我安装了mod但是游戏崩溃了)

[Q1.3:对那些白嫖怪的声明](#q-13-为什么我没办法使用mod盒子安装mod打开下载的东西怎么和下图一样一堆不认识的)

### [2.使用类问题](#2-使用类问题)

[Q2.1:旧前置文件需要手动删除的问题](#q21-我在启动游戏时弹窗内出现如下情况怎么办)

[Q2.2:前置不完整或者前置未更新的问题](#q22-我在启动游戏时弹窗内出现如下情况怎么办)

[Q2.3:部分文件找不到的问题](#q23-我在启动游戏时弹窗内出现如下情况怎么办)

[Q2.4:旧版本mod无法通过debug方式检测fsm的问题](#q24-尝试通过日志获取fsm信息出现下面情况怎么办)

[Q2.5:配置文件名字不正确导致系统找不到配置文件的解决方式](#q25-我在启动游戏时弹窗内出现如下情况怎么办)

[Q2.6:配置文件内触发器格式有误，日志给出具体行列报错的解决方式](#q26-我在启动游戏时弹窗内出现如下情况怎么办)

[Q2.7:自动文本发送过多导致被系统禁言的解决方式](#q27-为什么我在游戏内发言过多被系统禁言然后禁言消息会自动弹出干扰战斗)

[Q2.8:怎么让配置文件方便观察和编辑](#q28-怎么让配置文件方便观察和编辑)

[Q2.9:没打开显示文件扩展名导致按Q2.5的步骤修改文件名后，系统找不到指定文件的解决方式](#q29-为什么我的文件名是mas-configtoml而情况和q25一样)

[Q2.10:游戏内可用的快捷指令](#q210-现在这个mod有什么游戏内的快捷指令吗)

[Q2.11:错误日志中关于文本行列数的报错的原理和机制举例](#q211-错误日志中关于文本行列数的报错有什么原理和机制吗)
### [3.编辑类和文本类问题](#3-编辑类和文本类问题)

[Q3.1:toml文件的打开方式](#q31-怎么打开toml文件)

[Q3.2:基础自动文本的创建](#q32-怎么创建一个完整的自动文本)

[Q3.3:文本的编辑](#q33-怎么编辑文本)

[Q3.4:寻找动作id，即Fsm](#q34-怎么去寻找武器的动作即fsm)

[Q3.5:in函数的应用](#q35-怎么让一个触发器检测多个动作)

[Q3.6:文本不能丢的“尾巴”](#q36-为什么我的文本修饰了还是默认的文本)

[Q3.7:文本过长导致其不能完全加载的原因以及解释](#q37-为什么我的文本只说了一部分)

[Q3.8:复合字号与颜色文本的写法](#q38-怎么设置复合的颜色和字号文本比如alt-text这样的)

[Q3.9:发送间隔（全局与单个触发器）的插入方法](#q39-怎么设置发送间隔以防止说话太多刷屏)

[Q3.10:new和old合用以实现前后两个动作的检测](#q310-怎么设置动作前后检测实现一定程度上在某些情况下的受击检测)

[Q3.11:应用new和old来防止开电锯动作在超解动作内存在延迟输入帧的实例](#q311-为什么我盾斧开电锯会说超解的文本)

[Q3.12:伤害检测功能的使用方法](#q312-怎么给动作添加伤害检测)
# 下面根据问题类别进行分类，共分为三个板块

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

### Q 1.3 为什么我没办法使用mod盒子安装mod，打开下载的东西怎么和下图一样一堆不认识的？

![alt text](img/image-35.png)

A:你下载的是这个mod的**源码**，需要经过**基于Rust环境的编译**才能转换为二进制文件（dll）。

## 编译相关的问题请自己解决

如果你有信心去试图编译，笔者以及作者概不承担编译过程中的问题对游戏产生的任何影响。

如果你没有信心去编译，还是乖乖掏影响力去买吧

## **这是试图不劳而获之人必将面临的问题。**

你很聪明，知道踩蘑菇帖子贴的主仓库的链接里面可能有你想要的东西，你也成功的把里面的东西下载下来了。

然而，这个仓库里面可没有你想要的dll文件，有的只是更加宝贵的东西——**源码**

你的无知认为这只不过是一个比较特殊的mod，只要和那些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插件，即可方便的编辑和浏览配置文件。![alt text](image.png)
### Q2.9 为什么我的文件名是mas-config.toml，而情况和Q2.5一样？

A: 你可能在![alt text](img/image.png)这个地方没把*显示扩展名*![alt text](img/image-23.png)打开，把它打开然后再改名或者直接将配置文件名字改成mas-config再启动游戏。

**注：无论是否开启文件扩展名，dll文件是始终显示其扩展名的，另外附在有无打开文件扩展名下正确的文件名字：**

打开显示扩展名时：

![alt text](img/image.png)

当前文件名应为(上面的example是作为文件扩展名打开后的对比)：

![alt text](img/image-32.png)

未打开显示扩展名时：

![alt text](img/image-33.png)

当前文件名应为(上面的example是作为文件扩展名关闭后的对比)：

![alt text](img/image-34.png)
## 根据群内的调研，绝大部分人在mod使用方面第一个遇到的就是这个问题，从试图改盒子内的配置文件到找不到配置文件在哪，类似的问题比比皆是。这里笔者严肃指明：配置文件*必须*以正确的名字放置在plugins文件夹内，否则系统是*一定*找不到配置文件的。
### 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攻击吧*）

### Q2.11 错误日志中关于文本行列数的报错有什么原理和机制吗

A: 读懂日志只需要四级能过甚至高考及格的英语水平，再不懂可以用词典查或者机翻...

这里举两个例子：

**例一：**

![alt text](img/image-36.png)!

如图，错误的地点已经在下方使用符号`^`标记出来了，精确到每一个字母。

在错误字段后面给出了英文解释，比如上述错误的原因就是：***需要精确到一个元素，包含多个元素***

意思是：这段代码出现了冗余元素，导致只需要一个元素的部分因为检测到多个元素产生了冲突，从而引发报错并将其反馈到日志中。

引发类似错误的 ***错误代码*** 案例如下：

```toml
  # ========== 真蓄造成伤害--常见错误代码 ==========
[[trigger]]
action_mode = "sequential_all"

    [trigger.trigger_on.damage]
    value = { lt = 1000 }

    [trigger.trigger_on.fsm]
    new = { target = 3, id = {in = [135,136,137]} }

    [[trigger.check]]
    weapon_type.value = 0

    [[trigger.action]]
    cmd = "SendChatMessage"
    param = "<STYL MOJI_LIGHTBLUE_DEFAULT><SIZE 30>强击真蓄！造成了<SIZE 40>{{damage}}<SIZE 30>伤害</SIZE></STYL>"

```
上面的代码中，
```toml
    [trigger.trigger_on.damage]
    value = { lt = 1000 }

    [trigger.trigger_on.fsm]
    new = { target = 3, id = {in = [135,136,137]} }

```
是引发错误的原因，即`[trigger.trigger_on.damage]`和`[trigger.trigger_on.fsm]`的存在导致只需要一个元素的`trigger.on`部分因为检测到多个元素产生了冲突，从而引发报错并将其反馈到日志中。

**例二：**

![alt text](img/image-37.png)

该例子中，错误字段的英文解释是 ***未知变量`damage`,除了......（后面的都是合法的变量名）***

意思是：这段代码的`trigger.on`后面的变量是未知的，导致报错。*具体原因是mod版本为0.1.4及以下，未添加伤害检测，此时强行插入伤害检测变量`damage`并不会使系统检测到，而是将其视作未知变量处理，导致报错。*

***错误代码***案例如下 ***(假设该代码被写入配置文件并加载时mod版本低于0.1.5)***：
```toml
  # ========== 真蓄造成伤害 ==========
[[trigger]]
action_mode = "sequential_all"

    [trigger.trigger_on.damage]
    value = { lt = 1000 }

    [[trigger.check]]
    fsm.value = { target = 3, id = {in = [135,136,137]} }

    [[trigger.check]]
    weapon_type.value = 0

    [[trigger.action]]
    cmd = "SendChatMessage"
    param = "<STYL MOJI_LIGHTBLUE_DEFAULT><SIZE 30>强击真蓄！造成了<SIZE 40>{{damage}}<SIZE 30>伤害</SIZE></STYL>"

```
上面的代码中

```toml
    [trigger.trigger_on.damage]
```
是引发错误的原因，因为mod在0.1.5版本前并未添加伤害检测，强行插入伤害检测变量`damage`并不会使系统检测到，而是将其视作未知变量处理，导致报错。

**注：在编辑文本时遇到报错的问题时一定要去观察并理解日志报错的原因，看懂了日志就可以找出错误并自行纠正，能有效减少甚至避免同样的错误再次发生。**
## 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`表示这是一个触发器条件。

触发器条件**有且仅有一个**，表示当发生触发器所指示的事件时，若满足设置的条件，则执行触发器。

**注：现在可以使用另一种方式来检查武器动作，具体可参考如下代码**

```toml
      [[trigger.check]]
    fsm.value = { target = 3, id = 137 }
# 这块检测代码是作者添加伤害检测后，原本用于fsm的触发器条件被伤害检测使用，故添加此检测器以防止出现两个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请自行按照上述查找fsm的方法进行查找。

### Q3.5 怎么让一个触发器检测多个动作？

A:使用`in`函数以判断事件的值是否包含在数组内。

下面举个例子，以铳枪的龙杭炮为例。

```toml
  [[trigger]]
action_mode = "sequential_all"

[trigger.trigger_on.fsm]
new = { target = 3, id = {in = [110,114]} }

# in是一个函数，用于判断事件的值是否包含在数组内，需要用花括号{}包起来。同理，你也可以在花括号内使用'nin'来排除动作

[[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)。

**注：in有对应的反函数nin，可用于检测除内部动作之外的其他动作**

### 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"
cooldown = 1
# 设置该触发器发送间隔为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`字段，即可设置单触发器的发送间隔(以秒计算)。

### Q3.10 怎么设置动作前后检测，实现一定程度上在某些情况下的受击检测？

A:使用`old`和`new`字段，可检测执行该动作的上一个动作，具体请参考如下代码(这里贴出一段登龙被打导致登龙失败的自动文本)：
  
```toml
# 登龙被打导致登龙失败
    [[trigger]]
    action_mode = "random"

    [trigger.trigger_on.fsm]
    old = { target = 3, id = {in = [87,89,90,91]} }
    new = { target = 1, id = {nin = [87,89,90,91]} }
# 这里用了 in 和 nin 两个函数，一个是检测登龙的动作，一个检测玩家的状态（fsmtarget = 1是纳刀态和硬直，fsmtarget = 3是拔刀态）基于笔者最新的发现，即在检测前后两个动作时，新动作检测的是硬直态的话就可以实现动作被打断的检测。
    [[trigger.check]]
    weapon_type.value = 3

    [[trigger.action]]
    cmd = "SendChatMessage"
    param = "<STYL MOJI_WHITE_DEFAULT><SIZE 30>太刀侠登龙时<STYL MOJI_RED_DEFAULT><SIZE 40>被打飞了，其他武器纳刀默哀30秒</SIZE></STYL>"

```
`old`用于检测当前动作的上一个动作`new`用于检测当前动作。当前的动作符合`new`内的动作且上一个符合`old`内包含的动作时，触发器才会触发。

比如上面`old`内是检测登龙的拆分动作（气刃突刺，起跳，空中抬刀预备动作，气刃兜割下劈），`new`内是检测玩家处于纳刀和硬直状态`target = 1`(*内部`fsmid`暂未完全测试，建议填写一个不超过100的数字*), 当登龙被打断时，系统会先检测上一个动作是否是登龙中的动作，然后检测下一个动作是不是玩家的纳刀和硬直状态，若符合则触发该触发器并发送![alt text](img/image-29.png)

### Q3.11 为什么我盾斧开电锯会说超解的文本？

A：目前因为开电锯时存在延迟输入帧（就是可以在超解动作开始时的约0.2秒内按钩爪键可以把超解动作转换为开电锯的动作），导致开电锯按晚了会有超解文本发送。

目前笔者找到了一种基于[Q3.10](#q310-怎么设置动作前后检测，实现一定程度上在某些情况下的受击检测)的解决方法，具体请参考如下代码（**可以直接复制粘贴并应用**）：

```toml
  # ========== 盾斧超解动作 ==========
[[trigger]]
action_mode = "random"

[trigger.trigger_on.fsm]
old = { target = 3, id = 120 }
new = { target = 3, id = {in = [0,1,3,6,19,20,21,22]} }
# 这里new把所有超解完毕后可能的派生（站立，移动，回避）都贴了出来并放在超解后的动作检测里，借此以防止在超解的延迟输入帧内开电锯的的问题出现

[[trigger.check]]
weapon_type.value = 9

[[trigger.action]]
cmd = "SendChatMessage"
param = "*超解"

```
**注：该触发器是基于超解完毕后的动作判定触发的，所以使用时并不会在“理想的”时机内发送文本，延迟发送功能请期待后续更新**

### Q3.12 怎么给动作添加伤害检测？

A：使用新的触发器条件`[trigger.trigger_on.damage]`来检测，具体使用方式如下：
```toml
# ========== 真蓄造成伤害 ==========
[[trigger]]
action_mode = "sequential_all"

    [trigger.trigger_on.damage]
    value = { gt = 200 }
# 这是mod作者与0.1.5版本添加的新的触发器条件，用于检测该动作的伤害是否大于一定值（这里写200），即真蓄伤害大于200则触发该触发器。你也可以把gt改为lt，表示小于200则触发该触发器。

    [[trigger.check]]
    weapon_type.value = 0
# 武器检测

    [[trigger.check]]
    fsm.value = { target = 3, id = {in = [135,136,137]} }
# 鉴于伤害检测会占用触发器条件检测，故mod作者将动作检测改为可设置多个的`trigger.check`并放到这里，以防止出现两个trigger_on导致加载配置时出现冲突的情况

    [[trigger.action]]
    cmd = "SendChatMessage"
    param = "<STYL MOJI_LIGHTBLUE_DEFAULT><SIZE 30>强击真蓄！造成了<SIZE 40>{{damage}}<SIZE 30>伤害</SIZE></STYL>"
```
上述代码若正常运行，则在任意触发强击的真蓄力斩伤害大于等于200时发送如下文本：

![alt text](img/image-30.png)

**注：任何动作要添加伤害检测时请务必使用上述的格式来编写自动文本，否则当一个触发器内同时存在两个`trigger.trigger_on`结构时，mod会报错并触发如下警告：**

![alt text](img/image-31.png)

*`trigger.trigger_on`只能检测一个元素，该触发器内检测到多个元素。* **报错如是说到...**
# 本文由Stellaraven 结合群内各种问题编写。还有问题请到群*259616154*内咨询。

# Thanks For Your Reading
