查看: 3877|回复: 4

[有事请教] MV如何获取其他地图的指定事件信息?[已解决]

[复制链接]
梦石
0
星屑
3053
在线时间
441 小时
注册时间
2014-11-21
回帖
103
发表于 2021-2-28 12:04:26 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 hy2000 于 2021-3-2 09:42 编辑

如题,我知道$gameMap.event(i)可以获取当前地图i号事件的信息,现在我想获取其他地图中指定编号事件的信息,然后调用它的name,_character_name等等参数
之前xp和va都可以走load_data,我仿照使用了DataManager里的loadMapData,但不管是直接跑然后调$dataMap,还是仿写后调自己的变量,输出都是null,鼓捣了一阵没研究出是哪里出了问题,因此来询问一下MV实现这个功能应该怎么写?
梦石
0
星屑
624
在线时间
62 小时
注册时间
2021-1-17
回帖
4
发表于 2021-2-28 14:24:36 | 显示全部楼层
其他地图应该不加载的吧,肯定没法直接获取啊。可以通过开关变量获取,或者直接用公共事件。

点评

不直接加载,但肯定有载入的方式,所以手动加载是能调的;面向函数的参数是事件,所以如果不直接调的话只能重写一份不同参数的对应函数  发表于 2021-2-28 21:53
回复

使用道具 举报

梦石
18
星屑
13373
在线时间
1525 小时
注册时间
2020-3-21
回帖
334

MZ评测员极短23获奖

发表于 2021-3-1 23:57:23 | 显示全部楼层
[pre lang="javascript" line="1"]DataManager.loadMapDataX = function(mapid) {
    if (Number(mapid) > 0) {
        var mapdata;
        var xhr = new XMLHttpRequest();
        var url = 'data/' + 'Map%1.json'.format(mapid.padZero(3));
        xhr.open('GET', url,false);
        xhr.overrideMimeType('application/json');
        xhr.onload = function() {
            if (xhr.status < 400) {
                mapdata = JSON.parse(xhr.responseText);
                DataManager.extractMetadata(mapdata);
                var array = mapdata.events;
                    if (Array.isArray(array)) {
                            for (var i = 0; i < array.length; i++) {
                                    var data = array;
                                    if (data && data.note !== undefined) DataManager.extractMetadata(data);
                            }
                    }
            }
        };
        xhr.send();
        return mapdata;
    }
};[/pre]
写了个新函数,就是把原来mv的DataManager.loadMapData给修改了一下,新函数DataManager.loadMapDataX(地图的id)的返回结果就是获取到的地图数据。
若是要调用其数据的话,不妨可以用脚本指令写console.log(DataManager.loadMapDataX(地图的id));然后按F12查看。
例如调取5号地图id为6的事件的数据:DataManager.loadMapDataX(地图的id).events[6]。


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

点评

感谢大佬!之前一直用的xp和va,对mv的机制不是很了解,看来是这个延迟导致的,之后有空再仔细研究一下这一块  发表于 2021-3-2 09:41
回复 1 0

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部