じ☆ve冰风 发表于 2026-7-21 18:37:11

【预告】从RMXP移植过来的对话框增强脚本

从日志记录来看,前后花了10天时间,ruby->js那可太麻烦了,而且为了适配MZ的新引擎特性,移植中做了相当多的改动
先预告一下,放出完整的说明文档,2天后会正式上传工程(正好我也需要一点时间来做模板工程、截图等)
主要是也收集一下MZ这边的制作者们,都需要哪些对话框增强特性,我提供的特性够不够,不够的话,我还可以加

JAVASCRIPT 代码
//=============================================================================
// RPG Maker MZ - SailCat's Extended Message UI
//=============================================================================

/*:zh
* @target MZ
* @plugindesc 扩展消息界面
* 统合选项列表和数值输入到消息窗口,并极大增强消息窗口的控制能力。
* @author SailCat
* @help SEPUIMessageEx.js
* v 1.0.0 (2026-07-09) 初版
*
* 本插件依赖 SEPUICore.js 1.0.0 以上版本。
*
* 功能概览:
*
* 1. 可将选项列表和数值输入统合到消息窗口内部,统一界面风格。
* 2. 增补支持30余项转义文本指令,用于宏替换游戏数据文字和控制窗口行为。
*    a) 角色/队员/敌人的属性值
*    b) 职业/技能/物品/武器/防具/状态/敌人/敌群/图块的名称
*    c) 任意地图名称(来自地图信息表)或当前地图名称(来自地图名字段)
*    d) 属性/武器类别/防具类别/装备类型/技能类型的名称
*    e) 公式计算值
*    f) 文本用语(TextManager)中的名称
*    g) 指针式引用变量值
*    h) 支持多种文字格式:上下标、下划线、删除线、制表位、颜色、对齐等。
* 3. 可拓展选项列表支持的最大选项数,最高可至12项。
* 4. 消息窗口可以吸附到说话角色或事件上,显示fuki箭头并自动跟随移动。
* 5. 可以通过插件指令开启或关闭长文章功能,连缀相邻的消息指令形成长文章。
* 6. 支持在消息窗口两侧显示角色立绘。
* 7. 支持根据说话人不同,自动切换窗口皮肤和fuki箭头样式。
* 8. 可以通过插件指令设置消息窗口打字播放音效。
*
* 使用说明:
*
* 1. 首先开启本插件(需要SEP UI核心插件1.0.0以上版本)。
* 2. 完成插件参数配置中的统合模式、最大选项数、颜色和排版相关配置等。
* 3. 使用增补支持的转义文本指令,对文本内容进行宏替换和格式化操作。
*    具体支持的转义文本指令列表,请参考下方文档说明。
* 4. 开启长文章后,相邻的消息指令如果窗口、头像、姓名均一致,则自动连缀。
* 5. 在选择项指令中使用\/拆分子项,并可将选中子项序号存入变量以便后续使用。
*
* 注意事项:
*
* 1. 统合模式下,不再创建选项列表/数值输入子窗口,改为在消息窗中操作。
* 2. 原生模式下,行为与引擎默认一致。
*    受原生模式的窗口尺寸与分辨率限制,最大可见选项数可能受限。
* 3. 当显示角色立绘时,消息窗口会被固定在屏幕底端,吸附及事件调整位置无效。
*    但是,使用\@[-2]将窗口全屏无边化有效,只是会遮挡立绘。
* 4. 当显示角色立绘时,消息窗口会被缩小到屏幕的一半宽度,但最小可保证显示
*    游戏系统配置中“脸图显示时消息窗口宽度”的文字数。
* 5. 为符合用户习惯,部分转义文本指令在有无参数时行为有别,请正确使用。
* 6. fuki箭头可以单独指令图片文件,若未指令,则会从窗口皮肤中自动检测。
*    窗口皮肤从(120, 36)到(144, 60)的区域若有相关图案,裁切上下两半使用。
*    若仍未检测到,会切割窗口边框四角图案,拼接成fuki箭头图案使用。
* 7. 开启长文章模式时,若连缀了文章,则消息不会再自动收入选择项、数值输入
*    和物品选择,无论是否为统合模式。这是因为消息窗口本身被加高,可能造成
*    显示空间不足或遮挡。若需令选择项与前面的消息同屏显示,请先关闭长文章。
* 8. 被\/拆分的选择项不同子项,在被选中后会进入原本的同一选项的分支,例如:
*    显示选择项:选项1, 选项2a\/选项2b, 选项3, 选项4a\/选项4b\/选项4c
*    选项1的场合
*      // 事件指令列表1
*    选项2a\/选项2b的场合
*      // 事件指令列表2
*    选项3的场合
*      // 事件指令列表3
*    选项4a\/选项4b\/选项4c的场合
*      // 事件指令列表4
*    分歧结束
*    在显示选择项时,所有子项会被打散,窗口列出共计7个选项,每条一行:
*    选项1, 选项2a, 选项2b, 选项3, 选项4a, 选项4b, 选项4c
*    若选中选项2a或选项2b,均会进入事件指令列表2。此时,通过存入变量可以
*    判断选中的是2a(值为1)还是2b(值为2)。
*    如果没有指定子项存储的变量,则具体的子项信息会丢失,无法判断。
* 9. 使用插件指令更改窗口皮肤,优先于按照说话人名称映射皮肤。
* 10.按照说话人姓名映射皮肤时,说话人姓名需与插件配置中注册的名称精确一致,
*    包括大小写、空格(含前后空格)、标点等,均需完全一致,否则无效。
* 11.若要关闭打字音效,使用插件指令将SE文件名设置为空即可。
*    快速显示的消息,会直接显示出来,不会触发打字音效。
*
* 【增强版转义文本指令集,含MZ原生指令,适用于所有drawTextEx方法绘制的文字】
*
*   信息替换类:
*   指令                参数示例      说明
*   \\                  (无参数)    显示反斜杠
*   \N[角色ID]          \N         显示角色名称
*   \N[角色ID.]         \N      显示角色昵称
*   \N[角色ID.属性名]   \N   显示角色的指定属性值
*   \P[队员序号]      \P         显示队员名称
*   \P[队员序号.]       \P      显示队员昵称
*   \P[队员序号.属性名] \P   显示队员的指定属性值
*   \E[敌人序号]      \E         显示敌人名称
*   \E[敌人序号.属性名] \E   显示敌人的指定属性值
*   - 在战斗中,敌人序号指敌人在当前敌群中的顺序号,从1开始
*   - 在战斗外,敌人序号指敌人自己的数据ID编号
*   \V[变量ID]          \V         显示变量值
*   \V[\V[变量ID]]      \V[\V]   显示指针式引用变量值,可多次嵌套
*   - 由于\V指令会先于其他所有指令被替换,故可用变量来指定其他指令的参数
*   \%[公式]            \%   显示公式计算值
*   \%{公式}            \%{1+2*3}   同上,支持公式中有方括号的情况
*   - 公式中可直接引用以下变量和方法:
*   v[变量ID]         变量值
*   s[开关ID]         开关值
*   ss[独立开关键]    独立开关值
*   p               等同于$gameParty
*   l               等同于$gamePlayer
*   a(角色ID)         等同于$gameActors.actor(角色ID)
*   b(敌人ID)         等同于$gameTroop.enemy(敌人ID)
*   ev(事件ID)      等同于$gameMap.event(事件ID)
*   \G                  (无参数)    显示货币单位
*   \T[文本用语键]      \T    显示文本用语中的指定名称
*   \I[图标ID]          \I         显示指定图标
*   \M[地图ID]          \M         显示指定地图名称(来自地图信息表)
*   \M                  (无参数)    显示当前地图名称(来自地图名字段)
*   \CL[职业ID]         \CL      显示指定职业名称
*   \SK[技能ID]         \SK      显示指定技能名称(带有图标)
*   \IT[物品ID]         \IT      显示指定物品名称(带有图标)
*   \WE[武器ID]         \WE      显示指定武器名称(带有图标)
*   \AR[防具ID]         \AR      显示指定防具名称(带有图标)
*   \SA[状态ID]         \SA      显示指定状态名称(带有图标)
*   \TR[敌群ID]         \TR      显示指定敌群名称
*   \TI[图块ID]         \TI      显示指定图块名称
*   \EL[属性ID]         \EL      显示指定属性名称
*   \WT[武器类别ID]   \WT      显示指定武器类别名称
*   \AT[防具类别ID]   \AT      显示指定防具类别名称
*   \ET[装备类型ID]   \ET      显示指定装备类型名称
*   \ST[技能类型ID]   \ST      显示指定技能类型名称
*   \EV[事件ID]         \EV      显示指定事件名称
*   \ [重复次数]      \          显示指定数量的连续空格
*   \,[数字]            \,    显示逗号分隔的数字
*   - 在中文、日语、韩文环境下,100403显示为10,0403
*   - 在其他语言环境下,100403显示为100,403
*   \#[数字]            \#       显示指定数字的本地语言化表达
*   - 例如,在中文环境下,123显示为一百二十三
*
*   颜色控制类:
*   指令                参数示例      说明
*   \C[颜色序号]      \C         改变文字颜色,按系统调色板序号
*   \C[颜色值]          \C[#846DC5]   改变文字颜色,按CSS颜色值
*   \C[颜色名]          \C       改变文字颜色,按CSS基本颜色名
*   \C      \C改变文字颜色,按RGB颜色值
*   \O[透明度]          \O       改变文字透明度,按0~255的数值
*   若启用扩展颜色支持,则还支持:
*   \C    \C 改变文字颜色,按HSL颜色值
*   \C[扩展颜色名]      \C 改变文字颜色,按CSS扩展颜色名
*   若启用透明颜色支持,则还支持:
*   \C   \C 改变文字颜色,按RGBA颜色值
*   \C \C 改变文字颜色,按HSLA颜色值
*   \C[带透明度的颜色值] \C[#FF808080] 改变文字颜色,按带透明度的HEX颜色值
*   \C   \C 将文字色变为透明
*
*   格式控制类:
*   指令                参数示例      说明
*   \FF[字体]         \FF    改变文字字体
*   \FS[字号]         \FS       改变文字字号
*   \{                  (无参数)    将文字字号增加12(不超过96)
*   \}                  (无参数)    将文字字号减少12(不低于24)
*   \PX          \PX      改变下一个字的起始X坐标
*   \PY          \PY      改变下一个字的起始Y坐标
*   \JX      \JX       使下一个字的打印位置横向平移
*   \JY      \JY       使下一个字的打印位置纵向平移
*   \J         \J         使下一个字的打印位置跳跃2个Tab空格
*   - Tab空格位置由“制表符停靠点”参数配置,未指定或超出时每4个字符停靠一次
*   \]                  (无参数)    本行剩余文字靠另一侧对齐
*   - 一般情况为向右对齐,若为从右向左打印的语言,则为向左对齐
*   \[                  (无参数)    本行剩余文字居中对齐
*   \:                  (无参数)    下一行文字缩进至这个位置开始显示
*   \`                  (无参数)    下一行文字取消缩进,从头开始显示
*   \/                  (无参数)    手动换行
*   \B[粗体文字]      \B[强调]       将括号内文字变为粗体
*   \I[斜体文字]      \I[引用]       将括号内文字变为斜体
*   - 斜体文字不能为纯数字,否则会被引擎识别为图标变换
*   \BI[粗斜体文字]   \BI[着重]      将括号内文字变为粗斜体
*   \*或\B            (无参数)    切换粗体,使用一次打开,再次关闭
*   \_或\I            (无参数)    切换斜体,使用一次打开,再次关闭
*   \U[下划线文字]      \U[关键词]   将括号内文字加上下划线
*   \S[删除线文字]      \S[删除]       将括号内文字加上删除线
*   \U[下划线型]      \U          为后续文字加上指定形状的下划线
*   - 下划线型参数为0~10,表示不同的下划线样式,其中0为取消下划线:
*   1: 单实线   2: 双实线   3: 粗实线   4: 点虚线   5: 短虚线
*   6: 长虚线   7: 点划线   8: 双点划线 9: 波浪线   10: 着重号
*   \S[删除线型]      \S          为后续文字加上指定形状的删除线
*   - 删除线型参数为0~10,表示不同的删除线样式,其中0为取消删除线:
*   1: 单实线   2: 双实线   3: 粗实线   4: 粗块线   5: 全遮挡
*   6: 示亡框   7: 横阴影   8: 竖阴影   9: 网格影   10: 字加框
*   \SP[上标]         \SP         将括号内文字以上标式样显示
*   \SB[下标]         \SB         将括号内文字以下标式样显示
*   \~                  (无参数)   重置字体样式为默认设置
*
* 【增强版转义控制指令集,含MZ原生指令,仅适用于对话框窗口】
*
*   显示流控制类:
*   指令                参数示例      说明
*   \.                  (无参数)    暂停等待0.25秒
*   \;                  (无参数)    暂停等待0.5秒
*   \|                  (无参数)    暂停等待1秒
*   \Z[帧数]            \Z      暂停等待指定帧数(1秒=60帧)
*   \>                  (无参数)    立即显示剩余文字
*   \<                  (无参数)    取消立即显示剩余文字
*   \^                  (无参数)    消息结束后立即关闭窗口
*   \^[帧数]            \^      消息结束后延迟指定帧数关闭窗口
*   \K[速度]            \K         改变消息文字的显示速度,越大越慢
*   \SE[系统音效编号]    \SE       播放指定的系统音效(编号1-24)
*   \SE[音效文件名]      \SE   播放指定的系统音效(文件名)
*
*   外观控制类:
*   指令                参数示例      说明
*   \$                  (无参数)    显示金钱窗口
*   \W[变量ID]          \W         显示指定ID的变量窗口
*   \@[事件ID]         \@         将对话框吸附到指定ID的事件上
*   \@            \@         将对话框吸附到主角上
*   \@[-1]             \@[-1]      取消对话框吸附,恢复默认位置
*   \@[-2]             \@[-2]      将对话框全屏无边化,覆盖整个画面
*   \@[-3]             \@[-3]      将对话框缩小至刚好容纳文字的大小
*   \@       \@      将对话框吸附到指定ID的角色上
*   - 如角色在队,吸附到主角队列的对应人物上,如角色不在队或未开启队列行进
*   则吸附到主角上
*   \@      \@      将对话框吸附到指定序号的队员上
*   - 如开启队列行进,吸附到对应位置的人物上,若超出队列人数则吸附到主角上
*   \@      \@      将对话框吸附到指定序号的敌人上
*   - 仅限战斗中使用,敌人序号指敌人在当前敌群中的顺序号,从1开始
*   - 以上吸附格式均可追加水平和垂直偏移像素值,如 \@
*   \@                  (无参数)    对话框智能吸附
*   - 智能吸附的检测按照以下优先级进行:
*   a) 若当前对话指令有脸图,且与角色对应,则吸附到该角色上
*   b) 若当前对话指令有姓名,且与角色对应,则吸附到该角色上
*   c) 若当前对话指令有姓名,且与指令所在的事件名称对应,则吸附到该事件上
*   d) 战斗中,若当前对话指令有姓名,且与敌人对应,则吸附到该敌人上
*   e) 以上均不满足,则吸附到主角上
*   - 若打开插件参数的“自动吸附”配置,则智能吸附全时生效,无需显式指令
*   - 对话框吸附生效(不是-1或-2的值)时,对话框会缩小到刚好容纳文字的宽高
*   并显示指向吸附对象的fuki箭头,且会始终跟随对象移动
*   若吸附对象在屏幕可视范围外,对话框显示于所在方向的角上,fuki箭头外指
*   \L[立绘文件名]      \L    显示指定立绘图片在左侧
*   \L[角色ID]          \L         显示指定角色的立绘图片在左侧
*   - 以上格式均可追加水平中心点和垂直偏移像素值,如 \L
*   \R[立绘文件名]      \R    显示指定立绘图片在右侧
*   \R[角色ID]          \R         显示指定角色的立绘图片在右侧
*   - 以上格式均可追加水平中心点和垂直偏移像素值,如 \R
*   - 若要用角色ID指定立绘,需安装官方插件ActorPictures.js并指定角色立绘
*   - 立绘文件需放在 img/pictures/ 目录下
*   - 显示立绘时,消息窗口会被固定在屏幕底端,事件指令中的调整和吸附均无效
*
* 【fuki箭头图片素材规格说明】
*   fuki箭头图片素材的规格为,宽度建议为12-24像素,高度须为偶数像素。
*   其上部1/2的区域,作为指向上方的fuki箭头;
*   其下部1/2的区域,作为指向下方的fuki箭头。
*   当需要fuki箭头指向左侧或右侧时,会自动将图片旋转90度使用。
*
* 本插件在MIT许可证下发布。
* https://opensource.org/licenses/mit-license.php
*
* @base SEPUICore
* @orderAfter SEPUICore
*
* @param unifiedMode
* @text 统合模式
* @desc 选项和数值输入的展示方式。
* @type select
* @option 统合到消息窗口
* @value auto
* @option 原生独立窗口
* @value native
* @default auto
*
* @param maxVisibleChoices
* @text 最大可见选项数
* @desc 解放选项列表的最大可见选项数,最高支持12项。
* 项数会受到屏幕高度的限制,非统合模式原始分辨率约为9项。
* @type number
* @min 6
* @max 12
* @default 6
*
* @param allowExtendedColors
* @text 扩展颜色支持
* @desc 是否支持 HSL/HSLA 颜色和 CSS 扩展颜色名。
* @type boolean
* @default true
* @on 启用
* @off 禁用
*
* @param allowTransparentColors
* @text 透明颜色支持
* @desc 是否支持 RGBA/HSLA 颜色和透明关键字。
* @type boolean
* @default true
* @on 启用
* @off 禁用
*
* @param tabStop
* @text 制表符停靠点
* @desc 制表符停靠点的水平位置,单位像素。
* 如果留空,则每4个字符宽度为一个停靠点。
* @type number[]
*
* @param scriptFontSize
* @text 上/下标字体大小
* @desc 上标/下标的字体大小,相对于当前字号的比例值
* @type number
* @decimals 2
* @min 0.2
* @max 0.5
* @default 0.35
*
* @param variableWindowStyle
* @text 变量窗口样式
* @desc 变量窗口的样式配置。
* @type note
* @default "\n\n\n\n\n"
*
* @param actorPictureStyle
* @text 角色立绘样式
* @desc 角色立绘的样式配置。
* @type select
* @option 对齐长边
* @value cover
* @option 对齐短边
* @value contain
* @option 原始尺寸
* @value original
* @default cover
*
* @param actorPictureMarginH
* @text 角色立绘水平边距
* @desc 角色立绘的水平边距,单位像素或百分比
* 也可组合使用,如20%+40
* @type string
* @default 0
*
* @param actorPictureMarginV
* @text 角色立绘垂直边距
* @desc 角色立绘的垂直边距,单位像素或百分比
* 也可组合使用,如20%+40
* @type string
* @default 0
*
* @param autoSnap
* @text 自动吸附
* @desc 根据脸图、姓名等自动将对话框吸附到说话角色或事件。
* @type boolean
* @default true
* @on 启用
* @off 禁用
*
* @param windowskinMap
* @text 窗口皮肤映射
* @desc 指定说话人姓名、窗口皮肤、fuki箭头的对应关系
* @type struct[]
* @default []
*
* @param fukiArrowImage
* @text Fuki箭头图片
* @desc fuki箭头的图片文件名,放在 img/system/ 下。
* 留空则从窗口皮肤自动检测。
* @type file
* @dir img/system/
*
* @param choiceExpandVar
* @text 展开选项变量
* @desc 选项含\/拆分时,将选中子项序号(从1开始)存入该变量。
* 设为0则禁用。
* @type number
* @min 0
* @default 0
*
* @command longArticle
* @text 长文章模式
* @desc 连缀相邻的消息指令,形成长文章。
*
* @arg enabled
* @text 启用
* @desc 是否启用长文章模式。
* @type boolean
* @on 启用
* @off 禁用
* @default true
*
* @command longArticleMaxLines
* @text 最大行数
* @desc 设置长文章模式下的最大行数,超过则自动分页。
*
* @arg maxLines
* @text 最大行数
* @desc 长文章最大行数,超过则自动分页,超出屏幕高度也会分页。
* 若设置为0,则只受屏幕高度限制。
* @type number
* @min 0
* @default 0
*
* @command choiceExpandVar
* @text 展开选项变量
* @desc 指定接收\/拆分子项序号(从1开始)的变量。
*
* @arg variableId
* @text 变量ID
* @desc 设为0则禁用存储。
* @type number
* @min 0
* @default 0
*
* @command setTypingSE
* @text 设置打字音效
* @desc 设置当前消息窗口的打字音效。
*
* @arg se
* @text 打字音效
* @desc 打字音效的文件名,放在 audio/se/ 下。
* @type file
* @dir audio/se/
*
* @arg volume
* @text 音量
* @desc 打字音效的音量,0~100。
* @type number
* @min 0
* @max 100
* @default 90
*
* @arg pitch
* @text 音调
* @desc 打字音效的音调,50~150。
* @type number
* @min 50
* @max 150
* @default 100
*
* @arg pan
* @text 声道
* @desc 打字音效的声道,-100~100。
* @type number
* @min -100
* @max 100
* @default 0
*
* @command setMessageWindowskin
* @text 更改消息窗口皮肤
* @desc 更改当前消息窗口的窗口皮肤。
*
* @arg windowskin
* @text 窗口皮肤
* @desc 窗口皮肤的文件名,放在 img/system/ 下。
* @type file
* @dir img/system/
*
* @arg fukiArrow
* @text Fuki箭头
* @desc fuki箭头的图片文件名,放在 img/system/ 下。
* 留空则从窗口皮肤自动检测。
* @type file
* @dir img/system/
*
*/

/*~struct~windowskin:zh

* @param name
* @text 说话人姓名
* @desc 对应的说话人姓名,若留空,则匹配所有说话人。
* 必须严格匹配名称(区分大小写),相应的皮肤才会生效。
* @type string
* @default ""
*
* @param windowskin
* @text 窗口皮肤
* @desc 对应的窗口皮肤文件名,放在 img/system/ 下。
* @type file
* @dir img/system/
* @default ""
*
* @param fukiArrow
* @text Fuki箭头
* @desc 对应的fuki箭头图片文件名,放在 img/system/ 下。
* @type file
* @dir img/system/
* @default ""
*
*/



            本帖来自P1论坛作者来自网络,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=499143若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: 【预告】从RMXP移植过来的对话框增强脚本