ダメージフロアとエレメンタルアーマー

つまり、ワールドマップに毒エリアと溶岩エリアを作りたいのですが、火属性や毒タイプのダメージに耐性のある特定の防具を着ている場合は、床からのダメージを軽減したいと考えています。その方法をご教示ください。RPG Maker MVを使用しています。ご助力いただけますと幸いです。よろしくお願いいたします。

これで何かができるかもしれません。

基本機能ではダメージ量と色を設定するだけですが、「ルナティックモード」など、最近の若者たちが呼んでいるような機能を使えば、キャラクターの属性耐性を考慮したカスタム数式を実行できるはずです。

おかげさまで助かりました。もう一つ質問があります。毒沼のタイルをキャラクターが歩いたときに、ランダムで毒状態にするにはどうすればよいでしょうか? armorで毒無効を持っている場合を除き、15%の確率で毒状態になるようにしたいです。

イベントとして設定することもできます。より堅牢な方法をお望みなら、イベントをリージョンIDに割り当てるプラグインがあります。

地域ID、または地形ID、あるいはタイルID(ただし、これは少し検索が難しいですが)。
基本的な床ダメージの計算式は、単に毎ステップ10のダメージというフラットな値です。私はいつもそれが非現実的だと思っていました。キャラクターや装備の特性リストで、床ダメージ率を特別なパラメータとして設定できます。しかし、キャラクターのHPが数千単位で存在する場合、毎ステップ数桁のダメージを節約するために装備を一つ変更するのは、あまり価値があるようには感じません。
もちろん、rpg_objects.js(MV)またはrmmc_objects.js(MZ)のコアスクリプトで変更することもできます。

そこから、地形タグによってタイルを区別する条件を追加することも可能です(地域IDやタイル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