抜粋個数を可変にするのは少しだけ複雑になります。
コード: 全て選択
class RPG::BaseItem
def initial_state_ids
return @initial_state_ids if @initial_state_ids
if note =~ /^<初期ステート:(\d+(?:\s*\,\s*\d+)*)>/
@initial_state_ids = $1.split(",").map{|s|s.to_i}
end
end
class Game_BattlerBase
def initial_state_ids
feature_objects.collect{|a|a.initial_state_ids}.flatten.uniq.select{|i|i != 0}
end
end
splitというのは文字列を区切り文字で分けた配列にするということです。
なので、"<初期ステート:1,2,3,4,5,6>"から["1","2","3","4","5","6"]が作れます。
mapとは配列を評価した内容で置き換えるということです。
["1","2","3","4","5","6"]から[1,2,3,4,5,6]とするのに必要になります。
また、実際に読み込むときは配列だらけになっているので
(例:<初期ステート:1,2,3,4><初期ステート:3,4,5><初期ステート:8>の3つを持つ装備をしていると
feature_objects.collect{|a|a.initial_state_ids}で取得できるのは [[1,2,3,4],[3,4,5],[8]] となります)
flattenで配列の中の配列を全部平坦化して([[1,2,3,4],[3,4,5],[8]] => [1,2,3,4,3,4,5,8])
uniqで重複を消すと使いやすいと思います([1,2,3,4,3,4,5,8] => [1,2,3,4,5,8])。
メモ欄の読み込みですが、私はどちらかというと以下の方法を使っている場合が多いです。
コード: 全て選択
class RPG::BaseItem
def initial_state_ids
return @initial_state_ids if @initial_state_ids
if note =~ /^<初期ステート:(\d+(?:\s*\,\s*\d+)*)>/
@initial_state_ids = eval("["+$1+"]")
end
end
まぁ無理矢理感が溢れていますが。