查看: 7790|回复: 14

[有事请教] 如何在自主移动路线中使用脚本

[复制链接]
梦石
0
星屑
47
在线时间
8 小时
注册时间
2019-7-13
回帖
9
发表于 2019-7-13 12:59:36 | 显示全部楼层 |阅读模式

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

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

×
有求各位大大教学 ,我是脚本新手,事件自主移动中怎样用脚本来操作事件呢?

比如说我要让他往上走10步:
n=10;n.times do move_up;end
但我光输入这个并没反应,是不是缺少了什么要素?
梦石
0
星屑
25359
在线时间
1136 小时
注册时间
2019-3-5
回帖
1303
发表于 2019-7-13 13:13:21 | 显示全部楼层
虽然我不懂脚本,但是你这个脚本似乎就是错的吧……话说能用默认的移动为什么要用脚本呢。
具体的脚本你可以看看论坛里的相关分享
回复

使用道具 举报

梦石
0
星屑
47
在线时间
8 小时
注册时间
2019-7-13
回帖
9
 楼主| 发表于 2019-7-13 14:35:51 | 显示全部楼层
本帖最后由 harice 于 2019-7-13 14:37 编辑
Zeldashu 发表于 2019-7-13 13:13
虽然我不懂脚本,但是你这个脚本似乎就是错的吧……话说能用默认的移动为什么要用脚本呢。
具体的脚本你可 ...


我的意思是比如像这样如果自主移动

要走几十步什至上百部的步骤
应该用不到要点击几百次按钮吧

脚本上应该可以怎样设置呢

WechatIMG180.png
回复

使用道具 举报

梦石
0
星屑
12161
在线时间
4435 小时
注册时间
2014-4-11
回帖
5616

开拓者

发表于 2019-7-13 15:01:17 | 显示全部楼层
本帖最后由 yang1zhi 于 2019-7-13 15:03 编辑

首先你要学会MV的脚本
你这语句不是JS语

这种要写很多内容的。
在脚本里先写个函数。
把要执行的内容写在函数里
这里写个函数名就行。


Game_Character.prototype.自定义移动= function() {
    //执行10次
    for (var i=0;i<10;i++) {
    //向左移动
    this.moveStraight(4);
    //向右移动
    this.moveStraight(6);
    //向上移动
    this.moveStraight(8);
    //向下移动
    this.moveStraight(2);
    }
};

具体相关指令参考这个函数
Game_Character.prototype.processMoveCommand = function(command) {


然后在路线的脚本里输入
this.自定义移动()

但是要注意,脚本都是单帧数执行完的。不会像路径编辑里面一样一行一行等待
要等待的情况下,要自己思考怎么写了
回复

使用道具 举报

梦石
0
星屑
7427
在线时间
948 小时
注册时间
2017-9-27
回帖
566
发表于 2019-7-13 15:12:23 | 显示全部楼层
想法是对的,但实现的方式不对。如果你一定要用脚本实现你的想法,建议你先去看看Javascript脚本该怎么写。
回复

使用道具 举报

梦石
0
星屑
47
在线时间
8 小时
注册时间
2019-7-13
回帖
9
 楼主| 发表于 2019-7-13 15:14:52 | 显示全部楼层
yang1zhi 发表于 2019-7-13 15:01
首先你要学会MV的脚本
你这语句不是JS语

谢谢大大!我再研究一下这部份
回复

使用道具 举报

梦石
0
星屑
47
在线时间
8 小时
注册时间
2019-7-13
回帖
9
 楼主| 发表于 2019-7-13 17:57:35 | 显示全部楼层
梦想家大魔王 发表于 2019-7-13 15:12
想法是对的,但实现的方式不对。如果你一定要用脚本实现你的想法,建议你先去看看Javascript脚本该怎么写。 ...

所以有可能使用【移动路线】里的【脚本】来实现这个吗
MV的确不熟 那行代码在XP可像能行
回复

使用道具 举报

梦石
0
星屑
7427
在线时间
948 小时
注册时间
2017-9-27
回帖
566
发表于 2019-7-13 20:07:40 | 显示全部楼层
harice 发表于 2019-7-13 17:57
所以有可能使用【移动路线】里的【脚本】来实现这个吗
MV的确不熟 那行代码在XP可像能行 ...

事件页里所有的指令都可以用脚本来扩展、修改,只看你有没有那个需求,有没有精力来写了。
像你前面说的有很多重复性的移动动作,完全可以把重复的部分做成一个单独的指令集,其他部分按需做成一个或多个指令集,按需调用就是了,没必要动脚本。
回复

使用道具 举报

梦石
0
星屑
16261
在线时间
4014 小时
注册时间
2015-9-14
回帖
1322

开拓者

发表于 2019-7-13 20:26:23 | 显示全部楼层
本帖最后由 wabcmcc 于 2019-7-13 20:51 编辑

找到條合適樓主移動擴展插件,
作者:Yana
插件名稱:MoveRoutePlus.js
好好學習腳本.

移動ルート//
//  移動ルート+ ver1.00
//
// ------------------------------------------------------
// Copyright (c) 2016 Yana
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
// ------------------------------------------------------
//
// author Yana
//

var Imported = Imported || {};
Imported['MoveRoutePlus'] = 1.00;

/*:
* @plugindesc ver1.00/移動ルートの設定を拡張します。
* @author Yana
*
* @help ------------------------------------------------------
* 使用方法
* ------------------------------------------------------
* イベントの自立移動→カスタムの移動ルートまたは、イベントコマンドの移動ルートの設定で
* スクリプトの項目を使って、以下のような指定をできるようにします。
*
* moveUp(○)
* 上に○歩移動
* moveLeft(○)
* 左に○歩移動
* moveRight(○)
* 右に○歩移動
* moveDown(○)
* 下に○歩移動
* moveLeftDown(○)
* 左下に○歩移動
* moveLeftUp(○)
* 左上に○歩移動
* moveRightDown(○)
* 右下に○歩移動
* moveRightUp(○)
* 右上に○歩移動
* 「◇◇に移動」を○個並べるのと同じ効果です。
*
* moveForward(○)
* ○歩前進
* moveBack(○)
* ○歩後退
* 「一歩前進」「一歩後退」を○個並べるのと同じ効果です。
*
* moveToward(○)
* ○歩近づく
* moveAway(○)
* ○歩遠ざかる
* 「プレイヤーに近づく」「プレイヤーから遠ざかる」を○個並べるのと同じ効果です。
*
* moveRandom(○)
* ○歩ランダムに移動
* 「ランダムに移動」を○個並べるのと同じ効果です。
*
* loopRoute(○,□[,×,◇…])
* □番のコードの移動ルートを○回並べるのと同じ効果です。
* 必要に応じて、×、◇など、追加のパラメータを設定します。
*
* ------------------------------------------------------
* 利用規約
* ------------------------------------------------------
* 当プラグインはMITライセンスで公開されています。
* 使用に制限はありません。商用、アダルト、いずれにも使用できます。
* 二次配布も制限はしませんが、サポートは行いません。
* 著作表示は任意です。行わなくても利用できます。
* 要するに、特に規約はありません。
* バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。
* https://twitter.com/yanatsuki_
* 素材利用は自己責任でお願いします。
* ------------------------------------------------------
* 更新履歴:
* ver1.00:
* 公開
*/

(function(){
    ////////////////////////////////////////////////////////////////////////////////////

    var parameters = PluginManager.parameters('MoveRoutePlus');

    ////////////////////////////////////////////////////////////////////////////////////

    var __GCharacter_setMoveRoute = Game_Character.prototype.setMoveRoute;
    Game_Character.prototype.setMoveRoute = function(moveRoute) {
        var mr = moveRoute;
        mr.list = this.deploymentMoveRoute(moveRoute);
        __GCharacter_setMoveRoute.call(this, mr);
    };
   
    var __GCharacter_forceMoveRoute = Game_Character.prototype.forceMoveRoute;
    Game_Character.prototype.forceMoveRoute = function(moveRoute) {
        var mr = moveRoute;
        mr.list = this.deploymentMoveRoute(moveRoute);
        __GCharacter_forceMoveRoute.call(this, mr);
    };
   
    Game_Character.prototype.deploymentMoveRoute = function(moveRoute) {
        var list = [];
        moveRoute.list.forEach(function(r){
            if (r.code === 45) {
                if (r.parameters[0].match(/^(?:moveDown|下に)\(?(\d+)\)?(?:歩移動)?/)) {
                    for (var i=0;i<Number(RegExp.$1);i++) list.push({code:1});
                } else if (r.parameters[0].match(/^(?:moveLeft|左に)\(?(\d+)\)?(?:歩移動)?/)) {
                    for (var i=0;i<Number(RegExp.$1);i++) list.push({code:2});
                } else if (r.parameters[0].match(/^(?:moveRight|右に)\(?(\d+)\)?(?:歩移動)?/)) {
                    for (var i=0;i<Number(RegExp.$1);i++) list.push({code:3});
                } else if (r.parameters[0].match(/^(?:moveUp|上に)\(?(\d+)\)?(?:歩移動)?/)) {
                    for (var i = 0; i < Number(RegExp.$1); i++) list.push({code: 4});
                } else  if (r.parameters[0].match(/^(?:moveLeftDown|左下に)\(?(\d+)\)?(?:歩移動)?/)) {
                    for (var i=0;i<Number(RegExp.$1);i++) list.push({code:5});
                } else if (r.parameters[0].match(/^(?:moveRightDown|右下に)\(?(\d+)\)?(?:歩移動)?/)) {
                    for (var i=0;i<Number(RegExp.$1);i++) list.push({code:6});
                } else if (r.parameters[0].match(/^(?:moveRightUp|右上に)\(?(\d+)\)?(?:歩移動)?/)) {
                    for (var i=0;i<Number(RegExp.$1);i++) list.push({code:7});
                } else if (r.parameters[0].match(/^(?:moveLeftUp|左上に)\(?(\d+)\)?(?:歩移動)?/)) {
                    for (var i = 0; i < Number(RegExp.$1); i++) list.push({code:8});
                } else if (r.parameters[0].match(/^moveForward\((\d+)\)/)) {
                    for (var i = 0; i < Number(RegExp.$1); i++) list.push({code:12});
                } else if (r.parameters[0].match(/^moveBack\((\d+)\)/)) {
                    for (var i = 0; i < Number(RegExp.$1); i++) list.push({code:13});
                } else if (r.parameters[0].match(/^moveToward\((\d+)\)/)) {
                    for (var i=0;i<Number(RegExp.$1);i++) list.push({code:10});
                } else if (r.parameters[0].match(/^moveAway\((\d+)\)/)) {
                    for (var i=0;i<Number(RegExp.$1);i++) list.push({code:11});
                } else if (r.parameters[0].match(/^moveRandom\((\d+)\)/)) {
                    for (var i=0;i<Number(RegExp.$1);i++) list.push({code:9});
                } else if (r.parameters[0].match(/^(\d+)歩前進/)) {
                    for (var i = 0; i < Number(RegExp.$1); i++) list.push({code:12});
                } else if (r.parameters[0].match(/^(\d+)歩後退/)) {
                    for (var i = 0; i < Number(RegExp.$1); i++) list.push({code:13});
                } else if (r.parameters[0].match(/^(\d+)歩近づく/)) {
                    for (var i=0;i<Number(RegExp.$1);i++) list.push({code:10});
                } else if (r.parameters[0].match(/^(\d+)歩遠ざかる/)) {
                    for (var i=0;i<Number(RegExp.$1);i++) list.push({code:11});
                } else if (r.parameters[0].match(/^(\d+)歩ランダムに移動/)) {
                    for (var i=0;i<Number(RegExp.$1);i++) list.push({code:9});
                } else if (r.parameters[0].match(/loopRoute\((.+)\)/)) {
                    var params = RegExp.$1.split(',');
                    var code = Number(params[1]);
                    var command = {code:code, parameters:[]};
                    var max = Number(params[0]);
                    switch(code) {
                        case 41:
                            command.parameters[0] = params[2];
                            command.parameters[1] = Number(params[3]);
                            for (var i = 0; i < max; i++) list.push(command);
                            break;
                        case 44:
                            var se = {name:'',pan:0,pitch:100,volume:100};
                            se.name = params[2];
                            if (params[3]) se.volume = Number(params[3]);
                            if (params[4]) se.pitch = Number(params[4]);
                            if (params[5]) se.pan = Number(params[5]);
                            command.parameters[0] = se;
                            for (var i = 0; i < max; i++) list.push(command);
                            break;
                        case 45:
                            command.parameters[0] = params[2];
                            for (var i = 0; i < max; i++) list.push(command);
                            break;
                        default:
                            if (params[2]) command.parameters[0] = Number(params[2]);
                            if (params[3]) command.parameters[1] = Number(params[3]);
                            for (var i = 0; i < max; i++) list.push(command);
                            break;
                    }
                } else {
                    list.push(r);
                }
            } else {
                list.push(r);
            }
        }.bind(this));
        return list;
    };
}());
https://rpg.blue/data/attachment/album/202003/28/021323lltgrsvfytfwuya5.gif
回复 1 0

使用道具 举报

梦石
0
星屑
47
在线时间
8 小时
注册时间
2019-7-13
回帖
9
 楼主| 发表于 2019-7-13 20:28:45 | 显示全部楼层
梦想家大魔王 发表于 2019-7-13 20:07
事件页里所有的指令都可以用脚本来扩展、修改,只看你有没有那个需求,有没有精力来写了。
像你前面说的 ...

噢噢我懂你的意思!
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部