デビルバスターです。
本作World Odysseyにレーネ様の盗むシステムを使っておりますが、
その設定した盗める物をkamesoft様の魔物図鑑に表示してほしいという依頼です。
kamesoft様の魔物図鑑は元々VX対応の素材をほぼそのままにVXAceに移植したもので、VX版ではkamesoftの素材の一つ『盗むスキル』に対応しており、ドロップアイテムの下に盗める物が表示されております。
VXAce版の魔物図鑑のスプリクトコードを見る限り、『盗むスキル』に対応されていた残骸があるらしく、
===============================
# ◆ 盗めるものを表示 (一時退避)
# ≪盗む≫ 導入時のみ。
SHOW_STEAL_OBJ = false
# ◆ 図鑑のパラメータ名 (一時退避)
PARAMETER_NAME[:steal_obj] = "盗めるもの"
PARAMETER_NAME[:steal_prob] = "成功率"
===============================
と書いてある為・・・せめてその部分をレーネ様の盗むスキルに対応して、活用できないかという形でこのようなリクエストをしました。(確認すると、盗める物用のスプリクトコードも書かれていた。)
よろしくお願いします。
≪解決!≫【RGSS3】レーネ様の『盗む』をkamesoft様の魔物図鑑に盗める物を表示
≪解決!≫【RGSS3】レーネ様の『盗む』をkamesoft様の魔物図鑑に盗める物を表示
最後に編集したユーザー デビルバスター [ 2020年11月01日(日) 22:14 ], 累計 1 回
フリーゲーム『World Odyssey』プロジェクト製作中
Twitter→https://twitter.com/dehilbastar
Twitter→https://twitter.com/dehilbastar
Re: 【RGSS3】レーネ様の『盗む』をkamesoft様の魔物図鑑に盗める物を表示
KAMESOFT様のVX版の盗むの移植(+図鑑対応)なら、私の所でやってます
http://tomosyumi.blog.fc2.com/blog-entry-344.html
http://tomosyumi.blog.fc2.com/blog-entry-344.html
現在サポート終了中
Re: 【RGSS3】レーネ様の『盗む』をkamesoft様の魔物図鑑に盗める物を表示
まさかこれが有ったとは・・・。
ですが、盗むのシステムをkamesoftの方に変えないといけないので・・・
特にレーネ様の盗むでは、装備品に盗む成功率をすることで盗む確率が50%増加することができる。というシステムがあるので、
例えるなら相手のアイテム盗む確率が50%で自身の装備に盗む成功率が50%増加できる装備をしているとすると、盗む成功率が75%になる。という形ですが、
kamesoftの場合は盗む成功率がn%"分"上がるという固定値での増加しかできないので、(割合で増加で設定する事が出来ない)レーネの盗むシステムと併用できないので、ちょっと悩みどころですね。。。
ですが、盗むのシステムをkamesoftの方に変えないといけないので・・・
特にレーネ様の盗むでは、装備品に盗む成功率をすることで盗む確率が50%増加することができる。というシステムがあるので、
例えるなら相手のアイテム盗む確率が50%で自身の装備に盗む成功率が50%増加できる装備をしているとすると、盗む成功率が75%になる。という形ですが、
kamesoftの場合は盗む成功率がn%"分"上がるという固定値での増加しかできないので、(割合で増加で設定する事が出来ない)レーネの盗むシステムと併用できないので、ちょっと悩みどころですね。。。
フリーゲーム『World Odyssey』プロジェクト製作中
Twitter→https://twitter.com/dehilbastar
Twitter→https://twitter.com/dehilbastar
Re: 【RGSS3】レーネ様の『盗む』をkamesoft様の魔物図鑑に盗める物を表示
レーネ様の方を合わせるのは大変すぎるので、
私の移植版の方にそれを追加しました
レーネ様の方の「<盗む成功率:n%>」が「<盗み成功倍率 n%>」で、
「<盗む確率増加:n%>」が「<盗み成功率 +n%>」になってます
こちらのスクリプトを使う方は、
「Readme等への記載」か「利用報告」のどちらかを必ずして下さい
元はブログ内で公開してた分の改変な為
【2020/11/01 追記】
ver1.02α
バグ修正
私の移植版の方にそれを追加しました
コード: 全て選択
# KAMESOFT様「盗む(VX)」VXAce移植 ver1.02α
# 制作者:TOMO
#
# KASESOFT様のVX版「盗む」をVXAce用に移植しました
#
# ※使用方法
# VX版と同じ
#
# ※補足
# KAMESOFT様のVXAce版「モンスター図鑑」にも対応してます
# 使用する際はモンスター図鑑側の SHOW_STEAL_OBJ をtrueにして下さい
# ※盗み成功倍率補正について
# 装備等のメモ欄に「<盗み成功倍率 n%>」と書く事で
# 盗むの成功率をn%にします
#
# 〇 計算式
# 敵メモ欄に記述した成功率 × 成功倍率補正(%) + 成功率補正(%)
# ※更新履歴
# ver1.02α
# バグ修正
# ver1.01α
# 盗み成功倍率補正を追加
# ver1.01
# アイテム使用時のバグ修正
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆ 盗む - KGC_Steal ◆ VX ◆
#_/ ◇ Last update : 2008/09/13 ◇
#_/----------------------------------------------------------------------------
#_/ アイテムやお金を盗むスキルを作成します。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#==============================================================================
# ★ カスタマイズ項目 - Customize ★
#==============================================================================
module KMS
module Steal
# ◆ 何も持っていないときのメッセージ
# %s : ターゲット名
VOCAB_STEAL_NO_ITEM = "%sは何も持っていない!"
# ◆ 盗めなかったときのメッセージ
VOCAB_STEAL_FAILURE = "盗めなかった!"
# ◆ アイテムを盗んだときのメッセージ
# 1つ目の %s : ターゲット名
# 2つ目の %s : アイテム名
VOCAB_STEAL_ITEM = "%sから%sを盗んだ!"
# ◆ お金を盗んだときのメッセージ
# 1つ目の %s : ターゲット名
# 2つ目の %s : 金額
# 3つ目の %s : 単位
VOCAB_STEAL_GOLD = "%sから %s%s 盗んだ!"
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
$kms_imported = {} if $kms_imported == nil
$kms_imported["Steal"] = true
module KMS::Steal
module Regexp
module BaseItem
# 盗み成功率補正
STEAL_PROB_PLUS = /<(?:STEAL_PROB|盗み成功率)\s*([\+\-]\d+)[%%]?>/i
# 追加
STEAL_PROB_RATE = /<(?:STEAL_RATE|盗み成功倍率)\s*(\d+)[%%]?>/i
end
module Skill
# 盗む
STEAL = /<(?:STEAL|盗む)>/i
end
module Enemy
# 盗めるオブジェクト
STEAL_OBJECT = /<(?:STEAL|盗む)\s*([IWAG]):(\d+)\s+(\d+)([%%])?>/i
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Vocab
#==============================================================================
module Vocab
# 盗む関連メッセージ
StealItem = KMS::Steal::VOCAB_STEAL_ITEM
StealGold = KMS::Steal::VOCAB_STEAL_GOLD
StealNoItem = KMS::Steal::VOCAB_STEAL_NO_ITEM
StealFailure = KMS::Steal::VOCAB_STEAL_FAILURE
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::BaseItem
#==============================================================================
class RPG::BaseItem
#--------------------------------------------------------------------------
# ○ 「盗む」のキャッシュ生成
#--------------------------------------------------------------------------
def create_steal_cache
@__steal_prob_plus = 0
@__steal_prob_rate = 1.0 # 追加
self.note.each_line { |line|
case line
when KMS::Steal::Regexp::BaseItem::STEAL_PROB_PLUS
# 盗み成功率補正
@__steal_prob_plus += $1.to_i
when KMS::Steal::Regexp::BaseItem::STEAL_PROB_RATE # 追加
@__steal_prob_rate *= $1.to_i / 100.0
end
}
end
#--------------------------------------------------------------------------
# ○ 盗み成功率補正
#--------------------------------------------------------------------------
def steal_prob_plus
create_steal_cache if @__steal_prob_plus == nil
return @__steal_prob_plus
end
# 追加
def steal_prob_rate
create_steal_cache if @__steal_prob_rate == nil
return @__steal_prob_rate
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::Skill
#==============================================================================
class RPG::Skill < RPG::UsableItem
#--------------------------------------------------------------------------
# ○ 「盗む」のキャッシュ生成
#--------------------------------------------------------------------------
def create_steal_cache
super
@__steal = false
self.note.each_line { |line|
case line
when KMS::Steal::Regexp::Skill::STEAL
# 盗む
@__steal = true
end
}
end
#--------------------------------------------------------------------------
# ○ 盗む
#--------------------------------------------------------------------------
def steal?
create_steal_cache if @__steal == nil
return @__steal
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::Enemy
#==============================================================================
class RPG::Enemy
#--------------------------------------------------------------------------
# ○ 「盗む」のキャッシュ生成
#--------------------------------------------------------------------------
def create_steal_cache
@__steal_objects = []
self.note.each_line { |line|
case line
when KMS::Steal::Regexp::Enemy::STEAL_OBJECT
# 盗めるオブジェクト
obj = RPG::Enemy::StealObject.new
case $1.upcase
when "I" # アイテム
obj.kind = 1
obj.data_id = $2.to_i
when "W" # 武器
obj.kind = 2
obj.data_id = $2.to_i
when "A" # 防具
obj.kind = 3
obj.data_id = $2.to_i
when "G" # 金
obj.kind = 4
obj.data_id = $2.to_i
else
next
end
# 成功率
if $4 != nil
obj.success_prob = $3.to_i
else
obj.denominator = $3.to_i
end
@__steal_objects << obj
end
}
end
#--------------------------------------------------------------------------
# ○ 盗めるオブジェクト
#--------------------------------------------------------------------------
def steal_objects
create_steal_cache if @__steal_objects == nil
return @__steal_objects
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ RPG::Enemy::StealObject
#==============================================================================
class RPG::Enemy::StealObject < RPG::Enemy::DropItem
#--------------------------------------------------------------------------
# ○ 定数
#--------------------------------------------------------------------------
KIND_ITEM = 1
KIND_WEAPON = 2
KIND_ARMOR = 3
KIND_GOLD = 4
#--------------------------------------------------------------------------
# ○ 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :success_prob # 成功率
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super
@success_prob = 0
end
#--------------------------------------------------------------------------
# ○ 同値判定
#--------------------------------------------------------------------------
def equal?(obj)
return false unless obj.is_a?(RPG::Enemy::StealObject)
return false if self.gold != obj.gold
return false if self.success_prob != obj.success_prob
return true
end
#--------------------------------------------------------------------------
# ○ 等値演算子
#--------------------------------------------------------------------------
def ==(obj)
return self.equal?(obj)
end
def item_id; @data_id; end
def weapon_id; @data_id; end
def armor_id; @data_id; end
def gold; @data_id; end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ○ 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :steal_objects # 盗めるオブジェクト
attr_accessor :stolen_object # 前回盗まれたオブジェクト
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_Battler_KMS_Steal initialize
def initialize
initialize_Battler_KMS_Steal
@steal_objects = []
@stolen_object = nil
end
#--------------------------------------------------------------------------
# ○ 盗み成功率補正値
#--------------------------------------------------------------------------
def steal_prob_plus
return 0
end
# 追加
def steal_prob_rate
return 1.0
end
#--------------------------------------------------------------------------
# ○ スキルまたはアイテムによる盗み効果
# user : スキルまたはアイテムの使用者
# obj : スキルまたはアイテム
# 結果は @stolen_object に代入する。
#--------------------------------------------------------------------------
def make_obj_steal_result(user, obj)
return unless obj.steal? # 盗み効果なし
return if @skipped || @missed || @evaded # 効果なし
# 何も持っていない
if self.steal_objects.compact.empty?
@stolen_object = :no_item
return
end
@stolen_object = nil
stolen_index = -1
self.steal_objects.each_with_index { |sobj, i|
next if sobj == nil
# 変更
rate = sobj.success_prob > 0 ?
sobj.success_prob / 100.0 : 1.0 / sobj.denominator
rate *= user.steal_prob_rate
rate += user.steal_prob_plus / 100.0
next if rate < rand
# ここまで
#~ # 盗み成功判定
#~ if sobj.success_prob > 0
#~ # 確率指定
#~ next if sobj.success_prob + user.steal_prob_plus < rand(100)
#~ else
#~ # 分母指定
#~ if rand(sobj.denominator) != 0
#~ next if user.steal_prob_plus < rand(100)
#~ end
#~ end
# 盗み成功
@stolen_object = sobj
stolen_index = i
if $kms_imported["EnemyGuide"]
# 図鑑用の盗み成功フラグをオン
self_id = (self.actor? ? self.id : self.enemy_id)
KMS::Commands.set_enemy_object_stolen(self_id, stolen_index)
end
break
}
if stolen_index != -1
@steal_objects[stolen_index] = nil
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ○ 盗み成功率補正値
#--------------------------------------------------------------------------
def steal_prob_plus
n = 0
equips.compact.each { |item| n += item.steal_prob_plus }
return n
end
# 追加
def steal_prob_rate
n = 1.0
equips.compact.each { |item| n *= item.steal_prob_rate }
return n
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# index : 敵グループ内インデックス
# enemy_id : 敵キャラ ID
#--------------------------------------------------------------------------
alias initialize_Enemy_KMS_Steal initialize
def initialize(index, enemy_id)
initialize_Enemy_KMS_Steal(index, enemy_id)
@steal_objects = enemy.steal_objects.clone
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Window_BattleLog
#==============================================================================
class Window_BattleLog < Window_Selectable
#--------------------------------------------------------------------------
# ● スキル/アイテム使用の表示(エイリアス)
#--------------------------------------------------------------------------
alias display_use_item_KMS_Steal display_use_item
def display_use_item(subject, item)
@dw_subject = subject
display_use_item_KMS_Steal(subject, item)
end
#--------------------------------------------------------------------------
# ● 失敗の表示(エイリアス)
#--------------------------------------------------------------------------
alias display_failure_KMS_Steal display_failure
def display_failure(target, item)
return if item && item.steal? && !target.actor?
display_failure_KMS_Steal(target, item)
end
#--------------------------------------------------------------------------
# ● HP ダメージ表示(エイリアス)
#--------------------------------------------------------------------------
alias display_hp_damage_KMS_Steal display_hp_damage
def display_hp_damage(target, item)
display_hp_damage_KMS_Steal(target, item)
if item && item.steal? && !target.actor?
draw_lots_steal_item(target, item)
end
end
#--------------------------------------------------------------------------
# ● 盗むアイテムの抽選
#--------------------------------------------------------------------------
def draw_lots_steal_item(target, item)
target.make_obj_steal_result(@dw_subject, item)
case target.stolen_object
when nil
display_steal_failure(target, item)
when :no_item
display_steal_no_item(target, item)
else
if target.stolen_object.kind == RPG::Enemy::StealObject::KIND_GOLD
display_steal_gold(target, item)
else
display_steal_item(target, item)
end
steal_xp_style_popup if $lnx_include && $lnx_include[:lnx11a]
end
end
#--------------------------------------------------------------------------
# ○ 盗み失敗の表示
#--------------------------------------------------------------------------
def display_steal_failure(target, obj)
add_text(Vocab::StealFailure)
end
#--------------------------------------------------------------------------
# ○ 何も持っていない場合の表示
#--------------------------------------------------------------------------
def display_steal_no_item(target, obj)
add_text(sprintf(Vocab::StealNoItem, target.name))
end
#--------------------------------------------------------------------------
# ○ アイテムを盗んだ場合の表示
#--------------------------------------------------------------------------
def display_steal_item(target, obj)
sobj = target.stolen_object
case sobj.kind
when RPG::Enemy::StealObject::KIND_ITEM
item = $data_items[sobj.item_id]
when RPG::Enemy::StealObject::KIND_WEAPON
item = $data_weapons[sobj.weapon_id]
when RPG::Enemy::StealObject::KIND_ARMOR
item = $data_armors[sobj.armor_id]
else
return
end
$game_party.gain_item(item, 1)
add_text(sprintf(Vocab::StealItem, target.name, item.name))
end
#--------------------------------------------------------------------------
# ○ お金を盗んだ場合の表示
#--------------------------------------------------------------------------
def display_steal_gold(target, obj)
gold = target.stolen_object.gold
unit = Vocab::currency_unit
$game_party.gain_gold(gold)
add_text(sprintf(Vocab::StealGold, target.name, gold, unit))
end
#--------------------------------------------------------------------------
# ● XPスタイルバトル用ポップアップ(レーネ様)
#--------------------------------------------------------------------------
def steal_xp_style_popup
popup_data.popup_text(@dw_subject, :steal)
end
end
class RPG::Item
#--------------------------------------------------------------------------
# ○ 盗む
#--------------------------------------------------------------------------
def steal?
return false
end
end
「<盗む確率増加:n%>」が「<盗み成功率 +n%>」になってます
こちらのスクリプトを使う方は、
「Readme等への記載」か「利用報告」のどちらかを必ずして下さい
元はブログ内で公開してた分の改変な為
【2020/11/01 追記】
ver1.02α
バグ修正
最後に編集したユーザー TOMO [ 2020年11月01日(日) 20:21 ], 累計 1 回
現在サポート終了中
Re: 【RGSS3】レーネ様の『盗む』をkamesoft様の魔物図鑑に盗める物を表示
一時、新規プロジェクトを用いて動作確認をしました。
その結果、エラーが出てしまいまいした。
装備に<盗み成功倍率 200%>、相手に50%の確率で盗めるアイテムを導入して100%入手できるかテストしましたが、
このような結果が出てしまいました。
334行に引っ掛かっているそうです。
その結果、エラーが出てしまいまいした。
装備に<盗み成功倍率 200%>、相手に50%の確率で盗めるアイテムを導入して100%入手できるかテストしましたが、
このような結果が出てしまいました。
334行に引っ掛かっているそうです。
フリーゲーム『World Odyssey』プロジェクト製作中
Twitter→https://twitter.com/dehilbastar
Twitter→https://twitter.com/dehilbastar
Re: 【RGSS3】レーネ様の『盗む』をkamesoft様の魔物図鑑に盗める物を表示
動作確認いたしました!!
完璧です。。。
ご協力してくださり、本当にありがとうございました!
完璧です。。。
ご協力してくださり、本当にありがとうございました!
フリーゲーム『World Odyssey』プロジェクト製作中
Twitter→https://twitter.com/dehilbastar
Twitter→https://twitter.com/dehilbastar