Project1

标题: 【老鹰的RGSS3脚本小巢】对话框扩展(9.6英语版) [打印本页]

作者: 百里_飞柳    时间: 2019-3-30 15:04
标题: 【老鹰的RGSS3脚本小巢】对话框扩展(9.6英语版)
本帖最后由 百里_飞柳 于 2023-9-6 21:42 编辑



LOGO绘制by @congwsbn

○ 前言

之前曾经发过一个记录自己写的数据库扩展的脚本帖子,不过果然是坑了hhh
所以更改了下方案,之后还是上传到自己的github仓库,方便我自己维护,也方便其他人查看。
我也学乖了,不再在同一个帖子里反复编辑更新,而是在有较大的系统完成后发布新帖子,这样也方便大家能直接看到我的最新操作。
这个帖子便是宣传与发布我的对话框扩展系统。


○ 概述

默认对话框的功能实在是过于局限,所以最初我写了一个 对话框转义符扩展 插件来增加新的转义符,
但是有的转义符势必会修改对话框自己的一些属性,比如宽度高度、显示位置、背景等,
所以我在那个插件的基础上继续扩展,完成了 对话框扩展 插件,里面包含了更多的转义符,用于实现在显示文字的同时应用各种设置变更。

当然,我还为 对话框扩展 写了一系列的AddOn插件,譬如 选择框扩展、物品选择扩展、滚动文本框扩展、并行对话、关键词信息查看 等。
以后可能会有更多其他对话框相关效果诞生,我也非常期待大家的回复与创意~


○ GitHub仓库

我的RGSS3仓库地址为:https://github.com/OneEyedEagle/EAGLE-RGSS3
其中的 Message System 文件夹下放置了 对话框扩展 及其 AddOn 插件。
而其中的 Demos 文件夹下的 DEMO_EagleMessageEX 文件夹放置了我特地为这一套插件制作的简单范例工程。
出于私心,这个DEMO还携带了一个非常小的剧本,虽然没有绘制Fidelis系列的LOGO,不过它的确是我的某一个坑的剧情预热。

【2020.10.2 更新】由于真的有人完全搞不懂GitHub,所以我额外新增了一个 蓝奏云载点 密码是 fcu5,尽量保证和GitHub上的DEMO更新时间一致吧……


○ 英语版

超级感谢 Roninator2 和 BCj 努力把我的三个DEMO翻译成了英语版!具体请见这里
BIIIIIG THANKS to Roninator2 and BCj! They made awesome works to translate my three DEMOs into English version. More information is HERE.



○ 示例图

1
对话框扩展 + AddOn滚动文本框扩展
动图较大,酌情点开

【新增功能】其中全部文字特效均可在 对话框 中使用,但由于对话框的一些特性,并行绘制与指定文字位置的效果可能造成其他麻烦的问题,所以我没有给对话框转义符这些特性hhhh

2
对话框扩展 + AddOn选择框扩展 + 简单粒子系统发散式 + 粒子模板 + AddOn文字四散移出
事件脚本:$game_message.para = true
对话文本:\pop[1]\pout[1]\win[cwi3]据我推测,整件事情只有一个人有可能做到,\nl虽然说出来你会不信,不过全部证据都指向着他。
选项1:说重点。ex{ri-1rt1}
  事件脚本:t = "\\pop[1]啧,还是这么急。\n"
  事件脚本:$game_message.add_escape(t)
选项2:你确定?
对话文本:\pop[1]不管你信不信,这就是我全部的推理。
动图较大,酌情点开

【新增功能】当启用para开关时,选择框将会与对话框同步打开
【新增功能】选择框的文字移出效果,与对话框的文字移出效果相同

3
对话框扩展
脸图设置:名称:ph_t_1x1.png,索引:0
对话文本:\win[lh16]\pop[0w250h2]\cout[1]这当然是测试用的文本啦,写的非常长的一句话。
                测试换行效果。
                第三行呢?
                第四行会怎么样呢?\nl第五行了鸭!\facep[z-1dx-85dy50m1]
动图较大,酌情点开

【新增功能】脸图规格扩展,当脸图文件名含有 _mxn 格式的文本时(其中m和n为数字,x为小写字母X),在对话框中会认定该张图片为m行n列规格,若没有该文本,则为2行4列(同默认)
【新增功能】脸图z值偏移量的设置,当z值偏移量为-1时,将显示在对话框下方,且不占用对话框宽度;z值偏移值默认为1,脸图显示在对话框左侧,且占用宽度
【新增功能】内容滚动,当对话框的宽度高度固定时,在等待按键时,将开启内容滚动功能,此时按住方向键可以进行查看,按确定键或取消键继续下一指令

4
对话框扩展
对话文本:\cswing[o8]测试用一行文本。
动图较大,酌情点开

【新增功能】文字摇摆特效,全部文字特效已经整合到 Add-On选择框扩展 与 Add-On滚动文本框扩展 中。

5
对话框扩展
对话文本:\pop[0]\ctog[i0t10r1]警告\ctog[0]!——
\ctog[i0t12r1]警告!\ctog[0]
检测到\ctog[i0t30r0]不明身份\ctog[0]人员。
动图较大,酌情点开

【新增功能】文字切换特效。

6
对话框扩展
对话文本:\win[cwi1o5do-5fw1fh1]\cin[do5t30]\cout[do5t30vo30]这是故事最开始的地方,没有人知晓TA如何而来\pause[do2o5]
动图较大,酌情点开

【新增功能】指定文字移入移出的目的地。

7
对话框扩展
预览图较大,酌情点开

【新增功能】利用 \next 转义符,不关闭当前对话框,继续执行之后的事件指令,在下一个显示文本时,接着之前的对话框继续显示。

8
粒子发射器
动图较大,酌情点开

【新增功能】为老鹰的一些独立系统UI的背景,增加了动态连线的粒子特效


○ BUG反馈

由于我个人力量有限,在我未能完全尝试的情况下,部分转义符的组合可能会产生奇怪的BUG,请最好 截图 并 记录相关转义符变量参数值 来回帖询问。

【2020.5.3 更新】 ⑨姐姐因为接单原因用到了这个插件,所以开了一个Q群(647297622)进行交流使用,欢迎大家一起来扩展对话框的可能性~
点开查看二维码



○ 关于整合

原则上我并不想和其他任何对话框进行整合,
当然如果它们足够有趣或者你用钱砸我,我会热心帮忙。
【2020.8.22】对话框增强了兼容性,现在我的对话框完全独立于默认的对话框了,所以理论上可以和其他对话框一同存在。
同时在脚本开头处新增了一个常量,当该常量置为 true 时,将使用默认对话框。
但在事件中开启 $game_message 中的开关 eagle_message 后,将转而使用我的对话框。
并且由于独立了,并行对话等Addon也可以一起随其他对话框同时使用了。
作者: Arfies    时间: 2019-3-30 15:39
老鹰出品必属精品!!
实不相瞒我已经盯上这个文字效果很久了
作者: garfeng    时间: 2019-3-30 15:46
期待好久了!
作者: fux2    时间: 2019-3-30 22:58
老鹰聚聚的作品质量都不用怀疑,直接收藏
作者: congwsbn    时间: 2019-3-31 00:45
老鹰是不是应该感谢我!每天给我传bug的日子(
作者: 百里_飞柳    时间: 2019-7-9 00:02
更新了两个gif示例图,最近新增加的功能,顺便修复了很多bug……
作者: fux2    时间: 2019-7-9 00:07
效果过分强大,加入精华~
作者: jianyulei    时间: 2019-7-9 14:13
本帖最后由 jianyulei 于 2019-7-9 14:15 编辑

不知道能不能支持对话框中显示函数返回的结果
目前我想要在对话框中显示一些方法或变量的运算结果都要先将数据保存到变量中然后再用\v,很不方便.
作者: 火锅深处    时间: 2019-7-9 21:53
本帖最后由 火锅深处 于 2019-7-9 22:57 编辑

今天更新的版本下来显示stack level too deep......
然后,之前的版本,有一个疑问,不过这个不知道应该在这里问还是单开一贴比较好......
就是如果和喵呜喵5的快进脚本配合的话,转移符“\!”貌似会影响整句话,比如说“我说:\!你好”,那么前面“我说”的部分也要多按一次回车才会出现,
另外就是如果加上这个快进脚本的话浮在句尾的那个飘来飘去的图案(一直不知道怎么叫)又会回到中间的位置,
不太懂脚本,这是什么原理呢

======================
stack level too deep的问题,虽然我也记得是那样,但好像并没看出多什么东西,而且又下载了一遍,还是同样问题......

快进脚本

作者: 百里_飞柳    时间: 2019-7-9 22:53
本帖最后由 百里_飞柳 于 2019-7-9 22:54 编辑
火锅深处 发表于 2019-7-9 21:53
今天更新的版本下来显示stack level too deep......
然后,之前的版本,有一个疑问,不过这个不知道应该在 ...


关于对话快进:
MESSAGE_EX#skip?方法,将在每帧判定是否执行快进,我写了false,但后面保留了被注释的 Input.trigger?(:CTRL),你将false和#删了,就是按下ctrl键快进跳过当前对话(并不是快速完成显示,而是直接强制结束并关闭当前对话框)

我并未开启该功能,快进是直接放弃未绘制的内容,但因为我对话框实现原理的限制,未绘制的随文本更新而生效的转义符也将被跳过,这可能会导致一些不必要的显示错误,如果想启用快进功能,请务必确保位于文本中间或结尾的转义符不是非常重要的设置。
作者: 白色幸福    时间: 2019-10-5 14:38
本帖最后由 白色幸福 于 2019-10-5 14:58 编辑

对话框demo报错,玩到村长的那个hold符那里就会直接弹出:



不是码农也看不懂到底怎么回事 GitHub的那个bug修复我不知道应该给他修在哪儿  删掉hod就没那事儿了
作者: 白色幸福    时间: 2019-10-5 19:11
本帖最后由 白色幸福 于 2019-10-5 19:55 编辑
白色幸福 发表于 2019-10-5 14:38
对话框demo报错,玩到村长的那个hold符那里就会直接弹出:


非常感谢指路
不过我个人问一下这个脚本到底怎么使用?
我个人用在我的项目里,一些地方字体非常的小,但一旦使用了字体放大,整个项目所有的字体除了地图显示不受控制外,其他所有字体都变大了(这两种皆没有使用您脚本所带的转换符,都是原版默认的文字格式),需要用上下键才能看清全部的对话。不过还是感谢做了这么好的脚本,画面干净多了,就是,我还不太会调整

刚刚发现只要人物对话中有一个\{,一旦字体开始变大,,所有的字体就会开始变大,变成统一的文字大小,如果要是后面有文字大小变化会变得更大,而且不受控制。然后就只能用上下键才能看全文字了……看来我还是没研究明白这个东西怎么回事
但是显示地图名称还是特别小的小字,真就蒙了,而且地图显示名称那里是不能通过脚本改变文字大小的。
emm之前那个文字大小是前置修改改了文字大小的锅……但是后面文字变大不受那个前置文字修改的影响,总而言之,只要项目中有一处使用了字体放大,所有的文字都会被放大,必须在通过缩小回复到原来的大小,而不会想原来一句话一个文字大小
请问怎么解决?
作者: 白色幸福    时间: 2019-10-6 00:33
本帖最后由 白色幸福 于 2019-10-6 13:39 编辑

请问一下 刚刚尝试使用了 cswing,但后面就怎么都关掉了后出现了其他的文字特效,而且出现的效果怎么也关不掉 请问这要怎么处理? 是不是demo中的脚本需要更新了?






昨天更新了一下脚本,从头到尾跑了一遍,发现文字不受控制的歪斜现象,不过不是句句都歪了,而是有一句开始歪有一句就不歪了。还是没找到解决办法  而且好像关键词和文字回看因为都是shift所以冲突了?还是因为对话框的原因?
emm也许有置换符可以关闭所有的特效就好了,检测了半天没找到到底问题再哪儿




作者: 白色幸福    时间: 2019-10-6 15:03
白色幸福 发表于 2019-10-6 00:33
请问一下 刚刚尝试使用了 cswing,但后面就怎么都关掉了后出现了其他的文字特效,而且出现的效果怎么也关不 ...

转义符没毛病,脚本也没检测出毛病,就是奇怪在特效其实根本不是这个特效,而且我关不掉了,最后只好删掉不用这个cswing了了
作者: 白色幸福    时间: 2019-10-6 16:41
白色幸福 发表于 2019-10-6 15:03
转义符没毛病,脚本也没检测出毛病,就是奇怪在特效其实根本不是这个特效,而且我关不掉了,最后只好删掉 ...

鹰哥那个我确定事件和文字效果是对上的。只用了cswing,前面的其他的特效效果都关了
作者: fox370    时间: 2019-12-20 23:01
不客气的收下了 谢谢鹰酱大佬啦
作者: 翠靈月    时间: 2020-4-29 18:17
想请教一下并行对话的部分
为什么照着示例做却会报错呢

另外想再请教一下
并行对话有办法实现当玩家面朝某个方向时才触发(面朝其他方向时不触发&对话关闭)的功能吗?
作者: 百里_飞柳    时间: 2020-4-29 19:12
翠靈月 发表于 2020-4-29 18:17
想请教一下并行对话的部分
为什么照着示例做却会报错呢

是改错了一个地方,已经更新

可以用 p.direction 获取玩家的朝向(2468四方向)进行判定

如果已经有详细的设计,推荐用并行事件+事件脚本 MESSAGE_PARA.add(name, list_str[, ensure_fin]) 与 MESSAGE_PARA.list_finish(name) 来手动处理……
作者: chanszeman1018    时间: 2020-4-29 19:14
提示: 作者被禁止或删除 内容自动屏蔽
作者: 翠靈月    时间: 2020-5-1 21:25
本帖最后由 翠靈月 于 2020-5-2 14:08 编辑

(已解决?)⑨姐姐表示下个版本的RGD会修复这个问题
-------------------

作者: 百里_飞柳    时间: 2020-5-3 11:51
最新更新,增加了一个实时交流的Q群

以及对话框等又更新优化了一轮,现在更加稳定高效了()
作者: miuka    时间: 2020-5-19 22:08
交流群搜不到是为什么2333
作者: miuka    时间: 2020-5-19 22:39
miuka 发表于 2020-5-19 22:08
交流群搜不到是为什么2333

可能是群里没有打开允许群搜群,不过二维码也可以
作者: 时久之妖    时间: 2020-6-4 19:55

demo玩到村长hold符那里报错了……看不懂是什么问题orz把GitHub里的对话框扩展脚本复制粘贴重新覆盖也还是这样
作者: 百里_飞柳    时间: 2020-8-22 18:58
增强了兼容性,现在可以通过切换对话框来与其他对话框脚本共同使用了

当然,也可以直接关闭我这个对话框,然后使用addon并行对话来进行一些特效演出
作者: 火锅深处    时间: 2020-10-8 12:16
本帖最后由 火锅深处 于 2020-10-23 22:56 编辑

报一个不是特别大的发现,第一张地图上走到第二个对话框时,如果移动到其他地图,会有个空对话框在地图上有短暂的停留
一般是在如图的位置,也有一次出现在屏幕更下方的位置。



=======================================================================================
以及发现事件簿的文字会把部分转义符记上去,是因为写法和其他转义符不同吗(不过这个新功能真是好顶赞)

=======================================================================================
哎......?又下了1008那个版本,结果上面那张画的对话没有了?这个日志内容是调查右边那个骷髅会出现吧?
P.S.话说,这段对话在上一个版本调查骷髅是没有显示的,但是日志里有,1008版本则是显示了滚动文字,而日志里没有

以及,在完成最后的事件之后如果打开菜单会出现这个问题↓ 我确定这个问题是上个版本里没有的


=======================================================================================
2020.10.23
新的疑问,应该不算是对话脚本里的,但是找不到这个的所以占这边问一下......
“场景自由呼叫”脚本会导致喵呜的截图存档没有截图,这是为什么?
截图存档

场景自由呼叫也贴一下

作者: Kim_Shyuen    时间: 2021-1-20 16:40
報個bug ,是脚本起衝突嗎?


之前試著把整段注釋掉就可以了,也不知道是不是因爲這樣 偶爾會無預警關閉游戲

作者: 火锅深处    时间: 2021-2-13 22:40
本帖最后由 火锅深处 于 2021-2-16 10:00 编辑

新的疑问......对话框那边可以通过兼容模式暂时关闭,选项框扩展有办法也暂时关闭嘛?
==================
2021.2.16
因为是无关紧要的发现所以就在这边说了吧,【事件日志】或【对话日志】除了要在“组件-位图绘制转义符文本”之下以外还需要装【对话框扩展】和【并行对话】才能跑,下次别忘了注释

另外不确定是不是我设置的问题(写的是1,应该没有更改这块的默认),现在的版本好像不支持快进了(用的是喵5的那个),手头上一个能用快进的版本是19年7月的,20年10月的就不行了。
作者: CongMingDa    时间: 2021-4-10 19:33
我想用对话框透明写一个故事,所以就需要对话框能写很多字
默认对话框只能写几行
可以实现吗
作者: an_ice    时间: 2021-7-29 21:21
发现大佬还在更新脚本,来问一个很傻瓜的问题。就是我只想使用对话框提供的文字效果,但是不想让脚本中的对话框覆盖系统默认对话框,这个时候我应该怎么设置?
作者: an_ice    时间: 2021-7-31 14:13
an_ice 发表于 2021-7-29 21:21
发现大佬还在更新脚本,来问一个很傻瓜的问题。就是我只想使用对话框提供的文字效果,但是不想让脚本中的对 ...

可能是我表达的不够清晰!我的意思是我想保留对话框的原本位置应该怎么设置,只要使用大佬的对话框,对话框就会到人物头上去,我想像13L一样用这个对话框,让对话框还是在屏幕下方,并且不跟随人物,但是不知道参数怎么设置。
作者: an_ice    时间: 2021-8-2 20:20
an_ice 发表于 2021-7-31 14:13
可能是我表达的不够清晰!我的意思是我想保留对话框的原本位置应该怎么设置,只要使用大佬的对话框,对话 ...

发现确实是复制大佬样例的时候没删\pop……我是傻瓜感谢大佬的耐心回复!!我懂了!
作者: 百里_飞柳    时间: 2021-8-23 17:32
N多次更新后的自顶:

- 把词条系统(文字版)加入了DEMO中,并且与Addon关键词信息查看进行适配
- 对话框增加了 {{}} 格式文本来调用ruby脚本
- 修复了对话框中的几个奇怪的应该不会有人触发的bug
- Addon选择框扩展优化的注释排版,并且增加了选项的名称,用于制作一次性选项与选过选项的变色
作者: Nil2018    时间: 2021-8-23 21:48
老鹰大大,这个对话拓展太醋虾了,比较头疼的是我发现和Sion防卡脚本有冲突,自己的工程事件比较多,比较依赖该脚本。
能麻烦您帮看看有方法解决吗?可以有偿!

Sion防卡
RUBY 代码复制
  1. # 事件管理器 v1.1 bug 修正
  2. # 优化默认脚本事件运行效率
  3.  
  4. class Game_Event
  5.   attr(:copy_id, :map_id)
  6.   attr_accessor :copy_self_switch
  7.  
  8.   # 开始
  9.  
  10.   # 默认脚本距离屏幕比较远的事件是不会自主移动的
  11.  
  12.   # 这段脚本让全屏的事件都可以按照设置好的自身移动路线前进,如果静止的事件比较多会
  13.   # 比较省资源。如果不需要这个功能,就删除 开始 ~ 结束 之间的脚本
  14.  
  15.   def update_self_movement
  16.     if @stop_count > stop_count_threshold
  17.       case @move_type
  18.       when 1;  move_type_random
  19.       when 2;  move_type_toward_player
  20.       when 3;  move_type_custom
  21.       end
  22.     end
  23.   end
  24.  
  25.   # 结束
  26.  
  27.   alias_method :sEventManager_init_public_members, :init_public_members
  28.   def init_public_members #覆盖
  29.     @gridding = $game_map.gridding
  30.     sEventManager_init_public_members
  31.   end
  32.   def moveto(x, y) #修改父类方法
  33.     gridding_remove
  34.     super
  35.     gridding_insert
  36.   end
  37.   def move_straight(d, turn_ok = true) #修改父类方法
  38.     gridding_remove
  39.     super
  40.     gridding_insert
  41.   end
  42.   def move_diagonal(horz, vert) #修改父类方法
  43.     gridding_remove
  44.     super
  45.     gridding_insert
  46.   end
  47.   def gridding_remove
  48.     @gridding[@x][@y].delete(self)
  49.   end
  50.   def gridding_insert
  51.     @gridding[@x][@y].push(self)
  52.   end
  53. end
  54.  
  55. class Game_Map
  56.   attr(:gridding)
  57.   alias_method :sEventManager_setup_events, :setup_events
  58.   def setup_events
  59.     @gridding = Array.new(width + 1) { Array.new(height + 1) {[]} }
  60.     sEventManager_setup_events
  61.   end
  62.   def refresh_tile_events #覆盖
  63.   end
  64.   def events_xy(x, y) #覆盖
  65.     @gridding[x][y]
  66.   end
  67.   def events_xy_nt(x, y) #覆盖
  68.     @gridding[x][y].select {|event| !event.through}
  69.   end
  70.   def tile_events_xy(x, y) #覆盖
  71.     @gridding[x][y].select {|event| event.tile? && !event.through}
  72.   end
  73. end
  74. #
  75. # 精灵管理
  76. class Spriteset_Map
  77.   # 设置事件直径,如果你使用的事件图片较大可以适当增大这个数值
  78.   # 以防止事件进入画面但是没有显示出来。
  79.   EventRadius = 2
  80.   alias_method :sEventManager_create_characters, :create_characters
  81.   def create_characters
  82.     sEventManager_create_characters
  83.     setup_event_sprites
  84.   end
  85.   def setup_event_sprites
  86.     @events_sprites = {}
  87.     @character_sprites.each {|sp|
  88.       @events_sprites[sp.character] = sp if sp.character.class == Game_Event
  89.     }
  90.     @events_sprites.each_value {|sp| @character_sprites.delete(sp)}
  91.   end
  92.   alias_method :sEventManager_dispose_characters, :dispose_characters
  93.   def dispose_characters
  94.     @events_sprites.each_value {|sprite| sprite.dispose if sprite}
  95.     sEventManager_dispose_characters
  96.   end
  97.   alias_method :sEventManager_update_characters, :update_characters
  98.   def update_characters
  99.     sEventManager_update_characters
  100.     update_event_sprites
  101.   end
  102.   def update_event_sprites
  103.     ox = $game_map.display_x - EventRadius
  104.     ex = $game_map.display_x + Graphics.width / 32.0 + EventRadius - 1
  105.     oy = $game_map.display_y - EventRadius
  106.     ey = $game_map.display_y + Graphics.height / 32.0 + EventRadius - 0.875
  107.     mw = $game_map.width
  108.     mh = $game_map.height
  109.     lv = $game_map.loop_vertical?
  110.     lh = $game_map.loop_horizontal?
  111.     @events_sprites.each {|event, sprite|
  112.       x = event.real_x
  113.       y = event.real_y
  114.       if (x > ox && x < ex || lv && x + mw > ox && x + mw < ex) &&
  115.          (y > oy && y < ey || lh && y + mh > oy && y + mh < ey)
  116.         sprite ? sprite.update :
  117.           @events_sprites[event] = Sprite_Character.new(@viewport1, event)
  118.       elsif sprite
  119.         sprite.dispose
  120.         @events_sprites[event] = nil
  121.       end
  122.     }
  123.   end
  124. end

作者: 百里_飞柳    时间: 2021-8-23 22:19
Nil2018 发表于 2021-8-23 21:48
老鹰大大,这个对话拓展太醋虾了,比较头疼的是我发现和Sion防卡脚本有冲突,自己的工程事件比较多,比较依 ...

这个的确是我对话框有个bug,导致未找到精灵时直接报错
下个版本会修复,未找到精灵时取消pop效果

和这个插件的兼容如下,放到两个脚本的下面就可以了
  1. #=============================================================================
  2. # ○ 对话框扩展 兼容【事件管理器 v1.1 by Sion】
  3. # 放置于【事件管理器 v1.1 by Sion】与【对话框扩展 by老鹰】之下
  4. #=============================================================================
  5. class Window_EagleMessage
  6.   #--------------------------------------------------------------------------
  7.   # ● 获取pop对象的精灵(用于计算偏移值)
  8.   #--------------------------------------------------------------------------
  9.   def eagle_get_pop_sprite
  10.     # 地图场景中,所存储的并非精灵,需要再次检索
  11.     if pop_params[:type] == :map_chara
  12.       begin
  13.         SceneManager.scene.spriteset.character_sprites.each do |s|
  14.           return s if s.character == @eagle_pop_obj
  15.         end
  16.         SceneManager.scene.spriteset.events_sprites.each do |e, s|
  17.           return s if e == @eagle_pop_obj
  18.         end
  19.       rescue
  20.       end
  21.       return nil
  22.     end
  23.     return @eagle_pop_obj
  24.   end
  25. end
  26. class Spriteset_Map
  27.   attr_reader :events_sprites
  28. end
复制代码

作者: 百里_飞柳    时间: 2021-10-24 22:16
值此程序员整数节日1024,给对话框的DEMO进行了更新

加上了最新写的 粒子发射器 插件,对话框可以使用 \pout 转义符调用粒子特效来移出文字
并且为 对话日志 等我的独立UI加上了炫酷的背景粒子连线的特效

大概没有人能看懂我的粒子系统的使用方法吧(瘫)
所以如果有什么有趣的粒子特效想法也欢迎大家讨论

然而现在这个 粒子发射器 还太菜了,只能进行粒子的发射,没法聚集……


作者: 应答    时间: 2021-11-4 12:41
我想问一下,如何让对话日志在打开和退出的时候有声音,就是打开菜单和退出菜单的那个声音
我在其中的好几个地方试图加上Sound.play_ok和Sound.play_cancel,但要么无效要么一直响
因为其它地方都是有音效的,就对话日志没有,感觉会很奇怪
然后我还改了一点地方,就是把那个退出的按钮改成只有X键,按Q键退出不了
作者: 应答    时间: 2021-11-4 22:46
大大,我按你说的在ui_init和uidispose的前面和后面加上了Sound.play_ok还有Sound.play_cancel,但是不行,报错为undefined method 『play』 for Sound:Module……
我翻了一下脚本手册,再尝试了一下:
RUBY 代码复制
  1. #---
  2.   # 定义确定音效与取消音效
  3.   #---
  4.   def self.play_ook
  5.     play_system_sound(1)
  6.   end
  7.   def self.play_ccancel
  8.     play_system_sound(2)
  9.   end

然后底下相应地改成:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 呼叫UI,并执行至结束
  3.   #--------------------------------------------------------------------------
  4.   def self.call
  5.     return if logs.size == 0
  6.     Sound.play_ook
  7.     ui_init
  8.     ui_update
  9.     ui_dispose
  10.     Sound.play_ccancel
  11.   end

还是失败……
所以要怎么加入打开和关闭音效呢?
作者: 应答    时间: 2021-11-5 00:35
真的可以了,那个ook和ccancel是我重新定义的,所以不是打错了
一开始我添加的就是「Sound.play_ok」和cancel,但不知道为什么报错了,所以我参照帮助手册的Sound模块自己定义了一个
不管了,反正解决了就行
作者: BCJenbo    时间: 2023-9-1 01:56
你好!
我正在使用谷歌翻譯,希望沒問題。

我發現了一個錯誤。當我使用你最新的MessageEX腳本時這個“\pop[0]\pout[1]\cwave[1]信念之護,嚴峻無畏
同心之伴,創造奇蹟\cwave[0]\temp"

給出一個錯誤。它僅適用於舊腳本的演示。

另外,在 MessageEX 演示中,當與骨骼對話時,此事件“\cin”不起作用。

我怎樣才能解決這個問題?
作者: BCJenbo    时间: 2023-9-3 01:42
谢谢你!

我有另一个问题。我的一个朋友将您的脚本翻译成英文(供私人使用),但我们想知道:我们可以在 https://forums.rpgmakerweb.com/index.php 上分享它们吗?当然,我们会写下您制作的内容并链接到您的 github 作为原始来源
作者: BCJenbo    时间: 2023-9-5 02:27
谢谢。
https://forums.rpgmakerweb.com/i ... d-by-google.160872/

Roninator2 是我的朋友我是 BCj
作者: 愚昧jun    时间: 2023-10-15 01:29
脚本纯小白问一个蠢问题,姓名框内人物名字的文字颜色是不能改成不同的人用不同的姓名颜色,只能大伙都用同一种文字颜色吗,我试了用“\c[2]\name[主角]”的话“主角”文字颜色还是统一的颜色,用“\name[主角]\c[2]”的话虽然“主角”文字颜色能变成紫色了,但是姓名框没了。有无能即时改姓名颜色又能保留姓名框的( ゚∀。)7
作者: Leku_Advance    时间: 2023-10-15 09:16
太酷了,回来试一试
作者: BCJenbo    时间: 2024-6-23 19:20
你好鹰,
我还有 2 个问题。是否可以像这样向消息添加消息框,而不是窗口皮肤?


我想我在你的 github 上看到了一些新脚本(Pixel Movement?)是否会有演示,或者不公开发布?

我用过谷歌翻译,希望没问题!
作者: 百里_飞柳    时间: 2024-6-23 23:18
本帖最后由 百里_飞柳 于 2024-6-23 23:30 编辑
BCJenbo 发表于 2024-6-23 19:20
你好鹰,
我还有 2 个问题。是否可以像这样向消息添加消息框,而不是窗口皮肤?


第一个问题:
对话框扩展 当然支持使用自定义的背景图片,以下是设置的说明:

1. 了解相关转义符参数:
在 \win 转义符的设置区域中,找到 :bg 和 :bgo 两个参数,:bg 是用来指定所使用的背景图片的ID,:bgo 是用来指定背景图片是如何与对话框窗口对齐的。

2.  在脚本中预设:
在 INDEX_TO_WINDOW_BG 常量中,可以设置 背景图片的ID => 背景图片的名称 的Hash。
比如: INDEX_TO_WINDOW_BG[1] = "Message_BG_1"   → 意义:当 :bg 为1时,使用 Graphics/System 目录下的 Message_BG_1.png 图片

3. 使用背景图片:

第一种方法:在 WIN_PARAMS_INIT 常量中,设置 :bg => 1 ,其中 1 是在脚本中预设的背景图片的ID;设置 :bgo => 7,其中 7 代表背景图片的左上角将始终和对话框的左上角对齐(PS:依据数字小键盘位置进行设置,比如 1 代表左下角对齐,5代表中心点对齐,6代表右边界中点对齐)。

第二种方法:在显示文本中,编写转义符 \win[bg=1 bgo=7]

4. 此外,关于姓名框、脸图、对话框底部的按键提示动画都可以设置。

针对图片中的样例,可以如下编写:

在 INDEX_TO_NAME_BG 中编写姓名框的背景图片ID => 背景图片名称,并使用 \name[姓名文本|bg=1 bgo=7 dx=0 dy=24] ,让姓名框放置于对话框左上角。

使用 \face[z=-1],让脸图放置于对话框下层。

使用 \pause[do=2],让按键提示动画显示在对话框底部。

5. 特别注意:
在最新版的对话框中(>=1.11.0),加入了 S_ID_RESET_ENV 常量,当设置为 true 时,将在对话框关闭时重置全部参数,
也因此,如果你想保留以上的设置,而不是每一次编写对话文本都要写一大串转义符,可以有以下方法:

第一个方法:就如 DEMO_EagleMessageEX 中一样,新建一个脚本页,对 WIN_PARAMS_INIT 等常量进行覆盖赋值。
第二个方法:利用 \env 转义符 和 DEFAULT_ENVS 常量,将全部设置写入一个环境,随后在显示文本中读取环境。




第二个问题:
我很想正式发布这些高级功能脚本,但因为它们设置复杂度、理解难度都较大,而且一般很难兼容其他人的更知名的使用更广泛的脚本,导致我没有精力像【对话框扩展】一样去日常维护它们。

只有当我在我的个人作品中使用时,才有精力去debug。

因此我没有进行公开发布。

(PS: 像素级移动 已经在 DEMO_EagleEventEX 中了。)

当然你依然可以使用它们,如果遇到脚本本身的bug也欢迎在Github上发issue,但我不会帮忙将它们与其他人的脚本进行兼容。

作者: BCJenbo    时间: 2024-7-8 23:24
百里_飞柳 发表于 2024-6-23 23:18
第一个问题:
对话框扩展 当然支持使用自定义的背景图片,以下是设置的说明:

抱歉回复晚了,但非常感谢您!
作者: 晨风1    时间: 2025-2-9 21:23
反馈一个不算bug的东西,在战斗中,如果敌方在战斗界面边缘,在头顶显示文本时会因为地方不够文本显示不全...
作者: 晨风1    时间: 2025-6-17 22:39
我能否将win中的INDEX_TO_WINDOWSKIN这个功能单独禁用?用了其他的一键换对话框皮肤的脚本,这个会影响我使用....有什么解决办法吗,感谢!
作者: 百里_飞柳    时间: 2025-6-18 00:02
晨风1 发表于 2025-6-17 22:39
我能否将win中的INDEX_TO_WINDOWSKIN这个功能单独禁用?用了其他的一键换对话框皮肤的脚本,这个会影响我使用 ...

虽然有些奇怪,我这个对话框和默认对话框是互相独立的,所以你用其它对话框美化,理论上应该是不影响的……

如果你想禁用,直接将这个方法覆盖了就好
  1. class Window_EagleMessage
  2.   def eagle_change_windowskin(index = nil)
  3.   end
  4. end
复制代码

作者: 晨风1    时间: 2025-6-18 00:07
百里_飞柳 发表于 2025-6-18 00:02
虽然有些奇怪,我这个对话框和默认对话框是互相独立的,所以你用其它对话框美化,理论上应该是不影响的… ...

太感谢了!
作者: BCJenbo    时间: 2026-3-23 02:31
您好,我还有一个问题。脚本中是否可以使用更大的头像/人脸图片?例如,200x200像素?

(使用谷歌翻译)
作者: BCJenbo    时间: 2026-3-24 03:35
请问您能提供一张示例图片吗?
作者: 百里_飞柳    时间: 2026-3-24 12:47
本帖最后由 百里_飞柳 于 2026-3-24 12:50 编辑
BCJenbo 发表于 2026-3-24 03:35
请问您能提供一张示例图片吗?


I use an ai-generated bustup in my last project to show you the feature.

This is the bustup picture, its filename is "Bustup_woman_1x1.png", and under the "Graphics/Faces" folder.


This is what I edited in the event page.

The selected face is the "Bustup_woman_1x1" bustup picture with index 0.

This is what shows when running.
My message system recognizes the bustup's filename, and know it's a 1x1 face set.



作者: BCJenbo    时间: 2026-3-25 03:53
谢谢!我已经解决了。不过我还有几个问题,脚本里还没找到答案。

1. 我可以在脚本里把名字框默认设置为粗体吗?

例如:

NAME_PARAMS_INIT = {

:o => 1, # 名称框的显示原点(对应数字键盘 | 默认值为 7,左上角)

:do => 7, # 基于对话框的原点(对应数字键盘 | 7 为对话框的左上角)

# * 如果为 0,则对话框嵌入,:o 自动设置为 7

:dx => 0, # 水平偏移值(正数向右,负数向左)

:dy => 5, # 垂直偏移值(正数向下,负数向上)

:opa => 255, # 名称框背景的不透明度(默认值为 255)(不影响文本)

:skin => nil, # 名称框皮肤编号(与 \win 中的 [preset] 窗口皮肤相同)

# * 如果为 nil ($),则与窗口皮肤同步\win

:size => nil, # 字体大小。如果为 nil($),则使用 VA 默认字体设置。

:bg => 1, # 图像窗口皮肤编号(参见下方的 [预设])* 覆盖 :skin

:bgo => 1, # 图像窗口皮肤对齐原点(对应于数字键盘)

# * 默认值为 7,即背景图像的左上角与名称框的左上角对齐

:cx => 12, # 文本起始位置的 x 坐标

:cy => 0, # 文本起始位置的 y 坐标

:bold => true/false,

2. 我可以在脚本中将名称框的默认颜色更改为系统颜色 [9] 吗?

3. 我可以在脚本中的某个地方将 \name 或 \na 更改为 \nb 吗?
作者: 百里_飞柳    时间: 2026-3-25 12:39
BCJenbo 发表于 2026-3-25 03:53
谢谢!我已经解决了。不过我还有几个问题,脚本里还没找到答案。

1. 我可以在脚本里把名字框默认设置为粗 ...

1.
The \name escape characters' params are not extended. So it's unable to change the font to bold mode by settings.
But you can add " contents.font.bold = true " in the reset_font_settings method of class Window_EagleMsgName, to set all names' font bold mode by true.

2.
You can change the constant ESCAPE_STRING_NAME_PREFIX to add an escape string to change the default color. By default, "\ec<6>" is the same to the escape string \c[6] in the message text.

CAUTION: My message system is V2.2.2 (last updated:2026.3.21, ONLY CHINESE version) on my github repo,  so maybe many changes exist between yours and mine. I'm not sure if the constant exists in your version.

3.
You can't change the escape symbol as it's connected to the method by name.

But in my 2.2.2 version, I added a feature to replace specified string to other string.

If you don't want to update, it's easy to add the feature to your version:
Search " ALIAS_ESCAPE_CHARAS " and " eagle_process_alias " , then copy the constant and the total method. Then add the method-calling to your "def convert_escape_characters(text)".

By default in my 2.2.2 version, I set a  "na" => "name" , which means \na will be the same as \name.

作者: 晨风1    时间: 2026-3-28 16:56
bug反馈!当一句话结束时(此句话用了pop),如果直接开始战斗就会直接卡在战斗开始界面不动弹!即对话后直接接战斗处理会出现bug
作者: 晨风1    时间: 2026-3-28 16:57
晨风1 发表于 2026-3-28 16:56
bug反馈!当一句话结束时(此句话用了pop),如果直接开始战斗就会直接卡在战斗开始界面不动弹!即对话后直接 ...

应该是对话框没来得及往回收就进入战斗导致卡死了....
作者: 百里_飞柳    时间: 2026-3-28 18:03
本帖最后由 百里_飞柳 于 2026-3-28 19:30 编辑
晨风1 发表于 2026-3-28 16:56
bug反馈!当一句话结束时(此句话用了pop),如果直接开始战斗就会直接卡在战斗开始界面不动弹!即对话后直接 ...


在 ▼ 兼容其他对话框设置 里面有提及这个问题

scene切换到战斗场景时,地图上的对话框的更新就没了,所以会卡死在屏幕上

如果你懒得一个个加,可以直接在 game_interpreter 里找到 战斗指令的 command,在开头加个 wait(30) 就行了




原因是中途强制切换scene,导致 $game_message.visible 没有赋值 false

我今晚再看看有没有好的解决办法吧(x)




没啥好解决方法了,直接搜索 def dispose ,然后在方法开头的 dispose_all_windows 前面加上
RUBY 代码复制
  1. @fiber = nil
  2. $game_message.visible = false

就可以了
我之后的对话框也会更新下
作者: 晨风1    时间: 2026-3-29 02:38
百里_飞柳 发表于 2026-3-28 18:03
在 ▼ 兼容其他对话框设置 里面有提及这个问题

scene切换到战斗场景时,地图上的对话框的更新就没了,所 ...

好的,感谢回复!
作者: 晨风1    时间: 2026-4-4 01:13
提问!我想把\pop和文字特效类转义符一起用,但是却会出bug,这两个现在可以一起用么?
作者: 晨风1    时间: 2026-4-4 02:03
晨风1 发表于 2026-4-4 01:13
提问!我想把\pop和文字特效类转义符一起用,但是却会出bug,这两个现在可以一起用么? ...

经过测试发现可以,只要在特效类转义符后加一个空格再补\pop就可以了,但是会弹一秒十分宽的窗口再瞬间缩回动态窗口...有些不美观....
作者: 晨风1    时间: 2026-4-4 02:28
晨风1 发表于 2026-4-4 02:03
经过测试发现可以,只要在特效类转义符后加一个空格再补\pop就可以了,但是会弹一秒十分宽的窗口再瞬间缩 ...

好吧是我铸币了原来pop放在首位就可以了(x)
作者: 晨风1    时间: 2026-4-4 22:19
提问!如果说我的敌群理由有四个敌人,我想让他们同时说话然后同时让我按Z关闭,我该怎么写?
作者: 晨风1    时间: 2026-4-4 22:20
晨风1 发表于 2026-4-4 22:19
提问!如果说我的敌群理由有四个敌人,我想让他们同时说话然后同时让我按Z关闭,我该怎么写? ...

打错字了,敌群里有四个敌人orz...
作者: 百里_飞柳    时间: 2026-4-5 00:52
晨风1 发表于 2026-4-4 22:20
打错字了,敌群里有四个敌人orz...

因为对话框有打开特效,文字也可能有移入特效,所以无法出现多个对话框一起打开,只能逐个打开并保留。

第一个文字显示,在敌群中index为1的敌人头上显示:
\pop[1]测试用\hold\^

第二个文字显示:
\pop[2]测试用\hold\^

第三个文字显示:
\pop[3]测试用\hold\^

第四个文字显示:
\pop[4]测试用

前面的对话框都利用 \hold 保留,并利用 \^ 跳过按确定键继续,最后一个正常写,就能在它关闭时也把前面的都全部关闭了。

作者: 晨风1    时间: 2026-4-5 10:00
百里_飞柳 发表于 2026-4-5 00:52
因为对话框有打开特效,文字也可能有移入特效,所以无法出现多个对话框一起打开,只能逐个打开并保留。

...

okok,好的谢谢
作者: 晨风1    时间: 2026-4-7 00:26
来反馈bug喽,如果在文本框里使用\I[]绘制icon的转义符绘制icon的话会有白底
作者: 晨风1    时间: 2026-4-21 19:32
本帖最后由 晨风1 于 2026-4-21 19:36 编辑

来反馈一个不知道是不是问题的问题?当对话中存在\{这种放大文字的转义符时(一个或一个以上),此时如果在战斗中或者地图中事件使用\pop[1]且开启动态高度对话框,对话框的高度依旧是原始高度,导致文字显示时会上下跳然后需要按上下键才能看全....手动调整高度后就没这个问题了。
作者: 百里_飞柳    时间: 2026-4-21 22:21
晨风1 发表于 2026-4-21 19:32
来反馈一个不知道是不是问题的问题?当对话中存在\{这种放大文字的转义符时(一个或一个以上),此时如果在战 ...

这个是在 2.2.0 之后特地设计的,在 win 转义符里新增了 :lhnl 变量用来控制:

默认 0 ,会使对话框的每一行的高度都强制修改为 line_height 的值,方便对话框在固定高度时排版。

你可以改成 1,会使对话框的每一行高度为文字的实际高度,这也更适配 pop 模式,避免出现内容移动。

作者: Ruigi    时间: 2026-4-21 22:58
我靠牛逼
作者: 晨风1    时间: 2026-4-22 00:48
百里_飞柳 发表于 2026-4-21 22:21
这个是在 2.2.0 之后特地设计的,在 win 转义符里新增了 :lhnl 变量用来控制:

默认 0 ,会使对话框的每 ...

啊,好的谢谢,这下搞懂是什么意思了...
作者: 无头_nohead    时间: 2026-4-23 16:08
请问一下大佬,用这个并行对话可以实现出对话中同时出现两个窗口的情况嘛这边想实现两个角色同时说话的效果结果搞了半天也没搞懂QAQ求大佬带




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1