赞 | 4 |
VIP | 0 |
好人卡 | 0 |
积分 | 23 |
经验 | 2892 |
最后登录 | 2024-7-10 |
在线时间 | 275 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 2333
- 在线时间
- 275 小时
- 注册时间
- 2017-7-25
- 帖子
- 163
|
- # 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
复制代码
两个分开的脚本,前一个是后一个的前置,有一个小毛病是有时候会导致这个技能一回合可以用无数次(脚本本身那个限制次数功能无效),不知道是不是跟我其他脚本有冲突 |
|