点这里返回总目录
点这里返回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