本帖最后由 QChan 于 2021-7-9 18:30 编辑 入坑小萌新 发表于 2021-7-9 17:26 重写可以参考下一些别人做的插件,基本所有的都能重写。重写最好不要直接修改游戏原本的文件,或者覆盖到别人的重写。 一般是先建一个变量,保存重写前的方法。 然后重写调用下变量保存的方法, 这样可以执行到重写前的代码, 不会和其他人的重写起冲突。 一般其他插件也是这种写法,所以你的重写也不会被覆盖。 [pre lang="javascript"] var _Game_Event_prototype_refresh = Game_Event.prototype.refresh; Game_Event.prototype.refresh = function() { _Game_Event_prototype_refresh.call(this); // 你的代码 }; // 一些有参数的 call 的时候也要带参数 var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { _Game_Interpreter_pluginCommand.call(this, command, args); } // 原本有返回值的,你也要给一个返回值。 // 记录重写前的方法 var _DataManager_makeSaveContents = DataManager.makeSaveContents; DataManager.makeSaveContents = function() { // 调用重写前的方法并且获取他的返回值 var contents = _DataManager_makeSaveContents.call(this); // 你的代码 // 返回 return contents; }; [/pre] 我记得这边是有个坑的, 可能莫名其妙会报错,一般插件的写法是会把代码都丢到一个大方法里的,防止和其他插件冲突。 你可以看一些大佬的插件代码结构 [pre lang="javascript"] (function() { var _Game_Event_prototype_refresh = Game_Event.prototype.refresh; Game_Event.prototype.refresh = function() { _Game_Event_prototype_refresh.call(this); // 你的代码 }; })(); [/pre] 下面是重写执行效果 [pre lang="javascript"] (function() { var _Game_Event_prototype_refresh = Game_Event.prototype.refresh; Game_Event.prototype.refresh = function() { _Game_Event_prototype_refresh.call(this); // 你的代码 console.log('刷新了'); }; })(); [/pre]
你截图的代码,如果要丢到那个地方执行的话,也可以考虑直接重写 setupPage [pre lang="javascript"] var _Game_Event_prototype_setupPage = Game_Event.prototype.refresh; Game_Event.prototype.setupPage = function() { _Game_Event_prototype_setupPage.call(this); if(Tilv.SHJ.isMonster(this._eventId)) { Tilv.SHJ.update(); console.log('sx'); } }; [/pre] |
![]() |
本帖最后由 QChan 于 2021-7-8 22:25 编辑 是之前的设置独立开关吗?独立开关设置后应该是会自动刷新的,不太确定什么情况。 如果要刷新比较简单的方法是用 $gameMap.requestRefresh(); 他会刷新地图上所有事件。 也有针对单个事件的刷新方法,$gameMap.event(事件id).refresh(); 如果没效果的话,可以截图下具体的事件和代码。 |