Trang trí thêm cho hộp thoại Message

Laguna Dream Party

Mr & Ms Pac-Man
Tham gia ngày
15/6/03
Bài viết
120
Reaction score
0
Đoạn script sau sẽ khiến cho các chữ trong hộp Message có viền màu đỏ (màu đỏ là mặc định, muốn có màu khác chỉ việc thay đổi giá trị màu, tức là thay 155 bằng một số khác, như 60 chẳng hạn, sẽ làm cho chữ có viền xanh) trông rất đẹp mắt:
Đầu tiên các bạn mở Script Editor ra, vào Windows_Base, tìm đến 3 dòng
def knockout_color
return Color.new(255, 64, 0)
end
Ngay dưới dòng End, bạn dán đoạn script sau vào:
def outline_color
return Color.new(155, 100, 0)
end
Sau đó lại vào phần Windows_Message, tìm tất cả các dòng bắt đầu bằng self.contents.draw_text
Xóa dòng đó đi, thay bằng những dòng sau:
self.contents.font.color = outline_color
self.contents.draw_text(4 + x-1, 32 * y-1, 40, 32, c)
self.contents.draw_text(4 + x-1, 32 * y+1, 40, 32, c)
self.contents.draw_text(4 + x+1, 32 * y+1, 40, 32, c)
self.contents.draw_text(4 + x+1, 32 * y-1, 40, 32, c)
self.contents.font.color = normal_color
self.contents.draw_text(4 + x, 32 * y, 40, 32, c)

Có khoảng 8 đến 9 lần thay như vậy.
Bây giờ vào trò chơi và thử cho nhân vật nói một câu gì đó xem
Các bạn hoàn toàn có thể dùng cách này cùng với cách cải tiến Message Box mà tôi đã giới thiệu ở trên. Không có tranh chấp gì cả.
Hoặc đơn giản là copy đoạn script sau thay cho Windows_Message, đoạn mã này bao gồm cả hai "chiêu":

class Window_Message < Window_Selectable
attr_accessor :autoclosetime
attr_accessor :op
# ----------------------------
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
@autoclosetime = -1
@op = 255
@refreshflag = false
self.active = false
self.index = -1
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
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 refresh
self.contents.clear
self.contents.font.color = normal_color
self.contents.font.name = ".VnTime"
self.contents.font.size = 24
x = y = 0
@cursor_width = 0
@autoclosetime = -1
@refreshflag = true
lineheight = 32
active = ""
a = ""
centerflag = false
rightflag = false
bannerflag = false
if $game_temp.choice_start == 0
x = 8
end
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
text.gsub!(/\\\\/) { "\000" }
text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
text.gsub!(/\\[Gg]/) { "\002" }
text.gsub!(/\\[Ii]\[([0-9]+)\]/) { "\003[#{$1}]" }
text.gsub!(/\\[Ff]\[([0-9]+)\]/) { "\004[#{$1}]" }
text.gsub!(/\\[Aa]\[([0-9]+)\]/) { "\005[#{$1}]" }
text.gsub!(/\\[Xx]/) { "\006" }
text.gsub!(/\\[Rr]/) { "\007" }
text.gsub!(/\\[Dd]/) { "\011" }
text.gsub!(/\\[Ss]\[([0-9]+)\]/) { "\023[#{$1}]" }
text.gsub!(/\\[Bb]/) { "\017" }
text.gsub!(/\\[Ww]\[([0-9]+)\]/) { "\014[#{$1}]" }
text.gsub!(/\\[Mm]\[([0-9]+)\]/) { "\015[#{$1}]" }
text.gsub!(/\\[Oo]\[([0-9]+)\]/) { "\016[#{$1}]" }
text.gsub!(/\\[Jj]\[([0-9]+)\]/) { "\013[#{$1}]" }
text.gsub!(/\\[Hh]\[([0-9]+)\]/) { "\021[#{$1}]" }
text.gsub!(/\\[Kk]\[([0-9]+)\]/) { "\022[#{$1}]" }
while ((c = text.slice!(/./m)) != nil)
if c == "\000"
c = "\\"
end
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
next
end
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
next
end
if c == "\003"
text.sub!(/\[([0-9]+)\]/, "")
item_sub = $1.to_i
c = $data_items[item_sub].name
l = self.contents.text_size(c).width
draw_item_name($data_items[item_sub], x, y * 32 + 1)
x = x + l + 24
next
end
if c == "\004"
text.sub!(/\[([0-9]+)\]/, "")
fontize = $1.to_i
case fontize
when 1
self.contents.font.name = "Arial"
when 2
self.contents.font.name = "High Tower Text"
when 3
self.contents.font.name = "Tw Cen MT"
when 4
self.contents.font.name = "Tahoma"
end
next
end
if c == "\005"
text.sub!(/\[([0-9]+)\]/, "")
@autoclosetime = $1.to_i
next
end
if c == "\006"
centerflag = true
next
end
if c == "\007"
rightflag = true
next
end
if c == "\011"
self.contents.font.name = "Arial"
self.contents.font.size = 18
self.contents.font.color = normal_color
lineheight = 32
next
end
if c == "\014"
text.sub!(/\[([0-9]+)\]/, "")
w_sub = $1.to_i
c = $data_weapons[w_sub].name
l = self.contents.text_size(c).width
bitmap = RPG::Cache.icon($data_weapons[w_sub].icon_name)
self.contents.blt(x+4, y * 32+ 4, bitmap, Rect.new(0, 0, 24, 24))
x += 28
self.contents.font.color = outline_color
self.contents.draw_text(4 + x-1, 32 * y-1, 40, 32, c)
self.contents.draw_text(4 + x-1, 32 * y+1, 40, 32, c)
self.contents.draw_text(4 + x+1, 32 * y+1, 40, 32, c)
self.contents.draw_text(4 + x+1, 32 * y-1, 40, 32, c)
self.contents.font.color = normal_color
self.contents.draw_text(4 + x, 32 * y, 40, 32, c)
x = x + l
next
end
if c == "\015"
text.sub!(/\[([0-9]+)\]/, "")
a_sub = $1.to_i
c = $data_armors[a_sub].name
l = self.contents.text_size(c).width
bitmap = RPG::Cache.icon($data_armors[a_sub].icon_name)
self.contents.blt(x+4, y * 32+ 4, bitmap, Rect.new(0, 0, 24, 24))
x += 28
self.contents.font.color = outline_color
self.contents.draw_text(4 + x-1, 32 * y-1, 40, 32, c)
self.contents.draw_text(4 + x-1, 32 * y+1, 40, 32, c)
self.contents.draw_text(4 + x+1, 32 * y+1, 40, 32, c)
self.contents.draw_text(4 + x+1, 32 * y-1, 40, 32, c)
self.contents.font.color = normal_color
self.contents.draw_text(4 + x, 32 * y, 40, 32, c)


x = x + l
next
end
if c == "\016"
text.sub!(/\[([0-9]+)\]/, "")
@op = $1.to_i
next
end
if c == "\017"
bannerflag = true
next
end
if c == "\018"
text.sub!(/\[([0-9]+)\]/, "")
jump = $1.to_i
x += jump
next
end
if c == "\021"
text.sub!(/\[([0-9]+)\]/, "")
lineheight = $1.to_i
next
end
if c == "\022"
text.sub!(/\[([0-9]+)\]/, "")
skill_sub = $1.to_i
c = $data_skills[skill_sub].name
l = self.contents.text_size(c).width
bitmap = RPG::Cache.icon($data_skills[skill_sub].icon_name)
self.contents.blt(x+4, y * 32+ 4, bitmap, Rect.new(0, 0, 24, 24))
x += 28
self.contents.font.color = outline_color
self.contents.draw_text(4 + x-1, 32 * y-1, 40, 32, c)
self.contents.draw_text(4 + x-1, 32 * y+1, 40, 32, c)
self.contents.draw_text(4 + x+1, 32 * y+1, 40, 32, c)
self.contents.draw_text(4 + x+1, 32 * y-1, 40, 32, c)
self.contents.font.color = normal_color
self.contents.draw_text(4 + x, 32 * y, 40, 32, c)

x = x + l
next
end
if c == "\023"
text.sub!(/\[([0-9]+)\]/, "")
bigness = $1.to_i
self.contents.font.size = bigness
next
end
if c == "\n"
if centerflag == true
x = 448 - x
x = x / 2
self.contents.font.color = outline_color
self.contents.draw_text(4 + x-1, 32 * y-1, 40, 32, c)
self.contents.draw_text(4 + x-1, 32 * y+1, 40, 32, c)
self.contents.draw_text(4 + x+1, 32 * y+1, 40, 32, c)
self.contents.draw_text(4 + x+1, 32 * y-1, 40, 32, c)
self.contents.font.color = normal_color
self.contents.draw_text(4 + x, 32 * y, 40, 32, c)


end
if rightflag == true
x = 448 - x
self.contents.font.color = outline_color
self.contents.draw_text(4 + x-1, 32 * y-1, 40, 32, c)
self.contents.draw_text(4 + x-1, 32 * y+1, 40, 32, c)
self.contents.draw_text(4 + x+1, 32 * y+1, 40, 32, c)
self.contents.draw_text(4 + x+1, 32 * y-1, 40, 32, c)
self.contents.font.color = normal_color
self.contents.draw_text(4 + x, 32 * y, 40, 32, c)


end
if bannerflag == true
x = 448 - x
x = x / 2
self.contents.font.color = outline_color
self.contents.draw_text(4 + x-1, 32 * y-1, 40, 32, c)
self.contents.draw_text(4 + x-1, 32 * y+1, 40, 32, c)
self.contents.draw_text(4 + x+1, 32 * y+1, 40, 32, c)
self.contents.draw_text(4 + x+1, 32 * y-1, 40, 32, c)
self.contents.font.color = normal_color
self.contents.draw_text(4 + x, 32 * y, 40, 32, c)


end
a = ""
centerflag = false
rightflag = false
bannerflag = false
if y >= $game_temp.choice_start
@cursor_width = [@cursor_width, x].max
end
y += 1
x = 0
if y >= $game_temp.choice_start
x = 8
end
next
end
if centerflag == false && rightflag == false && bannerflag == false
self.contents.font.color = outline_color
self.contents.draw_text(4 + x-1, 32 * y-1, 40, 32, c)
self.contents.draw_text(4 + x-1, 32 * y+1, 40, 32, c)
self.contents.draw_text(4 + x+1, 32 * y+1, 40, 32, c)
self.contents.draw_text(4 + x+1, 32 * y-1, 40, 32, c)
self.contents.font.color = normal_color
self.contents.draw_text(4 + x, 32 * y, 40, 32, c)


x += self.contents.text_size(c).width
else
a += c
x += self.contents.text_size(c).width
end
end
end
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 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 = 160
end
# ----------------------------
def update
super
if @refreshflag && @fade_in == false
self.contents_opacity = @op
end
if @autoclosetime == 0
@autoclosetime = -1
terminate_message
end
if @autoclosetime >= 1
@autoclosetime -= 1
end
if @fade_in
self.contents_opacity += 24
if @input_number_window != nil
@input_number_window.contents_opacity += 24
end
if self.contents_opacity >= @op
@fade_in = false
end
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
if $game_temp.choice_max == 0
self.pause = true
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
@op = 255
terminate_message
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
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 self.opacity == 0
self.visible = false
@fade_out = false
$game_temp.message_window_showing = false
end
return
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
Dĩ nhiên là các bạn vẫn phải làm việc với Windows_Base như trên, nếu không sẽ báo lỗi đấy.
Các thông tin trên được lấy từ Internet. Bản quyền thuộc về tất cả chúng ta!
 
hello.gif


Mã:
#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
#  ゲーム中のすべてのウィンドウのスーパークラスです。
#==============================================================================

class Window_Base < Window
 #--------------------------------------------------------------------------
 # ● オブジェクト初期化
 #     x      : ウィンドウの X 座標
 #     y      : ウィンドウの Y 座標
 #     width  : ウィンドウの幅
 #     height : ウィンドウの高さ
 #--------------------------------------------------------------------------
 def initialize(x, y, width, height)
   super()
   @windowskin_name = $game_system.windowskin_name
   self.windowskin = RPG::Cache.windowskin(@windowskin_name)
   self.x = x
   self.y = y
   self.width = width
   self.height = height
   self.z = 100
 end
 #--------------------------------------------------------------------------
 # ● 解放
 #--------------------------------------------------------------------------
 def dispose
   # ウィンドウ内容のビットマップが設定されていれば解放
   if self.contents != nil
     self.contents.dispose
   end
   super
 end
 #--------------------------------------------------------------------------
 # ● 文字色取得
 #     n : 文字色番号 (0~7)
 #--------------------------------------------------------------------------
 def text_color(n)
   case n
   when 0
     return Color.new(255, 255, 255, 255)
   when 1
     return Color.new(128, 128, 255, 255)
   when 2
     return Color.new(255, 128, 128, 255)
   when 3
     return Color.new(128, 255, 128, 255)
   when 4
     return Color.new(128, 255, 255, 255)
   when 5
     return Color.new(255, 128, 255, 255)
   when 6
     return Color.new(255, 255, 128, 255)
   when 7
     return Color.new(192, 192, 192, 255)
   else
     normal_color
   end
 end
 #--------------------------------------------------------------------------
 # ● 通常文字色の取得
 #--------------------------------------------------------------------------
 def normal_color
   return Color.new(255, 255, 255, 255)
 end
 #--------------------------------------------------------------------------
 # ● 無効文字色の取得
 #--------------------------------------------------------------------------
 def disabled_color
   return Color.new(255, 255, 255, 128)
 end
 #--------------------------------------------------------------------------
 # ● システム文字色の取得
 #--------------------------------------------------------------------------
 def system_color
   return Color.new(192, 224, 255, 255)
 end
 #--------------------------------------------------------------------------
 # ● ピンチ文字色の取得
 #--------------------------------------------------------------------------
 def crisis_color
   return Color.new(255, 255, 64, 255)
 end
 #--------------------------------------------------------------------------
 # ● 戦闘不能文字色の取得
 #--------------------------------------------------------------------------
 def knockout_color
   return Color.new(255, 64, 0)
 end
 #--------------------------------------------------------------------------
 # Text Outline Color
 #--------------------------------------------------------------------------
def outline_color
  return Color.new(155, 100, 0)
end
 #--------------------------------------------------------------------------
 # ● フレーム更新
 #--------------------------------------------------------------------------
 def update
   super
   # ウィンドウスキンが変更された場合、再設定
   if $game_system.windowskin_name != @windowskin_name
     @windowskin_name = $game_system.windowskin_name
     self.windowskin = RPG::Cache.windowskin(@windowskin_name)
   end
 end
 #--------------------------------------------------------------------------
 # ● グラフィックの描画
 #     actor : アクター
 #     x     : 描画先 X 座標
 #     y     : 描画先 Y 座標
 #--------------------------------------------------------------------------
 def draw_actor_graphic(actor, x, y)
   bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
   cw = bitmap.width / 4
   ch = bitmap.height / 4
   src_rect = Rect.new(0, 0, cw, ch)
   self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
 end
 #--------------------------------------------------------------------------
 # ● 名前の描画
 #     actor : アクター
 #     x     : 描画先 X 座標
 #     y     : 描画先 Y 座標
 #--------------------------------------------------------------------------
 def draw_actor_name(actor, x, y)
   self.contents.font.color = normal_color
   self.contents.draw_text(x, y, 120, 32, actor.name)
 end
 #--------------------------------------------------------------------------
 # ● クラスの描画
 #     actor : アクター
 #     x     : 描画先 X 座標
 #     y     : 描画先 Y 座標
 #--------------------------------------------------------------------------
 def draw_actor_class(actor, x, y)
   self.contents.font.color = normal_color
   self.contents.draw_text(x, y, 236, 32, actor.class_name)
 end
 #--------------------------------------------------------------------------
 # ● レベルの描画
 #     actor : アクター
 #     x     : 描画先 X 座標
 #     y     : 描画先 Y 座標
 #--------------------------------------------------------------------------
 def draw_actor_level(actor, x, y)
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 32, 32, "Lv")
   self.contents.font.color = normal_color
   self.contents.draw_text(x + 32, y, 24, 32, actor.level.to_s, 2)
 end
 #--------------------------------------------------------------------------
 # ● 描画用のステート文字列作成
 #     actor       : アクター
 #     width       : 描画先の幅
 #     need_normal : [正常] が必要かどうか (true / false)
 #--------------------------------------------------------------------------
 def make_battler_state_text(battler, width, need_normal)
   # 括弧の幅を取得
   brackets_width = self.contents.text_size("[]").width
   # ステート名の文字列を作成
   text = ""
   for i in battler.states
     if $data_states[i].rating >= 1
       if text == ""
         text = $data_states[i].name
       else
         new_text = text + "/" + $data_states[i].name
         text_width = self.contents.text_size(new_text).width
         if text_width > width - brackets_width
           break
         end
         text = new_text
       end
     end
   end
   # ステート名の文字列が空の場合は "[正常]" にする
   if text == ""
     if need_normal
       text = "[Normal]"
     end
   else
     # 括弧をつける
     text = "[" + text + "]"
   end
   # 完成した文字列を返す
   return text
 end
 #--------------------------------------------------------------------------
 # ● ステートの描画
 #     actor : アクター
 #     x     : 描画先 X 座標
 #     y     : 描画先 Y 座標
 #     width : 描画先の幅
 #--------------------------------------------------------------------------
 def draw_actor_state(actor, x, y, width = 120)
   text = make_battler_state_text(actor, width, true)
   self.contents.font.color = actor.hp == 0 ? knockout_color : normal_color
   self.contents.draw_text(x, y, width, 32, text)
 end
 #--------------------------------------------------------------------------
 # ● EXP の描画
 #     actor : アクター
 #     x     : 描画先 X 座標
 #     y     : 描画先 Y 座標
 #--------------------------------------------------------------------------
 def draw_actor_exp(actor, x, y)
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 24, 32, "E")
   self.contents.font.color = normal_color
   self.contents.draw_text(x + 24, y, 84, 32, actor.exp_s, 2)
   self.contents.draw_text(x + 108, y, 12, 32, "/", 1)
   self.contents.draw_text(x + 120, y, 84, 32, actor.next_exp_s)
 end
 #--------------------------------------------------------------------------
 # ● HP の描画
 #     actor : アクター
 #     x     : 描画先 X 座標
 #     y     : 描画先 Y 座標
 #     width : 描画先の幅
 #--------------------------------------------------------------------------
 def draw_actor_hp(actor, x, y, width = 144)
   # 文字列 "HP" を描画
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
   # MaxHP を描画するスペースがあるか計算
   if width - 32 >= 108
     hp_x = x + width - 108
     flag = true
   elsif width - 32 >= 48
     hp_x = x + width - 48
     flag = false
   end
   # HP を描画
   self.contents.font.color = actor.hp == 0 ? knockout_color :
     actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color
   self.contents.draw_text(hp_x, y, 48, 32, actor.hp.to_s, 2)
   # MaxHP を描画
   if flag
     self.contents.font.color = normal_color
     self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)
     self.contents.draw_text(hp_x + 60, y, 48, 32, actor.maxhp.to_s)
   end
 end
 #--------------------------------------------------------------------------
 # ● SP の描画
 #     actor : アクター
 #     x     : 描画先 X 座標
 #     y     : 描画先 Y 座標
 #     width : 描画先の幅
 #--------------------------------------------------------------------------
 def draw_actor_sp(actor, x, y, width = 144)
   # 文字列 "SP" を描画
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
   # MaxSP を描画するスペースがあるか計算
   if width - 32 >= 108
     sp_x = x + width - 108
     flag = true
   elsif width - 32 >= 48
     sp_x = x + width - 48
     flag = false
   end
   # SP を描画
   self.contents.font.color = actor.sp == 0 ? knockout_color :
     actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color
   self.contents.draw_text(sp_x, y, 48, 32, actor.sp.to_s, 2)
   # MaxSP を描画
   if flag
     self.contents.font.color = normal_color
     self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
     self.contents.draw_text(sp_x + 60, y, 48, 32, actor.maxsp.to_s)
   end
 end
 #--------------------------------------------------------------------------
 # ● パラメータの描画
 #     actor : アクター
 #     x     : 描画先 X 座標
 #     y     : 描画先 Y 座標
 #     type  : パラメータの種類 (0~6)
 #--------------------------------------------------------------------------
 def draw_actor_parameter(actor, x, y, type)
   case type
   when 0
     parameter_name = $data_system.words.atk
     parameter_value = actor.atk
   when 1
     parameter_name = $data_system.words.pdef
     parameter_value = actor.pdef
   when 2
     parameter_name = $data_system.words.mdef
     parameter_value = actor.mdef
   when 3
     parameter_name = $data_system.words.str
     parameter_value = actor.str
   when 4
     parameter_name = $data_system.words.dex
     parameter_value = actor.dex
   when 5
     parameter_name = $data_system.words.agi
     parameter_value = actor.agi
   when 6
     parameter_name = $data_system.words.int
     parameter_value = actor.int
   end
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 120, 32, parameter_name)
   self.contents.font.color = normal_color
   self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
 end
 #--------------------------------------------------------------------------
 # ● アイテム名の描画
 #     item : アイテム
 #     x    : 描画先 X 座標
 #     y    : 描画先 Y 座標
 #--------------------------------------------------------------------------
 def draw_item_name(item, x, y)
   if item == nil
     return
   end
   bitmap = RPG::Cache.icon(item.icon_name)
   self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
   self.contents.font.color = normal_color
   self.contents.draw_text(x + 28, y, 212, 32, item.name)
 end
end




CODE

#==============================================================================
# ■ Window_Message
#------------------------------------------------------------------------------
#  文章表示に使うメッセージウィンドウです。
#==============================================================================

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
 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
   # メッセージ コールバックを呼ぶ
   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 refresh
   self.contents.clear
   self.contents.font.color = normal_color
   self.contents.font.name = $fontface
   self.contents.font.size = $fontsize
   x = y = 0
   @cursor_width = 0
   # 選択肢なら字下げを行う
   if $game_temp.choice_start == 0
     x = 8
   end
   # 表示待ちのメッセージがある場合
   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 文字を取得 (文字が取得できなくなるまでループ)
     while ((c = text.slice!(/./m)) != nil)
       # \\ の場合
       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
         # 次の文字へ
         next
       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
         # 次の文字へ
         next
       end
       # 改行文字の場合
       if c == "\n"
         # 選択肢ならカーソルの幅を更新
         if y >= $game_temp.choice_start
           @cursor_width = [@cursor_width, x].max
         end
         # y に 1 を加算
         y += 1
         x = 0
         # 選択肢なら字下げを行う
         if y >= $game_temp.choice_start
           x = 8
         end
         # 次の文字へ
         next
       end
       # 文字を描画
      self.contents.font.color = outline_color
      self.contents.draw_text(4 + x-1, 32 * y-1, 40, 32, c)
      self.contents.draw_text(4 + x-1, 32 * y+1, 40, 32, c)
      self.contents.draw_text(4 + x+1, 32 * y+1, 40, 32, c)
      self.contents.draw_text(4 + x+1, 32 * y-1, 40, 32, c)
      self.contents.font.color = normal_color
      self.contents.draw_text(4 + x, 32 * y, 40, 32, c)
       # x に描画した文字の幅を加算
       x += self.contents.text_size(c).width
     end
   end
   # 選択肢の場合
   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 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 = 160
 end
 #--------------------------------------------------------------------------
 # ● フレーム更新
 #--------------------------------------------------------------------------
 def update
   super
   # フェードインの場合
   if @fade_in
     self.contents_opacity += 24
     if @input_number_window != nil
       @input_number_window.contents_opacity += 24
     end
     if self.contents_opacity == 255
       @fade_in = false
     end
     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
     # 選択肢の表示中でなければポーズサインを表示
     if $game_temp.choice_max == 0
       self.pause = true
     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
     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
     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 self.opacity == 0
       self.visible = false
       @fade_out = false
       $game_temp.message_window_showing = false
     end
     return
   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

Script by spik

Cái này có thể thay đổi màu tuỳ theo ý mình....
 
Xin lỗi, tôi nhớ là đã nói rõ rằng bài này tôi lấy trên internet và nó miễn phí.
Thứ hai nữa là : đúng là ở bõ này có bài viết như thế, nhưng nó là của chính tôi chứ ai? Thật ra tôi chẳng quan tâm lắm tới Exp đâu, tôi chỉ muốn đóng góp mấy ngu ý cho cộng đồng RPG Marker thôi.
Cảm ơn vì đã nhắc nhở, lần sau tôi sẽ rút kinh nghiệm.
 
Không sao đâu, chỉ cần lưu ý là được.EXP đâu có nuôi sống mình.Đúng như ông noí đóng góp cho mọi người vẫn tốt hơn :D...Good Luck !!
 
Back
Top