【RPG Maker】随机数量敌人与多样化敌人组合

作者:邻家校长
是否在为mv中敌群配置太过死板而烦恼?仅两个敌人就会占用敌群3个配置格,那如果有10个,20个敌人数据呢?
欢迎客官往下看,该文章是如何用个位数的敌群配置格完成任意数量的敌人配置,实现敌群配置的多样化的。

第一步:mv中数据库的基础配置

      这里所有怪全使用史莱姆代替【说不定利姆露就藏在里面】,设置好每只怪的位置即可。
220410-1.png
220410-2.png

第二步:mv中地图遇敌配置【不具体到区域配置可跳过】

如没划分区域,则范围皆为整个地图即可。此处为指定区域才能遇到的敌群组合。


220410-3.png

第三步:设置每个地图每个区域能遇到的敌人

这里先添加每个地图在指定区域能遇到的敌人的配置,此处可自制一个网页方便管理数据:


//新增//所有地图=> 区域能遭遇的敌人种类
Game_Map.MAPENEMYLIST = 
    //地图ID: X, 全地图-region0:[敌人id集合], 地图区域-regionx:[敌人id集合]
    [{mapId : 1, region0: [2], region1: [1,3], region2: [5], region3: [3,4]} ,
     {mapId : 2, region0: [2], region1: [1,3], region2: [5], region3: [3,4]}];

再获取当前玩家所在地图位置能遭遇的敌人数据:

//新增//获取当前地图=> 区域能遭遇的敌人种类
Game_Map.prototype.getEnemyList = function(){
    var list = null;
    var regionId = $gamePlayer.regionId();
    var enemyList = [];
    list = Game_Map.MAPENEMYLIST.find(list => {
        return list && list.mapId == this.mapId();
    }, this);

    if(!list){ return []; }

    enemyList = list.region0 || [];
    if(regionId != 0 && list["region" + regionId]){
        enemyList = enemyList.concat(list["region" + regionId]);
    }
    return enemyList;
}

第四步:检查玩家所在区域是否有敌人及能遭遇的人数

mv在代码中进入遭遇战的方法是 object.js=>Game_Player=>makeEncounterTroopId();此处修改为根据队伍人数动态获取能遇到的敌人数量:


//修改//制作遭遇敌群id
Game_Player.prototype.makeEncounterTroopId = function() {
    //获取当前图块敌人种类,没有则不会触发遇敌
    var enemyList = $gameMap.getEnemyList();
    if(enemyList.length <= 0){
        return 0;
    }
    $gameTroop.setEnemyList(enemyList);
    
    var partyLength = $gameParty.size();
    var troopId = [];
    if(partyLength < 2){
        troopId = [1, 2, 3]
    }else if(partyLength < 3){
        troopId = [2, 3, 4]
    }else if(partyLength < 4){
        troopId = [3, 4, 5, 6]
    }
    
    //不具体到区域配置
    //return troopId[Math.randomInt(troopId.length)];

    //第二步跳过则该行后面皆可跳过
    encounterList = $gameMap.encounterList()
        //当前区域敌群组合
        .filter(encounter =>{
            return this.meetsEncounterConditions(encounter)
        }, this)
        //当前队伍人数能遭遇的敌群组合
        .filter(encounter =>{
            return troopId.contains(encounter.troopId);
            //包含能全地图遇到的组合
            //return troopId.contains(encounter.troopId) || encounter.regionSet.length === 0;
        },this);

    if(encounterList.length == 0) return 0
    return encounterList[Math.randomInt(encounterList.length)].troopId;
    
};

第五步:最后再把固定获取敌群第X个位置的敌人id改为动态获取即可:

//修改//加载指定敌群组合的所有敌人
Game_Troop.prototype.setup = function(troopId) {
    var enemyList = this.enemyList();
    
    this.clear();
    this._troopId = troopId;
    this._enemies = [];
    
    this.troop().members.forEach(function(member) {
        //每次获取的敌人id随机从数组中获取
        var enemyId = enemyList[Math.randomInt(enemyList.length)];
        if ($dataEnemies[enemyId]) {
            var x = member.x;
            var y = member.y;
            var enemy = new Game_Enemy(enemyId, x, y);
            if (member.hidden) {
                enemy.hide();
            }
            this._enemies.push(enemy);
        }
    }, this);
    
    this.makeUniqueNames();
};

结束

220410-4.png
220410-5.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容