- #============================================================================== 
- # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息 
- #==============================================================================  
- #◆◇◆◇◆-----XRXS54. マップ上で簡易ウィンドウ表示 ver1.0 -----◇◆◇◆◇ 
- # by 刻宮 
-   
- # 「ディフォルト機能 & 仕様」 
- #  ・$WIN_2 = true。としても、スイッチがONでかつ、アクターが存在しなければ 
- #   ウィンドウは表示されません。この3要素が揃った時にウィンドウを表示します。 
- #  ・逆にこの要素が一つでも欠けるとウィンドウは自動的に非表示になります。 
- #  ・ツクール開始時はスイッチはOFFなので、ONにしないと表示されません。 
- #------------------------------------------------------------------ 
- # カスタマイズポイント 
- #(*存在しないスイッチを指定されるとエラーになります。) 
-   
-   
- #---------------------------------------------------------------- 
- # 使用说明(66RPG提示:本脚本其实难度不是很高,建议学习RGSS略有心得 
- #           的人尝试自己编写一个同类功能窗口) 
- #---------------------------------------------------------------- 
-  WIN_1     = true  # 是否使用1号窗口,true为使用,false为不使用 
-  SWITVH_1  = 56   # 当此编号开关打开的时候窗口显示。如设置为40则40号开关打开,1号窗口显示 
-  OPACITY_1 = 0 # 1号窗口透明度 
-  X_1       = 320     # 1号窗口X坐标 
-  Y_1       = 384   # 1号窗口Y坐标 
-   
-  $WIN_2    = true  # 是否使用2号窗口,true为使用,false为不使用 
-  SWITVH_2  = 57    # 当此编号开关打开的时候窗口显示。如设置为41则41号开关打开,2号窗口显示 
-  OPACITY_2 = 0   # 2号窗口透明度 
-  X_2       = 160   # 2号窗口X坐标 
-  Y_2       = 384   # 2号窗口Y坐标 
-   
-  WIN_3     = true  # 是否使用3号窗口,true为使用,false为不使用 
-  SWITVH_3  = 42    # 当此编号开关打开的时候窗口显示。如设置为42则42号开关打开,3号窗口显示 
-  OPACITY_3 = 255   # 3号窗口透明度 
-  X_3       = 320   # 3号窗口X坐标 
-  Y_3       = 384   # 3号窗口Y坐标 
-   
-  WIN_4     = true  # 是否使用4号窗口,true为使用,false为不使用 
-  SWITVH_4  = 43    # 当此编号开关打开的时候窗口显示。如设置为43则43号开关打开,4号窗口显示 
-  OPACITY_4 = 255   # 4号窗口透明度 
-  X_4       = 480   # 4号窗口X坐标 
-  Y_4       = 384   # 4号窗口Y坐标 
-   
-  SET_SP    = [true,true,true,true] # 决定各个窗口是否显示SP数值,true为显示,false为不显示。 
-  OPTION    =44   # 决定在对话的时候是否让窗口隐藏的开关编号。 
-                    # 比如设置为44,则当44号开关打开,则在对话的时候窗口隐藏 
-                    # 否则窗口不隐藏。 
-   
-   
- #========================================================================= 
- # ■ Scene_Map 
- #========================================================================= 
- class Scene_Map 
-  #--------------------------------------------------------------------- 
-  # ● フレーム更新 
-  #---------------------------------------------------------------------  
-  alias main_tokimiya main 
-  def main 
-    # 簡易ウィンドウ1を作成 
-      @simple_window1 = Window_MapStatus.new(X_1,Y_1,0) 
-         @simple_window1.opacity = OPACITY_1 
-      @simple_window1.visible = $game_switches[SWITVH_1] 
-      unless $game_party.actors.size > 0 
-        @simple_window1.visible = false 
-      end 
-    # 簡易ウィンドウ2を作成 
-      @simple_window2 = Window_MapStatus.new(X_2,Y_2,1) 
-      @simple_window2.opacity = OPACITY_2 
-      @simple_window2.visible = $game_switches[SWITVH_2] 
-      unless $game_party.actors.size > 1 
-        @simple_window2.visible = false 
-      end 
-    # 簡易ウィンドウ3を作成 
-      @simple_window3 = Window_MapStatus.new(X_3,Y_3,2) 
-      @simple_window3.opacity = OPACITY_3 
-      @simple_window3.visible = $game_switches[SWITVH_3] 
-      unless $game_party.actors.size > 2 
-        @simple_window3.visible = false 
-      end 
-    # 簡易ウィンドウ4を作成 
-      @simple_window4 = Window_MapStatus.new(X_4,Y_4,3) 
-      @simple_window4.opacity = OPACITY_4 
-      @simple_window4.visible = $game_switches[SWITVH_4] 
-      unless $game_party.actors.size > 3 
-        @simple_window4.visible = false 
-      end 
-   
-      main_tokimiya   # 旧メソッドの呼び出し 
-   
-    # 簡易ウィンドウの解放 
-      @simple_window1.dispose 
-      @simple_window2.dispose 
-      @simple_window3.dispose 
-      @simple_window4.dispose 
-  end 
-   
-  #--------------------------------------------------------------------- 
-  # ● フレーム更新 
-  #---------------------------------------------------------------------  
-  alias update_tokimiya update 
-  def update 
-    update_tokimiya   # 旧メソッドの呼び出し 
-    # 以前のパラメーターと相違があれば、内容を更新する。 
-    # 
-    # ウィンドウ1の更新。 
-    if WIN_1 == true and $game_party.actors.size > 0 
-      # データの更新 
-      actor = $game_party.actors[0] 
-      factor_1 = @simple_window1.before_1[0] != actor.name 
-      factor_2 = @simple_window1.before_1[1] != actor.hp 
-      factor_3 = @simple_window1.before_1[2] != actor.sp 
-      if factor_1 or factor_2 or factor_3 
-        @simple_window1.before_1[0] = actor.name 
-        @simple_window1.before_1[1] = actor.hp 
-        @simple_window1.before_1[2] = actor.sp 
-        @simple_window1.refresh(0) 
-      end 
-      # 非表示機能の実行 
-      if @message_window.visible == true and $game_switches[OPTION] == true 
-        @simple_window1.before_1[3] = false 
-        @simple_window1.visible = false 
-      elsif @simple_window1.before_1[3] != $game_switches[SWITVH_1] 
-        @simple_window1.before_1[3] = $game_switches[SWITVH_1] 
-        @simple_window1.visible = $game_switches[SWITVH_1] 
-      end 
-    end 
-   
-    # ウィンドウ2の更新。 
-    if $WIN_2 == true and $game_party.actors.size > 1 
-      # データの更新 
-      actor = $game_party.actors[1] 
-      factor_1 = @simple_window2.before_2[0] != actor.name 
-      factor_2 = @simple_window2.before_2[1] != actor.hp 
-      factor_3 = @simple_window2.before_2[2] != actor.sp 
-      if factor_1 or factor_2 or factor_3 
-        @simple_window2.before_2[0] = actor.name 
-        @simple_window2.before_2[1] = actor.hp 
-        @simple_window2.before_2[2] = actor.sp 
-        @simple_window2.refresh(1) 
-        # ウィンドウを強制的に生成 
-        @simple_window2.before_2[3] = true 
-        @simple_window2.visible = true 
-      end 
-      # 非表示機能の実行 
-      if @message_window.visible == true and $game_switches[OPTION] == true 
-        @simple_window2.before_2[3] = false 
-        @simple_window2.visible = false 
-      elsif @simple_window2.before_2[3] != $game_switches[SWITVH_2] 
-        @simple_window2.before_2[3] = $game_switches[SWITVH_2] 
-        @simple_window2.visible = $game_switches[SWITVH_2] 
-      end 
-    # アクターが存在しないのにウィンドウが表示されたままの場合。 
-    elsif @simple_window2.visible == true and @simple_window2.before_2 != nil 
-      # ウィンドウを消去。 
-      @simple_window2.before_2[3] = false 
-      @simple_window2.visible = false 
-    end 
-   
-    # ウィンドウ3の更新。 
-    if WIN_3 == true and $game_party.actors.size > 2 
-      # データの更新 
-      actor = $game_party.actors[2] 
-      factor_1 = @simple_window3.before_3[0] != actor.name 
-      factor_2 = @simple_window3.before_3[1] != actor.hp 
-      factor_3 = @simple_window3.before_3[2] != actor.sp 
-      if factor_1 or factor_2 or factor_3 
-        @simple_window3.before_3[0] = actor.name 
-        @simple_window3.before_3[1] = actor.hp 
-        @simple_window3.before_3[2] = actor.sp 
-        @simple_window3.refresh(2) 
-        # ウィンドウを強制的に生成 
-        @simple_window3.before_3[3] = true 
-        @simple_window3.visible = true 
-      end 
-      # 非表示機能の実行 
-      if @message_window.visible == true and $game_switches[OPTION] == true 
-        @simple_window3.before_3[3] = false 
-        @simple_window3.visible = false 
-      elsif @simple_window3.before_3[3] != $game_switches[SWITVH_3] 
-        @simple_window3.before_3[3] = $game_switches[SWITVH_3] 
-        @simple_window3.visible = $game_switches[SWITVH_3] 
-      end 
-    # アクターが存在しないのにウィンドウが表示されたままの場合。 
-    elsif @simple_window3.visible == true and @simple_window3.before_3 != nil 
-      # ウィンドウを消去。 
-      @simple_window3.before_3[3] = false 
-      @simple_window3.visible = false 
-    end 
-   
-    # ウィンドウ4の更新。 
-    if WIN_4 == true and $game_party.actors.size > 3 
-      # データの更新 
-      actor = $game_party.actors[3] 
-      factor_1 = @simple_window4.before_4[0] != actor.name 
-      factor_2 = @simple_window4.before_4[1] != actor.hp 
-      factor_3 = @simple_window4.before_4[2] != actor.sp 
-      if factor_1 or factor_2 or factor_3 
-        @simple_window4.before_4[0] = actor.name 
-        @simple_window4.before_4[1] = actor.hp 
-        @simple_window4.before_4[2] = actor.sp 
-        @simple_window4.refresh(3) 
-        # ウィンドウを強制的に生成 
-        @simple_window4.before_4[3] = true 
-        @simple_window4.visible = true 
-      end 
-      # 非表示機能の実行 
-      if @message_window.visible == true and $game_switches[OPTION] == true 
-        @simple_window4.before_4[3] = false 
-        @simple_window4.visible = false 
-      elsif @simple_window4.before_4[3] != $game_switches[SWITVH_4] 
-        @simple_window4.before_4[3] = $game_switches[SWITVH_4] 
-        @simple_window4.visible = $game_switches[SWITVH_4] 
-      end 
-    # アクターが存在しないのにウィンドウが表示されたままの場合。 
-    elsif @simple_window4.visible == true and @simple_window4.before_4 != nil 
-      # ウィンドウを消去。 
-      @simple_window4.before_4[3] = false 
-      @simple_window4.visible = false 
-    end 
-  end 
- end 
-   
-   
-   
- #========================================================================= 
- # ■ Window_MapStatus,脚本来自[url]www.66rpg.com[/url],转载请注意说明 
- #========================================================================= 
- class Window_MapStatus < Window_Base 
-  #-------------------------------------------------------------------------- 
-  # ○ 公開インスタンス変数 
-  #-------------------------------------------------------------------------- 
-  attr_accessor   :before_1              # 更新前のウィンドウ1のパラメーター 
-  attr_accessor   :before_2              # 更新前のウィンドウ2のパラメーター 
-  attr_accessor   :before_3              # 更新前のウィンドウ3のパラメーター 
-  attr_accessor   :before_4              # 更新前のウィンドウ4のパラメーター 
-  #--------------------------------------------------------------------- 
-  # ● フレーム更新 
-  #---------------------------------------------------------------------  
-  def initialize(x,y,id) 
-    #super(x,y,160,96) 
-    super(0,0,640,128) 
-    self.contents = Bitmap.new(width - 32, height - 32) 
-    self.contents.font.size = 18 
-    @before_1=[] 
-    @before_2=[] 
-    @before_3=[] 
-    @before_4=[] 
-     # 現段階のアクターのパラメーターと可視状態を記憶。 
-    data 
-    # 項目の描画。 
-    refresh(id) 
-  end 
-  #-------------------------------------------------------------------------- 
-  # ● 項目の描画 
-  #--------------------------------------------------------------------------  
-  def data 
-    # アクター1の記憶(ただし、パーティが1名以上の場合) 
-    if $game_party.actors.size > 0 
-      actor = $game_party.actors[0] 
-      @before_1 = [actor.name, actor.hp, actor.sp,true] 
-    end 
-    # アクター2の記憶(ただし、パーティが2名以上の場合) 
-    if $game_party.actors.size > 1 
-      actor = $game_party.actors[1] 
-      @before_2 = [actor.name, actor.hp, actor.sp,true] 
-    end 
-    # アクター3の記憶(ただし、パーティが3名以上の場合) 
-    if $game_party.actors.size > 2 
-      actor = $game_party.actors[2] 
-      @before_3 = [actor.name, actor.hp, actor.sp,true] 
-    end 
-    # アクター3の記憶(ただし、パーティが4名以上の場合) 
-    if $game_party.actors.size > 3 
-      actor = $game_party.actors[3] 
-      @before_4 = [actor.name, actor.hp, actor.sp,true] 
-    end 
-  end 
-  #-------------------------------------------------------------------------- 
-  # ● 項目の描画 
-  #-------------------------------------------------------------------------- 
-  def refresh(id) 
-    # 再描画のために一旦内容を破棄する 
-    self.contents.clear 
-    # 対応するアクターがいなければ、何もせずに終了する。 
-    actor = $game_party.actors[id] 
-    if actor == nil 
-      return 
-    end 
-    # 名前の描画 
-    draw_actor_name(actor, 0, -5) 
-    # HPの描画 
-    if SET_SP[id] 
-      draw_actor_hp_bar(actor, 0, 18) 
-    else 
-      draw_actor_hp_bar(actor, 0, 28) 
-    end 
-    # SPの描画 
-    if SET_SP[id] 
-      draw_actor_sp_bar(actor, 0, 36) 
-    end 
-  end 
- end 
-   
-   
- class Window_Base < Window 
-  #-------------------------------------------------------------------------- 
-  # ● HP ゲージの描画 
-  #-------------------------------------------------------------------------- 
-  # オリジナルのHP描画を draw_actor_hp_original と名前変更 
-  def draw_actor_hp_bar(actor, x, y, width = 144) 
-    # 変数rateに 現在のHP/MHPを代入 
-    if actor.maxhp != 0 
-      rate = actor.hp.to_f / actor.maxhp 
-    else 
-      rate = 0 
-    end 
-    # plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正 
-    # plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅 
-    # align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め 
-    # align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め 
-    # align3:ゲージタイプ 0:左詰め 1:右詰め 
-    plus_x = 0 
-    rate_x = -20#HP条的X 
-    plus_y = 25#HP条的Y 
-    plus_width = 0 
-    rate_width = 50 #HP条的高 
-    height = 10#HP条的高 
-    align1 = 1 
-    align2 = 2 
-    align3 = 0 
-    # グラデーション設定 grade1:空ゲージ grade2:実ゲージ 
-    # (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション(激重)) 
-    grade1 = 1 
-    grade2 = 0 
-    # 色設定。color1:外枠,color2:中枠 
-    # color3:空ゲージダークカラー,color4:空ゲージライトカラー 
-    # color5:実ゲージダークカラー,color6:実ゲージライトカラー 
-    color1 = Color.new(0, 0, 0, 192) 
-    color2 = Color.new(255, 255, 192, 192) 
-    color3 = Color.new(0, 0, 0, 192) 
-    color4 = Color.new(64, 0, 0, 192) 
-    color5 = Color.new(80 - 24 * rate, 80 * rate, 14 * rate, 192) 
-    color6 = Color.new(240 - 72 * rate, 240 * rate, 62 * rate, 192) 
-   
-   
-   
-   
-   
-   
-   
-    # 変数spに描画するゲージの幅を代入 
-    if actor.maxhp != 0 
-      hp = (width + plus_width) * actor.hp * rate_width / 100 / actor.maxhp 
-    else 
-      hp = 0 
-    end 
-    # ゲージの描画 
-    gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y, 
-                width, plus_width + width * rate_width / 100, 
-                height, hp, align1, align2, align3, 
-                color1, color2, color3, color4, color5, color6, grade1, grade2) 
-   
-  end 
-  #-------------------------------------------------------------------------- 
-  # ● SP ゲージの描画 
-  #-------------------------------------------------------------------------- 
-  # オリジナルのSP描画を draw_actor_sp_original と名前変更 
-   
-  def draw_actor_sp_bar(actor, x, y, width = 144) 
-    # 変数rateに 現在のSP/MSPを代入 
-    if actor.maxsp != 0 
-      rate = actor.sp.to_f / actor.maxsp 
-    else 
-      rate = 1 
-    end 
-    # plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正 
-    # plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅 
-    # align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め 
-    # align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め 
-    # align3:ゲージタイプ 0:左詰め 1:右詰め 
-    plus_x = 0 
-    rate_x = -20#SP条的X 
-    plus_y = 25#SP条的Y 
-    plus_width = 0 
-    rate_width = 50 #SP条宽 
-    height = 10#SP条的高 
-    align1 = 1 
-    align2 = 2 
-    align3 = 0 
-    # グラデーション設定 grade1:空ゲージ grade2:実ゲージ 
-    # (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション(激重)) 
-    grade1 = 1 
-    grade2 = 0 
-    # 色設定。color1:外枠,color2:中枠 
-    # color3:空ゲージダークカラー,color4:空ゲージライトカラー 
-    # color5:実ゲージダークカラー,color6:実ゲージライトカラー 
-    color1 = Color.new(0, 0, 0, 192) 
-    color2 = Color.new(255, 255, 192, 192) 
-    color3 = Color.new(0, 0, 0, 192) 
-    color4 = Color.new(0, 64, 0, 192) 
-    color5 = Color.new(14 * rate, 80 - 24 * rate, 80 * rate, 192) 
-    color6 = Color.new(62 * rate, 240 - 72 * rate, 240 * rate, 192) 
-    # 変数spに描画するゲージの幅を代入 
-    if actor.maxsp != 0 
-      sp = (width + plus_width) * actor.sp * rate_width / 100 / actor.maxsp 
-    else 
-      sp = (width + plus_width) * rate_width / 100 
-    end 
-    # ゲージの描画 
-    gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y, 
-                width, plus_width + width * rate_width / 100, 
-                height, sp, align1, align2, align3, 
-                color1, color2, color3, color4, color5, color6, grade1, grade2) 
-    # オリジナルのSP描画処理を呼び出し 
-   
-  end   
- end 
-   
-   
-  def gauge_rect(x, y, rect_width, width, height, gauge, align1, align2, align3, 
-                color1, color2, color3, color4, color5, color6, grade1, grade2) 
-    case align1 
-    when 1 
-      x += (rect_width - width) / 2 
-    when 2 
-      x += rect_width - width 
-    end 
-    case align2 
-    when 1 
-      y -= height / 2 
-    when 2 
-      y -= height 
-    end 
-    # 枠描画 
-    self.contents.fill_rect(x, y, width, height, color1) 
-    self.contents.fill_rect(x + 1, y + 1, width - 2, height - 2, color2) 
-    if align3 == 0 
-      if grade1 == 2 
-        grade1 = 3 
-      end 
-      if grade2 == 2 
-        grade2 = 3 
-      end 
-    end 
-    if (align3 == 1 and grade1 == 0) or grade1 > 0 
-      color = color3 
-      color3 = color4 
-      color4 = color 
-    end 
-    if (align3 == 1 and grade2 == 0) or grade2 > 0 
-      color = color5 
-      color5 = color6 
-      color6 = color 
-    end 
-    # 空ゲージの描画 
-    self.contents.gradation_rect(x + 2, y + 2, width - 4, height - 4, 
-                                  color3, color4, grade1) 
-    if align3 == 1 
-      x += width - gauge 
-    end 
-    # 実ゲージの描画 
-    self.contents.gradation_rect(x + 2, y + 2, gauge - 4, height - 4, 
-                                  color5, color6, grade2) 
-  end 
-   
-   
-   
-   
-   
- class Bitmap 
-  #-------------------------------------------------------------------------- 
-  # ● 矩形をグラデーション表示 
-  #     color1 : スタートカラー 
-  #     color2 : エンドカラー 
-  #     align  :  0:横にグラデーション 
-  #               1:縦にグラデーション 
-  #               2:斜めにグラデーション(激重につき注意) 
-  #-------------------------------------------------------------------------- 
-  def gradation_rect(x, y, width, height, color1, color2, align = 0) 
-    if align == 0 
-      for i in x...x + width 
-        red   = color1.red + (color2.red - color1.red) * (i - x) / (width - 1) 
-        green = color1.green + 
-                (color2.green - color1.green) * (i - x) / (width - 1) 
-        blue  = color1.blue + 
-                (color2.blue - color1.blue) * (i - x) / (width - 1) 
-        alpha = color1.alpha + 
-                (color2.alpha - color1.alpha) * (i - x) / (width - 1) 
-        color = Color.new(red, green, blue, alpha) 
-        fill_rect(i, y, 1, height, color) 
-      end 
-    elsif align == 1 
-      for i in y...y + height 
-        red   = color1.red + 
-                (color2.red - color1.red) * (i - y) / (height - 1) 
-        green = color1.green + 
-                (color2.green - color1.green) * (i - y) / (height - 1) 
-        blue  = color1.blue + 
-                (color2.blue - color1.blue) * (i - y) / (height - 1) 
-        alpha = color1.alpha + 
-                (color2.alpha - color1.alpha) * (i - y) / (height - 1) 
-        color = Color.new(red, green, blue, alpha) 
-        fill_rect(x, i, width, 1, color) 
-      end 
-    elsif align == 2 
-      for i in x...x + width 
-        for j in y...y + height 
-          red   = color1.red + (color2.red - color1.red) * 
-                  ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2 
-          green = color1.green + (color2.green - color1.green) * 
-                  ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2 
-          blue  = color1.blue + (color2.blue - color1.blue) * 
-                  ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2 
-          alpha = color1.alpha + (color2.alpha - color1.alpha) * 
-                  ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2 
-          color = Color.new(red, green, blue, alpha) 
-          set_pixel(i, j, color) 
-        end 
-      end 
-    elsif align == 3 
-      for i in x...x + width 
-        for j in y...y + height 
-          red   = color1.red + (color2.red - color1.red) * 
-                ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2 
-          green = color1.green + (color2.green - color1.green) * 
-                ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2 
-          blue  = color1.blue + (color2.blue - color1.blue) * 
-                ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2 
-          alpha = color1.alpha + (color2.alpha - color1.alpha) * 
-                ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2 
-          color = Color.new(red, green, blue, alpha) 
-          set_pixel(i, j, color) 
-        end 
-      end 
-    end 
-  end 
- end 
-   
-   
-   
-   
- #============================================================================== 
- # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息 
- #==============================================================================