查看: 3244|回复: 3

[已经过期] 想让暗雷战斗失败后,不会进入游戏失败页面

[复制链接]
梦石
1
星屑
7574
在线时间
2650 小时
注册时间
2013-8-23
回帖
2152

开拓者

发表于 2017-5-30 12:47:34 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 鑫晴 于 2017-5-30 15:46 编辑

默认情况下,在暗雷战斗中,如果队伍成员在战斗中都附加了“战斗不能”的状态,游戏结束。

我想要角色能在战斗失败后保留“战斗不能”状态,即使团灭也不会结束游戏,
而是以“战斗不能”状态和HP=1,返回地图场景。


换了种解决方式,算是解决了
团灭后调用公共事件
$gameTemp.reserveCommonEvent(1);  


但有个新的问题出现了。。。
我想在这个时机调用公共事件(失败信息关闭后,战斗场景还存在时)
def.png


矛盾历史

看到上面是用 $gameParty.isAllDead() 来判断战斗失败,
然后发现在rpg_scenes.js第121行有 checkGameover 来判断游戏失败。
于是...

我想让判断GameOver的那条指令返回 false 来阻止游戏结束,但是不知道怎么修改...
我尝试写 $gameParty.isAllDead = false; 但这样似乎是语法错误的





[pre lang="javascript" line="2486" file="rpg_managers.js"]BattleManager.updateBattleEnd = function() {
    if (this.isBattleTest()) {
        AudioManager.stopBgm();
        SceneManager.exit();
    } else if (!this._escaped && $gameParty.isAllDead()) {
        if (this._canLose) {
            $gameParty.reviveBattleMembers();
            SceneManager.pop();
        } else {
            this._canLose = true;
            this.endBattle(2);
            $gameParty.reviveBattleMembers();
            $gameTemp.reserveCommonEvent(1);   /* 调用公共事件  */
            SceneManager.pop();   /*SceneManager.goto(Scene_Map); */

            /*SceneManager.goto(Scene_Gameover);*/
        }
    } else {
        SceneManager.pop();
    }
    this._phase = null;
};[/pre]

想要的效果:
暗雷战斗失败后,不会进入“GameOver”页面,而是像设置了“允许失败”的战斗一样,战斗结束后返回战斗前的位置。“战斗不能”的状态也不会因为战斗结束而消失。(默认“允许失败”的战斗结束后没有“战斗不能”的状态)。


在RMXP中,可以这样实现想要的效果

[pre lang="ruby" line="277"]    # 游戏结束的情况下
    if $game_temp.gameover  
      $game_temp.battle_can_lose = true
      battle_end(1)
      $game_temp.gameover = false
      $game_system.bgm_play(nil)
      $game_system.bgs_play(nil)
      return
    end[/pre]
梦石
0
星屑
440
在线时间
679 小时
注册时间
2014-3-15
回帖
239

开拓者

发表于 2017-5-30 13:44:13 | 显示全部楼层
一个比较菜鸟的办法,在需要canlose的时候,地图脚本编辑器代码BattleManager._canLose = true这样的话战斗失败直接退出战斗继续剧情。需要的时候BattleManager._canLose = false来取消效果。

点评

但是没有允许失败的话,战斗结束没有“战斗不能”的状态  发表于 2017-5-30 13:54

评分

参与人数 1星屑 +66 收起 理由
鑫晴 + 66 塞糖

查看全部评分

回复

使用道具 举报

梦石
0
星屑
2306
在线时间
1010 小时
注册时间
2012-4-30
回帖
1455

开拓者

发表于 2017-5-30 14:18:39 | 显示全部楼层
本帖最后由 铅笔描绘的思念 于 2017-5-30 14:44 编辑

isAllDead()只是一个有返回值的方法罢了。。所以 $gameParty.isAllDead = false; 肯定出错啊。。
我的想法是if…… then break 就好
或者在给isAllDead()加个访问器 但isAllDead()其实也是返回别的方法的值罢了 所以麻烦又没必要


break错了并没有什么区别
类似canlose的话
[pre lang="javascript"]if (条件) {SceneManager.pop();}[/pre]
但pop到上个scene的话 因为scene_base有checkGameover所以还要
[pre lang="javascript"]Scene_Base.prototype.checkGameover = function() {
    if ($gameParty.isAllDead()&&条件) {
        SceneManager.goto(Scene_Gameover);
    }
};[/pre]类似这样的可以用一个开关来加条件

评分

参与人数 1星屑 +66 收起 理由
鑫晴 + 66 认可答案

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部