作者:邻家校长
是否在为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