[Triacontane(トリアコンタン)]ChangeGameOverCondition游戏结束条件变更

点这里返回总目录
点这里返回Triacontane(トリアコンタン)插件介绍与笔记总目录

PartA

题记

  • 作者:Triacontane(トリアコンタン)
  • 版本:1.1.0
  • 简介:游戏结束条件变更

概况

原自动GAMEOVER条件为己方全灭且游戏作者未设置可全灭。使用这个插件将会改变这个自动GAMEOVER的触发条件。指定ID的角色挂了,或者全队中任何一人挂了。

插件可能性分析(情况推荐)

如果接到了特别任务,比如保护公主这个角色,公主也同样参与了战斗,那么公主享受VIP待遇,当公主倒地,游戏就结束了。
如果是任何一人挂了就结束...感觉游戏难度变高了...

插件使用方法

  • 在插件管理器中启用。
  • 在事件中执行脚本命令

脚本命令

  • $gameParty.setVip(1); 当ID编号为1的角色战斗不能时,游戏结束,这个ID请自行改变。
  • $gameParty.setVipAll(); 队伍中任何一人战斗不能时,游戏结束。
  • $gameParty.removeVip(); 移除VIP设置,也就是条件恢复成原MV设置的己方全灭。

未验证事项

help中未写,但是从代码里,有种感觉,这个插件在启动时,默认会执行setVipAll的效果,如果需要默认的全灭再GAMEOVER,可能要先执行一次$gameParty.removeVip()。

PartB

大致原理

Game_Party多两个属性,_vipActor和_vipAll。前者的值是数值,后者的值是布尔值。三个脚本命令其实是对这两个属性的值进行赋值改变。MV判断GAMEOVER的条件依然是Game_Party.prototype.isAllDead,也就是说这两个属性会欺瞒MV,VIP挂了就变成全员挂了哈哈哈。

一些啰嗦的笔记

  • var result = _Game_Party_isAllDead.apply(this, arguments);
    赋值的同时调用执行函数,很简练的写法。因为原本的函数就会返回一个值。
    如果全员都挂了,这个值为真,那么直接跳过判断,返回真。
    当不为真时,有超过一个队员挂了的情况,进行连续判断。这个连续判断的解读是从左到右推进。
return this._vipAll ? true :
               this._vipActor ? this.deadMembers().contains($gameActors.actor(this._vipActor)) : false;

拆解:属性_vipAll是否为真?如果为真那么return的值为true,如果不为真则到分号右边。分号右边首先判断的是this._vipActor是否有值(不为null),如果有的话返回this.deadMembers().contains($gameActors.actor(this._vipActor))的结果,如果为null,那么到分号右边,返回false。

  • this.deadMembers().contains($gameActors.actor(this._vipActor))
    Game_Actors.prototype.actor = function(actorId) 根绝角色ID返回对应角色。
    Game_Party的创建借用了Game_Unit,而deadMembers()这个方法原本是定义在Game_Unit里的。
    Game_Unit.prototype.deadMembers会返回被过滤出的已挂掉成员。
    contains这个方法是MV源生函数里自行定义的方法。用于判断数组是否包含。
    当已挂的成员里包含这个VIP成员,那么返回true,否则返回false。
  • 编程思路里增加一条:欺瞒利用MV源生函数。

其他

  • 无更新,暂无PartC。
  • 阅读任务里增加阅读rpg_core.js

你可能感兴趣的:([Triacontane(トリアコンタン)]ChangeGameOverCondition游戏结束条件变更)