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

Project1

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

[已经解决] 请教战斗开始时先运行战斗事件页(0回合)再跑CP集气条的方法

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
跳转到指定楼层
1
发表于 2022-1-1 05:14:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 taeckle 于 2022-1-1 05:28 编辑

我在网上找到一个CP集气条脚本,使用后发现进入战斗时会先运行CP集气条的各种设定(比如下面那个Class Scene_Battele_CP里的def Initialize)然后再去运行对应数据库队伍栏里战斗事件中条件为回合0的事件页,我现在就想把这个CP脚本改一改,达到能先运行数据库队伍战斗事件触发条件为0回合的事件页然后再开始跑CP集气条就可以了, 这个CP集气条脚本长这样的:

RUBY 代码复制
  1. #========================================================================
  2. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  3. #========================================================================
  4. #========================================================================
  5. # ▼▲▼ XRXS_BP 1. CP制導入 ver..23 ▼▲▼
  6. # by 桜雅 在土, 和希
  7. #------------------------------------------------------------------------
  8. # □ カスタマイズポイント
  9. #========================================================================
  10. module XRXS_BP1
  11.   #
  12.   # 对齐方式。0:左 1:中央 2:右
  13.   #
  14.   ALIGN = 0
  15.   #
  16.   # 人数
  17.   #
  18.   MAX = 4
  19. end
  20. class Scene_Battle_CP
  21.   #
  22.   # 战斗速度
  23.   #
  24.   BATTLE_SPEED = 0.5
  25.   #
  26.   # 战斗开始的时候气槽百分比
  27.   #
  28.   START_CP_PERCENT = 0
  29. end
  30. class Scene_Battle
  31.   # 效果音效,可以自己添加
  32.   DATA_SYSTEM_COMMAND_UP_SE = ""
  33.   # 各项数值功能消耗的CP值
  34.   CP_COST_BASIC_ACTIONS = 0 # 基础共同
  35.   CP_COST_SKILL_ACTION = 65535 # 技能
  36.   CP_COST_ITEM_ACTION = 65535 # 物品
  37.   CP_COST_BASIC_ATTACK = 65535 # 攻撃
  38.   CP_COST_BASIC_GUARD = 49151 # 防御
  39.   CP_COST_BASIC_NOTHING = 65535 # 不做任何事情
  40.   CP_COST_BASIC_ESCAPE = 32535 # 逃跑
  41. end
  42. #========================================================================
  43. # --- XRXS.コマンドウィンドウ?コマンド追加機構 ---
  44. #------------------------------------------------------------------------
  45. # Window_Commandクラスに add_command メソッドを追加します。
  46. #========================================================================
  47. module XRXS_Window_Command_Add_Command
  48.   #----------------------------------------------------------------------
  49.   # ○ コマンドを追加
  50.   #----------------------------------------------------------------------
  51.   def add_command(command)
  52.     # 初期化されていない場合、無効化判別用の配列 @disabled の初期化
  53.     #
  54.     if @disabled == nil
  55.       @disabled = []
  56.     end
  57.     if @commands.size != @disabled.size
  58.       for i in 0...@commands.size
  59.         @disabled[i] = false
  60.       end
  61.     end
  62.     #
  63.     # 追加
  64.     #
  65.     @commands.push(command)
  66.     @disabled.push(false)
  67.     @item_max = @commands.size
  68.     self.y -= 32
  69.     self.height += 32
  70.     self.contents.dispose
  71.     self.contents = nil
  72.     self.contents = Bitmap.new(self.width - 32, @item_max * 32)
  73.     refresh
  74.     for i in 0...@commands.size
  75.       if @disabled[i]
  76.         disable_item(i)
  77.       end
  78.     end
  79.   end
  80.   #----------------------------------------------------------------------
  81.   # ○ 項目の無効化
  82.   # index : 項目番号
  83.   #----------------------------------------------------------------------
  84.   def disable_item(index)
  85.     if @disabled == nil
  86.       @disabled = []
  87.     end
  88.     @disabled[index] = true
  89.     draw_item(index, disabled_color)
  90.   end
  91. end
  92. class Window_Command < Window_Selectable
  93.   #----------------------------------------------------------------------
  94.   # ○ インクルード
  95.   #----------------------------------------------------------------------
  96.   include XRXS_Window_Command_Add_Command
  97.   #----------------------------------------------------------------------
  98.   # ● 項目の無効化
  99.   # index : 項目番号
  100.   #----------------------------------------------------------------------
  101.   def disable_item(index)
  102.     super
  103.   end
  104. end
  105. #========================================================================
  106. # □ Scene_Battle_CP
  107. #========================================================================
  108. class Scene_Battle_CP
  109.   #----------------------------------------------------------------------
  110.   # ○ 公開インスタンス変数
  111.   #----------------------------------------------------------------------
  112.   attr_accessor :stop # CP加算ストップ
  113.   #----------------------------------------------------------------------
  114.   # ○ オブジェクトの初期化
  115.   #----------------------------------------------------------------------
  116.   def initialize  
  117.     @battlers = []
  118.     @cancel = false
  119.     @stop = false
  120.     @str_total = 0
  121.     @dex_total = 0   
  122.     @agi_total = 0
  123.     @int_total = 0   
  124.     # 配列 count_battlers を初期化
  125.     count_battlers = []
  126.     # 将enemy添加到数组count_battlers
  127.     for enemy in $game_troop.enemies
  128.       count_battlers.push(enemy)
  129.     end
  130.     # 将actor添加到数组count_battlers
  131.     for actor in $game_party.actors
  132.       count_battlers.push(actor)
  133.     end
  134.     for battler in count_battlers
  135.       @str_total = [@str_total,battler.str].max      
  136.       @dex_total = [@dex_total,battler.dex].max
  137.       @agi_total = [@agi_total,battler.agi].max
  138.       @int_total = [@int_total,battler.int].max      
  139.     end
  140.     for battler in count_battlers
  141.       battler.cp = 0        
  142.     end   
  143.     for battler in $game_party.actors   #         
  144.      if battler.state?(100)
  145.        battler.cp+=65535
  146.        battler.xp2_damage="我先出手!"
  147.        battler.xp2_damage_pop=true
  148.      end
  149.     end
  150.     #下面就是困扰我很久的bug,只有先运行数据库队伍战斗事件触发条件为0回合的事件页然后再开始跑CP集气条的话才能解决这个bug   
  151.     for battler in $game_troop.enemies  
  152.      if battler.state?(100)
  153.        battler.cp+=65535
  154.        battler.xp2_damage="我先出手! "
  155.        battler.xp2_damage_pop=true
  156.      end
  157.     end        
  158.   end
  159.   #----------------------------------------------------------------------
  160.   # ○ CP计数
  161.   #----------------------------------------------------------------------
  162.   def update
  163.     # 如果停止就返回
  164.     return if @stop
  165.     for battler in $game_party.actors + $game_troop.enemies
  166.       # 如果行动不能忽视
  167.       if battler.dead? == true
  168.         battler.cp = 0
  169.         next
  170.       end
  171.       cp_a=0.6
  172.       cp_b=0.4
  173.       cp_c=0.3
  174.       cp_d=0.08     
  175.       battler.cp = [[battler.cp + BATTLE_SPEED * 4000 * (cp_a*battler.agi+cp_b*battler.dex+cp_c*battler.int+cp_d*battler.str) /(0.6*@agi_total+0.4*@dex_total+0.3*@int_total+0.08*@str_total), 0].max, 65535].min
  176.     end
  177.   end
  178.   #----------------------------------------------------------------------
  179.   # ○ 开始CP计数
  180.   #----------------------------------------------------------------------
  181.   def stop
  182.     @cancel = true
  183.     if @cp_thread != nil then
  184.       @cp_thread.join
  185.       @cp_thread = nil
  186.     end
  187.   end
  188. end
  189. #========================================================================
  190. # ■ Game_Battler
  191. #========================================================================
  192. class Game_Battler
  193.   attr_accessor :now_guarding # 現在防御中フラグ
  194.   attr_accessor :cp # 現在CP
  195.   attr_accessor :slip_state_update_ban # スリップ?ステート自動処理の禁止
  196.   #----------------------------------------------------------------------
  197.   # ○ CP の変更
  198.   #-----------------------------------------------------------------------
  199.   def cp=(p)
  200.     @cp = [[p, 0].max, 65535].min
  201.   end
  202.   #----------------------------------------------------------------------
  203.   # ● 防御中判定 [ 再定義 ]
  204.   #----------------------------------------------------------------------
  205.   def guarding?
  206.     return @now_guarding
  207.   end
  208.   #----------------------------------------------------------------------
  209.   # ● コマンド入力可能判定
  210.   #----------------------------------------------------------------------
  211.   alias xrxs_bp1_inputable? inputable?
  212.   def inputable?
  213.     bool = xrxs_bp1_inputable?
  214.     return (bool and (@cp >= 65535))
  215.   end
  216.   #----------------------------------------------------------------------
  217.   # ● ステート [スリップダメージ] 判定
  218.   #----------------------------------------------------------------------
  219.   alias xrxs_bp1_slip_damage? slip_damage?
  220.   def slip_damage?
  221.     return false if @slip_state_update_ban
  222.     return xrxs_bp1_slip_damage?
  223.   end
  224.   #----------------------------------------------------------------------
  225.   # ● ステート自然解除 (ターンごとに呼び出し)
  226.   #----------------------------------------------------------------------
  227.   alias xrxs_bp1_remove_states_auto remove_states_auto
  228.   def remove_states_auto
  229.     return if @slip_state_update_ban
  230.     xrxs_bp1_remove_states_auto
  231.   end
  232. end
  233. #========================================================================
  234. # ■ Game_Actor
  235. #========================================================================
  236. class Game_Actor < Game_Battler
  237.   #----------------------------------------------------------------------
  238.   # ● セットアップ
  239.   #----------------------------------------------------------------------
  240.   alias xrxs_bp1_setup setup
  241.   def setup(actor_id)
  242.     xrxs_bp1_setup(actor_id)
  243.     @cp = 0
  244.     @now_guarding = false
  245.     @slip_state_update_ban = false
  246.   end
  247. end
  248. #========================================================================
  249. # ■ Game_Enemy
  250. #========================================================================
  251. class Game_Enemy < Game_Battler
  252.   #----------------------------------------------------------------------
  253.   # ● オブジェクト初期化
  254.   #----------------------------------------------------------------------
  255.   alias xrxs_bp1_initialize initialize
  256.   def initialize(troop_id, member_index)
  257.     xrxs_bp1_initialize(troop_id, member_index)
  258.     @cp = 0
  259.     @now_guarding = false
  260.     @slip_state_update_ban = false
  261.   end
  262. end
  263. class Window_All < Window_Base
  264.   def initialize
  265.     super(0,0,640,480)
  266.     self.opacity = 0
  267.     self.contents = Bitmap.new(width - 32, height - 32)
  268.     refresh
  269.   end
  270.   def refresh
  271.     self.contents.clear
  272.     for actor in $game_troop.enemies
  273.       next if !actor.exist?
  274.       draw_actor_cp_meter(actor, actor.screen_x-50, actor.screen_y-50, 60, 0)
  275.     end
  276.   end
  277.   #----------------------------------------------------------------------
  278.   # ○ CPメーター の描画
  279.   #----------------------------------------------------------------------
  280.   def draw_actor_cp_meter(actor, x, y, width = 156, type = 0)
  281.     self.contents.font.color = system_color
  282.     self.contents.fill_rect(x-1, y+27, width+2,6, Color.new(0, 0, 0, 255))
  283.     if actor.cp == nil
  284.       actor.cp = 0
  285.     end
  286.     w = width * [actor.cp,65535].min / 65535
  287.     self.contents.fill_rect(x, y+28, w,1, Color.new(255, 255, 128, 255))
  288.     self.contents.fill_rect(x, y+29, w,1, Color.new(255, 255, 0, 255))
  289.     self.contents.fill_rect(x, y+30, w,1, Color.new(192, 192, 0, 255))
  290.     self.contents.fill_rect(x, y+31, w,1, Color.new(128, 128, 0, 255))
  291.   end  
  292. end
  293. #========================================================================
  294. # ■ Window_BattleStatus
  295. #========================================================================
  296. class Window_BattleStatus < Window_Base
  297.   #-----------------------------------------------------------------------
  298.   # ○ 公開インスタンス変数
  299.   #----------------------------------------------------------------------
  300.   attr_accessor :update_cp_only # CPメーターのみの更新
  301.   #----------------------------------------------------------------------
  302.   # ● オブジェクト初期化
  303.   #----------------------------------------------------------------------
  304.   alias xrxs_bp1_initialize initialize
  305.   def initialize
  306.     @update_cp_only = false
  307.     @wall = Window_All.new
  308.     xrxs_bp1_initialize
  309.   end
  310.   def dispose
  311.     super
  312.     @wall.dispose
  313.   end
  314.   #----------------------------------------------------------------------
  315.   # ● リフレッシュ
  316.   #----------------------------------------------------------------------
  317.   alias xrxs_bp1_refresh refresh
  318.   def refresh
  319.     unless @update_cp_only
  320.       xrxs_bp1_refresh
  321.     end
  322.     refresh_cp
  323.     @wall.refresh
  324.   end
  325.   #----------------------------------------------------------------------
  326.   # ○ リフレッシュ(CPのみ)
  327.   #----------------------------------------------------------------------
  328.   def refresh_cp
  329.     for i in 0...$game_party.actors.size
  330.       actor = $game_party.actors[i]
  331.       #width = [self.width*3/4 / XRXS_BP1::MAX, 80].max
  332.       #space = self.width / XRXS_BP1::MAX
  333.       case i
  334.       when 0
  335.         actor_x = 510-64
  336.         actor_y = 360-100
  337.       when 1
  338.         actor_x = 430-40-24
  339.         actor_y = 395-100
  340.       when 2
  341.         actor_x = 288
  342.         actor_y = 400-60
  343.       when 3
  344.         actor_x = 580-64
  345.         actor_y = 288-100
  346.       end # of case
  347.       #case XRXS_BP1::ALIGN
  348.  
  349.       #when 0
  350.        # actor_x = i * space + 4
  351.       #when 1
  352.        # actor_x = (space * ((XRXS_BP1::MAX - $game_party.actors.size)/2.0 + i)).floor
  353.       #when 2
  354.         #actor_x = (i + XRXS_BP1::MAX - $game_party.actors.size) * space + 4
  355.       #end
  356.       #actor_x += self.x
  357.       draw_actor_cp_meter(actor, actor_x, actor_y+56, 64, 0)
  358.     end
  359.   end
  360.   #----------------------------------------------------------------------
  361.   # ○ CPメーター の描画
  362.   #----------------------------------------------------------------------
  363.   def draw_actor_cp_meter(actor, x, y, width = 156, type = 0)
  364.     self.contents.font.color = system_color
  365.     self.contents.fill_rect(x-1, y+27, width+2,6, Color.new(0, 0, 0, 255))
  366.     if actor.cp == nil
  367.       actor.cp = 0
  368.     end
  369.     w = width * [actor.cp,65535].min / 65535
  370.     self.contents.fill_rect(x, y+28, w,1, Color.new(255, 255, 128, 255))
  371.     self.contents.fill_rect(x, y+29, w,1, Color.new(255, 255, 0, 255))
  372.     self.contents.fill_rect(x, y+30, w,1, Color.new(192, 192, 0, 255))
  373.     self.contents.fill_rect(x, y+31, w,1, Color.new(128, 128, 0, 255))
  374.   end
  375. end
  376. #========================================================================
  377. # ■ Scene_Battle
  378. #========================================================================
  379. class Scene_Battle
  380.   #----------------------------------------------------------------------
  381.   # ● フレーム更新
  382.   #----------------------------------------------------------------------
  383.   alias xrxs_bp1_update update
  384.   def update
  385.     xrxs_bp1_update
  386.     # CP更新
  387.     @cp_thread.update
  388.   end
  389.   #----------------------------------------------------------------------
  390.   # ● バトル終了
  391.   # result : 結果 (0:勝利 1:敗北 2:逃走)
  392.   #----------------------------------------------------------------------
  393.   alias xrxs_bp1_battle_end battle_end
  394.   def battle_end(result)
  395.     # CPカウントを停止する
  396.     @cp_thread.stop
  397.     # 呼び戻す
  398.     xrxs_bp1_battle_end(result)
  399.   end
  400.   #----------------------------------------------------------------------
  401.   # ● プレバトルフェーズ開始
  402.   #----------------------------------------------------------------------
  403.   alias xrxs_bp1_start_phase1 start_phase1
  404.   def start_phase1
  405.     @agi_total = 0
  406.     @int_total = 0
  407.     @dex_total = 0
  408.     # CP加算を開始する
  409.     @cp_thread = Scene_Battle_CP.new
  410.     # インデックスを計算
  411.     @cp_escape_actor_command_index = @actor_command_window.height/32 - 1
  412.     # アクターコマンドウィンドウに追加
  413.     @actor_command_window.add_command("逃  跑")
  414.     if !$game_temp.battle_can_escape
  415.       @actor_command_window.disable_item(@cp_escape_actor_command_index)
  416.     end
  417.     # 呼び戻す
  418.     xrxs_bp1_start_phase1   
  419.   end
  420.   #----------------------------------------------------------------------
  421.   # ● パーティコマンドフェーズ開始
  422.   #----------------------------------------------------------------------
  423.   alias xrxs_bp1_start_phase2 start_phase2
  424.   def start_phase2
  425.     xrxs_bp1_start_phase2
  426.     @party_command_window.active = false
  427.     @party_command_window.visible = false
  428.     # CP加算を再開する
  429.     @cp_thread.stop = false
  430.     # 次へ
  431.     start_phase3
  432.   end
  433.   #----------------------------------------------------------------------
  434.   # ● アクターコマンドウィンドウのセットアップ
  435.   #----------------------------------------------------------------------
  436.   alias xrxs_bp1_phase3_setup_command_window phase3_setup_command_window
  437.   def phase3_setup_command_window
  438.     # CPスレッドを一時停止する
  439.     @cp_thread.stop = true
  440.     # ウィンドウのCP更新
  441.     @status_window.refresh_cp
  442.     # @active_battlerの防御を解除
  443.     @active_battler.now_guarding = false
  444.     # 効果音の再生
  445.     Audio.se_play(DATA_SYSTEM_COMMAND_UP_SE) if DATA_SYSTEM_COMMAND_UP_SE != ""
  446.     # 呼び戻す
  447.     xrxs_bp1_phase3_setup_command_window     
  448.   end
  449.   #----------------------------------------------------------------------
  450.   # ● 帧更新(角色命令阶段:基本命令)
  451.   #----------------------------------------------------------------------
  452.   alias xrxs_bsp1_update_phase3_basic_command update_phase3_basic_command
  453.   def update_phase3_basic_command
  454.    if  @actor_command_window.active = true && @actor_command_window.visible = true #玄:防重复按键
  455.     # 按下回车按钮时
  456.      if Input.trigger?(Input::C)
  457.       # 在actor命令窗口中的光标位置处分支
  458.       case @actor_command_window.index
  459.       when @cp_escape_actor_command_index # 逃跑
  460.         if $game_temp.battle_can_escape
  461.           # 决定时SE播放
  462.           $game_system.se_play($data_system.decision_se)
  463.           # 设定动作类型
  464.           @active_battler.current_action.kind = 0
  465.           @active_battler.current_action.basic = 4
  466.           # 转到下一个actor命令输入
  467.           phase3_next_actor
  468.         else
  469.           # 播放蜂鸣器SE
  470.           $game_system.se_play($data_system.buzzer_se)
  471.         end
  472.         return
  473.       end#of case
  474.     end
  475.     xrxs_bsp1_update_phase3_basic_command
  476.    end
  477.   end
  478.   #----------------------------------------------------------------------
  479.   # ● 主要阶段开始
  480.   #----------------------------------------------------------------------
  481.   alias xrxs_bp1_start_phase4 start_phase4
  482.   def start_phase4
  483.     #
  484.     xrxs_bp1_start_phase4
  485.     # 暂停CP进程
  486.     unless @action_battlers.empty?
  487.       @cp_thread.stop = true
  488.     end
  489.    end
  490.   #----------------------------------------------------------------------
  491.   # ● 行動順序作成
  492.   #----------------------------------------------------------------------
  493.   alias xrxs_bp1_make_action_orders make_action_orders
  494.   def make_action_orders
  495.     xrxs_bp1_make_action_orders
  496.     # 确认每个人的CP
  497.     exclude_battler = []
  498.     @time += 1
  499.     for battler in @action_battlers
  500.        #玄:时序插入
  501.       if @time%68 == 0 && battler.cp < 65535
  502.         unless battler.dead?
  503.          battler.time_effect
  504.          @status_window.refresh
  505.          @phase4_step = 2
  506.         end
  507.       end
  508.  
  509.       # 如果缺少CP,则从@action_battlers中排除
  510.       if battler.cp < 65535
  511.         exclude_battler.push(battler)
  512.       end
  513.     end
  514.     @action_battlers -= exclude_battler
  515.   end
  516.   #----------------------------------------------------------------------
  517.   # ● 帧更新(主要阶段步骤1:行动准备)
  518.   #----------------------------------------------------------------------
  519.   alias xrxs_bp1_update_phase4_step1 update_phase4_step1
  520.   def update_phase4_step1
  521.     # 初期化
  522.     @phase4_act_continuation = 0
  523.     # 勝敗判定
  524.     if judge
  525.       @cp_thread.stop
  526.       # 勝利または敗北の場合 : メソッド終了
  527.       return
  528.     end
  529.     # 未行動バトラー配列の先頭から取得
  530.     @active_battler = @action_battlers[0]
  531.     # ステータス更新をCPだけに限定。
  532.     @status_window.update_cp_only = true
  533.     # ステート更新を禁止。
  534.     @active_battler.slip_state_update_ban = true if @active_battler != nil
  535.     # 戻す
  536.     xrxs_bp1_update_phase4_step1
  537.     # @status_windowがリフレッシュされなかった場合は手動でリフレッシュ(CPのみ)
  538.     if @phase4_step != 2
  539.       # リフレッシュ
  540.       @status_window.refresh
  541.       # 軽量化:たったコレだけΣ(?w?
  542.       Graphics.frame_reset
  543.     end
  544.     # 禁止を解除
  545.     @status_window.update_cp_only = false
  546.     @active_battler.slip_state_update_ban = false if @active_battler != nil
  547.   end
  548.   #----------------------------------------------------------------------
  549.   # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  550.   #----------------------------------------------------------------------
  551.   alias xrxs_bp1_update_phase4_step2 update_phase4_step2
  552.   def update_phase4_step2
  553.     # 如果不是强制行动
  554.     unless @active_battler.current_action.forcing
  555.       # 当约束是[通常攻击敌人]或[通常攻击盟友]
  556.       if @active_battler.restriction == 2 or @active_battler.restriction == 3
  557.         # 将攻击设置为行动
  558.         @active_battler.current_action.kind = 0
  559.         @active_battler.current_action.basic = 0
  560.       end
  561.       # 当限制是“我不能行动”
  562.       if @active_battler.restriction == 4
  563.         # 清除动作强制管家
  564.         $game_temp.forcing_battler = nil
  565.         if @phase4_act_continuation == 0 and @active_battler.cp >= 65535
  566.           # 状态符号自然解除
  567.           @active_battler.remove_states_auto
  568.           # CP消費
  569.           @active_battler.cp -= 65535
  570.           # 刷新状态窗口
  571.           @status_window.refresh
  572.         end
  573.         # 转到第1步
  574.         @phase4_step = 1
  575.         return
  576.       end
  577.     end
  578.     # 行动类型分支
  579.     case @active_battler.current_action.kind
  580.     when 0
  581.       # 攻击、防御、逃跑、什么都不做时消耗的CP
  582.       @active_battler.cp -= CP_COST_BASIC_ACTIONS if @phase4_act_continuation == 0
  583.     when 1
  584.       @active_battler.now_guarding = false
  585.       if @phase4_act_continuation == 0
  586.        if $data_skills[@active_battler.current_action.skill_id ].int_f == 1
  587.        @active_battler.cp -= 16384
  588.        else      
  589.        end
  590.       end
  591.     when 2
  592.      @active_battler.now_guarding = false #玄:融合脚本,取消防御
  593.       # 使用道具时消耗的CP
  594.       if @phase4_act_continuation == 0
  595.         @active_battler.cp -= CP_COST_ITEM_ACTION  
  596.       end
  597.       if $data_items[@active_battler.current_action.item_id].scope == 3
  598.         @active_battler.cp += 46000     
  599.       end
  600.     end
  601.     # 记录行动
  602.     if @active_battler.is_a?(Game_Actor) #&& @active_battler.id == 1
  603.     @active_battler.last_action.kind = @active_battler.current_action.kind
  604.      @active_battler.last_action.basic = @active_battler.current_action.basic
  605.      @active_battler.last_action.forcing = @active_battler.current_action.forcing
  606.      @active_battler.last_action.target_index = @active_battler.current_action.target_index
  607.      @active_battler.last_action.skill_id = @active_battler.current_action.skill_id
  608.      @active_battler.last_action.item_id = @active_battler.current_action.item_id
  609.     end
  610.     #状态自然解除
  611.      if @active_battler.current_action.skill_id != 0
  612.       unless $data_skills[@active_battler.current_action.skill_id ].int_f == 1
  613.        @active_battler.remove_states_auto
  614.       end
  615.      else
  616.      @active_battler.remove_states_auto
  617.      end
  618.  
  619.     #返回
  620.     xrxs_bp1_update_phase4_step2
  621.   end
  622.   #----------------------------------------------------------------------
  623.   # ● 基本操作结果创建
  624.   #----------------------------------------------------------------------
  625.   alias xrxs_bp1_make_basic_action_result make_basic_action_result
  626.   def make_basic_action_result
  627.     # 攻撃の場合
  628.     if @active_battler.current_action.basic == 0 and @phase4_act_continuation == 0
  629.       @active_battler.cp -= CP_COST_BASIC_ATTACK # 攻撃時のCP消費
  630.        @active_battler.now_guarding = false
  631.     end
  632.     #防御の場合
  633.     if @active_battler.current_action.basic == 1 and @phase4_act_continuation == 0
  634.       @active_battler.cp -= CP_COST_BASIC_GUARD # 防御時のCP消費
  635.       # @active_battlerの防御をON
  636.       @active_battler.now_guarding = true
  637.     end
  638.     #当敌人逃跑时
  639.     if @active_battler.is_a?(Game_Enemy) and
  640.         @active_battler.current_action.basic == 2 and @phase4_act_continuation == 0
  641.       @active_battler.cp -= CP_COST_BASIC_ESCAPE # 逃走時のCP消費
  642.        @active_battler.now_guarding = false
  643.     end
  644.     #如果你什么也不做
  645.     if @active_battler.current_action.basic == 3 and @phase4_act_continuation == 0
  646.       @active_battler.cp -= CP_COST_BASIC_NOTHING # 什么都不做のCP消費
  647.        @active_battler.now_guarding = false
  648.     end
  649.     #如果你要逃跑
  650.     if @active_battler.current_action.basic == 4 and @phase4_act_continuation == 0
  651.       @active_battler.cp -= CP_COST_BASIC_ESCAPE # 逃走時のCP消費
  652.       #如果你不能逃走
  653.       if $game_temp.battle_can_escape == false
  654.         #播放蜂鸣器SE
  655.         $game_system.se_play($data_system.buzzer_se)
  656.         return
  657.       end
  658.       #逃走处理中
  659.       update_phase2_escape
  660.       return
  661.     end
  662.     # 返回
  663.     xrxs_bp1_make_basic_action_result
  664.   end
  665.   #----------------------------------------------------------------------
  666.   # ● 帧更新(主阶段步骤6:刷新)
  667.   #----------------------------------------------------------------------
  668.   alias xrxs_bp1_update_phase4_step6 update_phase4_step6
  669.   def update_phase4_step6
  670.     if @active_battler.hp > 0 and @active_battler.slip_damage?
  671.      if @active_battler.current_action.kind == 0 #普通攻击
  672.        @active_battler.slip_damage_effect
  673.        @active_battler.damage_pop = true        #刷新状态窗口
  674.      elsif @active_battler.current_action.kind == 1  #特技攻击      
  675.       if @active_battler.current_action.skill_id != 0
  676.       else
  677.       end
  678.      elsif @active_battler.current_action.kind == 2 #使用物品
  679.      @active_battler.slip_damage_effect
  680.      @active_battler.damage_pop = true        #刷新状态窗口      
  681.      else
  682.      end
  683.     @status_window.refresh
  684.     end
  685.     # 呼び戻す
  686.     xrxs_bp1_update_phase4_step6
  687.   end
  688. end
  689.  
  690. #======================================================================
  691. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  692. #======================================================================


只要能进入战斗时先运行条件为回合0的事件页再开始跑集气条的话咱就可以继续做那个战斗开始时先手的第100号状态了,还请大家多多指教,多谢了

祝大家新年心想事成,事事顺利!

Lv5.捕梦者

梦石
0
星屑
33178
在线时间
10489 小时
注册时间
2009-3-15
帖子
4756
2
发表于 2022-1-1 12:14:16 | 只看该作者
可以看我的主题找到战斗中执行並行公共事件的脚本..但不保证合适...阿门

点评

我找人看我的空间..他们都能看到..所以不是我的问题..应该没有加密  发表于 2022-1-2 14:58
https://rpg.blue/thread-477564-1-1.html  发表于 2022-1-2 14:49
吓?我没加密过啊...  发表于 2022-1-2 14:48
大神你加密了,除了你其他人看不到的...  发表于 2022-1-2 14:30
在我的主题里第一页就有..你跟我说没找到?  发表于 2022-1-2 11:27
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4914
在线时间
445 小时
注册时间
2011-3-26
帖子
101
3
发表于 2022-1-1 12:40:34 | 只看该作者
本帖最后由 rfvtgbzxc 于 2022-1-2 20:30 编辑

印象里条件设置为回合1+0x就可以在跑进度条的时候触发,但是cp那个时候已经分配完毕了。这个时候可以在事件里加脚本:
  1. $game_party.actors.each do | actor |
  2.   actor.cp = 65535 if actor.state?(xxx)
  3. end
复制代码


Scene_Battle自带一个事件解释器,执行事件使用如下指令:
RUBY 代码复制
  1. # 装载事件
  2. common_event = $data_common_events[event_id]
  3. $game_system.battle_interpreter.setup(common_event.list, event_id)
  4. # 立刻执行事件
  5. $game_system.battle_interpreter.update


如果你不在setup以后立刻update的话,系统会在随后的进度里update,不过那个时候是在战斗中cp初始化完成以后。

这怎么会抢先一步呢,你也抢在执行面前不就好了。
RUBY 代码复制
  1. #========================================================================
  2. # □ Scene_Battle_CP
  3. #========================================================================
  4. class Scene_Battle_CP
  5.   #----------------------------------------------------------------------
  6.   # ○ 公開インスタンス変数
  7.   #----------------------------------------------------------------------
  8.   attr_accessor :stop # CP加算ストップ
  9.   #----------------------------------------------------------------------
  10.   # ○ オブジェクトの初期化
  11.   #----------------------------------------------------------------------
  12.   def initialize  
  13.     @battlers = []
  14.     @cancel = false
  15.     @stop = false
  16.     @str_total = 0
  17.     @dex_total = 0   
  18.     @agi_total = 0
  19.     @int_total = 0   
  20.     # 配列 count_battlers を初期化
  21.     count_battlers = []
  22.     # 将enemy添加到数组count_battlers
  23.     for enemy in $game_troop.enemies
  24.       count_battlers.push(enemy)
  25.     end
  26.     # 将actor添加到数组count_battlers
  27.     for actor in $game_party.actors
  28.       count_battlers.push(actor)
  29.     end
  30.     for battler in count_battlers
  31.       @str_total = [@str_total,battler.str].max      
  32.       @dex_total = [@dex_total,battler.dex].max
  33.       @agi_total = [@agi_total,battler.agi].max
  34.       @int_total = [@int_total,battler.int].max      
  35.     end
  36.  
  37.  
  38.  
  39.  
  40.     # 装载事件
  41.     common_event = $data_common_events[event_id]
  42.     $game_system.battle_interpreter.setup(common_event.list, event_id)
  43.     # 立刻执行事件
  44.     $game_system.battle_interpreter.update
  45.  
  46.  
  47.  
  48.  
  49.  
  50.     for battler in count_battlers
  51.       battler.cp = 0        
  52.     end   
  53.     for battler in $game_party.actors   #         
  54.      if battler.state?(100)
  55.        battler.cp+=65535
  56.        battler.xp2_damage="我先出手!"
  57.        battler.xp2_damage_pop=true
  58.      end
  59.     end
  60.     #下面就是困扰我很久的bug,只有先运行数据库队伍战斗事件触发条件为0回合的事件页然后再开始跑CP集气条的话才能解决这个bug   
  61.     for battler in $game_troop.enemies  
  62.      if battler.state?(100)
  63.        battler.cp+=65535
  64.        battler.xp2_damage="我先出手! "
  65.        battler.xp2_damage_pop=true
  66.      end
  67.     end        
  68.   end
  69.   #----------------------------------------------------------------------
  70.   # ○ CP计数
  71.   #----------------------------------------------------------------------
  72.   def update
  73.     # 如果停止就返回
  74.     return if @stop
  75.     for battler in $game_party.actors + $game_troop.enemies
  76.       # 如果行动不能忽视
  77.       if battler.dead? == true
  78.         battler.cp = 0
  79.         next
  80.       end
  81.       cp_a=0.6
  82.       cp_b=0.4
  83.       cp_c=0.3
  84.       cp_d=0.08     
  85.       battler.cp = [[battler.cp + BATTLE_SPEED * 4000 * (cp_a*battler.agi+cp_b*battler.dex+cp_c*battler.int+cp_d*battler.str) /(0.6*@agi_total+0.4*@dex_total+0.3*@int_total+0.08*@str_total), 0].max, 65535].min
  86.     end
  87.   end
  88.   #----------------------------------------------------------------------
  89.   # ○ 开始CP计数
  90.   #----------------------------------------------------------------------
  91.   def stop
  92.     @cancel = true
  93.     if @cp_thread != nil then
  94.       @cp_thread.join
  95.       @cp_thread = nil
  96.     end
  97.   end
  98. end

点评

wwwwww~  发表于 2022-1-2 20:48
我知道问题在哪了,我那个 # 立刻执行事件$game_system.battle_interpreter.update没有写出来...  发表于 2022-1-2 20:41
只要涉及到battle_interpreter.setup的都会被那个CP集气Scene_Battle_CP.new抢前一步,我待会来新建个工程在详细描述一下  发表于 2022-1-2 20:04
本层更新的内容能帮上忙吗?加在initialize里。  发表于 2022-1-2 19:53
不是不论什么时候,就战斗开始的第一下,简称先手,目前我方actor已经有这个效果了,就是敌方enemy有这个状态时没有这个效果..  发表于 2022-1-2 19:46

评分

参与人数 1星屑 +300 +1 收起 理由
RyanBern + 300 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
4
 楼主| 发表于 2022-1-2 20:22:57 | 只看该作者
rfvtgbzxc 发表于 2022-1-1 12:40
印象里条件设置为回合1+0x就可以在跑进度条的时候触发,但是cp那个时候已经分配完毕了。这个时候可以在事件 ...


大神你可以试试我下面这个工程,我在队伍战斗事件页下面p了个"敌方战斗状态设置结束",在class Scene_Battle_CP的def initialize里面p了个"现在开始跑CP集气",然后你就会发现那个"现在开始跑CP集气"总是会在"敌方战斗状态设置结束"前面出现

Project_CP先手.rar

193.43 KB, 下载次数: 13

CP_先手

点评

如果能让"敌方战斗状态设置结束"在"现在开始跑CP集气"之前出现的话我的这个问题就算是解决了  发表于 2022-1-2 20:30
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
5
 楼主| 发表于 2022-1-2 20:57:27 | 只看该作者
本帖最后由 taeckle 于 2022-1-2 21:03 编辑
rfvtgbzxc 发表于 2022-1-1 12:40
印象里条件设置为回合1+0x就可以在跑进度条的时候触发,但是cp那个时候已经分配完毕了。这个时候可以在事件 ...


大神你在看我下面我自己想出来的解决方案:
①先在Class Scene_Battle 的 def main里面设置两个开关:
    $game_switches[1] = false #战斗开始敌方状态设置  
    $game_switches[2] = false #战斗开始CP设置
②然后把我那个cp脚本里第419行的 @cp_thread = Scene_Battle_CP.new 注释掉,
③接下来要在条件为回合0的数据库第13号队伍战斗事件页中最后添加一句"$game_switches[1] = true"
④最后再在我那个cp脚本里的第387行#CP更新下面增加这段设置,保存后就可以先运行战斗事件页(0回合)再跑CP集气条了:
    if $game_switches[1]==true
     if $game_switches[2]==false
    @cp_thread = Scene_Battle_CP.new
    $game_switches[2]=true
     end
    end

Project_CP先手_解决方案1.rar

193.73 KB, 下载次数: 14

解决方案1

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4914
在线时间
445 小时
注册时间
2011-3-26
帖子
101
6
发表于 2022-1-2 21:28:06 | 只看该作者
本帖最后由 rfvtgbzxc 于 2022-1-3 18:08 编辑
taeckle 发表于 2022-1-2 20:57
大神你在看我下面我自己想出来的解决方案:
①先在Class Scene_Battle 的 def main里面设置两个开关:
     ...


你这样每场战斗都要加$game_switches[1] = true了。
这实际上不是时序问题,更像是初始化行为的不完善。可以考虑用之前提到的数据拓展脚本,给enemy一个数据库属性“initial_states”或者"offensive"(先手),设定好开局状态属性或者先手属性以后在代码里处理。
如果要给特定的少量战斗添加敌方先手,可以事件里直接把敌人cp条加满。
RUBY 代码复制
  1. =begin
  2. 添加属性:
  3.   initial_states:刚开局,怪物身上就有的状态
  4. =end
  5. module RPG
  6.   class Enemy
  7.     attr_accessor :initial_states
  8.   end
  9. end
  10. #--------------------------------------------------------------------------
  11. # 数据更新,该部分落实补充$data_enemies的数据
  12. #--------------------------------------------------------------------------                                            
  13. module Data_Extend
  14.   # 初始状态
  15.   # enemy_id => [...states]                                                      
  16.   Enemy_initial_states = {
  17.    # 小恶魔, [强力]
  18.    13 => [13]
  19.   }
  20.   def self.update_data_enemy
  21.     for i in 1..$data_enemies.size
  22.       enemy = $data_enemies[i]
  23.       next if enemy.nil?
  24.       enemy.initial_states = Enemy_initial_states.include?(i) ? Enemy_initial_states[i] : []
  25.     end
  26.   end
  27. end
  28.  
  29.  
  30. # 开战后,再一个个上状态
  31. $game_troop.enemies.each do |enemy|
  32.   enemy.initial_states.each do |state_id|
  33.     enemy.add_state(state_id)
  34.   end
  35. end

点评

self.initial_states.each do |state_id| self.add_state(state_id) end  发表于 2022-1-3 17:25
放到Game_Enemy的initialize的最后一行我认为比较合适,不需要外面$game_troop那层循环了,把这个过程看作是随着怪物生成发起的行为。  发表于 2022-1-3 17:23
谢夸ww这个模式是随着开发经验逐渐定型的,考虑了很多取巧方法后还是回到数据库本身了。技能被占用的部分的确很少,是做拓展的好地方。  发表于 2022-1-3 17:19
大神我还想请问下你这个给enemy战斗初始状态的脚本该如何使用或者调用呢?放到哪里最合适呢?  发表于 2022-1-3 17:10
做的挺好的,一些XP的脚本会喜欢在敌人的名字里做个标记,不过我喜欢塞一个用不上的技能。  发表于 2022-1-3 09:57
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
7
 楼主| 发表于 2022-1-2 21:44:21 | 只看该作者
rfvtgbzxc 发表于 2022-1-2 21:28
你这样每场战斗都要加$game_switches[1] = true了。
这实际上不是时序问题,更像是初始化行为的不完善。 ...


多谢大神指点,我早就该把我的这个工程发出来了,你说的没错,今天上午我花了3个小时把我工程数据库里600多个战斗队伍事件页最后都加了个$game_switches[1] = true,累了个半死...

点评

wwww  发表于 2022-1-2 21:58
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33178
在线时间
10489 小时
注册时间
2009-3-15
帖子
4756
8
发表于 2022-1-3 13:39:15 | 只看该作者
我以为楼主是有要有什么条件下敌人才触发的先攻特效..但既然固定触发就没有必要用事件了..

点评

没错,可以用6楼大神给的脚本  发表于 2022-1-3 17:18
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9128
在线时间
463 小时
注册时间
2015-5-8
帖子
865
9
 楼主| 发表于 2022-1-4 08:56:32 | 只看该作者
rfvtgbzxc 发表于 2022-1-2 21:28
你这样每场战斗都要加$game_switches[1] = true了。
这实际上不是时序问题,更像是初始化行为的不完善。 ...


大神你看这是我在rpg maker xp默认脚本基础上按照你在6楼给我的脚本自己写的, 具体步骤为:
①把从第13行module Data_Extend到第27行插入到main上面
②把attr_accessor :initial_states插入到默认脚本中的Game_Enemy < Game_Battler下面
③把self.initial_states.each do |state_id| self.add_state(state_id) end放到Game_Enemy的initialize的最后一行

现在好像运行不了,大神你可以帮我改一改或者你也新建个工程写一下吗?多谢了!

战斗前怪的buff设置.rar

188.83 KB, 下载次数: 14

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4299
在线时间
407 小时
注册时间
2016-5-11
帖子
140
10
发表于 2022-1-4 12:02:02 | 只看该作者
楼主就是想让敌人先手吧,如果是固定敌人必定先手的话,你可以分歧一下敌人的ID battler.cp+=65535 if battler..id==1 && battler.is_a?(Game_Enemy), 如果你是在事件页添加了另外的随机条件那就不行了,或者你直接在事件页加cp,

评分

参与人数 1+1 收起 理由
taeckle + 1 多谢指点~~

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-26 12:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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