≪解決!≫【RGSS3】レーネ様の『盗む』をkamesoft様の魔物図鑑に盗める物を表示

デビルバスター
記事: 44
登録日時: 2019年3月16日(土) 08:05

≪解決!≫【RGSS3】レーネ様の『盗む』をkamesoft様の魔物図鑑に盗める物を表示

投稿記事by デビルバスター » 2020年10月30日(金) 20:35

デビルバスターです。
本作World Odysseyにレーネ様の盗むシステムを使っておりますが、
その設定した盗める物をkamesoft様の魔物図鑑に表示してほしいという依頼です。
kamesoft様の魔物図鑑は元々VX対応の素材をほぼそのままにVXAceに移植したもので、VX版ではkamesoftの素材の一つ『盗むスキル』に対応しており、ドロップアイテムの下に盗める物が表示されております。
VXAce版の魔物図鑑のスプリクトコードを見る限り、『盗むスキル』に対応されていた残骸があるらしく、
===============================
# ◆ 盗めるものを表示 (一時退避)
# ≪盗む≫ 導入時のみ。
SHOW_STEAL_OBJ = false
# ◆ 図鑑のパラメータ名 (一時退避)
PARAMETER_NAME[:steal_obj] = "盗めるもの"
PARAMETER_NAME[:steal_prob] = "成功率"
===============================
と書いてある為・・・せめてその部分をレーネ様の盗むスキルに対応して、活用できないかという形でこのようなリクエストをしました。(確認すると、盗める物用のスプリクトコードも書かれていた。)
よろしくお願いします。
最後に編集したユーザー デビルバスター on 2020年11月01日(日) 22:14 [ 編集 1 回目 ]

フリーゲーム『World Odyssey』プロジェクト製作中
Twitter→https://twitter.com/dehilbastar
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: 【RGSS3】レーネ様の『盗む』をkamesoft様の魔物図鑑に盗める物を表示

投稿記事by TOMO » 2020年10月30日(金) 21:33

KAMESOFT様のVX版の盗むの移植(+図鑑対応)なら、私の所でやってます
http://tomosyumi.blog.fc2.com/blog-entry-344.html
デビルバスター
記事: 44
登録日時: 2019年3月16日(土) 08:05

Re: 【RGSS3】レーネ様の『盗む』をkamesoft様の魔物図鑑に盗める物を表示

投稿記事by デビルバスター » 2020年10月31日(土) 21:59

まさかこれが有ったとは・・・。
ですが、盗むのシステムをkamesoftの方に変えないといけないので・・・
特にレーネ様の盗むでは、装備品に盗む成功率をすることで盗む確率が50%増加することができる。というシステムがあるので、
例えるなら相手のアイテム盗む確率が50%で自身の装備に盗む成功率が50%増加できる装備をしているとすると、盗む成功率が75%になる。という形ですが、
kamesoftの場合は盗む成功率がn%"分"上がるという固定値での増加しかできないので、(割合で増加で設定する事が出来ない)レーネの盗むシステムと併用できないので、ちょっと悩みどころですね。。。
フリーゲーム『World Odyssey』プロジェクト製作中
Twitter→https://twitter.com/dehilbastar
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: 【RGSS3】レーネ様の『盗む』をkamesoft様の魔物図鑑に盗める物を表示

投稿記事by TOMO » 2020年11月01日(日) 14:38

レーネ様の方を合わせるのは大変すぎるので、
私の移植版の方にそれを追加しました

コード: 全て選択

# 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%>」で、
「<盗む確率増加:n%>」が「<盗み成功率 +n%>」になってます

こちらのスクリプトを使う方は、
「Readme等への記載」か「利用報告」のどちらかを必ずして下さい

元はブログ内で公開してた分の改変な為

【2020/11/01 追記】
ver1.02α
バグ修正
最後に編集したユーザー TOMO on 2020年11月01日(日) 20:21 [ 編集 1 回目 ]
デビルバスター
記事: 44
登録日時: 2019年3月16日(土) 08:05

Re: 【RGSS3】レーネ様の『盗む』をkamesoft様の魔物図鑑に盗める物を表示

投稿記事by デビルバスター » 2020年11月01日(日) 20:01

一時、新規プロジェクトを用いて動作確認をしました。
その結果、エラーが出てしまいまいした。
装備に<盗み成功倍率 200%>、相手に50%の確率で盗めるアイテムを導入して100%入手できるかテストしましたが、
このような結果が出てしまいました。
334行に引っ掛かっているそうです。
添付ファイル
進捗.png
フリーゲーム『World Odyssey』プロジェクト製作中
Twitter→https://twitter.com/dehilbastar
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: 【RGSS3】レーネ様の『盗む』をkamesoft様の魔物図鑑に盗める物を表示

投稿記事by TOMO » 2020年11月01日(日) 20:21

修正して差し替えました
デビルバスター
記事: 44
登録日時: 2019年3月16日(土) 08:05

Re: 【RGSS3】レーネ様の『盗む』をkamesoft様の魔物図鑑に盗める物を表示

投稿記事by デビルバスター » 2020年11月01日(日) 22:13

動作確認いたしました!!
完璧です。。。
ご協力してくださり、本当にありがとうございました!
フリーゲーム『World Odyssey』プロジェクト製作中
Twitter→https://twitter.com/dehilbastar

“VX / Ace:スクリプト素材のリクエスト” へ戻る