赞 | 0 |
VIP | 2 |
好人卡 | 10 |
积分 | 1 |
经验 | 7625 |
最后登录 | 2014-3-16 |
在线时间 | 122 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 122 小时
- 注册时间
- 2008-7-3
- 帖子
- 724
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 沙之爱罗 于 2010-7-4 18:19 编辑
我用的是这个脚本……当出现选择项的时候,最后一个选择项文字只能显示一半,而且在一个地图中和某人说话使用了脚本chat,(??,"某人")显示对话:XXOOXXOO,再和一块石头说话他都依然是这个改版后的对话框,无法变回普通的框框……能明白么……
- 决定换脚本#==============================================================================
- # ++ メッセージふきだし表示 ver. 1.16 ++
- # Script by パラ犬
- # http://rpg.para.s3p.net/
- #--
- # ふきだし表示をするには、
- # テール用画像「(スキン名)-top」「(スキン名)-under」を
- # 「Graphics/Windowskins」フォルダにインポートしておく必要があります。
- #--
- #
- # [ふきだし表示の使い方]
- # イベントコマンド「スクリプト」で「$mes_id」にイベントIDを代入することで
- # そのイベントにふきだしがポップするようになります。
- # (記述例: $mes_id=4 )
- # IDに-1を代入するとプレイヤー、0でそのイベント自身。
- # nilまたは""を代入すると、通常のメッセージ表示に戻ります。
- # 表示位置はイベント「文章オプション」で変更できます。
- # 表示位置に「中央」を指定すると、イベントの位置に関係なく
- # 画面中央に表示されます。
- #
- # [名前ウインドウの使い方]
- # イベントコマンド「スクリプト」で「$mes_name」に文字列を代入することで
- # 名前ウインドウを表示します。
- # (記述例: $mes_name="アルシェス" )
- # ""またはnilを代入すると、非表示になります。
- #
- # 二つの機能は独立していますので、それぞれ単体で使えます。
- # $mes_id=(ID) + $mes_name="名前" :ふきだし表示 + 名前ウインドウ
- # $mes_id=(ID) + $mes_name="" :ふきだし表示 (名前なし)
- # $mes_id=nil + $mes_name="名前" :デフォルトウインドウ + 名前ウインドウ
- # $mes_id=nil + $mes_name="" :デフォルトウインドウ (名前なし)
- #
- # [メッセージ表示スピードの変更法]
- # イベントコマンド「スクリプト」で「$mes_speed」に数値を代入します。
- # (記述例: $mes_speed=1 )
- #==============================================================================
- class Game_Temp
- attr_accessor :namebmp # 调试画面 保存状态用
- attr_accessor :map_visible # 地图的表示状態
- attr_accessor :run_weapon # 武器配方
- alias old_initialize initialize
- def initialize
- old_initialize
- @map_visible = true
- @namebmp ={"新一焦急"=>"gongteng1", "新一怀疑"=>"gongteng2","新一生气"=>"gongteng3","新一"=>"gongteng5",
- "伪娘正常"=>"weiniang1","伪娘惊讶"=>"weiniang2","新一无奈"=>"gongteng4","伪娘自大"=>"weiniang3",
- "伪娘口吃"=>"weiniang4","新一正常"=>"gongteng6","平次高兴"=>"pingcigaoxing","平次生气"=>"pingcishengqi",
- "平次怀疑"=>"pingcihuaiyi","平次正常"=>"pingcizhengchang","平次惊讶"=>"pingcijingya",
- "平次温柔"=>"pingciwenrou"}
- run_weapon = []
- end
- end
- def chat(id = 0,name = "")
- $mes_id = id
- $mes_name = name
- end
- module FUKI
-
- # SKINの設定
- FUKI_SKIN_NAME = "fk" #
- NAME_SKIN_NAME = "fk" # 名前表示用
-
- MES_FONT_SIZE = 18 #
- NAME_FONT_SIZE = 18 # 名前
-
- #透明度
- FUKI_OPACITY = 255 #
- MES_OPACITY = 255 # 通常の
- NAME_OPACITY = 255 # 名前
-
- # 名前の相対位置
- NAME_SHIFT_X = 0 # 横位置
- NAME_SHIFT_Y = 16 # 縦位置
- # 画面の一番端ではふきだしを少しずらす
- # 角の丸いスキンを使っていて、枠の角がふきだしと重なる場合に true にする
- CORNER_SHIFT = false
- SHIFT_PIXEL = 4 # trueの時にずらすピクセル数
-
- # キャラクターの縦のサイズ
- CHARACTOR_HEIGHT = 48
- # ふきだしの相対位置(縦位置)
- POP_SHIFT_TOP = 0 # 表示位置が上のとき
- POP_SHIFT_UNDER = -16 # 表示位置が下のとき
-
- # メッセージ表示速度(数字が小さいほど速い。0で瞬間表示)
- # $mes_speedに数値を代入することで、ゲーム中に変更可。
- MES_SPEED = 1
- end
-
- #==============================================================================
- # □ Window_FukiMessage
- #==============================================================================
- class Window_Message < Window_Selectable
- #------------------------------------
- # ○ オブジェクト初期化
- #------------------------------------
- def initialize
- super(80, 304, 480, 160)
- self.contents = Bitmap.new(width - 32, height - 32)
- self.visible = false
- self.z = 9998
- @fade_in = false
- @fade_out = false
- @contents_showing = false
- @cursor_width = 0
- self.active = false
- self.index = -1
- @w = 0
- @h = 0
- @wait = 0
- @dx = 0
- @dy = 0
- $mes_speed = FUKI::MES_SPEED
- end
- #------------------------------------
- # ○ サイズを決定してウインドウを作成
- #------------------------------------
- def refresh_create
- self.contents.clear
- self.contents.font.color = normal_color
- self.contents.font.size = FUKI::MES_FONT_SIZE
- # ウインドウサイズを取得
- get_windowsize
- w = @w + 32 + 8
- h = @h * (self.contents.font.size + 10) + 26
- # ふきだしウインドウを作成
- set_fukidasi(self.x, self.y, w, h)
- # 名前ウインドウを作成
- set_namewindow
- # メッセージ表示用変数の初期化
- @dx = @dy = 0
- @cursor_width = 0
- @contents_drawing = true
- # 瞬間表示の場合、ここで表示処理
- if $mes_speed == 0
- # 描画処理をループ
- while $game_temp.message_text != ""
- draw_massage
- end
- draw_opt_text
- @contents_showing_end = true
- @contents_drawing = false
- else
- # 一文字ずつ描画
- refresh_drawtext
- end
- end
- #------------------------------------
- # ○ 一文字ずつ描画
- #------------------------------------
- def refresh_drawtext
- if $game_temp.message_text != nil
- if @wait > 0
- @wait -= 1
- elsif @wait == 0
- # 描画処理
- draw_massage
- @wait = $mes_speed
- end
- end
- # 描画終了
- if $game_temp.message_text == ""
- draw_opt_text
- @contents_showing_end = true
- @contents_drawing = false
- end
- end
- #------------------------------------
- # ○ ウインドウサイズを取得
- #------------------------------------
- def get_windowsize
- x = y = 0
- @h = @w = 0
- @cursor_width = 0
- # 選択肢なら字下げを行う
- if $game_temp.choice_start == 0
- x = 8
- end
- # 表示待ちのメッセージがある場合
- if $game_temp.message_text != nil
- text = $game_temp.message_text.clone
- # 制御文字処理
- begin
- last_text = text.clone
- text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
- end until text == last_text
- text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
- $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
- end
- # 便宜上、"\\\\" を "\000" に変換
- text.gsub!(/\\\\/) { "\000" }
- # "\\C" を "\001" に、"\\G" を "\002" に変換
- text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
- text.gsub!(/\\[Gg]/) { "\002" }
- # c に 1 文字を取得 (文字が取得できなくなるまでループ)
- while ((c = text.slice!(/./m)) != nil)
- # \\ の場合
- if c == "\000"
- # 本来の文字に戻す
- c = "\\"
- end
- # \C[n] または \G の場合
- if c == "\001" or c == "\002"
- # 次の文字へ
- next
- end
- # 改行文字の場合
- if c == "\n"
- # y に 1 を加算
- y += 1
- # 縦横サイズを取得
- @h = y
- @w = x > @w ? x : @w
- if y >= $game_temp.choice_start
- @w = x + 8 > @w ? x + 8 : @w
- end
- x = 0
- # 選択肢なら字下げを行う
- if y >= $game_temp.choice_start
- x = 8
- end
- # 次の文字へ
- next
- end
- # x に描画した文字の幅を加算
- x += self.contents.text_size(c).width
- end
- end
- # 数値入力の場合
- if $game_temp.num_input_variable_id > 0
- digits_max = $game_temp.num_input_digits_max
- number = $game_variables[$game_temp.num_input_variable_id]
- @h += 1
- x = digits_max * self.contents.font.size + 16
- @w = x > @w ? x : @w
- end
- end
- #------------------------------------
- # ○ 描画処理
- #------------------------------------
- def draw_massage
- # 表示待ちのメッセージがある場合
- if $game_temp.message_text != nil
- text = $game_temp.message_text
- # 制御文字処理
- begin
- last_text = text.clone
- text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
- end until text == last_text
- text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
- $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
- end
- # 便宜上、"\\\\" を "\000" に変換
- text.gsub!(/\\\\/) { "\000" }
- # "\\C" を "\001" に、"\\G" を "\002" に変換
- text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
- text.gsub!(/\\[Gg]/) { "\002" }
- # c に 1 文字を取得
- if ((c = text.slice!(/./m)) != nil)
- # 選択肢の場合
- if @dy >= $game_temp.choice_start
- # 字下げを行う
- @dx = 8
- # 文字を描画
- self.contents.draw_text(4 + @dx, 32 * @dy, 40, 32, c)
- # x に描画した文字の幅を加算
- @dx += self.contents.text_size(c).width
- # ループ
- while ((c = text.slice!(/./m)) != "\n")
- # 文字を描画
- self.contents.draw_text(4 + @dx, 32 * @dy, 40, 32, c)
- # x に描画した文字の幅を加算
- @dx += self.contents.text_size(c).width
- end
- if c == "\n"
- # カーソルの幅を更新
- @cursor_width = [@cursor_width, @dx].max
- # y に 1 を加算
- @dy += 1
- @dx = 0
- end
- return
- end
- # \\ の場合
- if c == "\000"
- # 本来の文字に戻す
- c = "\\"
- end
- # \C[n] の場合
- if c == "\001"
- # 文字色を変更
- text.sub!(/\[([0-9]+)\]/, "")
- color = $1.to_i
- if color >= 0 and color <= 7
- self.contents.font.color = text_color(color)
- end
- end
- # \G の場合
- if c == "\002"
- # ゴールドウィンドウを作成
- if @gold_window == nil
- @gold_window = Window_Gold.new
- @gold_window.x = 560 - @gold_window.width
- if $game_temp.in_battle
- @gold_window.y = 192
- else
- @gold_window.y = self.y >= 128 ? 32 : 384
- end
- @gold_window.opacity = self.opacity
- @gold_window.back_opacity = self.back_opacity
- end
- end
- # 改行文字の場合
- if c == "\n"
- # y に 1 を加算
- @dy += 1
- @dx = 0
- end
- # 文字を描画
- self.contents.font.size = FUKI::MES_FONT_SIZE
- font_size = self.contents.font.size
- self.contents.draw_text(4+@dx, (font_size+10)*@dy, font_size, font_size, c)
- # x に描画した文字の幅を加算
- @dx += self.contents.text_size(c).width
- end
- end
- end
- #------------------------------------
- # ○ 選択肢と数値入力を有効に
- #------------------------------------
- def draw_opt_text
- # 選択肢の場合
- if $game_temp.choice_max > 0
- @item_max = $game_temp.choice_max
- self.active = true
- self.index = 0
- end
- # 数値入力の場合
- if $game_temp.num_input_variable_id > 0
- digits_max = $game_temp.num_input_digits_max
- number = $game_variables[$game_temp.num_input_variable_id]
- @input_number_window = Window_InputNumber.new(digits_max)
- @input_number_window.number = number
- @input_number_window.x = self.x + 8
- @input_number_window.y = self.y + $game_temp.num_input_start * 32
- end
- end
- #------------------------------------
- # ○ ふきだしを表示
- #------------------------------------
- def set_fukidasi(x, y, width, height)
- # $mes_id が空のときはふきだしを表示しない
- if $mes_id == nil or $mes_id == ""
- del_fukidasi
- reset_window
- else
- # ポーズサインを非表示
- self.pause = false
- # キャラクターを取得
- if $mes_id=="2"
- character = $game_allies[1]
- else
- character = get_character($mes_id)
- end
- if character == nil
- # キャラクターが存在しないときは通常のメッセージウインドウに
- del_fukidasi
- reset_window
- return
- end
- # マップがスクロールされていないときの座標処理
- if $game_map.display_x == 0
- x = character.x * 32 - (width / 2) + 16
- elsif $game_map.display_x == ($game_map.width - 20) * 128
- x = ( character.real_x - $game_map.display_x + 64 ) / 128 * 32 - (width / 2) + 16
- else
- x = ( character.real_x - $game_map.display_x + 64 ) / 128 * 32 - (width / 2)
- end
- # はみ出すときは画面内に収まるように移動
- if x + width > 640
- x = 640 - width
- elsif x < 0
- x = 0
- end
- # ウインドウの位置を決定
- up_or_down = $game_system.message_position
- case $game_system.message_position
- when 0 # 上
- y = ( (character.real_y - $game_map.display_y + 64) / 128) * 32 - height + 16 - FUKI::CHARACTOR_HEIGHT + FUKI::OP_SHIFT_TOP
- if y < 40
- y = ( (character.real_y - $game_map.display_y + 64) / 128) * 32 + 48 + FUKI::OP_SHIFT_UNDER
- up_or_down = 2
- end
- when 1 # 中
- y = (480 - height) / 2
- x = (640 - width) / 2
- when 2 # 下
- y = ( (character.real_y - $game_map.display_y + 64) / 128) * 32 + 48 + FUKI::OP_SHIFT_UNDER
- if y > 400
- y = ( (character.real_y - $game_map.display_y + 64) / 128) * 32 - height + 16 - FUKI::CHARACTOR_HEIGHT + FUKI::OP_SHIFT_TOP
- up_or_down = 0
- end
- end
- skin = FUKI::FUKI_SKIN_NAME != "" ? FUKI::FUKI_SKIN_NAME : $game_system.windowskin_name
- self.windowskin = RPG::Cache.windowskin(skin)
- self.x = x
- self.y = y
- self.height = height
- self.width = width
- self.contents.dispose
- self.contents = Bitmap.new(width - 32, height - 32)
- self.back_opacity = FUKI::FUKI_OPACITY
- self.contents.clear
- self.contents.font.color = normal_color
- self.contents.font.size = FUKI::MES_FONT_SIZE
- if $game_system.message_frame == 0
- @fuki = Sprite.new
- case up_or_down
- when 0 # 上
- @fuki.bitmap = RPG::Cache.windowskin(skin + "-top")
- if $game_map.display_x == 0
- @fuki.x = character.x * 32
- elsif $game_map.display_x == ($game_map.width - 20) * 128
- @fuki.x = ( character.real_x - $game_map.display_x + 64 ) / 128 * 32
- else
- @fuki.x = ( character.real_x - $game_map.display_x + 64 ) / 128 * 32 - 16
- end
- if FUKI::CORNER_SHIFT
- if @fuki.x == 0
- @fuki.x = FUKI::SHIFT_PIXEL
- elsif @fuki.x == 640 - 32
- @fuki.x = 640 - 32 - FUKI::SHIFT_PIXEL
- end
- end
- @fuki.y = y + height - 16
- @fuki.z = self.z + 1
- when 1 # 中
- @fuki.dispose
- @fuki = nil
- when 2 # 下
- @fuki.bitmap = RPG::Cache.windowskin(skin + "-under")
- if $game_map.display_x == 0
- @fuki.x = character.x * 32
- elsif $game_map.display_x == ($game_map.width - 20) * 128
- @fuki.x = ( character.real_x - $game_map.display_x + 64 ) / 128 * 32
- else
- @fuki.x = ( character.real_x - $game_map.display_x + 64 ) / 128 * 32 - 16
- end
- if FUKI::CORNER_SHIFT
- if @fuki.x == 0
- @fuki.x = FUKI::SHIFT_PIXEL
- elsif @fuki.x == 640 - 32
- @fuki.x = 640 - 32 - FUKI::SHIFT_PIXEL
- end
- end
- @fuki.y = y - 16
- @fuki.z = self.z + 1
- end
- end
- end
- end
- #------------------------------------
- # ○ 名前ウインドウを表示
- #------------------------------------
- def set_namewindow
- if $mes_name == nil or $mes_name == ""
- return
- else
- mes_name = $mes_name
- name_width = mes_name.size / 2 * FUKI::NAME_FONT_SIZE - 4
- name_height = FUKI::NAME_FONT_SIZE+4
- name_x = x + width - 58 + FUKI::NAME_SHIFT_X
- name_y = y - name_height - 16 + FUKI::NAME_SHIFT_Y
-
- #判断名称是否有对应的图片"Graphics/heads/" +
- if $game_temp.namebmp[mes_name] == nil then
- sFile = 'notfile'
- else
- sFile = "Graphics/heads/"+$game_temp.namebmp[mes_name] + ".png"
- end
-
- if FileTest.exist?(sFile ) == true then
- bmp1 = Bitmap.new(sFile)
- iwidth = bmp1.width
- iheight = bmp1.height
- if self.x+self.width > 400
- @name_win = Window_Base.new(self.x-iwidth-5, name_y, iwidth + 5, iheight + 5)
- @name_win.y = self.y+self.height/2 - @name_win.height/2
- skin = FUKI::NAME_SKIN_NAME != "" ? FUKI::NAME_SKIN_NAME : $game_system.windowskin_name
- @name_win.windowskin = RPG::Cache.windowskin(skin)
- @name_win.back_opacity =0
- @name_win.z = self.z + 1
- viewport = Viewport.new(@name_win.x+3, @name_win.y+1, iwidth, iheight)
- @name_contents = Sprite.new(viewport)
- @name_contents.bitmap = Bitmap.new(sFile)
- viewport.z = @name_win.z - 1
- @name_contents.z = @name_win.z + 2
- else
- @name_win = Window_Base.new(self.x+self.width, name_y, iwidth + 5, iheight + 5)
- @name_win.y = self.y+self.height/2 - @name_win.height/2
- skin = FUKI::NAME_SKIN_NAME != "" ? FUKI::NAME_SKIN_NAME : $game_system.windowskin_name
- @name_win.windowskin = RPG::Cache.windowskin(skin)
- @name_win.back_opacity =0
- @name_win.z = self.z + 1
- viewport = Viewport.new(@name_win.x+3, @name_win.y+1, iwidth, iheight)
- @name_contents = Sprite.new(viewport)
- @name_contents.bitmap = Bitmap.new(sFile)
- viewport.z = @name_win.z - 1
- @name_contents.z = @name_win.z + 2
- end
- else
- @name_win = Window_Base.new(name_x, name_y, name_width, name_height)
- skin = FUKI::NAME_SKIN_NAME != "" ? FUKI::NAME_SKIN_NAME : $game_system.windowskin_name
- @name_win.windowskin = RPG::Cache.windowskin(skin)
- @name_win.back_opacity = FUKI::NAME_OPACITY
- @name_win.z = self.z + 1
- rect = self.contents.text_size(mes_name)
- @name_win.width = rect.width + 16
- rect.y +=4
- @name_win.height += 8
- rect.x +=6
- @name_win.x = self.x + self.width - @name_win.width
- viewport = Viewport.new(@name_win.x, @name_win.y, @name_win.width+32, @name_win.height)
- viewport.z = @name_win.z + 1
- @name_contents = Sprite.new(viewport)
- @name_contents.bitmap = Bitmap.new(name_width, name_height)
- @name_contents.z = @name_win.z + 2
- @name_contents.bitmap.font.color = normal_color
- @name_contents.bitmap.font.size = FUKI::NAME_FONT_SIZE
- @name_contents.bitmap.draw_text(rect, mes_name)
- end
- end
- end
- #------------------------------------
- # ○ ふきだしと名前ウインドウを破棄
- #------------------------------------
- def del_fukidasi
- if @fuki != nil
- @fuki.dispose
- @fuki = nil
- end
- if @name_win != nil
- @name_win.dispose
- @name_win = nil
- @name_contents.dispose
- @name_contents = nil
- end
- self.opacity = 0
- self.x = 80
- self.width = 480
- self.height = 160
- self.contents.dispose
- self.contents = Bitmap.new(width - 32, height - 32)
- self.pause = true
- end
- #------------------------------------
- # ○ キャラクターの取得
- # parameter : パラメータ
- #------------------------------------
- def get_character(parameter)
- # パラメータで分岐
- case parameter
- when -1 # プレイヤー
- return $game_player
- when 0 # このイベント
- events = $game_map.events
- return events == nil ? nil : events[$active_event_id]
- else # 特定のイベント
- events = $game_map.events
- return events == nil ? nil : events[parameter]
- end
- end
- #------------------------------------
- # ○ ウィンドウの位置と不透明度の設定
- #------------------------------------
- def reset_window
- if $game_temp.in_battle
- self.y = 16
- else
- case $game_system.message_position
- when 0 # 上
- self.y = 16
- when 1 # 中
- self.y = 160
- when 2 # 下
- self.y = 304
- end
- end
- if $game_system.message_frame == 0
- self.opacity = 255
- else
- self.opacity = 0
- end
- self.back_opacity = FUKI::MES_OPACITY
- end
- #------------------------------------
- # ○ フレーム更新
- #------------------------------------
- def update
- super
- # フェードインの場合
- if @fade_in
- self.contents_opacity += 24
- if @name_win != nil
- @name_win.opacity += 24
- end
- if @fuki != nil
- @fuki.opacity += 24
- end
- if @input_number_window != nil
- @input_number_window.contents_opacity += 24
- end
- if self.contents_opacity == 255
- @fade_in = false
- end
- return
- end
- # メッセージ表示中の場合
- if @contents_drawing
- refresh_drawtext
- return
- end
- # 数値入力中の場合
- if @input_number_window != nil
- @input_number_window.update
- # 決定
- if Input.trigger?(Input::C)
- $game_system.se_play($data_system.decision_se)
- $game_variables[$game_temp.num_input_variable_id] =
- @input_number_window.number
- $game_map.need_refresh = true
- # 数値入力ウィンドウを解放
- @input_number_window.dispose
- @input_number_window = nil
- terminate_message
- end
- return
- end
- # メッセージ表示終了の場合
- if @contents_showing_end
- # 選択肢の表示中でなければポーズサインを表示
- # ふきだしモードでは非表示
- if $game_temp.choice_max == 0 and @fuki == nil
- self.pause = true
- else
- self.pause = false
- end
- # キャンセル
- if Input.trigger?(Input::B)
- if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
- $game_system.se_play($data_system.cancel_se)
- $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
- terminate_message
- end
- end
- # 決定
- if Input.trigger?(Input::C)
- if $game_temp.choice_max > 0
- $game_system.se_play($data_system.decision_se)
- $game_temp.choice_proc.call(self.index)
- end
- terminate_message
- # ふきだしを破棄
- del_fukidasi
- end
- return
- end
- # フェードアウト中以外で表示待ちのメッセージか選択肢がある場合
- if @fade_out == false and $game_temp.message_text != nil
- @contents_showing = true
- $game_temp.message_window_showing = true
- reset_window
- refresh_create
- if @name_win != nil
- @name_win.opacity = 0
- end
- if @fuki != nil
- @fuki.opacity = 0
- end
- Graphics.frame_reset
- self.visible = true
- self.contents_opacity = 0
- if @input_number_window != nil
- @input_number_window.contents_opacity = 0
- end
- @fade_in = true
- return
- end
- # 表示すべきメッセージがないが、ウィンドウが可視状態の場合
- if self.visible
- @fade_out = true
- self.opacity -= 48
- if @name_win != nil
- @name_win.opacity -= 48
- end
- if @fuki != nil
- @fuki.opacity -= 48
- end
- if self.opacity == 0
- self.visible = false
- @fade_out = false
- $game_temp.message_window_showing = false
- del_fukidasi
- end
- return
- end
- end
- #------------------------------------
- # ○ 解放
- #------------------------------------
- def dispose
- terminate_message
- $game_temp.message_window_showing = false
- if @input_number_window != nil
- @input_number_window.dispose
- end
- super
- end
- #------------------------------------
- # ○ メッセージ終了処理
- #------------------------------------
- def terminate_message
- self.active = false
- self.pause = false
- self.index = -1
- self.contents.clear
- # 表示中フラグをクリア
- @contents_showing = false
- @contents_showing_end = false
- # メッセージ コールバックを呼ぶ
- if $game_temp.message_proc != nil
- $game_temp.message_proc.call
- end
- # 文章、選択肢、数値入力に関する変数をクリア
- $game_temp.message_text = nil
- $game_temp.message_proc = nil
- $game_temp.choice_start = 99
- $game_temp.choice_max = 0
- $game_temp.choice_cancel_type = 0
- $game_temp.choice_proc = nil
- $game_temp.num_input_start = 99
- $game_temp.num_input_variable_id = 0
- $game_temp.num_input_digits_max = 0
- # ゴールドウィンドウを開放
- if @gold_window != nil
- @gold_window.dispose
- @gold_window = nil
- end
- end
- #------------------------------------
- # ○ カーソルの矩形更新
- #------------------------------------
- def update_cursor_rect
- if @index >= 0
- n = $game_temp.choice_start + @index
- self.cursor_rect.set(8, n * 32, @cursor_width, 32)
- else
- self.cursor_rect.empty
- end
- end
- end
- #==============================================================================
- # ■ Interpreter
- #==============================================================================
- class Interpreter
- #------------------------------------
- # ● イベントのセットアップ
- # event_id : イベント ID
- #------------------------------------
- alias setup_fuki setup
- def setup(list, event_id)
- setup_fuki(list, event_id)
- # 戦闘中でなければ
- if !($game_temp.in_battle)
- # イベントIDを記録
- $active_event_id = event_id
- end
- end
- end
- #==============================================================================
- # ■ Window_InputNumber
- #==============================================================================
- class Window_InputNumber < Window_Base
- #------------------------------------
- # ● オブジェクト初期化
- # digits_max : 桁数
- #------------------------------------
- def initialize(digits_max)
- @digits_max = digits_max
- @number = 0
- # 数字の幅からカーソルの幅を計算 (0~9 は等幅と仮定)
- dummy_bitmap = Bitmap.new(32, 32)
- dummy_bitmap.font.size = FUKI::MES_FONT_SIZE
- @cursor_width = dummy_bitmap.text_size("0").width + 8
- dummy_bitmap.dispose
- super(0, 0, @cursor_width * @digits_max + 32, 64)
- self.contents = Bitmap.new(width - 32, height - 32)
- self.contents.font.size = FUKI::MES_FONT_SIZE
- self.z += 9999
- self.opacity = 0
- @index = 0
- refresh
- update_cursor_rect
- end
- end
- #==============================================================================
- # ■ Window_Gold
- #==============================================================================
- class Window_Gold < Window_Base
- #------------------------------------
- # ● オブジェクト初期化
- #------------------------------------
- def initialize
- height = FUKI::MES_FONT_SIZE + 32
- super(0, 0, 160, height)
- self.contents = Bitmap.new(width - 32, height - 32)
- self.back_opacity = FUKI::MES_OPACITY
- self.contents.font.size = FUKI::MES_FONT_SIZE
- refresh
- end
- #------------------------------------
- # ● リフレッシュ
- #------------------------------------
- def refresh
- self.contents.clear
- cx = contents.text_size($data_system.words.gold).width
- self.contents.font.color = normal_color
- self.contents.draw_text(4, 0, 120-cx-2, FUKI::MES_FONT_SIZE, $game_party.gold.to_s, 2)
- self.contents.font.color = system_color
- self.contents.draw_text(124-cx, 0, cx, FUKI::MES_FONT_SIZE, $data_system.words.gold, 2)
- end
- end
复制代码 |
|