Project1

标题: 菜单里的状态,在战斗界面加入 [打印本页]

作者: 若得若失    时间: 2016-10-10 03:05
标题: 菜单里的状态,在战斗界面加入
如何把菜单里的状态,显示在战斗里。
战斗指令有攻击 技能 防御 物品,
想把状态加入到指令里,达到一边作战一边查看自己信息的能力。

另外求一个可以显示属性抗性 和 状态抗性的脚本,好人一生平安,哈哈。
作者: 若得若失    时间: 2016-10-10 09:26
自顶。。。。。快来大神相助。
作者: 是猪别乱叫    时间: 2016-10-10 10:05
战斗中增加选项,查看敌我状态
  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 = 200
  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   = false
  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  = true
  115.   
  116.   #詳細情報での特殊能力値の表示設定を行います。
  117.   #[特殊能力値ID(0~9の数字), 特殊能力値名称(文字列), 敵も表示するか否か(true/false)]で
  118.   #1セットとなっています。
  119.   
  120.   SPRM = [
  121.   [0, "仇恨", true],
  122.   [1, "防御効果", true],
  123.   [2, "回復効果", true],
  124.   [3, "药理知识", true],
  125.   [4, "MP消耗率", true],
  126.   [5, "TP补充率", true],
  127.   [6, "受物伤比例", true],
  128.   [7, "受法伤比例", true],
  129.   [9, "经验加成", true]
  130.   ]
  131.   
  132.   #特殊能力値の後に%の文字を付けるか否かを設定します。
  133.   #(trueで有効/falseで無効)
  134.   
  135.   SPP  = true
  136.   
  137.   #詳細情報での属性有効度の表示設定を行います。
  138.   #[属性ID, 属性名の後に付ける文字(文字列),
  139.   #敵も表示するか否か(true/false),
  140.   #100から該当の値を引いた数で表示するかを否か,
  141.   #数字の後に付ける文字(文字列)]で
  142.   #1セットとなっています。
  143.   
  144.   ELEM = [
  145.   [3, "抗性", true, true],
  146.   [4, "抗性", true, true],
  147.   [5, "抗性", true, true],
  148.   [6, "抗性", true, true],
  149.   [7, "抗性", true, true],
  150.   [8, "抗性", true, true],
  151.   [9, "抗性", true, true],
  152.   [10, "抗性", true, true],
  153.   [11, "抗性", true, true],
  154.   ]
  155.   
  156.   #属性有効度の後に%の文字を付けるか否かを設定します。
  157.   #(trueで有効/falseで無効)
  158.   
  159.   ELP  = true
  160.   
  161.   #1行目に表示するステートの最大数を指定します。
  162.   #(2行目までしか想定していません)
  163.   
  164.   MAX  = 11
  165.   
  166.   #詳細情報でのステート有効度の表示設定を行います。
  167.   #[ステートID(0~-7で指定した場合は、絶対数の値の弱体有効度ID),
  168.   #ステート名の後に付ける文字(文字列), 敵も表示するか否か(true/false),
  169.   #100から該当の値を引いた数で表示するかを否か]で
  170.   #1セットとなっています。
  171.   
  172.   STAT = [
  173.   [44, "抗性", true, true],
  174.   [2, "抗性", true, true],
  175.   [3, "抗性", true, true],
  176.   [4, "抗性", true, true],
  177.   [5, "抗性", true, true],
  178.   [6, "抗性", true, true],
  179.   [7, "抗性", true, true],
  180.   [8, "抗性", true, true],
  181.   [26, "抗性", true, true],
  182.   [27, "抗性", true, true],
  183.   [28, "抗性", true, true],
  184.   [29, "抗性", true, true],
  185.   ]
  186.   
  187.   #ステート有効度の後に%の文字を付けるか否かを設定します。
  188.   #(trueで有効/falseで無効)
  189.   
  190.   STP  = true
  191.   
  192. end

  193. #テストモード限定化されており、なおかつテストモードの場合か
  194. #テストモード限定化されていない場合は処理を行う。

  195. if (B_CONFIRM::TONLY && ($TEST or $BTEST)) or !B_CONFIRM::TONLY

  196. class Game_Troop < Game_Unit
  197.   def unhidden_members
  198.     B_CONFIRM::HIDE ? members : members.select {|e| !e.hidden?}
  199.   end
  200. end
  201. class Game_Temp
  202.   attr_accessor :b_confirm_limit_flag
  203. end
  204. class Window_Base < Window
  205.   alias draw_current_and_max_values_overnumber draw_current_and_max_values
  206.   def draw_current_and_max_values(x, y, width, current, max, color1, color2)
  207.    
  208.     #状況確認ウィンドウである場合のみ
  209.     #現在値と最大値を必要に応じて読み替える。
  210.    
  211.     if (self.is_a?(Window_B_Confirm) or self.is_a?(Window_B_Confirm_Detail)) && $game_temp.b_confirm_limit_flag
  212.       current = B_CONFIRM::TEXT if current >= B_CONFIRM::OVER
  213.       max = B_CONFIRM::TEXT if max >= B_CONFIRM::OVER
  214.     end
  215.    
  216.     #本来の処理を実行する。
  217.    
  218.     draw_current_and_max_values_overnumber(x, y, width, current, max, color1, color2)
  219.   end
  220. end
  221. class Window_PartyCommand < Window_Command
  222.   #--------------------------------------------------------------------------
  223.   # コマンドリストの作成
  224.   #--------------------------------------------------------------------------
  225.   alias make_command_list_b_confirm make_command_list
  226.   def make_command_list
  227.    
  228.     #本来の処理を実行する。
  229.    
  230.     make_command_list_b_confirm
  231.    
  232.     #状況確認コマンドを追加する。
  233.    
  234.     add_command(B_CONFIRM::WORD1,  :b_confirm)
  235.   end
  236. end
  237. class Window_B_Confirm < Window_Selectable
  238.   attr_accessor :end_flag
  239.   attr_accessor :display_mode
  240.   attr_accessor :last_actor
  241.   def initialize(x, y, type, actor = nil)
  242.    
  243.     #各種データを取得する。
  244.    
  245.     @display_mode = type
  246.     @last_actor = actor
  247.     @end_flag = false
  248.    
  249.     #ウィンドウを作成する。
  250.    
  251.     super(x, y, window_width, window_height)
  252.    
  253.     #背景透過度を設定する。
  254.    
  255.     self.back_opacity = B_CONFIRM::BOPAC
  256.    
  257.     activate
  258.    
  259.     self.index = 0
  260.    
  261.     #描写を行う。
  262.    
  263.     refresh
  264.    
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # フレーム更新
  268.   #--------------------------------------------------------------------------
  269.   def update
  270.    
  271.     #ウィンドウを閉じている最中は何もしない。
  272.    
  273.     return if @end_flag
  274.    
  275.     super
  276.    
  277.     return if !self.active
  278.    
  279.     if Input.trigger?(:B)#キャンセルキーを押した場合
  280.       
  281.       #キャンセルのSEを鳴らす。
  282.       
  283.       Sound.play_cancel
  284.       
  285.       @end_flag = true
  286.       @last_actor = nil
  287.       @display_mode = 2
  288.       
  289.     elsif Input.trigger?(:C)#決定キーを押した場合
  290.       
  291.       #バトラーが指定されていない場合はウィンドウを閉じる。
  292.       #バトラーが指定されている場合はウィンドウを切り替える。
  293.       case @display_mode
  294.       when 0
  295.         actor = B_CONFIRM::PTMT ? $game_party.all_members[index] : $game_party.members[index]
  296.       when 1
  297.         actor = $game_troop.unhidden_members[index]
  298.       end
  299.       
  300.       #バトラーがアクターであり、なおかつアクターの詳細表示が可能な場合
  301.       #あるいはバトラーがエネミーであり、なおかつエネミーの詳細表示が可能な場合続行。
  302.       
  303.       return if actor.actor? && !B_CONFIRM::PTDT
  304.       return if !actor.actor? && !B_CONFIRM::TRDT
  305.       
  306.       #OKのSEを鳴らす。
  307.       
  308.       Sound.play_ok
  309.       
  310.       @end_flag = true
  311.       @last_actor = actor
  312.         
  313.     elsif (Input.trigger?(:L) or Input.trigger?(:R)) && B_CONFIRM::TROK
  314.       
  315.       #カーソルのSEを鳴らす。
  316.       
  317.       Sound.play_cursor
  318.       
  319.       #ウィンドウを作り直す準備を行う。
  320.       
  321.       @end_flag = true
  322.       @last_actor = nil
  323.       @display_mode = @display_mode == 0 ? 1 : 0
  324.       
  325.     end
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ウィンドウ幅の取得
  329.   #--------------------------------------------------------------------------
  330.   def window_width
  331.     Graphics.width
  332.   end
  333.   #--------------------------------------------------------------------------
  334.   # ウィンドウ高さの取得
  335.   #--------------------------------------------------------------------------
  336.   def window_height
  337.     Graphics.height
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   # 項目数の取得
  341.   #--------------------------------------------------------------------------
  342.   def item_max
  343.    
  344.     #バトラーが指定されていない場合は項目数は1個にする。
  345.    
  346.     return 1 if @last_actor != nil
  347.    
  348.     #アクターかエネミーのどちらを表示するかで処理を分岐し
  349.     #それぞれ設定に適した値を返す。
  350.    
  351.     case @display_mode
  352.     when 0
  353.       B_CONFIRM::PTMT ? $game_party.all_members.size : $game_party.members.size
  354.     when 1
  355.       $game_troop.unhidden_members.size
  356.     end
  357.   end
  358.   #--------------------------------------------------------------------------
  359.   # 項目の高さを取得
  360.   #--------------------------------------------------------------------------
  361.   def item_height
  362.     (height - standard_padding * 2) / 4
  363.   end
  364.   #--------------------------------------------------------------------------
  365.   # 項目の描画
  366.   #--------------------------------------------------------------------------
  367.   def draw_item(index)
  368.    
  369.     #バトラーが指定されているか否かで処理を分岐。
  370.    
  371.     if @last_actor == nil
  372.       
  373.       #アクターかエネミーのどちらを表示するかで設定に応じて処理を分岐。
  374.       
  375.       case @display_mode
  376.       when 0
  377.         actor = B_CONFIRM::PTMT ? $game_party.all_members[index] : $game_party.members[index]
  378.       when 1
  379.         actor = $game_troop.unhidden_members[index]
  380.       end
  381.       
  382.       #項目の矩形を取得。
  383.       
  384.       rect = item_rect(index)
  385.       
  386.       #項目内のデータを描写していく。
  387.       
  388.       $game_temp.b_confirm_limit_flag = (!B_CONFIRM::EN_O or (B_CONFIRM::EN_O && @display_mode == 1))
  389.       draw_actor_name(actor, rect.x, rect.y)
  390.       draw_actor_hp(actor, rect.x + 4, rect.y + line_height * 1)
  391.       draw_actor_mp(actor, rect.x + 4, rect.y + line_height * 2)
  392.       draw_actor_tp(actor, rect.x + 4, rect.y + line_height * 3) if $data_system.opt_display_tp
  393.       self.contents.font.color = system_color
  394.       draw_text(rect.x + 150, rect.y + line_height * 1, 96, line_height, B_CONFIRM::WORD2)
  395.       draw_text(rect.x + 150, rect.y + line_height * 3, 96, line_height, B_CONFIRM::WORD3)
  396.       self.contents.font.color = normal_color
  397.       icons_width = (rect.width - rect.x - 150 - 96) / 24
  398.       icons = (actor.state_icons)[0, icons_width]
  399.       icons.each_with_index {|n, i| draw_icon(n, rect.x + 246 + 24 * i, rect.y + line_height * 1) }
  400.       icons = (actor.state_icons)[icons_width, icons_width * 2]
  401.       icons.each_with_index {|n, i| draw_icon(n, rect.x + 246 + 24 * i, rect.y + line_height * 2) } if icons != nil
  402.       icons = (actor.buff_icons)[0, icons_width]
  403.       icons.each_with_index {|n, i| draw_icon(n, rect.x + 246 + 24 * i, rect.y + line_height * 3) }
  404.       
  405.     end
  406.   end
  407.   #--------------------------------------------------------------------------
  408.   # 決定ボタンが押されたときの処理(邪魔なので消す)
  409.   #--------------------------------------------------------------------------
  410.   def process_ok
  411.   end
  412.   #--------------------------------------------------------------------------
  413.   # キャンセルボタンが押されたときの処理(邪魔なので消す)
  414.   #--------------------------------------------------------------------------
  415.   def process_cancel
  416.   end
  417.   #--------------------------------------------------------------------------
  418.   # Lボタンが押されたときの処理(邪魔なので消す)
  419.   #--------------------------------------------------------------------------
  420.   def process_pageup
  421.   end
  422.   #--------------------------------------------------------------------------
  423.   # Rボタンが押されたときの処理(邪魔なので消す)
  424.   #--------------------------------------------------------------------------
  425.   def process_pagedown
  426.   end
  427. end

  428. class Window_B_Confirm_Detail < Window_Base
  429.   attr_accessor :window_b_confirm
  430.   attr_accessor :end_flag
  431.   #--------------------------------------------------------------------------
  432.   # 初期化
  433.   #--------------------------------------------------------------------------
  434.   def initialize(window_b_confirm)
  435.     @page_data = 0
  436.     @window_b_confirm = window_b_confirm
  437.     @end_flag = false
  438.     super(0, 0, window_width, window_height)
  439.    
  440.     #背景透過度を設定する。
  441.    
  442.     self.back_opacity = B_CONFIRM::BOPAC
  443.    
  444.     refresh
  445.   end
  446.   #--------------------------------------------------------------------------
  447.   # ウィンドウ幅の取得
  448.   #--------------------------------------------------------------------------
  449.   def window_width
  450.     Graphics.width
  451.   end
  452.   #--------------------------------------------------------------------------
  453.   # ウィンドウ高さの取得
  454.   #--------------------------------------------------------------------------
  455.   def window_height
  456.     Graphics.height
  457.   end
  458.   #--------------------------------------------------------------------------
  459.   # フレーム更新
  460.   #--------------------------------------------------------------------------
  461.   def update
  462.     super
  463.     if Input.trigger?(:B)#キャンセルキーを押した場合
  464.       
  465.       #キャンセルのSEを鳴らす。
  466.       
  467.       Sound.play_cancel
  468.       @end_flag = true
  469.       
  470.     elsif page_change?   #決定キー、左右キー、LRボタンを押した場合
  471.       
  472.       Sound.play_cursor
  473.       @page_data = @page_data == 0 ? 1 : 0
  474.       contents.clear
  475.       refresh
  476.       
  477.     end
  478.   end
  479.   #--------------------------------------------------------------------------
  480.   # ページ切り替えを行うか?
  481.   #--------------------------------------------------------------------------
  482.   def page_change?
  483.     flag = false
  484.     [:C, :L, :R, :LEFT, :RIGHT].each {|k|flag = true if Input.trigger?(k)}
  485.     flag
  486.   end
  487.   #--------------------------------------------------------------------------
  488.   # リフレッシュ
  489.   #--------------------------------------------------------------------------
  490.   def refresh
  491.     #バトラーを取得。
  492.    
  493.     actor = @window_b_confirm.last_actor
  494.    
  495.     #項目内のデータを描写していく。
  496.    
  497.     draw_actor_name(actor, x, y)
  498.     $game_temp.b_confirm_limit_flag = (!B_CONFIRM::EN_O or (B_CONFIRM::EN_O && !actor.actor?))
  499.     draw_actor_hp(actor, x + 4, y + line_height * 1)
  500.     draw_actor_mp(actor, x + 4, y + line_height * 2)
  501.     draw_actor_tp(actor, x + 4, y + line_height * 3) if $data_system.opt_display_tp
  502.     self.contents.font.color = system_color
  503.     draw_text(x + 150, y + line_height * 1, 96, line_height, B_CONFIRM::WORD2)
  504.     draw_text(x + 150, y + line_height * 3, 96, line_height, B_CONFIRM::WORD3)
  505.     self.contents.font.color = normal_color
  506.     icons_width = (width - x - 162 - 96) / 24
  507.     icons = (actor.state_icons)[0, icons_width]
  508.     icons.each_with_index {|n, i| draw_icon(n, x + 246 + 24 * i, y + line_height * 1) }
  509.     icons = (actor.state_icons)[icons_width, icons_width * 2]
  510.     icons.each_with_index {|n, i| draw_icon(n, x + 246 + 24 * i, y + line_height * 2) } if icons != nil
  511.     icons = (actor.buff_icons)[0, icons_width]
  512.     icons.each_with_index {|n, i| draw_icon(n, x + 246 + 24 * i, y + line_height * 3) }
  513.     draw_horz_line(line_height * 4)
  514.    
  515.     if @page_data == 0
  516.    
  517.       6.times {|i|draw_actor_param(actor, x + 50, y + line_height * (5 + i), (i + 2))}
  518.       ex_xprms_draw(actor, x + 40, y)
  519.       ex_sprms_draw(actor, x + 40, y)
  520.       
  521.     else
  522.       
  523.       ex_elem_draw(actor, x + 40, y)
  524.       ex_state_draw(actor, x + 40, y)
  525.       
  526.     end
  527.   end
  528.   #--------------------------------------------------------------------------
  529.   # 水平線の色を取得(Window_Statusからそのままコピー)
  530.   #--------------------------------------------------------------------------
  531.   def line_color
  532.     color = normal_color
  533.     color.alpha = 48
  534.     color
  535.   end
  536.   #--------------------------------------------------------------------------
  537.   # 水平線の描画(Window_Statusからそのままコピー)
  538.   #--------------------------------------------------------------------------
  539.   def draw_horz_line(y)
  540.     line_y = y + line_height / 2 - 1
  541.     contents.fill_rect(0, line_y, contents_width, 2, line_color)
  542.   end
  543.   #--------------------------------------------------------------------------
  544.   # 追加能力値
  545.   #--------------------------------------------------------------------------
  546.   def ex_xprms_draw(actor, x, y)
  547.    
  548.     #追加能力値の描写対象がない場合は飛ばす。
  549.    
  550.     return if B_CONFIRM::XPRM.empty?
  551.    
  552.     #追加能力値を描写する。
  553.    
  554.     B_CONFIRM::XPRM.each_with_index do |xp, i|
  555.       next if !actor.actor? && !xp[2]
  556.       change_color(system_color)
  557.       draw_text(x + 170, y + line_height * (5 + i), 120, line_height, xp[1])
  558.       change_color(normal_color)
  559.       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)
  560.     end
  561.   end
  562.   #--------------------------------------------------------------------------
  563.   # 特殊能力値
  564.   #--------------------------------------------------------------------------
  565.   def ex_sprms_draw(actor, x, y)
  566.    
  567.     #特殊能力値の描写対象がない場合は飛ばす。
  568.    
  569.     return if B_CONFIRM::SPRM.empty?
  570.    
  571.     #特殊能力値を描写する。
  572.    
  573.     B_CONFIRM::SPRM.each_with_index do |sp, i|
  574.       next if !actor.actor? && !sp[2]
  575.       change_color(system_color)
  576.       draw_text(x + 344, y + line_height * (5 + i), 120, line_height, sp[1])
  577.       change_color(normal_color)
  578.       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)
  579.     end
  580.   end
  581.   #--------------------------------------------------------------------------
  582.   # 属性有効度
  583.   #--------------------------------------------------------------------------
  584.   def ex_elem_draw(actor, x, y)
  585.    
  586.     #属性有効度の描写対象がない場合は飛ばす。
  587.    
  588.     return if B_CONFIRM::ELEM.empty?
  589.    
  590.     #属性有効度を描写する。
  591.    
  592.     B_CONFIRM::ELEM.each_with_index do |elem, i|
  593.       next if !actor.actor? && !elem[2]
  594.       change_color(system_color)
  595.       name = $data_system.elements[elem[0]]
  596.       data = (actor.element_rate(elem[0]) * 100).to_i
  597.       data = (elem[3] ? (100 - data) : data).to_s
  598.       draw_text(x, y + line_height * (5 + i), 120, line_height, name + elem[1])
  599.       change_color(normal_color)
  600.       draw_text(x + 110, y + line_height * (5 + i), 56, line_height, data + (B_CONFIRM::ELP ? "%" : ""), 2)
  601.     end
  602.   end
  603.   #--------------------------------------------------------------------------
  604.   # ステート有効度
  605.   #--------------------------------------------------------------------------
  606.   def ex_state_draw(actor, x, y)
  607.    
  608.     #ステート有効度の描写対象がない場合は飛ばす。
  609.    
  610.     return if B_CONFIRM::STAT.empty?
  611.    
  612.     #ステート有効度を描写する。
  613.    
  614.     B_CONFIRM::STAT.each_with_index do |state, i|
  615.       next if !actor.actor? && !state[2]
  616.       change_color(system_color)
  617.       x_data = i < B_CONFIRM::MAX ? 170 : 344
  618.       if state[0] > 0
  619.         name = $data_states[state[0]].name
  620.         data = (actor.state_rate(state[0]) * 100).to_i
  621.         data = (state[3] ? (100 - data) : data).to_s
  622.       else
  623.         state_id = state[0].abs
  624.         name = Vocab.param(state_id)
  625.         data = (actor.debuff_rate(state_id) * 100).to_i
  626.         data = (state[3] ? (100 - data) : data).to_s
  627.       end
  628.       draw_text(x + x_data, y + line_height * (5 + i - (i < B_CONFIRM::MAX ? 0 : B_CONFIRM::MAX)), 120, line_height, name + state[1])
  629.       change_color(normal_color)
  630.       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)
  631.     end
  632.   end
  633. end
  634. class Scene_Battle < Scene_Base
  635.   #--------------------------------------------------------------------------
  636.   # パーティコマンドウィンドウの作成
  637.   #--------------------------------------------------------------------------
  638.   alias create_party_command_window_b_confirm create_party_command_window
  639.   def create_party_command_window
  640.    
  641.     #本来の処理を実行。
  642.    
  643.     create_party_command_window_b_confirm
  644.    
  645.     #状況確認コマンド用のハンドラを追加。
  646.    
  647.     @party_command_window.set_handler(:b_confirm,  method(:command_b_confirm))
  648.   end
  649.   #--------------------------------------------------------------------------
  650.   # コマンド[状況確認]
  651.   #--------------------------------------------------------------------------
  652.   def command_b_confirm
  653.    
  654.     #状況確認コマンドの処理内容を実行。
  655.    
  656.     b_confirm_execute
  657.   end
  658.   #--------------------------------------------------------------------------
  659.   # 状況確認開始
  660.   #--------------------------------------------------------------------------
  661.   def b_confirm_execute
  662.    
  663.     #状況確認ウィンドウを作成。
  664.    
  665.     @b_confirm_window = Window_B_Confirm.new(0, 0, 0)
  666.    
  667.     #処理をループで処理。
  668.    
  669.     loop do
  670.       
  671.       #とりあえずアップデートは行う。
  672.       
  673.       update
  674.       
  675.       #状況確認ウィンドウがアクティブであり
  676.       #なおかつ操作終了フラグが有効な場合は分岐。
  677.       
  678.       if @b_confirm_window.active && @b_confirm_window.end_flag
  679.         
  680.         #表示モードが2の時、ループを終了する。
  681.         
  682.         break if @b_confirm_window.display_mode == 2
  683.         
  684.         #操作終了フラグをfalseにする。
  685.         
  686.         @b_confirm_window.end_flag = false
  687.         
  688.         #最後にキャラクターを選択している場合
  689.         
  690.         if @b_confirm_window.last_actor != nil
  691.          
  692.           #状況確認ウィンドウのアクティブ状態を解除し
  693.           #詳細ウィンドウを作成する。
  694.         
  695.           @b_confirm_window.deactivate
  696.           @b_confirm_detail_window = Window_B_Confirm_Detail.new(@b_confirm_window)
  697.         
  698.         #最後にキャラクターを選択していない場合
  699.          
  700.         else
  701.          
  702.           #状況確認ウィンドウを解放する。
  703.          
  704.           @b_confirm_window.dispose
  705.          
  706.           #状況確認ウィンドウを作り直す。
  707.          
  708.           @b_confirm_window = Window_B_Confirm.new(0, 0, (@b_confirm_window.display_mode == 0 ? 0 : 1))
  709.          
  710.         end
  711.         
  712.       #詳細ウィンドウが存在し、なおかつ終了フラグが有効な場合。
  713.       
  714.       elsif @b_confirm_detail_window != nil && @b_confirm_detail_window.end_flag
  715.         
  716.         #詳細ウィンドウを解放し、nil扱いとする。
  717.         
  718.         @b_confirm_detail_window.dispose
  719.         @b_confirm_detail_window = nil
  720.         
  721.         #最後に選択したアクターをnilとする。
  722.         
  723.         @b_confirm_window.last_actor = nil
  724.         
  725.         #状況確認ウィンドウをアクティブ化する。
  726.         
  727.         @b_confirm_window.activate
  728.       end
  729.     end
  730.    
  731.     #状況確認ウィンドウを解放する。
  732.    
  733.     @b_confirm_window.dispose
  734.    
  735.     #パーティコマンドウィンドウをアクティブにする。
  736.    
  737.     @party_command_window.activate
  738.   end
  739. end
  740. end
复制代码

作者: 是猪别乱叫    时间: 2016-10-10 10:07
本帖最后由 是猪别乱叫 于 2016-10-10 10:09 编辑

状态信息,需要你手动打上去
  1. # ステ―ト詳細確認ウィンドウ
  2. #
  3. # 戦闘時、パーティコマンドに付与されているステートの詳細を確認するためのコマンド
  4. # を追加します。

  5. $imported_yana_scripts ||= {}
  6. $imported_yana_scripts["StateHelpWindow"] = true

  7. module StateHelp
  8.   Buffs = {}
  9.   States = []
  10.   
  11. # 请按照下面的描写进行备注

  12.   Buffs[[0,:up]] = "HP+25%,最高5级\n持续5回合"
  13.   Buffs[[1,:up]] = "MP+25%,最高5级\n持续5回合"
  14.   Buffs[[2,:up]] = "物攻+25%,最高5级\n持续5回合"
  15.   Buffs[[3,:up]] = "物防+25%,最高5级\n持续5回合"
  16.   Buffs[[4,:up]] = "魔攻+25%,最高5级\n持续5回合"
  17.   Buffs[[5,:up]] = "魔防+25%,最高5级\n持续5回合"
  18.   Buffs[[6,:up]] = "敏捷+25%,最高5级\n持续5回合"
  19.   Buffs[[7,:up]] = "幸运+25%,最高5级\n持续5回合"
  20.   
  21.   Buffs[[0,:down]] = "HP-25%,最高5级\n持续5回合"
  22.   Buffs[[1,:down]] = "MP-25%,最高5级\n持续5回合"
  23.   Buffs[[2,:down]] = "物攻-25%,最高5级\n持续5回合"
  24.   Buffs[[3,:down]] = "物防-25%,最高5级\n持续5回合"
  25.   Buffs[[4,:down]] = "魔攻-25%,最高5级\n持续5回合"
  26.   Buffs[[5,:down]] = "魔防-25%,最高5级\n持续5回合"
  27.   Buffs[[6,:down]] = "敏捷-25%,最高5级\n持续5回合"
  28.   Buffs[[7,:down]] = "幸运-25%,最高5级\n持续5回合"

  29.   States[1]  = "无法战斗:死亡。"
  30.   States[2]  = "毒:生命再生-6%\n永续。"
  31.   States[3]  = "致盲:物理命中率-60%\n2~4回合。"
  32.   States[4]  = "沉默:无法使用技能\n1~2回合。"
  33.   States[5]  = "混乱:普通攻击敌我双方,\n1~2回合。"
  34.   States[6]  = "睡眠:无法行动,物闪-100%\n2~5回合,受到伤害50%解除。"
  35.   States[7]  = "麻痺:无法行动,物闪-100%\n1~3回合。"
  36.   States[8]  = "晕眩:无法行动,物闪-100%\n2回合。"
  37.   States[9]  = "防御:减少受到的伤害\n被限制解除。"
  38.   States[10] = "不死身:不会死亡。\n持续3回合"
  39.   States[11] = "保护:提升20%的双防并代替HP较少的队友承受伤害\n被限制解除。"
  40.   States[12] = "嘲讽:提升10%双防并吸引敌方的攻击\n持续2回合。"
  41.   States[13] = "隐藏:仇恨值降低,提升25%的物闪和20%的魔闪\n持续3~5回合。"
  42.   States[14] = "生命再生: HP再生+10%\n持续4回合。"
  43.   States[15] = "魔力再生: MP再生+10%\n持续4回合。"
  44.   States[16] = "特技再生: TP再生+10%\n持续4回合。"
  45.   States[17] = "金刚身躯:受到的物理伤害降低90%\n持续3回合,被限制解除。"
  46.   States[18] = "反击:物理反击率+100%\n持续3回合,被限制解除。"
  47.   States[19] = "魔法闪避:魔法闪避率+80%\n持续3回合。"
  48.   States[20] = "魔法反射:魔法反射+100%,持续1回合。"
  49.   States[21] = "炙炎之力:普系附加火属性,火抗+50%,火伤+20%,10%灼伤\n持续5回合。"
  50.   States[22] = "寒冰之力:普系附加冰属性,冰抗+50%,冰伤+20%,10%冰冻\n持续5回合。"
  51.   States[23] = "闪电之力:普系附加电属性,电抗+50%,电伤+20%,10%麻痹\n持续5回合。"
  52.   States[113] = "魔王化身:全属性+100% \n持续4回合"
  53.   


  54. end

  55. class Game_BattlerBase
  56.   attr_reader :buffs
  57. end

  58. class Window_State < Window_Selectable
  59.   def initialize(help_window)
  60.     super(0,0,32,32)
  61. #~     self.x = [Graphics.width / 2 - self.width / 2,0].max
  62. #~     self.y = [Graphics.height / 2 - self.height / 2,help_window.height].max
  63.     self.openness = 0
  64.     @help_window = help_window
  65.     refresh
  66.   end
  67.   def all_battle_members;($game_party.battle_members + $game_troop.members).select{|m| m.exist? };end
  68.   def row_max;all_battle_members.size;end
  69.   def col_max
  70.     m = all_battle_members.max_by{|a| a.state_icons.size + a.buff_icons.size }
  71.     [m.state_icons.size + m.buff_icons.size,1].max
  72.   end
  73.   def item_max;row_max*col_max;end
  74.   def item_height; line_height + 2 ; end
  75.   def item_width; line_height + 2 ; end
  76.    
  77.   def fitting_window
  78.     self.height = item_height * row_max + standard_padding*2
  79.     self.width = 144+(col_max*item_width) + standard_padding*2
  80.     self.x = [Graphics.width / 2 - self.width / 2,0].max
  81.     self.y = [Graphics.height / 2 - self.height / 2,help_window.height].max
  82.   end
  83.   def refresh
  84.     fitting_window
  85.     make_data
  86.     create_contents
  87.     all_battle_members.each_with_index{|a,i|
  88.       draw_actor_name(a,0,i*item_height+1)
  89.       draw_text(128,i*item_height+1,20,line_height,":")
  90.       draw_icons(a, 144, i*item_height+1, contents.width - 144)
  91.     }
  92.   end
  93.   
  94.   def draw_icons(subject, x, y, width = 96)
  95.     icons = (subject.state_icons + subject.buff_icons)[0, width / item_width]
  96.     icons.each_with_index {|n, i| draw_icon(n, x + item_width * i, y) }
  97.   end
  98.   
  99.   def item_rect(index)
  100.     rect = Rect.new
  101.     rect.width = item_width
  102.     rect.height = item_height
  103.     rect.x = index % col_max * item_width + 143
  104.     rect.y = index / col_max * item_height
  105.     rect
  106.   end
  107.   
  108.   def update_help
  109.     @help_window.set_text(description)
  110.   end
  111.   
  112.   def make_data
  113.     [url=home.php?mod=space&uid=2653549]@data[/url] = all_battle_members.inject([]){|r,m|
  114.       a = []
  115.       a += m.states.select{|st| st.icon_index != 0 }
  116.       bf = []
  117.       m.buffs.each_with_index{|b,i| bf.push([i,b > 0 ? :up : :down]) if b != 0}
  118.       a += bf
  119.       a += Array.new(col_max - a.size){nil} if col_max > a.size
  120.       r += a
  121.     }
  122.   end
  123.   
  124.   def description
  125.     return "" unless @data[index]
  126.     if @data[index].is_a?(Array)
  127.       return StateHelp::Buffs[@data[index]]
  128.     else
  129.       return StateHelp::States[@data[index].id]
  130.     end
  131.   end
  132.   def cursor_down(wrap = false)
  133.     return if @data.compact.empty?
  134.     loop do
  135.       select((index + col_max) % item_max)
  136.       break if @data[index]
  137.     end
  138.   end
  139.   def cursor_up(wrap = false)
  140.     return if @data.compact.empty?
  141.     loop do
  142.       select((index - col_max + item_max) % item_max)
  143.       break if @data[index]
  144.     end
  145.   end
  146.   def cursor_right(wrap = false)
  147.     return if @data.compact.empty?
  148.     loop do
  149.       select((index + 1) % item_max)
  150.       break if @data[index]
  151.     end
  152.   end
  153.   def cursor_left(wrap = false)
  154.     return if @data.compact.empty?
  155.     loop do
  156.       select((index - 1 + item_max) % item_max)
  157.       break if @data[index]
  158.     end
  159.   end
  160.   def smooth_select
  161.     return select(0) if @data.compact.empty?
  162.     @data.each_with_index{|d,i|
  163.       if d
  164.         select(i)
  165.         return
  166.       end
  167.     }
  168.   end
  169. end

  170. class Window_PartyCommand < Window_Command
  171.   alias _ex_state_make_command_list make_command_list
  172.   def make_command_list
  173.     _ex_state_make_command_list
  174.     add_command("状态信息",  :state)
  175.   end
  176. end

  177. class Scene_Battle < Scene_Base
  178.   alias _ex_state_create_all_windows create_all_windows
  179.   def create_all_windows
  180.     _ex_state_create_all_windows
  181.     create_state_window
  182.   end
  183.   alias _ex_state_create_party_command_window create_party_command_window
  184.   def create_party_command_window
  185.     _ex_state_create_party_command_window
  186.     @party_command_window.set_handler(:state, method(:command_state))
  187.   end

  188.   def create_state_window
  189.     @state_window = Window_State.new(@help_window)
  190.     @state_window.set_handler(:ok,  method(:command_state_cancel))
  191.     @state_window.set_handler(:cancel, method(:command_state_cancel))
  192.     @state_window.unselect
  193.   end
  194.   
  195.   def command_state
  196.     @party_command_window.deactivate
  197.     @state_window.refresh
  198.     @state_window.open.activate.smooth_select
  199.     @help_window.show
  200.   end
  201.   
  202.   def command_state_cancel
  203.     @state_window.deactivate.close.unselect
  204.     @party_command_window.activate
  205.     @help_window.hide
  206.   end
  207. end

复制代码

作者: 若得若失    时间: 2016-10-15 13:00
是猪别乱叫 发表于 2016-10-10 10:05
战斗中增加选项,查看敌我状态

这个脚本出错,末尾几十行会复制上去,会变成紫色字体,然后开始游戏或在战斗中查看状态,就会报错!哭..
作者: LHY4118    时间: 2016-10-16 14:54
若得若失 发表于 2016-10-15 13:00
这个脚本出错,末尾几十行会复制上去,会变成紫色字体,然后开始游戏或在战斗中查看状态,就会报错!哭.. ...

你漏了个引号吧




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1