| 赞 | 168 |
| VIP | |
| 好人卡 | |
| 积分 | 229 |
| 经验 | |
| 最后登录 | 2025-4-1 |
| 在线时间 | 8598 小时 |
- 梦石
- 0
- 星屑
- 22879
- 在线时间
- 8598 小时
- 注册时间
- 2011-12-31
- 回帖
- 3270
|
发表于 2015-8-27 23:38:46
|
显示全部楼层
出現トループ詳細設定
必要:メモ欄解析ver1.00以上
http://blueredzone.com/script/vxace/vxace_encountersetting.html
使用方法
在地圖的附註欄用以下規則設定敵出現條件
==出現トループ:%troop_id%,%weight%,[%regions%],%label%==
%troop_id%
出現敵群ID.
%weight%
出現敵群確喪
%regions%は
設定出現敵群的区堿,可設定多個区堿
空欄=全地圖.
%label%はその設定出現敵群出現条件label.
出現条件はスクリプトの詳細設定にて行います.
ENCOUNT_CONDITION_SET[:%label%] = ->{
%任意の条件%
}
%label%には任意のラベルを指定します.
ここで設定したラベルをメモ欄で指定可能です.
%任意の条件%には任意のRubyコードを記述します.
Rubyの知識が必要になりますが,スイッチのオンオフなどの簡単なサンプルがありますので参考にしてください.
以下の例はサンプルの出現条件が設定されているものとします.
例)開関1on場合敵群1,2出現
==出現トループ:1,10,[],s1_on==
==出現トループ:2,10,[],s1_on==
例)如果變量1大於3敵群3在区堿1,2出現
==出現トループ:3,10,[1,2],v1_over3==
メモ欄解析ver1.00[pre lang="ruby"]#==============================================================================
# ■ BMSP メモ欄解析[NConParser] Ver1.00 2015/05/04
#------------------------------------------------------------------------------
# メモ欄の設定を取得するためのスクリプトです.
#==============================================================================
#------------------------------------------------------------------------------
# ■内容
# BMSPのスクリプトのメモ欄の設定を取得するためのスクリプトです.
#
# 位置:すべてのBMSPスクリプトの一番上
#
# ■使用方法
# BMSPスクリプトの一番上に丸ごと貼り付けてください.
#
# ■情報
# このスクリプトはgentlawkによって作られたものです.
# 利用規約はhttp://blueredzone.comをご覧ください.
#------------------------------------------------------------------------------
module BMSP
@@includes ||= {}
@@includes[:NConParser] = 1.00
#--------------------------------------------------------------------------
# ● 必須スクリプトのチェック
#--------------------------------------------------------------------------
class << self
if method_defined?(:check_require)
alias nconprser_check_require check_require
end
end
def self.check_require(require, version)
if methods.include?(:nconprser_check_require)
nconprser_check_require(require, version)
end
if !@@includes[require]
message =
sprintf("BMSPスクリプト%sが導入されていません.\n%s Ver%1.2f以上を導入してください.",
require,require,version)
raise NConParser::REQUIRE, message
elsif @@includes[require] < version
message =
sprintf("BMSPスクリプト%s Ver%1.2fは古いバージョンです.\n%s Ver%1.2f以上を導入してください.",
require,@@includes[require],require,version)
raise NConparser::REQUIRE, message
end
return true
end
#--------------------------------------------------------------------------
# ● 導入スクリプトのチェック
#--------------------------------------------------------------------------
def self.check_include(include, version)
return false unless @@includes[include]
@@includes[include] >= version
end
#============================================================================
# ■ NConParser
#============================================================================
class NConParser
#--------------------------------------------------------------------------
# ● 例外クラス
#--------------------------------------------------------------------------
class ERROR < StandardError
end
#--------------------------------------------------------------------------
# ● バグの例外クラス
#--------------------------------------------------------------------------
class BUG < StandardError
end
#--------------------------------------------------------------------------
# ● 導入スクリプトの例外クラス
#--------------------------------------------------------------------------
class REQUIRE < StandardError
end
# メモコンフィグパターン
SPECIAL_PAT = /==(.+)==/
# パラメータ付メモコンフィグパターン
PARAM_PAT = /(.+?):(.+)/o
#--------------------------------------------------------------------------
# ● インスタンスの初期化
#--------------------------------------------------------------------------
def initialize(note)
pats = parse_pat(note)
parse(pats)
end
#--------------------------------------------------------------------------
# ● セット型メモコンフィグの取得
#--------------------------------------------------------------------------
def config(name)
return false if @ncon[name].nil?
@ncon[name]
end
#--------------------------------------------------------------------------
# ● パラメータ付メモコンフィグの取得
#--------------------------------------------------------------------------
def param(name)
@ncon_param[name]
end
#--------------------------------------------------------------------------
# ● セット型メモコンフィグの全取得
#--------------------------------------------------------------------------
def all_configs
@ncon
end
#--------------------------------------------------------------------------
# ● パラメータ付メモコンフィグの全取得
#--------------------------------------------------------------------------
def all_params
@ncon_param
end
private
#--------------------------------------------------------------------------
# ● メモコンフィグパターンの解析
#--------------------------------------------------------------------------
def parse_pat(note)
note.scan(SPECIAL_PAT).map{|match,| match}
end
#--------------------------------------------------------------------------
# ● メモコンフィグの解析
#--------------------------------------------------------------------------
def parse(pats)
@ncon = {}
@ncon_param = {}
pats.each do |pat|
if PARAM_PAT =~ pat # パラメータ付メモコンフィグ
cname = $1
cparam = $2
# パラメータ付メモコンフィグを解析
result = parse_param(cname, cparam)
unless result.nil?
@ncon_param[cname] ||= []
@ncon_param[cname].push result
end
else # セット型メモコンフィグ
# コンフィグを解析
result = parse_config(pat)
unless result.nil?
@ncon[pat] = result
end
end
end
end
#--------------------------------------------------------------------------
# ● パラメータ付メモコンフィグの解析(子クラスで再定義)
#--------------------------------------------------------------------------
def parse_param(cname, cparam)
cparam
end
#--------------------------------------------------------------------------
# ● セット型メモコンフィグの解析(子クラスで再定義)
#--------------------------------------------------------------------------
def parse_config(cname)
true
end
end
end
[/pre]
出現トループ詳細設定[pre lang="ruby"]#==============================================================================
# ■ BMSP 出現トループ詳細設定[ENCOUNTERSETTING] Ver1.00 2015/05/17
#------------------------------------------------------------------------------
# エンカウントするトループを条件で変更することができます.
#==============================================================================
#------------------------------------------------------------------------------
# ■内容
# マップ上でエンカウントするトループを条件設定により変更することができます.
#
# 位置:特に指定はありません
#
# ■必須
# 「BMSP メモ欄解析ver1.00以上」が必須です.
#
# ■使用方法
# スクリプトに丸ごと貼り付けていただければ使用できます.
#
# マップのメモ欄に以下のフォーマットで出現トループの設定を記述します.
# ==出現トループ:%troop_id%,%weight%,[%regions%],%label%==
# %troop_id%は出現するトループIDです.
# %weight%はそのトループが出現する確率の重みです.
# %regions%はそのトループが出現するリージョンの設定で,
# 出現させたいリージョンIDをカンマで区切って任意個並べます.
# 空欄にするとリージョンを制限しません.
# %label%はそのトループに設定する出現条件のラベルです.
#
# 出現条件はスクリプトの詳細設定にて行います.
# ENCOUNT_CONDITION_SET[:%label%] = ->{
# %任意の条件%
# }
# %label%には任意のラベルを指定します.
# ここで設定したラベルをメモ欄で指定可能です.
# %任意の条件%には任意のRubyコードを記述します.
# Rubyの知識が必要になりますが,スイッチのオンオフなどの簡単なサンプルが
# ありますので参考にしてください.
#
# 以下の例はサンプルの出現条件が設定されているものとします.
# 例)スイッチ1がオンの場合のみトループ1,2が出現する
# ==出現トループ:1,10,[],s1_on==
# ==出現トループ:2,10,[],s1_on==
#
# 例)変数1が3より大きい場合トループ3がリージョン1,2に出現する
# ==出現トループ:3,10,[1,2],v1_over3==
#
# ■注意
# このスクリプトでは
# 「RPG::Map」
# のメソッドを改変しています.
# ■情報
# このスクリプトはgentlawkによって作られたものです.
# 利用規約はhttp://blueredzone.comをご覧ください.
#------------------------------------------------------------------------------
module BMSP
@@includes ||= {}
@@includes[:EncounterSetting] = 1.00
module EncounterSetting
#▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽
#詳細設定
# 出現条件セット
ENCOUNT_CONDITION_SET = {}
ENCOUNT_CONDITION_SET[:s1_on] = ->{ # スイッチ1がONの場合
$game_switches[1]
}
ENCOUNT_CONDITION_SET[:v1_over3] = ->{ # 変数1が3より大きい場合
$game_variables[1] > 3
}
ENCOUNT_CONDITION_SET[:a1_level_10] = ->{ # アクター1のレベルが10以上
$game_actors[1].level >= 10
}
ENCOUNT_CONDITION_SET[:party_level_10] = ->{ # パーティーのレベルが10以上
$game_party.highest_level >= 10
}
#▲▽▲▽▲▽▲▽▲▽▲▽▲▽▲▽
#--------------------------------------------------------------------------
# ● 例外クラス
#--------------------------------------------------------------------------
class ERROR < StandardError
end
#--------------------------------------------------------------------------
# ● バグの例外クラス
#--------------------------------------------------------------------------
class BUG < StandardError
end
#--------------------------------------------------------------------------
# ● 導入スクリプトの例外クラス
#--------------------------------------------------------------------------
class REQUIRE < StandardError
end
end
#--------------------------------------------------------------------------
# ● 必須スクリプトのチェック
#--------------------------------------------------------------------------
class << self
if method_defined?(:check_require)
alias encountersetting_check_require check_require
end
end
def self.check_require(require, version)
if methods.include?(:encountersetting_check_require)
encountersetting_check_require(require, version)
end
if !@@includes[require]
message =
sprintf("BMSPスクリプト%sが導入されていません.\n%s Ver%1.2f以上を導入してください.",
require,require,version)
raise EncounterSetting::REQUIRE, message
elsif @@includes[require] < version
message =
sprintf("BMSPスクリプト%s Ver%1.2fは古いバージョンです.\n%s Ver%1.2f以上を導入してください.",
require,@@includes[require],require,version)
raise EncounterSetting::REQUIRE, message
end
return true
end
#--------------------------------------------------------------------------
# ● 導入スクリプトのチェック
#--------------------------------------------------------------------------
def self.check_include(include, version)
return false unless @@includes[include]
@@includes[include] >= version
end
end
#==============================================================================
# ■ BMSP::EncounterSetting::NConParser
#==============================================================================
# スクリプト導入チェック
BMSP.check_require(:NConParser, 1.00)
class BMSP::EncounterSetting::NConParser < BMSP::NConParser
HEADER = "出現トループ"
#--------------------------------------------------------------------------
# ● パラメータ付メモコンフィグの解析
#--------------------------------------------------------------------------
def parse_param(cname, cparam)
return nil unless /#{HEADER}/ =~ cname
return nil unless /(\d+),(\d+),\[([0-9,]*)\],(.+)/ =~ cparam
troop_id = $1.to_i
weight = $2.to_i
region_set = $3.split(",").map{|id| id.to_i}.uniq
cond_label = $4.to_sym
return {:troop_id => troop_id, :weight => weight, :region_set => region_set, :cond_label => cond_label}
end
#--------------------------------------------------------------------------
# ● セット型メモコンフィグの解析
#--------------------------------------------------------------------------
def parse_config(cname)
false
end
#--------------------------------------------------------------------------
# ● スキルID一覧フィルター
#--------------------------------------------------------------------------
def filter_skill_ids(param)
param.split(",").map{|id| id.to_i}.uniq.sort
end
end
#==============================================================================
# ■ RPG::Map
#==============================================================================
class RPG::Map
#--------------------------------------------------------------------------
# ● エンカウント設定の初期化
#--------------------------------------------------------------------------
def init_encounter_setting
@encounter_setting = {}
ncon = BMSP::EncounterSetting::NConParser.new(self.note)
settings = ncon.param(BMSP::EncounterSetting::NConParser::HEADER)
return unless settings
settings.each do |setting|
next unless setting
@encounter_setting[setting[:cond_label]] ||= []
encounter = RPG::Map::Encounter.new
encounter.troop_id = setting[:troop_id]
encounter.weight = setting[:weight]
encounter.region_set = setting[:region_set]
@encounter_setting[setting[:cond_label]].push encounter
end
end
#--------------------------------------------------------------------------
# ● エンカウントリストの取得
#--------------------------------------------------------------------------
alias bmsp_encountersetting_encounter_list encounter_list
def encounter_list
init_encounter_setting unless @encounter_setting
encounter_list = bmsp_encountersetting_encounter_list.dup
# 条件にマッチしたエンカウントリストを追加
@encounter_setting.each do |label, encounters|
cond_lambda = BMSP::EncounterSetting::ENCOUNT_CONDITION_SET[label]
next unless cond_lambda && cond_lambda.call
puts label
puts cond_lambda.call
encounter_list.concat encounters
end
puts encounter_list
return encounter_list
end
end
[/pre] |
|