sacred-ritual-academy/Scripts/_hzm_for_RGSS3.rb
2025-03-18 19:45:34 -05:00

270 lines
11 KiB
Ruby
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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