敵専用の窃盗スキル
Posted: 2016年3月17日(木) 13:24
敵専用で、パーティのアイテムやお金を盗むスキルを作成できるようになります。
(アクター側が使うとバグるので使わないでください)
なお、バトル系スクリプトを素材化するのは初めてでして、テスト公開になります。
お手数ですが、バグを見つけたら報告してください。
(その際、競合が原因かは事前にご確認をお願いいたします)
また、勝手ながら自分の技量以上のバグが出たと判断した場合、公開を中止させていただきます。


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

【使用方法】
アイテムを盗むスキルのメモ欄に <item_steal>
お金を盗むスキルのメモ欄には <money_steal> を入れてください。
その後、使わせたい敵の行動条件にそのスキルを設定してください。
【ダウンロード】
(アクター側が使うとバグるので使わないでください)
なお、バトル系スクリプトを素材化するのは初めてでして、テスト公開になります。
お手数ですが、バグを見つけたら報告してください。
(その際、競合が原因かは事前にご確認をお願いいたします)
また、勝手ながら自分の技量以上のバグが出たと判断した場合、公開を中止させていただきます。




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


【使用方法】
アイテムを盗むスキルのメモ欄に <item_steal>
お金を盗むスキルのメモ欄には <money_steal> を入れてください。
その後、使わせたい敵の行動条件にそのスキルを設定してください。
【ダウンロード】
コード: 全て選択
#==============================================================================
# ■ 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