more-auto-shoutouts-docs/README.md

14 KiB
Raw Blame History

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

前置安装路径如下

Strack's Loader 前置的压缩包解压,我们能看到如下内容

alt text

将其放入 steamapps\common\Monster Hunter World 中即可

!CRCBypass.dll 装在 steamapps\common\Monster Hunter World\nativePC\plugins

大部分情况下按正确路径安装mod可以保证mod正常生效

Q 1.2 为什么我安装了mod但是游戏崩溃了

A:如果你已经按照 Q1.1 中的安装路径正确安装了对应的前置与mod请检查你的狩技盒子中的mod或者手动安装的mod与本mod是否存在冲突。

检查方法删除所有mod一并将下图中所有的非文件夹文件除了启动程序alt text外以及文件夹nativePCalt text删除,并验证游戏完整性

alt text

在这里验证游戏完整性

alt text

完整性检查完毕后,重新按 Q1.1 中的步骤安装前置和mod。

2.使用类问题

Q2.1 我在启动游戏时弹窗内出现如下情况,怎么办?

alt text

A: 经典的过期前置问题。在去年mhw最后一次为支持新语言更新后一个叫hid.dll的文件在mhw根目录中会导致游戏崩溃请将其删除并更新前置。

Q2.2 我在启动游戏时弹窗内出现如下情况,怎么办?

alt text

A类似的情况例如显示dll无法加载等文件加载失败说明mod安装路径或者前置可能存在问题请检查mod安装路径或者更新前置并按照 Q1.1 中的安装路径正确安装前置和mod。

Q2.3 我在启动游戏时弹窗内出现如下情况,怎么办?

alt text

A: 126错误是文件找不到此外该情况还出现了 Q2.2 的情况,首先按 Q2.2 处理过期文件再将mod按 Q1.1 的方式正确安装mod

Q2.4 尝试通过日志获取fsm信息出现下面情况怎么办

alt text

A该情况是因为前版本0.1.0未更新debug功能请更新版本

Q2.5 我在启动游戏时弹窗内出现如下情况,怎么办?

alt text

A: alt text

作者在踩蘑菇原文已经说的非常清楚了,请自己将文件alt text名字修改为mas-config.toml。改个名都有人能改错吗?真的有!

Q2.6 我在启动游戏时弹窗内出现如下情况,怎么办?

alt textalt text

A: 这些错误都是文本型错误说明你的配置文件中存在不正确的文本或者触发器格式导致mod加载时出现错误。请打开mas-config.toml并按日志内alt textalt text所显示的行列数找到相关的错误原因并按照Q3.2进行修复。

Q2.7:为什么我在游戏内发言过多被系统禁言然后禁言消息会自动弹出,干扰战斗?

A:这就要怪你自己咯,设那么多又发那么多,被禁言后做出触发自动文本动作导致游戏中的你强行发言被弹窗警告。少说点吧,话痨

Q2.8:怎么让配置文件方便观察和编辑?

A: 请使用vscode打开mas-config.toml并安装toml插件即可方便的编辑和浏览配置文件。

Q2.9:为什么我的文件名是mas-config.toml而情况和[Q2.5](#q25 -为什么我在启动游戏时弹窗内出现如下情况怎么办) 一样?

A: 你可能在alt text这个地方没把显示扩展名alt text打开把它打开然后再改名或者直接将配置文件名字改成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: 随机选取执行

触发条件用于检测状态,只要源码允许,触发器可检测游戏内任何可能存在的状态并激活发送器

下面以一个自动文本案例举例说明。

[[trigger]]
action_mode = "random"

这是一个触发条件控制,其中random说明发送模式为随机选取发送器内文本发送。

[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说明检测时玩家只有使用太刀才能触发。

[[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>"

这个是行为,用于发送文本。

[[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彩色文本和字体大小都是游戏内置支持。标记格式参考如下

<STYL MOJI_GREEN_DEFAULT><SIZE 30>黑龙歼灭刀将要使用一种从天而降的刀法</SIZE></STYL>

其中:<STYL MOJI_GREEN_DEFAULT>决定字体颜色,颜色参考如下:

alt text

mhw游戏中可用的字体颜色对应代码如下

<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

作者和编者都建议不要对长文本应用过大的字号,带来的观感并不会尽如人意的...

黑龙歼灭刀将要使用一种从天而降的刀法是一个示例文本,这个就是你触发条件后发在游戏里面的文本(想怎么下头的写法就怎么下头吧,决定权在你)

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

如红字所说后面那个fsmid对应的数值就是武器当前执行的动作id。有了这个id就可以参考Q3.2制作自动文本了

方案二luaengine适合除了编辑自动文本的需求外存在其他数据获取需求对基于luaengine编写的mod感兴趣或有制作意图的用户

luaengine相关就不在这阐述了一切相关问题请移步踩蘑菇luaengine教程贴https://www.caimogu.cc/post/943219.html

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

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

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

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

Q3.6:为什么我的文本修饰了还是默认的文本?

A:请检查文本中是否含有<STYL</STYL>,这两个标签是用于控制文本样式的,请检查文本段的末尾中否含有这两个标签, 如果没有会导致该文本无法被检测到颜色和字体的修改,并以默认形式的文本发送。

Q3.7:为什么我的文本只说了一部分?

A:一个param内的文本所包含的字节数存在上限128个字节现举例说明

param = "<STYL MOJI_LIGHTGREEN_DEFAULT><SIZE 30>一二三四五六七八九十壹贰叄肆伍陆柒捌玖拾甲乙丙丁戊己庚辛壬癸</SIZE></STYL>"
#"<STYL MOJI_LIGHTGREEN_DEFAULT><SIZE 30>一二三四五六七八九十壹贰叄肆伍陆柒捌玖拾甲乙丙丁戊己庚辛壬癸"是被计算进字符的部分

汉字全角标点符号三个字节,所有的英文字母,数字半角标点符号一个字节

写入的字段中包含了30个汉字其他字母数字和半角符号合计39个合计字节是30*3+39=129个。让我们看看发出去的文本会是啥样

alt text

如图写入了30个汉字实际上只发出来了29个说明输入文本时字段包含的字节数超过上限129>128,导致文本中最后一个汉字的字符被截断,无法被输出。

笔者建议设置自动文本时不要使文本部分的汉字与中文标点符号数量超过30否则会使发送时文本因超过字节上限被截断。

Q3.8:怎么设置复合的颜色和字号文本,比如alt text这样的?

A:gmd支持在同一句话中使用分隔的多个颜色和字号tag对不同的文本段标注具体可参考如下代码上图中三色字体飞圆斩的发送器

[[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中的编辑方式,每一段不同样式文本的标签排序必须按照颜色<STYL MOJI_GREEN_DEFAULT>在前字号<SIZE 40>在后顺序排列。

这里将文本代码放入了一个发送器的param内可以复制粘贴放入任意param直接使用

本文由Stellaraven 结合群内各种问题编写。还有问题请到群259616154内咨询。

Thank For Your Reading