| 
 
| 赞 | 168 |  
| VIP | 6 |  
| 好人卡 | 208 |  
| 积分 | 225 |  
| 经验 | 137153 |  
| 最后登录 | 2025-4-1 |  
| 在线时间 | 8598 小时 |  
 Lv5.捕梦者 
	梦石0 星屑22499 在线时间8598 小时注册时间2011-12-31帖子3361 | 
| 复制代码#----------------------------------------------------------------------------
#マップにウインドウ表示
#----------------------------------------------------------------------------
module MARU_MAP_WINDOW
  
  #★設定項目
  
  SWITCH = 1 #マップウインドウ表示に使用するスイッチ番号
             #該当スイッチONで表示、OFFで非表示
             
  MANPUKU = 2 #「満腹度」減少を有効にするスイッチ
              #このスイッチがOFFの時、満腹度及びHP(満腹度が0の時)は
              #減少しない。
              
  WINDOW = true  #ウインドウスキンを自作のモノにするかどうか
                  #「true」…自作ウインドウ
                  #「false」…デフォルトウインドウ
                  #trueにする場合、「system」フォルダに
                  #該当ウインドウを入れる事。
                  
                  
  #WINDOWをtrueにした場合の設定項目------------------------------------------
              
  W_NAME = [
  "backwin",  #自作ウインドウのファイル名(「system」フォルダを参照する)
  "backwin2",  #コンマ(,)で区切れば項目数を増やせます。
  "Actor1"
  ]
  
  W_NAME_V = 5 #自作ウインドウ画像変更に使う変数番号
               #この変数が0の時、W_NAME一番目の項目のファイル名を読みこみ、
               #1の時、W_NAME二番目の項目のファイルを読み込みます。
               #項目数を増やせば、3や4も指定出来ます。
               #(項目数-1)以上の数字は入れない事!エラーで強制終了します。
  
  W_X       = 6 #自作ウインドウ画像のX座標
  W_Y       = 7 #自作ウインドウ画像のY座標
  W_WSIZE   = 8 #自作ウインドウ画像の幅を決める変数番号
  W_HSIZE   = 9 #自作ウインドウ画像の高さを決める変数番号
  
                #自作ウインドウ描画スペースは544×96ピクセル。
                #画像の引き延ばし等は出来ません。
  
  OPACITY = 200       #自作ウインドウの透明度(0で透明、255で不透明)
  
  #---------------------------------------------------------------------------
  
  ACTOR  = 2 #ステータスを表示するアクターIDを参照する変数の番号
             #変数が0の時はアクターID1番のステータスを表示
             
  NAME   =  "満腹度"     #満腹度(仮)の名前
  VALUE  =  3            #満腹度(仮)の値を操作する変数の番号
  MVALUE =  4            #満腹度(仮)の値の最大値とする変数の番号
  STEP   =  10           #満腹度(仮)を1減らす歩数
  DAMEGE =  10           #満腹度(仮)が0の時、一歩毎に受けるHPダメージ
                         
  
  #★設定終わり
end
#==============================================================================
# ■ Scene_Map
#------------------------------------------------------------------------------
#  マップ画面の処理を行うクラスです。
#==============================================================================
class Scene_Map < Scene_Base
  #--------------------------------------------------------------------------
  # ● 全ウィンドウの作成
  #--------------------------------------------------------------------------
  alias ma__create_all_windows create_all_windows
  def create_all_windows
    ma__create_all_windows #既存のウインドウ作成
    create_mapwin_window   #「マップウインドウ作成」メソッドへ
  end
  #--------------------------------------------------------------------------
  # ● マップウインドウの作成
  #--------------------------------------------------------------------------
  def create_mapwin_window
    @map_window = Window_Mapwin.new #マップウインドウを作る
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias ma_update update
  def update
    ma_update  #既存のアップデート
    @map_window.update #マップウインドウのアップデート
  end
end
#==============================================================================
# ■ Window_Mapwin
#------------------------------------------------------------------------------
#  マップに表示するウィンドウです。
#==============================================================================
class Window_Mapwin < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(win_adjust1,win_adjust1,Graphics.width+win_adjust2,fitting_height(3)+win_adjust2)
    if $game_switches[MARU_MAP_WINDOW::SWITCH] == false
      self.visible = false
    else
      self.visible = true
    end
    if $game_variables[MARU_MAP_WINDOW::ACTOR] != 0
      @actorsta = $game_actors[$game_variables[MARU_MAP_WINDOW::ACTOR]]
    else
      @actorsta = $game_actors[1]
    end
    refresh
  end
  #--------------------------------------------------------------------------
  # ● ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    return 140
  end
  #--------------------------------------------------------------------------
  # ● ウインドウの更新
  #--------------------------------------------------------------------------
  def update
    super
    if $game_switches[MARU_MAP_WINDOW::SWITCH] == false
      self.visible = false
      return
    else
      self.visible = true
    end
    if $game_variables[MARU_MAP_WINDOW::ACTOR] != 0
      @actorsta = $game_actors[$game_variables[MARU_MAP_WINDOW::ACTOR]]
    else
      @actorsta = $game_actors[1]
    end
    #値のチェック。描画時の値と違っていたらリフレッシュする。
    actors = @actorsta.id
    hpp = @actorsta.hp
    mpp = @actorsta.mp
    mhpp = @actorsta.mhp
    mmpp = @actorsta.mmp
    gold   = $game_party.gold
    mname = $game_map.display_name
    expp = @actorsta.exp
    value = $game_variables[MARU_MAP_WINDOW::VALUE]
    mvalue = $game_variables[MARU_MAP_WINDOW::MVALUE]
    if MARU_MAP_WINDOW::WINDOW
     skin = $game_variables[MARU_MAP_WINDOW::W_NAME_V]
     x = $game_variables[MARU_MAP_WINDOW::W_X]
     y = $game_variables[MARU_MAP_WINDOW::W_Y]
     width = $game_variables[MARU_MAP_WINDOW::W_WSIZE]
     height = $game_variables[MARU_MAP_WINDOW::W_HSIZE]
     if actors != @lastactor or gold != @last_g or mname != @last_name or
       value != @last_value or mvalue != @last_mvalue or hpp != @last_hp or 
       mpp != @last_mp or mhpp != @last_mhp or mmpp != @last_mmp or
       expp != @last_exp or skin != @last_skin or x != @last_x or 
       y != @last_y or width != @last_width or height != @last_height
      refresh
     end
    else
     if actors != @lastactor or gold != @last_g or mname != @last_name or
       value != @last_value or mvalue != @last_mvalue or hpp != @last_hp or 
       mpp != @last_mp or mhpp != @last_mhp or mmpp != @last_mmp or
       expp != @last_exp
      refresh
     end
    end
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    if MARU_MAP_WINDOW::WINDOW
      self.opacity = 0
      bitmap = Cache.system(MARU_MAP_WINDOW::W_NAME[$game_variables[MARU_MAP_WINDOW::W_NAME_V]])
      rect = Rect.new(0,0,$game_variables[MARU_MAP_WINDOW::W_WSIZE],$game_variables[MARU_MAP_WINDOW::W_HSIZE])
      contents.blt($game_variables[MARU_MAP_WINDOW::W_X],$game_variables[MARU_MAP_WINDOW::W_Y], bitmap, rect,MARU_MAP_WINDOW::OPACITY)
      bitmap.dispose
    end
    #名前・ステータス描写
    draw_actor_name(@actorsta,win_adjust3,win_adjust3,96)
    draw_actor_level(@actorsta,win_adjust3,24+win_adjust3)
    draw_actor_hp(@actorsta, 96+win_adjust3, win_adjust3)
    draw_actor_mp(@actorsta, 96+win_adjust3, 24+win_adjust3)
    #マップ情報描写
    change_color(system_color)
    draw_text(230+win_adjust3,win_adjust3,165,line_height, "現在地")
    change_color(normal_color)
    draw_text(230+win_adjust3,24+win_adjust3,165,line_height, $game_map.display_name)
    #経験値描写
    draw_actor_next_exp(@actorsta, 395+win_adjust3, win_adjust3,120)
    s_next = sprintf("Next")
    change_color(system_color)
    draw_text(395+win_adjust3, win_adjust3, 140, line_height, s_next)
    change_color(normal_color)
    #所持金描写
    draw_currency_value($game_party.gold, Vocab::currency_unit, 395+win_adjust3, 24+win_adjust3, 120)
    #おまけ描写
    o_text = MARU_MAP_WINDOW::NAME
    value = $game_variables[MARU_MAP_WINDOW::VALUE]
    mvalue = $game_variables[MARU_MAP_WINDOW::MVALUE]
    draw_actor_hara_gauge(win_adjust3, 48+win_adjust3,220)
    change_color(system_color)
    draw_text(win_adjust3, 48+win_adjust3, 140, line_height, o_text)
    change_color(normal_color)
    draw_text(win_adjust3, 48+win_adjust3, 220, line_height, value.to_s + "/" + mvalue.to_s, 2)
    
    #描画時点での各値の取得
    @lastactor = @actorsta.id
    @last_hp = @actorsta.hp
    @last_mhp = @actorsta.mhp
    @last_mp = @actorsta.mp
    @last_mmp = @actorsta.mmp
    @last_g = $game_party.gold
    @last_name = $game_map.display_name
    @last_exp = @actorsta.exp
    @last_value = $game_variables[MARU_MAP_WINDOW::VALUE]
    @last_mvalue = $game_variables[MARU_MAP_WINDOW::MVALUE]
    if MARU_MAP_WINDOW::WINDOW
     @last_skin = $game_variables[MARU_MAP_WINDOW::W_NAME_V]
     @last_x = $game_variables[MARU_MAP_WINDOW::W_X]
     @last_y = $game_variables[MARU_MAP_WINDOW::W_Y]
     @last_width = $game_variables[MARU_MAP_WINDOW::W_WSIZE]
     @last_height = $game_variables[MARU_MAP_WINDOW::W_HSIZE]
    end
  end
  #--------------------------------------------------------------------------
  # ● 満腹度 の割合を取得
  #--------------------------------------------------------------------------
  def hara_rate
    $game_variables[MARU_MAP_WINDOW::MVALUE] > 0 ? $game_variables[MARU_MAP_WINDOW::VALUE].to_f / $game_variables[MARU_MAP_WINDOW::MVALUE] : 0
  end
  #--------------------------------------------------------------------------
  # ○ 満腹度 ゲージの描画
  #     actor : アクター
  #     x, y  : 描画先 X, Y 座標
  #     width : 幅
  #--------------------------------------------------------------------------
  def draw_actor_hara_gauge(x, y, width = 120)
    draw_gauge(KMS_GenericGauge::TP_IMAGE,
      x, y, width, hara_rate,
      KMS_GenericGauge::TP_OFFSET,
      KMS_GenericGauge::TP_LENGTH,
      KMS_GenericGauge::TP_SLOPE
    )
  end
  #--------------------------------------------------------------------------
  # ● ウインドウ位置調整その1
  #--------------------------------------------------------------------------
  def win_adjust1
    MARU_MAP_WINDOW::WINDOW ? -12 : 0
  end
  #--------------------------------------------------------------------------
  # ● ウインドウ位置調整その2
  #--------------------------------------------------------------------------
  def win_adjust2
    MARU_MAP_WINDOW::WINDOW ? 24 : 0
  end
  #--------------------------------------------------------------------------
  # ● ウインドウ位置調整その3
  #--------------------------------------------------------------------------
  def win_adjust3
    MARU_MAP_WINDOW::WINDOW ? 12 : 0
  end
end
  
#==============================================================================
# ■ Game_Party
#------------------------------------------------------------------------------
#  パーティを扱うクラスです。所持金やアイテムなどの情報が含まれます。このクラ
# スのインスタンスは $game_party で参照されます。
#==============================================================================
class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias hara_initialize initialize
  def initialize
    hara_initialize
    @haraheri = MARU_MAP_WINDOW::STEP
  end
  #--------------------------------------------------------------------------
  # ● プレイヤーが 1 歩動いたときの処理
  #--------------------------------------------------------------------------
  alias hara_on_player_walk on_player_walk
  def on_player_walk
    hara_on_player_walk
    manpuku
  end
  #--------------------------------------------------------------------------
  # ● 満腹度の処理
  #--------------------------------------------------------------------------
  def manpuku
    if $game_player.normal_walk?
      update_haraheri_steps if $game_switches[MARU_MAP_WINDOW::MANPUKU]
      update_haraheri_damege if $game_switches[MARU_MAP_WINDOW::MANPUKU]
    end
  end
  #--------------------------------------------------------------------------
  # ● 満腹度の歩数カウントを更新
  #--------------------------------------------------------------------------
  def update_haraheri_steps
    @haraheri -= 1 if @haraheri > 0
    if @haraheri == 0
      $game_variables[MARU_MAP_WINDOW::VALUE] -= 1 if $game_variables[MARU_MAP_WINDOW::VALUE] > 0
      @haraheri = MARU_MAP_WINDOW::STEP
    end
  end
  #--------------------------------------------------------------------------
  # ● 満腹度が0の時のダメージ更新
  #--------------------------------------------------------------------------
  def update_haraheri_damege
    if $game_variables[MARU_MAP_WINDOW::VALUE] == 0
    all_members.size.times{|i| $game_party.members[i].hp -= MARU_MAP_WINDOW::DAMEGE}
    end
  end
end
 | 
 评分
查看全部评分
 |