敵専用の窃盗スキル

フォーラムルール
素材の利用規約を決めたいけど、どんなことを書けばいいのか分からない場合は、
素材のテンプレートをご利用下さい。
アバター
オシブ
記事: 20
登録日時: 2015年11月10日(火) 15:25
連絡を取る:

敵専用の窃盗スキル

投稿記事by オシブ » 2016年3月17日(木) 13:24

敵専用で、パーティのアイテムやお金を盗むスキルを作成できるようになります。
(アクター側が使うとバグるので使わないでください)

なお、バトル系スクリプトを素材化するのは初めてでして、テスト公開になります。
お手数ですが、バグを見つけたら報告してください。
(その際、競合が原因かは事前にご確認をお願いいたします)

また、勝手ながら自分の技量以上のバグが出たと判断した場合、公開を中止させていただきます。


画像
画像
画像
画像
※改造した状態での再配布はクレジット表記をしてくれればOKです。
※また他サイトなどに改造の相談や質問するために引用転載することはOKです。

画像
画像

【使用方法】
アイテムを盗むスキルのメモ欄に <item_steal>
お金を盗むスキルのメモ欄には <money_steal> を入れてください。
その後、使わせたい敵の行動条件にそのスキルを設定してください。


キャプチャ.JPG
キャプチャ.JPG (55.75 KiB) 閲覧数: 4573 回


【ダウンロード】

コード: 全て選択

#==============================================================================
# ■ RGSS3 窃盗スキル   by オシブ
#==============================================================================
=begin

【解説】
 敵専用スキルです。
 パーティの所持アイテムやお金を盗むスキルを作ることができます。
 大事なものと<non_steal>とメモ欄にあるアイテムは盗みません。

 また、窃盗スキルが成功すると、そのエネミーには
 自動に指定したステートが付与されます。
 行動条件に使ったり、そのステート自体に色々設定したりと活用してください。

 盗んだお金とアイテムは、その敵を倒せばドロップアイテム、お金として
 返却されます。
 敵データのほうで設定されているものを無視して落とすので
 盗む前に倒せばレアアイテムドロップみたいな設定もすることができます。

【仕様】
 1.お金を持っていない、盗めるアイテムを一つも所持していない状態で
   そのスキルを受けると失敗判定になります。
 2.盗むお金の金額は、最低値は 1 のランダムです。

【使用方法】
 アイテムを盗むスキルのメモ欄に <item_steal>
 お金を盗むスキルのメモ欄には <money_steal> を入れてください。

=end
#==============================================================================
# ■ module Oxib_steal_skill
#------------------------------------------------------------------------------
# ■ カスタマイズ項目
#==============================================================================

module Oxib_steal_skill
 
  #窃盗(アイテム)スキル使用後に付くステートID
  STEAL_ITEM_STATE = 55
  #窃盗(お金)スキル使用後に付くステートID
  STEAL_MONEY_STATE = 55
  #盗むお金の上限
  LIMIT_MONEY = 3000

end

#==============================================================================
# ■ RPG::Item
#==============================================================================
class RPG::Item
  #--------------------------------------------------------------------------
  # ○ 盗めるアイテムかどうかを返す
  #--------------------------------------------------------------------------
  def can_steal?
    /<non_steal>/ =~ @note ? false : true
  end
  #--------------------------------------------------------------------------
  # ○ 窃盗(アイテム)スキルかどうかを返す
  #--------------------------------------------------------------------------
  def item_steal_skill?
    false
  end
  #--------------------------------------------------------------------------
  # ○ 窃盗(お金)スキルかどうかを返す
  #--------------------------------------------------------------------------
  def money_steal_skill?
    false
  end
end

#==============================================================================
# ■ RPG::EquipItem
#==============================================================================
class RPG::EquipItem
  #--------------------------------------------------------------------------
  # ○ 盗めるアイテムかどうかを返す
  #--------------------------------------------------------------------------
  def can_steal?
    /<non_steal>/ =~ @note ? false : true
  end
end

#==============================================================================
# ■ RPG::Skill
#==============================================================================
class RPG::Skill
  #--------------------------------------------------------------------------
  # ○ 窃盗(アイテム)スキルかどうかを返す
  #--------------------------------------------------------------------------
  def item_steal_skill?
    /<item_steal>/ =~ @note ? true : false
  end
  #--------------------------------------------------------------------------
  # ○ 窃盗(お金)スキルかどうかを返す
  #--------------------------------------------------------------------------
  def money_steal_skill?
    /<money_steal>/ =~ @note ? true : false
  end
end

#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの効果適用
  #--------------------------------------------------------------------------
  alias oxib_steal_item_apply item_apply
  def item_apply(user, item)
    oxib_steal_item_apply(user, item)
    steal_item_skill(user, item) if item.item_steal_skill?
    steal_money_skill(user, item) if item.money_steal_skill?
  end
  #--------------------------------------------------------------------------
  # ● 窃盗スキル(アイテム)の効果適用
  #--------------------------------------------------------------------------
  def steal_item_skill(user, item)
    if actor? && @result.hit?
      steal_targets = []
      for i in $game_party.all_items
        next if i.is_a?(RPG::Item) && i.key_item?
        next unless i.can_steal?
        steal_targets.push(i)
      end
      if steal_targets.size == 0
        @result.success = false
        return
      end
      target_item = steal_targets.sample
      @result.steal_items.push(target_item)
      $game_party.lose_item(target_item, 1)
      user.change_drop_items(target_item)
      user.add_state(Oxib_steal_skill::STEAL_ITEM_STATE)
      @result.success = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 窃盗スキル(お金)の効果適用
  #--------------------------------------------------------------------------
  def steal_money_skill(user, item)
    if actor? && @result.hit?
      steal_limit = $game_party.gold
      if steal_limit == 0
        @result.success = false
        return
      end
      steal_money = [rand(steal_limit) + 1, Oxib_steal_skill::LIMIT_MONEY].min
      $game_party.lose_gold(steal_money)
      @result.steal_moneys += steal_money
      user.change_drop_moneys(steal_money)
      user.add_state(Oxib_steal_skill::STEAL_MONEY_STATE)
      @result.success = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 戦闘終了処理
  #--------------------------------------------------------------------------
  alias oxib_steal_on_battle_end on_battle_end
  def on_battle_end
    @result.steal_items.clear unless actor?
    oxib_steal_on_battle_end
  end
end

#==============================================================================
# ■ Game_ActionResult
#==============================================================================
class Game_ActionResult
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :steal_items             # 盗まれたアイテムIDの配列
  attr_accessor :steal_moneys            # 盗まれた金額
  #--------------------------------------------------------------------------
  # ● クリア
  #--------------------------------------------------------------------------
  alias oxib_steal_clear clear
  def clear
    oxib_steal_clear
    @steal_items = []
    @steal_moneys = 0
  end
end

#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
#  敵キャラを扱うクラスです。このクラスは Game_Troop クラス($game_troop)の
# 内部で使用されます。
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias steal_initialize initialize
  def initialize(index, enemy_id)
    steal_initialize(index, enemy_id)
    @drop_steal_items = []
    @drop_steal_moneys = 0
  end
  #--------------------------------------------------------------------------
  # ● ドロップアイテムの配列作成
  #--------------------------------------------------------------------------
  def change_drop_items(steal_target_item)
    @drop_steal_items.push(steal_target_item)
  end
  #--------------------------------------------------------------------------
  # ● ドロップアイテムの配列作成
  #--------------------------------------------------------------------------
  def change_drop_moneys(steal_money)
    @drop_steal_moneys += steal_money
  end
  #--------------------------------------------------------------------------
  # ● お金の取得
  #--------------------------------------------------------------------------
  alias steal_gold gold
  def gold
    @drop_steal_moneys != 0 ? @drop_steal_moneys : steal_gold
  end
  #--------------------------------------------------------------------------
  # ● ドロップアイテムの配列作成
  #--------------------------------------------------------------------------
  alias steal_make_drop_items make_drop_items
  def make_drop_items
    unless @drop_steal_items.empty?
      @drop_steal_items.inject([]) do |r, di|
        item_kind = 0
        item_kind = 1 if di.is_a?(RPG::Item)
        item_kind = 2 if di.is_a?(RPG::Weapon)
        item_kind = 3 if di.is_a?(RPG::Armor)
        r.push(item_object(item_kind, di.id)) if item_kind > 0
      end
    else
      steal_make_drop_items
    end
  end
end

#==============================================================================
# ■ Window_BattleLog
#==============================================================================
class Window_BattleLog < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 行動結果の表示
  #--------------------------------------------------------------------------
  alias steal_display_action_results display_action_results
  def display_action_results(target, item)
    if target.result.used
      last_line_number = line_number
      display_steal_item(target) #追加
      display_steal_money(target) #追加
      wait if line_number > last_line_number
      back_to(last_line_number)
    end
    steal_display_action_results(target, item)
  end
  #--------------------------------------------------------------------------
  # ○ 盗んだアイテムの表示
  #--------------------------------------------------------------------------
  def display_steal_item(target)
    target.result.steal_items.each do |steal_item|
      add_text(sprintf("%sから%sを盗んだ!", target.name, steal_item.name))
      wait
    end
  end
  #--------------------------------------------------------------------------
  # ○ 盗んだお金の表示
  #--------------------------------------------------------------------------
  def display_steal_money(target)
    return if target.result.steal_moneys == 0
    add_text(sprintf("%sから%s\\Gを盗んだ!", target.name, target.result.steal_moneys.to_s))
    wait
  end
end

――――――――――――――――――――――――――――――――――――――――――――――
RPGツクールVXでシナリオ重視ゲーム作ってます。

画像
サイト:Mix Idea
アドレス:http://oxibgame.jugem.jp/
―――――――――――――――――――――――――――――――――――――――――――――――
アバター
オシブ
記事: 20
登録日時: 2015年11月10日(火) 15:25
連絡を取る:

Re: 敵専用の窃盗スキル

投稿記事by オシブ » 2016年11月07日(月) 15:48

敵専用の窃盗スキルを防ぐ装備品が作れるようになるスクリプトと、敵専用の窃盗スキルスクリプトと併用できるアクター用窃盗スキルスクリプトを自ブログで公開しました。興味ある方は覗いてみてください。
――――――――――――――――――――――――――――――――――――――――――――――
RPGツクールVXでシナリオ重視ゲーム作ってます。

画像
サイト:Mix Idea
アドレス:http://oxibgame.jugem.jp/
―――――――――――――――――――――――――――――――――――――――――――――――

“Ace:スクリプト素材(RGSS3)” へ戻る