设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1612|回复: 3
打印 上一主题 下一主题

[已经解决] 战斗界面下如何查看敌方身上的BUFF?

[复制链接]

Lv3.寻梦者

梦石
1
星屑
472
在线时间
120 小时
注册时间
2016-3-6
帖子
83
跳转到指定楼层
1
发表于 2016-3-20 16:31:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
战斗的时候我方给敌方施加了一个减益Buff,或者敌方给自己施加了一个增益Buff。
问题是我看不到敌方身上有哪些增益或减益BUFF啊!

这个能不能进行设置的?

比如:



在选择目标的时候,敌人名字旁边添加一些BUFF图标,表示对方目前身上有哪些BUFF。

这个的话,需要改动脚本还是只要设置一下就行了?
R

Lv3.寻梦者

梦石
0
星屑
2920
在线时间
713 小时
注册时间
2010-7-25
帖子
813

开拓者

2
发表于 2016-3-21 13:50:14 | 只看该作者
RUBY 代码复制
  1. #==============================================================================
  2. #  ■エネミーの状態を表示 for RGSS3 Ver0.90-α
  3. # □作成者 kure
  4. #==============================================================================
  5. # 怪物备注   <情報表示幅 150>  血条变成150%长度,状态显示额外增加2个
  6. #           <情報非表示> 敌人的HP和状态不会显示
  7.  
  8. $kure_base_script = {} if $kure_base_script == nil
  9. $kure_base_script[:InfoBar] = 100
  10. p "エネミーの情報表示"
  11. module KURE
  12.   module InfoBar
  13.     #初期設定(変更しない事)-----------------------------------------------------
  14.     COLOR = []
  15.  
  16.     #表示色(IDによって割り当てが決まっています。)
  17.       #バーの背景色(ID0)
  18.       COLOR[0] = Color.new(32 ,32, 64, 255)
  19.  
  20.       #HPバーの色(ID1,ID2)
  21.       COLOR[1] = Color.new(224 ,128, 64, 255)
  22.       COLOR[2] = Color.new(240 ,192, 64, 255)
  23.  
  24.   end
  25. end
  26.  
  27. #==============================================================================
  28. # ■ RPG::Enemy(追加定義)
  29. #==============================================================================
  30. class RPG::Enemy < RPG::BaseItem
  31.   #--------------------------------------------------------------------------
  32.   # ☆ バーの表示幅の定義(追加定義)
  33.   #--------------------------------------------------------------------------  
  34.   def infobar_width
  35.     @note.match(/<情報表示幅\s?(\d+)\s?>/)
  36.     return 100 unless $1
  37.     return $1.to_i
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ☆ バーの表示幅の定義(追加定義)
  41.   #--------------------------------------------------------------------------  
  42.   def infobar_visible?
  43.     return false if @note.include?("<情報非表示>")
  44.     return true
  45.   end
  46. end
  47.  
  48. #==============================================================================
  49. # ■ Game_Enemy
  50. #==============================================================================
  51. class Game_Enemy < Game_Battler
  52.   #--------------------------------------------------------------------------
  53.   # ☆ バーの表示幅の定義(追加定義)
  54.   #--------------------------------------------------------------------------  
  55.   def infobar_width
  56.     return enemy.infobar_width
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ☆ バーの表示幅の定義(追加定義)
  60.   #--------------------------------------------------------------------------  
  61.   def infobar_visible?
  62.     return enemy.infobar_visible?
  63.   end
  64. end
  65.  
  66. #==============================================================================
  67. # ■ Spriteset_Battle
  68. #==============================================================================
  69. class Spriteset_Battle
  70.   #--------------------------------------------------------------------------
  71.   # ● 敵キャラスプライトの作成(エイリアス再定義)
  72.   #--------------------------------------------------------------------------
  73.   alias k_basescript_before_create_enemies create_enemies
  74.   def create_enemies
  75.     k_basescript_before_create_enemies
  76.     @enemy_info_bar = $game_troop.members.reverse.collect do |enemy|
  77.       Sprite_Infobar.new(@viewport1, enemy)
  78.     end
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 敵キャラスプライトの更新(エイリアス再定義)
  82.   #--------------------------------------------------------------------------
  83.   alias k_basescript_before_update_enemies update_enemies
  84.   def update_enemies
  85.     k_basescript_before_update_enemies
  86.     @enemy_info_bar.each {|sprite| sprite.update }
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 敵キャラスプライトの解放(エイリアス再定義)
  90.   #--------------------------------------------------------------------------
  91.   alias k_basescript_before_dispose_enemies dispose_enemies
  92.   def dispose_enemies
  93.     k_basescript_before_dispose_enemies
  94.     @enemy_info_bar.each {|sprite| sprite.dispose }
  95.   end
  96. end
  97.  
  98. #==============================================================================
  99. # ■ Sprite_Infobar
  100. #==============================================================================
  101. class Sprite_Infobar < Sprite_Base
  102.   #--------------------------------------------------------------------------
  103.   # ● 公開インスタンス変数
  104.   #--------------------------------------------------------------------------
  105.   attr_accessor :battler
  106.   #--------------------------------------------------------------------------
  107.   # ● オブジェクト初期化
  108.   #--------------------------------------------------------------------------
  109.   def initialize(viewport, battler = nil)
  110.     super(viewport)
  111.     @battler = battler
  112.     @fill_w = nil
  113.     @bitmap_data = Cache.battler(battler.battler_name, battler.battler_hue)
  114.     @state = battler.states
  115.     @icon_set = Cache.system("Iconset")
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ● フレーム更新
  119.   #--------------------------------------------------------------------------
  120.   def update
  121.     super
  122.     if @battler && !@battler.hidden?
  123.       @use_sprite = @battler.use_sprite?
  124.       if @use_sprite
  125.         update_bitmap
  126.         update_origin
  127.         update_position
  128.       end
  129.     else
  130.       self.bitmap = nil
  131.     end
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● 解放
  135.   #--------------------------------------------------------------------------
  136.   def dispose
  137.     bitmap.dispose if bitmap
  138.     super
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● 転送元ビットマップの更新
  142.   #--------------------------------------------------------------------------
  143.   def update_bitmap
  144.     fill_w = @battler.infobar_width * (@battler.hp.to_f / @battler.mhp)
  145.     state = battler.states
  146.     if @fill_w != fill_w or @state != state
  147.       @fill_w = fill_w
  148.       @state = state
  149.  
  150.       width = @battler.infobar_width + 4
  151.  
  152.       new_bitmap = Bitmap.new(width, 35)
  153.       @state.each_with_index {|state, index|
  154.         next if 24 * (index + 1) > new_bitmap.width
  155.         rect = Rect.new(state.icon_index % 16 * 24, state.icon_index / 16 * 24, 24, 24)
  156.         new_bitmap.blt(24 * index, 0, @icon_set, rect, 255)
  157.       }
  158.       new_bitmap.fill_rect(0, 25, width, 10, color(0))
  159.       new_bitmap.gradient_fill_rect(2, 27, fill_w, 6, color(1), color(2))
  160.  
  161.       self.bitmap = new_bitmap
  162.       init_visibility
  163.  
  164.       self.opacity = 0 unless @battler.infobar_visible?
  165.     end
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● 可視状態の初期化
  169.   #--------------------------------------------------------------------------
  170.   def init_visibility
  171.     @battler_visible = @battler.alive?
  172.     self.opacity = 0 unless @battler_visible
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ● 文字色取得
  176.   #--------------------------------------------------------------------------
  177.   def color(num)
  178.     return KURE::InfoBar::COLOR[num]
  179.   end
  180.   #--------------------------------------------------------------------------
  181.   # ● 原点の更新
  182.   #--------------------------------------------------------------------------
  183.   def update_origin
  184.     if bitmap
  185.       self.ox = bitmap.width / 2
  186.       self.oy = bitmap.height
  187.     end
  188.   end
  189.   #--------------------------------------------------------------------------
  190.   # ● 位置の更新
  191.   #--------------------------------------------------------------------------
  192.   def update_position
  193.     self.x = @battler.screen_x
  194.     self.y = @battler.screen_y - @bitmap_data.height
  195.     self.z = @battler.screen_z + 10
  196.   end
  197. end


这是看怪物血和血条下显示状态的脚本

RUBY 代码复制
  1. #==============================================================================
  2. # ■ RGSS3 状況確認コマンド Ver1.05 by 星潟
  3. #------------------------------------------------------------------------------
  4. # RPGツクールVXAceでは、現在のステートや強化/弱体の表示数が
  5. # 著しく制限されており、非常に確認し辛いです。
  6. #
  7. # しかし、状況確認コマンドではステートを22個、強化/弱体も全て表示されます。
  8. #
  9. # パーティコマンドに、敵味方の現在能力値やステート/強化/弱体の状態を
  10. # 確認する為の新規コマンドを追加します。
  11. # 最初はアクターを表示し、LボタンかRボタンを押すことで
  12. # エネミーに表示を切り替えます。
  13. # アクターかエネミーを指定して決定キーを押すことで詳細表示を行います。
  14. # 詳細表示中に更に決定キーを押すと、属性耐性とステート耐性が表示されます。
  15. #
  16. # エネミーを表示しない機能や、詳細を表示せず
  17. # ステート/強化/弱体の確認に留めさせる設定も可能です。
  18. #
  19. # テストモードでの利用に限定する事も可能です。
  20. #------------------------------------------------------------------------------
  21. # Ver1.01 %表示に関する設定や、属性/ステート耐性の表示機能が追加されました。
  22. # Ver1.02 操作性を向上させました。
  23. # Ver1.03 隠れている敵を表示しないようにする機能を追加しました。
  24. # Ver1.04 詳細モードで敵のHPが表示限界でも見えてしまう不具合を修正しました。
  25. #         また、表示限界の適用を敵のみにする機能を追加しました。
  26. # Ver1.05 システム側のTP表示設定が無効化されていてもTPが表示される不具合を修正。
  27. #==============================================================================
  28. module B_CONFIRM
  29.  
  30.   #テストモード限定化するか否かを設定します。
  31.   #(trueで限定化/falseで常時使用可)
  32.  
  33.   TONLY = false
  34.  
  35.   #状況確認コマンドの名称を取得します。
  36.  
  37.   WORD1 = "情报确认"
  38.  
  39.   #ステート表示用の項目名を取得します。
  40.  
  41.   WORD2 = "状态"
  42.  
  43.   #強化/弱体表示用の項目名を取得します。
  44.  
  45.   WORD3 = "強化/弱化"
  46.  
  47.   #背景透過度を設定します。
  48.  
  49.   BOPAC = 255
  50.  
  51.   #控えメンバーも表示するかどうかを設定します。
  52.   #(trueで表示/falseで非表示)
  53.  
  54.   PTMT = true
  55.  
  56.   #メンバーの詳細情報を表示するかどうかを設定します。
  57.   #(trueで表示/falseで非表示)
  58.  
  59.   PTDT = true
  60.  
  61.   #ページ切り替えで敵も表示するかどうかを設定します。
  62.   #(trueで表示/falseで非表示)
  63.  
  64.   TROK = true
  65.  
  66.   #敵の詳細情報を表示するかどうかを設定します。
  67.   #(trueで表示/falseで非表示)
  68.  
  69.   TRDT = true
  70.  
  71.   #隠れている敵も表示するかどうかを指定します。
  72.  
  73.   HIDE = false
  74.  
  75.   #HP/MP/TPの表示限界値を設定します。
  76.   #この値を以上の値となった時はTEXTの文字列を表示します。
  77.  
  78.   OVER = 10000
  79.  
  80.   #HP/MP/TPが表示限界値に達した際に、代わりに表示する文字列を設定します。
  81.  
  82.   TEXT = "?????"
  83.  
  84.   #表示限界に達した際に代わりに表示するのは敵のみにするかを設定します。
  85.   #trueで敵のみ、falseで双方となります。
  86.  
  87.   EN_O = true
  88.  
  89.   #2ページ目を有効にするか否かを設定します。
  90.   #(trueで有効/falseで無効)
  91.  
  92.   P2   = true
  93.  
  94.   #詳細情報での追加能力値の表示設定を行います。
  95.   #[追加能力値ID(0~9の数字), 追加能力値名称(文字列), 敵も表示するか否か(true/false)]で
  96.   #1セットとなっています。
  97.  
  98.   XPRM = [
  99.   [0, "命中率", true],
  100.   [1, "物理回避率", true],
  101.   [2, "暴击率", true],
  102.   [3, "暴击回避率", true],
  103.   [4, "魔法回避率", true],
  104.   [5, "魔法反射率", true],
  105.   [6, "反击率", true],
  106.   [7, "HP再生率", true],
  107.   [8, "MP再生率", true],
  108.   [9, "TP再生率", true]
  109.   ]
  110.  
  111.   #追加能力値の後に%の文字を付けるか否かを設定します。
  112.   #(trueで有効/falseで無効)
  113.  
  114.   ADP  = false
  115.  
  116.   #詳細情報での特殊能力値の表示設定を行います。
  117.   #[特殊能力値ID(0~9の数字), 特殊能力値名称(文字列), 敵も表示するか否か(true/false)]で
  118.   #1セットとなっています。
  119.  
  120.   SPRM = [
  121.   [0, "仇恨", false],
  122.   [1, "防御効果比例", false],
  123.   [2, "回復効果比例", false],
  124.   [3, "药的知识", false],
  125.   [4, "MP消耗率", false],
  126.   [5, "TP补充率", false],
  127.   [6, "受物伤比例", false],
  128.   [7, "受法伤比例", false],
  129.   [9, "经验加成比例", false]
  130.   ]
  131.  
  132.   #特殊能力値の後に%の文字を付けるか否かを設定します。
  133.   #(trueで有効/falseで無効)
  134.  
  135.   SPP  = false
  136.  
  137.   #詳細情報での属性有効度の表示設定を行います。
  138.   #[属性ID, 属性名の後に付ける文字(文字列),
  139.   #敵も表示するか否か(true/false),
  140.   #100から該当の値を引いた数で表示するかを否か,
  141.   #数字の後に付ける文字(文字列)]で
  142.   #1セットとなっています。
  143.  
  144.   ELEM = [
  145.   [1, "耐性", true, true],
  146.   [2, "耐性", true, true],
  147.   [3, "耐性", true, true],
  148.   [4, "耐性", true, true],
  149.   [5, "耐性", true, true],
  150.   [6, "耐性", true, true],
  151.   [7, "耐性", true, true],
  152.   [8, "耐性", true, true],
  153.   [9, "耐性", true, true],
  154.   [12, "耐性", true, true],
  155.   [13, "效果", true, true],
  156.   ]
  157.  
  158.   #属性有効度の後に%の文字を付けるか否かを設定します。
  159.   #(trueで有効/falseで無効)
  160.  
  161.   ELP  = false
  162.  
  163.   #1行目に表示するステートの最大数を指定します。
  164.   #(2行目までしか想定していません)
  165.  
  166.   MAX  = 11
  167.  
  168.   #詳細情報でのステート有効度の表示設定を行います。
  169.   #[ステートID(0~-7で指定した場合は、絶対数の値の弱体有効度ID),
  170.   #ステート名の後に付ける文字(文字列), 敵も表示するか否か(true/false),
  171.   #100から該当の値を引いた数で表示するかを否か]で
  172.   #1セットとなっています。
  173.  
  174.   STAT = [
  175.   [1, "耐性", true, true],
  176.   [2, "耐性", true, true],
  177.   [3, "耐性", true, true],
  178.   [4, "耐性", true, true],
  179.   [5, "耐性", true, true],
  180.   [6, "耐性", true, true],
  181.   [7, "耐性", true, true],
  182.   [8, "耐性", true, true],
  183.   [10, "耐性", true, true],
  184.   [12, "耐性", true, true],
  185.   [13, "耐性", true, true],
  186.   [14, "耐性", true, true],
  187.   [17, "耐性", true, true],
  188.   [21, "耐性", true, true],
  189.   [22, "耐性", true, true],
  190.   [23, "耐性", true, true],
  191.   ]
  192.  
  193.   #ステート有効度の後に%の文字を付けるか否かを設定します。
  194.   #(trueで有効/falseで無効)
  195.  
  196.   STP  = false
  197.  
  198. end
  199.  
  200. #テストモード限定化されており、なおかつテストモードの場合か
  201. #テストモード限定化されていない場合は処理を行う。
  202.  
  203. if (B_CONFIRM::TONLY && ($TEST or $BTEST)) or !B_CONFIRM::TONLY
  204.  
  205. class Game_Troop < Game_Unit
  206.   def unhidden_members
  207.     B_CONFIRM::HIDE ? members : members.select {|e| !e.hidden?}
  208.   end
  209. end
  210. class Game_Temp
  211.   attr_accessor :b_confirm_limit_flag
  212. end
  213. class Window_Base < Window
  214.   alias draw_current_and_max_values_overnumber draw_current_and_max_values
  215.   def draw_current_and_max_values(x, y, width, current, max, color1, color2)
  216.  
  217.     #状況確認ウィンドウである場合のみ
  218.     #現在値と最大値を必要に応じて読み替える。
  219.  
  220.     if (self.is_a?(Window_B_Confirm) or self.is_a?(Window_B_Confirm_Detail)) && $game_temp.b_confirm_limit_flag
  221.       current = B_CONFIRM::TEXT if current >= B_CONFIRM::OVER
  222.       max = B_CONFIRM::TEXT if max >= B_CONFIRM::OVER
  223.     end
  224.  
  225.     #本来の処理を実行する。
  226.  
  227.     draw_current_and_max_values_overnumber(x, y, width, current, max, color1, color2)
  228.   end
  229. end
  230. class Window_PartyCommand < Window_Command
  231.   #--------------------------------------------------------------------------
  232.   # コマンドリストの作成
  233.   #--------------------------------------------------------------------------
  234.   alias make_command_list_b_confirm make_command_list
  235.   def make_command_list
  236.  
  237.     #本来の処理を実行する。
  238.  
  239.     make_command_list_b_confirm
  240.  
  241.     #状況確認コマンドを追加する。
  242.  
  243.     add_command(B_CONFIRM::WORD1,  :b_confirm)
  244.   end
  245. end
  246. class Window_B_Confirm < Window_Selectable
  247.   attr_accessor :end_flag
  248.   attr_accessor :display_mode
  249.   attr_accessor :last_actor
  250.   def initialize(x, y, type, actor = nil)
  251.  
  252.     #各種データを取得する。
  253.  
  254.     @display_mode = type
  255.     @last_actor = actor
  256.     @end_flag = false
  257.  
  258.     #ウィンドウを作成する。
  259.  
  260.     super(x, y, window_width, window_height)
  261.  
  262.     #背景透過度を設定する。
  263.  
  264.     self.back_opacity = B_CONFIRM::BOPAC
  265.  
  266.     activate
  267.  
  268.     self.index = 0
  269.  
  270.     #描写を行う。
  271.  
  272.     refresh
  273.  
  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # フレーム更新
  277.   #--------------------------------------------------------------------------
  278.   def update
  279.  
  280.     #ウィンドウを閉じている最中は何もしない。
  281.  
  282.     return if @end_flag
  283.  
  284.     super
  285.  
  286.     return if !self.active
  287.  
  288.     if Input.trigger?(:B)#キャンセルキーを押した場合
  289.  
  290.       #キャンセルのSEを鳴らす。
  291.  
  292.       Sound.play_cancel
  293.  
  294.       @end_flag = true
  295.       @last_actor = nil
  296.       @display_mode = 2
  297.  
  298.     elsif Input.trigger?(:C)#決定キーを押した場合
  299.  
  300.       #バトラーが指定されていない場合はウィンドウを閉じる。
  301.       #バトラーが指定されている場合はウィンドウを切り替える。
  302.       case @display_mode
  303.       when 0
  304.         actor = B_CONFIRM::PTMT ? $game_party.all_members[index] : $game_party.members[index]
  305.       when 1
  306.         actor = $game_troop.unhidden_members[index]
  307.       end
  308.  
  309.       #バトラーがアクターであり、なおかつアクターの詳細表示が可能な場合
  310.       #あるいはバトラーがエネミーであり、なおかつエネミーの詳細表示が可能な場合続行。
  311.  
  312.       return if actor.actor? && !B_CONFIRM::PTDT
  313.       return if !actor.actor? && !B_CONFIRM::TRDT
  314.  
  315.       #OKのSEを鳴らす。
  316.  
  317.       Sound.play_ok
  318.  
  319.       @end_flag = true
  320.       @last_actor = actor
  321.  
  322.     elsif (Input.trigger?(:L) or Input.trigger?(:R)) && B_CONFIRM::TROK
  323.  
  324.       #カーソルのSEを鳴らす。
  325.  
  326.       Sound.play_cursor
  327.  
  328.       #ウィンドウを作り直す準備を行う。
  329.  
  330.       @end_flag = true
  331.       @last_actor = nil
  332.       @display_mode = @display_mode == 0 ? 1 : 0
  333.  
  334.     end
  335.   end
  336.   #--------------------------------------------------------------------------
  337.   # ウィンドウ幅の取得
  338.   #--------------------------------------------------------------------------
  339.   def window_width
  340.     Graphics.width
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ウィンドウ高さの取得
  344.   #--------------------------------------------------------------------------
  345.   def window_height
  346.     Graphics.height
  347.   end
  348.   #--------------------------------------------------------------------------
  349.   # 項目数の取得
  350.   #--------------------------------------------------------------------------
  351.   def item_max
  352.  
  353.     #バトラーが指定されていない場合は項目数は1個にする。
  354.  
  355.     return 1 if @last_actor != nil
  356.  
  357.     #アクターかエネミーのどちらを表示するかで処理を分岐し
  358.     #それぞれ設定に適した値を返す。
  359.  
  360.     case @display_mode
  361.     when 0
  362.       B_CONFIRM::PTMT ? $game_party.all_members.size : $game_party.members.size
  363.     when 1
  364.       $game_troop.unhidden_members.size
  365.     end
  366.   end
  367.   #--------------------------------------------------------------------------
  368.   # 項目の高さを取得
  369.   #--------------------------------------------------------------------------
  370.   def item_height
  371.     (height - standard_padding * 2) / 4
  372.   end
  373.   #--------------------------------------------------------------------------
  374.   # 項目の描画
  375.   #--------------------------------------------------------------------------
  376.   def draw_item(index)
  377.  
  378.     #バトラーが指定されているか否かで処理を分岐。
  379.  
  380.     if @last_actor == nil
  381.  
  382.       #アクターかエネミーのどちらを表示するかで設定に応じて処理を分岐。
  383.  
  384.       case @display_mode
  385.       when 0
  386.         actor = B_CONFIRM::PTMT ? $game_party.all_members[index] : $game_party.members[index]
  387.       when 1
  388.         actor = $game_troop.unhidden_members[index]
  389.       end
  390.  
  391.       #項目の矩形を取得。
  392.  
  393.       rect = item_rect(index)
  394.  
  395.       #項目内のデータを描写していく。
  396.  
  397.       $game_temp.b_confirm_limit_flag = (!B_CONFIRM::EN_O or (B_CONFIRM::EN_O && @display_mode == 1))
  398.       draw_actor_name(actor, rect.x, rect.y)
  399.       draw_actor_hp(actor, rect.x + 4, rect.y + line_height * 1)
  400.       draw_actor_mp(actor, rect.x + 4, rect.y + line_height * 2)
  401.       draw_actor_tp(actor, rect.x + 4, rect.y + line_height * 3) if $data_system.opt_display_tp
  402.       self.contents.font.color = system_color
  403.       draw_text(rect.x + 150, rect.y + line_height * 1, 96, line_height, B_CONFIRM::WORD2)
  404.       draw_text(rect.x + 150, rect.y + line_height * 3, 96, line_height, B_CONFIRM::WORD3)
  405.       self.contents.font.color = normal_color
  406.       icons_width = (rect.width - rect.x - 150 - 96) / 24
  407.       icons = (actor.state_icons)[0, icons_width]
  408.       icons.each_with_index {|n, i| draw_icon(n, rect.x + 246 + 24 * i, rect.y + line_height * 1) }
  409.       icons = (actor.state_icons)[icons_width, icons_width * 2]
  410.       icons.each_with_index {|n, i| draw_icon(n, rect.x + 246 + 24 * i, rect.y + line_height * 2) } if icons != nil
  411.       icons = (actor.buff_icons)[0, icons_width]
  412.       icons.each_with_index {|n, i| draw_icon(n, rect.x + 246 + 24 * i, rect.y + line_height * 3) }
  413.  
  414.     end
  415.   end
  416.   #--------------------------------------------------------------------------
  417.   # 決定ボタンが押されたときの処理(邪魔なので消す)
  418.   #--------------------------------------------------------------------------
  419.   def process_ok
  420.   end
  421.   #--------------------------------------------------------------------------
  422.   # キャンセルボタンが押されたときの処理(邪魔なので消す)
  423.   #--------------------------------------------------------------------------
  424.   def process_cancel
  425.   end
  426.   #--------------------------------------------------------------------------
  427.   # Lボタンが押されたときの処理(邪魔なので消す)
  428.   #--------------------------------------------------------------------------
  429.   def process_pageup
  430.   end
  431.   #--------------------------------------------------------------------------
  432.   # Rボタンが押されたときの処理(邪魔なので消す)
  433.   #--------------------------------------------------------------------------
  434.   def process_pagedown
  435.   end
  436. end
  437.  
  438. class Window_B_Confirm_Detail < Window_Base
  439.   attr_accessor :window_b_confirm
  440.   attr_accessor :end_flag
  441.   #--------------------------------------------------------------------------
  442.   # 初期化
  443.   #--------------------------------------------------------------------------
  444.   def initialize(window_b_confirm)
  445.     @page_data = 0
  446.     @window_b_confirm = window_b_confirm
  447.     @end_flag = false
  448.     super(0, 0, window_width, window_height)
  449.  
  450.     #背景透過度を設定する。
  451.  
  452.     self.back_opacity = B_CONFIRM::BOPAC
  453.  
  454.     refresh
  455.   end
  456.   #--------------------------------------------------------------------------
  457.   # ウィンドウ幅の取得
  458.   #--------------------------------------------------------------------------
  459.   def window_width
  460.     Graphics.width
  461.   end
  462.   #--------------------------------------------------------------------------
  463.   # ウィンドウ高さの取得
  464.   #--------------------------------------------------------------------------
  465.   def window_height
  466.     Graphics.height
  467.   end
  468.   #--------------------------------------------------------------------------
  469.   # フレーム更新
  470.   #--------------------------------------------------------------------------
  471.   def update
  472.     super
  473.     if Input.trigger?(:B)#キャンセルキーを押した場合
  474.  
  475.       #キャンセルのSEを鳴らす。
  476.  
  477.       Sound.play_cancel
  478.       @end_flag = true
  479.  
  480.     elsif page_change?   #決定キー、左右キー、LRボタンを押した場合
  481.  
  482.       Sound.play_cursor
  483.       @page_data = @page_data == 0 ? 1 : 0
  484.       contents.clear
  485.       refresh
  486.  
  487.     end
  488.   end
  489.   #--------------------------------------------------------------------------
  490.   # ページ切り替えを行うか?
  491.   #--------------------------------------------------------------------------
  492.   def page_change?
  493.     flag = false
  494.     [:C, :L, :R, :LEFT, :RIGHT].each {|k|flag = true if Input.trigger?(k)}
  495.     flag
  496.   end
  497.   #--------------------------------------------------------------------------
  498.   # リフレッシュ
  499.   #--------------------------------------------------------------------------
  500.   def refresh
  501.     #バトラーを取得。
  502.  
  503.     actor = @window_b_confirm.last_actor
  504.  
  505.     #項目内のデータを描写していく。
  506.  
  507.     draw_actor_name(actor, x, y)
  508.     $game_temp.b_confirm_limit_flag = (!B_CONFIRM::EN_O or (B_CONFIRM::EN_O && !actor.actor?))
  509.     draw_actor_hp(actor, x + 4, y + line_height * 1)
  510.     draw_actor_mp(actor, x + 4, y + line_height * 2)
  511.     draw_actor_tp(actor, x + 4, y + line_height * 3) if $data_system.opt_display_tp
  512.     self.contents.font.color = system_color
  513.     draw_text(x + 150, y + line_height * 1, 96, line_height, B_CONFIRM::WORD2)
  514.     draw_text(x + 150, y + line_height * 3, 96, line_height, B_CONFIRM::WORD3)
  515.     self.contents.font.color = normal_color
  516.     icons_width = (width - x - 162 - 96) / 24
  517.     icons = (actor.state_icons)[0, icons_width]
  518.     icons.each_with_index {|n, i| draw_icon(n, x + 246 + 24 * i, y + line_height * 1) }
  519.     icons = (actor.state_icons)[icons_width, icons_width * 2]
  520.     icons.each_with_index {|n, i| draw_icon(n, x + 246 + 24 * i, y + line_height * 2) } if icons != nil
  521.     icons = (actor.buff_icons)[0, icons_width]
  522.     icons.each_with_index {|n, i| draw_icon(n, x + 246 + 24 * i, y + line_height * 3) }
  523.     draw_horz_line(line_height * 4)
  524.  
  525.     if @page_data == 0
  526.  
  527.       6.times {|i|draw_actor_param(actor, x, y + line_height * (5 + i), (i + 2))}
  528.       ex_xprms_draw(actor, x, y)
  529.       ex_sprms_draw(actor, x, y)
  530.  
  531.     else
  532.  
  533.       ex_elem_draw(actor, x, y)
  534.       ex_state_draw(actor, x, y)
  535.  
  536.     end
  537.   end
  538.   #--------------------------------------------------------------------------
  539.   # 水平線の色を取得(Window_Statusからそのままコピー)
  540.   #--------------------------------------------------------------------------
  541.   def line_color
  542.     color = normal_color
  543.     color.alpha = 48
  544.     color
  545.   end
  546.   #--------------------------------------------------------------------------
  547.   # 水平線の描画(Window_Statusからそのままコピー)
  548.   #--------------------------------------------------------------------------
  549.   def draw_horz_line(y)
  550.     line_y = y + line_height / 2 - 1
  551.     contents.fill_rect(0, line_y, contents_width, 2, line_color)
  552.   end
  553.   #--------------------------------------------------------------------------
  554.   # 追加能力値
  555.   #--------------------------------------------------------------------------
  556.   def ex_xprms_draw(actor, x, y)
  557.  
  558.     #追加能力値の描写対象がない場合は飛ばす。
  559.  
  560.     return if B_CONFIRM::XPRM.empty?
  561.  
  562.     #追加能力値を描写する。
  563.  
  564.     B_CONFIRM::XPRM.each_with_index do |xp, i|
  565.       next if !actor.actor? && !xp[2]
  566.       change_color(system_color)
  567.       draw_text(x + 170, y + line_height * (5 + i), 120, line_height, xp[1])
  568.       change_color(normal_color)
  569.       draw_text(x + 280, y + line_height * (5 + i), 56, line_height, (actor.xparam(xp[0]) * 100).to_i.to_s + (B_CONFIRM::ADP ? "%" : ""), 2)
  570.     end
  571.   end
  572.   #--------------------------------------------------------------------------
  573.   # 特殊能力値
  574.   #--------------------------------------------------------------------------
  575.   def ex_sprms_draw(actor, x, y)
  576.  
  577.     #特殊能力値の描写対象がない場合は飛ばす。
  578.  
  579.     return if B_CONFIRM::SPRM.empty?
  580.  
  581.     #特殊能力値を描写する。
  582.  
  583.     B_CONFIRM::SPRM.each_with_index do |sp, i|
  584.       next if !actor.actor? && !sp[2]
  585.       change_color(system_color)
  586.       draw_text(x + 344, y + line_height * (5 + i), 120, line_height, sp[1])
  587.       change_color(normal_color)
  588.       draw_text(x + 454, y + line_height * (5 + i), 56, line_height, (actor.sparam(sp[0]) * 100).to_i.to_s + (B_CONFIRM::SPP ? "%" : ""), 2)
  589.     end
  590.   end
  591.   #--------------------------------------------------------------------------
  592.   # 属性有効度
  593.   #--------------------------------------------------------------------------
  594.   def ex_elem_draw(actor, x, y)
  595.  
  596.     #属性有効度の描写対象がない場合は飛ばす。
  597.  
  598.     return if B_CONFIRM::ELEM.empty?
  599.  
  600.     #属性有効度を描写する。
  601.  
  602.     B_CONFIRM::ELEM.each_with_index do |elem, i|
  603.       next if !actor.actor? && !elem[2]
  604.       change_color(system_color)
  605.       name = $data_system.elements[elem[0]]
  606.       data = (actor.element_rate(elem[0]) * 100).to_i
  607.       data = (elem[3] ? (100 - data) : data).to_s
  608.       draw_text(x, y + line_height * (5 + i), 120, line_height, name + elem[1])
  609.       change_color(normal_color)
  610.       draw_text(x + 110, y + line_height * (5 + i), 56, line_height, data + (B_CONFIRM::ELP ? "%" : ""), 2)
  611.     end
  612.   end
  613.   #--------------------------------------------------------------------------
  614.   # ステート有効度
  615.   #--------------------------------------------------------------------------
  616.   def ex_state_draw(actor, x, y)
  617.  
  618.     #ステート有効度の描写対象がない場合は飛ばす。
  619.  
  620.     return if B_CONFIRM::STAT.empty?
  621.  
  622.     #ステート有効度を描写する。
  623.  
  624.     B_CONFIRM::STAT.each_with_index do |state, i|
  625.       next if !actor.actor? && !state[2]
  626.       change_color(system_color)
  627.       x_data = i < B_CONFIRM::MAX ? 170 : 344
  628.       if state[0] > 0
  629.         name = $data_states[state[0]].name
  630.         data = (actor.state_rate(state[0]) * 100).to_i
  631.         data = (state[3] ? (100 - data) : data).to_s
  632.       else
  633.         state_id = state[0].abs
  634.         name = Vocab.param(state_id)
  635.         data = (actor.debuff_rate(state_id) * 100).to_i
  636.         data = (state[3] ? (100 - data) : data).to_s
  637.       end
  638.       draw_text(x + x_data, y + line_height * (5 + i - (i < B_CONFIRM::MAX ? 0 : B_CONFIRM::MAX)), 120, line_height, name + state[1])
  639.       change_color(normal_color)
  640.       draw_text(x + x_data + 110, y + line_height * (5 + i - (i < B_CONFIRM::MAX ? 0 : B_CONFIRM::MAX)), 56, line_height, data + (B_CONFIRM::STP ? "%" : ""), 2)
  641.     end
  642.   end
  643. end
  644. class Scene_Battle < Scene_Base
  645.   #--------------------------------------------------------------------------
  646.   # パーティコマンドウィンドウの作成
  647.   #--------------------------------------------------------------------------
  648.   alias create_party_command_window_b_confirm create_party_command_window
  649.   def create_party_command_window
  650.  
  651.     #本来の処理を実行。
  652.  
  653.     create_party_command_window_b_confirm
  654.  
  655.     #状況確認コマンド用のハンドラを追加。
  656.  
  657.     @party_command_window.set_handler(:b_confirm,  method(:command_b_confirm))
  658.   end
  659.   #--------------------------------------------------------------------------
  660.   # コマンド[状況確認]
  661.   #--------------------------------------------------------------------------
  662.   def command_b_confirm
  663.  
  664.     #状況確認コマンドの処理内容を実行。
  665.  
  666.     b_confirm_execute
  667.   end
  668.   #--------------------------------------------------------------------------
  669.   # 状況確認開始
  670.   #--------------------------------------------------------------------------
  671.   def b_confirm_execute
  672.  
  673.     #状況確認ウィンドウを作成。
  674.  
  675.     @b_confirm_window = Window_B_Confirm.new(0, 0, 0)
  676.  
  677.     #処理をループで処理。
  678.  
  679.     loop do
  680.  
  681.       #とりあえずアップデートは行う。
  682.  
  683.       update
  684.  
  685.       #状況確認ウィンドウがアクティブであり
  686.       #なおかつ操作終了フラグが有効な場合は分岐。
  687.  
  688.       if @b_confirm_window.active && @b_confirm_window.end_flag
  689.  
  690.         #表示モードが2の時、ループを終了する。
  691.  
  692.         break if @b_confirm_window.display_mode == 2
  693.  
  694.         #操作終了フラグをfalseにする。
  695.  
  696.         @b_confirm_window.end_flag = false
  697.  
  698.         #最後にキャラクターを選択している場合
  699.  
  700.         if @b_confirm_window.last_actor != nil
  701.  
  702.           #状況確認ウィンドウのアクティブ状態を解除し
  703.           #詳細ウィンドウを作成する。
  704.  
  705.           @b_confirm_window.deactivate
  706.           @b_confirm_detail_window = Window_B_Confirm_Detail.new(@b_confirm_window)
  707.  
  708.         #最後にキャラクターを選択していない場合
  709.  
  710.         else
  711.  
  712.           #状況確認ウィンドウを解放する。
  713.  
  714.           @b_confirm_window.dispose
  715.  
  716.           #状況確認ウィンドウを作り直す。
  717.  
  718.           @b_confirm_window = Window_B_Confirm.new(0, 0, (@b_confirm_window.display_mode == 0 ? 0 : 1))
  719.  
  720.         end
  721.  
  722.       #詳細ウィンドウが存在し、なおかつ終了フラグが有効な場合。
  723.  
  724.       elsif @b_confirm_detail_window != nil && @b_confirm_detail_window.end_flag
  725.  
  726.         #詳細ウィンドウを解放し、nil扱いとする。
  727.  
  728.         @b_confirm_detail_window.dispose
  729.         @b_confirm_detail_window = nil
  730.  
  731.         #最後に選択したアクターをnilとする。
  732.  
  733.         @b_confirm_window.last_actor = nil
  734.  
  735.         #状況確認ウィンドウをアクティブ化する。
  736.  
  737.         @b_confirm_window.activate
  738.       end
  739.     end
  740.  
  741.     #状況確認ウィンドウを解放する。
  742.  
  743.     @b_confirm_window.dispose
  744.  
  745.     #パーティコマンドウィンドウをアクティブにする。
  746.  
  747.     @party_command_window.activate
  748.   end
  749. end
  750. end


这是在战斗选项中添加可以查看状态的一个选项,进去按Q键可以看到敌人的状态

RUBY 代码复制
  1. # ステ―ト詳細確認ウィンドウ
  2. #
  3. # 戦闘時、パーティコマンドに付与されているステートの詳細を確認するためのコマンド
  4. # を追加します。
  5.  
  6. $imported_yana_scripts ||= {}
  7. $imported_yana_scripts["StateHelpWindow"] = true
  8.  
  9. module StateHelp
  10.   Buffs = {}
  11.   States = []
  12.  
  13. # 请按照下面的描写进行备注
  14.  
  15.   Buffs[[0,:up]] = "HPの強化効果\n最大10段階"
  16.   Buffs[[1,:up]] = "MPの強化効果\n最大10段階"
  17.   Buffs[[2,:up]] = "攻撃力の強化効果\n最大10段階"
  18.   Buffs[[3,:up]] = "防御力の強化効果\n最大10段階"
  19.   Buffs[[4,:up]] = "魔法力の強化効果\n最大10段階"
  20.   Buffs[[5,:up]] = "魔法防御の強化効果\n最大10段階"
  21.   Buffs[[6,:up]] = "敏捷の強化効果\n最大10段階"
  22.   Buffs[[7,:up]] = "運の強化効果\n最大10段階"
  23.  
  24.   Buffs[[0,:down]] = "HPの弱体効果\n最大5段階"
  25.   Buffs[[1,:down]] = "MPの弱体効果\n最大5段階"
  26.   Buffs[[2,:down]] = "攻撃力の弱体効果\n最大5段階"
  27.   Buffs[[3,:down]] = "防御力の弱体効果\n最大5段階"
  28.   Buffs[[4,:down]] = "魔法力の弱体効果\n最大5段階"
  29.   Buffs[[5,:down]] = "魔法防御の弱体効果\n最大5段階"
  30.   Buffs[[6,:down]] = "敏捷の弱体効果\n最大5段階"
  31.   Buffs[[7,:down]] = "運の弱体効果\n最大5段階"
  32.  
  33.   States[1]  = "戦闘不能\nHPが0になり、すべての行動ができない。"
  34.   States[2]  = "毒\n毎ターン、最大HPの5%のダメージを受ける。"
  35.   States[3]  = "暗闇\n物理命中率が40%低下する。"
  36.   States[4]  = "沈黙\n魔法に属するコマンドが使用できなくなる。"
  37.   States[5]  = "混乱\n混乱し、敵味方の区別なく攻撃を繰り出す。"
  38.   States[6]  = "睡眠\n行動できない、狙われ率が上がって回避が下がる。"
  39.   States[7]  = "麻痺\n40%の確率で行動できない。回避が下がる"
  40.   States[8]  = "スタン\nスタンしてしまって行動できない状態。"
  41.   States[9]  = "防御\n被ダメージを減少する"
  42.   States[10] = "石化\n行動できない。回避と防御、狙われ率が下がる"
  43.  
  44. end
  45.  
  46. class Game_BattlerBase
  47.   attr_reader :buffs
  48. end
  49.  
  50. class Window_State < Window_Selectable
  51.   def initialize(help_window)
  52.     super(0,0,32,32)
  53. #~     self.x = [Graphics.width / 2 - self.width / 2,0].max
  54. #~     self.y = [Graphics.height / 2 - self.height / 2,help_window.height].max
  55.     self.openness = 0
  56.     @help_window = help_window
  57.     refresh
  58.   end
  59.   def all_battle_members;($game_party.battle_members + $game_troop.members).select{|m| m.exist? };end
  60.   def row_max;all_battle_members.size;end
  61.   def col_max
  62.     m = all_battle_members.max_by{|a| a.state_icons.size + a.buff_icons.size }
  63.     [m.state_icons.size + m.buff_icons.size,1].max
  64.   end
  65.   def item_max;row_max*col_max;end
  66.   def item_height; line_height + 2 ; end
  67.   def item_width; line_height + 2 ; end
  68.  
  69.   def fitting_window
  70.     self.height = item_height * row_max + standard_padding*2
  71.     self.width = 144+(col_max*item_width) + standard_padding*2
  72.     self.x = [Graphics.width / 2 - self.width / 2,0].max
  73.     self.y = [Graphics.height / 2 - self.height / 2,help_window.height].max
  74.   end
  75.   def refresh
  76.     fitting_window
  77.     make_data
  78.     create_contents
  79.     all_battle_members.each_with_index{|a,i|
  80.       draw_actor_name(a,0,i*item_height+1)
  81.       draw_text(128,i*item_height+1,20,line_height,":")
  82.       draw_icons(a, 144, i*item_height+1, contents.width - 144)
  83.     }
  84.   end
  85.  
  86.   def draw_icons(subject, x, y, width = 96)
  87.     icons = (subject.state_icons + subject.buff_icons)[0, width / item_width]
  88.     icons.each_with_index {|n, i| draw_icon(n, x + item_width * i, y) }
  89.   end
  90.  
  91.   def item_rect(index)
  92.     rect = Rect.new
  93.     rect.width = item_width
  94.     rect.height = item_height
  95.     rect.x = index % col_max * item_width + 143
  96.     rect.y = index / col_max * item_height
  97.     rect
  98.   end
  99.  
  100.   def update_help
  101.     @help_window.set_text(description)
  102.   end
  103.  
  104.   def make_data
  105.     @data = all_battle_members.inject([]){|r,m|
  106.       a = []
  107.       a += m.states.select{|st| st.icon_index != 0 }
  108.       bf = []
  109.       m.buffs.each_with_index{|b,i| bf.push([i,b > 0 ? :up : :down]) if b != 0}
  110.       a += bf
  111.       a += Array.new(col_max - a.size){nil} if col_max > a.size
  112.       r += a
  113.     }
  114.   end
  115.  
  116.   def description
  117.     return "" unless @data[index]
  118.     if @data[index].is_a?(Array)
  119.       return StateHelp::Buffs[@data[index]]
  120.     else
  121.       return StateHelp::States[@data[index].id]
  122.     end
  123.   end
  124.   def cursor_down(wrap = false)
  125.     return if @data.compact.empty?
  126.     loop do
  127.       select((index + col_max) % item_max)
  128.       break if @data[index]
  129.     end
  130.   end
  131.   def cursor_up(wrap = false)
  132.     return if @data.compact.empty?
  133.     loop do
  134.       select((index - col_max + item_max) % item_max)
  135.       break if @data[index]
  136.     end
  137.   end
  138.   def cursor_right(wrap = false)
  139.     return if @data.compact.empty?
  140.     loop do
  141.       select((index + 1) % item_max)
  142.       break if @data[index]
  143.     end
  144.   end
  145.   def cursor_left(wrap = false)
  146.     return if @data.compact.empty?
  147.     loop do
  148.       select((index - 1 + item_max) % item_max)
  149.       break if @data[index]
  150.     end
  151.   end
  152.   def smooth_select
  153.     return select(0) if @data.compact.empty?
  154.     @data.each_with_index{|d,i|
  155.       if d
  156.         select(i)
  157.         return
  158.       end
  159.     }
  160.   end
  161. end
  162.  
  163. class Window_PartyCommand < Window_Command
  164.   alias _ex_state_make_command_list make_command_list
  165.   def make_command_list
  166.     _ex_state_make_command_list
  167.     add_command("异常状态明细",  :state)
  168.   end
  169. end
  170.  
  171. class Scene_Battle < Scene_Base
  172.   alias _ex_state_create_all_windows create_all_windows
  173.   def create_all_windows
  174.     _ex_state_create_all_windows
  175.     create_state_window
  176.   end
  177.   alias _ex_state_create_party_command_window create_party_command_window
  178.   def create_party_command_window
  179.     _ex_state_create_party_command_window
  180.     @party_command_window.set_handler(:state, method(:command_state))
  181.   end
  182.  
  183.   def create_state_window
  184.     @state_window = Window_State.new(@help_window)
  185.     @state_window.set_handler(:ok,  method(:command_state_cancel))
  186.     @state_window.set_handler(:cancel, method(:command_state_cancel))
  187.     @state_window.unselect
  188.   end
  189.  
  190.   def command_state
  191.     @party_command_window.deactivate
  192.     @state_window.refresh
  193.     @state_window.open.activate.smooth_select
  194.     @help_window.show
  195.   end
  196.  
  197.   def command_state_cancel
  198.     @state_window.deactivate.close.unselect
  199.     @party_command_window.activate
  200.     @help_window.hide
  201.   end
  202. end

这也是选项中看到状态的脚本,但这脚本不但能看到状态,还能看到状态的描述,不过需要你按状态编号每个状态进行备注

评分

参与人数 1梦石 +1 收起 理由
丿梁丶小柒 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
1
星屑
472
在线时间
120 小时
注册时间
2016-3-6
帖子
83
3
 楼主| 发表于 2016-3-21 17:52:58 | 只看该作者
jianyulei 发表于 2016-3-21 13:50
#==============================================================================
#  ■エネミーの状態 ...

膜拜!
大神请收下我的膝盖吧!
R
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1346
在线时间
806 小时
注册时间
2013-8-3
帖子
455
4
发表于 2016-3-22 12:48:22 | 只看该作者
jianyulei 发表于 2016-3-21 13:50
#==============================================================================
#  ■エネミーの状態 ...

好家伙!不客气拿走,话说如果是中文介绍就更好了{:2_282:}

【同人游戏】勇者斗恶龙TG
欢迎加入游戏测试群333599798
如有需私聊请加QQ:516425000
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-28 03:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表