Project1

标题: 【VA移植修改】CP制战斗 2012.05.09 更新 [打印本页]

作者: pigsss    时间: 2012-1-27 21:26
标题: 【VA移植修改】CP制战斗 2012.05.09 更新
本帖最后由 pigsss 于 2012-5-9 10:15 编辑

应众人要求更新,修正各种bug


注意:敌人特殊能力【增加行动次数】不可用!


懒得上传了,直接贴脚本:
RUBY 代码复制
  1. #==============================================================================
  2. # ●CP制战斗
  3. # 原作者:桜雅 在土, 和希 (XP版CP制),韩云溪(AT即时战斗)
  4. # 修改:pigsss
  5. # 更新日期:2012.05.09
  6. # 一个简单的cp战斗系统
  7. # 好吧,我还是不明白为什么那么多人喜欢用…
  8.  
  9. # ·加强兼容性
  10. # ·修正先制/被偷袭bug
  11. # ·修正敌人隐藏bug
  12. # ·修正逃跑失败bug
  13.  
  14. # ■✖ !注意-------------------------
  15. # ·敌人特殊能力【增加行动次数】不可用│
  16. #   ---------------------------------
  17. #==============================================================================
  18. module CP
  19. #
  20. # 基本能力消耗的CP值
  21. #
  22. CP_COST_SKILL_ITEM_ACTION = 65535 # 技能 物品
  23. CP_COST_BASIC_ATTACK = 32768 # 攻撃
  24. CP_COST_BASIC_GUARD = 32768 # 防御
  25. CP_COST_BASIC_ESCAPE = 65535 #逃跑
  26. end
  27. #==============================================================================
  28. # □ CP_Thread
  29. #==============================================================================
  30. class CP_Thread
  31.  
  32. # 战斗速度
  33. #
  34. BATTLE_SPEED = 1.0
  35. #
  36. # 战斗开始的时候气槽百分比
  37. #
  38. START_CP_PERCENT = 10
  39. #
  40. # CP满时的音效
  41. #
  42. FULL_SE = "Audio/SE/open1"
  43. #--------------------------------------------------------------------------
  44. # ○ 变量公开
  45. #--------------------------------------------------------------------------
  46. attr_accessor :stop # CP加算ストップ
  47. #----------------------------------------------------------------------------
  48. # ○ 初始化
  49. #----------------------------------------------------------------------------
  50. def initialize
  51. @battlers = []
  52. @cancel = false
  53. @stop = false
  54. @agi_total = 0
  55. # 配列 count_battlers を初期化
  56. count_battlers = []
  57. # エネミーを配列 count_battlers に追加
  58. for enemy in $game_troop.members
  59. count_battlers.push(enemy)
  60. end
  61. # アクターを配列 count_battlers に追加
  62. for actor in $game_party.battle_members
  63. count_battlers.push(actor)
  64. end
  65. for battler in count_battlers
  66. @agi_total += battler.agi
  67. end
  68.  
  69. for battler in count_battlers
  70.     battler.cp = [[65535 * START_CP_PERCENT * (rand(15) + 85) * 4 * battler.agi / @agi_total / 10000, 0].max, 65535].min
  71.     battler.turn_count = 0
  72. end
  73. end
  74. #----------------------------------------------------------------------------
  75. # ○ CP更新
  76. #----------------------------------------------------------------------------
  77. def update
  78. # 停止刷新
  79. return if @stop
  80. #
  81. for battler in $game_party.battle_members + $game_troop.members
  82. # 行動出来なければ無視
  83. if battler.dead? || battler.hidden?
  84. battler.cp = 0
  85. next
  86. end
  87.  
  88.  
  89. battler.cp = [[battler.cp + BATTLE_SPEED * 2048 * battler.agi / @agi_total, 0].max, 65535].min
  90.  
  91. # CP满时
  92.  
  93.     if battler.cp >= battler.max_cp
  94.         Audio.se_play(FULL_SE)
  95.         BattleManager.set_enable_go(battler)
  96.         battler.my_turn = true
  97.         BattleManager.input_start
  98.         break
  99.       end
  100.     unless BattleManager.cp_updating?
  101.       return
  102.     end
  103.  
  104. end
  105.  
  106. def update?
  107.   return !@stop
  108. end
  109. end
  110.  
  111. #----------------------------------------------------------------------------
  112. # ○ CPカウントの開始
  113. #----------------------------------------------------------------------------
  114. def stop
  115. @cancel = true
  116. if @cp_thread != nil then
  117. @cp_thread.join
  118. @cp_thread = nil
  119. end
  120. end
  121. end
  122. #==============================================================================
  123. # ■ Game_BattlerBase
  124. #------------------------------------------------------------------------------
  125. #  管理战斗者的类。主要含有能力值计算的方法。Game_Battler 类的父类。
  126. #==============================================================================
  127. class Game_BattlerBase
  128.   attr_reader   :cp                       # CP
  129.   attr_accessor :turn_count
  130.   attr_accessor :my_turn
  131.   include CP
  132.   #------------------------------
  133.   alias old_initialize initialize
  134.   def initialize
  135.     old_initialize
  136.     @cp = 0
  137.     @turn_count = 0
  138.     @my_turn = false
  139.   end
  140.   #------------------------------
  141.   def inputable?
  142.     if @my_turn
  143.       return normal? && !auto_battle?# && @cp >= 65535
  144.     else
  145.       return false
  146.     end
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● 更改 CP
  150.   #--------------------------------------------------------------------------
  151.   def cp=(cp)
  152.     @cp = [[cp, max_cp].min, 0].max
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ● 获取 CP 的最大值
  156.   #--------------------------------------------------------------------------
  157.   def max_cp
  158.     return 65535
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● 获取 CP 的比率
  162.   #--------------------------------------------------------------------------
  163.   def cp_rate
  164.     @cp.to_f / 65535
  165.   end
  166.   #--------------------------------------------------------------------------
  167.   # ● 扣除技能的使用消耗
  168.   #--------------------------------------------------------------------------
  169.   alias :old_pay_skill_cost :pay_skill_cost
  170.   def pay_skill_cost(skill)
  171.     old_pay_skill_cost(skill)
  172.     ###########
  173.     case skill.id
  174.     when 1
  175.      @cp -= CP_COST_BASIC_ATTACK
  176.     when 2
  177.      @cp -= CP_COST_BASIC_GUARD
  178.     when 3...999 # 可自订不同消耗的技能
  179.      @cp -= CP_COST_SKILL_ITEM_ACTION
  180.     else
  181.      @cp = 0
  182.     end
  183.     ###########
  184.   end
  185. end
  186. #--------------------------------------------------------
  187. class Game_Battler < Game_BattlerBase
  188.   include CP
  189.   #--------------------------------------------------------------------------
  190.   # ● 消耗物品
  191.   #--------------------------------------------------------------------------
  192.   alias :old_consume_item :consume_item
  193.   def consume_item(item)
  194.     old_consume_item(item)
  195.     ###########
  196.     case item.id
  197.     when 0...999 # 可自订不同消耗的物品
  198.      @cp -= CP_COST_SKILL_ITEM_ACTION
  199.     else
  200.      @cp = 0
  201.     end
  202.     ###########
  203.   end
  204. end
  205. #-------------------------------------
  206. class Game_Party < Game_Unit
  207.   def make_action(member)
  208.     unless member == nil
  209.       member.make_actions unless member.inputable?
  210.     end
  211.   end
  212. end
  213. #-------------------------------------
  214. class Game_Troop < Game_Unit
  215.   def make_action(member)
  216.     member.make_actions unless member == nil
  217.   end
  218.  
  219.   def increase_turn(enemy)
  220.     troop.pages.each {|page| @event_flags[page] = false if page.span == 1 }
  221.     enemy.turn_count += 1
  222.     aaa = []
  223.     for iii in $game_troop.members
  224.       aaa.push(iii.turn_count)
  225.     end
  226.     @turn_count = aaa.max
  227.   end
  228. end
  229. #-------------------------------------
  230. module BattleManager
  231.   def self.battle_start
  232.     $game_system.battle_count += 1
  233.     $game_party.on_battle_start
  234.     $game_troop.on_battle_start
  235.     $game_troop.enemy_names.each do |name|
  236.       $game_message.add(sprintf(Vocab::Emerge, name))
  237.     end
  238.  
  239.     if @preemptive
  240.       $game_message.add(sprintf(Vocab::Preemptive, $game_party.name))
  241.       for b in $game_troop.members
  242.         if !b.hidden?
  243.           b.cp = 0
  244.         end
  245.       end
  246.       for b in $game_party.battle_members
  247.         if !b.hidden?
  248.           b.cp = b.max_cp
  249.         end
  250.       end
  251.     elsif @surprise
  252.       $game_message.add(sprintf(Vocab::Surprise, $game_party.name))
  253.       for b in $game_troop.members
  254.         if !b.hidden?
  255.           b.cp = b.max_cp
  256.         end
  257.       end
  258.       for b in $game_party.battle_members
  259.         if !b.hidden?
  260.           b.cp = 0
  261.         end
  262.       end
  263.     end
  264.     wait_for_message
  265.   end
  266.  
  267.   def self.enable_go
  268.     @enable_go
  269.   end
  270.  
  271.   def self.set_enable_go(b)
  272.     @enable_go = b
  273.   end
  274.  
  275.   def self.enable_go_clear
  276.     @enable_go = nil
  277.   end
  278.  
  279.   def self.max_agi
  280.     @max_agi
  281.   end
  282.  
  283.   def self.cp_updation
  284.     @phase = :cp_update
  285.   end
  286.  
  287.   def self.cp_updating?
  288.     @phase == :cp_update
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ● 重定义:开始输入指令
  292.   #--------------------------------------------------------------------------
  293.   def self.input_start
  294.     if @phase != :input
  295.       @phase = :input
  296.       $game_party.make_actions
  297.       $game_troop.make_actions
  298.       clear_actor
  299.     end
  300.     return $game_party.inputable?
  301.   end
  302.   #-------------------------------------------------------------------------
  303.   # ● 重定义:回合开始
  304.   #------------------------------------------------------------------------
  305.   def self.turn_start
  306.     @phase = :turn
  307.     clear_actor
  308.     make_action_orders
  309.   end
  310.   #-------------------------------------------------------------------------
  311.   # ● 重定义:行动顺序
  312.   #------------------------------------------------------------------------
  313.   def self.make_action_orders
  314.     @action_battlers = []
  315.     for b in $game_troop.members + $game_party.battle_members
  316.       if b.my_turn
  317.         @action_battlers.push(b)
  318.       end
  319.     end
  320.     exclude_battler = []
  321.     for battler in @action_battlers
  322.      if battler.cp < 65535
  323.        exclude_battler.push(battler)
  324.      end
  325.     end
  326.     @action_battlers -= exclude_battler
  327.   end
  328. end
  329. #==============================================================================
  330. # ■ Window_Base
  331. #------------------------------------------------------------------------------
  332. #  游戏中所有窗口的父类
  333. #==============================================================================
  334.  
  335. class Window_Base < Window
  336.   #--------------------------------------------------------------------------
  337.   # ● 获取颜色
  338.   #--------------------------------------------------------------------------
  339.   def cp_gauge_color1;   Color.new(200,200,120); end;    # CP 值槽 1
  340.   def cp_gauge_color2;   Color.new(100,100,70);  end;    # CP 值槽 2
  341.   #--------------------------------------------------------------------------
  342.   # ● 绘制值槽(长宽自由版)
  343.   #     rate   : 比率(1.0 为满值)
  344.   #     color1 : 渐变色的左端
  345.   #     color2 : 渐变色的右端
  346.   #--------------------------------------------------------------------------
  347.   def draw_gauge_free(x, y, width, rate, color1, color2, height)
  348.     fill_w = (width * rate).to_i
  349.     gauge_y = y + line_height - 8
  350.     contents.fill_rect(x, gauge_y, width, height, gauge_back_color)
  351.     contents.gradient_fill_rect(x, gauge_y, fill_w, height, color1, color2)
  352.   end
  353.   #--------------------------------------------------------------------------
  354.   # ● 绘制 CP
  355.   #--------------------------------------------------------------------------
  356.   def draw_actor_cp(actor, x, y, width = 124, height)
  357.     draw_gauge_free(x, y, width, actor.cp_rate, cp_gauge_color1, cp_gauge_color2, height)
  358.     change_color(system_color)
  359.   end
  360. end
  361. ####################################
  362.  
  363. class Window_CP < Window_Selectable
  364.   #--------------------------------------------------------------------------
  365.   # ● 初始化对象
  366.   #--------------------------------------------------------------------------
  367.   def initialize
  368.     super(0, 0, window_width, window_height)
  369.     refresh
  370.     self.openness = 0
  371.     self.opacity = 200
  372.     self.contents_opacity = 200
  373.   end
  374.  
  375.  
  376.   #--------------------------------------------------------------------------
  377.   # ● 获取窗口的宽度
  378.   #--------------------------------------------------------------------------
  379.   def window_width
  380.     64
  381.   end
  382.   #--------------------------------------------------------------------------
  383.   # ● 获取窗口的高度
  384.   #--------------------------------------------------------------------------
  385.   def window_height
  386.     fitting_height(visible_line_number)
  387.   end
  388.   #--------------------------------------------------------------------------
  389.   # ● 获取显示行数
  390.   #--------------------------------------------------------------------------
  391.   def visible_line_number
  392.     return 4
  393.   end
  394.   #--------------------------------------------------------------------------
  395.   # ● 获取项目数
  396.   #--------------------------------------------------------------------------
  397.   def item_max
  398.     $game_party.battle_members.size
  399.   end
  400.  
  401.   #--------------------------------------------------------------------------
  402.   # ● 获取值槽区域的宽度
  403.   #--------------------------------------------------------------------------
  404.   def gauge_area_width
  405.     return 40
  406.   end
  407.   #--------------------------------------------------------------------------
  408.   # ● 获取值槽区域的矩形
  409.   #--------------------------------------------------------------------------
  410.   def gauge_area_rect(index)
  411.     rect = item_rect_for_text(index)
  412.     rect.x += rect.width - gauge_area_width
  413.     rect.width = gauge_area_width
  414.     rect
  415.   end
  416. #~   #--------------------------------------------------------------------------
  417. #~   # ● 绘制项目
  418. #~   #--------------------------------------------------------------------------
  419. #~   def draw_item(index)
  420. #~     actor = $game_party.battle_members[index]
  421. #~     rect = gauge_area_rect(index) ##
  422. #~     draw_actor_cp(actor, rect.x - 165, rect.y - 10, 100, 16) ##
  423. #~     draw_basic_area(basic_area_rect(index), actor)
  424. #~     draw_gauge_area(gauge_area_rect(index), actor)
  425. #~   end
  426.   #--------------------------------------------------------------------------
  427.   # ● 绘制项目
  428.   #--------------------------------------------------------------------------
  429.   def draw_cp(index)
  430.     actor = $game_party.battle_members[index]
  431.     rect = gauge_area_rect(index) ##
  432.     draw_actor_cp(actor, rect.x , rect.y - 10, 40, 16) ##
  433.   end
  434.   #--------------------------------------------------------------------------
  435.   # ● 绘制所有项目
  436.   #--------------------------------------------------------------------------
  437.   def draw_all_items_cp
  438.     item_max.times {|i| draw_cp(i) }
  439.   end
  440.  
  441.   def refresh_cp
  442.     contents.clear
  443.     draw_all_items_cp
  444.   end
  445.  
  446. end
  447. #---------------------------------------------------------------------------
  448.  
  449. class Scene_Battle
  450.   #--------------------------------------------------------------------------
  451.   # ● 重定义:开始处理
  452.   #--------------------------------------------------------------------------
  453.   def start
  454.     super
  455.     create_spriteset
  456.     create_all_windows
  457.     BattleManager.method_wait_for_message = method(:wait_for_message)
  458.     @cp_thread = CP_Thread.new
  459.   end
  460.   #--------------------------------------------------------------------------
  461.   # ● 重定义:开始后处理
  462.   #--------------------------------------------------------------------------
  463.   def post_start
  464.     super
  465.     battle_start
  466.     @cp_thread.stop = false #
  467.   end
  468.   #--------------------------------------------------------------------------
  469.   # ● 重定义:信息窗口打开时的更新
  470.   #    在状态窗口关闭完成前,信息窗口的打开度设置为 0 。
  471.   #--------------------------------------------------------------------------
  472.   def update_message_open
  473.     if $game_message.busy? && !@status_window.close?
  474.       @message_window.openness = 0
  475.       @status_window.close
  476.       @party_command_window.close
  477.       @actor_command_window.close
  478.       @cp_window.close
  479.     end
  480.   end
  481.   #--------------------------------------------------------------------------
  482.   # ● 生成所有窗口
  483.   #--------------------------------------------------------------------------
  484.   alias :o_create_all_windows :create_all_windows
  485.   def create_all_windows
  486.     o_create_all_windows
  487.     create_CP_window
  488.     create_name_window
  489.   end
  490.   #--------------------------------------------------------------------------
  491.   # ● 生成名字窗口
  492.   #--------------------------------------------------------------------------
  493.   def create_name_window
  494.     @name_window = Window_Name.new
  495.     @name_window.y = 250 + Graphics.height - 416
  496.   end
  497.   #--------------------------------------------------------------------------
  498.   # ● 生成状态窗口
  499.   #--------------------------------------------------------------------------
  500.   def create_CP_window
  501.     @cp_window = Window_CP.new
  502.     @cp_window.x = 0
  503.     @cp_window.y = Graphics.height - 120
  504.   end
  505.   #--------------------------------------------------------------------------
  506.   # ● 重定义:开始角色指令的选择
  507.   #--------------------------------------------------------------------------
  508.   def start_actor_command_selection
  509.     @status_window.select(BattleManager.actor.index)
  510.     @party_command_window.close
  511.     @actor_command_window.setup(BattleManager.actor)
  512.     @name_window.setup(BattleManager.actor)
  513.     @name_window.open
  514.   end
  515.  
  516.   #-------------------------------------------------------------------------
  517.   # ● 当cp满时的操作
  518.   #------------------------------------------------------------------------
  519.   def on_cp_full
  520.     BattleManager.cp_updation
  521.     if BattleManager.enable_go.is_a?(Game_Actor) and
  522.       BattleManager.enable_go.inputable?
  523.       BattleManager.enable_go.on_turn_end
  524.       refresh_status
  525.       start_party_command_selection
  526.       @cp_window.close
  527.     else
  528.       if BattleManager.enable_go.is_a?(Game_Actor)
  529.         BattleManager.enable_go.on_turn_end
  530.         $game_party.make_action(BattleManager.enable_go)
  531.         turn_start
  532.       elsif BattleManager.enable_go.is_a?(Game_Enemy)
  533.         BattleManager.enable_go.on_turn_end
  534.         $game_troop.make_action(BattleManager.enable_go)
  535.         $game_troop.increase_turn(BattleManager.enable_go)
  536.         turn_start
  537.       end
  538.     end
  539.     BattleManager.enable_go_clear
  540.   end
  541.   #-------------------------------------------------------------------------
  542.   # ● 重定义:战斗开始
  543.   #------------------------------------------------------------------------
  544.   def battle_start
  545.     BattleManager.battle_start
  546.     process_event
  547.     unless scene_changing?
  548.       @status_window.unselect
  549.       @status_window.open
  550.       @cp_window.unselect
  551.       @cp_window.open
  552.     end
  553.     on_cp_full
  554.   end
  555.   #-------------------------------------------------------------------------
  556.   # ● cp刷新
  557.   #------------------------------------------------------------------------
  558.   def refresh_cp
  559.     if @cp_thread.update?
  560.       @cp_window.refresh_cp
  561.     end
  562.   end
  563.   #--------------------------------------------------------------------------
  564.   # ● 指令“撤退”
  565.   #--------------------------------------------------------------------------
  566.   def command_escape
  567.     turn_start unless BattleManager.process_escape
  568.     for a in $game_party.battle_members
  569.       a.cp -= CP::CP_COST_BASIC_ESCAPE
  570.     end
  571.   end
  572.   #-------------------------------------------------------------------------
  573.   # ● 重定义:画面更新
  574.   #------------------------------------------------------------------------
  575.   def update
  576.     super
  577.     if BattleManager.cp_updating?
  578.       @cp_thread.update
  579.       #refresh_status
  580.       refresh_cp
  581.       on_cp_full
  582.     elsif BattleManager.in_turn?
  583.       process_event
  584.       on_cp_full
  585.       process_action
  586.     end
  587.  
  588.     BattleManager.judge_win_loss
  589.  
  590.   end
  591.   #--------------------------------------------------------------------------
  592.   # ● 重定义:处理战斗行动
  593.   #--------------------------------------------------------------------------
  594.   def process_action
  595.     @cp_thread.stop = true
  596.     return if scene_changing?
  597.     if !@subject || !@subject.current_action
  598.       @subject = BattleManager.next_subject
  599.     end
  600.     return turn_end unless @subject
  601.     if @subject.current_action
  602.       @subject.current_action.prepare
  603.       if @subject.current_action.valid?
  604.         @status_window.open
  605.         execute_action
  606.       end
  607.       @subject.remove_current_action
  608.     end
  609.     process_action_end unless @subject.current_action
  610.   end
  611.   #-------------------------------------------------------------------------
  612.   # ● 重定义:行动结束
  613.   #------------------------------------------------------------------------
  614.   def process_action_end
  615.     @subject.on_action_end
  616.     @subject.my_turn = false
  617.     if @subject.cp >= 65535
  618.       @subject.cp = 0
  619.     end
  620.     refresh_status
  621.     @log_window.display_auto_affected_status(@subject)
  622.     @log_window.wait_and_clear
  623.     @log_window.display_current_state(@subject)
  624.     @log_window.wait_and_clear
  625.     BattleManager.judge_win_loss
  626.     @subject =  nil
  627.     @cp_thread.stop = false ###########
  628.   end
  629.   #--------------------------------------------------------------------------
  630.   # ● 重定义:回合开始
  631.   #--------------------------------------------------------------------------
  632.   def turn_start
  633.     @party_command_window.close
  634.     @actor_command_window.close
  635.     @name_window.close
  636.     @cp_window.open #
  637.     @status_window.unselect
  638.     BattleManager.turn_start
  639.     @log_window.wait
  640.     @log_window.clear
  641.   end
  642.   #-------------------------------------------------------------------------
  643.   # ● 重定义:回合结束
  644.   #------------------------------------------------------------------------
  645.    def turn_end
  646.      all_battle_members.each do |battler|
  647.        refresh_status
  648.        @log_window.display_auto_affected_status(battler)
  649.        @log_window.wait_and_clear
  650.      end
  651.      BattleManager.turn_end
  652.      process_event
  653.      on_cp_full
  654.    end
  655. end
  656. class Window_Name < Window_Base
  657.   #--------------------------------------------------------------------------
  658.   # ● 初始化对象
  659.   #--------------------------------------------------------------------------
  660.   def initialize
  661.     super(Graphics.width - 128, 0, window_width, fitting_height(1))
  662.     self.openness = 0
  663.     @actor = nil
  664.   end
  665.   #--------------------------------------------------------------------------
  666.   # ● 获取窗口的宽度
  667.   #--------------------------------------------------------------------------
  668.   def window_width
  669.     return 128
  670.   end
  671.   #--------------------------------------------------------------------------
  672.   # ● 刷新
  673.   #--------------------------------------------------------------------------
  674.   def refresh
  675.     contents.clear
  676.     draw_actor_name(@actor, 0 , 0, 100)
  677.   end
  678.   #--------------------------------------------------------------------------
  679.   # ●
  680.   #--------------------------------------------------------------------------
  681.   def setup(actor)
  682.     @actor = actor
  683.   end
  684.   #--------------------------------------------------------------------------
  685.   # ● 打开窗口
  686.   #--------------------------------------------------------------------------
  687.   def open
  688.     refresh
  689.     super
  690.   end
  691. end
  692. #==============================================================================
  693. # ■ Window_Base
  694. #------------------------------------------------------------------------------
  695. #  游戏中所有窗口的父类
  696. #==============================================================================
  697.  
  698. class Window_Base < Window
  699.   #--------------------------------------------------------------------------
  700.   # ● 绘制角色肖像图
  701.   #     enabled : 有效的标志。false 的时候使用半透明效果绘制
  702.   #--------------------------------------------------------------------------
  703.   def draw_face_b(face_name, face_index, x, y, enabled = false)
  704.     bitmap = Cache.face(face_name)
  705.     rect = Rect.new(face_index % 4 * 96 ,face_index / 4 * 96 + 40, 96, 20)
  706.     contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
  707.     bitmap.dispose
  708.   end
  709.   #--------------------------------------------------------------------------
  710.   # ● 绘制角色肖像图
  711.   #--------------------------------------------------------------------------
  712.   def draw_actor_face_b(actor, x, y, enabled = true)
  713.     draw_face_b(actor.face_name, actor.face_index, x, y, enabled)
  714.   end
  715. end
  716. #==============================================================================
  717. # ■ Window_BattleStatus
  718. #------------------------------------------------------------------------------
  719. #  战斗画面中,显示“队伍成员状态”的窗口。
  720. #==============================================================================
  721. class Window_BattleStatus < Window_Selectable
  722.  
  723.  
  724.   #--------------------------------------------------------------------------
  725.   # ● 绘制基本区域
  726.   #--------------------------------------------------------------------------
  727.   def draw_basic_area(rect, actor)
  728.     index = $game_party.members.index(actor)
  729.     draw_actor_face_b(actor, rect.x , rect.y + index * (0) + 4)
  730.     #draw_actor_name(actor, rect.x , rect.y, 100)
  731.     draw_actor_icons(actor, rect.x + 104, rect.y, rect.width - 104)
  732.   end
  733. end

作者: xmheart    时间: 2012-1-28 01:19
本帖最后由 忧雪の伤 于 2012-1-29 12:04 编辑
  1.   # ● 扣除技能的使用消耗
  2.   #--------------------------------------------------------------------------
  3.   def pay_skill_cost(skill)
  4.     self.mp -= skill_mp_cost(skill)
  5.     self.tp -= skill_tp_cost(skill)
  6.     ###########
  7.     case skill.id
  8.     when 1
  9.      @cp -= CP_COST_BASIC_ATTACK
  10.     when 2
  11.      @cp -= CP_COST_BASIC_GUARD
  12.     when 3...999 # 可自订不同消耗的技能
  13.      @cp -= CP_COST_SKILL_ITEM_ACTION
  14.     else
  15.      @cp = 0
  16.     end
复制代码
我想问一下怎么设置不同的技能ID所消耗的CP啊。。。。。
作者: pigsss    时间: 2012-1-28 20:49
xmheart 发表于 2012-1-28 01:19
# ● 扣除技能的使用消耗
  #----------------------------------------------------------------------- ...
  1. when 技能编号
  2. @cp -= 数字
复制代码

作者: xmheart    时间: 2012-1-28 20:58
那 @cp -= CP_COST_SKILL_ITEM_ACTION跟when 技能编号 @cp -= 数字 有什么不同?
假如我是ID3的技能消耗60CP,那是不是
when 3
@cp -= 60


顺便看看LZ头像
作者: yuanlongyu    时间: 2012-1-31 15:54
如果能增加吟唱时间 和 cp打击/增加
就好了
作者: 李光兆    时间: 2012-1-31 17:02
好厉害哦!如果能像XP的CP就好了。
作者: xmheart    时间: 2012-2-1 00:59
呼叫楼主,我分辨率改成800*608,结果就这样了。改来改去最后只能这样,这么才能移动那个窗口啊。。。。

未命名.jpg (61.14 KB, 下载次数: 45)

未命名.jpg

未命名1.jpg (44.44 KB, 下载次数: 50)

未命名1.jpg

作者: pigsss    时间: 2012-2-1 11:15
本帖最后由 pigsss 于 2012-2-1 11:16 编辑

#--------------------------------------------------------------------------

450.  # ● 生成状态窗口

  #--------------------------------------------------------------------------

  def create_CP_window

    @cp_window = Window_CP.new

    @cp_window.x = 0

    @cp_window.y = 296 #########<======这里,自己调调吧

  end

class Window_CP < Window_Selectable

#--------------------------------------------------------------------------

  # ● 初始化对象

  #--------------------------------------------------------------------------

  def initialize

    super(0, 0, window_width, window_height)   #######<=== 这里 改回去

    refresh

    self.openness = 0

    self.opacity = 200

    self.contents_opacity = 200

  end
===============================================
其他功能我过几天回家再说



作者: xmheart    时间: 2012-2-1 15:45
pigsss 发表于 2012-2-1 11:15
#--------------------------------------------------------------------------

450.  # ● 生成状态窗 ...

不行啊,调了之后要不变长,要不变短,就是不能把它移到下面对齐
作者: huianda    时间: 2012-2-11 01:35
脚本很清晰,适合我等新手观摩和学习!
作者: a000b1745    时间: 2012-2-11 12:05
本帖最后由 a000b1745 于 2012-2-11 12:06 编辑

問一下唷...複製代碼的時候怎樣不會複製到前面的數字啊...
我之前都是下載範例直接黏貼。
01.#==============================================================================

02.# ●CP制战斗

03.# 原作者:桜雅 在土, 和希 (XP版CP制),韩云溪(AT即时战斗)

我想把數字去掉貼在腳本裡阿...>"<

作者: pigsss    时间: 2012-2-12 19:48
本帖最后由 pigsss 于 2012-2-13 13:22 编辑
a000b1745 发表于 2012-2-11 12:05
問一下唷...複製代碼的時候怎樣不會複製到前面的數字啊...
我之前都是下載範例直接黏貼。
01.#============ ...


點代碼最後的“複製”


‘‘
  1. class Window_CP < Window_Selectable
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对象
  4.   #--------------------------------------------------------------------------
  5.   def initialize
  6.     super(0, 0, window_width, window_height)
  7.     refresh
  8.     self.openness = 0
  9.     self.opacity = 200
  10.     self.contents_opacity = 200
  11.   end

  12.   
  13.   #--------------------------------------------------------------------------
  14.   # ● 获取窗口的宽度
  15.   #--------------------------------------------------------------------------
  16.   def window_width
  17.     64
  18.   end
  19. end
  20. class Scene_Battle
  21.   #--------------------------------------------------------------------------
  22.   # ● 生成名字窗口
  23.   #--------------------------------------------------------------------------
  24.   def create_name_window
  25.     @name_window = Window_Name.new
  26.     @name_window.y = 250 + Graphics.height - 416
  27.   end
  28.   #--------------------------------------------------------------------------
  29.   # ● 生成状态窗口
  30.   #--------------------------------------------------------------------------
  31.   def create_CP_window
  32.     @cp_window = Window_CP.new
  33.     @cp_window.x = 0
  34.     @cp_window.y = Graphics.height - 120
  35.   end
  36.   #-------------------------------------------------------------------------
  37.   # ● 重定义:行动结束
  38.   #------------------------------------------------------------------------
  39.   def process_action_end
  40.     @subject.on_action_end
  41.     @subject.my_turn = false
  42.     if @subject.cp >= 65535
  43.       @subject.cp = 0
  44.     end
  45.     refresh_status
  46.     @log_window.display_auto_affected_status(@subject)
  47.     @log_window.wait_and_clear
  48.     @log_window.display_current_state(@subject)
  49.     @log_window.wait_and_clear
  50.     BattleManager.judge_win_loss
  51.     @cp_thread.stop = false ###########
  52.   end
  53. end
  54. class Window_Name < Window_Base
  55.   #--------------------------------------------------------------------------
  56.   # ● 初始化对象
  57.   #--------------------------------------------------------------------------
  58.   def initialize
  59.     super(Graphics.width - 128, 0, window_width, fitting_height(1))
  60.     self.openness = 0
  61.     @actor = nil
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # ● 获取窗口的宽度
  65.   #--------------------------------------------------------------------------
  66.   def window_width
  67.     return 128
  68.   end
  69. end
复制代码
适合任意分辨率了,修正了一个小bug


──pigsss于2012-2-13 13:14补充以上内容’’
作者: rjterry    时间: 2012-2-14 12:13
本帖最后由 rjterry 于 2012-2-14 12:16 编辑

.... 我想问下 用了 这个脚本 是不是 就不能 附加行动不能的异常状态了。   无论敌我   比方说 我弄了个类似眩晕的状态   设置3回合   第一个回合是消耗行动条了   所以没能行动   等到行动条满了   就会连续弹出两次  “还在眩晕中”  完了马上又说 “不晕了”  也就是说  中状态的回合并没有 消耗CP  设置多少个回合 都只消耗一次CP   而且   确实  改成CP制之后  没有绝对的 “回合”  一说了   那BUFF应该如何计算时间呢?
对了  补充问一下。。    强化攻击的那类BUFF   回合 也不好算了   我有的攻击就费一半CP比方说   有的费一条   那么强化几回合  什么概念呢?。。
作者: pigsss    时间: 2012-2-14 13:13
rjterry 发表于 2012-2-14 12:13
.... 我想问下 用了 这个脚本 是不是 就不能 附加行动不能的异常状态了。   无论敌我   比方说 我弄了个类 ...

第一个问题在楼上的补丁中已经修复
第二个状态的回合是自身的CP来计算了,满一次算一回合,也就是说每个角色的回合数是独立的
作者: ngvs    时间: 2012-3-5 20:20
可以請問一下 如果逃跑失敗的話 要如何讓CP歸0?
作者: xmheart    时间: 2012-3-5 23:14
@pigsss今天更新了什麽呢?請說明一下唄。好讓我要不要更新腳本版本。。。。。。。。。。。
作者: Mr丶木头    时间: 2012-3-17 22:51
  1. for battler in count_battlers
  2.   if @preemptive #-------先制攻击
  3.    if battler.is_a?(Game_Actor)
  4.       battler.cp = 65535
  5.    else
  6.       battler.cp = 0
  7.    end
  8.   elsif @surprise #-------被偷袭
  9.    if battler.is_a?(Game_Actor)
  10.       battler.cp = 0
  11.    else
  12.       battler.cp = 65535
  13.    end
  14.   else
  15.       battler.cp = [[65535 * START_CP_PERCENT * (rand(15) + 85) * 4 * battler.agi / @agi_total / 10000, 0].max, 65535].min
  16.   end
  17.     battler.turn_count = 0
  18. end
复制代码
怎么样才算是被偷袭或者先至攻击呢?
作者: tang19990919    时间: 2012-3-18 18:31
我的WinXP点复制代码根本复制不了啊!点了【复制代码】四个字都没反应!RUBY 代码
作者: Luciffer    时间: 2012-4-6 12:28
表示用了这个的话这个。。。【隐藏的敌人出现】的功能完全用不了,
不如说不能把敌人设置成隐藏了啊。。。
另外如果把AT槽和这玩意整合起来可行不?
作者: LoHill    时间: 2012-5-7 23:20
弱弱问一下……这个脚本跟http://rpg.blue/thread-226207-1-1.html 这个脚本不兼容啊……物品消耗不能QUQ~
作者: jezad    时间: 2012-5-11 22:09
本帖最后由 jezad 于 2012-5-14 17:52 编辑

要是能和KMS菜单优化兼容就好了 就是战斗时在下面横排显示人物的头


‘‘──jezad于2012-5-14 17:27补充以下内容

好像和中毒导致死亡不兼容 会死机
只能把中毒导致死亡的勾去掉了……
’’
作者: qq460044972    时间: 2012-6-4 18:18
看看
作者: fxwd    时间: 2012-6-11 12:55
这个脚本与地球村的连击系统有冲突,就是按下连击按钮后没反应。请问可以修正吗?
作者: anshichi    时间: 2012-6-14 13:21
代码复制不了。。。复制进去不会分行。。。电脑XP的。怎么解决
作者: hcm    时间: 2012-9-3 09:17
可是好像不知道敌人会什么时候攻击啊,没显示敌人的CP条。
作者: 星夜无痕    时间: 2012-10-29 01:42
请问下有办法去除战斗/逃跑选项么····总感觉读条之后再来选择战斗/逃跑相当违和啊···而且XP的去除方法貌似套不进去·····求指教
作者: brackwind    时间: 2012-10-29 18:01
@pigsss
請問一下
我有六人參戰的腳本
所以想把CP條的寬度改小到可以塞進六個
要從哪裡改?

另外技能使用消耗的部分
CP_COST_BASIC_ATTACK
CP_COST_BASIC_GUARD
CP_COST_SKILL_ITEM_ACTION

這三個是什麼意思呢?
謝謝
作者: pigsss    时间: 2012-10-29 19:49
brackwind 发表于 2012-10-29 18:01
@pigsss
請問一下
我有六人參戰的腳本

Window_CP里的
def window_height

分别是攻击消耗、防御消耗、技能/物品消耗
作者: brackwind    时间: 2012-10-31 18:53
@pigsss

我試過把
  def draw_actor_cp(actor, x, y, width = 124,height  )
改成
  def draw_actor_cp(actor, x, y, width ,height = 124 )

也試過增加這段
#--------------------------------------------------------------------------
  # ● 获取值槽区域的高度
  #--------------------------------------------------------------------------
  def gauge_area_height
    return 40
  end
  #--------------------------------------------------------------------------

不過CP槽的間隔還是沒有縮短,目前最多只能看到五條
請問到底該如何修改才好?
謝謝
作者: brackwind    时间: 2012-10-31 20:19
@pigsss
我也試過在 draw_actor_cp(actor, rect.x , rect.y - 15, 40, 10 ) 這行修改,變成draw_actor_cp(actor, rect.x , rect.y,height - 15, 40, 10,20 )
可是一進戰鬥就出現錯誤訊息
改其他三個數字又不行(改15只能改變全部CP槽的高度,改40是變更CP槽的長短,改10是變更CP槽的粗細)
實在找不到縮短CP槽間隔的方法
不好意思

作者: brackwind    时间: 2012-10-31 21:43
@pigsss

對了
如果想要特別做消耗CP值不一樣的技能的話

# ● 扣除技能的使用消耗
  #--------------------------------------------------------------------------
  alias :old_pay_skill_cost :pay_skill_cost
  def pay_skill_cost(skill)
    old_pay_skill_cost(skill)
    ###########
    case skill.id
    when 1
     @cp -= CP_COST_BASIC_ATTACK
    when 2
     @cp -= CP_COST_BASIC_GUARD
    when 3...999 # 可自订不同消耗的技能
     @cp -= CP_COST_SKILL_ITEM_ACTION
    else
     @cp = 0
    end
    ###########
  end
end
#--------------------------------------------------------

只要改這段就好了嗎?
@cp -=直接填數字         的寫法就可以了嗎?
謝謝
作者: brackwind    时间: 2012-10-31 22:43
抱歉重複發了
這樓我就刪掉了
作者: Hjdie    时间: 2012-11-2 10:40
状态框和CP条重叠了啊。


能把CP那个窗口取消掉,把CP画在状态框那里吗。把CP条画在人物的头像上。我改了好几次都没成功。。。
作者: qq595006041    时间: 2012-11-7 15:59
楼主大人 我点击了COPY,没反应 自己复制但是一粘贴就变成了一行
求帮助
作者: jerrypan    时间: 2013-1-2 19:01
  请教:

#--------------------------------------------------------------------------
  # ● 绘制角色肖像图
  #     enabled : 有效的标志。false 的时候使用半透明效果绘制
  #--------------------------------------------------------------------------
  def draw_face_b(face_name, face_index, x, y, enabled = false)
    bitmap = Cache.face(face_name)
    rect = Rect.new(face_index % 4 * 96 ,face_index / 4 * 96 + 40, 96, 20)
    contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
    bitmap.dispose
  end

能否拓宽肖像图(部分角色肖像眼睛不能完全显示)?
作者: jerrypan    时间: 2013-1-2 19:01
本帖最后由 jerrypan 于 2013-1-5 15:23 编辑

谢谢了。

作者: hcm    时间: 2013-1-17 19:06
关于这个脚本,
在使用技能召唤公共事件时,
公共事件不是在技能放完后发动,
而是在轮到下一个人行动时才发动,
请问如何使公共事件在技能发动完毕后马上进行呢?
作者: pigsss    时间: 2013-1-17 21:15
hcm 发表于  
关于这个脚本,
在使用技能召唤公共事件时,
公共事件不是在技能放完后发动,

  #--------------------------------------------------------------------------
  # ● 重定义:处理战斗行动
  #--------------------------------------------------------------------------
  def process_action
    @cp_thread.stop = true
    return if scene_changing?
    if !@subject || [email protected]_action
      @subject = BattleManager.next_subject
    end
    return turn_end unless @subject
    if @subject.current_action
      @subject.current_action.prepare
      if @subject.current_action.valid?
        @status_window.open
        execute_action
      end
      @subject.remove_current_action
    end
    process_event
    process_action_end unless @subject.current_action
  end

论坛大姨妈,代码格式打不开。
作者: kilktp    时间: 2013-2-1 12:57
本帖最后由 kilktp 于 2013-2-1 13:03 编辑

改好了

效果不錯 感謝

未命名.png (364.87 KB, 下载次数: 28)

未命名.png

作者: 450403113    时间: 2013-3-1 19:01
好家伙,我喜欢。收下了。
作者: chun198766    时间: 2013-3-7 00:07
想使用脸图战斗,CP框不知道怎么移动。

想做成这样的效果。请指点下,谢谢。
作者: hcm    时间: 2013-3-19 14:51
本帖最后由 hcm 于 2013-3-19 14:55 编辑

请问楼主,在战斗中当CP条满,角色选择行动的时候,
所有CP条会消失,请问如何可以不消失呢?
      

作者: yjl494356020    时间: 2013-3-20 12:43
使用SideView100战斗脚本,加入CP脚本后,每回合的持续回血和掉血,不会显示数值,怎么解决呢?
作者: a0936459772    时间: 2013-6-26 10:20
LZ

该怎么把CP槽移到人物姓名下呢?

就像你贴的那张图一样。
作者: 459384924    时间: 2013-8-14 20:26
问下楼主,这个可以和图书馆的横版战斗兼容吗?
作者: Eleven_nine    时间: 2013-8-16 12:30
作为一名新手  来这里使劲学习
作者: scfy8899    时间: 2013-10-2 21:32
谢谢楼主分享!!!!!!
作者: 123456777    时间: 2013-11-25 18:08
2333223323232323

QQ浏览器截屏未命名.png (13.64 KB, 下载次数: 48)

QQ浏览器截屏未命名.png

作者: 楚墨绯    时间: 2013-12-7 11:58
额额额……如果队伍中有两人,打上后面补丁以后第二个人无论选择什么都不会行动然后返回行动选择的菜单,没有其他脚本,测试了好几次……求解……
作者: shabi    时间: 2014-1-23 16:43
@pigsss   用你的这个脚本,被持续伤害毒死了会出现bug。
作者: shabi    时间: 2014-1-23 16:53
和sideview不兼容,把sideview全删了就没bug了
作者: 2498126422    时间: 2014-4-20 11:24
本人新手,问一下怎么复制代码。
作者: hcm    时间: 2014-9-4 16:06
本帖最后由 hcm 于 2014-9-4 16:16 编辑

该脚本在使用持续伤害的效果(如中毒)后,如果某回合角色被毒死,战斗就会卡死,
请问该如何处理?
是否有办法把持续伤害的效果移到行动完毕后出现(和后知后觉横版同时使用)?

作者: m8663431    时间: 2016-7-29 05:53
楼主你好,首先感谢你,最近用到你这个系统感觉很棒,,,但是有几个地方能否修改,或者告诉我怎么修改。。。

我是脚本小白。。。但我希望在执行战斗的时候,画面上全部窗口都去掉,,就是选择完攻击,防御技能所有的指令,开始执行的时候,画面上是干干净净没有窗口的···
还有就是显示的头像那里,能否自定义?因为我的头像,显示出的都是鼻子···




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