查看: 3529|回复: 9

[原创发布] 利用MV中JS相关技术制作扫码测试工具

[复制链接]
梦石
0
星屑
6379
在线时间
608 小时
注册时间
2017-9-27
回帖
205
发表于 2021-12-18 08:44:31 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 天浩 于 2021-12-18 08:50 编辑

完成效果

2.png
效果图
1.png
3.jpg



核心代码
9.png
  1. const Http = require("http");
  2. const Path = require("path");
  3. const Promisify = require("util").promisify;
  4. const ReadFile = Promisify(require("fs").readFile);

  5. const projectPath = Path.dirname(nw.App.argv.join(" "));
  6. const HostnameArray = getHostname();
  7. const { Index, Port } = initialize();

  8. const net = require('net');
  9. const { URL } = require('url');

  10. HostnameArray.forEach((hostname, index) => {
  11.   createServer(hostname, index);
  12. });

  13. function createServer(hostname, index) {
  14.   const server = Http.createServer(async (req, res) => {
  15.     let url = req.url == "/" ? Index : req.url;
  16.     let src = Path.join(projectPath, decodeURIComponent(url));
  17.     try {
  18.       res.statusCode = 200;
  19.       let data = await ReadFile(src);
  20.       await res.end(data);
  21.     } catch (err) {
  22.       errorHandler(req, res, err);
  23.     }
  24.   });

  25.   server.listen(Port, hostname, () => {
  26.     if (index === HostnameArray.length - 1) {
  27.       var qrcode = new QRCode("qrcode", {
  28.         text: `http://${hostname}:${Port}/`,
  29.         width: 320,
  30.         height: 320,
  31.         colorDark: "#000000",
  32.         colorLight: "#ffffff",
  33.         correctLevel: QRCode.CorrectLevel.H
  34.       });
  35.     }
  36.     console.log(`Server running at http://${hostname}:${Port}/`);
  37.   });
  38. }

  39. function getHostname() {
  40.   let hostnameArr = ["127.0.0.1"];
  41.   var networkInterfaces = require("os").networkInterfaces();
  42.   for (var devName in networkInterfaces) {
  43.     var interfaces = networkInterfaces[devName];
  44.     for (var i = 0; i < interfaces.length; i++) {
  45.       var obj = interfaces[i];
  46.       if (obj.family === 'IPv4' && obj.address !== '127.0.0.1' && !obj.internal) {
  47.         hostnameArr.push(obj.address);
  48.       }
  49.     }
  50.   }
  51.   return hostnameArr;
  52. }

  53. function errorHandler(req, res, err) {
  54.   if (err.message.includes("no such file or directory, open")) {
  55.     res.statusCode = 404;
  56.     console.warn(req.url, "文件或目录不存在");
  57.   } else {
  58.     res.statusCode = 500;
  59.     console.error(err, err.message);
  60.   }
  61.   res.end();
  62. }

  63. function initialize() {
  64.   try {
  65.     let src = Path.join(projectPath, "index.html");
  66.     ReadFile(src, { encoding: 'utf8' })
  67.       .then((html) => {
  68.         let parser = new DOMParser();
  69.         document.title += parser.parseFromString(html, "text/html").title;
  70.       })
  71.       .catch(() => { });
  72.   } catch (_) { }
  73.   let id = Buffer.from(projectPath).toString('hex');
  74.   let domIndex = document.body.querySelector("#index");
  75.   let domPort = document.body.querySelector("#port");
  76.   let Index = localStorage.getItem(id + "_index") || domIndex.value;
  77.   let Port = localStorage.getItem(id + "_port") || domPort.value;
  78.   domIndex.value = Index;
  79.   domPort.value = Port;
  80.   addEventListener(domIndex, domPort);
  81.   return { Index, Port };
  82. }

  83. function addEventListener(domIndex, domPort) {
  84.   document.body.querySelector("#reset").addEventListener('click', () => {
  85.     domIndex.value = "index.html";
  86.     domPort.value = 9527;
  87.   });

  88.   document.body.querySelector("#save").addEventListener('click', () => {
  89.     let id = Buffer.from(projectPath).toString('hex');
  90.     localStorage.setItem(id + "_index", domIndex.value);
  91.     localStorage.setItem(id + "_port", domPort.value);
  92.   });

  93.   document.body.querySelector("#reload").addEventListener('click', () => {
  94.     chrome.runtime.reload();
  95.   });
  96. }
复制代码



核心逻辑全由JavaScript语法编写完成,用到了一些Node接口,如果你会JS,可自行拓展。
平时写插件的大佬拿到,还能自己添加工具,利用JavaScript自己写其它功能的小工具.
不要问为什么拿JS写,问就是不懂其它的



使用方法:
1.下载附件后,找到你的RPG Maker MV安装目录
2.找到tool文件夹,在其中解压附件, 解压后的路径为 “RPG Maker MV\tool\扫码测试工具“,首次使用需要运行 点我载入nwjs.bat 批处理文件加载nwjs环境
如果这里批处理加载不出nwjs,找到你“RPG Maker MV\nwjs-win-test“文件夹,将其中的内容全部复制粘贴到 “RPG Maker MV\tool\扫码测试工具” 文件夹中
如果依然没有“RPG Maker MV\nwjs-win-test“文件夹,可以复制“RPG Maker MV\nwjs-win“里的凑合
记住手动添加nwjs时 nw.exe 或 Game.exe 需重命名为WindowBuilder.exe
如图所示,看图操作难度下降80%
4.png
5.png

3.完成上一步后,打开MV游戏开发界面,找到工具->RPG Maker MV工具, 继续点击选择路径,找到你的  “RPG Maker MV\tool\扫码测试工具“ 文件夹,
检索到工具后,从找到的工具中选中并添加到附加工具中,点击确认,在你平时测试游戏的按键右方出现了工具图标,那就大功告成了
如图所示,看图操作难度下降99%
6.png
7.png
8.png



扫码测试工具.zip (16.92 KB, 下载次数: 23, 售价: 5 星屑)

评分

参与人数 2赞 +2 收起 理由
xjzsq + 1 塞糖
微笑的迪妮莎 + 1 精品文章

查看全部评分

梦石
0
星屑
7089
在线时间
722 小时
注册时间
2021-3-5
回帖
731
发表于 2021-12-18 09:18:28 | 显示全部楼层
天,这又是什么黑科技
虽然还没完全看懂是什么,但是不明觉厉,火钳留名啊!

(楼主能不能简单用一句话说一下这是干嘛的啊)

点评

可以让你扫码二维码就可以在手机上实机测试你的游戏。  发表于 2021-12-18 12:15
回复

使用道具 举报

梦石
0
星屑
5170
在线时间
610 小时
注册时间
2017-10-21
回帖
321
发表于 2021-12-18 09:58:25 | 显示全部楼层
江大佬牛批
这下测试方便了
回复

使用道具 举报

梦石
0
星屑
14317
在线时间
2609 小时
注册时间
2013-6-10
回帖
1692
发表于 2021-12-18 12:21:19 | 显示全部楼层
吾愿称阁下为江子~!
回复

使用道具 举报

梦石
2
星屑
34497
在线时间
614 小时
注册时间
2014-7-18
回帖
647

MZ评测员开拓者

发表于 2021-12-19 01:11:20 | 显示全部楼层
这个脑洞挺大,不过手机和电脑必须在同一个网络下才行...做个支持设置frp的设置?
回复

使用道具 举报

梦石
0
星屑
6379
在线时间
608 小时
注册时间
2017-9-27
回帖
205
 楼主| 发表于 2021-12-19 13:48:40 | 显示全部楼层
本帖最后由 天浩 于 2021-12-19 13:55 编辑
xjzsq 发表于 2021-12-19 01:11
这个脑洞挺大,不过手机和电脑必须在同一个网络下才行...做个支持设置frp的设置? ...


见笑了大佬,你说的这个我还不了解。当时入坑MV插件还是跟着你的教程一行行照着敲学写的插件。
发这个的目的是想抛砖引玉,让更多非程序员却熟悉JS语法的插件大佬拿到此贴附件后能够自己制作工具.
没错,据说强如懂很多编程语言的Drill和其他大佬,早就用QT做了好些个工具了


P1站内大佬们交流
RM官方论坛的帖子
而干发一个什么没有实质内容的工具,还不如找个小功能上去(极大可能用不了 .)


想实现什么功能,就看大佬的想法了.工具通常来说做到这2件事就可以完成大部分操作了.
1.读取当前打开工程的路径
[pre lang="javascript"]// 当前游戏项目路径
var projectPath = require("path").dirname(nw.App.argv.join(" "));[/pre]

2.访问其中的文件,比如JSON文件
[pre lang="javascript"]// 当前游戏项目路径
var projectPath = require("path").dirname(nw.App.argv.join(" "));

// 访问数据库文件
function loadDataFile(src) {
    var xhr = new XMLHttpRequest();
    var url = require("path").join(projectPath, src);
    xhr.open('GET', url);
    xhr.overrideMimeType('application/json');
    xhr.onload = function() {
        if (xhr.status < 400) {
            var data = JSON.parse(xhr.responseText);
            console.log("读取到数据", data);
            // 你想怎么处理?
        }
    };
    xhr.onerror = function(err) {
        console.error(err);
    };
    xhr.send();
}

// 访问指定文件
loadDataFile("data/System.json");[/pre]

点评

我看到MV这个功能出来的时候感觉没啥,现在来看可玩性非常高,比如批量事件生成器啥的,改天有空玩一玩  发表于 2021-12-20 03:55
回复 1 1

使用道具 举报

梦石
0
星屑
367
在线时间
68 小时
注册时间
2018-8-30
回帖
10
发表于 2021-12-22 00:07:42 | 显示全部楼层
大佬yyds
回复

使用道具 举报

梦石
0
星屑
992
在线时间
108 小时
注册时间
2022-7-2
回帖
133
发表于 2022-7-6 13:24:54 | 显示全部楼层
6666666666
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部