2020-05-31
最近、だいぶ暑くなりましたね。
室温でチョコレートが溶ける季節になりました。

今日は、ちょっと前にTwitterに載せたスイッチ拡張をまとめたいと思います。
個人的には、良いと思ったけど・・・。


このスクリプトは、イベントの出現条件の拡張を想定してます。
デフォルトでは、5種類の条件しか指定できないですけど、このスクリプトで無限大です!
変数の値が範囲内のとき、アイテムの数、装備中、アクターのレベルなどなど。

まず、次のスクリプトを導入します。

class Game_Switches

@__procedures = {}
def self.proc(switch_id, &block)
@__procedures[switch_id] = block.to_proc if block
@__procedures[switch_id]
end

def self.unproc(switch_id)
@__procedures.delete(switch_id)
end

alias _original_getop []
def [](switch_id)
f = Game_Switches.proc(switch_id)
if f
f.call
else
_original_getop(switch_id)
end
end

end

次の処理はどこで行なっても構いません。
通常は、スクリプトエディタ上でセクションを作ってそこに書いておくと良いと思います。

# 判定処理の追加
# ブロックを渡すとスイッチが参照された時にブロックが評価されます。
Game_Switches.proc(スイッチID) { 判定処理 }

# 判定処理の削除
# 通常の真偽値を使うスイッチに戻します。
Game_Switches.unproc(スイッチID)


では、使用例を紹介いたします。

# [1] スイッチ 2,3,6,8 が ON のとき
Game_Switches.proc(1) do
[2,3,6,8].all? {|id| $game_switches[id] }
end

# [2] スイッチ 3 が OFF のとき
Game_Switches.proc(2) do
!$game_switches[3]
end

# [3] 変数 1 が 0 なおかつ 変数 2 が 10 から 20 以内
Game_Switches.proc(3) do
return false if $game_variables[1] != 0
return false if $game_variables[2] < 10
return false if $game_variables[2] > 20
return true
end

# [4] 所持金が 1000 未満 なおかつ 歩数が 1000 以上
Game_Switches.proc(4) do
return false if $game_party.gold >= 1000
return false if $game_party.step < 1000
return true
end

# [5] タイマーが 10 秒以下
Game_Switches.proc(5) do
$game_timer.sec <= 10
end

# [6] 天候が雨
Game_Switches.proc(6) do
$game_map.screen.weather_type == :rain
end

# [7] 飛行船に乗っている
class Game_Player
alias _get_on_vehicle get_on_vehicle
def get_on_vehicle
_get_on_vehicle
$game_map.need_refresh = true
end
alias _update_vehicle_get_off update_vehicle_get_off
def update_vehicle_get_off
_update_vehicle_get_off
$game_map.need_refresh = true if @vehicle_type == :walk
end
end
# ↑必要に応じてマップの更新が必要
Game_Switches.proc(7) do
$game_player.in_airship?
end

サンプル考えてたら、残念ながらセルフスイッチは、別の仕組みを作る必要がありそう。
あと、スイッチの消費も増えるし、素直に出現条件を拡張するスクリプト入れた方が良さそう。
それと、大抵の場合マップ更新しないとイベント変わらないから並列で監視するかってなる。

でも、これは出現条件に限らないし、スイッチの動作を変えたいときは有用だと思う。
きっとそんな時があるはず!
コメント




 

 ※ コメント内にURLを含めるには、バッククォート(`)をURLの直前に付け加えてください。



トラックバック
トラックバックURL:
http://cacaosoft.blog42.fc2.com/tb.php/805-a6ce9037
≪ トップページ ≫
カレンダー
05 << 2021/06 >> 07
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 - - -

カテゴリー
最近の記事
最近のコメント
タグクラウド

リンク