Project1

标题: 如何聰明地弄出逃跑道具 [打印本页]

作者: tmh2009    时间: 2016-1-2 14:56
标题: 如何聰明地弄出逃跑道具
实际上最近想弄个逃跑道具
上网查过,以前VX时逃跑道具几乎都写脚本之类

参照了一下道具设置
道具本身有能添加逃跑的特殊效果
然而问题在於设置了後才发现这个逃跑和自方撤退时的逃跑是两回事
如果自方全部都用这个逃跑的话,出现卡在战斗的情况

(, 下载次数: 71)

目前蠢蠢的解决方法是在道具效果上加上「触发逃跑剧情」
然後再在设置「逃跑剧情」的位置上只加上「中止战斗」的内容
可是这麽一来就没有「逃跑成功」的战斗LOG提示,变成突然全部人消失後战斗自己退出的突兀情况

想问一下如果要弄出漂亮的逃跑道具,是要写脚本插件吗?
另外想问一下可以在「一般剧情」的位置替指定的战斗加上战斗LOG吗?
因为个人觉得目前这设计其实能够在「???使用了烟雾弹」後再加上一句「逃跑成功!」然後中断战斗已经很足够了。
想说如果很麻烦的话,乾脆加一句战斗LOG会比较快这样。
作者: trentswd    时间: 2016-1-2 16:35
本帖最后由 trentswd 于 2016-1-2 16:38 编辑

加战斗日志必须使用脚本了
另外我得吐槽一下,“一般剧情”是公共事件,虽然我觉得机翻也不会吧Common Event翻译成一般剧情,实在是很神奇……呃,我是说楼主可能去巴哈找个繁体翻译修正比较好

效果里面的逃跑是仅用于“逃跑”指令

用公共事件配合脚本能做,不过我自己不是原生工程,是用了YEP的,不知道不用会不会有问题
在公共事件里面加入
  1. if(SceneManager._scene instanceof Scene_Battle){
  2.   var actorIndex = BattleManager._actorIndex;
  3.   BattleManager.selectNextCommand();
  4.   BattleManager._actorIndex = actorIndex;
  5.   SceneManager._scene.commandEscape();}
复制代码
试了一下 原生环境下出错
作者: andrewx    时间: 2016-1-2 18:36
公共事件执行脚本:
  1. BattleManager.displayEscapeSuccessMessage();
  2. BattleManager._escaped = true;
复制代码
这之后事件中断战斗

我想知道特殊效果那个逃跑到底什么意思。。。
作者: 夏末渐离    时间: 2016-1-2 22:37
本帖最后由 夏末渐离 于 2016-1-2 23:59 编辑

[pre lang="javascript"]/*:
* @author XMJL
* 如在公共事件使用脚本:escape_event('Loading');
* 将此公共事件添加到道具的效果上,在战斗中使用该道具即可逃跑。
*/
var escape_event=function(BitmapName)
{
    var LOGO=new Sprite(ImageManager.loadSystem(BitmapName));
    LOGO.anchor.x=0.5;
    LOGO.anchor.y=0.5;
    LOGO.x=Graphics.width/2;
    LOGO.y=Graphics.height/2;
    $gameParty.removeBattleStates();
    $gameParty.performEscape();
    SoundManager.playEscape();
    var viewport=Scene_Battle.prototype.update;
    Scene_Battle.prototype.update=function()
    {
        viewport.call(this);
        if(this.isActive())
            this.removeChild(LOGO);
        else
        {
            this.addChild(LOGO);
        }
    };
    BattleManager.processAbort();//中断战斗成功
};
[/pre]
作者: tmh2009    时间: 2016-1-2 23:31
andrewx 发表于 2016-1-2 18:36
公共事件执行脚本:这之后事件中断战斗

我想知道特殊效果那个逃跑到底什么意思。。。 ...

感谢您的建议
目前我自己也找到折衷的办法,配合你的写法就比较完美了

首先是「烟雾弹」的道具效果有两个∶「添加状态∶烟雾逃跑100%」&「公共事件∶逃跑」
然後在状态那边新增一个「烟雾逃跑」的状态,这个状态纯粹是拿来放战斗LOG的
我是打上了「(目标名称) 放出大量烟雾遮盖敌人视线!」
然後再接上你那个脚本逃跑时的「某某某的队伍成功逃跑了」的句子就很完美了。


作者: 夏末渐离    时间: 2016-1-3 01:22
本帖最后由 夏末渐离 于 2016-1-3 01:24 编辑
andrewx 发表于 2016-1-2 18:36
公共事件执行脚本:这之后事件中断战斗

我想知道特殊效果那个逃跑到底什么意思。。。 ...


[fold=最醒目的processEscape方法]
[pre lang="javascript"]
BattleManager.processEscape=function()
{
……//代表省略
this.displayEscapeSuccessMessage();
this._escaped = true;
this.processAbort();  //线索
……
}
[/pre]
[/fold]

[fold=然后从processAbort出发]
[pre lang="javascript"]
BattleManager.processAbort = function() {
    this.replayBgmAndBgs();  //回归地图背景音乐
    this.endBattle(1);             //线索
};
[/pre]
[/fold]


[fold=来到了用于判定的endBattle方法]
[pre lang="javascript"]
BattleManager.endBattle= function(result) {
    this._phase = 'battleEnd';  //线索
    if (this._eventCallback) {
        this._eventCallback(result);
    }
    if (result === 0)
    {
        $gameSystem.onBattleWin();
    }
      else if (this._escaped) {
      $gameSystem.onBattleEscape();
     //由于传入的是1,而且之前的processEscape已设为true,然而这个只是计数的……
    }
};[/pre]
[/fold]

[fold=找到了关键字battleEnd]
[pre lang="javascript"]
BattleManager.update = function()
{
    if (!this.isBusy() && !this.updateEvent()) {
        switch (this._phase) {
         ……
         case 'battleEnd':
         this.updateBattleEnd();
         break;
    }
}
[/pre]
[/fold]

[fold=最后新人表示被戏耍了,真正作用竟然是SceneManager.pop().……]
[pre lang="javascript"]
BattleManager.updateBattleEnd=function()
{
  ……
SceneManager.pop();
this._phase = null;
……
}
[/pre]
[/fold]




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