# coding: utf-8 #=============================================================================== # ■ [hzm]メモ欄拡張共通部分さん+ for RGSS3 #------------------------------------------------------------------------------- # 2014/09/27 Ru/むっくRu #------------------------------------------------------------------------------- # データベースのメモ欄の情報を読み取るための共通処理. # メモ欄の各行に特定もフレーズがついたものだけを取得します. # # 鳥小屋.txtのメモ欄を使うスクリプト群を使う場合に必須になります. # (※スクリプト名の頭に[hzm]が付いているスクリプト) #------------------------------------------------------------------------------- # 【注意】 # 「[hzm]メモ欄拡張共通部分 for RGSS3」の機能を内包しています. # このスクリプトを導入する場合は, # [hzm]メモ欄拡張共通部分 for RGSS3は導入しないでください. #------------------------------------------------------------------------------- # 【旧バージョン([hzm]メモ欄拡張共通部分 for RGSS3)からの仕様変更点】 # ・メモ欄のヘッダ文字([hzm])の他にも複数指定することを可能に # 指定のメソッドを呼び出すことで, # [hzm]以外のヘッダ文字をつけたものを認識させることを可能に. # (僕が)派生スクリプトを作りやすくするのが目的. # # ・同一項目の複数記述に正式対応 # [hzm]属性耐性:炎,50 # [hzm]属性耐性:水,100 # みたいに同じ項目を複数書いても使えるようになります. # ※注意:別にこのスクリプトに属性耐性の機能があるわけではないです # #------------------------------------------------------------------------------- # 【更新履歴】 # 2014/09/27 キャッシュが存在しない場合に再生成するように変更 # 2012/06/04 バージョンチェック用メソッド名修正 # 2012/06/04 [hzm]メモ欄拡張共通部分 for RGSS3から派生 #------------------------------------------------------------------------------- #=============================================================================== # ↓ 以下、スクリプト部 ↓ #=============================================================================== # 旧スクリプト導入時にエラー処理を行う raise "「[hzm]メモ欄拡張共通部分 for RGSS3」が導入されています.\n「[hzm]メモ欄拡張共通部分 for RGSS3」は既に不要なので,\n削除してください." if defined?(HZM_VXA::Note) module HZM_VXA module Note2 # ● デフォルトのマークフレーズ # (※変更しないでください) DEFAULT_MARK = '[hzm]' # ● 「[hzm]メモ欄拡張共通部分 for RGSS3」との互換性を保持するか? USE_OLD_STYLE = true end end module HZM_VXA module Note2 #--------------------------------------------------------------------------- # ● メモスクリプトのバージョン # .区切りの3つの数字で表現 # 1桁目:メジャーバージョン(仕様変更=互換性破たん時に変更) # 2桁目:マイナーバージョン(機能追加時に変更) # 3桁目:パッチバージョン(不具合修正時に変更) #--------------------------------------------------------------------------- VERSION = '3.0.0' #--------------------------------------------------------------------------- # ● バージョン比較処理 #--------------------------------------------------------------------------- def self.check_version?(version_str) version = version2array(VERSION) req_version = version2array(version_str) # メジャーバージョンが要求と一致するか? return false unless version[0] == req_version[0] # マイナーバージョンが要求より低くないか? return false unless version[1] >= req_version[1] true end #--------------------------------------------------------------------------- # ● バージョン文字列の分解 #--------------------------------------------------------------------------- def self.version2array(version_str) version_str.split('.').map{|n| n.to_i} end #--------------------------------------------------------------------------- # ● ヘッダマーク配列 #--------------------------------------------------------------------------- @header_mark = [] #--------------------------------------------------------------------------- # ● ヘッダマークの取得 #--------------------------------------------------------------------------- def self.header_mark @header_mark end #--------------------------------------------------------------------------- # ● ヘッダマークの追加 #--------------------------------------------------------------------------- def self.add_header_mark(mark_str) @header_mark.push(mark_str) unless @header_mark.include?(mark_str) end #--------------------------------------------------------------------------- # ● メモ欄の内容を解析 #--------------------------------------------------------------------------- def self.setup add_header_mark(DEFAULT_MARK) list = [ $data_actors, $data_classes, $data_skills, $data_items, $data_weapons, $data_armors, $data_enemies, $data_states, $data_tilesets, ] list.each do |data| data.each do |d| d.hzm_vxa_note2_init if d end end end #--------------------------------------------------------------------------- # ■ メモ欄を持つクラスに追加するメソッド類 #--------------------------------------------------------------------------- module Utils #------------------------------------------------------------------------- # ● メモ欄のチェック #------------------------------------------------------------------------- def hzm_vxa_note2_init hzm_vxa_note2_clear self.note.split(/\r?\n/).each do |line| HZM_VXA::Note2.header_mark.each do |mark| next unless line.index(mark) == 0 l = line.sub!(mark, '') if l =~ /^([^\:]+)\:(.+)$/ hzm_vxa_note2_add(mark, $1, $2) else hzm_vxa_note2_add(mark, l, '') end end end end #------------------------------------------------------------------------- # ● メモ欄情報の追加 #------------------------------------------------------------------------- def hzm_vxa_note2_add(mark, key, str) # 文字列として保存 @hzm_vxa_note2_str[mark][key] ||= [] @hzm_vxa_note2_str[mark][key].push(str.to_s) # カンマ区切りのデータとして保存 @hzm_vxa_note2_data[mark][key] ||= [] data = str.split(/\s*\,\s*/).map do |d| if d =~ /^\-?\d+$/ d.to_i elsif d =~ /^\-?\d+\.\d+$/ d.to_f else d.to_s end end @hzm_vxa_note2_data[mark][key].push(data) end #------------------------------------------------------------------------- # ● メモ欄情報の削除 #------------------------------------------------------------------------- def hzm_vxa_note2_clear @hzm_vxa_note2_str = {} @hzm_vxa_note2_data = {} HZM_VXA::Note2.header_mark.each do |mark| @hzm_vxa_note2_str[mark] = {} @hzm_vxa_note2_data[mark] = {} end end #------------------------------------------------------------------------- # ● メモ内容取得 #------------------------------------------------------------------------- def hzm_vxa_note2_match(mark, keys) hzm_vxa_note2_matches(mark, keys).last end def hzm_vxa_note2_match_str(mark, keys) hzm_vxa_note2_matches_str(mark, keys).last end def hzm_vxa_note2_matches(mark, keys) mark ||= HZM_VXA::Note2::DEFAULT_MARK ret = [] keys.each do |key| ret += self.hzm_vxa_note2_data[mark][key] if self.hzm_vxa_note2_data[mark].include?(key) end ret rescue => e puts "#{$!} - #{$@}" end def hzm_vxa_note2_matches_str(mark, keys) mark ||= HZM_VXA::Note2::DEFAULT_MARK ret = [] keys.each do |key| ret += self.hzm_vxa_note2_str[mark][key] if self.hzm_vxa_note2_str[mark].include?(key) end ret end def hzm_vxa_note2_data hzm_vxa_note2_init unless @hzm_vxa_note2_data @hzm_vxa_note2_data end def hzm_vxa_note2_str hzm_vxa_note2_init unless @hzm_vxa_note2_str @hzm_vxa_note2_str end end end end # メモ欄を持つクラスに機能追加 class RPG::BaseItem include HZM_VXA::Note2::Utils end class RPG::Tileset include HZM_VXA::Note2::Utils end # メモ解析 if true class << DataManager alias hzm_vxa_note2_init init def init hzm_vxa_note2_init HZM_VXA::Note2.setup end end end # 旧スクリプトとの互換性保持 if HZM_VXA::Note2::USE_OLD_STYLE module HZM_VXA module Note #------------------------------------------------------------------------- # ● メモスクリプトのバージョン #------------------------------------------------------------------------- VERSION = 2.20 #------------------------------------------------------------------------- # ● バージョンチェック機構 #------------------------------------------------------------------------- def self.check_version(n) (n >= 2 and n < 3) end end end module HZM_VXA module Note2 module Utils #----------------------------------------------------------------------- # ● メモ内容取得 #----------------------------------------------------------------------- def hzm_vxa_note_match(keys) hzm_vxa_note2_match(HZM_VXA::Note2::DEFAULT_MARK, keys) end def hzm_vxa_note(key) hzm_vxa_note2_match(HZM_VXA::Note2::DEFAULT_MARK, [key]) end #----------------------------------------------------------------------- # ● メモ内容(単一文字列)取得 #----------------------------------------------------------------------- def hzm_vxa_note_str_match(keys) hzm_vxa_note2_match_str(HZM_VXA::Note2::DEFAULT_MARK, keys) end def hzm_vxa_note_str(key) hzm_vxa_note2_match_str(HZM_VXA::Note2::DEFAULT_MARK, [key]) end end end end end