查看: 2284|回复: 3

[有事请教] 如何在存档界面显示变量

[复制链接]
梦石
0
星屑
1445
在线时间
181 小时
注册时间
2022-9-17
回帖
99
发表于 2022-10-12 13:02:54 | 显示全部楼层 |阅读模式

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

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

×
我使用了一个AltSaveScreen.js插件,这个插件的代码如下:
[pre lang="js"]//=============================================================================
// RPG Maker MZ - Alternative Save Screen
//=============================================================================

/*:
* @target MZ
* @plugindesc Alternative save/load screen layout.
* @author Yoji Ojima
*
* @help AltSaveScreen.js
*
* This plugin changes the layout of the save/load screen.
* It puts the file list on the top and the details on the bottom.
*
* It does not provide plugin commands.
*/

/*:ja
* @target MZ
* @plugindesc セーブ/ロード画面のレイアウトを変更します。
* @author Yoji Ojima
*
* @help AltSaveScreen.js
*
* このプラグインは、セーブ/ロード画面のレイアウトを変更します。
* ファイル一覧を上側に、詳細を下側に配置します。
*
* プラグインコマンドはありません。
*/

(() => {
    const _Scene_File_create = Scene_File.prototype.create;
    Scene_File.prototype.create = function() {
        _Scene_File_create.apply(this, arguments);
        this._listWindow.height = this._listWindow.fittingHeight(3);
        const x = 0;
        const y = this._listWindow.y + this._listWindow.height;
        const width = Graphics.boxWidth;
        const height = Graphics.boxHeight - y;
        const rect = new Rectangle(x, y, width, height);
        const statusWindow = new Window_SavefileStatus(rect);
        this._listWindow.mzkp_statusWindow = statusWindow;
        this.addWindow(statusWindow);
    };

    const _Scene_File_start = Scene_File.prototype.start;
    Scene_File.prototype.start = function() {
        _Scene_File_start.apply(this, arguments);
        this._listWindow.ensureCursorVisible();
        this._listWindow.callUpdateHelp();
    };

    Window_SavefileList.prototype.windowWidth = function() {
        return Graphics.boxWidth;
    };

    Window_SavefileList.prototype.maxCols = function() {
        return 4;
    };

    Window_SavefileList.prototype.itemHeight = function() {
        return this.lineHeight() * 2 + 16;
    };

    const _Window_SavefileList_callUpdateHelp =
        Window_SavefileList.prototype.callUpdateHelp;
    Window_SavefileList.prototype.callUpdateHelp = function() {
        _Window_SavefileList_callUpdateHelp.apply(this, arguments);
        if (this.active && this.mzkp_statusWindow) {
            this.mzkp_statusWindow.setSavefileId(this.savefileId());
        }
    };

    function Window_SavefileStatus() {
        this.initialize.apply(this, arguments);
    }

    Window_SavefileStatus.prototype = Object.create(Window_Base.prototype);
    Window_SavefileStatus.prototype.constructor = Window_SavefileStatus;

    Window_SavefileStatus.prototype.initialize = function(rect) {
        Window_Base.prototype.initialize.call(this, rect);
        this._savefileId = 1;
    };

    Window_SavefileStatus.prototype.setSavefileId = function(id) {
        this._savefileId = id;
        this.refresh();
    };

    Window_SavefileStatus.prototype.refresh = function() {
        const info = DataManager.savefileInfo(this._savefileId);
        const rect = this.contents.rect;
        this.contents.clear();
        this.resetTextColor();
        this.drawTitle(this._savefileId, rect.x, rect.y);
        if (info) {
            this.drawContents(info, rect);
        }
    };

    Window_SavefileStatus.prototype.drawTitle = function(savefileId, x, y) {
        if (savefileId === 0) {
            this.drawText(TextManager.autosave, x, y, 180);
        } else {
            this.drawText(TextManager.file + " " + savefileId, x, y, 180);
        }
    };

    Window_SavefileStatus.prototype.drawContents = function(info, rect) {
        const bottom = rect.y + rect.height;
        const playtimeY = bottom - this.lineHeight();
        this.drawText(info.title, rect.x + 192, rect.y, rect.width - 192);
        this.drawText("处于第" + $gameVariables.value(1) +"层", rect.x + 330, rect.y, rect.width - 192);
        this.drawPartyfaces(info.faces, rect.x, bottom - 144);
        this.drawText(info.playtime, rect.x, playtimeY, rect.width, "right");
    };

    Window_SavefileStatus.prototype.drawPartyfaces = function(faces, x, y) {
        if (faces) {
            for (let i = 0; i < faces.length; i++) {
                const data = faces;
                this.drawFace(data[0], data[1], x + i * 150, y);
            }
        }
    };
})();
[/pre]

捕获.JPG

我想在存档中显示一个表示层数的变量。
[pre lang="js"]this.drawText("处于第" + $gameVariables.value(1) +"层", rect.x + 330, rect.y, rect.width - 192)[/pre]
但这么做很明显,无法显示每一个存档中存储到的1号变量。当前如图所示,显示的全是初始状态下的数字0。
请问应该如何修改?
梦石
0
星屑
1445
在线时间
181 小时
注册时间
2022-9-17
回帖
99
 楼主| 发表于 2022-10-12 13:05:26 | 显示全部楼层
  1. (function() {

  2.         const pluginName = 'MapNameinSaveData';

  3.     const parameters = PluginManager.parameters(pluginName);
  4.     const MapName_x = Number(parameters['MapName_x'] || 0);
  5.     const MapName_y = Number(parameters['MapName_y'] || 0);
  6.     const Characters_x = Number(parameters['Characters_x'] || 0);
  7.     const Characters_y = Number(parameters['Characters_y'] || 0);
  8.     const Playtime_x = Number(parameters['Playtime_x'] || 0);
  9.     const Playtime_y = Number(parameters['Playtime_y'] || 0);

  10.         DataManager.makeSavefileInfo = function() {
  11.             const info = {};
  12.             info.title = $dataSystem.gameTitle;
  13.                 info.mapname= $gameMap.displayName();
  14.             info.characters = $gameParty.charactersForSavefile();
  15.             info.faces = $gameParty.facesForSavefile();
  16.             info.playtime = $gameSystem.playtimeText();
  17.             info.timestamp = Date.now();
  18.             return info;
  19.         };

  20.         Window_SavefileList.prototype.drawContents = function(info, rect, valid) {
  21.             const bottom = rect.y + rect.height;
  22.             if (rect.width >= 420) {
  23.                 this.drawGameMapName(info, rect.x + 192 + MapName_x, rect.y + MapName_y, rect.width - 192);
  24.                 this.drawPartyCharacters(info, rect.x + 220 + Characters_x, bottom + Characters_y);
  25.             }
  26.             const lineHeight = this.lineHeight();
  27.             const y2 = bottom - lineHeight;
  28.             if (y2 >= lineHeight) {
  29.                 this.drawPlaytime(info, rect.x + 192 + Playtime_x, rect.y + Playtime_y, rect.width - 192);
  30.             }
  31.         };

  32.         Window_SavefileList.prototype.drawGameMapName = function(info, x, y, width) {
  33.             if (info.mapname) {
  34.                 this.drawText(info.mapname, x, y, width);
  35.             }
  36.         };

  37. })();
复制代码

这是MapNameinSaveData.js插件,在存档中显示地图名称的。但自己没学到其中的精髓。
回复

使用道具 举报

梦石
0
星屑
1217
在线时间
89 小时
注册时间
2022-2-5
回帖
190
发表于 2022-10-12 20:01:52 | 显示全部楼层
本帖最后由 41workroom 于 2022-10-12 20:09 编辑

游戏内部的变量好像要在进入游戏之后才会赋予值,不然就是如图所示的0

我们先看看这个地图名称的插件怎么写的:

        DataManager.makeSavefileInfo = function() {
            const info = {};
            info.title = $dataSystem.gameTitle;
            info.maplevel= $gameVariables.value(1);   //根据周围的代码,推测出存入变量的方法,这里就是要加入的地下城层数
            info.characters = $gameParty.charactersForSavefile();
            info.faces = $gameParty.facesForSavefile();
            info.playtime = $gameSystem.playtimeText();
            info.timestamp = Date.now();
            return info;
        };

上面这段为写入存档信息(info,可以在二楼帖代码13行找到)

先在插件中加入如上这段话(那一大段都要,橘黄色的是新加入的关键语句)
然后把一楼帖代码114行改为

this.drawText("处于第" + info.maplevel(1) +"层", rect.x + 330, rect.y, rect.width - 192);

然后就大功告成了~

如果有帮助帮忙给个免费的支持,谢谢~
回复 3 0

使用道具 举报

梦石
0
星屑
1445
在线时间
181 小时
注册时间
2022-9-17
回帖
99
 楼主| 发表于 2022-10-14 14:30:20 | 显示全部楼层
41workroom 发表于 2022-10-12 20:01
游戏内部的变量好像要在进入游戏之后才会赋予值,不然就是如图所示的0

我们先看看这个地图名称的插件怎么 ...

了解了,这样就可以实现存档显示自由了。非常感谢答疑解惑
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部