#============================================================================== # ■ RGSS2&3 十字方向イベントセルフスイッチ変更 Ver1.00a by 星潟 #------------------------------------------------------------------------------ # 自分自身と十字方向に一定距離離れた位置にある # 指定したキーワードを名前に含むイベントのセルフスイッチの状態を逆転させると共に # ONにした場合は指定した変数の値を+1、OFFにした場合は指定した変数の値を-1します。 #============================================================================== # イベントコマンドのスクリプトを使用します。 #============================================================================== # 例. # cross_ss_rev(10,"A",2,"連動") # # 値が変更される変数IDを10、 # 切り替える対象のセルフスイッチをA、 # 自分自身と、2タイル分離れた位置にいる名前に連動を含むイベントの # セルフスイッチAの状態をAをtrueであればfalse、falseであればtrueに変えます。 # また、trueからfalseとなった数分、変数ID10の値が減少し # falseからtrueとなった数分、変数ID10の値が増加します。 #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # 十字方向イベントセルフスイッチ変更 #-------------------------------------------------------------------------- def cross_ss_rev(vid,sk,range,name = "") #同一マップでの処理でない場合は飛ばす。 return unless same_map? #起動イベント自身の情報を取得。 c = get_character(0) #起動イベント自身の座標を取得。 x = c.x y = c.y #現在のマップIDを取得。 mi = $game_map.map_id #セルフスイッチ用のキー情報を取得。 k = [mi,c.id,sk] #セルフスイッチ情報を取得。 s = $game_self_switches[k] #逆転後のセルフスイッチの状態を取得。 s2 = s ? false : true #セルフスイッチの真偽を逆転。 $game_self_switches[k] = s2 #現在のセルフスイッチの真偽で変数を増減。 $game_variables[vid] += s2 ? 1 : -1 #幅に応じた4方向の座標調整配列を用意。 a = [[range,0],[-range,0],[0,range],[0,-range]] #4方向の座標調整配列別に処理。 a.each {|b| #対象位置の座標情報を用意。 x2 = $game_map.round_x(x + b[0]) y2 = $game_map.round_y(y + b[1]) #対象座標が無効な場合は飛ばす。 next unless $game_map.valid?(x2,y2) #該当座標のイベント座標別に処理。 $game_map.events_xy(x2,y2).each {|e| #名前が該当しない場合は飛ばす。 next unless e.cross_ss_rev?(name) #セルフスイッチ用のキー情報を取得。 k = [mi,e.id,sk] #セルフスイッチ情報を取得。 s = $game_self_switches[k] #逆転後のセルフスイッチの状態を取得。 s2 = s ? false : true #セルフスイッチの真偽を逆転。 $game_self_switches[k] = s2 #現在のセルフスイッチの真偽で変数を増減。 $game_variables[vid] += s2 ? 1 : -1}} end #VX用処理 unless method_defined?(:create_fiber) #-------------------------------------------------------------------------- # 十字方向イベントセルフスイッチ変更 #-------------------------------------------------------------------------- alias cross_ss_rev_vx cross_ss_rev def cross_ss_rev(vid,sk,range,name = "") cross_ss_rev_vx(vid,sk,range,name) $game_map.need_refresh = true end #-------------------------------------------------------------------------- # イベント起動時のマップと同じか判定 #-------------------------------------------------------------------------- def same_map? @map_id == $game_map.map_id end end end class Game_Event < Game_Character #-------------------------------------------------------------------------- # 十字方向イベントセルフスイッチ変更の対象か? #-------------------------------------------------------------------------- def cross_ss_rev?(name) @event.name.include?(name) end end