| 
 
| 赞 | 6 |  
| VIP | 0 |  
| 好人卡 | 0 |  
| 积分 | 4 |  
| 经验 | 0 |  
| 最后登录 | 2025-7-29 |  
| 在线时间 | 98 小时 |  
 Lv2.观梦者 
	梦石0 星屑371 在线时间98 小时注册时间2017-12-7帖子14 | 
| 
本帖最后由 mh40907895 于 2019-9-3 19:32 编辑
x
加入我们,或者,欢迎回来。您需要 登录 才可以下载或查看,没有帐号?注册会员  
 在做一个游戏时候找了很久都没找到暗雷遇怪如何在人物死后原地复活的方法,本人又对脚本编写基本停留在大概能看懂的地步。
 所以我只能硬着头皮去试着改改。
 以下教程适合我这种对编写脚本头大的新人学习,对于论坛的各位dalao来说是小巫见大巫了
   ======分割线=======
 首先,要实现这个目的,事件是解决不了的了,必须要修改js文件,我们知道如果是事件遇怪的话,可以设置一个允许失败,设置以后的效果是死亡之后不出现Gameover界面,而是直接返回战斗之前的地图画面然后自动复活。那么,马上我们就应该想到,如果把这个效果拿去替换掉默认的死亡方式,那这个问题就迎刃而解了,说干就干。
 第一步是如何找到这个死亡界面,这里我必须推荐Notepad++这个软件,真的很好用,而且有一个功能是搜索所有打开的文件,那么我们就把所有的自带的那些js都扔进去然后搜索gameover
 然后能得到一堆搜索结果,但是不要急,一个一个看。
 这时,要注意,我们要找的那一条是设置了选项的死亡方式,所以前后一定会有if这种语句,那么挨个看下来,在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 {
            SceneManager.goto(Scene_Gameover);
        }
    } else {
        SceneManager.pop();
    }
    this._phase = null;
};
 和复制代码$gameParty.reviveBattleMembers();
SceneManager.pop();
 看起来就是我们要找的东西,毕竟用初中英语也知道party有队伍的意思,revive是复活,第二句是什么不知道,不管他,第三句的goto和Scene_Gameover就更不用说了,然后,我们把第三句替换成前两句就得到了复制代码SceneManager.goto(Scene_Gameover);
 那么我们测试一下,emmm完美!直接返回了而且生命恢复了1,那么我们就该来看一眼上面说的SceneManager.pop();能不能简化,其实这很容易解决,原来ruby时候前面加个#就可以让这段变成注释,现在呢是用/**/把需要注释掉的句子包起来就行了,也就是说变成/*SceneManager.pop();*/,ok我们测试一下,显然运行出了问题,死亡以后卡在战斗界面回不去了,那么这一句即使不知道是什么意思我们也知道应该保留。但是你以为这样就完事了么!当然不是,虽然我不会写脚本,但是既然要做游戏我们就绝不能允许人物死亡以后就原地复活,连一句话都没有!复制代码BattleManager.updateBattleEnd = function() {
    if (this.isBattleTest()) {
        AudioManager.stopBgm();
        SceneManager.exit();
    } else if (!this._escaped && $gameParty.isAllDead()) {
        if (this._canLose) {
            $gameParty.reviveBattleMembers();
            SceneManager.pop();
        } else {
            $gameParty.reviveBattleMembers();
            SceneManager.pop();
        }
    } else {
        SceneManager.pop();
    }
    this._phase = null;
};
那么在复活那里就应该加一句来调用一个公共事件,这样事件党们就又可以为所欲为了!
 很简单,加一句
 
 这里的X可以替换成任何你想变成的公共事件的编号。复制代码$gameTemp.reserveCommonEvent(X);
好了,这个效果就算完成了~
 我要滚去做游戏啦~
  
 | 
 评分
查看全部评分
 |