查看: 3638|回复: 5

[已经解决] 如何聰明地弄出逃跑道具

[复制链接]
梦石
0
星屑
149
在线时间
32 小时
注册时间
2015-12-30
回帖
16
发表于 2016-1-2 14:56:40 | 显示全部楼层 |阅读模式

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

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

×
实际上最近想弄个逃跑道具
上网查过,以前VX时逃跑道具几乎都写脚本之类

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

未命名.png

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

想问一下如果要弄出漂亮的逃跑道具,是要写脚本插件吗?
另外想问一下可以在「一般剧情」的位置替指定的战斗加上战斗LOG吗?
因为个人觉得目前这设计其实能够在「???使用了烟雾弹」後再加上一句「逃跑成功!」然後中断战斗已经很足够了。
想说如果很麻烦的话,乾脆加一句战斗LOG会比较快这样。
梦石
0
星屑
80
在线时间
386 小时
注册时间
2007-7-27
回帖
4075

开拓者

发表于 2016-1-2 16:35:23 | 显示全部楼层
本帖最后由 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();}
复制代码
试了一下 原生环境下出错

点评

错了,是BattleManager.processAbort();  发表于 2016-1-2 23:52
有靈感弄出折衷的東西來了  发表于 2016-1-2 23:23
学习到BattleManager._escaped = true才是逃跑原理。  发表于 2016-1-2 22:45
一般剧情XD  发表于 2016-1-2 16:59

评分

参与人数 1梦石 +1 收起 理由
余烬之中 + 1 0x0

查看全部评分

吸吸
回复

使用道具 举报

梦石
0
星屑
55
在线时间
388 小时
注册时间
2009-8-4
回帖
212
发表于 2016-1-2 18:36:38 | 显示全部楼层
公共事件执行脚本:
  1. BattleManager.displayEscapeSuccessMessage();
  2. BattleManager._escaped = true;
复制代码
这之后事件中断战斗

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

点评

你先做一个恐吓的技能,然后效果添加逃跑效果,再让敌人拥有恐吓技能就行了。  发表于 2016-1-2 23:26
看了眼F1好像是这样的,放给己方会导致该队友本场战斗无经验...这鸡肋的设定ORZ  发表于 2016-1-2 23:22
特殊效果逃跑我推測應該是拿來給敵人用的,因為對敵方全員用可以達至類似對方全員被嚇跑的樣子  发表于 2016-1-2 23:15
哈哈要多多全局查找默认脚本直接用现成的就好了,一个事件中断战斗可以省下好多事儿233  发表于 2016-1-2 20:00
我弄了一个小时XD,老想着要把Scene_Battle移走换成Scene_Map  发表于 2016-1-2 19:09

评分

参与人数 1梦石 +1 收起 理由
余烬之中 + 1 0x0

查看全部评分

回复

使用道具 举报

梦石
0
星屑
60
在线时间
306 小时
注册时间
2014-8-5
回帖
403
发表于 2016-1-2 22:37:09 | 显示全部楼层
本帖最后由 夏末渐离 于 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]

点评

加入BattleManager.displayEscapeSuccessMessage()为什么老是弹出两次的呢,算了……  发表于 2016-1-2 23:59
logo也可以自定义的。放在img/system下任意图片名字都可以被使用。  发表于 2016-1-2 23:29
我感觉还要走上提示消息的窗口……我再改改  发表于 2016-1-2 23:28
這個多加了loading的logo也不錯,謝謝提供建議  发表于 2016-1-2 23:23

评分

参与人数 1梦石 +1 收起 理由
余烬之中 + 1 0x0

查看全部评分

  点我进入    
       ↓      
回复

使用道具 举报

梦石
0
星屑
149
在线时间
32 小时
注册时间
2015-12-30
回帖
16
 楼主| 发表于 2016-1-2 23:31:40 | 显示全部楼层
andrewx 发表于 2016-1-2 18:36
公共事件执行脚本:这之后事件中断战斗

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

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

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

点评

但是如果直接用这句在事件脚本里逃跑的log还没显示好就会切回地图,然后逃跑log再出现一遍,效果非常的诡异233  发表于 2016-1-3 00:57
于是我终于发现了有用的是BattleManager.processAbort();XD  发表于 2016-1-2 23:52
感觉不错~我脚本那两句就是系统在判定逃跑成功后做的事情,一句出log,一句全员触发撤退动画  发表于 2016-1-2 23:35
回复

使用道具 举报

梦石
0
星屑
60
在线时间
306 小时
注册时间
2014-8-5
回帖
403
发表于 2016-1-3 01:22:21 | 显示全部楼层
本帖最后由 夏末渐离 于 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]

点评

我也在纠结逃跑信息诡异中断的解决思路呢……  发表于 2016-1-4 01:14
辛苦了,原来scene的管理是按stack来的,原来如此好像明白了什么。但是我还是不理解为什么直接在脚本里用processAbort()会连信息都不显示完全就结束.....  发表于 2016-1-3 10:47
  点我进入    
       ↓      
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部