ページ 11

【解決済】とあるロジックの回復魔法を作りたいが、実装出来ないで困っています

Posted: 2024年7月11日(木) 22:05
by まさゆ
ダメ元で相談があります。

データーベースのスキルからHPを回復する魔法の設定が出来ますが、HP回復を既存の仕組みを利用せずに、
自分で作ったコモンイベントに飛ばして独自のHP回復魔法を作りたいと思っています。

どんなことをしたいかと言うと、
その回復魔法を使うアクターのHPが、
・50以上の場合、回復魔法を使うと200回復するが、
・50未満の場合、回復魔法を使っても100しか回復出来ない
みたいな感じです。

上記のロジックをコモンイベントで組むのは容易なのですが、
唯一出来ないで困っているのが、「どのアクターのHPを回復するか」が取れないことです。
(ゲーム中に回復魔法を使う際、メニュー>スキル>魔法と行って、どのアクターに対して使うか選択しますが、
この選択したアクターがどのアクターなのかコモンイベントの中で判別する術がないことに困っています)

恐らく判別する術はないだろうなと思っているのですが、
もし何かしらアドバイス等ありましたらよろしくお願い致します。

Re: とあるロジックの回復魔法を作りたいが、実装出来ないで困っています

Posted: 2024年7月11日(木) 22:53
by まさゆ
すいません、自己レスです。

適当にググって、スクリプトリファレンスのようなpdfを見付けたので、それっぽく書いてみて(下記)試したら、なんかやりたいことが実装出来ました。。

◆変数の操作:#0001 選択されたアクターのアクターIDを入れる変数 = $gameParty.targetActor().actorId();

ただ、私があまりスクリプトを得意としておらず、本当にこれでよいのか分かりかねております。
(プレイでうまく行っているのでこれでよいのだと思うのですが・・)
もし有識者の方いましたら教えてください。

#特に回答なければ数日後にクローズします。

Re: とあるロジックの回復魔法を作りたいが、実装出来ないで困っています

Posted: 2024年7月11日(木) 23:38
by まさゆ
別の問題が出てきました。。。

魔法の使用でコモンイベントに飛ばすと、ウィンドウが閉じちゃうんですね。
(通常はHP回復してもウィンドウは閉じない)

viewtopic.php?t=10938
viewtopic.php?t=1203

ここら辺の板を見たんですが、ちょっとよく分かりませんでした。。(ただ、プラグインはそもそもMV用ですし、「アイテム画面の1番最初に戻されてしまいます。」とのコメントから私がやりたいことは叶わなそう・・)

通常のHP回復のようにウィンドウを閉じない方法をご存知の方いましたら教えてください。

よろしくお願い致します。

Re: とあるロジックの回復魔法を作りたいが、実装出来ないで困っています

Posted: 2024年7月12日(金) 03:00
by Plasma Dark
使用者のHPを条件に回復量を決めたいだけであれば、単に三項演算子とかで計算式を組み立ててあげれば解決しないでしょうか。

コード: 全て選択

a.hp < 50 ? 100 : 200

Re: とあるロジックの回復魔法を作りたいが、実装出来ないで困っています

Posted: 2024年7月12日(金) 08:29
by まさゆ
Plasma Dark様、いつもありがとうございます。
なんといただいたコードを計算式にいれたら実現しました。
三項演算子・・、知識がないのですが、こういうことが出来るんだと知りました。

ただ、実は、先に上げたのは簡易的に例を書いたもので、具体的に私が実装したいものは下記のコモンイベントになります。
下記のことを、計算式の欄一行に収めて書くことは可能でしょうか?
お手数お掛けします。

ーーー
◆変数の操作:#0001 アクター1のHPの% = $gameActors.actor(1).hp / $gameActors.actor(1).param(0) * 100;
◆変数の操作:#0002 選択したアクターのアクターIDを入れる変数 = $gameParty.targetActor().actorId();
◆条件分岐:アクター1のHPの% ≤ 25
◆HPの増減:{選択したアクターのアクターIDを入れる変数}, + 100
◆ラベルジャンプ:SKIP

:分岐終了
◆条件分岐:アクター1のHPの% ≤ 50
◆HPの増減:{選択したアクターのアクターIDを入れる変数}, + 200
◆ラベルジャンプ:SKIP

:分岐終了
◆条件分岐:アクター1のHPの% ≤ 75
◆HPの増減:{選択したアクターのアクターIDを入れる変数}, + 300
◆ラベルジャンプ:SKIP

:分岐終了
◆条件分岐:アクター1のHPの% ≤ 100
◆HPの増減:{選択したアクターのアクターIDを入れる変数}, + 400

:分岐終了
◆ラベル:SKIP

Re: とあるロジックの回復魔法を作りたいが、実装出来ないで困っています

Posted: 2024年7月12日(金) 09:58
by Plasma Dark
求めている仕様を計算式に落とし込むためには、場合分けして言語化しましょう。

処理を見る限りだとアクターIDが回復量に(ほんの少しだけ)関わりそうですが、本当にその仕様で合っていますか?
アクター1とはスキルの使用者のことでしょうか。

回復量を表す法則を誤解なく伝えられるような言葉にできれば、それはもう計算式ができたのと同じなので、そこから頑張ってみてください。

例えば、こんな感じです。
スキル使用者のHPが75%より大きい場合、400
スキル使用者のHPが50%より大きく75%以下の場合、300
スキル使用者のHPが25%より大きく50%以下の場合、200
スキル使用者のHPが0%より大きく25%以下の場合、100
(スキル使用者のHPが0の場合は流石に考慮しなくて良いはず)
こう書くと、いかにも法則性がありそうです。
スキル使用者のHP割合(%)は、 a.hpRate() * 100 で算出することができます。
25%刻みで変動し、その割合を25で割って小数点を切り上げた値に比例する回復量なので、まずはそれを求めましょう。

コード: 全て選択

Math.ceil((a.hpRate() * 100)/25)
Math.ceil 関数は、与えられた数値以上の最小の整数を返します。つまり、小数点以下を切り上げます。
https://developer.mozilla.org/ja/docs/W ... /Math/ceil

この計算式によって得られる結果は、
スキル使用者のHPが75%より大きい場合、4
スキル使用者のHPが50%より大きく75%以下の場合、3
スキル使用者のHPが25%より大きく50%以下の場合、2
スキル使用者のHPが0%より大きく25%以下の場合、1
となります。
ここまで来たらもう簡単。100をかければ、先程言語化した法則の数値になりますよね。

Re: とあるロジックの回復魔法を作りたいが、実装出来ないで困っています

Posted: 2024年7月12日(金) 14:48
by まさゆ
Plasma Dark様、ご丁寧にありがとうございます。

ネットで入れ子の書き方とかみて、最適化された書き方じゃないかもしれませんが、下記のように書いたら実装できました。(25で割ってた部分は、ひょっとしたら後から25%ずつ刻みじゃなくするかもしれないので、数字をそのまま記載した)

(a.hpRate() * 100) >= 75 ? 400 : (a.hpRate() * 100) >= 50 ? 300 : (a.hpRate() * 100) >= 25 ? 200 : 100

恐らくながら大丈夫そうなんでクローズしますが、なんか変とか指摘ありましたらツッコミください。。