#==============================================================================
# 「乱数固定化」(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