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

Project1

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

求助 战斗中换装备

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
58 小时
注册时间
2007-8-10
帖子
284
跳转到指定楼层
1
发表于 2008-11-15 06:45:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我用RTAB战斗系统 脚本太长放主要的八
  1. # リアルタイム・アクティブバトル(RTAB) Ver 1.16
  2. #(更改战斗选项调动公共事件)
  3. #增加死亡判定 增加战斗换人选项
  4. # 配布元・サポートURL
  5. # http://members.jcom.home.ne.jp/cogwheel/


  6. class Scene_Battle
  7.   #--------------------------------------------------------------------------
  8.   # ● メイン処理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 戦闘用の各種一時データを初期化
  12.    # Graphics.frame_rate = 60
  13.     $game_temp.in_battle = true
  14.     $game_temp.battle_turn = 0
  15.     $game_temp.battle_event_flags.clear
  16.     $game_temp.battle_abort = false
  17.     $game_temp.battle_main_phase = false
  18.     $game_temp.battleback_name = $game_map.battleback_name
  19.     $game_temp.forcing_battler = nil
  20.     # バトルイベント用インタプリタを初期化
  21.     $game_system.battle_interpreter.setup(nil, 0)
  22.     # トループを準備
  23.     @troop_id = $game_temp.battle_troop_id
  24.     $game_troop.setup(@troop_id)
  25.     atb_setup
  26.     # アクターコマンドウィンドウを作成
  27. #==============================================================================
  28. #RTAB观光游第三站,战斗菜单增加逃跑选项
  29. #==============================================================================   
  30.     s1 = $data_system.words.attack
  31.     s2 = $data_system.words.skill
  32.     s3 = $data_system.words.guard
  33.     s4 = $data_system.words.item
  34.     s5 = "自动战斗"
  35.     s6 = "逃跑"
  36.   #  s7 = "换人"

  37.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4,s5,s6,])   
  38. #   @actor_command_window.y = 160
  39.     @actor_command_window.y = 100
  40.     @actor_command_window.back_opacity = 160
  41.     @actor_command_window.active = false
  42.     @actor_command_window.visible = false
  43. #==============================================================================   
  44.     # その他のウィンドウを作成
  45. #------------------------------------------------------------------------------
  46. #RTAB观光游第一站,去除“战斗/逃跑”选项部分   
  47. #    @party_command_window = Window_PartyCommand.new
  48. #------------------------------------------------------------------------------   
  49.     @help_window = Window_Help.new
  50.     @help_window.back_opacity = 160
  51.     @help_window.visible = false
  52.     @status_window = Window_BattleStatus.new
  53.     @message_window = Window_Message.new
  54.     # スプライトセットを作成
  55.     @spriteset = Spriteset_Battle.new
  56.     # ウェイトカウントを初期化
  57.     @wait_count = 0
  58.     # トランジション実行
  59.     if $data_system.battle_transition == ""
  60.       Graphics.transition(20)
  61.     else
  62.       Graphics.transition(40, "Graphics/Transitions/" +
  63.         $data_system.battle_transition)
  64.     end
  65.     # プレバトルフェーズ開始
  66.     start_phase1
  67.     # メインループ
  68.     loop do
  69.       # ゲーム画面を更新
  70.       Graphics.update
  71.       # 入力情報を更新
  72.       Input.update
  73.       # フレーム更新
  74.       update
  75.       # 画面が切り替わったらループを中断
  76.       if $scene != self
  77.         break
  78.       end
  79.     end
  80.     # マップをリフレッシュ
  81.     $game_map.refresh
  82.     # トランジション準備
  83.     Graphics.freeze
  84.     # ウィンドウを解放
  85.     @actor_command_window.dispose
  86. #------------------------------------------------------------------------------
  87. #RTAB观光游第一站,去除“战斗/逃跑”选项部分   
  88. #    @party_command_window.dispose
  89. #------------------------------------------------------------------------------   
  90.     @help_window.dispose
  91.     @status_window.dispose
  92.     @message_window.dispose
  93.     if @skill_window != nil
  94.       @skill_window.dispose
  95.     end
  96.     if @item_window != nil
  97.       @item_window.dispose
  98.     end
  99.     if @result_window != nil
  100.       @result_window.dispose
  101.     end
  102.     # スプライトセットを解放
  103.     @spriteset.dispose
  104.     # タイトル画面に切り替え中の場合
  105.     if $scene.is_a?(Scene_Title)
  106.       # 画面をフェードアウト
  107.       Graphics.transition
  108.       Graphics.freeze
  109.     end
  110.     # 戦闘テストからゲームオーバー画面以外に切り替え中の場合
  111.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  112.       $scene = nil
  113.     end
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● 勝敗判定
  117.   #--------------------------------------------------------------------------
  118.   def judge
  119.     # 全滅判定が真、またはパーティ人数が 0 人の場合
  120.     if $game_party.all_dead? or $game_party.actors.size == 0
  121.       # 敗北可能の場合
  122.       if $game_temp.battle_can_lose
  123.         # バトル開始前の BGM に戻す
  124.         $game_system.bgm_play($game_temp.map_bgm)
  125.         # バトル終了
  126.         battle_end(2)
  127.         # true を返す
  128.         return true
  129.       end
  130.       # ゲームオーバーフラグをセット
  131.       $game_temp.gameover = true
  132.       # true を返す
  133.       return true
  134.     end
  135.     # エネミーが 1 体でも存在すれば false を返す
  136.     for enemy in $game_troop.enemies
  137.       if enemy.exist?
  138.         return false
  139.       end
  140.     end
  141.     # アフターバトルフェーズ開始 (勝利)
  142.     start_phase5
  143.     # true を返す
  144.     return true
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● フレーム更新
  148.   #--------------------------------------------------------------------------
  149.   def update
  150.     # バトルイベント実行中の場合
  151.     if $game_system.battle_interpreter.running?
  152.       if @command.size > 0
  153.         @command_a = false
  154.         @command = []
  155.         command_delete
  156.       end
  157.       @status_window.at_refresh
  158.       # インタプリタを更新
  159.       $game_system.battle_interpreter.update
  160.       # アクションを強制されているバトラーが存在しない場合
  161.       if $game_temp.forcing_battler == nil
  162.         # バトルイベントの実行が終わった場合
  163.         unless $game_system.battle_interpreter.running?
  164.           # バトルイベントのセットアップを再実行
  165.           @status_window.refresh
  166.           setup_battle_event
  167.         end
  168.       end
  169.     end
  170.     # システム (タイマー)、画面を更新
  171.     $game_system.update
  172.     $game_screen.update
  173.     # タイマーが 0 になった場合
  174.     if $game_system.timer_working and $game_system.timer == 0
  175.       # バトル中断
  176.       $game_temp.battle_abort = true
  177.     end
  178.     # ウィンドウを更新
  179.     @help_window.update
  180. #------------------------------------------------------------------------------
  181. #RTAB观光游第一站,去除“战斗/逃跑”选项部分   
  182. #    @party_command_window.update
  183. #------------------------------------------------------------------------------
  184.     @actor_command_window.update
  185.     @status_window.update
  186.     @message_window.update
  187.     # スプライトセットを更新
  188.     @spriteset.update
  189.     # トランジション処理中の場合
  190.     if $game_temp.transition_processing
  191.       # トランジション処理中フラグをクリア
  192.       $game_temp.transition_processing = false
  193.       # トランジション実行
  194.       if $game_temp.transition_name == ""
  195.         Graphics.transition(20)
  196.       else
  197.         Graphics.transition(40, "Graphics/Transitions/" +
  198.           $game_temp.transition_name)
  199.       end
  200.     end
  201.     # メッセージウィンドウ表示中の場合
  202.     if $game_temp.message_window_showing
  203.       return
  204.     end
  205.     # ゲームオーバーの場合
  206.     if $game_temp.gameover
  207.       # 切换到地图,并且调用公共事件1号
  208.       $game_temp.battle_can_lose = true
  209.       battle_end(1)
  210.       $game_temp.gameover = false
  211.       $game_temp.common_event_id = 12
  212.       return
  213.     end

  214.     # タイトル画面に戻す場合
  215.     if $game_temp.to_title
  216.       # タイトル画面に切り替え
  217.       $scene = Scene_Title.new
  218.       return
  219.     end
  220.     # バトル中断の場合
  221.     if $game_temp.battle_abort
  222.       # バトル開始前の BGM に戻す
  223.       $game_system.bgm_play($game_temp.map_bgm)
  224.       # バトル終了
  225.       battle_end(1)
  226.       return
  227.     end
  228.     # ヘルプウィンドウ表示中の場合
  229.     if @help_wait > 0
  230.       @help_wait -= 1
  231.       if @help_wait == 0
  232.         # ヘルプウィンドウを隠す
  233.         @help_window.visible = false
  234.       end
  235.     end
  236.     # アクションを強制されているバトラーが存在せず、
  237.     # かつバトルイベントが実行中の場合
  238.     if $game_temp.forcing_battler == nil and
  239.        $game_system.battle_interpreter.running?
  240.       return
  241.     end
  242.     # フェーズによって分岐
  243.     case @phase
  244.     when 0  # ATゲージ更新フェーズ
  245.       if anime_wait_return
  246.         update_phase0
  247.       end
  248.     when 1  # プレバトルフェーズ
  249.       update_phase1
  250.       return
  251.     when 2  # パーティコマンドフェーズ
  252.       update_phase2
  253.       return
  254.     when 5  # アフターバトルフェーズ
  255.       update_phase5
  256.       return
  257.     end
  258.     if $scene != self
  259.       return
  260.     end
  261.     if @phase == 0
  262.       if @command.size != 0  # アクターコマンドフェーズ
  263.         if @command_a == false
  264.           start_phase3
  265.         end
  266.         update_phase3
  267.       end
  268.       # ウェイト中の場合
  269.       if @wait_count > 0
  270.         # ウェイトカウントを減らす
  271.         @wait_count -= 1
  272.         return
  273.       end
  274.       update_phase4
  275.     end
  276.   end

  277. #==============================================================================
  278. # ■ Scene_Battle (分割定義 2)
  279. #------------------------------------------------------------------------------
  280. #  バトル画面の処理を行うクラスです。
  281. #==============================================================================

  282.   #--------------------------------------------------------------------------
  283.   # ● フレーム更新 (ATゲージ更新フェーズ)
  284.   #--------------------------------------------------------------------------
  285.   def update_phase0
  286.     if $game_temp.battle_turn == 0
  287.       $game_temp.battle_turn = 1
  288.     end
  289.     # B ボタンが押された場合
  290.   #  if @command_a == false and @party == false
  291.    #   if Input.trigger?(Input::B)
  292.         # キャンセル SE を演奏
  293.    #     $game_system.se_play($data_system.cancel_se)
  294.    #     @party = true
  295.    #   end
  296.    # end
  297.    # if @party == true and
  298.    #     ((@action > 0 and @action_battlers.empty?) or (@action == 0 and
  299.    #     (@action_battlers.empty? or @action_battlers[0].phase == 1)))
  300.       # パーティコマンドフェーズへ
  301.    #   start_phase2
  302.    #   return
  303.    # end
  304.     # ATゲージ増加処理
  305.     cnt = 0
  306.     for battler in $game_party.actors + $game_troop.enemies
  307.       active?(battler)
  308.       if battler.rtp == 0
  309.         if battler.at >= @max
  310.           if battler.is_a?(Game_Actor)
  311.             if battler.inputable?
  312.               unless @action_battlers.include?(battler) or
  313.                   @command.include?(battler) or @escape == true
  314.                 if battler.current_action.forcing
  315.                   fullat_se
  316.                   force_action(battler)
  317.                   action_start(battler)
  318.                 else
  319.                   fullat_se
  320.                   @command.push(battler)
  321.                 end
  322.               end
  323.             else
  324.               unless @action_battlers.include?(battler) or
  325.                       battler == @command[0]
  326.                 battler.current_action.clear
  327.                 if @command.include?(battler)
  328.                   @command.delete(battler)
  329.                 else
  330.                   if battler.movable?
  331.                     fullat_se
  332.                   end
  333.                 end
  334.                 action_start(battler)
  335.               end
  336.             end
  337.           else
  338.             unless @action_battlers.include?(battler)
  339.               if battler.current_action.forcing
  340.                 force_action(battler)
  341.                 action_start(battler)
  342.               else
  343.                 if @enemy_speed != 0
  344.                   if rand(@enemy_speed) == 0
  345.                     number = cnt - $game_party.actors.size
  346.                     enemy_action(number)
  347.                   end
  348.                 else
  349.                   number = cnt - $game_party.actors.size
  350.                   enemy_action(number)
  351.                 end
  352.               end
  353.             end
  354.           end
  355.         else
  356.           battler.at += battler.agi
  357.           if battler.guarding?
  358.             battler.at += battler.agi
  359.           end
  360.           if battler.movable?
  361.             battler.atp = 100 * battler.at / @max
  362.           end
  363.         end
  364.       else
  365.         if battler.rt >= battler.rtp
  366.           speller = synthe?(battler)
  367.           if speller != nil
  368.             battler = speller[0]
  369.           end
  370.           unless @action_battlers.include?(battler)
  371.             if battler.is_a?(Game_Actor)
  372.               fullat_se
  373.             end
  374.             battler.rt = battler.rtp
  375.             action_start(battler)
  376.           end
  377.         else
  378.           battler.rt += battler.agi
  379.           speller = synthe?(battler)
  380.           if speller != nil
  381.             for spell in speller
  382.               if spell != battler
  383.                 spell.rt += battler.agi
  384.               end
  385.             end
  386.           end
  387.         end
  388.       end
  389.       cnt += 1
  390.     end
  391.     # ATゲージをリフレッシュ
  392.     @status_window.at_refresh
  393.     # 逃走処理
  394.     if @escape == true and
  395.         ((@action > 0 and @action_battlers.empty?) or (@action == 0 and
  396.         (@action_battlers.empty? or @action_battlers[0].phase == 1)))
  397.       temp = false
  398.       for battler in $game_party.actors
  399.         if battler.inputable?
  400.           temp = true
  401.         end
  402.       end
  403.       if temp == true
  404.         for battler in $game_party.actors
  405.           if battler.at < @max and battler.inputable?
  406.             temp = false
  407.             break
  408.           end
  409.         end
  410.         if temp == true
  411.           @escape = false
  412.           for battler in $game_party.actors
  413.             battler.at %= @max
  414.           end
  415.           $game_temp.battle_main_phase = false
  416.           update_phase2_escape
  417.         end
  418.       end
  419.     end
  420.   end
  421. #------------------------------------------------------------------------------
  422. #RTAB观光游第一站,去除“战斗/逃跑”选项部分  
  423.   #--------------------------------------------------------------------------
  424.   # ● パーティコマンドフェーズ開始
  425.   #--------------------------------------------------------------------------
  426. #  def start_phase2
  427.     # フェーズ 2 に移行
  428. #    @phase = 2
  429. #    @party = false
  430.     # パーティコマンドウィンドウを有効化
  431. #    @party_command_window.active = true
  432. #    @party_command_window.visible = true
  433.     # アクターを非選択状態に設定
  434. #    @actor_index = -1
  435.     # アクターコマンドウィンドウを無効化
  436. #    @actor_command_window.active = false
  437. #    @actor_command_window.visible = false
  438. #    if @command.size != 0
  439.       # アクターの明滅エフェクト OFF
  440. #      if @active_actor != nil
  441. #        @active_actor.blink = false
  442. #      end
  443. #    end
  444.     # カメラセット
  445. #    @camera == "party"
  446. #    @spriteset.screen_target(0, 0, 1)
  447.     # メインフェーズフラグをクリア
  448. #    $game_temp.battle_main_phase = false
  449. #  end
  450. #------------------------------------------------------------------------------
  451.   #--------------------------------------------------------------------------
  452.   # ● フレーム更新 (パーティコマンドフェーズ)
  453.   #--------------------------------------------------------------------------
  454.   def update_phase2
  455. #------------------------------------------------------------------------------
  456. #RTAB观光游第一站,去除“战斗/逃跑”选项部分  
  457.     # C ボタンが押された場合
  458.    # 去掉“战斗/逃跑”选项
  459. #    if Input.trigger?(Input::C)
  460.       # パーティコマンドウィンドウのカーソル位置で分岐
  461. #      case @party_command_window.index
  462. #      when 0  # 戦う
  463.         # パーティコマンドウィンドウを無効化
  464. #        @party_command_window.active = false
  465. #        @party_command_window.visible = false
  466.         # 決定 SE を演奏
  467. #        $game_system.se_play($data_system.decision_se)
  468. #------------------------------------------------------------------------------
  469.         @escape = false
  470.         @phase = 0
  471.         if $game_temp.battle_turn == 0
  472.           $game_temp.battle_turn = 1
  473.         end
  474.         if @command_a == true
  475.           # アクターコマンドフェーズ開始
  476.           start_phase3
  477.         else
  478.           $game_temp.battle_main_phase = true
  479.         end
  480. end         
  481. #------------------------------------------------------------------------------
  482. #RTAB观光游第一站,去除“战斗/逃跑”选项部分         
  483. #      when 1  # 逃げる
  484.         # 逃走可能ではない場合
  485. #        if $game_temp.battle_can_escape == false
  486.           # ブザー SE を演奏
  487. #          $game_system.se_play($data_system.buzzer_se)
  488. #          return
  489. #        end
  490.         # 決定 SE を演奏
  491. #        $game_system.se_play($data_system.decision_se)
  492. #        @phase = 0
  493.         # パーティコマンドウィンドウを無効化
  494. #        @party_command_window.active = false
  495. #        @party_command_window.visible = false
  496. #        $game_temp.battle_main_phase = true
  497. #        if $game_temp.battle_turn == 0
  498. #          update_phase2_escape
  499. #          $game_temp.battle_turn = 1
  500. #        for battler in $game_party.actors
  501. #           battler.at -= @max / 2
  502. #         end
  503. #         return
  504. #      end
  505.         # 決定 SE を演奏
  506. #       $game_system.se_play($data_system.decision_se)
  507. #       @escape = true
  508. #       for battler in $game_party.actors
  509. #         @command_a = false
  510. #         @command.delete(battler)
  511. #         @action_battlers.delete(battler)
  512. #         skill_reset(battler)
  513. #       end
  514. #     end
  515. #     return
  516. #   end
  517. #end
  518. #------------------------------------------------------------------------------
  519.   #--------------------------------------------------------------------------
  520.   # ● フレーム更新 (パーティコマンドフェーズ : 逃げる)
  521.   #--------------------------------------------------------------------------
  522.   def update_phase2_escape
  523.     # エネミーの素早さ平均値を計算
  524.     enemies_agi = 0
  525.     enemies_number = 0
  526.     for enemy in $game_troop.enemies
  527.       if enemy.exist?
  528.         enemies_agi += enemy.agi
  529.         enemies_number += 1
  530.       end
  531.     end
  532.     if enemies_number > 0
  533.       enemies_agi /= enemies_number
  534.     end
  535.     # アクターの素早さ平均値を計算
  536.     actors_agi = 0
  537.     actors_number = 0
  538.     for actor in $game_party.actors
  539.       if actor.exist?
  540.         actors_agi += actor.agi
  541.         actors_number += 1
  542.       end
  543.     end
  544.     if actors_number > 0
  545.       actors_agi /= actors_number
  546.     end
  547.     # 逃走成功判定
  548.     success = rand(100) < 50 * actors_agi / enemies_agi
  549.     # 逃走成功の場合
  550.     if success
  551.       # 逃走 SE を演奏
  552.       $game_system.se_play($data_system.escape_se)
  553.       # バトル開始前の BGM に戻す
  554.       $game_system.bgm_play($game_temp.map_bgm)
  555.       # バトル終了
  556.       battle_end(1)
  557.     # 逃走失敗の場合
  558.     else
  559.       @help_window.set_text("逃走失敗", 1)
  560.       @help_wait = @help_time
  561.       # パーティ全員のアクションをクリア
  562.       $game_party.clear_actions
  563.       # メインフェーズ開始
  564.       start_phase4
  565.     end
  566.   end
  567.   #--------------------------------------------------------------------------
  568.   # ● アフターバトルフェーズ開始
  569.   #--------------------------------------------------------------------------
  570.   def start_phase5
  571.     # フェーズ 5 に移行
  572.     @phase = 5
  573.     # バトル終了 ME を演奏
  574.     $game_system.me_play($game_system.battle_end_me)
  575.     # バトル開始前の BGM に戻す
  576.     $game_system.bgm_play($game_temp.map_bgm)
  577.     # EXP、ゴールド、トレジャーを初期化
  578.     exp = 0
  579.     gold = 0
  580.     treasures = []
  581.     if @active_actor != nil
  582.       @active_actor.blink = false
  583.     end
  584.     # メインフェーズフラグをセット
  585.     $game_temp.battle_main_phase = true
  586. #------------------------------------------------------------------------------
  587. #RTAB观光游第一站,去除“战斗/逃跑”选项部分   
  588.     # パーティコマンドウィンドウを無効化
  589. #    @party_command_window.active = false
  590. #    @party_command_window.visible = false
  591. #------------------------------------------------------------------------------
  592.     # アクターコマンドウィンドウを無効化
  593.     @actor_command_window.active = false
  594.     @actor_command_window.visible = false
  595.     if @skill_window != nil
  596.       # スキルウィンドウを解放
  597.       @skill_window.dispose
  598.       @skill_window = nil
  599.     end
  600.     if @item_window != nil
  601.       # アイテムウィンドウを解放
  602.       @item_window.dispose
  603.       @item_window = nil
  604.     end
  605.     # ヘルプウィンドウを隠す
  606.     @help_window.visible = false
  607.     # ループ
  608.     for enemy in $game_troop.enemies
  609.       # エネミーが隠れ状態でない場合
  610.       unless enemy.hidden
  611.         # 獲得 EXP、ゴールドを追加
  612.         exp += enemy.exp
  613.         gold += enemy.gold
  614.         # トレジャー出現判定
  615.         if rand(100) < enemy.treasure_prob
  616.           if enemy.item_id > 0
  617.             treasures.push($data_items[enemy.item_id])
  618.           end
  619.           if enemy.weapon_id > 0
  620.             treasures.push($data_weapons[enemy.weapon_id])
  621.           end
  622.           if enemy.armor_id > 0
  623.             treasures.push($data_armors[enemy.armor_id])
  624.           end
  625.         end
  626.       end
  627.     end
  628.     # トレジャーの数を 6 個までに限定
  629.     treasures = treasures[0..5]
  630.     # EXP 獲得
  631.     for i in 0...$game_party.actors.size
  632.       actor = $game_party.actors[i]
  633.       if actor.cant_get_exp? == false
  634.         last_level = actor.level
  635.         actor.exp += exp
  636.         if actor.level > last_level
  637.           @status_window.level_up(i)
  638.           actor.damage[[actor, -1]] = "Level up!"
  639.           actor.up_level = actor.level - last_level
  640.         end
  641.       end
  642.     end
  643.     # ゴールド獲得
  644.     $game_party.gain_gold(gold)
  645.     # トレジャー獲得
  646.     for item in treasures
  647.       case item
  648.       when RPG::Item
  649.         $game_party.gain_item(item.id, 1)
  650.       when RPG::Weapon
  651.         $game_party.gain_weapon(item.id, 1)
  652.       when RPG::Armor
  653.         $game_party.gain_armor(item.id, 1)
  654.       end
  655.     end
  656.     # バトルリザルトウィンドウを作成
  657.     @result_window = Window_BattleResult.new(exp, gold, treasures)
  658.     # ウェイトカウントを設定
  659.     @phase5_wait_count = 100
  660.   end
  661.   #--------------------------------------------------------------------------
  662.   # ● フレーム更新 (アフターバトルフェーズ)
  663.   #--------------------------------------------------------------------------
  664.   def update_phase5
  665.     # ウェイトカウントが 0 より大きい場合
  666.     if @phase5_wait_count > 0
  667.       # ウェイトカウントを減らす
  668.       @phase5_wait_count -= 1
  669.       # ウェイトカウントが 0 になった場合
  670.       if @phase5_wait_count == 0
  671.         # リザルトウィンドウを表示
  672.         @result_window.visible = true
  673.         # メインフェーズフラグをクリア
  674.         $game_temp.battle_main_phase = false
  675.         # ステータスウィンドウをリフレッシュ
  676.         @status_window.refresh
  677.         for actor in $game_party.actors
  678.           if actor.damage.include?([actor, 0])
  679.             @phase5_wait_count = 20
  680.             actor.damage_pop[[actor, 0]] = true
  681.           end
  682.           if actor.damage.include?([actor, -1])
  683.             @phase5_wait_count = 20
  684.             actor.damage_pop[[actor, -1]] = true
  685.             for level in actor.level - actor.up_level + 1..actor.level
  686.               for skill in $data_classes[actor.class_id].learnings
  687.                 if level == skill.level and not actor.skill_learn?(skill.id)
  688.                   actor.damage[[actor, 0]] = "New Skill!"
  689.                   break
  690.                 end
  691.               end
  692.             end
  693.           end
  694.         end
  695.       end
  696.       return
  697.     end
  698.     # C ボタンが押された場合
  699.     if Input.trigger?(Input::C)
  700.       # バトル終了
  701.       battle_end(0)
  702.     end
  703.   end

  704. #==============================================================================
  705. # ■ Scene_Battle (分割定義 3)
  706. #------------------------------------------------------------------------------
  707. #  バトル画面の処理を行うクラスです。
  708. #==============================================================================

  709.   #--------------------------------------------------------------------------
  710.   # ● アクターコマンドフェーズ開始
  711.   #--------------------------------------------------------------------------
  712.   def start_phase3
  713.     if victory?
  714.       return
  715.     end
  716.     # メインフェーズフラグをクリア
  717.     $game_temp.battle_main_phase = false
  718.     @command_a = true
  719.     @active_actor = @command[0]
  720.     cnt = 0
  721.     for actor in $game_party.actors
  722.       if actor == @active_actor
  723.         @actor_index = cnt
  724.       end
  725.       cnt += 1
  726.     end
  727.     @active_actor.blink = true
  728.     unless @active_actor.inputable?
  729.       @active_actor.current_action.clear
  730.       phase3_next_actor
  731.       return
  732.     end
  733.     phase3_setup_command_window
  734.     # カメラの設定
  735.     @camera = "command"
  736.     plus = ($game_party.actors.size - 1) / 2.0 - @actor_index
  737.     y = [(plus.abs - 1.5) * 10 , 0].min
  738.     @spriteset.screen_target(plus * 50, y, 1.0 + y * 0.002)
  739.   end
  740.   #--------------------------------------------------------------------------
  741.   # ● アクターのコマンド入力終了
  742.   #--------------------------------------------------------------------------
  743.   def phase3_next_actor
  744.     @command.shift
  745.     @command_a = false
  746.     # メインフェーズフラグをセット
  747.     $game_temp.battle_main_phase = true
  748.     # アクターコマンドウィンドウを無効化
  749.     @actor_command_window.active = false
  750.     @actor_command_window.visible = false
  751.     # アクターの明滅エフェクト OFF
  752.     if @active_actor != nil
  753.       @active_actor.blink = false
  754.     end
  755.     action_start(@active_actor)
  756.     # カメラを元に戻す
  757.     if @camera == "command"
  758.       @spriteset.screen_target(0, 0, 1)
  759.     end
  760.     return
  761.   end
  762.   #--------------------------------------------------------------------------
  763.   # ● アクターコマンドウィンドウのセットアップ
  764.   #--------------------------------------------------------------------------
  765.   def phase3_setup_command_window
  766. #------------------------------------------------------------------------------
  767. #RTAB观光游第一站,去除“战斗/逃跑”选项部分   
  768.     # パーティコマンドウィンドウを無効化
  769. #    @party_command_window.active = false
  770. #    @party_command_window.visible = false
  771. #------------------------------------------------------------------------------  
  772.     # アクターコマンドウィンドウを有効化
  773.     @actor_command_window.active = true
  774.     @actor_command_window.visible = true
  775.     # アクターコマンドウィンドウの位置を設定
  776.     @actor_command_window.x = @actor_index * 160 +
  777.                               (4 - $game_party.actors.size) * 80
  778.     # インデックスを 0 に設定
  779.     @actor_command_window.index = 0
  780.   end
  781.   #--------------------------------------------------------------------------
  782.   # ● エネミーアクション作成
  783.   #--------------------------------------------------------------------------
  784.   def enemy_action(number)
  785.     enemy = $game_troop.enemies[number]
  786.     unless enemy.current_action.forcing
  787.       enemy.make_action
  788.     end
  789.     action_start(enemy)
  790.   end
  791.   #--------------------------------------------------------------------------
  792.   # ● フレーム更新 (アクターコマンドフェーズ)
  793.   #--------------------------------------------------------------------------
  794.   def update_phase3
  795.     if victory? and @command_a
  796.       command_delete
  797.       @command.push(@active_actor)
  798.       return
  799.     end
  800.     # エネミーアローが有効の場合
  801.     if @enemy_arrow != nil
  802.       update_phase3_enemy_select
  803.     # アクターアローが有効の場合
  804.     elsif @actor_arrow != nil
  805.       update_phase3_actor_select
  806.     # スキルウィンドウが有効の場合
  807.     elsif @skill_window != nil
  808.       update_phase3_skill_select
  809.     # アイテムウィンドウが有効の場合
  810.     elsif @item_window != nil
  811.       update_phase3_item_select
  812. #=========================================================================      
  813.       # 修改by:lim
  814.       
  815.     #------------------------------------------------------------------------

  816.     elsif @actor_window != nil
  817.       
  818.       update_phase3_character_select
  819. #=======================================================================      
  820.     # アクターコマンドウィンドウが有効の場合
  821.     elsif @actor_command_window.active
  822.       update_phase3_basic_command
  823.     end
  824.   end
  825.   #--------------------------------------------------------------------------
  826.   # ● フレーム更新 (アクターコマンドフェーズ : 基本コマンド)
  827.   #--------------------------------------------------------------------------
  828.   def update_phase3_basic_command
  829.     unless @active_actor.inputable?
  830.       @active_actor.current_action.clear
  831.       phase3_next_actor
  832.       return
  833.     end
  834. #--------------------------------------------------------------------------
  835. #RTAB观光游第一站,去除“战斗/逃跑”选项部分
  836. # B ボタンが押された場合
  837. #   if Input.trigger?(Input::B) and @party == false
  838.       # キャンセル SE を演奏
  839. #     $game_system.se_play($data_system.cancel_se)
  840. #     @party = true
  841. #   end
  842. #   if @party == true and
  843. #       ((@action > 0 and @action_battlers.empty?) or (@action == 0 and
  844. #       (@action_battlers.empty? or @action_battlers[0].phase == 1)))
  845.       # パーティコマンドフェーズへ
  846. #     start_phase2
  847. #     return
  848. #   end
  849. #==============================================================================
  850. #RTAB观光游第二站,增加战斗快捷键ASD                      这段是官方增加的脚本
  851. #==============================================================================
  852.     # A : SKILL
  853.     if Input.trigger?(Input::X)
  854.       # 決定 SE を演奏
  855.       $game_system.se_play($data_system.decision_se)
  856.       # スキルの選択を開始
  857.       start_skill_select
  858.       return
  859.     end
  860.     # S : 防御
  861.     if Input.trigger?(Input::Y)
  862.       # 決定 SE を演奏
  863.       $game_system.se_play($data_system.decision_se)
  864.       # アクションを設定
  865.       @active_actor.current_action.kind = 0
  866.       @active_actor.current_action.basic = 1
  867.       # 次のアクターのコマンド入力へ
  868.       phase3_next_actor
  869.       return
  870.     end
  871.     # D : ITEM
  872.     if Input.trigger?(Input::Z)
  873.       # 決定 SE を演奏
  874.       $game_system.se_play($data_system.decision_se)
  875.       # アイテムの選択を開始
  876.       start_item_select
  877.       return
  878.     end
  879. #==============================================================================
  880.     # C ボタンが押された場合
  881.     if Input.trigger?(Input::C)
  882. #------------------------------------------------------------------------------
  883. #RTAB观光游第一站,去除“战斗/逃跑”选项部分      
  884. #      @party = false
  885. #------------------------------------------------------------------------------
  886.       # アクターコマンドウィンドウのカーソル位置で分岐
  887.       case @actor_command_window.index
  888.       when 0  # 攻撃
  889. #==============================================================================
  890. #RTAB观光游第二站,增加战斗快捷键ASD                      这段是官方增加的脚本
  891. #==============================================================================        
  892.         if victory?
  893.           # ブザー SE を演奏
  894.           $game_system.se_play($data_system.buzzer_se)
  895.           return
  896.         end
  897. #==============================================================================        
  898.         # 決定 SE を演奏
  899.         $game_system.se_play($data_system.decision_se)
  900.         # エネミーの選択を開始
  901.         start_enemy_select
  902.       when 1  # スキル
  903.         # 決定 SE を演奏
  904.         $game_system.se_play($data_system.decision_se)
  905.         # スキルの選択を開始
  906.         start_skill_select
  907.       when 2  # 防御
  908.         # 決定 SE を演奏
  909.         $game_system.se_play($data_system.decision_se)
  910.         # アクションを設定
  911.         @active_actor.current_action.kind = 0
  912.         @active_actor.current_action.basic = 1
  913.         # 次のアクターのコマンド入力へ
  914.         phase3_next_actor
  915.       when 3  # アイテム
  916.         # 決定 SE を演奏
  917.         $game_system.se_play($data_system.decision_se)
  918.         # アイテムの選択を開始
  919.         start_item_select
  920.       when 4
  921.         common_event = $data_common_events[11]   #调用1号公共事件
  922.         $game_system.battle_interpreter.setup(common_event.list, 0)
  923.   #    when 6
  924. #        $game_system.se_play($data_system.decision_se)
  925. #       start_character_select
  926. #==============================================================================
  927. #RTAB观光游第三站,战斗菜单增加逃跑选项
  928. #==============================================================================
  929.       when 5 #逃跑(添加内容)
  930.         if $game_temp.battle_can_escape == false
  931.           # ブザー SE を演奏
  932.           $game_system.se_play($data_system.buzzer_se)
  933.           # 修改by:lim
  934.       
  935.       
  936.       return   
  937.        end
  938.         # 決定 SE を演奏
  939.         $game_system.se_play($data_system.decision_se)
  940.        @phase = 0
  941.         # パーティコマンドウィンドウを無効化
  942.         @actor_command_window.active = false
  943.         @actor_command_window.visible = false
  944.         $game_temp.battle_main_phase = true
  945.         if $game_temp.battle_turn == 0
  946.           update_phase2_escape
  947.          $game_temp.battle_turn = 1
  948.          for battler in $game_party.actors
  949.             battler.at -= @max / 2
  950.           end
  951.           return
  952.        end
  953.        # 決定 SE を演奏
  954.         $game_system.se_play($data_system.decision_se)
  955.         @escape = true
  956.         for battler in $game_party.actors
  957.           @command_a = false
  958.           @command.delete(battler)
  959.           @action_battlers.delete(battler)
  960.           skill_reset(battler)
  961.         end
复制代码

需要添加战斗中换装备
看下贴 注意我已经添加到=S6了=S7占时没用到
此贴于 2008-11-16 12:48:21 被版主darkten提醒,请楼主看到后对本贴做出回应。
此贴于 2008-11-21 11:27:12 被版主darkten提醒,请楼主看到后对本贴做出回应。
此贴于 2008-11-23 14:51:45 被版主darkten提醒,请楼主看到后对本贴做出回应。
版务信息:本贴由楼主自主结贴~

Lv1.梦旅人

梦石
0
星屑
50
在线时间
58 小时
注册时间
2007-8-10
帖子
284
2
 楼主| 发表于 2008-11-15 06:46:06 | 只看该作者
#===========我在这里=============
  1. class Scene_Battle
  2.   
  3.   def main
  4.     # 初始化战斗用的各种暂时数据
  5.     $game_temp.in_battle = true
  6.     $game_temp.battle_turn = 0
  7.     $game_temp.battle_event_flags.clear
  8.     $game_temp.battle_abort = false
  9.     $game_temp.battle_main_phase = false
  10.     $game_temp.battleback_name = $game_map.battleback_name
  11.     $game_temp.forcing_battler = nil
  12.     # 初始化战斗用事件解释器
  13.     $game_system.battle_interpreter.setup(nil, 0)
  14.     # 准备队伍
  15.     @troop_id = $game_temp.battle_troop_id
  16.     $game_troop.setup(@troop_id)
  17.     # 生成角色命令窗口
  18.     s1 = $data_system.words.attack
  19.     s2 = $data_system.words.skill
  20.     s3 = $data_system.words.guard
  21.     s4 = $data_system.words.item
  22.     #kk开始
  23.     s5 = "变更武器"
  24.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4 , s5])
  25.     @actor_command_window.y = 128
  26.     #kk结束
  27.     @actor_command_window.back_opacity = 160
  28.     @actor_command_window.active = false
  29.     @actor_command_window.visible = false
  30.     # 生成其它窗口
  31.     @party_command_window = Window_PartyCommand.new
  32.     @help_window = Window_Help.new
  33.     @help_window.back_opacity = 160
  34.     @help_window.visible = false
  35.     @status_window = Window_BattleStatus.new
  36.     @message_window = Window_Message.new
  37.     # 生成活动块
  38.     @spriteset = Spriteset_Battle.new
  39.     # 初始化等待计数
  40.     @wait_count = 0
  41.     # 执行过渡
  42.     if $data_system.battle_transition == ""
  43.       Graphics.transition(20)
  44.     else
  45.       Graphics.transition(40, "Graphics/Transitions/" +
  46.         $data_system.battle_transition)
  47.     end
  48.     # 开始自由战斗回合
  49.     start_phase1
  50.     # 主循环
  51.     loop do
  52.       # 刷新游戏画面
  53.       Graphics.update
  54.       # 刷新输入信息
  55.       Input.update
  56.       # 刷新画面
  57.       update
  58.       # 如果画面切换的话就中断循环
  59.       if $scene != self
  60.         break
  61.       end
  62.     end
  63.     # 刷新地图
  64.     $game_map.refresh
  65.     # 准备过渡
  66.     Graphics.freeze
  67.     # 释放窗口
  68.     @actor_command_window.dispose
  69.     @party_command_window.dispose
  70.     @help_window.dispose
  71.     @status_window.dispose
  72.     @message_window.dispose
  73.     if @skill_window != nil
  74.       @skill_window.dispose
  75.     end
  76.     if @item_window != nil
  77.       @item_window.dispose
  78.     end
  79.     if @result_window != nil
  80.       @result_window.dispose
  81.     end
  82.     # 释放活动块
  83.     @spriteset.dispose
  84.     # 标题画面切换中的情况
  85.     if $scene.is_a?(Scene_Title)
  86.       # 淡入淡出画面
  87.       Graphics.transition
  88.       Graphics.freeze
  89.     end
  90.     # 战斗测试或者游戏结束以外的画面切换中的情况
  91.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  92.       $scene = nil
  93.     end
  94.   end
  95.   
  96.   
  97.    def update_phase3_basic_command
  98.     # 按下 B 键的情况下
  99.     if Input.trigger?(Input::B)
  100.       # 演奏取消 SE
  101.       $game_system.se_play($data_system.cancel_se)
  102.       # 转向前一个角色的指令输入
  103.       phase3_prior_actor
  104.       return
  105.     end
  106.     # 按下 C 键的情况下
  107.     if Input.trigger?(Input::C)
  108.       # 角色指令窗口光标位置分之
  109.       case @actor_command_window.index
  110.       when 0  # 攻击
  111.         # 演奏确定 SE
  112.         $game_system.se_play($data_system.decision_se)
  113.         # 设置行动
  114.         @active_battler.current_action.kind = 0
  115.         @active_battler.current_action.basic = 0
  116.         # 开始选择敌人
  117.         start_enemy_select
  118.       when 1  # 特技
  119.         # 演奏确定 SE
  120.         $game_system.se_play($data_system.decision_se)
  121.         # 设置行动
  122.         @active_battler.current_action.kind = 1
  123.         # 开始选择特技
  124.         start_skill_select
  125.       when 2  # 防御
  126.         # 演奏确定 SE
  127.         $game_system.se_play($data_system.decision_se)
  128.         # 设置行动
  129.         @active_battler.current_action.kind = 0
  130.         @active_battler.current_action.basic = 1
  131.         # 转向下一位角色的指令输入
  132.         phase3_next_actor
  133.       when 3  # 物品
  134.         # 演奏确定 SE
  135.         $game_system.se_play($data_system.decision_se)
  136.         # 设置行动
  137.         @active_battler.current_action.kind = 2
  138.         # 开始选择物品
  139.         start_item_select
  140.       #kk_开始  
  141.       when 4  # 变更武器
  142.         # 演奏确定 SE
  143.         $game_system.se_play($data_system.decision_se)
  144.         # 设置行动
  145.         @active_battler.current_action.kind = 3
  146.         # 开始选择武器
  147.         start_weapon_select
  148.       #kk_结束
  149.       end
  150.       return
  151.     end
  152.   end
  153.   
  154.   #--------------------------------------------------------------------------
  155.   # ● 刷新画面 (角色命令回合)
  156.   #--------------------------------------------------------------------------
  157.   def update_phase3
  158.     # 敌人光标有效的情况下
  159.     if @enemy_arrow != nil
  160.       update_phase3_enemy_select
  161.     # 角色光标有效的情况下
  162.     elsif @actor_arrow != nil
  163.       update_phase3_actor_select
  164.     # 特技窗口有效的情况下
  165.     elsif @skill_window != nil
  166.       update_phase3_skill_select
  167.     # 物品窗口有效的情况下
  168.     elsif @item_window != nil
  169.       update_phase3_item_select
  170.     #kk开始
  171.     elsif @weapon_window != nil
  172.       update_phase3_weapon_select  
  173.     #kk结束
  174.     # 角色指令窗口有效的情况下
  175.     elsif @actor_command_window.active
  176.       update_phase3_basic_command
  177.     end
  178.   end
  179.   
  180.   #--------------------------------------------------------------------------
  181.   # ● 刷新画面 (角色命令回合 : 选择武器)
  182.   #--------------------------------------------------------------------------
  183.   def update_phase3_weapon_select
  184.     # 设置物品窗口为可视状态
  185.    # @weapon_window.visible = true
  186.       
  187.    
  188.     # 刷新物品窗口
  189.     @weapon_window.update
  190.         
  191.    
  192.     # 按下 B 键的情况下
  193.     if Input.trigger?(Input::B)
  194.       # 演奏取消 SE
  195.       $game_system.se_play($data_system.cancel_se)
  196.       # 选择物品结束
  197.       end_weapon_select
  198.       return
  199.     end
  200.     # 按下 C 键的情况下
  201.     if Input.trigger?(Input::C)
  202.       # 获取物品窗口现在选择的物品资料
  203.       @weapon = @weapon_window.item
  204.       # 演奏确定 SE
  205.       $game_system.se_play($data_system.decision_se)
  206.       item = @weapon_window.item
  207.       @active_battler.equip(0, item == nil ? 0 : item.id)
  208.       @weapon_window.refresh
  209.       @actor_window.refresh
  210.       
  211.       end
  212.       return
  213.     end

  214.   
  215.   #--------------------------------------------------------------------------
  216.   # ● 开始选择武器
  217.   #--------------------------------------------------------------------------
  218.   def start_weapon_select
  219.     # 生成特技窗口
  220.     @weapon_window = Window_EquipItemk.new(@active_battler,0)
  221.     @actor_window =  Window_EquipLeftk.new(@active_battler)
  222.     # 关联帮助窗口
  223.     @weapon_window.help_window = @help_window
  224.     # 无效化角色指令窗口
  225.     @actor_command_window.active = false
  226.     @actor_command_window.visible = false
  227.   end   
  228.   
  229.    def end_weapon_select
  230.     # 释放物品窗口
  231.     @weapon_window.dispose
  232.     @weapon_window = nil
  233.     @actor_window.dispose
  234.     @actor_window = nil
  235.     # 隐藏帮助窗口
  236.     @help_window.visible = false
  237.     # 有效化角色指令窗口
  238.     @actor_command_window.active = true
  239.     @actor_command_window.visible = true
  240.   end
  241.   
  242.   
  243.   
  244.   
  245. end




  246. class Window_EquipItemk < Window_Selectable
  247.   #--------------------------------------------------------------------------
  248.   # ● 初始化对像
  249.   #     actor      : 角色
  250.   #     equip_type : 装备部位 (0~3)
  251.   #--------------------------------------------------------------------------
  252.   def initialize(actor, equip_type)
  253.     super(320, 64, 320, 256)
  254.     @actor = actor
  255.     @equip_type = equip_type
  256.     @column_max = 1
  257.     self.opacity = 160
  258.     self.index = 0
  259.     refresh
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● 获取物品
  263.   #--------------------------------------------------------------------------
  264.   def item
  265.     return @data[self.index]
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ● 刷新
  269.   #--------------------------------------------------------------------------
  270.   def refresh
  271.     if self.contents != nil
  272.       self.contents.dispose
  273.       self.contents = nil
  274.     end
  275.     @data = []
  276.     # 添加可以装备的武器
  277.     if @equip_type == 0
  278.       weapon_set = $data_classes[@actor.class_id].weapon_set
  279.       for i in 1...$data_weapons.size
  280.         if $game_party.weapon_number(i) > 0 and weapon_set.include?(i)
  281.           @data.push($data_weapons[i])
  282.         end
  283.       end
  284.     end
  285.     # 添加可以装备的防具
  286.     if @equip_type != 0
  287.       armor_set = $data_classes[@actor.class_id].armor_set
  288.       for i in 1...$data_armors.size
  289.         if $game_party.armor_number(i) > 0 and armor_set.include?(i)
  290.           if $data_armors[i].kind == @equip_type-1
  291.             @data.push($data_armors[i])
  292.           end
  293.         end
  294.       end
  295.     end
  296.    
  297.     # 添加空白
  298.     @data.push(nil)
  299.     # 生成位图、描绘全部项目
  300.     @item_max = @data.size
  301.     self.contents = Bitmap.new(width - 32, row_max * 32)
  302.     for i in 0...@item_max-1
  303.       draw_item(i)
  304.     end
  305.   end
  306.   #--------------------------------------------------------------------------
  307.   # ● 项目的描绘
  308.   #     index : 项目符号
  309.   #--------------------------------------------------------------------------
  310.   def draw_item(index)
  311.     item = @data[index]
  312.     x = 4
  313.     y = index * 32
  314.     case item
  315.     when RPG::Weapon
  316.       number = $game_party.weapon_number(item.id)
  317.     when RPG::Armor
  318.       number = $game_party.armor_number(item.id)
  319.     end
  320.     bitmap = RPG::Cache.icon(item.icon_name)
  321.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
  322.     self.contents.font.color = normal_color
  323.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  324.     self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  325.     self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ● 刷新帮助文本
  329.   #--------------------------------------------------------------------------
  330.   def update_help
  331.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  332.   end
  333. end



  334. class Window_EquipLeftk < Window_Base
  335.   #--------------------------------------------------------------------------
  336.   # ● 初始化对像
  337.   #     actor : 角色
  338.   #--------------------------------------------------------------------------
  339.   def initialize(actor)
  340.     super(0, 64, 320, 256)
  341.     self.contents = Bitmap.new(width - 32, height - 32)
  342.     @actor = actor
  343.     self.opacity = 160
  344.     refresh
  345.   end
  346.   #--------------------------------------------------------------------------
  347.   # ● 刷新
  348.   #--------------------------------------------------------------------------
  349.   def refresh
  350.     self.contents.clear
  351.     draw_actor_name(@actor, 4, 0)
  352.     draw_actor_level(@actor, 4, 32)
  353.     draw_actor_parameter(@actor, 4, 64, 0)
  354.     draw_actor_parameter(@actor, 4, 96, 1)
  355.     draw_actor_parameter(@actor, 4, 128, 2)
  356.    
  357.    
  358.     draw_item_name($data_weapons[@actor.weapon_id], 132, 160)
  359.     self.contents.font.color = system_color
  360.     self.contents.draw_text(4, 160, 128, 32, "目前武器")
  361.     self.contents.draw_text(4, 192, 128, 32, "武器属性")
  362.     self.contents.font.color = Color.new(0,255,0)
  363.     element = ""
  364.     if @actor.weapon_id == 0
  365.       element = "无"
  366.     else
  367.     if $data_weapons[@actor.weapon_id].element_set[1] == nil
  368.       element = "无"
  369.     else
  370.     for i in 1...$data_weapons[@actor.weapon_id].element_set.size
  371.       element += $data_system.elements[$data_weapons[@actor.weapon_id].element_set[i]] + " "
  372.     end  
  373.     end
  374.     end  
  375.     self.contents.draw_text(132, 192, 128, 32, element)
  376.    
  377.     if @new_atk != nil
  378.       self.contents.font.color = system_color
  379.       self.contents.draw_text(160, 64, 40, 32, "→", 1)
  380.       self.contents.font.color = normal_color
  381.       self.contents.draw_text(200, 64, 36, 32, @new_atk.to_s, 2)
  382.     end
  383.     if @new_pdef != nil
  384.       self.contents.font.color = system_color
  385.       self.contents.draw_text(160, 96, 40, 32, "→", 1)
  386.       self.contents.font.color = normal_color
  387.       self.contents.draw_text(200, 96, 36, 32, @new_pdef.to_s, 2)
  388.     end
  389.     if @new_mdef != nil
  390.       self.contents.font.color = system_color
  391.       self.contents.draw_text(160, 128, 40, 32, "→", 1)
  392.       self.contents.font.color = normal_color
  393.       self.contents.draw_text(200, 128, 36, 32, @new_mdef.to_s, 2)
  394.     end
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ● 变更装备后的能力值设置
  398.   #     new_atk  : 变更装备后的攻击力
  399.   #     new_pdef : 变更装备后的物理防御
  400.   #     new_mdef : 变更装备后的魔法防御
  401.   #--------------------------------------------------------------------------
  402.   def set_new_parameters(new_atk, new_pdef, new_mdef)
  403.     if @new_atk != new_atk or @new_pdef != new_pdef or @new_mdef != new_mdef
  404.       @new_atk = new_atk
  405.       @new_pdef = new_pdef
  406.       @new_mdef = new_mdef
  407.       refresh
  408.     end
  409.   end
  410. end

复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
105
在线时间
393 小时
注册时间
2008-11-7
帖子
353
3
发表于 2008-11-15 12:59:41 | 只看该作者
  1. class Scene_Battle
  2.   
  3.   def main
  4.     # 初始化战斗用的各种暂时数据
  5.     $game_temp.in_battle = true
  6.     $game_temp.battle_turn = 0
  7.     $game_temp.battle_event_flags.clear
  8.     $game_temp.battle_abort = false
  9.     $game_temp.battle_main_phase = false
  10.     $game_temp.battleback_name = $game_map.battleback_name
  11.     $game_temp.forcing_battler = nil
  12.     # 初始化战斗用事件解释器
  13.     $game_system.battle_interpreter.setup(nil, 0)
  14.     # 准备队伍
  15.     @troop_id = $game_temp.battle_troop_id
  16.     $game_troop.setup(@troop_id)
  17.     # 生成角色命令窗口
  18.     s1 = $data_system.words.attack
  19.     s2 = $data_system.words.skill
  20.     s3 = $data_system.words.guard
  21.     s4 = $data_system.words.item
  22.     #kk开始
  23.     s5 = "变更武器"
  24.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4 , s5])
  25.     @actor_command_window.y = 128
  26.     #kk结束
  27.     @actor_command_window.back_opacity = 160
  28.     @actor_command_window.active = false
  29.     @actor_command_window.visible = false
  30.     # 生成其它窗口
  31.     @party_command_window = Window_PartyCommand.new
  32.     @help_window = Window_Help.new
  33.     @help_window.back_opacity = 160
  34.     @help_window.visible = false
  35.     @status_window = Window_BattleStatus.new
  36.     @message_window = Window_Message.new
  37.     # 生成活动块
  38.     @spriteset = Spriteset_Battle.new
  39.     # 初始化等待计数
  40.     @wait_count = 0
  41.     # 执行过渡
  42.     if $data_system.battle_transition == ""
  43.       Graphics.transition(20)
  44.     else
  45.       Graphics.transition(40, "Graphics/Transitions/" +
  46.         $data_system.battle_transition)
  47.     end
  48.     # 开始自由战斗回合
  49.     start_phase1
  50.     # 主循环
  51.     loop do
  52.       # 刷新游戏画面
  53.       Graphics.update
  54.       # 刷新输入信息
  55.       Input.update
  56.       # 刷新画面
  57.       update
  58.       # 如果画面切换的话就中断循环
  59.       if $scene != self
  60.         break
  61.       end
  62.     end
  63.     # 刷新地图
  64.     $game_map.refresh
  65.     # 准备过渡
  66.     Graphics.freeze
  67.     # 释放窗口
  68.     @actor_command_window.dispose
  69.     @party_command_window.dispose
  70.     @help_window.dispose
  71.     @status_window.dispose
  72.     @message_window.dispose
  73.     if @skill_window != nil
  74.       @skill_window.dispose
  75.     end
  76.     if @item_window != nil
  77.       @item_window.dispose
  78.     end
  79.     if @result_window != nil
  80.       @result_window.dispose
  81.     end
  82.     # 释放活动块
  83.     @spriteset.dispose
  84.     # 标题画面切换中的情况
  85.     if $scene.is_a?(Scene_Title)
  86.       # 淡入淡出画面
  87.       Graphics.transition
  88.       Graphics.freeze
  89.     end
  90.     # 战斗测试或者游戏结束以外的画面切换中的情况
  91.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  92.       $scene = nil
  93.     end
  94.   end
  95.   
  96.   
  97.    def update_phase3_basic_command
  98.     # 按下 B 键的情况下
  99.     if Input.trigger?(Input::B)
  100.       # 演奏取消 SE
  101.       $game_system.se_play($data_system.cancel_se)
  102.       # 转向前一个角色的指令输入
  103.       phase3_prior_actor
  104.       return
  105.     end
  106.     # 按下 C 键的情况下
  107.     if Input.trigger?(Input::C)
  108.       # 角色指令窗口光标位置分之
  109.       case @actor_command_window.index
  110.       when 0  # 攻击
  111.         # 演奏确定 SE
  112.         $game_system.se_play($data_system.decision_se)
  113.         # 设置行动
  114.         @active_battler.current_action.kind = 0
  115.         @active_battler.current_action.basic = 0
  116.         # 开始选择敌人
  117.         start_enemy_select
  118.       when 1  # 特技
  119.         # 演奏确定 SE
  120.         $game_system.se_play($data_system.decision_se)
  121.         # 设置行动
  122.         @active_battler.current_action.kind = 1
  123.         # 开始选择特技
  124.         start_skill_select
  125.       when 2  # 防御
  126.         # 演奏确定 SE
  127.         $game_system.se_play($data_system.decision_se)
  128.         # 设置行动
  129.         @active_battler.current_action.kind = 0
  130.         @active_battler.current_action.basic = 1
  131.         # 转向下一位角色的指令输入
  132.         phase3_next_actor
  133.       when 3  # 物品
  134.         # 演奏确定 SE
  135.         $game_system.se_play($data_system.decision_se)
  136.         # 设置行动
  137.         @active_battler.current_action.kind = 2
  138.         # 开始选择物品
  139.         start_item_select
  140.       #kk_开始  
  141.       when 4  # 变更武器
  142.         # 演奏确定 SE
  143.         $game_system.se_play($data_system.decision_se)
  144.         # 设置行动
  145.         @active_battler.current_action.kind = 3
  146.         # 开始选择武器
  147.         start_weapon_select
  148.       #kk_结束
  149.       end
  150.       return
  151.     end
  152.   end
  153.   
  154.   #--------------------------------------------------------------------------
  155.   # ● 刷新画面 (角色命令回合)
  156.   #--------------------------------------------------------------------------
  157.   def update_phase3
  158.     # 敌人光标有效的情况下
  159.     if @enemy_arrow != nil
  160.       update_phase3_enemy_select
  161.     # 角色光标有效的情况下
  162.     elsif @actor_arrow != nil
  163.       update_phase3_actor_select
  164.     # 特技窗口有效的情况下
  165.     elsif @skill_window != nil
  166.       update_phase3_skill_select
  167.     # 物品窗口有效的情况下
  168.     elsif @item_window != nil
  169.       update_phase3_item_select
  170.     #kk开始
  171.     elsif @weapon_window != nil
  172.       update_phase3_weapon_select  
  173.     #kk结束
  174.     # 角色指令窗口有效的情况下
  175.     elsif @actor_command_window.active
  176.       update_phase3_basic_command
  177.     end
  178.   end
  179.   
  180.   #--------------------------------------------------------------------------
  181.   # ● 刷新画面 (角色命令回合 : 选择武器)
  182.   #--------------------------------------------------------------------------
  183.   def update_phase3_weapon_select
  184.     # 设置物品窗口为可视状态
  185.    # @weapon_window.visible = true
  186.       
  187.    
  188.     # 刷新物品窗口
  189.     @weapon_window.update
  190.         
  191.    
  192.     # 按下 B 键的情况下
  193.     if Input.trigger?(Input::B)
  194.       # 演奏取消 SE
  195.       $game_system.se_play($data_system.cancel_se)
  196.       # 选择物品结束
  197.       end_weapon_select
  198.       return
  199.     end
  200.     # 按下 C 键的情况下
  201.     if Input.trigger?(Input::C)
  202.       # 获取物品窗口现在选择的物品资料
  203.       @weapon = @weapon_window.item
  204.       # 演奏确定 SE
  205.       $game_system.se_play($data_system.decision_se)
  206.       item = @weapon_window.item
  207.       @active_battler.equip(0, item == nil ? 0 : item.id)
  208.       @weapon_window.refresh
  209.       @actor_window.refresh
  210.       
  211.       end
  212.       return
  213.     end

  214.   
  215.   #--------------------------------------------------------------------------
  216.   # ● 开始选择武器
  217.   #--------------------------------------------------------------------------
  218.   def start_weapon_select
  219.     # 生成特技窗口
  220.     @weapon_window = Window_EquipItemk.new(@active_battler,0)
  221.     @actor_window =  Window_EquipLeftk.new(@active_battler)
  222.     # 关联帮助窗口
  223.     @weapon_window.help_window = @help_window
  224.     # 无效化角色指令窗口
  225.     @actor_command_window.active = false
  226.     @actor_command_window.visible = false
  227.   end   
  228.   
  229.    def end_weapon_select
  230.     # 释放物品窗口
  231.     @weapon_window.dispose
  232.     @weapon_window = nil
  233.     @actor_window.dispose
  234.     @actor_window = nil
  235.     # 隐藏帮助窗口
  236.     @help_window.visible = false
  237.     # 有效化角色指令窗口
  238.     @actor_command_window.active = true
  239.     @actor_command_window.visible = true
  240.   end
  241.   
  242.   
  243.   
  244.   
  245. end




  246. class Window_EquipItemk < Window_Selectable
  247.   #--------------------------------------------------------------------------
  248.   # ● 初始化对像
  249.   #     actor      : 角色
  250.   #     equip_type : 装备部位 (0~3)
  251.   #--------------------------------------------------------------------------
  252.   def initialize(actor, equip_type)
  253.     super(320, 64, 320, 256)
  254.     @actor = actor
  255.     @equip_type = equip_type
  256.     @column_max = 1
  257.     self.opacity = 160
  258.     self.index = 0
  259.     refresh
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● 获取物品
  263.   #--------------------------------------------------------------------------
  264.   def item
  265.     return @data[self.index]
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ● 刷新
  269.   #--------------------------------------------------------------------------
  270.   def refresh
  271.     if self.contents != nil
  272.       self.contents.dispose
  273.       self.contents = nil
  274.     end
  275.     @data = []
  276.     # 添加可以装备的武器
  277.     if @equip_type == 0
  278.       weapon_set = $data_classes[@actor.class_id].weapon_set
  279.       for i in 1...$data_weapons.size
  280.         if $game_party.weapon_number(i) > 0 and weapon_set.include?(i)
  281.           @data.push($data_weapons[i])
  282.         end
  283.       end
  284.     end
  285.     # 添加可以装备的防具
  286.     if @equip_type != 0
  287.       armor_set = $data_classes[@actor.class_id].armor_set
  288.       for i in 1...$data_armors.size
  289.         if $game_party.armor_number(i) > 0 and armor_set.include?(i)
  290.           if $data_armors[i].kind == @equip_type-1
  291.             @data.push($data_armors[i])
  292.           end
  293.         end
  294.       end
  295.     end
  296.    
  297.     # 添加空白
  298.     @data.push(nil)
  299.     # 生成位图、描绘全部项目
  300.     @item_max = @data.size
  301.     self.contents = Bitmap.new(width - 32, row_max * 32)
  302.     for i in 0...@item_max-1
  303.       draw_item(i)
  304.     end
  305.   end
  306.   #--------------------------------------------------------------------------
  307.   # ● 项目的描绘
  308.   #     index : 项目符号
  309.   #--------------------------------------------------------------------------
  310.   def draw_item(index)
  311.     item = @data[index]
  312.     x = 4
  313.     y = index * 32
  314.     case item
  315.     when RPG::Weapon
  316.       number = $game_party.weapon_number(item.id)
  317.     when RPG::Armor
  318.       number = $game_party.armor_number(item.id)
  319.     end
  320.     bitmap = RPG::Cache.icon(item.icon_name)
  321.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
  322.     self.contents.font.color = normal_color
  323.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  324.     self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  325.     self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ● 刷新帮助文本
  329.   #--------------------------------------------------------------------------
  330.   def update_help
  331.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  332.   end
  333. end



  334. class Window_EquipLeftk < Window_Base
  335.   #--------------------------------------------------------------------------
  336.   # ● 初始化对像
  337.   #     actor : 角色
  338.   #--------------------------------------------------------------------------
  339.   def initialize(actor)
  340.     super(0, 64, 320, 256)
  341.     self.contents = Bitmap.new(width - 32, height - 32)
  342.     @actor = actor
  343.     self.opacity = 160
  344.     refresh
  345.   end
  346.   #--------------------------------------------------------------------------
  347.   # ● 刷新
  348.   #--------------------------------------------------------------------------
  349.   def refresh
  350.     self.contents.clear
  351.     draw_actor_name(@actor, 4, 0)
  352.     draw_actor_level(@actor, 4, 32)
  353.     draw_actor_parameter(@actor, 4, 64, 0)
  354.     draw_actor_parameter(@actor, 4, 96, 1)
  355.     draw_actor_parameter(@actor, 4, 128, 2)
  356.    
  357.    
  358.     draw_item_name($data_weapons[@actor.weapon_id], 132, 160)
  359.     self.contents.font.color = system_color
  360.     self.contents.draw_text(4, 160, 128, 32, "目前武器")
  361.     self.contents.draw_text(4, 192, 128, 32, "武器属性")
  362.     self.contents.font.color = Color.new(0,255,0)
  363.     element = ""
  364.     if @actor.weapon_id == 0
  365.       element = "无"
  366.     else
  367.     if $data_weapons[@actor.weapon_id].element_set[1] == nil
  368.       element = "无"
  369.     else
  370.     for i in 1...$data_weapons[@actor.weapon_id].element_set.size
  371.       element += $data_system.elements[$data_weapons[@actor.weapon_id].element_set[i]] + " "
  372.     end  
  373.     end
  374.     end  
  375.     self.contents.draw_text(132, 192, 128, 32, element)
  376.    
  377.     if @new_atk != nil
  378.       self.contents.font.color = system_color
  379.       self.contents.draw_text(160, 64, 40, 32, "→", 1)
  380.       self.contents.font.color = normal_color
  381.       self.contents.draw_text(200, 64, 36, 32, @new_atk.to_s, 2)
  382.     end
  383.     if @new_pdef != nil
  384.       self.contents.font.color = system_color
  385.       self.contents.draw_text(160, 96, 40, 32, "→", 1)
  386.       self.contents.font.color = normal_color
  387.       self.contents.draw_text(200, 96, 36, 32, @new_pdef.to_s, 2)
  388.     end
  389.     if @new_mdef != nil
  390.       self.contents.font.color = system_color
  391.       self.contents.draw_text(160, 128, 40, 32, "→", 1)
  392.       self.contents.font.color = normal_color
  393.       self.contents.draw_text(200, 128, 36, 32, @new_mdef.to_s, 2)
  394.     end
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ● 变更装备后的能力值设置
  398.   #     new_atk  : 变更装备后的攻击力
  399.   #     new_pdef : 变更装备后的物理防御
  400.   #     new_mdef : 变更装备后的魔法防御
  401.   #--------------------------------------------------------------------------
  402.   def set_new_parameters(new_atk, new_pdef, new_mdef)
  403.     if @new_atk != new_atk or @new_pdef != new_pdef or @new_mdef != new_mdef
  404.       @new_atk = new_atk
  405.       @new_pdef = new_pdef
  406.       @new_mdef = new_mdef
  407.       refresh
  408.     end
  409.   end
  410. end
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-10-6
帖子
40
4
发表于 2008-11-22 19:18:31 | 只看该作者
你看我的签名那游戏吧。。。我的那个游戏就能换。。。宠物的装备也能换
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
【最新】【小东东之黑暗降临】魔单(增加3转) 发布:http://bbs.joycg.cn/viewthread.php?tid=302982&extra=&page=1
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-21 08:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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