Project1

标题: MV如何获取其他地图的指定事件信息?[已解决] [打印本页]

作者: hy2000    时间: 2021-2-28 12:04
标题: MV如何获取其他地图的指定事件信息?[已解决]
本帖最后由 hy2000 于 2021-3-2 09:42 编辑

如题,我知道$gameMap.event(i)可以获取当前地图i号事件的信息,现在我想获取其他地图中指定编号事件的信息,然后调用它的name,_character_name等等参数
之前xp和va都可以走load_data,我仿照使用了DataManager里的loadMapData,但不管是直接跑然后调$dataMap,还是仿写后调自己的变量,输出都是null,鼓捣了一阵没研究出是哪里出了问题,因此来询问一下MV实现这个功能应该怎么写?
作者: x18489    时间: 2021-2-28 14:24
其他地图应该不加载的吧,肯定没法直接获取啊。可以通过开关变量获取,或者直接用公共事件。
作者: 仇九    时间: 2021-3-1 23:57
JAVASCRIPT 代码复制
  1. DataManager.loadMapDataX = function(mapid) {
  2.     if (Number(mapid) > 0) {
  3.         var mapdata;
  4.         var xhr = new XMLHttpRequest();
  5.         var url = 'data/' + 'Map%1.json'.format(mapid.padZero(3));
  6.         xhr.open('GET', url,false);
  7.         xhr.overrideMimeType('application/json');
  8.         xhr.onload = function() {
  9.             if (xhr.status < 400) {
  10.                 mapdata = JSON.parse(xhr.responseText);
  11.                 DataManager.extractMetadata(mapdata);
  12.                 var array = mapdata.events;
  13.                     if (Array.isArray(array)) {
  14.                             for (var i = 0; i < array.length; i++) {
  15.                                     var data = array[i];
  16.                                     if (data && data.note !== undefined) DataManager.extractMetadata(data);
  17.                             }
  18.                     }
  19.             }
  20.         };
  21.         xhr.send();
  22.         return mapdata;
  23.     }
  24. };

写了个新函数,就是把原来mv的DataManager.loadMapData给修改了一下,新函数DataManager.loadMapDataX(地图的id)的返回结果就是获取到的地图数据。
若是要调用其数据的话,不妨可以用脚本指令写console.log(DataManager.loadMapDataX(地图的id));然后按F12查看。
例如调取5号地图id为6的事件的数据:DataManager.loadMapDataX(地图的id).events[6]。
[line]2[/line]
我是在仿写glav大佬的spawnevent脚本的时候发现其只能复制指定的地图(在插件参数里设置的最多3个地图,后来明白glav大佬是在开始游戏时预载这三个地图的数据,使复制地图时速度更快),我想直接使其能复制更多数量的地图的事件(这样每次复制时都读取,会有很短的延迟或卡顿),于是我进行了修改。
若是只调用DataManager.loadMapData(地图的id),然后再输出$dataMap,那么只会得到undefined或者说现地图的地图数据。原因是此处mv是异步请求(可百度XMLHttpRequest)的,调用DataManager.loadMapData(地图的id)和输出$dataMap之间必须隔上至少20帧以上(我不清楚为什么是20帧这么长),才能在输出$dataMap时成功输出(系统得到读取指令后,读取且处理完成了后才给$dataMap赋值,所以有延迟,是异步)。但是很明显这会覆盖$dataMap,出现未知问题,所以你可以直接参考我给的函数。
新人轻喷。
[line]2[/line]




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