コード: 全て選択
=begin
-------------------------------------------------------------------------------
■好感度アイコン制御文字スクリプト
弓猫様 RGSS3 楽ちん名前枠 ver 1.02 対応版
2019/04/21 by ecf5DTTzl6h6lJj02
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
● 概要等
好感度を表すアイコン/文字を名前枠に表示できるようにするスクリプトです
SHOW_ICON を true に設定することで有効になります。
文章内で\FICON[n] (大文字小文字問わない、nは好感度の変数の番号)
と入力することで、変数の値に応じてアイコン/文字を描き分けます。
\NAME[n], \ACTOR[n], \ENEMY[n] の後に続けて記述してください。
顔グラフィック連携にも対応しています(してるはず…してなかったらゴメンネ)。
その場合は(文書全体の)先頭に記述してください。
今回、アイコンで表示するようにしてあります。
process_favorbility_icon(num, pos)
という関数(メソッド)で処理しているので、該当部分を読んで、調整してください。
前のときのように文字で表示することもできます。
その場合は 246行目に記載されている
process_favorbility_icon(obtain_escape_param(text), pos)
という一文をコメントアウトし、
次の行の
process_favorbility_text(obtain_escape_param(text), pos)
という一分のコメントアウトを解除してください。
(行全体を選択し、右クリックメニューのコメントアウトで、
コメントアウト/解除ができます)
また、文字で表示する処理を
process_favorbility_text(num, pos)
という関数(メソッド)で処理しているので、該当部分を読んで、調整してください。
-------------------------------------------------------------------------------
=end
#楽チン名前枠のスクリプトが無効化されている場合はfalseに変えてください
if true
#↓この囲みの中は true のときにのみ有効----------------------------------------
module YT002_NAME
# この値を true にすると好感度用アイコン表示の制御文字が有効化されます。
SHOW_ICON = true
end
class Window_NameShow < Window_Base
#--------------------------------------------------------------------------
# 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :icon_visible #好感度アイコン表示フラグ
#--------------------------------------------------------------------------
# オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, 0, window_width, fitting_height(1))
create_back
@name = ""
@tmp_name = ""
@name_from_face = ""
@tmp_name_from_face = ""
self.arrows_visible = false
@icon_visible = false
refresh
end
#--------------------------------------------------------------------------
# ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
if @name != "" && @name != nil
if @icon_visible
#テキストに好感度アイコン表示用の制御文字がくっついているので、
#削除したテキストにアイコンの幅を足したものを返す。
text = @name.to_s.clone
text.gsub!(/\\F\[(\d+)\]/i) { "" }
return text_size(text).width + standard_padding * 2 + 24
else
return text_size(@name).width + standard_padding * 2
end
elsif @name_from_face != "" && @name_from_face != nil
if @icon_visible
#テキストに好感度アイコン表示用の制御文字がくっついているので、
#削除したテキストにアイコンの幅を足したものを返す。
text = @name_from_face.to_s.clone
text.gsub!(/\\F\[(\d+)\]/i) { "" }
return text_size(text).width + standard_padding * 2 + 24
else
return text_size(@name_from_face).width + standard_padding * 2
end
else
return Graphics.width
end
end
#--------------------------------------------------------------------------
# ☆ リフレッシュ
#
# 好感度アイコンを描画するとき制御文字付テキスト描画で対応。
# 問題ないとは思うが、通常と違い中央揃えしないので、
# レイアウトが崩れる可能性はある。
#--------------------------------------------------------------------------
def refresh
contents.clear
if @name != "" && @name != nil
w = window_width
move(self.x, self.y, w, self.height)
if @icon_visible
p @name
draw_text_ex(0, 0, @name)
else
draw_text(-standard_padding, 0, w , line_height, @name,1)
end
elsif @name_from_face != "" && @name_from_face != nil
w = window_width
move(self.x, self.y, w, self.height)
if @icon_visible
p @name_from_face
draw_text_ex(0, 0, @name_from_face)
else
draw_text(-standard_padding, 0, w, line_height, @name_from_face,1)
end
end
end
#--------------------------------------------------------------------------
# 好感度アイコン描画用制御文字追加処理
#--------------------------------------------------------------------------
def set_ficon(num)
if @name != "" && @name != nil
@name = "#{@name}\\F[#{num}]"
end
if @name_from_face != "" && @name_from_face != nil
@name_from_face = "#{@name_from_face}\\F[#{num}]"
end
@icon_visible = true
end
end
class Window_Message < Window_Base
include YT002_NAME
#--------------------------------------------------------------------------
# ● 制御文字の処理
# code : 制御文字の本体部分(「\C[1]」なら「C」)
# text : 描画処理中の文字列バッファ(必要なら破壊的に変更)
# pos : 描画位置 {:x, :y, :new_x, :height}
#--------------------------------------------------------------------------
def process_escape_character(code, text, pos)
# ◎1.01
# 名前枠のクリアフラグを更新
@clear_flag = true
case code.upcase
# 表示名をアクター番号で指定
# \ACTOR[1]ならアクター1番の名前を表示
when 'ACTOR'
text.sub(/\[(\d+)\]/i, "")
obtain_escape_param(text)
@name_window.set_name($game_actors[$1.to_i].name)
if $game_switches[NAME_SWITCH] || NAME_SWITCH == 0
@name_window.create_back if $game_message.background == 1
@name_window.open
end
# 表示名を任意の文字列で指定
# \NAME[エドモンド]ならエドモンドと表示
when 'NAME'
text.sub!(/\[([^\[\]]*)\]/i, "")
obtain_escape_param(text)
@name_window.set_name($1)
if $game_switches[NAME_SWITCH] || NAME_SWITCH == 0
@name_window.create_back if $game_message.background == 1
@name_window.open
end
# 表示名を敵番号で指定
# \ENEMY[1]ならデータベースの敵1番の名前を表示
when 'ENEMY'
text.sub(/\[(\d+)\]/i, "")
obtain_escape_param(text)
@name_window.set_name($data_enemies[$1.to_i].name)
if $game_switches[NAME_SWITCH] || NAME_SWITCH == 0
@name_window.create_back if $game_message.background == 1
@name_window.open
end
# ◎1.01
when '!'
@clear_flag = false
# 好感度アイコンを名前の横に表示する
# FICON[ 好感度変数番号 ] で指定
# ACTOR[n],NAME[n],ENEMY[n],の後ろに記述
# 顔グラフィックに対応させる場合文書の先頭に。
# 顔グラフィック連携にも対応できてる筈。
when 'FICON'
text.sub(/\[(\d+)\]/i, "")
obtain_escape_param(text)
if SHOW_ICON
@name_window.set_ficon($1.to_i)
end
end
yt002_process_escape_character(code, text, pos)
end
#--------------------------------------------------------------------------
# ● 入力待ち処理
#--------------------------------------------------------------------------
def input_pause
yt002_input_pause
# ◎1.01
@name_window.clear_name if @clear_flag
if SHOW_ICON
#好感度アイコンを表示する場合
@name_window.icon_visible = false if @clear_flag
end
end
end
#↑この囲みの中は true のときにのみ有効----------------------------------------
end
class Window_Base < Window
#--------------------------------------------------------------------------
# ● 制御文字の処理
# code : 制御文字の本体部分(「\C[1]」なら「C」)
#--------------------------------------------------------------------------
alias process_escape_character_origin process_escape_character
def process_escape_character(code, text, pos)
case code.upcase
#-------------------------------------------------------------------------
# 好感度文字/アイコン描画用制御文字
# 2019/04/19 by ecf5DTTzl6h6lJj02
#
# 使い方(usage): \F[変数番号]
#
# 文字で描画がすることも、アイコンを使って描画することもできるように
# 作成してあります。
# アイコンを使って描画したい場合は、
# process_favorvility_icon(obtain_escape_param(text), pos)
# のコメントアウトを解除し、
# process_favorbility_text(obtain_escape_param(text), pos)
# をコメントアウトしてください。
#-------------------------------------------------------------------------
when 'F'
process_favorbility_icon(obtain_escape_param(text), pos)
#~ process_favorbility_text(obtain_escape_param(text), pos)
end
process_escape_character_origin(code, text, pos)
end
#--------------------------------------------------------------------------
# ● 好感度文字の描画処理
#
# 引数 num に 指定された変数番号の値に応じて、アイコンの描画をする処理
# 好感度の判定(数値)等はご自分で調整してください。
#--------------------------------------------------------------------------
def process_favorbility_text(num, pos)
#文字色設定
#Color.new(赤の強さ,緑の強さ,青の強さ)で設定
color1 = Color.new(222,55,83) #好感度151以上
color2 = Color.new(222,111,129) #好感度101以上150以下
color3 = Color.new(222,166,176) #好感度50以上100以下
color4 = Color.new(255,255,255) #好感度0以上50以下
color5 = Color.new(0,0,0) #好感度マイナス値
pre_color = Color.new #好感度文字描画前の色(初期化)
#現在の文字色をセット
pre_color.set(contents.font.color)
#好感度文字設定(1文字で設定してください)
fav_text = '♥'
#テキストの幅を取得
text_width = text_size(fav_text).width
#---------------------------------------------------------------
# 好感度文字描画処理
# change_color( Colorオブジェクト名 )で色を変更
# draw_text で文字描画
# pos[:x] += text_width で次に書く文字の位置を変更
# change_color(pre_color)で、以前の文字描画色に戻す
# という処理をしている。
#---------------------------------------------------------------
favorbility = $game_variables[ num ]
# 好感度に応じて仕分ける部分
# 数値は適宜変更してください。
# いらない elsif は消してください。
if 150 < favorbility #好感度151以上
change_color(color1)
draw_text(pos[:x], pos[:y], text_width * 2, pos[:height], fav_text)
pos[:x] += text_width
change_color(pre_color)
elsif 100 < favorbility #好感度101以上150以下
change_color(color2)
draw_text(pos[:x], pos[:y], text_width * 2, pos[:height], fav_text)
pos[:x] += text_width
change_color(pre_color)
elsif 50 < favorbility #好感度50以上100以下
change_color(color3)
draw_text(pos[:x], pos[:y], text_width * 2, pos[:height], fav_text)
pos[:x] += text_width
change_color(pre_color)
elsif 0 < favorbility #好感度1以上50以下
change_color(color4)
draw_text(pos[:x], pos[:y], text_width * 2, pos[:height], fav_text)
pos[:x] += text_width
change_color(pre_color)
else #好感度0以下
change_color(color5)
draw_text(pos[:x], pos[:y], text_width * 2, pos[:height], fav_text)
pos[:x] += text_width
change_color(pre_color)
end
end
#--------------------------------------------------------------------------
# ● 好感度アイコンの描画処理
#
# 引数 num に 指定された変数番号の値に応じて、アイコンの描画をする処理
# process_draw_icon() の一番目に書きたいアイコンの番号を設定する。
# 好感度の判定(数値)等はご自分で調整してください。
#--------------------------------------------------------------------------
def process_favorbility_icon(num, pos)
favorbility = $game_variables[ num ]
if 150 < favorbility #好感度151以上
process_draw_icon(187, pos)
elsif 100 < favorbility #好感度101以上150以下
process_draw_icon(190, pos)
elsif 50 < favorbility #好感度51以上100以下
process_draw_icon(188, pos)
elsif 0 < favorbility #好感度1以上50以下
process_draw_icon(184, pos)
else #好感度0以下
process_draw_icon(185, pos)
end
end
end