#============================================================================== # ■ RGSS3 ステート・強化・弱体カウント表示 Ver1.04 by 星潟 #------------------------------------------------------------------------------ # ステート・強化・弱体について、アイコンと共に # 残り持続ターン数の値を表示します。 # 非戦闘時の表示形式も選択できます。 # (ステートはターン数・歩数・表示なし。 # 強化・弱体はターン数・表示なしからの選択となります) # # また、当方の状況確認コマンドとの併用時に # 状況確認ウィンドウ中のステート・強化・弱体にも # カウント表示を行わせるか否かを指定できます。 #============================================================================== # ステートのメモ欄に指定 #------------------------------------------------------------------------------ # <ステートカウント非表示> # # ステートカウントを表示する設定にしていても # このステートについてはステートカウントが表示されなくなる。 #============================================================================== module ST_B_REST #ステートカウント非表示の設定用キーワードを指定。 Word = "ステートカウント非表示" #非戦闘時のステートの描写タイプを指定します。 #0で残りターン、1で残り歩数、2で何も表示しません。 STYPE = 0 #非戦闘時の強化の描写タイプを指定します。 #0で残りターン、1で何も表示しません。 BTYPE = 0 #X座標の調整値を指定します。 X_POS = 0 #Y座標の調整値を指定します。 Y_POS = -4 #文字色を配列で指定します。 #赤、緑、青、アルファの順に指定します。 COLOR = [255,255,255,255] #縁の文字色を配列で指定します。 #赤、緑、青、アルファの順に指定します。 O_CLR = [0,0,0,255] #文字の影の有無を指定します。 #trueで有り、falseで無しとなります。 SHADOW = true #フォントサイズを指定します。 FSIZE = 18 #状況確認コマンドスクリプトを導入しているか否かを指定します。 #trueで導入、falseで導入していない前提で処理を行います。 #(導入している状態で、ウィンドウにカウントを表示させたくない場合は # falseにして下さい) CONF = false #XPスタイルバトルスクリプトを導入しているか否かを指定します。 #trueで導入、falseで導入していない前提で処理を行います。 XPST = false #XPスタイルバトルリフォームバトルステータスを導入しているか否かを指定します。 #trueで導入、falseで導入していない前提で処理を行います。 XPRB = false end class Game_BattlerBase #-------------------------------------------------------------------------- # リフレッシュ #-------------------------------------------------------------------------- alias refresh_buff_rank refresh def refresh #ターン数を整数化。 @buff_turns.keys.each {|i| @buff_turns[i] = @buff_turns[i].to_i} #本来の処理を実行。 refresh_buff_rank end #-------------------------------------------------------------------------- # ステートの残時間を描写 #-------------------------------------------------------------------------- def state_rest_array #配列を作成。 array = [] #描写タイプを取得。戦闘中はタイプ0固定。 type = $game_party.in_battle ? 0 : ST_B_REST::STYPE #タイプ2の場合は空の配列を返す。 return array if type == 2 #現在のステート別に判定。 states.each {|state| #ステートアイコンIDの場合は飛ばす。 next if state.icon_index == 0 #タイプ別に判定する。 if state.state_count_invisible array.push("") else case type #タイプ0の場合、自動解除される場合は残りターン数、 #自動解除されない場合は空の文字列を配列に入れる。 when 0;array.push(state.auto_removal_timing != 0 ? @state_turns[state.id] : "") #タイプ1の場合、歩数で解除される場合は残り歩数、 #解除されない場合は空の文字列を配列に入れる。 when 1;array.push(state.remove_by_walking ? @state_steps[state.id] : "") end end } #配列を返す。 array end #-------------------------------------------------------------------------- # 強化・弱体の残時間を描写 #-------------------------------------------------------------------------- def buff_rest_array #配列を作成。 array = [] #描写タイプを取得。戦闘中はタイプ0固定。 type = $game_party.in_battle ? 0 : ST_B_REST::BTYPE #タイプ1の場合は空の配列を返す。 return array if type == 1 #能力別に強化・弱体が発生しているかどうかを判定し #配列に残りターンを入れる。 @buffs.each_with_index {|lv, i| next if buff_icon_index(lv, i) == 0 array.push(@buff_turns[i]) } #配列を返す。 array end end class Window_Base < Window #-------------------------------------------------------------------------- # ステートおよび強化/弱体のアイコンを描画 #-------------------------------------------------------------------------- alias draw_actor_icons_rest_draw draw_actor_icons def draw_actor_icons(actor, x, y, width = 96) #本来の処理を実行。 draw_actor_icons_rest_draw(actor, x, y, width) #フォントデータを保存。 font_data = contents.font.clone #指定したフォントに変更。 contents.font.size = ST_B_REST::FSIZE ca1 = ST_B_REST::COLOR contents.font.color = Color.new(ca1[0],ca1[1],ca1[2],ca1[3]) ca2 = ST_B_REST::O_CLR contents.font.out_color = Color.new(ca2[0],ca2[1],ca2[2],ca2[3]) contents.font.shadow = ST_B_REST::SHADOW #残カウントの配列を準備。 array = actor.state_rest_array + actor.buff_rest_array #長さに応じて配列を削る。 array = array[0, width / 24] #配列の値を描写。 array.each_with_index {|n, i| draw_text( x + 24 * i + ST_B_REST::X_POS, y + ST_B_REST::Y_POS, 24, 24, n, 2) } #保存したフォントデータを復帰。 contents.font = font_data end end if ST_B_REST::CONF class Window_B_Confirm < Window_Selectable #-------------------------------------------------------------------------- # 項目の描画 #-------------------------------------------------------------------------- alias draw_item_rest_draw draw_item def draw_item(index) #本来の処理を実行。 draw_item_rest_draw(index) #フォントデータを保存。 font_data = contents.font.clone #指定したフォントに変更。 contents.font.size = ST_B_REST::FSIZE ca1 = ST_B_REST::COLOR contents.font.color = Color.new(ca1[0],ca1[1],ca1[2],ca1[3]) ca2 = ST_B_REST::O_CLR contents.font.out_color = Color.new(ca2[0],ca2[1],ca2[2],ca2[3]) contents.font.shadow = ST_B_REST::SHADOW if @last_actor == nil case @display_mode when 0 actor = B_CONFIRM::PTMT ? $game_party.all_members[index] : $game_party.members[index] when 1 actor = $game_troop.unhidden_members[index] end rect = item_rect(index) icons_width = (rect.width - rect.x - 150 - 96) / 24 #ステートの残カウントの配列を準備。 array = actor.state_rest_array #長さに応じて配列を削る。 sub_array = array[0, icons_width] #配列の値を描写。 sub_array.each_with_index {|n, i| draw_text(x + 24 * i + ST_B_REST::X_POS + 246, rect.y + y + ST_B_REST::Y_POS + line_height * 1, 24, 24, n, 2) } #長さに応じて配列を削る。 sub_array = array[icons_width, icons_width * 2] #配列の値を描写。 sub_array.each_with_index {|n, i| draw_text(x + 24 * i + ST_B_REST::X_POS + 246, rect.y + y + ST_B_REST::Y_POS + line_height * 2, 24, 24, n, 2) } if sub_array != nil #強化・弱体の残カウントの配列を準備。 array = actor.buff_rest_array #長さに応じて配列を削る。 sub_array = array[0, icons_width] #配列の値を描写。 sub_array.each_with_index {|n, i| draw_text(x + 24 * i + ST_B_REST::X_POS + 246, rect.y + y + ST_B_REST::Y_POS + line_height * 3, 24, 24, n, 2) } end #保存したフォントデータを復帰。 contents.font = font_data end end class Window_B_Confirm_Detail < Window_Base #-------------------------------------------------------------------------- # リフレッシュ #-------------------------------------------------------------------------- alias refresh_rest_draw refresh def refresh #バトラーを取得。 actor = @window_b_confirm.last_actor #本来の処理を実行。 refresh_rest_draw #フォントデータを保存。 font_data = contents.font.clone #指定したフォントに変更。 contents.font.size = ST_B_REST::FSIZE ca1 = ST_B_REST::COLOR contents.font.color = Color.new(ca1[0],ca1[1],ca1[2],ca1[3]) ca2 = ST_B_REST::O_CLR contents.font.out_color = Color.new(ca2[0],ca2[1],ca2[2],ca2[3]) contents.font.shadow = ST_B_REST::SHADOW #項目内のデータを描写していく。 icons_width = (width - x - 162 - 96) / 24 #ステートの残カウントの配列を準備。 array = actor.state_rest_array #長さに応じて配列を削る。 sub_array = array[0, icons_width] #配列の値を描写。 sub_array.each_with_index {|n, i| draw_text(x + 24 * i + ST_B_REST::X_POS + 246, y + ST_B_REST::Y_POS + line_height * 1, 24, 24, n, 2) } #長さに応じて配列を削る。 sub_array = array[icons_width, icons_width * 2] #配列の値を描写。 sub_array.each_with_index {|n, i| draw_text(x + 24 * i + ST_B_REST::X_POS + 246, y + ST_B_REST::Y_POS + line_height * 2, 24, 24, n, 2) } if sub_array != nil #強化・弱体の残カウントの配列を準備。 array = actor.buff_rest_array #長さに応じて配列を削る。 sub_array = array[0, icons_width] #配列の値を描写。 sub_array.each_with_index {|n, i| draw_text(x + 24 * i + ST_B_REST::X_POS + 246, y + ST_B_REST::Y_POS + line_height * 3, 24, 24, n, 2) } #保存したフォントデータを復帰。 contents.font = font_data end end end class RPG::State < RPG::BaseItem #-------------------------------------------------------------------------- # ステートカウント非表示フラグ #-------------------------------------------------------------------------- def state_count_invisible (@state_count_invisible ||= /<#{ST_B_REST::Word}>/ =~ note ? 1 : 0) == 1 end end if ST_B_REST::XPST class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # ステートカウントの取得。念の為別定義 #-------------------------------------------------------------------------- def state_turns_for_xp_style_battle @state_turns end #-------------------------------------------------------------------------- # ステートカウントの取得。念の為別定義 #-------------------------------------------------------------------------- def buff_turns_for_xp_style_battle @buff_turns end end class Window_BattleStatus < Window_Selectable #-------------------------------------------------------------------------- # アクターのステータス配列にステートカウントを追加 #-------------------------------------------------------------------------- alias status_state_turns_for_xp_style_battle status def status(actor) status_state_turns_for_xp_style_battle(actor) + [actor.state_turns_for_xp_style_battle.clone] + [actor.buff_turns_for_xp_style_battle.clone] end end end if ST_B_REST::XPRB class Sprite_StateIcon < Sprite_BattleStatus #-------------------------------------------------------------------------- # ステートアイコン配列の取得 #-------------------------------------------------------------------------- alias icons_turns icons def icons {:icons => icons_turns, :state_turns => @battler.state_turns_for_xp_style_battle.clone, :buff_turns => @battler.buff_turns_for_xp_style_battle.clone} end end end