ef指定初始id_RPG maker教程2:常用脚本1 index与id

本文是一篇RPG Maker教程,介绍了在不同版本中如何使用index和id来操作玩家队伍和敌物队伍。重点讲解了index序号和id标号在脚本中的应用,包括修改队伍成员状态、召唤敌人、增减队员和改变战斗图等场景,并提供了不同版本的脚本示例。
摘要由CSDN通过智能技术生成

前言:原创教程,未经本人同意请勿转载。

网络上实际上可以随手搜到各种rm常用脚本,本教程只介绍那些真正实用的,以及一些没被人提起过的,不说废话,上正文:

==========================

开关和变量操作的脚本我就不介绍了,能用rm事件系统搞定(而且基本上也只有在事件系统里才会用到这两种操作,你要在脚本里用到开关和变量操作,那怕是你喝多了,因为脚本里随手就能定义本地变量)。

先介绍最重要的四个概念:

【1---玩家队伍位置序号index】

在rm四个版本(rmXP、rmVX、rmVXAce、rmMV)中,玩家可以控制一个小队,在游戏里冒险,这个小队就被称为玩家队伍。玩家队伍里只有四个位置,也就是说同时组队外出冒险的人物最多是四个。而这四个位置(名额)是有序号的,序号分别是【第一顺位序号0】【第二顺位序号1】【第三顺位序号2】【第四顺位序号3】。

在脚本里,玩家队伍序号常用的变量名是index。例如在rmXP中:

【$game_party.actors[0].index == 0】成立,即玩家队伍(game_party)序号为0(第一顺位)的人物(actors[0])的位置序号index是0。

在其它版本中这个表达式的写法不同,我们后面会分别介绍。

【2---角色列表标号id】

在rm四个版本中,游戏数据库中都会有一个角色列表,列表里是游戏中可以加入玩家队伍的所有角色,每个角色在列表里有一个标号,简称【id】,列表里第一个角色的id号就是1,第二个角色的id号就是2,以此类推。

在脚本里,角色列表标号常用的变量名是id。例如在rmXP中:

【$game_actors[1].id == 1】成立,即角色列表中1号角色的id号是1。

这两个概念如此重要:

比如你想修改队伍里第一个人物的血量,如果你不知道如何使用index序号指定这个人物,你就无法让程序找到修改血量的目标。

比如你想修改某一个当前不在队伍里的人物的血量,如果你不知道如何使用id序号制定这个人物,你也无法让程序找到修改血量的目标。【另注:网上给出的常用脚本,大多是$game_actors[id]这种的,也就是说,这类脚本只能去角色列表里查找人物,这和软件里自带的事件功能中在角色列表里选人是类似的。但实际应用中我们更多要用的是index方法指定队伍里第几号队员,而网上那些常用脚本里是不介绍index方法的。我这里这么说,大家可能没有体会,后面会有实际案例说明问题,你们现在只需要记住index方法更有用,而网上的那些参考资料反而没有介绍它】

【3---敌物队伍位置序号index】

在rm四个版本(rmXP、rmVX、rmVXAce、rmMV)中,玩家每次遭遇敌物时,敌物每次都是以一个小队的形式出场的,这个小队就被称为敌物队伍。虽然敌物队伍可以有很多支,但因为一次战斗中只会有一支出现,所以游戏中战斗场景下,敌物队伍使用的成员位置编号是固定的。敌物队伍里只有八个位置,也就是说同时与玩家队伍作战的敌物最多是八个。而这八个位置(名额)是有序号的,序号分别是【第一顺位序号0】【第二顺位序号1】【第三顺位序号2】【第四顺位序号3】【第五顺位序号4】【第六顺位序号5】【第七顺位序号6】【第八顺位序号7】。

在脚本里,敌物队伍序号常用的变量名也是index。例如在rmXP中:

【$game_troop.enemies[0].index == 0】成立,即敌物队伍($game_troop)序号为0(第一顺位)的敌物(enemies[0])的位置序号index是0。

【4---敌物类别列表标号id】在rm四个版本中,游戏数据库中都会有一个敌物类别列表,列表里是游戏中可以出战的所有敌物(的标本),每个敌物在该列表里有一个标号,简称【id】,列表里第一个敌物的id号就是1,第二个敌物的id号就是2,以此类推。

在脚本里,敌物类别列表标号常用的变量名是id。例如在rmXP中:

【$data_enemies[1].id == 1】成立,即敌物类别列表中1号敌物的id号是1。

这两个有关敌物的概念与玩家人物的两个概念是成对匹配的,但还有细微差别,我们用下面具体案例来解释:

【案例一】

我想写一个脚本,让怪物技能强制令玩家队伍里第一位人物减少血量,不管那个人物具体是谁,只要在队伍首位就行。

如果想用事件系统指定玩家队伍首位人物,我们发现是不可能办到的:

b1253e64b0c27f0d15e0b4ce558b6df4.png

在给人物更改状态的功能模块里,只能选择全体同伴或者从数据库人物列表指定具体某个人物,我们还需要另外的办法去获知哪一个人物现在正处在队伍首位才行,所以这个方法行不通。

那么,用脚本如何实现呢?以rmXP为例:

【$game_party.actors[0]】表示队伍(game_party)中顺位为1(即index号为0)的那个人物(actors[0]),这就是首位人物。

所以要减少它的血量,脚本就是:

【$game_party.actors[0].hp -= 指定值】注意等号前有个【-】号,表示减少。

那么如果我现在想要怪物技能对第n位置的人物被减少血量(.hp属性),我想用变量来指定这个位置n,那就可以把上面脚本里的0替换为index,也就是:

【$game_party.actors[index].hp -= 指定值】

然后另外写程序指定【index = n】即可(这里n取0到3),比如说7号怪物专门仇恨2号玩家队员,它的技能就可以指定【index = 1】(即2号玩家队员),而16号怪物专门仇恨4号玩家队员,它的技能就可以指定【index = 3】(即4号玩家队员)。

【案例二】

在rm系列软件里,可以制作召唤技能,让敌物Boss召唤出小弟来参战,具体做法就是在开战时先把小弟敌物设置为【初始隐藏(半路出现)】,然后在战斗中,Boss敌物使用技能指定敌物队伍里那个隐藏的小弟出现,比如说小弟在敌物队伍里的位置序号index是1(2号敌物是这个隐藏的小弟),那么让它出现参加战斗的脚本就是:

【$game_troop.enemies[1].hidden = false】表示敌物队伍(game_troop)中顺位为2(即index号为1)的敌物(enemies[1])的隐藏属性(.hidden)为假(false),即为不再隐藏。

同样,如果不同的敌物队伍里隐藏的小弟的位置(index)不同,那么可以用另外的程序按队伍号码来指定不同队伍里解除隐藏的小弟的位置:

【$game_troop.enemies[index].hidden = false】外加另写程序指定【index = n】即可。

【案例三】

玩家队伍增减队员:我想让玩家队伍里的首位队员离队,要怎么用脚本实现?

rmXP中默认只有【$game_party.remove_actor(id)】这种方法,它的含义是从玩家队伍(game_party)中去掉指定id号的人物(actor(id)),而不是移除队伍里第几个位置(index号)的人物。也就是说,你要想让某个人在这个脚本语句指挥下离队,除非你知道这个人物在玩家角色列表里的id号才行。

前面我们说过,玩家队伍首位队员的脚本是【$game_party.actors[0]】,它的id号自然就是【$game_party.actors[0].id】,所以我们可以这样写语句:

【id = $game_party.actors[0].id;】【$game_party.remove_actor(id);】

或者合起来写作:

【$game_party.remove_actor($game_party.actors[0].id);】,注意这里是把【$game_party.remove_actor(id);】中的括号里的id直接替换成了【$game_party.actors[0].id】

【案例四】

我想在战斗中修改队伍中首位(index号为0)敌物的战斗图(也就是这个敌物在战斗中的形象),那就只能直接修改数据库中这个敌物的原始样本(假定我们已知样本在数据库的敌物样本列表中的id号)的战斗图(battler_name)设置:

【$data_enemies[id].battler_name = "图形文件名";】意思就是数据库敌物样本列表(data_enemies)中对应id号的那个样本的战斗图属性(.battler_name)被修改为"图形文件名"。

可是每次战斗时,处于首位的敌物类型是随机的,我们没法在战斗发生前确定该敌物的样本id号是什么,那要怎么办呢?可以用如下语句:

【id = $game_troop.enemies[index].id;】即指定id号为敌物队伍(game_troop)中序号为index的敌物(enemies[index])的id号(.id属性)。

加上前面那条【$data_enemies[id].battler_name = "图形文件名";】语句就可以了。或者合写为:

【$data_enemies[$game_troop.enemies[3].id].battler_name = "图形文件名";】即把【$data_enemies[id].battler_name = "图形文件名";】中的方括号里的id替换为【$game_troop.enemies[index].id】。

上面两个例子中我们看到,rm软件中大部分的功能都是直接面向【id号】的,而不是直接面向队伍【序号index】的,所以网络上大部分帖子里给出的常用脚本都只含有面向【id号】的语句,而实际应用中我们更多是需要对【玩家队伍】或者【敌物队伍】的【成员】进行操作,所以我们需要通过上面两个例子中使用【index序号】指定目标然后取得目标的【id号】的方式,来间接地使用那些直接面对【id号】的功能脚本。这就是我前面说的index比id更为实用,因为大部分情况下我们都需要借助这种间接手段使用rm软件提供的内置脚本。

在rm中,用index指定队伍队员然后提取队员id号执行特定指令,是4个不同版本的rm通用的套路,唯一的差异是不同版本下的语句形式略有区别,我们总结如下:

【rmXP】:

id = $game_party.actors[index].id; (用玩家人物队伍位置index号调取其id号)

id = $game_troop.enemies[index].id; (用敌物人物队伍位置index号调取其id号)

【rmVX】或【rmVXAce】:

id = $game_party.members[index].id; (用玩家人物队伍位置index号调取其id号)

id = $game_troop.members[index].id; (用敌物人物队伍位置index号调取其id号)

注意这里把rmXP中game_party后的actors和game_troop后的enemies全都替换成了members。

【rmMV】:

id = $gameParty.members()[index].actorId(); (用玩家人物队伍位置index号调取其id号)

id = $gameTroop.members()[index].enemyId(); (用敌物人物队伍位置index号调取其id号)

注意这里把上面下划线【 _ 】都取消了,并且在members后面加了一个括号【 () 】,而且id属性分别改成了【.actorId()】属性和【.enemyId()】属性,注意后面都带括号()。

待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值