查看: 2741|回复: 9

[有事请教] 看到了一个很不错的MV插件,有谁愿意转MZ嘛?

[复制链接]
梦石
0
星屑
1005
在线时间
212 小时
注册时间
2011-11-23
回帖
76
发表于 2022-3-21 19:27:37 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 rkjspb 于 2022-3-21 19:29 编辑

我在MV的dlc目录中找到了一个名叫NovelMessage.js的插件,作用是利用开关切换全屏的对话框。
我感觉这个插件蛮有用的,就尝试导入到MZ里面,结果发现不能用。
因为我不懂JS,所以无能为力将其改成支持MZ的版本,所以说,有人愿意将它转成支持MZ的嘛?
[pre lang="JavaScript" file="NovelMessage.js"]//=============================================================================
// NovelMessage.js
//=============================================================================

/*:
* @plugindesc Provides the full screen type message window.
* @author Yoji Ojima, Sasuke KANNAZUKI
*
* @param Switch ID
* @desc The ID of the switch to determine novel mode.
* @default 11
*
* @help
* Use control character '\F' to page break in novel mode.
*
* This plugin does not provide plugin commands.
*/

/*:ja
* @plugindesc 全画面型のメッセージウィンドウです。
* @author Yoji Ojima, 神無月サスケ
*
* @param Switch ID
* @desc ノベルモードにするためのスイッチのIDです。
* @default 11
*
* @help
* ノベルモードにて改ページをするには、制御文字「\F」を使用してください。
*
* このプラグインには、プラグインコマンドはありません。
*/

(function() {

    var parameters = PluginManager.parameters('NovelMessage');
    var switchId = Number(parameters['Switch ID'] || 11);

    function isNovelMode() {
        return $gameSwitches.value(switchId);
    };

    var _Window_Message_initMembers = Window_Message.prototype.initMembers;
    Window_Message.prototype.initMembers = function() {
        _Window_Message_initMembers.call(this);
        this._novelLineY = 0;
        this._novelNewPage = true;
    };

    var _Window_Message_updatePlacement =
            Window_Message.prototype.updatePlacement;
    Window_Message.prototype.updatePlacement = function() {
        if (!isNovelMode()) {
            this.width = this.windowWidth();
            this.height = this.windowHeight();
            this.x = (Graphics.boxWidth - this.width) / 2;
        }
        _Window_Message_updatePlacement.call(this);
        if (isNovelMode()) {
            this.move(0, 0, Graphics.boxWidth, Graphics.boxHeight);
        }
        if (this.contents.height !== this.contentsHeight()) {
            this.contents.resize(this.contentsWidth(), this.contentsHeight());
        }
    };

    var _Window_Message_updateBackground =
            Window_Message.prototype.updateBackground;
    Window_Message.prototype.updateBackground = function() {
        _Window_Message_updateBackground.call(this);
        if (isNovelMode()) {
            this.setBackgroundType(2);
        }
    };

    var _Window_Message_onEndOfText = Window_Message.prototype.onEndOfText;
    Window_Message.prototype.onEndOfText = function() {
        if (isNovelMode()) {
            this.processNewLine(this._textState);
        }
        _Window_Message_onEndOfText.call(this);
    };

    var _Window_Message_startMessage = Window_Message.prototype.startMessage;
    Window_Message.prototype.startMessage = function() {
        _Window_Message_startMessage.call(this);
        if (isNovelMode()) {
            this._textState.y = this._novelLineY;
        }
    };

    var _Window_Message_newPage = Window_Message.prototype.newPage;
    Window_Message.prototype.newPage = function(textState) {
        if (!isNovelMode() || this._novelNewPage) {
            _Window_Message_newPage.call(this, textState);
            this._novelLineY = 0;
            this._novelNewPage = false;
        }
        if (isNovelMode()) {
            textState.x = this.newLineX();
            textState.left = this.newLineX();
            textState.height = this.calcTextHeight(textState, false);
            this._lineShowFast = false;
            this._pauseSkip = false;
            if (this.needsNewPage(textState)) {
                textState.y = this.contents.height;
                this._novelNewPage = true;
                this._textState.index--;
                this.startPause();
            }
        }
    };

    var _Window_Message_processNewLine = Window_Message.prototype.processNewLine;
    Window_Message.prototype.processNewLine = function(textState) {
        _Window_Message_processNewLine.call(this, textState);
        if (isNovelMode()) {
            this._novelLineY = this._textState.y;
        }
    };

    var _Window_Message_processEscapeCharacter =
            Window_Message.prototype.processEscapeCharacter;
    Window_Message.prototype.processEscapeCharacter = function(code, textState) {
        if (isNovelMode() && code === 'F') {
            textState.y = this.contents.height;
            this._novelNewPage = true;
            return;
        }
        _Window_Message_processEscapeCharacter.call(this, code, textState);
    };

    var _Window_ChoiceList_updatePlacement =
            Window_ChoiceList.prototype.updatePlacement;
    Window_ChoiceList.prototype.updatePlacement = function() {
        _Window_ChoiceList_updatePlacement.call(this);
        if (isNovelMode()) {
            this.y = Graphics.boxHeight - this.height - 8;
        }
    };

    var _Window_NumberInput_updatePlacement =
            Window_NumberInput.prototype.updatePlacement;
    Window_NumberInput.prototype.updatePlacement = function() {
        _Window_NumberInput_updatePlacement.call(this);
        if (isNovelMode()) {
            this.y = Graphics.boxHeight - this.height - 8;
        }
    };

    var _Window_NumberInput_buttonY =
            Window_NumberInput.prototype.buttonY;
    Window_NumberInput.prototype.buttonY = function() {
        if (isNovelMode()) {
            return 0 - this._buttons[0].height - 8;
        } else {
            return _Window_NumberInput_buttonY.call(this);
        }
    };

})();
[/pre]
梦石
0
星屑
848
在线时间
117 小时
注册时间
2018-4-7
回帖
93
发表于 2022-3-21 20:01:13 | 显示全部楼层
那MZ的DLC目录里没有这个吗?
而且按F4不是可以切换全屏与窗口吗?
回复

使用道具 举报

梦石
0
星屑
1005
在线时间
212 小时
注册时间
2011-11-23
回帖
76
 楼主| 发表于 2022-3-22 20:31:41 | 显示全部楼层
新耀012478 发表于 2022-3-21 20:01
那MZ的DLC目录里没有这个吗?
而且按F4不是可以切换全屏与窗口吗?

这个不是游戏窗口的全屏哦,是对话用的那个框的全屏,就是显示超过4行字用的
回复

使用道具 举报

梦石
0
星屑
848
在线时间
117 小时
注册时间
2018-4-7
回帖
93
发表于 2022-3-22 21:24:48 | 显示全部楼层
rkjspb 发表于 2022-3-22 20:31
这个不是游戏窗口的全屏哦,是对话用的那个框的全屏,就是显示超过4行字用的 ...

就是要调整对话框的高度到足够显示所有文字?
还是说是文本回放?
回复

使用道具 举报

梦石
0
星屑
1005
在线时间
212 小时
注册时间
2011-11-23
回帖
76
 楼主| 发表于 2022-3-22 21:26:38 | 显示全部楼层
新耀012478 发表于 2022-3-22 21:24
就是要调整对话框的高度到足够显示所有文字?
还是说是文本回放?

差不多就是那个意思吧,你在mv里面开启插件输入几个文字就了解效果了
其实这个插件名已经把主要功能都说出来了
回复

使用道具 举报

梦石
0
星屑
848
在线时间
117 小时
注册时间
2018-4-7
回帖
93
发表于 2022-3-23 16:24:54 | 显示全部楼层
本帖最后由 新耀012478 于 2022-3-27 21:12 编辑
rkjspb 发表于 2022-3-22 21:26
差不多就是那个意思吧,你在mv里面开启插件输入几个文字就了解效果了
其实这个插件名已经把主要功能都说 ...


就是在原有的顶部+透明的基础上。
增加了新文字不会被刷新掉,而是直到显示到画面能显示到的最后一行,
然后下一行才会刷新?
如果将它改成可以显示所有的文字,中间用\!等待按键输入是不是也差不多?

你能不能试一下这个?我自己觉得用着是有一点像的。

这个意思是,将它能显示的文本范围变成了整个画面,其它都没动。
只是要用\!换行符取代你发的插件里的那种按一下显示下一段文字,直到超出画面的效果。
然后得要你用脚本$gameMessage._texts["这是第一句话","这是第二句话\\!","在用户用鼠标点了一下以后出现了第三句话"]
像这样子来输入文字。

NovelMessageMZ.zip

2.06 KB, 下载次数: 1

LZ提醒后修复了bug

回复

使用道具 举报

梦石
0
星屑
1005
在线时间
212 小时
注册时间
2011-11-23
回帖
76
 楼主| 发表于 2022-3-27 15:40:24 | 显示全部楼层
新耀012478 发表于 2022-3-23 16:24
就是在原有的顶部+透明的基础上。
增加了新文字不会被刷新掉,而是直到显示到画面能显示到的最后一行,
...

比较接近了哎,不知道这是你写的还是网络上找到的
我试了一下,貌似最多只支持4行字,而我的意思是文本的行数布满整个屏幕,有点类似全屏滚动文本那种,不知道你能明白嘛?
可能我之前发的那个插件也只能支持四行,我没有认真观察过。
文本范围变成整个画面只是一部分,能够让文字布满整个屏幕才是重点。
不过还是很感谢你的帮忙
回复

使用道具 举报

梦石
0
星屑
848
在线时间
117 小时
注册时间
2018-4-7
回帖
93
发表于 2022-3-27 18:20:15 | 显示全部楼层
本帖最后由 新耀012478 于 2022-3-27 19:31 编辑
rkjspb 发表于 2022-3-27 15:40
比较接近了哎,不知道这是你写的还是网络上找到的
我试了一下,貌似最多只支持4行字,而我的意 ...


不好意思,bug修好了。之前还以为是你用对话框输入文字,而不是用脚本输入了,抱歉。
顺道你之前那个,是可以用普通对话框输入的。每次输入完以后点击鼠标不会刷新,而是要等到铺满整个屏幕以后,下一次点击才会刷新。
而我这个是之前用脚本输入。$gameMessage._texts=["第一行","第二行","第三行","第四行","第五行"];
想增加行数的时候就往后面按同样的格式添加英文引号跟英文逗号就好。

NovelMessageMZ.zip

2.06 KB, 下载次数: 8

不好意思bug修复了

回复

使用道具 举报

梦石
0
星屑
1005
在线时间
212 小时
注册时间
2011-11-23
回帖
76
 楼主| 发表于 2022-3-28 22:30:57 | 显示全部楼层
本帖最后由 rkjspb 于 2022-3-28 22:35 编辑
新耀012478 发表于 2022-3-27 18:20
不好意思,bug修好了。之前还以为是你用对话框输入文字,而不是用脚本输入了,抱歉。
顺道你之前那个,是 ...


厉害了我的朋友,用那么几行代码就基本实现效果了。
太感谢了。
话说,不知道朋友你有没有时间或者兴趣改进以下这个插件,例如用‘开关’开启关闭修改成用‘插件指令’开启关闭,也许这种插件会有一些人会用到,完善后亦能够造福rpgmaker群体。
回复

使用道具 举报

梦石
0
星屑
848
在线时间
117 小时
注册时间
2018-4-7
回帖
93
发表于 2022-3-28 23:16:05 | 显示全部楼层
rkjspb 发表于 2022-3-28 22:30
厉害了我的朋友,用那么几行代码就基本实现效果了。
太感谢了。
话说,不知道朋友你有没有时间 ...

开关最大能设置五千个啊,五千个,难道不够用吗?数字能改的啊,你把12改成别的就好了啊,只要你输入的数字在你设置的最大值之内就好了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部