162 lines
No EOL
7.6 KiB
Ruby
162 lines
No EOL
7.6 KiB
Ruby
#==============================================================================
|
||
# ■ Game_Player
|
||
#------------------------------------------------------------------------------
|
||
# プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの
|
||
# 機能を持っています。このクラスのインスタンスは $game_player で参照されます。
|
||
#==============================================================================
|
||
|
||
class Game_Player < Game_Character
|
||
#--------------------------------------------------------------------------
|
||
# ● 公開インスタンス変数
|
||
#--------------------------------------------------------------------------
|
||
attr_reader :item_stack #アイテムスイッチ格納ハッシュ
|
||
#--------------------------------------------------------------------------
|
||
# ● オブジェクト初期化
|
||
#--------------------------------------------------------------------------
|
||
alias item_revive_initialize initialize
|
||
def initialize
|
||
item_revive_initialize
|
||
@item_stack = {}
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● 復活アイテム用セルフスイッチの格納
|
||
#--------------------------------------------------------------------------
|
||
def stack_key_set(map_id, event_id, self_type)
|
||
key = [map_id, event_id, self_type]
|
||
@item_stack[key] = true
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● アイテムスイッチ格納のリセット
|
||
#--------------------------------------------------------------------------
|
||
def clear_stack
|
||
@item_stack = {}
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● フィールドに出た際アイテムを復活させスタックをリセット
|
||
# 実行は Scene_Map に記述
|
||
#--------------------------------------------------------------------------
|
||
def item_stack_revive
|
||
keys = item_stack.keys
|
||
keys.each {|key| $game_self_switches[key] = false}
|
||
clear_stack
|
||
end
|
||
end
|
||
|
||
#==============================================================================
|
||
# ■ Game_Interpreter
|
||
#------------------------------------------------------------------------------
|
||
# イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
|
||
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
|
||
#==============================================================================
|
||
|
||
class Game_Interpreter
|
||
#--------------------------------------------------------------------------
|
||
# ○ 復活用アイテム取得後はこのスクリプトでセルフスイッチをスタックに格納
|
||
# 基本セルフスイッチはAを用いるが A 以外を使う時の為引数指定出来るようにしてある
|
||
# デフォルト引数を A にしてあるので普段は引数省略でOK
|
||
#--------------------------------------------------------------------------
|
||
def item_stack(self_type = "A")
|
||
$game_player.stack_key_set(@map_id, @event_id, self_type)
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ 別マップのアイテムスタック用
|
||
#--------------------------------------------------------------------------
|
||
def another_item_stack(map_id, event_id, self_type = "A")
|
||
$game_player.stack_key_set(map_id, event_id, self_type)
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ アイテムの復活 ※イベントコマンド用
|
||
#--------------------------------------------------------------------------
|
||
def delete_self_switchs
|
||
$game_player.item_stack_revive
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ 他所のセルフスイッチの操作 ※ssc = self swith control
|
||
#--------------------------------------------------------------------------
|
||
def another_ssc(m_id, e_id, s_type = "A", control = true)
|
||
#m_id = $game_map.map_id if m_id == 0 # 0を指定すると現在のマップIDになる
|
||
m_id = @map_id if m_id == 0 # 0を指定すると現在のマップIDになる
|
||
if e_id.instance_of?(Array) # 配列で指定すると[0]の数字から[1]の数字までをまとめて操作
|
||
skip = e_id[2] ? e_id[2] : [] # 配列[2]に配列を入れるとその配列に格納されている数字はスキップ
|
||
(e_id[0]..e_id[1]).each do |id|
|
||
next if skip.include?(id)
|
||
key = [m_id, id, s_type]
|
||
$game_self_switches[key] = control
|
||
end
|
||
else
|
||
key = [m_id, e_id, s_type]
|
||
$game_self_switches[key] = control
|
||
end
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ 他所のセルフスイッチを反転 ※ssc = self swith control
|
||
#--------------------------------------------------------------------------
|
||
def reverse_ssc(m_id, e_id, s_type = "A")
|
||
m_id = @map_id if m_id == 0 # 0を指定すると現在のマップIDになる
|
||
if e_id.instance_of?(Array)
|
||
skip = e_id[2] ? e_id[2] : []
|
||
(e_id[0]..e_id[1]).each do |id|
|
||
next if skip.include?(id)
|
||
key = [m_id, id, s_type]
|
||
$game_self_switches[key] ^= true
|
||
end
|
||
else
|
||
key = [m_id, e_id, s_type]
|
||
$game_self_switches[key] ^= true
|
||
end
|
||
end
|
||
=begin
|
||
#--------------------------------------------------------------------------
|
||
# ○ 他所のセルフスイッチをまとめて操作
|
||
#--------------------------------------------------------------------------
|
||
def each_ssc(m_id, ary, s_type = "A", control = true)
|
||
m_id = $game_map.map_id if m_id == 0 # 0を指定すると現在のマップIDになる
|
||
ary[0]..ary[1].each do |e_id|
|
||
key = [m_id, e_id, s_type]
|
||
$game_self_switches[key] = control
|
||
end
|
||
end
|
||
=end
|
||
#--------------------------------------------------------------------------
|
||
# ○ 他所のセルフスイッチのチェック
|
||
#--------------------------------------------------------------------------
|
||
def ss_check(m_id, e_id, s_type = "A")
|
||
m_id = @map_id if m_id == 0 # 0を指定すると現在のマップIDになる
|
||
key = [m_id, e_id, s_type]
|
||
return $game_self_switches[key]
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ 他所のセルフスイッチのチェック
|
||
#--------------------------------------------------------------------------
|
||
def all_ss_check(m_id, e_id, s_type = "A")
|
||
m_id = @map_id if m_id == 0 # 0を指定すると現在のマップIDになる
|
||
skip = e_id[2] ? e_id[2] : []
|
||
(e_id[0]..e_id[1]).all? do |id|
|
||
if skip.include?(id)
|
||
true
|
||
else
|
||
key = [m_id, id, s_type]
|
||
$game_self_switches[key]
|
||
end
|
||
end
|
||
#key = [m_id, e_id, s_type]
|
||
#return $game_self_switches[key]
|
||
end
|
||
end
|
||
|
||
#==============================================================================
|
||
# ■ Scene_Map
|
||
#------------------------------------------------------------------------------
|
||
# マップ画面の処理を行うクラスです。
|
||
#==============================================================================
|
||
|
||
class Scene_Map < Scene_Base
|
||
#--------------------------------------------------------------------------
|
||
# ● 場所移動の処理 ※マップがフィールドの場合アイテム復活実行
|
||
#--------------------------------------------------------------------------
|
||
alias item_revive_perform_transfer perform_transfer
|
||
def perform_transfer
|
||
item_revive_perform_transfer
|
||
$game_player.item_stack_revive if $game_map.note.include?("<スイッチオフ>")
|
||
end
|
||
end |