Project1

标题: 如何在运行游戏的过程中生成新文件(如txt等) [打印本页]

作者: 古树旋律    时间: 2022-10-9 22:28
标题: 如何在运行游戏的过程中生成新文件(如txt等)
例如,在触发NPC之后,会在Save文件夹中生成一个以1号变量数值为名称的txt文件,或者是其他后缀名的文件。

请问在事件的脚本命令中,如何去实现?
作者: apple5740    时间: 2022-10-10 11:39
你好,这个区域第一次回答,可能有很多问题。我在 rmmz_managers.js文件中有看到你需要的功能。

  1. StorageManager.fsWriteFile(StorageManager.fileDirectoryPath()+'文件名.txt','文件内容');
复制代码


目前测试能实现生成txt文件,跟txt文件的内容。
作者: 古树旋律    时间: 2022-10-10 17:12
apple5740 发表于 2022-10-10 11:39
你好,这个区域第一次回答,可能有很多问题。我在 rmmz_managers.js文件中有看到你需要的功能。

非常感谢,经过测试,可以实现。
而且可以使用随机变量+生成txt文件的形式实现一个二周目奖励的机制
作者: 41workroom    时间: 2022-10-10 19:02
apple5740 发表于 2022-10-10 11:39
你好,这个区域第一次回答,可能有很多问题。我在 rmmz_managers.js文件中有看到你需要的功能。

学会了 谢谢大佬
作者: 古树旋律    时间: 2022-10-10 20:59
apple5740 发表于 2022-10-10 11:39
你好,这个区域第一次回答,可能有很多问题。我在 rmmz_managers.js文件中有看到你需要的功能。

在rmmz_manager.js的基础上,已经实现了任意生成文件。

我想在这个帖子的基础功能上进行拓展,通过脚本命令判断是否生成了指定名称的文件。
于是我在rmmz_manager.js的找到了这一段代码。

  1. /** //检测是否存在存档文件* @param {*} saveName 保存名称*/
  2. StorageManager.exists = function(saveName) {
  3.     if (this.isLocalMode()) { //是本地单机模式(而非联网模式)?
  4.         return this.localFileExists(saveName); //检测是否已经在(有)本地(单机)文件
  5.     } else {
  6.         return this.forageExists(saveName); //检测是否已经在(有)forage(服务器里的??)文件
  7.     }
  8. };
复制代码


例如我使用下面脚本命令,在save文件夹中生成了一个finish.txt的文件。
  1. StorageManager.fsWriteFile(StorageManager.fileDirectoryPath()+'finish.txt','youFinish')
复制代码


之后我使用下面的脚本命令时,输出结果却一直是false。可以确定save文件夹中有finish.txt文件
  1. StorageManager.exists(StorageManager.fileDirectoryPath()+ 'finish.txt')
复制代码



作者: apple5740    时间: 2022-10-11 06:58
因为这个方法,被rm包装成查找存档了。。。

  1. StorageManager.exists(StorageManager.fileDirectoryPath()+ 'finish.txt')
复制代码


/* 是否存在该存档 */
  1. StorageManager.exists = function(saveName) {
  2.     if (this.isLocalMode()) {
  3.         return this.localFileExists(saveName);
  4.     } else {
  5.         return this.forageExists(saveName);
  6.     }
  7. };
复制代码


具体可以一步一步来查看它实现的方式

  1. StorageManager.localFileExists = function(saveName) {
  2.     const fs = require("fs");
  3.     return fs.existsSync(this.filePath(saveName));
  4. };
复制代码


问题在于这里的
  1. return fs.existsSync(this.filePath(saveName));
复制代码

的 this.filePath 也就是 StorageManager.filePath,它做成必须是.rmmzsave的文件啦。

  1. StorageManager.filePath = function(saveName) {
  2.     const dir = this.fileDirectoryPath();
  3.     return dir + saveName + ".rmmzsave";
  4. };
复制代码


可以不用它的方法,自己使用node.js的fs模块

  1.     var fs = require("fs");
  2.     fs.existsSync(StorageManager.fileDirectoryPath()+ 'finish.txt');
复制代码


如果遇到rm本身的方法无法满足时,可以查询node.js的相关方法来完成它。

作者: 古树旋律    时间: 2022-10-11 10:13
apple5740 发表于 2022-10-11 06:58
因为这个方法,被rm包装成查找存档了。。。

一语中的。
  1.     var fs = require("fs");fs.existsSync(StorageManager.fileDirectoryPath()+ 'finish.txt');
复制代码


将这个放在事件页面中的【分支条件】的脚本中,就可以得到想要的判断了。






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