#============================================================================== # 「乱数固定化」(ACE) Ver.2.0 # 製作者:奈々(なな) # へぷたなすくろーる http://heptanas.mamagoto.com/ # # ◇使用規約 # 使用される場合はスクリプト作成者として「奈々」を明記して下さい。 # このスクリプトを改変したり、改変したものを配布するなどは自由ですが # その場合も元のスクリプトの作成者として名前は載せて下さい。 # その他、詳しい利用規約はブログを参照して下さい。 # #------------------------------------------------------------------------------ # # セーブ&ロードによってランダム結果のやり直しが出来ることを防ぎます。 # 新たに追加される固定化乱数は、予め100回分の乱数結果が入っており # この乱数テーブルから取り出して使うため、ロードしても同じ結果が出ます。 # また、乱数テーブルは好きな数だけ用意できるため # 「乱数を使う別の行動をして結果を変える」というズルも防げます。 # # 通常のrand(n)と同じようにnana_rand(n, テーブルID)が使えます。 # ※但し実数を返すrandやrand(0)は代用できません。範囲指定はOKです。 # テーブルIDは0番からで、省略した場合は0番選択になります。 # # また初心者にも分かりやすい使い方として # イベントコマンドのスクリプトで # fixed_random(変数ID, m, n, テーブルID)が使えます。 # 例えばfixed_random(1, 2, 3, 4)と入力すると # 1番の変数に、4番の乱数テーブルを使い、2〜3の乱数を代入するとなります。 # #============================================================================== #------------------------------------------------------------------------------ # ◇初期設定 #------------------------------------------------------------------------------ # 使用する乱数テーブルの数を設定します。 # プレイヤーが任意の順番で起こせるイベントがある場合 # それらが乱数テーブルを共用してしまうと意味がないので # 1つのランダム要素に1つのテーブルを割り振って下さい。 module Nana_rand KAZU = 1 end #============================================================================== #============================================================================== # ■ Game_System #------------------------------------------------------------------------------ # システム周りのデータを扱うクラスです。セーブやメニューの禁止状態などを保存 # します。このクラスのインスタンスは $game_system で参照されます。 #============================================================================== #*セーブロードの処理を改変するのを避けるために #$game_systemにぶら下げる形で製作 class Game_System #-------------------------------------------------------------------------- # ● 公開インスタンス変数(追加) #-------------------------------------------------------------------------- attr_accessor :nana_rand # 固定化乱数の親 #-------------------------------------------------------------------------- # ● オブジェクト初期化(alias再定義) #-------------------------------------------------------------------------- alias nana_rand_initialize initialize def initialize nana_rand_initialize @nana_rand = Array.new(Nana_rand::KAZU) @nana_rand.each_index {|i| @nana_rand[i] = Array.new(100) #*eachの使い方で二度手間になっている可能性あり @nana_rand[i].each_index{|i2| @nana_rand[i][i2] = rand(10000) } } end end module Kernel #*関数として呼び出せるようにGame_InterpreterではなくKernelに追加 #但しテーブルは$game_system.nana_randに入っているので注意 #-------------------------------------------------------------------------- # ● 固定化乱数の呼び出し #-------------------------------------------------------------------------- def nana_rand(x, id = 0) if x.is_a?(Range) return nana_rand_range(x.begin, x.last, id, x.exclude_end?) else return nana_rand_max(x, id) end end #-------------------------------------------------------------------------- # ● 固定化乱数の呼び出し(最大値指定) #-------------------------------------------------------------------------- def nana_rand_max(n, id = 0) n = n== 0 ? 1 : n.abs temp = $game_system.nana_rand[id][0] temp %= n $game_system.nana_rand[id].delete_at(0) $game_system.nana_rand[id].push(rand(10000)) return temp end #-------------------------------------------------------------------------- # ● 固定化乱数の呼び出し(範囲指定) #-------------------------------------------------------------------------- def nana_rand_range(m, n, id = 0, ee = false) if m > n t = m m = n n = t end n -= m n += 1 unless ee temp = $game_system.nana_rand[id][0] temp %= n temp += m $game_system.nana_rand[id].delete_at(0) $game_system.nana_rand[id].push(rand(10000)) return temp end end #============================================================================== # ■ Game_Interpreter #------------------------------------------------------------------------------ # イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、 # Game_Troop クラス、Game_Event クラスの内部で使用されます。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● 固定化乱数の呼び出し(イベント用に使いやすく) #-------------------------------------------------------------------------- def fixed_random(v_id, m, n, id = 0) $game_variables[v_id] = nana_rand_range(m, n, id) end end