Project1

标题: 自动返回上一张地图场景(自动出门)插件(带视频教程) [打印本页]

作者: if216    时间: 2018-2-20 23:54
标题: 自动返回上一张地图场景(自动出门)插件(带视频教程)
本帖最后由 if216 于 2018-2-21 00:11 编辑

视频演示:
http://v.youku.com/v_show/id_XMz ... m=a2hzp.8244740.0.0

设计初衷:
朋友们有没有遇到过,进入一个房子选 场所移动,出来时,还要选择回到之前进来的场景以及位置,这种麻烦事?
现在每张门,你只需要设置进入点,返回的时候用outdoor插件命令几就可以返回了。

原理:
进门时将进门的mapid,x,y作为键,目的地的mapid,x,y做为值,存入player成员变量。那么没进入一张门,对应就可以用outdoor命令出门了。

注意:
你不能直接outdoor你从没有进过的门。所以如果有两个门,
你从后门进入,再从前门出是不行的。像这种就不要用outdoor命令了。

这个插件适用于一个大房间一条道走到黑的,只有一个入口和对应一个出口的
情况。

所幸70-90%的房间都是单向的。应该适用。或者自己做的额外的战场什么的,
返回也可以用。

而且插件也很灵活,想用就用,不想用就用默认的移动场所的命令也可以。

像是树结构的模型。

还有一点需注意,进入点设置的时候一定要选择出去的同一个点


== Terms of Use ==

- 在制作名单中注明引用插件的名字LCK_AutoBackOldMap以及作者名LCK(if216)
- 使用本插件引起的一切软件毁坏,作者不负任何责任
- 商用、非商用皆免费

代码:

(function() {

        // Plugin commands
        var GI_pluginCommand = Game_Interpreter.prototype.pluginCommand;
        Game_Interpreter.prototype.pluginCommand = function(command, args) {
                GI_pluginCommand.call(this, command, args);
                if(command.toLowerCase() === "outdoor") {
                        var direct,fadetype;

                        if (isNaN(args[0]))
                        {
                                direct = args[0];
                        }
                        else direct = 2;
                        if (isNaN(args[1]))
                        {
                                fadetype = args[1];
                        }
                        else fadetype = 0;

                        if(direct==undefined)  direct = 2;
                        if(fadetype==undefined)  fadetype = 0;
                        $gamePlayer.reserveTransferOldMap(direct,fadetype);
                }

        };

var initPlayer = Game_Character.prototype.initialize;
Game_Player.prototype.initialize = function() {
    initPlayer.call(this);

        this.doors = [];

    this.setTransparent($dataSystem.optTransparent);
};
       

        var rsmap = Game_Player.prototype.reserveTransfer;
        Game_Player.prototype.reserveTransfer = function(mapId, x, y, d, fadeType) {
                rsmap.call(this);
       
                var a = mapId+','+x+','+y;
                var b = $gameMap._mapId+','+this._x+','+this._y;
               
                this.doors[a] = b;

            this._transferring = true;
            this._newMapId = mapId;
            this._newX = x;
            this._newY = y;
            this._newDirection = d;
            this._fadeType = fadeType;
        };

       
        Game_Player.prototype.reserveTransferOldMap = function(d, fadeType) {

                var key_s = $gameMap._mapId+','+this._x+','+this._y;

                var value_O = this.doors[key_s];

                if(value_O==undefined || value_O.length == 0)
                {
                        return;
                }

                var a = [];
                a = value_O.split(",");

            this._transferring = true;
            this._newMapId = parseInt(a[0]);
            this._newX = parseInt(a[1]);
            this._newY = parseInt(a[2]);
            this._newDirection = d;
            this._fadeType = fadeType;

            this.doors.outDoorSuccessed = true;
        };

})();



LCK_AutoBackOldMap.zip

1.68 KB, 下载次数: 87


作者: 微笑的迪妮莎    时间: 2018-2-21 00:19
谢谢大佬辛苦分享!
作者: walf_man    时间: 2018-2-22 17:41
非常好的插件,之前就很纳闷为何门不能默认是门,而是要手动制作两遍




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