[解決]RGSS3:○体ランダムで対象を重複させない
[解決]RGSS3:○体ランダムで対象を重複させない
対象が敵○体ランダムの時に、出来るだけ同じ相手にかぶらないようにしたいです。
最後に編集したユーザー いおん [ 2024年3月28日(木) 21:54 ], 累計 1 回
Re: RGSS3:○体ランダムで対象を重複させない
いくつかパターンを作成してみました。
攻撃対象は Game_Action#targets_for_opponents で決定されています。の Array~ の行を次のいずれかに変更してください。
1.ランダム n 体
純粋に n 体に攻撃するように変更します。
例えば「敵2体」「敵4体ランダム」の場合は、それぞれ1回ずつの合計2回攻撃し残りの2回は攻撃しません。
2.ランダム n 回
敵より回数が多い場合は、敵を一巡毎に選択するように変更します。
例えば「敵2体」「敵3体ランダム」の場合の場合は、それぞれ1回ずつの対象に選んでから残りの1回をどちらにするか決めます。
3.完全ランダム n 回
(2)の方法で狙われ率を無視して対象を決めます。
おそらく(2)の処理が希望に近いのではないでしょうか?
攻撃対象は Game_Action#targets_for_opponents で決定されています。
コード: 全て選択
if item.for_random?
Array.new(item.number_of_targets) { opponents_unit.random_target }
1.ランダム n 体
純粋に n 体に攻撃するように変更します。
例えば「敵2体」「敵4体ランダム」の場合は、それぞれ1回ずつの合計2回攻撃し残りの2回は攻撃しません。
コード: 全て選択
opponents_unit.alive_members
.sort_by {|member| rand * member.tgr }
.reverse[0, item.number_of_targets]
敵より回数が多い場合は、敵を一巡毎に選択するように変更します。
例えば「敵2体」「敵3体ランダム」の場合の場合は、それぞれ1回ずつの対象に選んでから残りの1回をどちらにするか決めます。
コード: 全て選択
alive_members = opponents_unit.alive_members
round_count = (item.number_of_targets - 1) / alive_members.size + 1
round_count.times
.inject([]) {|r| r.concat(alive_members.sort_by {|m| rand * m.tgr }) }
.reverse[0, item.number_of_targets]
(2)の方法で狙われ率を無視して対象を決めます。
コード: 全て選択
alive_members = opponents_unit.alive_members
result = alive_members.shuffle
while result.size < item.number_of_targets
result.concat(alive_members.shuffle!)
end
result[0, item.number_of_targets]
Re: RGSS3:[解決]○体ランダムで対象を重複させない
CACAO様、どうもありがとうございます!
おかげさまで希望した通りに出来ました!!
おかげさまで希望した通りに出来ました!!