Project1

标题: 关于CP制在战斗中新加入队伍人员的判断 [打印本页]

作者: zgm1100    时间: 2011-10-20 09:02
标题: 关于CP制在战斗中新加入队伍人员的判断
  1. # ▼▲▼ XRXS65. CP制御ターンシステム ver.β ▼▲▼ built 201120

  2. # by 桜雅 在土


  3. #==============================================================================

  4. # □ カスタマイズポイント

  5. #==============================================================================

  6. module XRXS65

  7.   #

  8.   # “速度战”(数字越大更快)

  9.   #

  10.   SPEED = 1.0

  11.   #

  12.   # CP在战斗开始。固定值和占用

  13.   #

  14.   CP_PRESET_FIXNUM = 0

  15.   CP_PRESET_RATIO  = 2.0

  16.   #

  17.   # 转动控制器(零:计数使能/关闭。

  18.   #                     数値 : 该指数已主宰敌人)

  19.   #

  20.   TC = 0

  21.   #

  22.   # 数/转(如果启用TC被忽略。)

  23.   #

  24.   CPT = 40

  25.   #

  26.   # 皮肤CP

  27.   #

  28.   SKIN        = "asd"  # 窗口图形名称(Graphics/Windowskins中添加)

  29.   LINE_HEIGHT =  5        # スキンの"一行"の縦幅[単位:ピクセル]

  30.   #

  31.   # 表示位置セッティング

  32.   #

  33.   X_OFFSET = 140    # 横位置

  34.   Y_OFFSET = 467  # 縦位置
  35.   
  36.   Y_FF = 10

  37.   ALIGN    =   0    #对齐方式(CP条的位置。0:左对齐 1:中央 2:右对齐)

  38.   MAX      =   4    # 確保するサイズ[単位:~人分]

  39.   #

  40.   # アクターコマンドがポップしたときの効果音

  41.   #

  42.   COMMAND_UP_SE = "Audio/SE/046-Book01.ogg"

  43. end


  44. #==============================================================================

  45. # --- CP メーターの描画情報の取得 --- (Game_Battlerにインクルードされます)

  46. #==============================================================================

  47. module XRXS_CP

  48.   #--------------------------------------------------------------------------

  49.   # ○ 皮肤线(或使用排至皮肤)

  50.   #--------------------------------------------------------------------------

  51.   def cp_linetype

  52.     # 对于第二行使用的全部CP皮肤

  53.     return 2 if self.cp_full?

  54.     # 通常使用的皮肤的第一行

  55.     return 1

  56.   end

  57.   #--------------------------------------------------------------------------

  58.   # ○ 米卷[单位:%]

  59.   #--------------------------------------------------------------------------

  60.   def cp_lineamount

  61.     # 对于非战斗显示为0%

  62.      return 0 if self.dead?

  63.     # 要返回转换到%CP值

  64.     return 100 * self.cp / self.max_cp

  65.   end

  66. end

  67. #

  68. # 定制点为止。

  69. #------------------------------------------------------------------------------




  70. #==============================================================================

  71. # --- XRXS. CP機構 ---

  72. #==============================================================================

  73. module XRXS_CP_SYSTEM

  74.   #----------------------------------------------------------------------------

  75.   # ○ AGI的总收购

  76.   #----------------------------------------------------------------------------

  77.   def self.total_agi

  78.     total = 0

  79.     for battler in $game_party.actors + $game_troop.enemies

  80.       total += battler.agi

  81.     end

  82.     return total

  83.   end

  84. end

  85. #==============================================================================

  86. # --- 模块的功能添加到巴特勒CP---

  87. #==============================================================================

  88. module XRXS_CP

  89.   #--------------------------------------------------------------------------

  90.   # ○ 最大 CP の取得

  91.   #--------------------------------------------------------------------------

  92.   def max_cp

  93.     return 65535

  94.   end

  95.   #--------------------------------------------------------------------------

  96.   # ○ 获取和设置CP

  97.   #--------------------------------------------------------------------------

  98.   def cp

  99.     return @cp == nil ? @cp = 0 : @cp

  100.   end

  101.   def cp=(n)

  102.     @cp = [[n.to_i, 0].max, self.max_cp].min

  103.   end

  104.   #--------------------------------------------------------------------------

  105.   # ○ CP 初期設定

  106.   #--------------------------------------------------------------------------

  107.   def cp_preset

  108.     percent = self.max_cp * XRXS65::CP_PRESET_RATIO * (rand(16) + 16) * self.agi / XRXS_CP_SYSTEM.total_agi / 24

  109.     self.cp = XRXS65::CP_PRESET_FIXNUM #+ percent

  110.   end

  111.   #--------------------------------------------------------------------------

  112.   # ○ CP 计数

  113.   #--------------------------------------------------------------------------

  114.   def cp_update

  115.     self.cp += XRXS65::SPEED * 4096 * self.agi / XRXS_CP_SYSTEM.total_agi

  116.   end

  117.   #--------------------------------------------------------------------------

  118.   # ○ CP 填写?

  119.   #--------------------------------------------------------------------------

  120.   def cp_full?

  121.     return @cp == self.max_cp

  122.   end

  123. end

  124. class Game_Battler

  125.   include XRXS_CP

  126. end

  127. #==============================================================================

  128. # --- 保护功能 ---

  129. #==============================================================================

  130. class Game_Battler

  131.   #--------------------------------------------------------------------------

  132.   # ○ 国旗卫士

  133.   #--------------------------------------------------------------------------

  134.   def guarding=(n)

  135.     @guarding = n

  136.   end

  137.   #--------------------------------------------------------------------------

  138.   # ● 防御中判定 [再定義]

  139.   #--------------------------------------------------------------------------

  140.   def guarding?

  141.     return @guarding

  142.   end

  143. end

  144. #==============================================================================

  145. # --- 员的决定可以输入命令“:未经CP没有命令 ---

  146. #==============================================================================

  147. module XRXS_CP_INPUTABLE

  148.   def inputable?

  149.     return (self.cp_full? and super)

  150.   end

  151. end

  152. class Game_Actor < Game_Battler

  153.   include XRXS_CP_INPUTABLE

  154. end

  155. #==============================================================================

  156. # --- 敌人“采取行动的决定”:没有不带CP命令 ---

  157. #==============================================================================

  158. module XRXS_CP_MOVABLE

  159.   def movable?

  160.     return (self.cp_full? and super)

  161.   end

  162. end

  163. class Game_Enemy < Game_Battler

  164.   include XRXS_CP_MOVABLE

  165. end

  166. #==============================================================================

  167. # --- 计数打击CP ---

  168. #==============================================================================

  169. module XRXS_CP_Battle

  170.   #--------------------------------------------------------------------------

  171.   # ○ 初始化各方CP

  172.   #--------------------------------------------------------------------------

  173.   def cp_preset_party

  174.     for actor in $game_party.actors

  175.       actor.cp_preset

  176.     end

  177.   end

  178.   #--------------------------------------------------------------------------

  179.   # ○ 初始化所有的部队CP

  180.   #--------------------------------------------------------------------------

  181.   def cp_preset_troop

  182.     for enemy in $game_troop.enemies

  183.       enemy.cp_preset

  184.     end

  185.   end

  186.   #--------------------------------------------------------------------------

  187.   # ○ 统计了所有的CP巴特勒

  188.   #--------------------------------------------------------------------------

  189.   def cp_update

  190.     for battler in $game_party.actors + $game_troop.enemies

  191.       battler.cp_update

  192.     end

  193.   end

  194. end

  195. class Scene_Battle

  196.   include XRXS_CP_Battle

  197. end

  198. #==============================================================================

  199. # ■ Scene_Battle

  200. #==============================================================================

  201. class Scene_Battle

  202.   #--------------------------------------------------------------------------

  203.   # ● メイン処理

  204.   #--------------------------------------------------------------------------

  205.   alias xrxs65_main main

  206.   def main

  207.     # 初期化

  208.     @extra_sprites = [] if @extra_sprites == nil

  209.     # CP の初期化

  210.     cp_preset_party

  211.     # CP 创建一米

  212.     @cp_meters = CP_Meters.new

  213.     # CP 额外的电表登记精灵

  214.     @extra_sprites.push(@cp_meters)

  215.     # 呼び戻す

  216.     xrxs65_main

  217.     # メーターの解放

  218.     @cp_meters.dispose

  219.   end

  220.   #--------------------------------------------------------------------------

  221.   # ● 前战斗阶段开始

  222.   #--------------------------------------------------------------------------

  223.   alias xrxs65_start_phase1 start_phase1

  224.   def start_phase1

  225.     # 召回

  226.     xrxs65_start_phase1

  227.     #初始化的CP

  228.     cp_preset_troop

  229.     #更新的CP米

  230.     @cp_meters.refresh

  231.     # 计算指数

  232.     @cp_escape_actor_command_index = @actor_command_window.height/32 - 1

  233.   end

  234.   #--------------------------------------------------------------------------

  235.   # ● 党指挥阶段开始

  236.   #--------------------------------------------------------------------------

  237.   alias xrxs65_start_phase2 start_phase2

  238.   def start_phase2

  239.     # 召回

  240.     xrxs65_start_phase2

  241.     # 禁用党指挥窗口

  242. #    @party_command_window.active  = false

  243. #    @party_command_window.visible = false

  244.     # 强制保持第2期

  245.     @phase = 2

  246.     # 但是,如果已经有一个动作获得3

  247.     start_phase3 if anybody_movable?

  248.   end

  249.   #--------------------------------------------------------------------------

  250.   # ○ 打开系统计数CP

  251.   #--------------------------------------------------------------------------

  252.   def cp_turn_count

  253.     $game_temp.battle_turn += 1

  254.     # 搜索之战事件的所有网页

  255.     for index in 0...$data_troops[@troop_id].pages.size

  256.       # 跨度此网页转,如果

  257.       if $data_troops[@troop_id].pages[index].span == 1

  258.         # 清除hasBeenDone

  259.         $game_temp.battle_event_flags[index] = false

  260.       end

  261.     end

  262.   end

  263.   #--------------------------------------------------------------------------

  264.   # ●新帧(党的指挥阶段)。

  265.   #--------------------------------------------------------------------------

  266.   alias xrxs65_update_phase2 update_phase2

  267.   def update_phase2

  268.     # 党的命令窗口中禁用索引

  269. #    @party_command_window.index = -1

  270.     # 召回

  271.     xrxs65_update_phase2

  272.     # 例外補正

  273.     @turn_count_time = 1 if @turn_count_time == nil

  274.     # 关闭数

  275.     if @turn_count_time > 0

  276.       @turn_count_time -= 1

  277.       if @turn_count_time == 0

  278.         cp_turn_count

  279.         @turn_count_time = XRXS65::CPT if XRXS65::TC == nil

  280.       end

  281.     end

  282.     #CP帧更新

  283.     cp_update

  284.     @cp_meters.refresh

  285.     # 如果你有一个完整的巴特勒CP,回合开始

  286.     start_phase3 if anybody_movable?

  287.   end

  288.   #--------------------------------------------------------------------------

  289.   # ○ 是否有一个完整的CP巴特勒?

  290.   #--------------------------------------------------------------------------

  291.   def anybody_movable?

  292.     for battler in $game_party.actors + $game_troop.enemies

  293.       return true if battler.cp_full?

  294.     end

  295.     return false

  296.   end

  297.   #--------------------------------------------------------------------------

  298.   # ● 演员成立了一个命令窗口

  299.   #--------------------------------------------------------------------------

  300.   alias xrxs65_phase3_setup_command_window phase3_setup_command_window

  301.   def phase3_setup_command_window

  302.     # 効果音の再生

  303.     Audio.se_play(XRXS65::COMMAND_UP_SE) rescue nil

  304.     # 呼び戻す

  305.     xrxs65_phase3_setup_command_window

  306.   end

  307.   #--------------------------------------------------------------------------

  308.   # ● 帧更新(演员命令阶段:基本命令)

  309.   #--------------------------------------------------------------------------

  310.   alias xrxs_bsp1_update_phase3_basic_command update_phase3_basic_command

  311.   def update_phase3_basic_command

  312.     xrxs_bsp1_update_phase3_basic_command

  313.   end

  314.   #--------------------------------------------------------------------------

  315.   # ● 主要阶段开始

  316.   #--------------------------------------------------------------------------

  317.   alias xrxs65_start_phase4 start_phase4

  318.   def start_phase4

  319.     # 不会造成减去圈数在数人为改变

  320.     $game_temp.battle_turn -= 1

  321.     # 保存标志

  322.     save_flags = $game_temp.battle_event_flags.dup

  323.     # 召回

  324.     xrxs65_start_phase4

  325.     # 恢复的标志

  326.     $game_temp.battle_event_flags = save_flags

  327.   end

  328.   #--------------------------------------------------------------------------

  329.   # ● 行動順序作成

  330.   #--------------------------------------------------------------------------

  331.   alias xrxs65_make_action_orders make_action_orders

  332.   def make_action_orders

  333.     # 召回

  334.     xrxs65_make_action_orders

  335.     # 如果CP是从@缺少排除action_battlers

  336.     for battler in @action_battlers.dup

  337.       @action_battlers.delete(battler) unless battler.cp_full?

  338.     end

  339.   end

  340.   #--------------------------------------------------------------------------

  341.   # ● 帧更新 (第2步主要阶段:动作開始)

  342.   #--------------------------------------------------------------------------

  343.   alias xrxs65_update_phase4_step2 update_phase4_step2

  344.   def update_phase4_step2

  345.     # 守卫解除

  346.     @active_battler.guarding = false
  347.    
  348.    a =  @actor_command_window.index
  349. case a
  350.   when 0
  351.     @active_battler.cp -= 30000
  352.   when 1
  353. if skill.element_set.include?($data_system.elements.index("无CD"))
  354.     @active_battler.cp -= 30000
  355.   else
  356.     @active_battler.cp -= 65535
  357.     end
  358.   when 2
  359.     @active_battler.cp -= 30000
  360.   when 3
  361.    if item.element_set.include?($data_system.elements.index("无CD"))
  362.     @active_battler.cp -= 0
  363.   else
  364.     @active_battler.cp -= 65535
  365.     end
  366.   when 4
  367.     @active_battler.cp -= 65535   
  368.   end


  369.     # CPの消費

  370.   #  @active_battler.cp = 0

  371.     # CP 米の更新

  372.     @cp_meters.refresh

  373.     # 召回

  374.     xrxs65_update_phase4_step2

  375.     # 补偿异常

  376.     return if @active_battler == nil

  377.     # 转动控制器

  378.     if @active_battler.is_a?(Game_Enemy) and @active_battler.index == XRXS65::TC

  379.       cp_turn_count

  380.     end

  381.   end
  382.   
  383.   


  384.   #--------------------------------------------------------------------------

  385.   # ● 创建基本动作结果

  386.   #--------------------------------------------------------------------------

  387.   alias xrxs65_make_basic_action_result make_basic_action_result

  388.   def make_basic_action_result

  389.     # 召回

  390.     xrxs65_make_basic_action_result

  391.     # 防御の場合

  392.     @active_battler.guarding = false

  393.     if @active_battler.current_action.basic == 1

  394.       @active_battler.guarding = true

  395.       return

  396.     end

  397.     # 如果党的逃逸

  398.     if @active_battler.current_action.basic == 4

  399.       # 如果你无法逃避

  400.       if $game_temp.battle_can_escape == false

  401.         # ブザー SE を演奏

  402.         $game_system.se_play($data_system.buzzer_se)

  403.         return

  404.       end

  405.       # 清除各方CP

  406.       for actor in $game_party.actors

  407.         actor.cp = 0

  408.       end

  409.       # 更新的CP米

  410.       @cp_meters.refresh

  411.       # 逃走処理

  412.       update_phase2_escape

  413.       return

  414.     end

  415.   end

  416.   #--------------------------------------------------------------------------

  417.   # ● 更新帧(步骤5个主要阶段:查看伤害)

  418.   #--------------------------------------------------------------------------

  419.   alias xrxs65_update_phase4_step5 update_phase4_step5

  420.   def update_phase4_step5

  421.     # 召回

  422.     xrxs65_update_phase4_step5

  423.     #更新的CP米

  424.     @cp_meters.refresh

  425.   end

  426. end

  427. #==============================================================================

  428. # --- 米级的CP,所有的关系都显示管理集 ---

  429. #==============================================================================

  430. class CP_Meters

  431.   #--------------------------------------------------------------------------

  432.   # ○ 对象初始化

  433.   #--------------------------------------------------------------------------

  434.   def initialize

  435.     # 仪表组发电

  436.     @meters = []

  437.     for i in 0...$game_party.actors.size

  438.       make_meter(i)

  439.     end

  440.     refresh

  441.   end

  442.   #--------------------------------------------------------------------------

  443.   # ○ 刷新

  444.   #--------------------------------------------------------------------------

  445.   def refresh

  446.     #更改成员的数量来确定打击

  447.     for i in @meters.size...$game_party.actors.size

  448.       make_meter(i)

  449.     end

  450.     for i in [email protected]

  451.       @meters[i].dispose

  452.       @meters[i] = nil

  453.     end

  454.     @meters.compact!

  455.     # 表示更新

  456.     for i in 0...$game_party.actors.size

  457.       actor = $game_party.actors[i]
  458.       
  459.       @meters[i].line   = actor.cp_linetype

  460.       @meters[i].amount = actor.cp_lineamount      
  461.       

  462.     end

  463.   end

  464.   #--------------------------------------------------------------------------

  465.   # ○ 一代米

  466.   #--------------------------------------------------------------------------

  467.   def make_meter(i)

  468.     # スキンの取得

  469.     skin = RPG::Cache.windowskin(XRXS65::SKIN)

  470.     #

  471.     space = 640 / XRXS65::MAX
  472.    

  473.     case XRXS65::ALIGN

  474.     when 0

  475.       actor_x = i * space + 4

  476.     when 1

  477.       actor_x = (space * ((XRXS65::MAX - $game_party.actors.size)/2.0 + i)).floor

  478.     when 2

  479.       actor_x = (i + XRXS65::MAX - $game_party.actors.size) * space + 4

  480.     end



  481.     meter = MeterSprite.new(skin,XRXS65::LINE_HEIGHT)

  482.     meter.x = actor_x + XRXS65::X_OFFSET - skin.width

  483.     meter.y = XRXS65::Y_OFFSET

  484.     @meters[i] = meter

  485.   end

  486.   #--------------------------------------------------------------------------

  487.   # ○ 可視状態

  488.   #--------------------------------------------------------------------------

  489.   def visible=(b)

  490.     @meters.each{|sprite| sprite.visible = b }

  491.   end

  492.   #--------------------------------------------------------------------------

  493.   # ○ 解放

  494.   #--------------------------------------------------------------------------

  495.   def dispose

  496.     @meters.each{|sprite| sprite.dispose }

  497.   end

  498. end

  499. #==============================================================================

  500. # --- XRXS。矩形仪表显示?极 ---

  501. #==============================================================================

  502. class MeterSprite < Sprite

  503.   #--------------------------------------------------------------------------

  504.   # ○ 对象初期化

  505.   #--------------------------------------------------------------------------

  506.   def initialize(skin, line_height)

  507.     @skin   = skin

  508.     @width  = @skin.width

  509.     @height = line_height

  510.     @line   = 1

  511.     @amount = 0

  512.     @base_sprite = Sprite.new

  513.     @base_sprite.bitmap = @skin

  514.     @base_sprite.src_rect.set(0, 0, @width, @height)

  515.     @base_sprite.z = 9000 #601

  516.     super()

  517.     self.z = @base_sprite.z + 1

  518.     self.bitmap = @skin

  519.     self.line = 1

  520.   end

  521.   #--------------------------------------------------------------------------

  522.   # ○ 値の設定

  523.   #--------------------------------------------------------------------------

  524.   def line=(n)

  525.     @line = n

  526.     refresh

  527.   end

  528.   def amount=(n)

  529.     @amount = n

  530.     refresh

  531.   end

  532.   def refresh

  533.     self.src_rect.set(0, @line * @height, @width * @amount / 100, @height)

  534.   end

  535.   #--------------------------------------------------------------------------

  536.   # ○ 座標の設定

  537.   #--------------------------------------------------------------------------

  538.   def x=(n)

  539.     super

  540.     @base_sprite.x = n

  541.   end

  542.   def y=(n)

  543.     super

  544.     @base_sprite.y = n

  545.   end

  546.   #--------------------------------------------------------------------------

  547.   # ○ 解放

  548.   #--------------------------------------------------------------------------

  549.   def dispose

  550.     @base_sprite.dispose

  551.     super

  552.   end

  553. end
复制代码
在这个脚本中新加入队伍的人员可以马上行动。在哪里改。??
还有从696行开始是消耗CP的判断。skill.element_set.include?($data_system.elements.index("无CD"))
是判断技能的属性。我想再加个判断物品的。但item.element_set.include?($data_system.elements.index("无CD"))
不正确,。。,该怎么改?


zgm1100于2011-10-21 13:08补充以下内容:
坐等一天。。无人甩我、。、、、、、、、、、、、、、、、、


zgm1100于2011-10-21 13:08补充以下内容:
坐等中     


zgm1100于2011-10-22 00:43补充以下内容:



zgm1100于2011-10-22 00:44补充以下内容:
..................................没人。。。。


zgm1100于2011-10-22 02:59补充以下内容:
{:4_113:}{:4_113:}{:4_113:}dsu_plus_rewardpost_czw




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