快捷导航
查看: 264|回复: 3

[脚本] 使敌群中的敌人变为随机敌人

[复制链接]
会员等级

积分信息
金币:725
元宝:20
活跃:187
发电:0

荣誉勋章
热心会员优秀版主首批会员最佳新人

TA的形象
UID: 6 发表于 2023-2-18 09:24:48 | 显示全部楼层 |阅读模式
这一部分的代码修改涉及到了很多知识点。

以RMMZ为例,首先找到关于敌群的代码:
[JavaScript] 纯文本查看 复制代码
/** 设置* @param {number} troopId 敌群id* @description 清除内容,设置敌群id,然后根据敌群数据设置每一个敌人,然后制作/设置唯一名称*/
Game_Troop.prototype.setup = function(troopId) {
    this.clear(); //清空以前的
    this._troopId = troopId;//暂存/转存 为局部变量
    this._enemies = []; //定义类变量数组#是否可以省略前缀this.??
    for (const member of this.troop().members) {
		//循环 (常量 临时变量?? of xxxb被迭代的数组??  ) {  执行的代码 }
        if ($dataEnemies[member.enemyId]) { //如果敌人-id不为空
            const enemyId = member.enemyId; //获取id和坐标
            const x = member.x;
            const y = member.y;
            const enemy = new Game_Enemy(enemyId, x, y); //新键敌人并暂存(通过id和坐标获取本体),这一行是本贴的重点!!
            if (member.hidden) { //如果为隐藏
                enemy.hide(); //隐藏的方法(开启隐藏开关)
            }
            this._enemies.push(enemy); //堆栈进 (类变量)_敌群数组里
        }
    }
    this.makeUniqueNames();  //制作/设置唯一名称*/
};

可以看到const enemy = new Game_Enemy(enemyId, x, y);就是读取数据库中的敌人ID并且放在对应的X、Y坐标上。那如果做到敌人随机,只需要做到ID随机就可以了。
但如果只是简单的将enemyId替换成random()函数,就会导致整个游戏的敌群、敌人都随机,这并不是我们想要的结果,因为不可控,而且无法指定敌人。
我们可以从数组方面入手,将需要进行随机抽取的敌人ID放入数组中,然后把enemyId改成从数组中抽取就可以了。

我们可以先定义一个函数:
[C++] 纯文本查看 复制代码
function selectEnemyId(enemyArray) {
        if (!enemyArray.meta.RandomEnemy) {
            return null;
        };
//定义函数名selectEnemyId,如果数据库中敌人的备注栏没有指定的RandomEnemy字符串,则返回null
        const pool = enemyArray.meta.RandomEnemy.split(',').map(Number);
//将数据库中敌人的备注栏RandomEnemy中出现的数字使用map函数变为数组,数组名为pool
        return Number(pool[Math.randomInt(pool.length)]);
//length函数得到这个数组的长度,Math.randomInt来根据长度随机选取数组的一个元素序号,pool[序号]即为选中的敌人ID
//最后使用Number来强制转换成数字格式
    };

看懂了这个函数之后,我们再来修改之前的new Game_Enemy部分,改成这样:
[JavaScript] 纯文本查看 复制代码
const randomEnemyId = selectEnemyId($dataEnemies[member.enemyId]);
                const enemy = new Game_Enemy(randomEnemyId || member.enemyId, member.x, member.y);

实例如图,在图片1中,ID为14的敌人,备注栏中写入了1,6,7,8,9,10,11,12这几个数字。图2中,将ID为14的敌人放入敌群,战斗测试,可以看到图3图4的敌人是不同的。
如果各位还是不会修改,可以直接下载已经修改好的js文件,放入插件文件夹中启用即可。MZ和MV是同样适用的。
1.JPG
2.JPG
3.JPG 4.JPG

randomEnemy.js

1.15 KB, 下载次数: 3

售价: 2 金币  [记录]

帖子的最近访客

回复 论坛版权

使用道具 举报

经验  4%

会员等级

积分信息
金币:88
元宝:0
活跃:308
发电:0

荣誉勋章

TA的形象

Rank: 2Rank: 2

迷你金币狮

UID: 45 发表于 2023-2-20 08:54:26 | 显示全部楼层
看起来不错的样子
回复

使用道具 举报

会员等级

积分信息
金币:1237
元宝:0
活跃:173
发电:3

荣誉勋章
活跃会员优秀版主首批会员最佳新人

TA的形象
UID: 2 发表于 2023-2-20 11:17:11 | 显示全部楼层
这个得配合敌人等级会更好吧~
回复

使用道具 举报

ahome_bigavatar:guest
ahome_bigavatar:welcomelogin
您需要登录后才可以回帖 登录 | 加入民族

本版积分规则

论坛用工具

蓝凑云 hello图床 聚合图床 TinyPNG remove 代码测试 颜色代码 颜色代码2

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

实用工具

AI人工智能图片放大 图片无损放大 Deepl翻译器 百宝箱 孟坤工具箱 在线压缩图片 图片切圆角

您一共访问了本站 加载中...

Archiver|小黑屋|RPG民族

GMT+8, 2024-10-23 07:15 , Processed in 0.829589 second(s), 77 queries .

快速回复 返回顶部 返回列表