RPGツクールXP/VX用のRGSS素材です。
一部英語版対応です。
(A few materials can be used for English RPG MAKER XP/VX.)
競合率はルファーの独断と偏見なのでたまにハズレます。
#==============================================================================
# ■ 敗北ペナルティ
#------------------------------------------------------------------------------
# エンカウント戦闘や、敗北を許可するイベント戦闘で所持金減少などのペナルティ
# を受けるようにします。
# (C) ルファー
# WebSite https://tkoolerlufar.pages.dev/
#==============================================================================
=begin
=対応RGSS
2
=他の素材との競合の可能性
!.. おそらく大丈夫
=数値の設定項目
「=」の隣のところに半角で数字 (整数) を入れてください。
文字色が茶色になっていない場合は全角スペースが入っていないか確認してください。
* 経験値減少率
敗北によって減少する経験値の割合です。メンバー全員の経験値が減ります。
減少する経験値は、倒せなかった敵キャラの
「経験値」パラメータの合計に比例します。
百分率 (%単位) で指定してください。
* 所持金減少率
敗北によって減少する所持金の割合です。
これも、倒せなかった敵キャラの「お金」パラメータの合計に比例します。
百分率で指定してください。
* アイテム損失確率
敗北によってドロップアイテムを失う確率です。
ドロップアイテムを失う確率は、
倒せなかった敵キャラからドロップアイテムを手に入れる確率に比例します。
百分率で指定してください。
* 敗北 ME のボリューム
敗北したときに鳴らす ME のボリュームです。
ME を鳴らしたくない場合については後述の「敗北 ME のファイル名」参照。
* 敗北 ME のピッチ
敗北したときに鳴らす ME のピッチです。
=メッセージの設定項目
「"」で囲まれた紫色の所に書いてください。
* 経験値損失メッセージ
経験値が減ったときのメッセージです。
経験値減少率が 0% のときは意味がありません。
経験値の数値を入れたいところに「%d」と入れると
そこに経験値が入ります。
例:"経験値が %d 減ってしまった!"->「経験値が 100 減ってしまった!」
* 所持金損失メッセージ
所持金が減ったときのメッセージです。
倒した敵から手に入れるお金と相殺します。
所持金減少率が 0% のときは意味がありません。
減ったお金を入れたいところに「%s」と入れると
そこになくした金額が入ります。
このとき、通貨単位は自動で入ります。
例:"お金を %s 落としてしまった!"->「お金を 100G 落としてしまった!」
* アイテム損失メッセージ
アイテムをなくしたときのメッセージです。
アイテム損失確率が 0% のときは意味がありません。
なくしたアイテムの名前を入れたいところに「%s」と入れると
そこにアイテムの名前が入ります。
例:"%sを落としてしまった!"->「ポーションを落としてしまった!」
* 敗北 ME のファイル名
敗北したときに鳴らす ME のファイル名です。
鳴らしたくない場合はカラッポ ("") にしてください。
=フラグ設定項目
青い文字で「true」または「false」と書いてあるところを書き換えてください。
true でフラグが立ち、false でフラグが降ります。
* エンカウント敗北許可フラグ
エンカウントによる戦闘 (いわゆるザコ戦) で
敗北を許可するかどうかを指定します。
フラグを立てるとエンカウントによる戦闘でゲームオーバーにならなくなります。
* イベントペナルティフラグ
イベントによる戦闘 (中ボス以上) で負けたときに
ペナルティを受けるかどうかを指定します。
フラグを立てるとペナルティを受けるようになります。
=更新履歴
2010/10/01 お金の増減メッセージがうまく表示されないバグの修正
2010/09/30 公開
=再定義しているメソッド (いずれもエイリアス使用)
Game_Troop#gold_total
Scene_Title#battle_test
Scene_Map#update_encounter
Scene_Battle#process_defeat
=新規定義しているメソッド
Game_Troop#_Lufar_LossPenalty_LostExpTotal
Game_Troop#_Lufar_LossPenalty_MakeStolenItems
Scene_Battle#_Lufar_LossPenalty_DisplayExpAndGold
Scene_Battle#_Lufar_LossPenalty_DisplayLostItems
=end
#----------------------------------------------------------------------------
# ◆ Lufar モジュール
#----------------------------------------------------------------------------
module Lufar
#--------------------------------------------------------------------------
# ◆ LossPenalty モジュール
#--------------------------------------------------------------------------
module LossPenalty
#------------------------------------------------------------------------
# ◎ 設定項目
#------------------------------------------------------------------------
LOSS_EXP = 0 # 経験値減少率
LOSS_MONEY = 50 # 所持金減少率
LOSS_ITEM = 50 # アイテム損失確率
MSG_LOSS_EXP = "%d の経験値を損失!" # 経験値損失メッセージ
MSG_LOSS_MONEY = "お金を %s 落とした!" # 所持金損失メッセージ
MSG_LOSS_ITEM = "%sを奪われてしまった!" # アイテム損失メッセージ
FLAG_ENCOUNTER_LOSS = true # エンカウント敗北許可フラグ
FLAG_EVENT_PENALTY = true # イベントペナルティフラグ
LOSS_ME = RPG::ME.new(
"", # 敗北 ME のファイル名
100, # 敗北 ME のボリューム
100) # 敗北 ME のピッチ
end
end
#----------------------------------------------------------------------------
# ◆ Game_Troop クラス
#----------------------------------------------------------------------------
class Game_Troop < Game_Unit
#--------------------------------------------------------------------------
# ● 失う経験値の合計計算
#--------------------------------------------------------------------------
def _Lufar_LossPenalty_LostExpTotal
lost_exp = 0
for enemy in existing_members
lost_exp += enemy.exp
end
lost_exp = lost_exp * Lufar::LossPenalty::LOSS_EXP / 100
return lost_exp
end
#--------------------------------------------------------------------------
# ● お金の合計計算 (相殺あり)
#--------------------------------------------------------------------------
alias _Lufar_LossPenalty_GoldTotal gold_total
def gold_total(*args)
lost_gold = 0
for enemy in existing_members
lost_gold += enemy.gold
end
lost_gold = lost_gold * Lufar::LossPenalty::LOSS_MONEY / 100
return _Lufar_LossPenalty_GoldTotal(*args) - lost_gold
end
#--------------------------------------------------------------------------
# ● とられるアイテムの配列作成
#--------------------------------------------------------------------------
def _Lufar_LossPenalty_MakeStolenItems
stolen_items = []
for enemy in existing_members
for di in [enemy.drop_item1, enemy.drop_item2]
next if di.kind == 0
next if rand(di.denominator*100) >= Lufar::LossPenalty::LOSS_ITEM
if di.kind == 1
stolen_items.push($data_items[di.item_id])
elsif di.kind == 2
stolen_items.push($data_weapons[di.weapon_id])
elsif di.kind == 3
stolen_items.push($data_armors[di.armor_id])
end
end
end
return stolen_items
end
end
#----------------------------------------------------------------------------
# ◆ Scene_Title クラス
#----------------------------------------------------------------------------
class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# ● 戦闘テスト
#--------------------------------------------------------------------------
alias _Lufar_LossPenalty_BattleTest battle_test
def battle_test(*args)
_Lufar_LossPenalty_BattleTest(*args)
$game_troop.can_lose = true
end
end
#----------------------------------------------------------------------------
# ◆ Scene_Map クラス
#----------------------------------------------------------------------------
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# ● エンカウントの処理
#--------------------------------------------------------------------------
alias _Lufar_LossPenalty_UpdateEncounter update_encounter
def update_encounter(*args)
_Lufar_LossPenalty_UpdateEncounter(*args)
return if $game_player.encounter_count > 0 # 遭遇歩数未満?
return if $game_map.interpreter.running? # イベント実行中?
return if $game_system.encounter_disabled # エンカウント禁止中?
troop_id = $game_player.make_encounter_troop_id # 敵グループを決定
return if $data_troops[troop_id] == nil # 敵グループが無効?
$game_troop.can_lose = Lufar::LossPenalty::FLAG_ENCOUNTER_LOSS
end
end
#----------------------------------------------------------------------------
# ◆ Scene_Battle クラス
#----------------------------------------------------------------------------
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● インクルード
#--------------------------------------------------------------------------
include Lufar::LossPenalty
#--------------------------------------------------------------------------
# ● 敗北の処理
#--------------------------------------------------------------------------
alias _Lufar_LossPenalty_ProcessDefeat process_defeat
def process_defeat(*args)
if $game_temp.battle_proc.nil?
unless FLAG_ENCOUNTER_LOSS
return _Lufar_LossPenalty_ProcessDefeat(*args)
end
else
unless $game_troop.can_lose and FLAG_EVENT_PENALTY
return _Lufar_LossPenalty_ProcessDefeat(*args)
end
end
@info_viewport.visible = false
@message_window.visible = true
unless LOSS_ME.name.empty?
RPG::BGM.stop
LOSS_ME.play
unless $BTEST
$game_temp.map_bgm.play
$game_temp.map_bgs.play
end
end
_Lufar_LossPenalty_DisplayExpAndGold
display_drop_items
_Lufar_LossPenalty_DisplayLostItems
if LOSS_ME.name.empty?
unless $BTEST
$game_temp.map_bgm.play
$game_temp.map_bgs.play
end
end
battle_end(2)
end
#--------------------------------------------------------------------------
# ● 獲得・損失した経験値とお金の表示
#--------------------------------------------------------------------------
def _Lufar_LossPenalty_DisplayExpAndGold
exp = $game_troop._Lufar_LossPenalty_LostExpTotal
gold = $game_troop.gold_total
gold = 9999999 - $game_party.gold if $game_party.gold + gold > 9999999
gold = -$game_party.gold if $game_party.gold + gold < 0
for actor in $game_party.dead_members
actor.gain_exp(-exp, false)
end
$game_party.gain_gold(gold)
text = sprintf(Vocab::Defeat, $game_party.name)
$game_message.texts.push((LOSS_ME.name.empty? ? "" : '\|') + text)
if exp < 0
text = sprintf(MSG_LOSS_EXP, exp)
$game_message.texts.push('\.' + text)
end
if gold > 0
text = sprintf(Vocab::ObtainGold, gold, Vocab::gold)
$game_message.texts.push('\.' + text)
elsif gold < 0
text = sprintf(MSG_LOSS_MONEY, sprintf("%d%s", -gold, Vocab::gold))
$game_message.texts.push('\.' + text)
end
wait_for_message
end
#--------------------------------------------------------------------------
# ● 損失したドロップアイテムの表示
#--------------------------------------------------------------------------
def _Lufar_LossPenalty_DisplayLostItems
stolen_items = $game_troop._Lufar_LossPenalty_MakeStolenItems
for item in stolen_items
next if $game_party.item_number(item) == 0
$game_party.lose_item(item, 1)
text = sprintf(MSG_LOSS_ITEM, item.name)
$game_message.texts.push(text)
end
wait_for_message
end
end
戻る