- #============================================================================== 
- # ■ VXAce-RGSS3-41 簡易メッセージ                           by Claimh 
- #------------------------------------------------------------------------------ 
- #   マップ上に簡易メッセージを表示します。 
- #------------------------------------------------------------------------------ 
- # ● 簡易メッセージ表示実行(イベント) 
- # show_msg(type, msg, num) 
- #    type  :項目番号 
- #               0  .. msgの内容を表示(制御文字も使用可能) 
- #               1  .. アイテムを入手(msgにアイテムID、numに個数を指定) 
- #               2  .. 武器を入手(msgに武器ID、numに個数を指定) 
- #               3  .. 防具を入手(msgに防具ID、numに個数を指定) 
- #               4  .. スキルを習得(msgにスキルID, numにアクターIDを指定) 
- #               5  .. レベルアップ(msgにアクターIDを指定) 
- #               6  .. 加入(msgにアクターIDを指定) 
- #               7  .. 離脱(msgにアクターIDを指定) 
- #               8  .. お金を入手(msgに金額を入れる) 
- #               20 .. クエスト開始(msgにIDを指定) ※「クエストシステム」必須 
- #               21 .. クエスト完了(msgにIDを指定) ※「クエストシステム」必須 
- #               22 .. 用語登録(msgにカテゴリ、numに用語IDを指定)※「用語辞典」必須 
- #    msg   :表示文字、ID情報(アイテム等)など 
- #    num   :個数(省略可能) 
- #------------------------------------------------------------------------------ 
- # ● メッセージ表示の強制停止(全停止) 
- # stop_msg 
- #   ※強制停止中は解除されるまで簡易メッセージ表示を行いません。 
- #     強制停止中にshow_msgが実行された場合はrestart_msg実行まで待たされます 
- #------------------------------------------------------------------------------ 
- # ● メッセージ表示の強制停止解除 
- # restart_msg 
- #============================================================================== 
-   
- module ShtMsg 
-   # スキンタイプ 
-   #    0 .. ウィンドウ 
-   #    1 .. 半透明ブラックボックス 
-   #    2 .. ピクチャ 
-   SKIN = 1 
-   # ウィンドウ背景の不透明度 
-   OPACITY = 160 
-   # ピクチャファイル(Graphics/System) 
-   PICT = "msg_skin" 
-   
-   # メッセージ矩形サイズ(x,yは未参照) 
-   RECT = Rect.new(0, 0, 160, 20) 
-   # 表示矩形(x,widthは未参照。yは最初のy位置, heightは表示する範囲) 
-   VIEW = Rect.new(0, Graphics.height * 2 / 3, 0, Graphics.height / 3) # 下のほう 
- #~   VIEW = Rect.new(0, 0, 0, Graphics.height / 3)  # 上のほう 
-   # 表示位置(高さ)のずらし幅 
-   OFST = 0 
-   
-   # スライドイン方向(true:左端から / false:右端から) 
-   SLD_DIR = false 
-   # スライド時間 
-   SLD_FRM = 8 
-   # 表示ウェイト時間 
-   WAIT = 100 
-   
-   # 固有名の着色(色index)   0..normal_color 
-   COLOR = 2 
-   # フォントサイズ 
-   FSZ = 14 
-   # 文字描画開始X位置 
-   STX = 4 
-   
-   # SE音(鳴らさない場合はnilにする) 
-   SE = RPG::SE.new("Chime2") 
-   
-   # メッセージ表示と同時に本処理(アイテム入手等)を実行する 
-   EXE = false 
- end 
-   
-   
-   
- #============================================================================== 
- # ■ Game_Interpreter 
- #============================================================================== 
- class Game_Interpreter 
-   #-------------------------------------------------------------------------- 
-   # ● 簡易メッセージ表示 
-   #     type  : 項目番号 
-   #     msg   : メッセージ 
-   #     num   : 個数(省略可能) 
-   #-------------------------------------------------------------------------- 
-   def show_msg(type, msg, num=0) 
-     if SceneManager.scene_is?(Scene_Map) 
-       SceneManager.scene.show_msg(type, msg, num) 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 簡易メッセージの強制停止 
-   #-------------------------------------------------------------------------- 
-   def stop_msg 
-     if SceneManager.scene_is?(Scene_Map) 
-       SceneManager.scene.stop_msg 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 簡易メッセージの強制停止解除 
-   #-------------------------------------------------------------------------- 
-   def restart_msg 
-     if SceneManager.scene_is?(Scene_Map) 
-       SceneManager.scene.restart 
-     end 
-   end 
- end 
-   
-   
- #============================================================================== 
- # ■ ShtMsg::Messenger 
- #============================================================================== 
- class ShtMsg::Messenger 
-   #-------------------------------------------------------------------------- 
-   # ● オブジェクト初期化 
-   #-------------------------------------------------------------------------- 
-   def initialize(type, msg, num) 
-     @type = type; @msg = msg; @num = num 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 簡易メッセージ表示内容 
-   #-------------------------------------------------------------------------- 
-   def text 
-     exe if ShtMsg::EXE 
-     c = ShtMsg::COLOR 
-     n = @num > 1 ? "#{@num}個" : "" 
-     case @type 
-     when 0;  return @msg 
-     when 1;  return "\\C[#{c}]#{$data_items[@msg].name}\\C[0]を#{n}入手" 
-     when 2;  return "\\C[#{c}]#{$data_weapons[@msg].name}\\C[0]を#{n}入手" 
-     when 3;  return "\\C[#{c}]#{$data_armors[@msg].name}\\C[0]を#{n}入手" 
-     when 4;  return "\\C[#{c}]#{$data_skills[@msg].name}\\C[0]を習得" 
-     when 5;  return "\\C[#{c}]#{$game_actors[@msg].name}\\C[0]がレベルアップ" 
-     when 6;  return "\\C[#{c}]#{$game_actors[@msg].name}\\C[0]が仲間になった" 
-     when 7;  return "\\C[#{c}]#{$game_actors[@msg].name}\\C[0]が離脱した…" 
-     when 8;  return "\\C[#{c}]#{@msg}#{Vocab::currency_unit}\\C[0]入手" 
-     when 20; return "『\\C[#{c}]#{$game_system.quest[@msg].name}\\C[0]』開始" 
-     when 21; return "『\\C[#{c}]#{$game_system.quest[@msg].name}\\C[0]』クリア" 
-     when 22; return "新語『\\C[#{c}]#{$game_system.dictionary[@msg][@num].name}\\C[0]』" 
-     end 
-     return "type error<#{@type},#{@msg}>" 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 本処理実行 
-   #-------------------------------------------------------------------------- 
-   def exe 
-     case @type 
-     when 1;  $game_party.gain_item($data_items[@msg], @num) if @num > 0 
-     when 2;  $game_party.gain_item($data_weapons[@msg], @num) if @num > 0 
-     when 3;  $game_party.gain_item($data_armors[@msg], @num) if @num > 0 
-     when 4;  $game_actors[@num].learn_skill(@msg) if @num > 0 
-     when 5;  $game_actors[@msg].level_up 
-     when 6;  $game_party.add_actor(@msg) 
-     when 7;  $game_party.remove_actor(@msg) 
-     when 8;  $game_party.gain_gold(@msg) 
-     when 20; $game_system.quest[@msg].quest_start 
-     when 21; $game_system.quest[@msg].quest_clear 
-     when 22; $game_system.dictionary[@msg][@num].show_flg = true if @num > 0 
-     end 
-   end 
- end 
-   
- #============================================================================== 
- # ■ Sprite_ShrtMsgrBack 
- #============================================================================== 
- class Sprite_ShrtMsgrBack < Sprite 
-   #-------------------------------------------------------------------------- 
-   # ● オブジェクト初期化 
-   #-------------------------------------------------------------------------- 
-   def initialize(x, y, z, bitmap) 
-     super(nil) 
-     self.bitmap = bitmap 
-     self.x = x; self.y = y; self.z = z 
-   end 
- end 
-   
- #============================================================================== 
- # ■ Window_ShrtMsgr 
- #============================================================================== 
- class Window_ShrtMsgr < Window_Base 
-   #-------------------------------------------------------------------------- 
-   # ● オブジェクト初期化 
-   #-------------------------------------------------------------------------- 
-   def initialize(msg, x, y, back) 
-     @count = 0 
-     @phase = 0 
-     super(x, y, ShtMsg::RECT.width, fitting_height(1)) 
-     self.opacity = 0 
-     self.back_opacity = ShtMsg::OPACITY 
-     [url=home.php?mod=space&uid=114926]@sprite[/url] = Sprite_ShrtMsgrBack.new(x, y+4, z-1, back) if ShtMsg::SKIN != 0 
-     refresh(msg) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 解放 
-   #-------------------------------------------------------------------------- 
-   def dispose 
-     @sprite.dispose if ShtMsg::SKIN != 0 
-     super 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● X位置の設定 
-   #-------------------------------------------------------------------------- 
-   def x=(x) 
-     super(x) 
-     @sprite.x = x if ShtMsg::SKIN != 0 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● Y位置の設定 
-   #-------------------------------------------------------------------------- 
-   def y=(y) 
-     super(y) 
-     @sprite.y = y if ShtMsg::SKIN != 0 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 行の高さを取得 
-   #-------------------------------------------------------------------------- 
-   def line_height 
-     ShtMsg::RECT.height 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 標準パディングサイズの取得 
-   #-------------------------------------------------------------------------- 
-   def standard_padding 
-     return 4 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● フォント設定のリセット 
-   #-------------------------------------------------------------------------- 
-   def reset_font_settings 
-     change_color(normal_color) 
-     contents.font.size = ShtMsg::FSZ 
-     contents.font.bold = false 
-     contents.font.italic = false 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● リフレッシュ 
-   #-------------------------------------------------------------------------- 
-   def refresh(msg) 
-     contents.clear 
-     draw_text_ex(ShtMsg::STX, 0, msg.text) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 簡易メッセージの強制停止 
-   #-------------------------------------------------------------------------- 
-   def stop 
-     update_phase while @phase == 0 
-     @count = ShtMsg::WAIT / 2 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● フレーム更新 
-   #-------------------------------------------------------------------------- 
-   def update 
-     return if self.disposed? 
-     super 
-     update_phase 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● フレーム更新 
-   #-------------------------------------------------------------------------- 
-   def update_phase 
-     case @phase 
-     when 0 
-       @phase += 1 if update_slidein and update_fadein 
-     when 1 
-       @phase += 1 if (@count += 1) >= ShtMsg::WAIT 
-     when 2 
-       dispose if update_slideout and update_fadeout 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● フレーム更新 : スライドイン 
-   #-------------------------------------------------------------------------- 
-   def update_slidein 
-     w = ShtMsg::RECT.width / ShtMsg::SLD_FRM 
-     if ShtMsg::SLD_DIR 
-       return true if self.x >= 0 
-       self.x += w 
-       self.x = 0 if self.x >= 0 
-     else 
-       xx = Graphics.width - ShtMsg::RECT.width 
-       return true if self.x <= xx 
-       self.x -= w 
-       self.x = xx if self.x <= xx 
-     end 
-     return false 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● フレーム更新 : スライドアウト 
-   #-------------------------------------------------------------------------- 
-   def update_slideout 
-     w = ShtMsg::RECT.width / ShtMsg::SLD_FRM 
-     if ShtMsg::SLD_DIR 
-       xx = 0 - ShtMsg::RECT.width 
-       return true if self.x <= xx 
-       self.x -= w 
-       self.x = xx if self.x <= xx 
-     else 
-       return true if self.x >= Graphics.width 
-       self.x += w 
-       self.x = Graphics.width if self.x >= Graphics.width 
-     end 
-     return false 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● フレーム更新 : フェードイン 
-   #-------------------------------------------------------------------------- 
-   def update_fadein 
-     op = 255 / ShtMsg::SLD_FRM 
-     wp = ShtMsg::OPACITY / ShtMsg::SLD_FRM 
-     if ShtMsg::SKIN == 0 
-       return true if self.opacity = 255 
-       self.opacity += op 
-       self.opacity = 255 if self.opacity >= 255 
-     else 
-       return true 
-     end 
-     return false 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● フレーム更新 : フェードアウト 
-   #-------------------------------------------------------------------------- 
-   def update_fadeout 
-     op = 255 / ShtMsg::SLD_FRM 
-     wp = ShtMsg::OPACITY / ShtMsg::SLD_FRM 
-     if ShtMsg::SKIN == 0 
-       return true if self.opacity = 0 and self.back_opacity == 0 and self.contents_opacity == 0 
-       self.opacity -= op 
-       self.back_opacity -= wp 
-       self.contents_opacity -= op 
-       self.opacity = 0 if self.opacity <= 0 
-       self.back_opacity = 0 if self.back_opacity <= 0 
-       self.contents_opacity = 0 if self.contents_opacity <= 0 
-     else 
-       return true if self.contents_opacity == 0 and @sprite.opacity == 0 
-       self.contents_opacity -= op 
-       @sprite.opacity -= wp 
-       self.contents_opacity = 0 if self.contents_opacity <= 0 
-       @sprite.opacity = 0 if @sprite.opacity <= 0 
-     end 
-     return false 
-   end 
- end 
-   
- #============================================================================== 
- # ■ ShtMsg::MsgManager 
- #============================================================================== 
- class ShtMsg::MsgManager 
-   #-------------------------------------------------------------------------- 
-   # ● オブジェクト初期化 
-   #-------------------------------------------------------------------------- 
-   def initialize 
-     @msg = [] 
-     [url=home.php?mod=space&uid=33409]@Stk[/url] = [] 
-     [url=home.php?mod=space&uid=76426]@stop[/url] = false 
-     create_back_bitmap 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 解放 
-   #-------------------------------------------------------------------------- 
-   def dispose 
-     @msg.each {|m| m.dispose} 
-     @bitmap.dispose if ShtMsg::SKIN == 1 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 背景ビットマップの作成 
-   #-------------------------------------------------------------------------- 
-   def create_back_bitmap 
-     case ShtMsg::SKIN 
-     when 1 
-       width  = ShtMsg::RECT.width 
-       height = ShtMsg::RECT.height 
-       @bitmap = Bitmap.new(width, height) 
-       rect1 = Rect.new(0, 0, width, 4) 
-       rect2 = Rect.new(0, 4, width, height - 8) 
-       rect3 = Rect.new(0, height - 4, width, 4) 
-       @bitmap.gradient_fill_rect(rect1, back_color2, back_color1, true) 
-       @bitmap.fill_rect(rect2, back_color1) 
-       @bitmap.gradient_fill_rect(rect3, back_color1, back_color2, true) 
-     when 2 
-       @bitmap = Cache.system(ShtMsg::PICT) 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 背景色 1 の取得 
-   #-------------------------------------------------------------------------- 
-   def back_color1 
-     Color.new(0, 0, 0, 160) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 背景色 2 の取得 
-   #-------------------------------------------------------------------------- 
-   def back_color2 
-     Color.new(0, 0, 0, 0) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 初期X位置 
-   #-------------------------------------------------------------------------- 
-   def start_x 
-     ShtMsg::SLD_DIR ? (0 - ShtMsg::RECT.width) : (Graphics.width) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● メッセージセットアップ 
-   #-------------------------------------------------------------------------- 
-   def setup(type, msg, num=0) 
-     search_y(ShtMsg::Messenger.new(type, msg, num)) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● Y位置サーチ 
-   #-------------------------------------------------------------------------- 
-   def search_y(msg) 
-     y = ShtMsg::VIEW.y 
-     loop do 
-       break if @stop 
-       if @msg.all? {|m| m.y != y } 
-         push_msg(msg, y)  # 空き場所へ 
-         return true 
-       end 
-       y += ShtMsg::RECT.height + ShtMsg::OFST 
-       break if y > (ShtMsg::VIEW.y + ShtMsg::VIEW.height - ShtMsg::RECT.height) 
-     end 
-     @stk.push(msg)  # 空くまで保持 
-     return false 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● メッセージ表示開始 
-   #-------------------------------------------------------------------------- 
-   def push_msg(msg, y) 
-     @msg.push(Window_ShrtMsgr.new(msg, start_x, y, @bitmap)) 
-     ShtMsg::SE.play unless ShtMsg::SE.nil? 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● ストックの再挿入 
-   #-------------------------------------------------------------------------- 
-   def shift_stock 
-     if !@stk.empty? # ストックある場合、空いたらmsg挿入 
-       loop do 
-         break unless search_y(@stk.shift) 
-         break if @stk.empty? 
-       end 
-     end 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● フレーム更新 
-   #-------------------------------------------------------------------------- 
-   def update 
-     @msg = @msg.each {|m| m.update }.select {|m| !m.disposed? } 
-     shift_stock unless @stop 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 簡易メッセージの強制停止 
-   #-------------------------------------------------------------------------- 
-   def stop 
-     @msg.each {|m| m.stop } 
-     @stop = true 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 簡易メッセージの強制停止解除 
-   #-------------------------------------------------------------------------- 
-   def restart 
-     @stop = false 
-     shift_stock 
-   end 
- end 
-   
-   
- #============================================================================== 
- # ■ Scene_Map 
- #============================================================================== 
- class Scene_Map < Scene_Base 
-   #-------------------------------------------------------------------------- 
-   # ● 開始処理 
-   #-------------------------------------------------------------------------- 
-   alias start_shrtmsg start 
-   def start 
-     start_shrtmsg 
-     @msgr = ShtMsg::MsgManager.new 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 終了処理 
-   #-------------------------------------------------------------------------- 
-   alias terminate_msg terminate 
-   def terminate 
-     terminate_msg 
-     @msgr.dispose 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 簡易メッセージ表示 
-   #-------------------------------------------------------------------------- 
-   def show_msg(type, msg, num=0) 
-     @msgr.setup(type, msg, num) 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 簡易メッセージの強制停止 
-   #-------------------------------------------------------------------------- 
-   def stop_msg 
-     @msgr.stop 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● 簡易メッセージの強制停止解除 
-   #-------------------------------------------------------------------------- 
-   def restart 
-     @msgr.restart 
-   end 
-   #-------------------------------------------------------------------------- 
-   # ● フレーム更新 
-   #-------------------------------------------------------------------------- 
-   alias update_msg update 
-   def update 
-     update_msg 
-     @msgr.update 
-   end 
- end