伤害地板与元素护甲

所以,我想在我的世界地图中制作一个毒害区域和一个熔岩区域,但希望玩家在穿戴提供火元素抗性和毒属性伤害抗性的特定护甲时,受到的地面伤害会降低。我该怎么做呢?我使用的是 RPG Maker MV。任何帮助都将不胜感激。谢谢。

你或许可以借此做点什么。

在基础功能中,你只能设置伤害数值和颜色。但如果你使用“疯狂模式”(lunatic mode)——也就是现在的孩子们管这些功能叫的东西——你应该可以编写自定义公式,从而根据角色的元素抗性来计算伤害。

感谢帮助。我还有个问题:如何让毒沼地块在角色走动时随机对队伍成员施加中毒效果?我希望角色有15%的概率获得中毒状态(除非他们穿着能免疫中毒效果的护甲)。

你可以将其设置为事件。如果你想要更稳定的方案,可以使用将事件分配给区域 ID 的插件。

区域 ID,或地形 ID,甚至瓦片 ID(但那个稍微难查一些。)
基础地面伤害公式就是每步固定造成 10 点伤害。我一直觉得这不太实用。你可以在角色或装备特性列表中设置地面伤害率作为特殊参数。但如果你的角色血量高达数千,仅仅为了每步节省个位数伤害而更换一件装备,感觉并不值得。
当然,你可以在 rpg_objects.js(MV 版)或 rmmc_objects.js(MZ 版)核心脚本中直接修改。

从那里,你还可以添加条件,根据地形标签区分瓦片(或者区域 ID,或瓦片 ID,方法有很多)。因此,熔岩和毒沼可以基于瓦片 ID 或装备的护甲 ID 造成不同的伤害。我粗略测试过这个,只要确保你正确标记了所有地面瓦片就行。:man_facepalming:

图片

Game_Actor.prototype.basicFloorDamage = function() {
	let damage = 10;
	const terrainTag = $gameMap.terrainTag($gamePlayer.x, $gamePlayer.y);
	const FireResistArmorIds = [24, 25, 26];
	const PoisonResistArmorIds = [12, 13];

	if (terrainTag === 2) {//熔岩
		const hasFireBoots = this.armors().some(item => item && FireResistArmorIds.includes(item.id));
		damage = hasFireBoots ? 25 : 50;
		//console.log("熔岩伤害")
	} else if (terrainTag === 3) {//毒沼
		const hasPoisonBoots = this.armors().some(item => item && PoisonResistArmorIds.includes(item.id));
		damage = hasPoisonBoots ? 0 : 15;
		//console.log("毒沼伤害")
	}

	return damage;
};

还有另一个函数负责执行地面伤害。因此,若要添加施加中毒状态的概率,你可以再添加一个条件判断语句,例如:

if (terrainTag === 3 && Math.random() < 0.15) {
    this.addState(4);
};
2 个赞