美文网首页RPG Maker MV
【RPG Maker MV插件】【MND_GetSetSelfS

【RPG Maker MV插件】【MND_GetSetSelfS

作者: 鳗驼螺 | 来源:发表于2017-06-10 16:28 被阅读244次

    这个插件的作用是设置或获取指定事件的自有开关状态。直接操作自有开关的好处是可以减少开关变量的使用。比如想要根据轨道的变轨状态来选择矿车的行进路线,如果不用自有开关就需要一个开关变量来记录轨道的变轨状态,像类似这样的小事件一多就会占用大量的开关变量。
      官方有一个类似的插件OuterSelfSwitch,不过它只实现了设置功能,没有去实现查询功能。参考官方这个插件很容易实现查询功能,整个代码如下。不过,注意,本插件使用时用的是脚本调用而不是插件命令调用。

    //============================================
    // MND_GetSetSelfSwitch.js
    //============================================
    
    /*:
     * @plugindesc Get / set the self switch of the event.(v1.0)
     * @author Mandarava
     *
     * @help
     *
     * JavaScript code:
     *
     * Set the self switch for the event:
     * SetSelfSwitch(eventId, switchId, value, mapId)
     *   - eventId: event id.
     *   - switchId: self switch id, e.g. "A", "B", "C", "D".
     *   - value: value of the self switch, e.g. true, false.
     *   - mapId: the map id where the event is, if null, means in current map.
     *
     * Set all self switches for all events in current map:
     * SetAllSelfSwitches(switchId, value);
     *   - switchId: self switch id, e.g. "A", "B", "C", "D".
     *   - value: value of the self switch, e.g. true, false.
     *
     * Get the self switch of the event:
     * GetSelfSwitch(eventId, switchId, mapId)
     *   - eventId: event id.
     *   - switchId: self switch id, e.g. "A", "B", "C", "D".
     *   - mapId: the map id where the event is, if null, means in current map.
     *
     * Javascript example:
     *
     *  SetSelfSwitch(1, "A", true);
     *  SetSelfSwitch(1, "A", true, 2);
     *
     *  SetAllSelfSwitches("A", true);
     *
     *  GetSelfSwitch(1, "A")
     *  GetSelfSwitch(1, "A", 2)
     *
     */
    
    /*:zh
     * @plugindesc 获取和设置指定Map中指定Event的指定自有开关的开关状态。(v1.0)
     * @author Mandarava(鳗驼螺)
     * 
     * @help 
     * 
     * 在脚本中调用以下方法:
     * 
     * 设置事件自有开关状态:
     * SetSelfSwitch(eventId, switchId, value, mapId)
     *   - eventId: 事件id。
     *   - switchId: 自有开关的id,可选值:"A", "B", "C", "D"
     *   - value: 开关状态,可选值:true, false
     *   - mapId: 事件所在的地图id,如果不提供或为null,则为当前地图。
     * 
     * 设置当前地图中所有事件的自有开关状态:
     * SetAllSelfSwitches(switchId, value);
     *   - switchId: 自有开关的id,可选值:"A", "B", "C", "D"
     *   - value: 开关状态,可选值:true, false
     *
     * 获取事件自有开关状态:
     * GetSelfSwitch(eventId, switchId, mapId)
     *   - eventId: 事件id。
     *   - switchId: 自有开关的id,可选值:"A", "B", "C", "D"。
     *   - mapId: 事件所在的地图id,如果不提供或为null,则为当前地图。
     * 
     * 示例:
     *  SetSelfSwitch(1, "A", true);    //设置当前地图上ID为1的事件的自有开关A的开关状态为true
     *  SetSelfSwitch(1, "A", true, 2); //设置ID为2的地图上ID为1的事件的自有开关A的开关状态为true
     * 
     *  SetAllSelfSwitches("A", true);  //设置当前地图上所有事件的自有开关A的开关状态为true
     * 
     *  GetSelfSwitch(1, "A")      //获取当前地图上ID为1的事件的自有开关A的开关状态
     *  GetSelfSwitch(1, "A", 2)   //获取ID为2的地图上ID为1的事件的自有开关A的开关状态
     *
     */
    
    (function($){
    
        GetSelfSwitch=function(eventId, switchId, mapId){
            if (!switchId.match(/^[A-D]$/)) return;
            eventId = Number(eventId)
            mapId = mapId || $gameMap.mapId();
            if (eventId > 0) {
                var key = [mapId, eventId, switchId];
                return $gameSelfSwitches.value(key);
            }
            return false;
        }
    
        SetSelfSwitch=function(eventId, switchId, value, mapId){
            if (!switchId.match(/^[A-D]$/)) return;
            mapId = mapId || $gameMap.mapId();
            _setSelfSwitch(eventId, switchId, value, mapId);
        }
    
        SetAllSelfSwitches=function(switchId, value){
            if (!switchId.match(/^[A-D]$/)) return;
            var mapId=$gameMap.mapId();
            for (var i = 1; i < $dataMap.events.length; i++) {
                _setSelfSwitch(i, switchId, value, mapId);
            }
        }
    
        function _setSelfSwitch(eventId, switchId, value, mapId){
            eventId = Number(eventId);
            if (eventId > 0) {
                var key = [mapId, eventId, switchId];
                $gameSelfSwitches.setValue(key, value);
            }
        }
    
    })();
    

    相关文章

      网友评论

      • Ortho穆小白:大神,有个问题没搞明白,脚本调用和插件调用有啥区别
        鳗驼螺:因为插件命令没有返回值,所以在使用事件指令中的“变量操作”或“分支条件”命令时,mv只接受脚本代码,没法使用插件指令。如果你用了这个插件去读取某个开关的状态,你会遇到这个问题,你通常可以将开关状态保存到变量,亦或在分支条件中直接读取,不管是哪种,这个读取操作都只能用脚本命令。当然,如果你一定要把这个插件的功能做成插件命令也可以,但是要分配一个变量给这个插件专用(通常可以用插件参数来指定用哪个变量),然后在插件中将计算得到的值保存到这个变量中,之后你就可以在事件中直接调用那个变量,这种方式也可以,但我认为相对麻烦些。

      本文标题:【RPG Maker MV插件】【MND_GetSetSelfS

      本文链接:https://www.haomeiwen.com/subject/xysqqxtx.html