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

Project1

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

[已经解决] 求大神帮忙整合两个战斗效果的脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
24 小时
注册时间
2015-1-20
帖子
7
跳转到指定楼层
1
发表于 2015-2-18 23:51:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
这两个是战斗特殊效果和合体技能的脚本……如果把合体技能脚本放在特效后面,1162行的特效就会冲突,如果把合体技放在特效前面则标记为合体技的技能就一直处于无法使用状态……求大神帮忙整合,脚本比较长,麻烦了orz
  1. #==============================================================================
  2. #合体技能系统v1.0 BY 绿发的Eclair
  3. #嗯...这个脚本可以相对完美地实现多人合力技能的效果。
  4. #使用方法:
  5. #首先设定合体技能使用的成员,在数据库最后一页的“属性”中设定如下格式的属性:
  6. #合体技,第一个队员ID,第二个队员ID
  7. #记得一定要用英文逗号分隔“合体技”三个字和使用队员哦,不然会错。
  8. #如果技能需要三人以上合力,只要在第二个队员ID后面继续添加一个半角逗号和第三个人的ID即可。
  9. #PS:默认战斗超出4人以上的合体技能是一定用不鸟的- -|||具体原因在这脚本之中~~
  10. #最后只要把想设定成合体技能的技能勾上这个属性就完成了,就这么简单。
  11. #最后,和战斗类脚本发生冲突的可能性非常高,使用这个脚本之前最好找个技工帮忙(如果自己就是技工的话54这句8~)
  12. #==============================================================================

  13. #==============================================================================
  14. # ■ Game_chain
  15. #------------------------------------------------------------------------------
  16. #  - -|||一个伪造的battler模子....
  17. #==============================================================================
  18. class Game_chain
  19.   attr_accessor :atk
  20.   attr_accessor :str
  21.   attr_accessor :dex
  22.   attr_accessor :agi
  23.   attr_accessor :int
  24.   attr_accessor :hit
  25.   def initialize
  26.     @atk = 0
  27.     @str = 0
  28.     @dex = 0
  29.     @agi = 0
  30.     @int = 0
  31.     @hit = 0
  32.   end
  33. end
  34. module RPG
  35.   class Skill
  36.     def chain_id
  37.       use = []
  38.       for i in @element_set
  39.         if $data_system.elements[i].split(/,/)[0] == "合体技"
  40.           for j in 1...$data_system.elements[i].split(/,/).size
  41.             use.push($data_system.elements[i].split(/,/)[j].to_i)
  42.           end
  43.         end
  44.       end
  45.       return use
  46.     end
  47.   end
  48. end
  49. #==============================================================================
  50. # ■ Scene_Battle (分割定义 4)
  51. #------------------------------------------------------------------------------
  52. #  处理战斗画面的类。
  53. #==============================================================================

  54. class Scene_Battle
  55.   attr_accessor :phase
  56.   #--------------------------------------------------------------------------
  57.   # ● 刷新画面画面 (角色命令回合 : 选择敌人)
  58.   #--------------------------------------------------------------------------
  59.   def update_phase3_enemy_select
  60.     # 刷新敌人箭头
  61.     @enemy_arrow.update
  62.     # 按下 B 键的情况下
  63.     if Input.trigger?(Input::B)
  64.       # 演奏取消 SE
  65.       $game_system.se_play($data_system.cancel_se)
  66.       # 选择敌人结束
  67.       end_enemy_select
  68.       return
  69.     end
  70.     # 按下 C 键的情况下
  71.     if Input.trigger?(Input::C)
  72.       # 演奏确定 SE
  73.       $game_system.se_play($data_system.decision_se)
  74.       # 设置行动
  75.       @active_battler.current_action.target_index = @enemy_arrow.index
  76.       #####################################################eclair
  77.         if @skill_window != nil
  78.         if @active_battler.current_action.kind == 1 and $data_skills[@active_battler.current_action.skill_id].chain_id != []
  79.         for i in $game_party.actors
  80.       
  81.       for j in $data_skills[@active_battler.current_action.skill_id].chain_id
  82.           if i.id == j
  83.           i.current_action.target_index = @enemy_arrow.index
  84.           end
  85.         end
  86.         end
  87.       end
  88.       end
  89.       #####################################################eclair
  90.       
  91.       # 选择敌人结束
  92.       end_enemy_select
  93.       # 显示特技窗口中的情况下
  94.       if @skill_window != nil
  95.         # 结束特技选择
  96.         end_skill_select
  97.       end
  98.       # 显示物品窗口的情况下
  99.       if @item_window != nil
  100.         # 结束物品选择
  101.         end_item_select
  102.       end
  103.       # 转到下一位角色的指令输入
  104.       phase3_next_actor
  105.     end
  106.   end

  107.   #--------------------------------------------------------------------------
  108.   # ● 设置角色指令窗口
  109.   #--------------------------------------------------------------------------
  110.   def phase3_setup_command_window
  111.     ######################################################eclair
  112.     if @active_battler.chain_id != 0
  113.       phase3_next_actor
  114.       return
  115.     end
  116.     ######################################################eclair
  117.     # 同伴指令窗口无效化
  118.     @party_command_window.active = false
  119.     @party_command_window.visible = false
  120.     # 角色指令窗口无效化
  121.     @actor_command_window.active = true
  122.     @actor_command_window.visible = true
  123.     # 设置角色指令窗口的位置
  124.     @actor_command_window.x = @actor_index * 160
  125.     # 设置索引为 0
  126.     @actor_command_window.index = 0
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 转向前一个角色的命令输入
  130.   #--------------------------------------------------------------------------
  131.   def phase3_prior_actor
  132.     ######################################################eclair
  133.     if $game_party.actors[@actor_index - 1].chain_id != 0
  134.     a = $game_party.actors[@actor_index - 1].chain_id
  135.     b = []
  136.     for i in $game_party.actors
  137.       i.blink = false
  138.       if i.chain_id == a
  139.       b.push(i.id)
  140.       end
  141.     end
  142.     for j in b
  143.       $game_actors[j].chain_id = 0
  144.       $game_actors[j].chain_over = false
  145.     end
  146.     @actor_index = b.min
  147.     @active_battler = $game_party.actors[@actor_index]
  148.     end  
  149.     ######################################################eclair
  150.     # 循环
  151.     begin
  152.       # 角色的明灭效果 OFF
  153.       if @active_battler != nil
  154.         @active_battler.blink = false
  155.       end
  156.       # 最初的角色的情况下
  157.       if @actor_index == 0
  158.         # 开始同伴指令回合
  159.         start_phase2
  160.         return
  161.       end
  162.       # 返回角色索引
  163.       @actor_index -= 1
  164.       @active_battler = $game_party.actors[@actor_index]
  165.       @active_battler.blink = true
  166.     # 如果角色是在无法接受指令的状态就再试
  167.     end until @active_battler.inputable?
  168.     # 设置角色的命令窗口
  169.     phase3_setup_command_window
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● 刷新画面 (主回合步骤 1 : 准备行动)
  173.   #--------------------------------------------------------------------------
  174.   def update_phase4_step1
  175.     # 隐藏帮助窗口
  176.     @help_window.visible = false
  177.     # 判定胜败
  178.     if judge
  179.       # 胜利或者失败的情况下 : 过程结束
  180.       return
  181.     end
  182.     # 强制行动的战斗者不存在的情况下
  183.     if $game_temp.forcing_battler == nil
  184.       # 设置战斗事件
  185.       setup_battle_event
  186.       # 执行战斗事件中的情况下
  187.       if $game_system.battle_interpreter.running?
  188.         return
  189.       end
  190.     end
  191.     # 强制行动的战斗者存在的情况下
  192.     if $game_temp.forcing_battler != nil
  193.       # 在头部添加后移动
  194.       @action_battlers.delete($game_temp.forcing_battler)
  195.       @action_battlers.unshift($game_temp.forcing_battler)
  196.     end
  197.     # 未行动的战斗者不存在的情况下 (全员已经行动)
  198.     ##################################################eclair
  199.     if @action_battlers.size == 0
  200.       for i in $game_party.actors
  201.         i.chain_over = false
  202.         i.chain_id = 0
  203.       end
  204.       # 开始同伴命令回合
  205.       start_phase2
  206.       return
  207.     end
  208.     ##################################################eclair
  209.     # 初始化动画 ID 和公共事件 ID
  210.     @animation1_id = 0
  211.     @animation2_id = 0
  212.     @common_event_id = 0
  213.     # 未行动的战斗者移动到序列的头部
  214.     @active_battler = @action_battlers.shift
  215.     # 如果已经在战斗之外的情况下
  216.     if @active_battler.index == nil
  217.       return
  218.     end
  219.     # 连续伤害
  220.     if @active_battler.hp > 0 and @active_battler.slip_damage?
  221.       @active_battler.slip_damage_effect
  222.       @active_battler.damage_pop = true
  223.     end
  224.     # 自然解除状态
  225.     @active_battler.remove_states_auto
  226.     # 刷新状态窗口
  227.     @status_window.refresh
  228.     # 移至步骤 2
  229.     @phase4_step = 2
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # ● 刷新画面 (角色命令回合 : 选择特技)
  233.   #--------------------------------------------------------------------------
  234.   def update_phase3_skill_select
  235.     # 设置特技窗口为可视状态
  236.     @skill_window.visible = true
  237.     # 刷新特技窗口
  238.     @skill_window.update
  239.     # 按下 B 键的情况下
  240.     if Input.trigger?(Input::B)
  241.       # 演奏取消 SE
  242.       $game_system.se_play($data_system.cancel_se)
  243.       # 结束特技选择
  244.       end_skill_select
  245.       return
  246.     end
  247.     # 按下 C 键的情况下
  248.     if Input.trigger?(Input::C)
  249.       # 获取特技选择窗口现在选择的特技的数据
  250.       @skill = @skill_window.skill
  251.       # 无法使用的情况下
  252.       if @skill == nil or not @active_battler.skill_can_use?(@skill.id)
  253.         # 演奏冻结 SE
  254.         $game_system.se_play($data_system.buzzer_se)
  255.         return
  256.       end
  257.       # 演奏确定 SE
  258.       $game_system.se_play($data_system.decision_se)
  259.       # 设置行动
  260.       @active_battler.current_action.skill_id = @skill.id
  261.       ####################################################eclair
  262.       #设定合体技能ID
  263.       if @active_battler.is_a?(Game_Actor)
  264.         for i in $data_skills[@skill.id].chain_id
  265.         for j in $game_party.actors
  266.           if j.id == i
  267.           j.current_action.kind = 1
  268.           j.chain_id = @skill.id   
  269.           end
  270.           end
  271.         end
  272.       end
  273.       ####################################################eclair
  274.       # 设置特技窗口为不可见状态
  275.       @skill_window.visible = false
  276.       # 效果范围是敌单体的情况下
  277.       if @skill.scope == 1
  278.         # 开始选择敌人
  279.         start_enemy_select
  280.       # 效果范围是我方单体的情况下
  281.       elsif @skill.scope == 3 or @skill.scope == 5
  282.         # 开始选择角色
  283.         start_actor_select
  284.       # 效果范围不是单体的情况下
  285.       else
  286.         # 选择特技结束
  287.         end_skill_select
  288.         # 转到下一位角色的指令输入
  289.         phase3_next_actor
  290.       end
  291.       return
  292.     end
  293.     end
  294.   #--------------------------------------------------------------------------
  295.   # ● 生成特技行动结果
  296.   #--------------------------------------------------------------------------
  297.   def make_skill_action_result
  298.     # 获取特技
  299.     @skill = $data_skills[@active_battler.current_action.skill_id]
  300.     #################################################eclair
  301.     if @active_battler.chain_over == true
  302.     @help_window.visible = false
  303.     @phase4_step = 1
  304.     return
  305.   end
  306.   
  307.     if @active_battler.chain_id != 0
  308.     @skill = $data_skills[@active_battler.chain_id]
  309.     @a = Game_chain.new
  310.     for i in $data_skills[@skill.id].chain_id
  311.       for j in $game_party.actors
  312.       if j.id == i
  313.         @a.atk += j.atk / @skill.chain_id.size
  314.         @a.str += j.str / @skill.chain_id.size
  315.         @a.dex += j.dex / @skill.chain_id.size
  316.         @a.agi += j.agi / @skill.chain_id.size
  317.         @a.int += j.int / @skill.chain_id.size
  318.         @a.hit += j.hit / @skill.chain_id.size
  319.       end
  320.     end
  321.   end
  322. end
  323.     #################################################eclair
  324.     # 如果不是强制行动
  325.     unless @active_battler.current_action.forcing
  326.       # 因为 SP 耗尽而无法使用的情况下
  327.       unless @active_battler.skill_can_use?(@skill.id)
  328.         # 清除强制行动对像的战斗者
  329.         $game_temp.forcing_battler = nil
  330.         # 移至步骤 1
  331.         @phase4_step = 1
  332.         return
  333.       end
  334.     end
  335.     # 消耗 SP
  336.     ##################################################eclair
  337.     if @skill.chain_id != []
  338.       for i in @skill.chain_id
  339.         $game_actors[i].sp -= @skill.sp_cost
  340.       end
  341.     else
  342.       @active_battler.sp -= @skill.sp_cost
  343.     end
  344.     ##################################################eclair
  345.     # 刷新状态窗口
  346.     @status_window.refresh
  347.     # 在帮助窗口显示特技名
  348.     @help_window.set_text(@skill.name, 1)
  349.     # 设置动画 ID
  350.     @animation1_id = @skill.animation1_id
  351.     @animation2_id = @skill.animation2_id
  352.     # 设置公共事件 ID
  353.     @common_event_id = @skill.common_event_id
  354.     # 设置对像侧战斗者
  355.     set_target_battlers(@skill.scope)
  356.     # 应用特技效果
  357.        #####################################################eclair
  358.     if @active_battler.chain_id == 0
  359.     for target in @target_battlers
  360.       target.skill_effect(@active_battler, @skill)
  361.     end
  362.   else
  363.     for target in @target_battlers
  364.       target.skill_effect(@a, @skill)
  365.     end
  366.   end
  367.     ######################################################eclair
  368.   end
  369.   #--------------------------------------------------------------------------
  370.   # ● 刷新画面 (主回合步骤 3 : 行动方动画)
  371.   #--------------------------------------------------------------------------
  372.   def update_phase4_step3
  373.     # 行动方动画 (ID 为 0 的情况下是白色闪烁)
  374.     ####################################################eclair
  375.     if @active_battler.chain_id == 0#1
  376.   
  377.     if @animation1_id == 0#2
  378.       @active_battler.white_flash = true
  379.     else
  380.       @active_battler.animation_id = @animation1_id
  381.       @active_battler.animation_hit = true
  382.     end#2
  383.    
  384.   else
  385.    
  386.     for i in $data_skills[@skill.id].chain_id#4
  387.     for j in $game_party.actors#5
  388.     if j.id == i#3
  389.     j.animation_id = $data_skills[@skill.id].animation1_id
  390.     j.animation_hit = true
  391.    
  392.     end#3
  393.   end#4
  394. end#5

  395.   end#1
  396.    ########################################################eclair
  397.     # 移至步骤 4
  398.     @phase4_step = 4
  399.   end
  400.   
  401.   
  402.   #--------------------------------------------------------------------------
  403.   # ● 刷新画面 (主回合步骤 5 : 显示伤害)
  404.   #--------------------------------------------------------------------------
  405.   def update_phase4_step5
  406.     # 隐藏帮助窗口
  407.     @help_window.visible = false
  408.     # 刷新状态窗口
  409.     @status_window.refresh
  410.     # 显示伤害
  411.     for target in @target_battlers
  412.       if target.damage != nil
  413.         target.damage_pop = true
  414.       end
  415.     end
  416.     #####################################################eclair
  417.     if @active_battler.chain_id != 0
  418.       for i in $game_party.actors
  419.         if i.chain_id == @active_battler.chain_id
  420.            i.chain_over = true
  421.         end
  422.       end
  423.     end
  424.     #####################################################eclair
  425.     # 移至步骤 6
  426.     @phase4_step = 6
  427.   end
  428. end
  429. #==============================================================================
  430. # ■ Game_Battler (分割定义 1)
  431. #------------------------------------------------------------------------------
  432. #  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的
  433. # 超级类来使用。
  434. #==============================================================================
  435. class Game_Battler
  436.   attr_accessor :chain_id                  # 使用合体技能的ID
  437.   attr_accessor :chain_over                # 合体技能使用完毕的标志
  438.   alias initialize_c initialize
  439.   def initialize
  440.     initialize_c
  441.     @chain_id = 0
  442.     @chain_over = false
  443.   end
  444.   #--------------------------------------------------------------------------
  445.   # ● 可以使用特技的判定
  446.   #     skill_id : 特技 ID
  447.   #--------------------------------------------------------------------------
  448.   def skill_can_use?(skill_id)
  449.     # SP 不足的情况下不能使用
  450.     if $data_skills[skill_id].sp_cost > self.sp
  451.       return false
  452.     end
  453.     # 战斗不能的情况下不能使用
  454.     if dead?
  455.       return false
  456.     end
  457.     # 沉默状态的情况下、物理特技以外的特技不能使用
  458.     if $data_skills[skill_id].atk_f == 0 and self.restriction == 1
  459.       return false
  460.     end
  461.     ###################################################eclair
  462.     if $data_skills[skill_id].chain_id != [] and self.is_a?(Game_Actor)
  463.       for i in $data_skills[skill_id].chain_id
  464.         return false if !$game_party.actors.include?($game_actors[i])
  465.         return false if !$game_actors[i].movable? or !$game_actors[i].inputable? or $game_actors[i].dead?
  466.         return false if $game_actors[i].chain_id != 0 and ($game_actors[i].sp < $data_skills[skill_id].sp_cost)
  467.         return false if $game_actors[i].chain_id != 0 && skill_id and $scene.phase != 4
  468.       end
  469.     end
  470.     ##################################################eclair
  471.     # 获取可以使用的时机
  472.     occasion = $data_skills[skill_id].occasion
  473.     # 战斗中的情况下
  474.     if $game_temp.in_battle
  475.       # [平时] 或者是 [战斗中] 可以使用
  476.       return (occasion == 0 or occasion == 1)
  477.     # 不是战斗中的情况下
  478.     else
  479.       # [平时] 或者是 [菜单中] 可以使用
  480.       return (occasion == 0 or occasion == 2)
  481.     end
  482.   end
  483. end
复制代码
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================

  4. # ▼▲▼ XRXS19. 特殊効果詰め合わせ:戦闘用 with 29 parts ver..18a ▼▲▼
  5. # by 桜雅 在土, 和希, シムナフ

  6. #==============================================================================
  7. # ■ 以下内容定义各特技的属性名
  8. #==============================================================================
  9. class Game_Battler
  10.   RERAISE_STATE_NAME = /复活/           
  11.   LIBLA_SKILL_ELEMENT_NAME = "透视"     
  12.   POWERSTOCK_SKILL_ELEMENT_NAME = "聚气"
  13.   POWERSTOCK_BASE_RATE = 1.5            #——每回合聚气威力上升倍率
  14.   STEAL_SKILL_ELEMENT_NAME = "偷窃"
  15.   ELEMENT_NAME_SP_DAMAGE = "MP损伤"
  16.   ELEMENT_NAME_HP_DRAIN = "HP吸收"
  17.   ELEMENT_NAME_SP_DRAIN = "MP吸收"
  18.   ELEMENT_NAME_CRITICAL_HIT = "必杀"
  19.   ELEMENT_NAME_CERTAIN_HIT = "必中"
  20.   ELEMENT_NAME_HP_COST = "HP消耗"
  21. end
  22. class Game_BattleAction
  23.   ELEMENT_NAME_SPEED_PRIORITY = "优先度"
  24. end
  25. class Scene_Battle
  26.   ELEMENT_NAME_HP_COST = "HP消耗"
  27.   ELEMENT_NAME_DERIVER = "派生"
  28.   ELEMENT_NAME_MOVE_TIMES = "行动回数"
  29.   ELEMENT_NAME_AREA_ENEMY_ALL = "全体化"
  30.   ELEMENT_NAME_AREA_WHOLE = "全域化"
  31.   ELEMENT_NAME_AREA_ENEMY_RAND = "敌方随机"
  32.   ELEMENT_NAME_AREA_ACTOR_RAND ="我方随机"
  33.   ELEMENT_NAME_AREA_ALL_RANDOM ="对象随机"
  34.   RERAISE_HP = 1
  35.   RERAISE_HP_PERCENT = 0
  36.   RERAISE_ANIMATION_ID = 26
  37. end
  38. module Cover_Module
  39.   ELEMENT_NAME_COVER = "援助"
  40.   STATE_NAME_COVER = "援助"
  41.   COVER_HP_PERCENT = 100
  42.   COVER_EFFECT_PERCENT = 100
  43.   COVER_EFFECT_CHAR = "Covered!"
  44.   COVER_ANIMATION_ID = 324
  45.   COVER_DEFAULT_NUMBER = 2
  46. end
  47. #==============================================================================
  48. $xrxs19_special_effections_set_work = true
  49. #--------------------------------------------------------------------------
  50. # ● 属性修正の計算?改
  51. #--------------------------------------------------------------------------
  52. class Game_Battler
  53. def elements_correct(element_set)
  54. # 無属性の場合 100 を返す
  55. return 100 if element_set == []
  56. # 与えられた属性のレートを全て乗算
  57. result = 100
  58. for i in element_set
  59. result *= self.element_rate(i) / 100.0
  60. end
  61. return result.to_i
  62. end
  63. end
  64. #==============================================================================
  65. # ■ Game_Battler
  66. #==============================================================================
  67. class Game_Battler
  68. #--------------------------------------------------------------------------
  69. # ● 追加公開インスタンス変数
  70. #--------------------------------------------------------------------------
  71. attr_accessor :reraise_state
  72. attr_accessor :reraised # リレイズしたかどうか
  73. attr_accessor :metamor_target # 変身対象
  74. attr_accessor :battler_name # バトラーグラフィック
  75. attr_reader :battler_name_original # バトラーグラフィック初期値
  76. attr_writer :hp0_ban # HP/SPの 0 化または最大制限の解除
  77. attr_writer :certain_hit # 必中受け(Trueだと攻撃を避けられない)
  78. attr_accessor :covered_friends #庇っている味方の配列
  79. attr_accessor :effect_message #
  80. attr_accessor :current_friend #かばっている味方
  81. attr_accessor :cover_remain #かばう可能な残り回数
  82. #--------------------------------------------------------------------------
  83. # ● 初期化
  84. #--------------------------------------------------------------------------
  85. alias xrxs19_battler_initialize initialize
  86. def initialize
  87. xrxs19_battler_initialize
  88. # 「かばう」用変数初期化
  89. @covered_friends = []
  90. @effect_message = nil
  91. @current_friend = nil
  92. @cover_remain = 0
  93. end
  94. #--------------------------------------------------------------------------
  95. # ● ステートの付加
  96. # state_id : ステート ID
  97. # force : 強制付加フラグ (オートステートの処理で使用)
  98. #--------------------------------------------------------------------------
  99. alias xrxs19_add_state add_state
  100. def add_state(state_id, force = false)
  101. xrxs19_add_state(state_id, force)
  102. # 「かばう」のステート付加の場合
  103. if state_id == get_cover_state_id()
  104. self.cover_remain = COVER_DEFAULT_NUMBER
  105. end
  106. end
  107. #--------------------------------------------------------------------------
  108. # ● HP の変更
  109. #--------------------------------------------------------------------------
  110. def hp=(hp)
  111. if @hp0_ban
  112. @hp = hp
  113. else
  114. @hp = [[hp, maxhp].min, 0].max
  115. # 戦闘不能を付加または解除
  116. for i in 1...$data_states.size
  117. if $data_states[i].zero_hp
  118. if self.dead?
  119. # 追加
  120. for x in 1...$data_states.size
  121. # ステート名は変更可。
  122. if $data_states[x].name[RERAISE_STATE_NAME] != nil
  123. reraise_id = $data_states[x].id
  124. break
  125. end
  126. end
  127. # リレイズ復活
  128. if reraise_id != nil && self.state?(reraise_id)
  129. self.remove_state(reraise_id)
  130. @reraised = true
  131. # 戦闘不能マイナスステートに設定されているものを解除
  132. if $data_states[i].minus_state_set != []
  133. for j in $data_states[i].minus_state_set
  134. remove_state(j)
  135. end
  136. end
  137. elsif
  138. # ここまで
  139. add_state(i)
  140. end
  141. else
  142. remove_state(i)
  143. end
  144. end
  145. end
  146. end
  147. end
  148. #--------------------------------------------------------------------------
  149. # ● SP の変更
  150. #--------------------------------------------------------------------------
  151. def sp=(sp)
  152. if @hp0_ban
  153. @sp = sp
  154. else
  155. @sp = [[sp, maxsp].min, 0].max
  156. end
  157. end
  158. #--------------------------------------------------------------------------
  159. # ● ステート [攻撃を回避できない] 判定
  160. #--------------------------------------------------------------------------
  161. alias xrxs19_cant_evade? cant_evade?
  162. def cant_evade?
  163. return true if @certain_hit
  164. return xrxs19_cant_evade?
  165. end
  166. #--------------------------------------------------------------------------
  167. # ● 通常攻撃の効果適用
  168. #--------------------------------------------------------------------------
  169. alias xrxs19_attack_effect attack_effect# alias したものは effect_it 内で使用
  170. def attack_effect(attacker)
  171. # 通常攻撃の場合、skill = nil で呼ぶ
  172. return effect_it(attacker, nil)
  173. end
  174. #--------------------------------------------------------------------------
  175. # ● スキルの効果適用
  176. #--------------------------------------------------------------------------
  177. alias xrxs19_skill_effect skill_effect # alias したものは effect_it 内で使用
  178. def skill_effect(user, skill)
  179. # スキルの場合は、skill を指定して呼ぶ
  180. return effect_it(user, skill)
  181. end
  182. #--------------------------------------------------------------------------
  183. # ● 効果適用
  184. #--------------------------------------------------------------------------
  185. def effect_it(user, skill = nil)
  186. # 実行前の数値を保持
  187. last_hp = self.hp
  188. last_sp = self.sp
  189. @hp0_ban = true
  190. # 武器IDの取得
  191. weapon_id = user.is_a?(Game_Actor) ? user.weapon_id : 0
  192. # 特殊効果:必中
  193. if skill != nil and skill_element_include?(skill, ELEMENT_NAME_CERTAIN_HIT)
  194. self.certain_hit = true
  195. elsif skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_CERTAIN_HIT)
  196. self.certain_hit = true
  197. end
  198. # 基本実行、skill が nil かどうかで通常攻撃とスキルを分別
  199. if skill == nil
  200. bool = xrxs19_attack_effect(user)
  201. else
  202. bool = xrxs19_skill_effect(user, skill)
  203. end
  204. # ダメージ測定
  205. damage = last_hp - self.hp
  206. # 必中の解除
  207. self.certain_hit = false
  208. # 特殊効果:スティール/アイテム奪取
  209. if skill != nil and skill_element_include?(skill, STEAL_SKILL_ELEMENT_NAME)
  210. self.steal_effect(user, skill) if self.is_a?(Game_Enemy)
  211. elsif skill == nil and equip_weapon_element_include?(user, STEAL_SKILL_ELEMENT_NAME)
  212. self.steal_effect(user, skill) if self.is_a?(Game_Enemy)
  213. end
  214. # 特殊効果:対象に変身
  215. if skill != nil and skill_element_include?(skill, "变身")
  216. if user.metamor_target == nil
  217. if self.metamor_target == nil
  218. # 変身状態で無い場合、変身
  219. user.metamor_target = self
  220. else
  221. # 対象が変身状態の場合、対象の変身対象に変身する。
  222. user.metamor_target = self.metamor_target
  223. end
  224. else
  225. # 変身状態の場合、変身を解除する
  226. user.metamor_target = user
  227. end
  228. # 自分への変身を禁止
  229. user.metamor_target = nil if user.metamor_target == user
  230. # 対象のダメージ表示を消す
  231. self.damage = nil if self.damage == "Miss"
  232. # HP/SP最大値変更への対応
  233. @hp0_ban = false
  234. user.hp = user.hp
  235. user.sp = user.sp
  236. end
  237. # 特殊効果:武器を投げる
  238. if (skill != nil and skill_element_include?(skill, "武器投掷"))
  239. # 投擲武器の取得
  240. throw_weapon = $data_weapons[user.current_action.basic]
  241. # 武器の消費
  242. if $xrxs24_weapon_property_system_work
  243. $game_party.lose_weapon(throw_weapon.id, user.current_action.basic_ex)
  244. else
  245. $game_party.lose_weapon(throw_weapon.id, 1)
  246. end
  247. # ダメージの変更
  248. self.hp += damage if bool
  249. damage = throw_weapon.atk
  250. if weapon_element_include?(throw_weapon.id, "投掷威力")
  251. damage = damage * @one.to_i / 100
  252. end
  253. self.damage = damage
  254. self.hp -= self.damage
  255. bool = true
  256. end
  257. # 特殊効果:消費金額に順ずる固定ダメージ
  258. if skill != nil and skill_element_include?(skill, "金钱投掷")
  259. # ゴールドの消費
  260. last_gold = $game_party.gold
  261. $game_party.gain_gold(-1 * ($game_party.gold * skill.variance / 100 + skill.power))
  262. self.hp += damage if bool
  263. damage = last_gold - $game_party.gold
  264. self.damage = damage
  265. self.hp -= self.damage
  266. bool = true
  267. end
  268. # 基本実行でfalse(Miss等)の場合、ここで終了する
  269. # つまり、この上までにダメージに関係なく実行される特殊効果をいれて
  270. # これより下はダメージに関係する特殊効果を入れる。
  271. # "武器投擲"と"銭投げ"はMissでも金額を消費するため上に。
  272. return false if bool == false
  273. # 特殊効果:防御能力の判定
  274. if damage > 0 and self.guarding?
  275. # 特殊効果:防御能力 2(強防御)
  276. if battler_element_rank?(self, "防御能力") == 2
  277. damage /= 2
  278. self.damage -= damage
  279. self.hp += damage
  280. end
  281. # 特殊効果:防御能力 1(無効防御)
  282. if battler_element_rank?(self, "防御能力") == 1
  283. self.hp += damage
  284. damage = 0
  285. self.damage = damage
  286. end
  287. end
  288. # 特殊効果:必殺確実クリティカル
  289. if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_CRITICAL_HIT)) or
  290. (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_CRITICAL_HIT)) and damage > 0
  291. if self.critical
  292. self.critical = false
  293. damage /= 2
  294. self.damage -= damage
  295. self.hp += damage
  296. end
  297. if @one == nil or rand(100) < @one.to_i
  298. self.critical = true
  299. self.hp -= damage
  300. damage *= 2
  301. self.damage = damage
  302. end
  303. end
  304. # 特殊効果:使用者の 最大HP - 現在HP 固定ダメージ
  305. if skill != nil and skill_element_include?(skill, "固定HP差分")
  306. self.hp += damage
  307. damage = user.maxhp - user.hp
  308. self.damage = damage
  309. self.hp -= self.damage
  310. self.critical = false # 固定ダメージ故クリティカルを禁止
  311. end
  312. # 特殊効果:使用者の 現在HP 固定ダメージ
  313. if skill != nil and skill_element_include?(skill, "现在HP损伤")
  314. self.hp += damage
  315. damage = user.hp
  316. self.damage = damage
  317. self.hp -= self.damage
  318. self.critical = false # 固定ダメージ故クリティカルを禁止
  319. end
  320. # 特殊効果:現在HPに順ずる固定ダメージ
  321. if skill != nil and skill_element_include?(skill, "固定现在HP")
  322. self.hp += damage
  323. damage = self.hp * skill.variance / 100 + skill.power
  324. damage *= -1 if skill.power < 0
  325. self.damage = damage
  326. self.hp -= self.damage
  327. self.critical = false # 固定ダメージ故クリティカルを禁止
  328. end
  329. # 特殊効果:最大HPに順ずる固定ダメージ
  330. if skill != nil and skill_element_include?(skill, "固定最大HP")
  331. self.hp += damage
  332. damage = self.maxhp * @one.to_i / 100
  333. damage *= -1 if skill.power < 0
  334. self.damage = damage
  335. self.hp -= self.damage
  336. self.critical = false # 固定ダメージ故クリティカルを禁止
  337. end
  338. # 特殊効果:HPではなくSPにダメージを与える
  339. if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_SP_DAMAGE)) or
  340. (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_SP_DAMAGE))
  341. self.hp += damage
  342. self.sp -= damage
  343. self.damage = "SP " + damage.to_s
  344. # このタイミングで戦闘不能判定
  345. @hp0_ban = false
  346. self.sp = self.sp
  347. real_damage = last_sp - self.sp
  348. else
  349. # このタイミングで戦闘不能判定
  350. @hp0_ban = false
  351. self.hp = self.hp
  352. real_damage = last_hp - self.hp
  353. end
  354. # 使用者のHP/SPもリセット
  355. user.hp = user.hp
  356. user.sp = user.sp
  357. # 特殊効果:与えたダメージを自分のHPとして吸収
  358. if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_HP_DRAIN)) or
  359. (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_HP_DRAIN))
  360. user.damage = -real_damage * @one.to_i / 100
  361. user.hp -= user.damage
  362. end
  363. # 特殊効果:与えたダメージを自分のSPとして吸収
  364. if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_SP_DRAIN)) or
  365. (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_SP_DRAIN))
  366. user.damage = -real_damage * @one.to_i / 100
  367. user.sp -= user.damage
  368. user.damage = "SP " + user.damage.to_s
  369. end
  370. return true
  371. end
  372. #--------------------------------------------------------------------------
  373. # ● バトラーの指定名の属性のランクを判定
  374. #--------------------------------------------------------------------------
  375. def battler_element_rank?(battler, element_name)
  376. for i in 1..$data_system.elements.size
  377. if $data_system.elements[i] == element_name
  378. if self.is_a?(Game_Actor)
  379. return $data_classes[battler.class_id].element_ranks[i]
  380. else
  381. return $data_enemies[battler.id].element_ranks[i]
  382. end
  383. end
  384. end
  385. return 3
  386. end
  387. #--------------------------------------------------------------------------
  388. # ● MaxHP の取得
  389. #--------------------------------------------------------------------------
  390. alias xrxs19_maxhp maxhp
  391. def maxhp
  392. if !@metamor_target.nil?
  393. return @metamor_target.maxhp
  394. end
  395. xrxs19_maxhp
  396. end
  397. #--------------------------------------------------------------------------
  398. # ● MaxSP の取得
  399. #--------------------------------------------------------------------------
  400. alias xrxs19_maxsp maxsp
  401. def maxsp
  402. if !@metamor_target.nil?
  403. return @metamor_target.maxsp
  404. end
  405. xrxs19_maxsp
  406. end
  407. #--------------------------------------------------------------------------
  408. # ● 腕力の取得
  409. #--------------------------------------------------------------------------
  410. alias xrxs19_str str
  411. def str
  412. if !@metamor_target.nil?
  413. return @metamor_target.str
  414. end
  415. xrxs19_str
  416. end
  417. #--------------------------------------------------------------------------
  418. # ● 器用さの取得
  419. #--------------------------------------------------------------------------
  420. alias xrxs19_dex dex
  421. def dex
  422. if !@metamor_target.nil?
  423. return @metamor_target.dex
  424. end
  425. xrxs19_dex
  426. end
  427. #--------------------------------------------------------------------------
  428. # ● 素早さの取得
  429. #--------------------------------------------------------------------------
  430. alias xrxs19_agi agi
  431. def agi
  432. if !@metamor_target.nil?
  433. return @metamor_target.agi
  434. end
  435. xrxs19_agi
  436. end
  437. #--------------------------------------------------------------------------
  438. # ● 魔力の取得
  439. #--------------------------------------------------------------------------
  440. alias xrxs19_int int
  441. def int
  442. if !@metamor_target.nil?
  443. return @metamor_target.int
  444. end
  445. xrxs19_int
  446. end
  447. #--------------------------------------------------------------------------
  448. # ● 攻撃力の取得
  449. #--------------------------------------------------------------------------
  450. alias xrxs19_atk atk
  451. def atk
  452. if !@metamor_target.nil?
  453. return @metamor_target.atk
  454. end
  455. xrxs19_atk
  456. end
  457. #--------------------------------------------------------------------------
  458. # ● 物理防御の取得
  459. #--------------------------------------------------------------------------
  460. alias xrxs19_pdef pdef
  461. def pdef
  462. if !@metamor_target.nil?
  463. return @metamor_target.pdef
  464. end
  465. xrxs19_pdef
  466. end
  467. #--------------------------------------------------------------------------
  468. # ● 魔法防御の取得
  469. #--------------------------------------------------------------------------
  470. alias xrxs19_mdef mdef
  471. def mdef
  472. if !@metamor_target.nil?
  473. return @metamor_target.mdef
  474. end
  475. xrxs19_mdef
  476. end
  477. #--------------------------------------------------------------------------
  478. # ● 回避修正の取得
  479. #--------------------------------------------------------------------------
  480. alias xrxs19_eva eva
  481. def eva
  482. if !@metamor_target.nil?
  483. return @metamor_target.eva
  484. end
  485. xrxs19_eva
  486. end
  487. end

  488. #==============================================================================
  489. # ■ Game_BattleAction
  490. #==============================================================================
  491. class Game_BattleAction
  492. #--------------------------------------------------------------------------
  493. # ● 公開インスタンス変数
  494. #--------------------------------------------------------------------------
  495. attr_accessor :speed_priority # スピード優先度
  496. attr_accessor :weapon_id # 武器 ID
  497. attr_accessor :basic_ex # 基本拡張(補助的に数値を保持)
  498. #--------------------------------------------------------------------------
  499. # ● クリア
  500. #--------------------------------------------------------------------------
  501. alias xrxs19_clear clear
  502. def clear
  503. @weapon_id = 0
  504. xrxs19_clear
  505. end
  506. #--------------------------------------------------------------------------
  507. # ● スキルの優先度取得
  508. #--------------------------------------------------------------------------
  509. def speed_priority
  510. if @kind == 0 and @basic == 0
  511. # 通常攻撃の場合
  512. elsif @kind == 1
  513. # スキルの場合
  514. return 0 if $data_skills[@skill_id] == nil
  515. for i in $data_skills[@skill_id].element_set
  516. if $data_system.elements[i] != nil
  517. if $data_system.elements[i] =~ /^#{ELEMENT_NAME_SPEED_PRIORITY}([+-]?[0-9]+)/
  518. return $1.to_i
  519. end
  520. end
  521. end
  522. end
  523. return 0
  524. end
  525. end
  526. #==============================================================================
  527. # ■ Game_Actor
  528. #==============================================================================
  529. class Game_Actor < Game_Battler
  530. #--------------------------------------------------------------------------
  531. # ● セットアップ
  532. #--------------------------------------------------------------------------
  533. alias xrxs19_setup setup
  534. def setup(actor_id)
  535. xrxs19_setup(actor_id)
  536. @reraised = false
  537. @reraise_state = 0
  538. @metamor_target = nil
  539. @battler_name_original = @battler_name
  540. end
  541. #--------------------------------------------------------------------------
  542. # ● MaxHP の取得
  543. #--------------------------------------------------------------------------
  544. alias xrxs19_maxhp maxhp
  545. def maxhp
  546. if !@metamor_target.nil?
  547. return @metamor_target.maxhp
  548. end
  549. xrxs19_maxhp
  550. end
  551. #--------------------------------------------------------------------------
  552. # ● スキルの使用可能判定
  553. #--------------------------------------------------------------------------
  554. alias xrxs19_skill_can_use? skill_can_use?
  555. def skill_can_use?(skill_id)
  556. # スキルを取得
  557. @skill = $data_skills[skill_id]
  558. # HP消費スキルの場合
  559. if skill_element_include?(@skill, ELEMENT_NAME_HP_COST) and @actor_id > 0
  560. # HP が足りない場合は使用不可
  561. if $data_skills[skill_id].sp_cost > self.hp
  562. return false
  563. end
  564. # SP消費量を回復させ、SP が足りない場合を回避(最大値を超えて回復)
  565. self.hp0_ban = true
  566. self.sp += @skill.sp_cost
  567. bool = xrxs19_skill_can_use?(skill_id)
  568. # SPを元に戻す
  569. self.sp -= @skill.sp_cost
  570. self.hp0_ban = false
  571. return bool
  572. else
  573. return xrxs19_skill_can_use?(skill_id)
  574. end
  575. end
  576. end
  577. #==============================================================================
  578. # ■ Game_Enemy
  579. #==============================================================================
  580. class Game_Enemy < Game_Battler
  581. #--------------------------------------------------------------------------
  582. # ● オブジェクト初期化
  583. #--------------------------------------------------------------------------
  584. alias xrxs19_initialize initialize
  585. def initialize(troop_id, member_index)
  586. xrxs19_initialize(troop_id, member_index)
  587. @reraised = false
  588. @reraise_state = 0
  589. @metamor_target = nil
  590. @battler_name_original = @battler_name
  591. end
  592. end
  593. #==============================================================================
  594. # ■ Window_Item
  595. #==============================================================================
  596. class Window_Item < Window_Selectable
  597. #--------------------------------------------------------------------------
  598. # ● オブジェクト初期化
  599. #--------------------------------------------------------------------------
  600. alias xrxs19_initialize initialize
  601. def initialize
  602. xrxs19_initialize
  603. refresh
  604. end
  605. #--------------------------------------------------------------------------
  606. # ● 値の受け渡し
  607. #--------------------------------------------------------------------------
  608. def set_itemkind(itemkind)
  609. @itemkind = itemkind
  610. refresh
  611. end
  612. #--------------------------------------------------------------------------
  613. # ● 値の受け渡し
  614. #--------------------------------------------------------------------------
  615. def set_restrict(restrict)
  616. @restrict = restrict
  617. refresh
  618. end
  619. #--------------------------------------------------------------------------
  620. # ● リフレッシュ
  621. #--------------------------------------------------------------------------
  622. alias xrxs19_refresh refresh
  623. def refresh
  624. if @itemkind != 11
  625. xrxs19_refresh
  626. return
  627. end
  628. # 11 = 制限:投擲武器のみ
  629. if self.contents != nil
  630. self.contents.dispose
  631. self.contents = nil
  632. end
  633. @data = []
  634. @data_id = []
  635. for i in 1...$data_weapons.size
  636. if $game_party.weapon_number(i) > 0
  637. @data.push($data_weapons[i]) if weapon_element_include?(i, "投掷威力")
  638. end
  639. end
  640. # 項目数が 0 でなければビットマップを作成し、全項目を描画
  641. @item_max = @data.size
  642. if @item_max > 0
  643. self.contents = Bitmap.new(width - 32, row_max * 32)
  644. for i in 0...@item_max
  645. draw_item(i)
  646. end
  647. end
  648. end
  649. #--------------------------------------------------------------------------
  650. # ● 項目の描画
  651. #--------------------------------------------------------------------------
  652. alias xrxs19_draw_item draw_item
  653. def draw_item(index)
  654. if @itemkind != 11
  655. xrxs19_draw_item(index)
  656. return
  657. end
  658. # 11 = 制限:投擲武器のみ
  659. item = @data[index]
  660. number = $game_party.weapon_number(item.id)
  661. self.contents.font.color = normal_color
  662. x = 4 + index % @column_max * (288 + 32)
  663. y = index / @column_max * 32
  664. rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  665. self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  666. bitmap = RPG::Cache.icon(item.icon_name)
  667. opacity = self.contents.font.color == normal_color ? 255 : 128
  668. self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  669. self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  670. self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  671. self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  672. end
  673. end
  674. #==============================================================================
  675. # ■ Scene_Battle
  676. #==============================================================================
  677. class Scene_Battle
  678. #--------------------------------------------------------------------------
  679. # ● メイン処理
  680. #--------------------------------------------------------------------------
  681. alias xrxs19_main main
  682. def main
  683. @phase4_5_done = false
  684. xrxs19_main
  685. end
  686. #--------------------------------------------------------------------------
  687. # ● フレーム更新 (アクターコマンドフェーズ)
  688. #--------------------------------------------------------------------------
  689. alias xrxs19_update_phase3 update_phase3
  690. def update_phase3
  691. # 武器のみアイテムウィンドウが有効の場合
  692. if @item_window_weapons != nil and @item_window_weapons.visible
  693. update_phase3_item_window_weapons
  694. return
  695. end
  696. # 他
  697. xrxs19_update_phase3
  698. end
  699. #--------------------------------------------------------------------------
  700. # ● フレーム更新 (アクターコマンドフェーズ : スキル選択)
  701. #--------------------------------------------------------------------------
  702. alias xrxs19_update_phase3_skill_select update_phase3_skill_select
  703. def update_phase3_skill_select
  704. # C ボタンが押された場合
  705. if Input.trigger?(Input::C)
  706. # スキルウィンドウで現在選択されているデータを取得
  707. @skill = @skill_window.skill
  708. if skill_element_include?(@skill, "武器投掷")
  709. # 使用できない場合
  710. if @skill == nil or not @active_battler.skill_can_use?(@skill.id)
  711. # ブザー SE を演奏
  712. $game_system.se_play($data_system.buzzer_se)
  713. return
  714. end
  715. # 決定 SE を演奏
  716. $game_system.se_play($data_system.decision_se)
  717. # アクションを設定
  718. @active_battler.current_action.skill_id = @skill.id
  719. # アイテム選択へ移行する
  720. start_item_select_from_skill(@one.to_i)
  721. return
  722. end
  723. end
  724. xrxs19_update_phase3_skill_select
  725. end
  726. #--------------------------------------------------------------------------
  727. # ● フレーム更新 (アクターコマンドフェーズ : 武器のみアイテム選択)
  728. #--------------------------------------------------------------------------
  729. def update_phase3_item_window_weapons
  730. # 武器アイテムウィンドウを可視状態にする
  731. @item_window_weapons.visible = true
  732. # 武器アイテムウィンドウを更新
  733. @item_window_weapons.update
  734. # B ボタンが押された場合
  735. if Input.trigger?(Input::B)
  736. # キャンセル SE を演奏
  737. $game_system.se_play($data_system.cancel_se)
  738. # 武器アイテムの選択を終了
  739. end_item_select_from_skill
  740. return
  741. end
  742. # C ボタンが押された場合
  743. if Input.trigger?(Input::C)
  744. # 決定 SE を演奏
  745. $game_system.se_play($data_system.decision_se)
  746. # アイテムウィンドウで現在選択されているデータを取得
  747. @item = @item_window_weapons.item
  748. # アクションを設定
  749. @active_battler.current_action.basic = @item.id
  750. if $xrxs24_weapon_property_system_work
  751. # アイテムウィンドウで現在選択されているデータを取得
  752. @item_room_no = @item_window_weapons.item_room_no
  753. # アクションを設定
  754. @active_battler.current_action.basic_ex = @item_room_no
  755. end
  756. # 武器のみアイテムウィンドウを不可視化
  757. @item_window_weapons.visible = false
  758. # 効果範囲が敵単体の場合
  759. if @skill.scope == 1
  760. # エネミーの選択を開始
  761. start_enemy_select
  762. # 効果範囲が味方単体の場合
  763. elsif @skill.scope == 3 or @skill.scope == 5
  764. # アクターの選択を開始
  765. start_actor_select
  766. # 効果範囲が単体ではない場合
  767. else
  768. # アイテムの選択を終了
  769. end_item_select_from_skill
  770. # 次のアクターのコマンド入力へ
  771. phase3_next_actor
  772. end
  773. return
  774. end
  775. end
  776. #--------------------------------------------------------------------------
  777. # ● スキルからのアイテム選択開始
  778. #--------------------------------------------------------------------------
  779. def start_item_select_from_skill(restrict = 0)
  780. # 投擲アイテムウィンドウを作成 ( 武器のみ:投擲可能のみ )
  781. @item_window_weapons = Window_Item.new
  782. if restrict == 1
  783. @item_window_weapons.set_itemkind(11)
  784. else
  785. @item_window_weapons.set_itemkind(1)
  786. end
  787. # ヘルプウィンドウを関連付け
  788. @item_window_weapons.help_window = @help_window
  789. # スキルウィンドウを無効化
  790. @skill_window.active = false
  791. @skill_window.visible = false
  792. end
  793. #--------------------------------------------------------------------------
  794. # ● スキルからのアイテム選択終了
  795. #--------------------------------------------------------------------------
  796. def end_item_select_from_skill
  797. # 武器のみアイテムウィンドウを解放
  798. @item_window_weapons.dispose
  799. @item_window_weapons = nil
  800. # ヘルプウィンドウを隠す
  801. @help_window.visible = false
  802. # スキルウィンドウを有効化
  803. @skill_window.active = true
  804. @skill_window.visible = true
  805. end
  806. #--------------------------------------------------------------------------
  807. # ● エネミー選択開始
  808. #--------------------------------------------------------------------------
  809. alias xrxs19_start_enemy_select start_enemy_select
  810. def start_enemy_select
  811. return if start_select_check
  812. xrxs19_start_enemy_select
  813. end
  814. #--------------------------------------------------------------------------
  815. # ● アクター選択開始
  816. #--------------------------------------------------------------------------
  817. alias xrxs19_start_actor_select start_actor_select
  818. def start_actor_select
  819. return if start_select_check
  820. xrxs19_start_actor_select
  821. end
  822. #--------------------------------------------------------------------------
  823. # ● 選択開始時のチェック
  824. #--------------------------------------------------------------------------
  825. def start_select_check
  826. # "全体化"、"全域化"、"対象ランダム"の判定
  827. case @active_battler.current_action.kind
  828. when 0 # 攻撃
  829. # ここで「攻撃」使用者の武器IDを保持しておく
  830. @active_battler.current_action.weapon_id = @active_battler.weapon_id
  831. # チェックに戻る
  832. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_ALL) or
  833. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_WHOLE) or
  834. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_RAND) or
  835. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ACTOR_RAND) or
  836. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ALL_RANDOM)
  837. phase3_next_actor
  838. return true
  839. end
  840. when 1 # スキル
  841. if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_ALL) or
  842. skill_element_include?(@skill, ELEMENT_NAME_AREA_WHOLE) or
  843. skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_RAND) or
  844. skill_element_include?(@skill, ELEMENT_NAME_AREA_ACTOR_RAND) or
  845. skill_element_include?(@skill, ELEMENT_NAME_AREA_ALL_RANDOM)
  846. end_skill_select
  847. phase3_next_actor
  848. return true
  849. end
  850. when 2 # アイテム
  851. if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_ALL) or
  852. item_element_include?(@item, ELEMENT_NAME_AREA_WHOLE) or
  853. item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_RAND) or
  854. item_element_include?(@item, ELEMENT_NAME_AREA_ACTOR_RAND) or
  855. item_element_include?(@item, ELEMENT_NAME_AREA_ALL_RANDOM)
  856. end_item_select
  857. phase3_next_actor
  858. return true
  859. end
  860. end
  861. return false
  862. end
  863. #--------------------------------------------------------------------------
  864. # ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備)
  865. #--------------------------------------------------------------------------
  866. alias xrxs19_update_phase4_step1 update_phase4_step1
  867. def update_phase4_step1
  868. # 初期化
  869. @phase4_act_continuation = 0
  870. @phase4_act_times_max = 1
  871. @skill = nil
  872. @weapon_id = nil
  873. # 戻す
  874. xrxs19_update_phase4_step1
  875. end
  876. #--------------------------------------------------------------------------
  877. # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  878. #--------------------------------------------------------------------------
  879. alias xrxs19_update_phase4_step2 update_phase4_step2
  880. def update_phase4_step2
  881. #リレイズ判定
  882. next_phase_ok = true
  883. next_phase_ok = update_reraise_effect(@active_battler)
  884. if !next_phase_ok
  885. return
  886. end
  887. if next_phase_ok
  888. # ステップ 2 へ
  889. xrxs19_update_phase4_step2
  890. end
  891. end
  892. #--------------------------------------------------------------------------
  893. # ● 基本アクション 結果作成
  894. #--------------------------------------------------------------------------
  895. alias xrxs19_make_basic_action_result make_basic_action_result
  896. def make_basic_action_result
  897. # 攻撃の場合
  898. if @active_battler.current_action.basic == 0
  899. # 武器IDの取得
  900. @weapon_id = @active_battler.is_a?(Game_Actor) ? @active_battler.weapon_id : 0
  901. # 指定行動回数取得 ( "行動回数"が無い場合は 1 のまま )
  902. weapon_element_include?(@weapon_id, ELEMENT_NAME_MOVE_TIMES)
  903. @phase4_act_times_max = @one.to_i if @one != nil
  904. # アニメーション ID を設定
  905. @animation1_id = @active_battler.animation1_id
  906. @animation2_id = @active_battler.animation2_id
  907. # 初期化
  908. @target_battlers = []
  909. # 対象側バトラーの配列を設定
  910. # "全体化"の判定
  911. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_ALL)
  912. # 行動側バトラーがエネミーの場合
  913. if @active_battler.is_a?(Game_Enemy)
  914. if @active_battler.restriction == 3
  915. @target_battlers = $game_troop.enemies
  916. else
  917. @target_battlers = $game_party.actors
  918. end
  919. end
  920. # 行動側バトラーがアクターの場合
  921. if @active_battler.is_a?(Game_Actor)
  922. if @active_battler.restriction == 3
  923. @target_battlers = $game_party.actors
  924. else
  925. @target_battlers = $game_troop.enemies
  926. end
  927. end
  928. end
  929. # "敵ランダム"の判定
  930. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_RAND)
  931. # 行動側バトラーがエネミーの場合
  932. if @active_battler.is_a?(Game_Enemy)
  933. if @active_battler.restriction == 3
  934. tb_array = $game_troop.enemies
  935. else
  936. tb_array = $game_party.actors
  937. end
  938. end
  939. # 行動側バトラーがアクターの場合
  940. if @active_battler.is_a?(Game_Actor)
  941. if @active_battler.restriction == 3
  942. tb_array = $game_party.actors
  943. else
  944. tb_array = $game_troop.enemies
  945. end
  946. end
  947. @target_battlers = [tb_array[rand(tb_array.size)]]
  948. end
  949. # "味方ランダム"の判定
  950. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ACTOR_RAND)
  951. # 行動側バトラーがエネミーの場合
  952. if @active_battler.is_a?(Game_Enemy)
  953. if @active_battler.restriction == 3
  954. tb_array = $game_party.actors
  955. else
  956. tb_array = $game_troop.enemies
  957. end
  958. end
  959. # 行動側バトラーがアクターの場合
  960. if @active_battler.is_a?(Game_Actor)
  961. if @active_battler.restriction == 3
  962. tb_array = $game_troop.enemies
  963. else
  964. tb_array = $game_party.actors
  965. end
  966. end
  967. @target_battlers = [tb_array[rand(tb_array.size)]]
  968. end
  969. # "全域化"の判定
  970. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_WHOLE)
  971. @target_battlers = $game_party.actors + $game_troop.enemies
  972. end
  973. # "対象ランダム"の判定
  974. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ALL_RANDOM)
  975. tb_array = $game_party.actors + $game_troop.enemies
  976. @target_battlers = [tb_array[rand(tb_array.size)]]
  977. end
  978. if @target_battlers.size > 0
  979. ##かばう追加
  980. get_target_battlers_after_cover!(@target_battlers, @active_battler)
  981. # 通常攻撃の効果を適用
  982. for target in @target_battlers
  983. target.attack_effect(@active_battler)
  984. end
  985. return
  986. end
  987. end
  988. xrxs19_make_basic_action_result
  989. end
  990. #--------------------------------------------------------------------------
  991. # ● スキルまたはアイテムの対象側バトラー設定
  992. #--------------------------------------------------------------------------
  993. alias xrxs19_set_target_battlers set_target_battlers
  994. def set_target_battlers(scope)
  995. case @active_battler.current_action.kind
  996. when 1
  997. # "全体化"の判定
  998. if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_ALL)
  999. scope = 2
  1000. return
  1001. end
  1002. # "全域化"の判定
  1003. scope = 8 if skill_element_include?(@skill, ELEMENT_NAME_AREA_WHOLE)
  1004. # "敵ランダム"の判定
  1005. scope = 9 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_RAND)
  1006. # "味方ランダム"の判定
  1007. scope =10 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ACTOR_RAND)
  1008. # "対象ランダム"の判定
  1009. scope =11 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ALL_RANDOM)
  1010. when 2
  1011. # "全体化"の判定
  1012. if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_ALL)
  1013. scope = 2
  1014. return
  1015. end
  1016. # "全域化"の判定
  1017. scope = 8 if item_element_include?(@item, ELEMENT_NAME_AREA_WHOLE)
  1018. # "敵ランダム"の判定
  1019. scope = 9 if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_RAND)
  1020. # "味方ランダム"の判定
  1021. scope =10 if item_element_include?(@item, ELEMENT_NAME_AREA_ACTOR_RAND)
  1022. # "対象ランダム"の判定
  1023. scope =11 if item_element_include?(@item, ELEMENT_NAME_AREA_ALL_RANDOM)
  1024. end
  1025. case scope
  1026. when 8
  1027. @target_battlers = $game_party.actors + $game_troop.enemies
  1028. return
  1029. when 9
  1030. # 行動側バトラーがエネミーの場合
  1031. if @active_battler.is_a?(Game_Enemy)
  1032. tb_array = $game_party.actors
  1033. end
  1034. # 行動側バトラーがアクターの場合
  1035. if @active_battler.is_a?(Game_Actor)
  1036. tb_array = $game_troop.enemies
  1037. end
  1038. @target_battlers = [tb_array[rand(tb_array.size)]]
  1039. return
  1040. when 10
  1041. # 行動側バトラーがエネミーの場合
  1042. if @active_battler.is_a?(Game_Enemy)
  1043. tb_array = $game_troop.enemies
  1044. end
  1045. # 行動側バトラーがアクターの場合
  1046. if @active_battler.is_a?(Game_Actor)
  1047. tb_array = $game_party.actors
  1048. end
  1049. @target_battlers = [tb_array[rand(tb_array.size)]]
  1050. return
  1051. when 11
  1052. tb_array = $game_party.actors + $game_troop.enemies
  1053. @target_battlers = [tb_array[rand(tb_array.size)]]
  1054. return
  1055. end
  1056. # 呼び戻す
  1057. xrxs19_set_target_battlers(scope)
  1058. ##追加
  1059. get_target_battlers_after_cover!(@target_battlers, @active_battler)
  1060. end
  1061. #--------------------------------------------------------------------------
  1062. # ● スキルアクション 結果作成
  1063. #--------------------------------------------------------------------------
  1064. alias xrxs19_make_skill_action_result make_skill_action_result
  1065. def make_skill_action_result
  1066. # スキルを取得
  1067. @skill = $data_skills[@active_battler.current_action.skill_id]
  1068. # 既に一回以上行動している場合
  1069. if @phase4_act_continuation >= 1
  1070. # SP消費分のSPを回復させて擬似的にSPを減らさない
  1071. @active_battler.sp += @skill.sp_cost
  1072. else
  1073. # 指定行動回数取得
  1074. skill_element_include?(@skill, ELEMENT_NAME_MOVE_TIMES)
  1075. @phase4_act_times_max = @one.to_i if @one != nil
  1076. # 特殊効果:消費金額に順ずる固定ダメージ
  1077. if skill_element_include?(@skill, "金钱投掷")
  1078. # ゴールドウィンドウを作成
  1079. if @gold_window == nil or @gold_window.visible == false
  1080. @gold_window = Window_Gold.new
  1081. @gold_window.x = 640 - @gold_window.width
  1082. @gold_window.y = 64
  1083. @gold_window.opacity = 160
  1084. @gold_window.visible = true
  1085. end
  1086. end
  1087. # HP消費スキルの場合
  1088. if skill_element_include?(@skill, ELEMENT_NAME_HP_COST)
  1089. # HPが足りるか判定
  1090. if @active_battler.hp <= @skill.sp_cost
  1091. # 足りない場合
  1092. # ステップ 1 に移行
  1093. @phase4_step = 1
  1094. return
  1095. end
  1096. # SP消費分のSPを回復させて擬似的にSPを減らさない(最大値を超えて回復)
  1097. @active_battler.hp0_ban = true
  1098. @active_battler.sp += @skill.sp_cost
  1099. # 戻す
  1100. xrxs19_make_skill_action_result
  1101. # HPを消費
  1102. @active_battler.hp -= @skill.sp_cost
  1103. # HP/SPの制限の解除
  1104. @active_battler.hp0_ban = false
  1105. return
  1106. end
  1107. end
  1108. xrxs19_make_skill_action_result
  1109. ##追加
  1110. make_cover_skill_action_result()
  1111. end
  1112. #--------------------------------------------------------------------------
  1113. # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  1114. #--------------------------------------------------------------------------
  1115. alias xrxs19_update_phase4_step3 update_phase4_step3
  1116. def update_phase4_step3
  1117. # 既に一回以上行動している場合
  1118. if @phase4_act_continuation >= 1
  1119. # ステップ 4 に移行
  1120. @phase4_step = 4
  1121. @wait_count = 0
  1122. return
  1123. end
  1124. xrxs19_update_phase4_step3
  1125. # ちからためメッセージ表示。
  1126. for target in @target_battlers
  1127. if !target.action_message.nil?
  1128. @help_window.set_text(target.action_message, 1)
  1129. target.action_message = nil
  1130. end
  1131. end
  1132. end
  1133. #--------------------------------------------------------------------------
  1134. # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  1135. #--------------------------------------------------------------------------
  1136. alias xrxs19_update_phase4_step4 update_phase4_step4
  1137. def update_phase4_step4
  1138. # 武器投擲時、「武器のアニメーション」を対象に使う
  1139. if skill_element_include?(@skill, "武器投掷")
  1140. @animation2_id = $data_weapons[@active_battler.current_action.basic].animation2_id
  1141. end
  1142. # ゴールドウィンドウを更新
  1143. @gold_window.refresh if @gold_window != nil
  1144. if skill_element_include?(@skill, "变身")
  1145. tb_array = @target_battlers
  1146. @target_battlers = [@active_battler]
  1147. xrxs19_update_phase4_step4
  1148. @target_battlers = tb_array
  1149. else
  1150. xrxs19_update_phase4_step4
  1151. end
  1152. # かばわれたメンバーのアニメーション
  1153. for target in @target_battlers
  1154. if target.current_friend != nil
  1155. target.current_friend.animation_id = COVER_ANIMATION_ID
  1156. end
  1157. end
  1158. # 既に一回以上行動している場合
  1159. if @phase4_act_continuation >= 1
  1160. @wait_count = 0
  1161. end
  1162. end
  1163. #--------------------------------------------------------------------------
  1164. # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  1165. #--------------------------------------------------------------------------
  1166. alias xrxs19_update_phase4_step5 update_phase4_step5
  1167. def update_phase4_step5
  1168. # 呼び戻す
  1169. xrxs19_update_phase4_step5
  1170. # かばわれたメンバーのダメージ
  1171. for target in @target_battlers
  1172. if target.current_friend != nil
  1173. target.current_friend.damage_pop = true
  1174. #かばっている状態の初期化
  1175. target.current_friend = nil
  1176. end
  1177. end
  1178. # 生存確認
  1179. target_still_left = false
  1180. for target in @target_battlers
  1181. # ターゲットが生き残っているか判別
  1182. target_still_left = true if !target.dead?
  1183. # 戦闘不能時で、変身を解除
  1184. if target.dead? and target.metamor_target != nil
  1185. target.animation_id = 17 # 戦闘不能変身解除時のアニメーションID
  1186. target.animation_hit = true
  1187. target.battler_name = target.battler_name_original
  1188. target.metamor_target = nil
  1189. end
  1190. end
  1191. # ダメージ表示
  1192. if @active_battler.damage != nil
  1193. @active_battler.damage_pop = true
  1194. end
  1195. # 変身対象のバトラーグラフィックをコピー
  1196. if skill_element_include?(@skill, "变身")
  1197. if @active_battler.metamor_target != nil
  1198. @active_battler.battler_name = @active_battler.metamor_target.battler_name
  1199. else
  1200. @active_battler.battler_name = @active_battler.battler_name_original
  1201. end
  1202. end
  1203. # ターゲットの敵への処理
  1204. for target in @target_battlers
  1205. # スティール結果メッセージ表示。ただし、複数ターゲットの表示は不可能
  1206. if !target.effect_message.nil?
  1207. @help_window.set_text(target.effect_message, 1)
  1208. target.effect_message = nil
  1209. end
  1210. end
  1211. # 行動した回数のカウントを 1 加算
  1212. @phase4_act_continuation += 1
  1213. # 実行済み行動回数が、指定行動回数に達したかを判別
  1214. if @phase4_act_continuation < @phase4_act_times_max
  1215. # 達していない場合
  1216. # 生存している場合、続ける。
  1217. if target_still_left
  1218. # 指定行動回数に満たない場合は繰り返す為、ステップ 2 に移行
  1219. @phase4_step = 2
  1220. @wait_count = 0
  1221. # スキル使用中の場合はヘルプウィンドウを隠すのをやめる
  1222. if @active_battler.current_action.kind == 1
  1223. @help_window.visible = true
  1224. end
  1225. end
  1226. else
  1227. # 達した場合
  1228. # 敵が生存、かつ skillが"派生"属性を持つ場合
  1229. if target_still_left and
  1230. (skill_element_include?(@skill, ELEMENT_NAME_DERIVER) or
  1231. (@weapon_id != nil and equip_weapon_element_include?(@active_battler, ELEMENT_NAME_DERIVER)))
  1232. if @one.to_i > 0
  1233. # 回数をリセット
  1234. @phase4_act_continuation = 0
  1235. @phase4_act_times_max = 1
  1236. # 武器攻撃ではなくなるため @weapon_id を nil 化
  1237. @weapon_id = nil
  1238. # 新しいスキルID
  1239. @active_battler.current_action.kind = 1
  1240. @active_battler.current_action.skill_id = @one.to_i
  1241. # ステップ 2 に移行
  1242. @phase4_step = 2
  1243. @wait_count = 0
  1244. end
  1245. end
  1246. end
  1247. # ゴールドウィンドウを隠す
  1248. @gold_window.visible = false if @gold_window != nil
  1249. end
  1250. #--------------------------------------------------------------------------
  1251. # ● フレーム更新 (メインフェーズ ステップ 6 : リレイズ表示→リフレッシュ)
  1252. #--------------------------------------------------------------------------
  1253. alias xrxs19_update_phase4_step6 update_phase4_step6
  1254. def update_phase4_step6
  1255. next_phase_ok = true
  1256. #リレイズ判定
  1257. for enemy in $game_troop.enemies
  1258. next_phase_ok = update_reraise_effect(enemy)
  1259. if !next_phase_ok
  1260. return
  1261. end
  1262. end
  1263. for actor in $game_party.actors
  1264. next_phase_ok = update_reraise_effect(actor)
  1265. if !next_phase_ok
  1266. return
  1267. end
  1268. end
  1269. if next_phase_ok
  1270. xrxs19_update_phase4_step6
  1271. end
  1272. end
  1273. #===================================================
  1274. #リレイズエフェクト
  1275. #===================================================
  1276. def update_reraise_effect(battler)
  1277. if battler.reraised
  1278. case battler.reraise_state
  1279. when 0
  1280. battler.reraise_state = 1 # コラプス待ち
  1281. @wait_count = 16
  1282. return false
  1283. when 1
  1284. battler.reraise_state = 2 # 復活アニメーション
  1285. ##IDは好きなアニメーションIDを指定
  1286. battler.animation_id = RERAISE_ANIMATION_ID
  1287. @wait_count = 8
  1288. return false#
  1289. when 2
  1290. #復活処理
  1291. battler.hp = battler.maxhp * RERAISE_HP_PERCENT / 100 + RERAISE_HP
  1292. battler.reraise_state = 3 #アピアーアニメーション
  1293. @wait_count = 8
  1294. return false#
  1295. when 3
  1296. battler.reraise_state = 0 #終了?通常処理に戻る
  1297. battler.reraised = false #フラグを初期値へ
  1298. @status_window.refresh
  1299. return true
  1300. end
  1301. else
  1302. return true
  1303. end
  1304. end
  1305. #--------------------------------------------------------------------------
  1306. # ● アフターバトルフェーズ開始
  1307. #--------------------------------------------------------------------------
  1308. alias xrxs19_update_phase5 update_phase5
  1309. def update_phase5
  1310. next_phase_ok = false
  1311. # 次のアクターへ
  1312. @phase5_i = -1 if @phase5_i == nil
  1313. @phase5_i += 1
  1314. if @phase5_i < $game_party.actors.size
  1315. actor = $game_party.actors[@phase5_i]
  1316. # 変身状態の味方がいるか判別し、それを解除する
  1317. if actor.metamor_target != nil
  1318. actor.animation_id = 17 # 戦闘終了変身解除時のアニメーションID
  1319. actor.animation_hit = true
  1320. actor.battler_name = actor.battler_name_original
  1321. actor.metamor_target = nil
  1322. # ステータスウィンドウをリフレッシュ
  1323. @status_window.refresh
  1324. # アニメーションの長さにかかわらず、最低 4 フレーム待つ
  1325. @wait_count = 4
  1326. end
  1327. else
  1328. next_phase_ok = true
  1329. end
  1330. if next_phase_ok
  1331. xrxs19_update_phase5
  1332. end
  1333. end
  1334. #--------------------------------------------------------------------------
  1335. # ● 行動順序作成
  1336. #--------------------------------------------------------------------------
  1337. alias xrxs19_make_action_orders make_action_orders
  1338. def make_action_orders
  1339. xrxs19_make_action_orders
  1340. # 優先度の大きい順 (同値の場合は素早さの速い順) に並び替え
  1341. @action_battlers.sort! do |a, b|
  1342. if a.current_action.speed_priority > b.current_action.speed_priority
  1343. -1
  1344. elsif a.current_action.speed_priority < b.current_action.speed_priority
  1345. +1
  1346. elsif a.current_action.speed > b.current_action.speed
  1347. -1
  1348. elsif a.current_action.speed < b.current_action.speed
  1349. +1
  1350. else
  1351. 0 # a <=> b
  1352. end
  1353. end
  1354. end
  1355. #--------------------------------------------------------------------------
  1356. # ● バトル終了
  1357. #--------------------------------------------------------------------------
  1358. alias xrxs19_battle_end battle_end
  1359. def battle_end(result)
  1360. for i in 0...$game_party.actors.size
  1361. actor = $game_party.actors[i]
  1362. # 変身状態の味方がいるか判別し、それを解除する
  1363. if actor.metamor_target != nil
  1364. actor.battler_name = actor.battler_name_original
  1365. actor.metamor_target = nil
  1366. end
  1367. end
  1368. xrxs19_battle_end(result)
  1369. end
  1370. end
  1371. #=============================================================================
  1372. # ◇ スティール
  1373. #=============================================================================
  1374. class Game_Battler
  1375. #--------------------------------------------------------------------------
  1376. # ● 公開インスタンス変数
  1377. #--------------------------------------------------------------------------
  1378. attr_accessor :effect_message
  1379. #--------------------------------------------------------------------------
  1380. # ● オブジェクト初期化
  1381. #--------------------------------------------------------------------------
  1382. alias before_steal_original_battler_initialize initialize
  1383. def initialize
  1384. before_steal_original_battler_initialize()
  1385. @effect_message = nil
  1386. @steal_skill_id = $data_system.elements.index(STEAL_SKILL_ELEMENT_NAME)
  1387. end
  1388. end
  1389. class Game_Enemy < Game_Battler
  1390. #--------------------------------------------------------------------------
  1391. # ● オブジェクト初期化
  1392. #--------------------------------------------------------------------------
  1393. alias before_steal_original_enemy_initialize initialize
  1394. def initialize(troop_id, member_index)
  1395. before_steal_original_enemy_initialize(troop_id, member_index)
  1396. @item_possession = true
  1397. end
  1398. #===================================================
  1399. #
  1400. #===================================================
  1401. def name
  1402. name = $data_enemies[@enemy_id].name.split(/-/)[0]
  1403. if !name.nil?
  1404. return name = name.strip()
  1405. else
  1406. return ''
  1407. end
  1408. end
  1409. #===================================================
  1410. #ノーマルアイテムの指定 
  1411. #エネミーネームに -n種類 ID 個数(-na 10 10) と入れて指定。
  1412. #種類は、i(アイテム) w(武器) a(防具)のいずれか一つ
  1413. #個数は省略可能、自動で1扱い。
  1414. #また、ドロップアイテムと同一にしたい場合は
  1415. #エネミーネームに -nd 個数(-nd 2) と入れて指定。
  1416. #個数は省略可能、自動で1扱い。
  1417. #===================================================

  1418. def normal_item
  1419. return get_item_from_name("n")#オプション"n"の文字列から取得
  1420. end

  1421. #===================================================
  1422. #レアアイテムの指定 
  1423. #エネミーネームに -r種類 ID 個数(-na 10 10) と入れて指定。
  1424. #種類は、i(アイテム) w(武器) a(防具)のいずれか一つ
  1425. #個数は省略可能、自動で1扱い。
  1426. #また、ドロップアイテムと同一にしたい場合は
  1427. #エネミーネームに -rd 個数(-nd 2) と入れて指定。
  1428. #個数は省略可能、自動で1扱い。
  1429. #===================================================

  1430. def rare_item
  1431. return get_item_from_name("r")#オプション"r"の文字列から取得
  1432. end

  1433. #===================================================
  1434. #*Nameからアイテムを抜き出す処理
  1435. #===================================================
  1436. def get_item_from_name(opt)
  1437. names = $data_enemies[@enemy_id].name.split(/-/)
  1438. if names.size > 1
  1439. for i in 1...names.size
  1440. if names[i][0,1] != opt
  1441. next
  1442. end

  1443. names[i].sub!(/^.(.*)/){$1}
  1444. ary = names[i].split(/ /)

  1445. if ary[0][0,1] == "g"
  1446. cgy = "g"
  1447. id = 0
  1448. if ary[1].nil?
  1449. ary[1] = "1"
  1450. elsif ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1451. ary[1] = "1"
  1452. end
  1453. possession = {"Category"=>cgy, "ID"=>id, "Num"=>ary[1].to_i}
  1454. return possession

  1455. elsif ary[0][0,1] == "d"
  1456. cgy = ""
  1457. id = 0
  1458. if self.item_id != 0
  1459. cgy = "i"
  1460. id = self.item_id
  1461. elsif self.weapon_id != 0
  1462. cgy = "w"
  1463. id = self.weapon_id
  1464. elsif self.armor_id != 0
  1465. cgy = "a"
  1466. id = self.armor_id
  1467. else
  1468. return nil
  1469. end

  1470. if ary[1].nil?
  1471. ary[1] = "1"
  1472. elsif ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1473. ary[1] = "1"
  1474. end
  1475. possession = {"Category"=>cgy, "ID"=>id, "Num"=>ary[1].to_i}
  1476. return possession

  1477. elsif !ary[0].sub!(/^([iwa])/){$1}.nil? && !ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1478. if ary[2].nil? || ary[2].sub!(/^([0-9]+)/){$1}.nil?
  1479. ary[2] = "1"
  1480. end
  1481. possession = {"Category"=>ary[0], "ID"=>ary[1].to_i, "Num"=>ary[2].to_i}
  1482. return possession

  1483. end
  1484. end
  1485. end
  1486. return nil
  1487. end

  1488. #===================================================
  1489. #スティールエフェクト
  1490. #===================================================

  1491. def steal_effect(user, skill) # 引数skillを追加

  1492. pos = self.normal_item

  1493. if !@item_possession || pos.nil?
  1494. @effect_message = "没有东西可偷。"
  1495. #self.damage = "Miss"
  1496. return false
  1497. end

  1498. #盗み成功判定 アジリティが同一で50%、2倍で100%
  1499. if rand(100) <= ((user.agi+0.01)/(self.agi+0.01))*100/2
  1500. r_pos = self.rare_item
  1501. #レアアイテム判定
  1502. if !r_pos.nil? && rand(10) <= 1
  1503. pos = r_pos
  1504. end

  1505. case pos["Category"]
  1506. when "i"
  1507. item = $data_items[pos["ID"]]
  1508. if item.nil?
  1509. print "这个物品不存在!"
  1510. return false
  1511. end
  1512. $game_party.gain_item(item.id, pos["Num"])
  1513. when "w"
  1514. item = $data_weapons[pos["ID"]]
  1515. if item.nil?
  1516. print "这个物品不存在!"
  1517. return false
  1518. end
  1519. $game_party.gain_weapon(item.id, pos["Num"])
  1520. when "a"
  1521. item = $data_armors[pos["ID"]]
  1522. if item.nil?
  1523. print "这个物品不存在!"
  1524. return false
  1525. end
  1526. $game_party.gain_armor(item.id, pos["Num"])
  1527. when "g"
  1528. # ゴールド獲得
  1529. $game_party.gain_gold(pos["Num"])
  1530. end

  1531. if pos["Category"] == "g"
  1532. @effect_message = "#{pos["Num"]}#{$data_system.words.gold}偷到!"
  1533. else
  1534. @effect_message = "#{item.name}#{pos["Num"]}个偷到!"
  1535. end
  1536. @item_possession = false

  1537. self.damage = "Steal!" if self.damage == "Miss"
  1538. return true
  1539. else
  1540. @effect_message = "没有东西可偷???"
  1541. #self.damage = "Miss
  1542. return false
  1543. end

  1544. return false # 念のためfalse返す処理追加
  1545. # 多分なくてもifの結果(false)が返ると思うけど…
  1546. end
  1547. end
  1548. #=============================================================================
  1549. # ■ ライブラ スキル実装スクリプト 2004/09/24 - 0.1α
  1550. #=============================================================================
  1551. class Game_Battler
  1552. #--------------------------------------------------------------------------
  1553. # ● 追加公開インスタンス変数
  1554. #--------------------------------------------------------------------------
  1555. attr_accessor :libla_reserve # ライブラ予約
  1556. #--------------------------------------------------------------------------
  1557. # ● 初期化
  1558. #--------------------------------------------------------------------------
  1559. alias before_libra_initialize initialize

  1560. def initialize
  1561. before_libra_initialize
  1562. # 「ライブラ」属性のID取得
  1563. @libra_element_id = $data_system.elements.index(LIBLA_SKILL_ELEMENT_NAME)
  1564. @libra_element_id = 0 if @libra_element_id.nil?
  1565. # 今回の行動フェイズでライブラを受けたかどうかフラグ、初期化
  1566. @libla_reserve = false
  1567. end
  1568. #--------------------------------------------------------------------------
  1569. # ● スキルの効果適用
  1570. # user : 使用者 (バトラー)
  1571. # skill: スキル
  1572. #--------------------------------------------------------------------------
  1573. alias before_libra_skill_effect skill_effect
  1574. def skill_effect(user, skill)
  1575. #「ライブラ」スキルかどうかの判定。
  1576. if skill.element_set.include?(@libra_element_id)
  1577. # 命中率を適用する場合は下のif文のコメントを外してください
  1578. #if rand(100) < skill.hit
  1579. # このバトラーがエネミーなら情報ウィンドウを表示する
  1580. if self.is_a?(Game_Enemy)
  1581. self.libla_reserve = true
  1582. end
  1583. # 命中率を適用する場合は下のelse~endのコメントを外してください
  1584. #else
  1585. # self.damage = "Miss"
  1586. #end
  1587. # 普通のスキル判定は行わない。
  1588. return true
  1589. else
  1590. return before_libra_skill_effect(user, skill)
  1591. end
  1592. end
  1593. end
  1594. #==============================================================================
  1595. # ■ Scene_Battle
  1596. #==============================================================================
  1597. class Scene_Battle
  1598. #--------------------------------------------------------------------------
  1599. # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  1600. #--------------------------------------------------------------------------
  1601. alias before_libra_update_phase4_step5 update_phase4_step5
  1602. def update_phase4_step5
  1603. # ダメージ表示
  1604. for target in @target_battlers
  1605. if target.libla_reserve
  1606. libra_window = Window_EnemyStatus.new(target)
  1607. loop do
  1608. # ゲーム画面を更新
  1609. Graphics.update
  1610. # 入力情報を更新
  1611. Input.update
  1612. # ボタンが押されたら情報ウィンドウを閉じてループを中断
  1613. if Input.trigger?(Input::C) or Input.trigger?(Input::B)
  1614. libra_window.dispose
  1615. libra_window = nil
  1616. break
  1617. end
  1618. end
  1619. end
  1620. # ライブラ予約フラグを解除
  1621. target.libla_reserve = false
  1622. end
  1623. before_libra_update_phase4_step5
  1624. end
  1625. end
  1626. #==============================================================================
  1627. # ■ Window_EnemyStatus
  1628. #------------------------------------------------------------------------------
  1629. #  エネミーのステータスを表示するステータスウィンドウです。
  1630. #==============================================================================
  1631. class Window_EnemyStatus < Window_Base
  1632. #--------------------------------------------------------------------------
  1633. # ● オブジェクト初期化
  1634. # enemy : エネミー
  1635. #--------------------------------------------------------------------------
  1636. def initialize(enemy)
  1637. super(0, 64, 640, 256)
  1638. self.contents = Bitmap.new(width - 32, height - 32)
  1639. self.back_opacity = 127
  1640. @enemy = enemy
  1641. refresh
  1642. end
  1643. #--------------------------------------------------------------------------
  1644. # ● リフレッシュ
  1645. #--------------------------------------------------------------------------
  1646. def refresh
  1647. self.contents.clear
  1648. draw_enemy_name(@enemy, 4, 0)
  1649. draw_enemy_state(@enemy, 4, 48)
  1650. draw_enemy_hp(@enemy,196, 48, 172)
  1651. draw_enemy_sp(@enemy,196, 72, 172)
  1652. draw_enemy_parameter(@enemy, 4, 120, 0)
  1653. draw_enemy_parameter(@enemy, 4, 144, 1)
  1654. draw_enemy_parameter(@enemy, 4, 168, 2)
  1655. draw_enemy_parameter(@enemy, 4, 192, 7)
  1656. draw_enemy_parameter(@enemy,196, 120, 3)
  1657. draw_enemy_parameter(@enemy,196, 144, 4)
  1658. draw_enemy_parameter(@enemy,196, 168, 5)
  1659. draw_enemy_parameter(@enemy,196, 192, 6)
  1660. self.contents.font.color = system_color
  1661. self.contents.draw_text(384, 24, 80, 32, "EXP")
  1662. self.contents.draw_text(384, 48, 80, 32, "金钱")
  1663. self.contents.draw_text(384, 96, 96, 32, "战利品")
  1664. self.contents.draw_text(384, 144, 96, 32, "偷窃物")
  1665. self.contents.font.color = normal_color
  1666. self.contents.draw_text(384 + 80, 24, 84, 32, @enemy.exp.to_s, 2)
  1667. self.contents.draw_text(384 + 80, 48, 84, 32, @enemy.gold.to_s, 2)
  1668. draw_item_name(get_enemy_item(@enemy,1), 384 + 16, 120)
  1669. draw_item_name(get_enemy_item(@enemy,2), 384 + 16, 168)
  1670. draw_item_name(get_enemy_item(@enemy,3), 384 + 16, 192)
  1671. end
  1672. #--------------------------------------------------------------------------
  1673. # ○ アイテムの取得
  1674. #--------------------------------------------------------------------------
  1675. def get_enemy_item( enemy, type )
  1676. case type
  1677. when 1:
  1678. if enemy.item_id != nil and enemy.item_id != 0
  1679. return $data_items[enemy.item_id]
  1680. elsif enemy.weapon_id != nil and enemy.weapon_id != 0
  1681. return $data_weapons[enemy.weapon_id]
  1682. elsif enemy.armor_id != nil and enemy.armor_id != 0
  1683. return $data_armors[enemy.armor_id]
  1684. else
  1685. return nil
  1686. end
  1687. when 2:
  1688. info = enemy.get_item_from_name("n")
  1689. return nil if info == nil
  1690. case info["Category"]
  1691. when "i"
  1692. return $data_items[info["ID"]]
  1693. when "w"
  1694. return $data_weapons[info["ID"]]
  1695. when "a"
  1696. return $data_armors[info["ID"]]
  1697. otherwise
  1698. return nil
  1699. end
  1700. when 3:
  1701. info = enemy.get_item_from_name("r")
  1702. return nil if info == nil
  1703. case info["Category"]
  1704. when "i"
  1705. return $data_items[info["ID"]]
  1706. when "w"
  1707. return $data_weapons[info["ID"]]
  1708. when "a"
  1709. return $data_armors[info["ID"]]
  1710. otherwise
  1711. return nil
  1712. end
  1713. otherwise
  1714. return nil
  1715. end
  1716. end
  1717. #--------------------------------------------------------------------------
  1718. # ● 名前の描画
  1719. # enemy : エネミー
  1720. # x : 描画先 X 座標
  1721. # y : 描画先 Y 座標
  1722. #--------------------------------------------------------------------------
  1723. def draw_enemy_name(enemy, x, y)
  1724. self.contents.font.color = normal_color
  1725. self.contents.draw_text(x, y, 120, 32, enemy.name)
  1726. end
  1727. #--------------------------------------------------------------------------
  1728. # ● ステートの描画
  1729. # enemy : エネミー
  1730. # x : 描画先 X 座標
  1731. # y : 描画先 Y 座標
  1732. # width : 描画先の幅
  1733. #--------------------------------------------------------------------------
  1734. def draw_enemy_state(enemy, x, y, width = 120)
  1735. text = make_battler_state_text(enemy, width, true)
  1736. self.contents.font.color = enemy.hp == 0 ? knockout_color : normal_color
  1737. self.contents.draw_text(x, y, width, 32, text)
  1738. end
  1739. #--------------------------------------------------------------------------
  1740. # ● HP の描画
  1741. # enemy : エネミー
  1742. # x : 描画先 X 座標
  1743. # y : 描画先 Y 座標
  1744. # width : 描画先の幅
  1745. #--------------------------------------------------------------------------
  1746. def draw_enemy_hp(enemy, x, y, width = 144)
  1747. # 文字列 "HP" を描画
  1748. self.contents.font.color = system_color
  1749. self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
  1750. # MaxHP を描画するスペースがあるか計算
  1751. if width - 32 >= 108
  1752. hp_x = x + width - 108
  1753. flag = true
  1754. elsif width - 32 >= 48
  1755. hp_x = x + width - 48
  1756. flag = false
  1757. end
  1758. # HP を描画
  1759. self.contents.font.color = enemy.hp == 0 ? knockout_color :
  1760. enemy.hp <= enemy.maxhp / 4 ? crisis_color : normal_color
  1761. self.contents.draw_text(hp_x, y, 48, 32, enemy.hp.to_s, 2)
  1762. # MaxHP を描画
  1763. if flag
  1764. self.contents.font.color = normal_color
  1765. self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)
  1766. self.contents.draw_text(hp_x + 60, y, 48, 32, enemy.maxhp.to_s)
  1767. end
  1768. end
  1769. #--------------------------------------------------------------------------
  1770. # ● SP の描画
  1771. # enemy : エネミー
  1772. # x : 描画先 X 座標
  1773. # y : 描画先 Y 座標
  1774. # width : 描画先の幅
  1775. #--------------------------------------------------------------------------
  1776. def draw_enemy_sp(enemy, x, y, width = 144)
  1777. # 文字列 "SP" を描画
  1778. self.contents.font.color = system_color
  1779. self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
  1780. # MaxSP を描画するスペースがあるか計算
  1781. if width - 32 >= 108
  1782. sp_x = x + width - 108
  1783. flag = true
  1784. elsif width - 32 >= 48
  1785. sp_x = x + width - 48
  1786. flag = false
  1787. end
  1788. # SP を描画
  1789. self.contents.font.color = enemy.sp == 0 ? knockout_color :
  1790. enemy.sp <= enemy.maxsp / 4 ? crisis_color : normal_color
  1791. self.contents.draw_text(sp_x, y, 48, 32, enemy.sp.to_s, 2)
  1792. # MaxSP を描画
  1793. if flag
  1794. self.contents.font.color = normal_color
  1795. self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
  1796. self.contents.draw_text(sp_x + 60, y, 48, 32, enemy.maxsp.to_s)
  1797. end
  1798. end
  1799. #--------------------------------------------------------------------------
  1800. # ● パラメータの描画
  1801. # enemy : エネミー
  1802. # x : 描画先 X 座標
  1803. # y : 描画先 Y 座標
  1804. # type : パラメータの種類 (0~6)
  1805. #--------------------------------------------------------------------------
  1806. def draw_enemy_parameter(enemy, x, y, type)
  1807. case type
  1808. when 0
  1809. parameter_name = $data_system.words.atk
  1810. parameter_value = enemy.atk
  1811. when 1
  1812. parameter_name = $data_system.words.pdef
  1813. parameter_value = enemy.pdef
  1814. when 2
  1815. parameter_name = $data_system.words.mdef
  1816. parameter_value = enemy.mdef
  1817. when 3
  1818. parameter_name = $data_system.words.str
  1819. parameter_value = enemy.str
  1820. when 4
  1821. parameter_name = $data_system.words.dex
  1822. parameter_value = enemy.dex
  1823. when 5
  1824. parameter_name = $data_system.words.agi
  1825. parameter_value = enemy.agi
  1826. when 6
  1827. parameter_name = $data_system.words.int
  1828. parameter_value = enemy.int
  1829. when 7
  1830. parameter_name = "回避"
  1831. parameter_value = enemy.eva
  1832. end
  1833. self.contents.font.color = system_color
  1834. self.contents.draw_text(x, y, 120, 32, parameter_name)
  1835. self.contents.font.color = normal_color
  1836. self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
  1837. end
  1838. end
  1839. #=============================================================================
  1840. # ◇ ちからため スキル実装スクリプト by 和希
  1841. #=============================================================================
  1842. class Game_Battler
  1843. #--------------------------------------------------------------------------
  1844. # ● 追加公開インスタンス変数
  1845. #--------------------------------------------------------------------------
  1846. attr_accessor :powerstock # 「ちからため」回数
  1847. attr_accessor :action_message # ヘルプウィンドウに表示する文字
  1848. #--------------------------------------------------------------------------
  1849. # ● 初期化
  1850. #--------------------------------------------------------------------------
  1851. alias before_powerstock_original_initialize initialize
  1852. def initialize
  1853. before_powerstock_original_initialize
  1854. @powerstock = 0
  1855. @powerstock_skill_id = $data_system.elements.index(POWERSTOCK_SKILL_ELEMENT_NAME)
  1856. @powerstock_skill_id = 0 if @powerstock_skill_id == nil
  1857. @effect_message = nil
  1858. end
  1859. #--------------------------------------------------------------------------
  1860. # ● 通常攻撃の効果適用
  1861. # attacker : 攻撃者 (バトラー)
  1862. #--------------------------------------------------------------------------
  1863. alias before_powerstock_original_attack_effect attack_effect
  1864. def attack_effect(attacker)
  1865. # 攻撃者が「ちからため」しているか?
  1866. if attacker.powerstock > 0
  1867. bool_powerstock = true
  1868. # 攻撃者の力を一時的に上昇させる
  1869. stock_attacker_str = attacker.str
  1870. attacker.str += ( stock_attacker_str * POWERSTOCK_BASE_RATE * attacker.powerstock ).to_i
  1871. # ヘルプメッセージに「ちからためx?」を出す
  1872. @action_message = POWERSTOCK_SKILL_ELEMENT_NAME
  1873. @action_message += " x"
  1874. @action_message += attacker.powerstock.to_s
  1875. # ストックを消す
  1876. attacker.powerstock = 0
  1877. else
  1878. bool_powerstock = false
  1879. end
  1880. # fukuyamaさん↓のミス発見ありがとうございました
  1881. result = before_powerstock_original_attack_effect(attacker)
  1882. # 力を上昇させていた場合、元に戻す
  1883. if bool_powerstock
  1884. attacker.str = stock_attacker_str
  1885. end
  1886. return result
  1887. end
  1888. #--------------------------------------------------------------------------
  1889. # ● スキルの効果適用
  1890. # user : 使用者 (バトラー)
  1891. # skill: スキル
  1892. #--------------------------------------------------------------------------
  1893. alias before_powerstock_original_skill_effect skill_effect
  1894. def skill_effect(user, skill)
  1895. #「ちからため」スキルかどうかの判定。
  1896. if skill.element_set.include?(@powerstock_skill_id)
  1897. # 命中率を適用する場合は下のif文のコメントを外してください
  1898. #if rand(100) < skill.hit
  1899. @powerstock += 1 # 「ちからため」回数を1増やす
  1900. # ダメージに"Charge"をセットする
  1901. self.damage = "Charge"
  1902. # 命中率を適用する場合は下のelse~endのコメントを外してください
  1903. #else
  1904. # self.damage = "Miss"
  1905. #end
  1906. # 普通のスキル判定は行わない。
  1907. return true
  1908. else
  1909. return before_powerstock_original_skill_effect(user, skill)
  1910. end
  1911. end
  1912. end
  1913. #=============================================================================
  1914. # ◇ 見切りステート by 和希
  1915. #=============================================================================
  1916. class Game_Battler
  1917. # 見切りステートの名前
  1918. ABANDONS_SKILL_STATE_NAME = "断念"
  1919. #--------------------------------------------------------------------------
  1920. # ● 通常攻撃の効果適用
  1921. #--------------------------------------------------------------------------
  1922. alias before_abandons_original_attack_effect attack_effect

  1923. def attack_effect(attacker)
  1924. # 見切りステートが存在するか?
  1925. if nil != (abandons_skill = get_abandons_id)
  1926. # 見切りステートにかかっているか?
  1927. if self.state?(abandons_skill)
  1928. ## 避ける!
  1929. # クリティカルフラグをクリア
  1930. self.critical = false
  1931. # ダメージに "Avoid!!" を設定
  1932. self.damage = "Avoid!!"
  1933. # 見切りステートを解除
  1934. self.remove_state(abandons_skill,true)
  1935. # メソッド終了
  1936. return false
  1937. end
  1938. end
  1939. # 見切りステート状態でなかった時は通常どおり
  1940. return before_abandons_original_attack_effect(attacker)
  1941. end
  1942. #--------------------------------------------------------------------------
  1943. # ● 見切りステータスのID取得
  1944. #--------------------------------------------------------------------------
  1945. def get_abandons_id
  1946. result = nil
  1947. if @abandons_status_id == nil
  1948. for i in 1 ... $data_states.size
  1949. if $data_states[i].name[/\A#{ABANDONS_SKILL_STATE_NAME}\Z/]
  1950. result = $data_states[i].id
  1951. break
  1952. end
  1953. end
  1954. @abandons_status_id = ( result != nil ? result : 0 )
  1955. elsif @abandons_status_id > 0
  1956. result = @abandons_status_id
  1957. end
  1958. return result
  1959. end
  1960. end
  1961. #=============================================================================
  1962. # ◇ かばう by シムナフ
  1963. #=============================================================================
  1964. #==============================================================================
  1965. # ■ Scene_Battle
  1966. #==============================================================================
  1967. class Scene_Battle
  1968. #追加
  1969. attr_reader :active_battler
  1970. #ここまで
  1971. ##新メソッド
  1972. def make_cover_skill_action_result
  1973. cover_num = 0
  1974. cover_bool = false
  1975. for i in @skill.element_set
  1976. if !($data_system.elements[i][/^#{ELEMENT_NAME_COVER}/].nil?)
  1977. cover_bool = true
  1978. elm_num = $data_system.elements[i][/([+-]*[0-9]+)/]
  1979. if !(elm_num.nil?)
  1980. cover_num += elm_num.to_i
  1981. end
  1982. end
  1983. end

  1984. if cover_bool.equal?(true)
  1985. ##自分のみが対象だった場合は味方からランダムに1人をかばう
  1986. if @target_battlers.include?(@active_battler)
  1987. if @target_battlers.size == 1
  1988. if @target_battlers[0].is_a?(Game_Actor)
  1989. friends = $game_party.actors.dup
  1990. friends.delete(@active_battler)
  1991. @target_battlers = [friends[rand(friends.size)]]
  1992. elsif @target_battlers[0].is_a?(Game_Enemy)
  1993. friends = $game_troop.enemies.dup
  1994. friends.delete(@active_battler)
  1995. @target_battlers = [friends[rand(friends.size)]]
  1996. end
  1997. else
  1998. @target_battlers.delete(@active_battler)
  1999. end
  2000. end

  2001. @active_battler.covered_friends = @target_battlers.dup
  2002. @active_battler.add_state(get_cover_state_id())##ステート付加時にデフォルト回数で発動回数が設定される
  2003. if (cover_num > 0)
  2004. @active_battler.cover_remain = cover_num#発動回数が有った場合はその回数で上書き
  2005. end
  2006. for target in @target_battlers
  2007. target.damage = COVER_EFFECT_CHAR
  2008. end
  2009. end
  2010. end
  2011. ##ここまで
  2012. end

  2013. class Game_Party
  2014. ##追加エイリアス
  2015. include Cover_Module
  2016. #--------------------------------------------------------------------------
  2017. # ● 対象アクターのスムーズな決定
  2018. # actor_index : アクターインデックス
  2019. #--------------------------------------------------------------------------

  2020. alias before_cover_original_smooth_target_actor smooth_target_actor

  2021. def smooth_target_actor(actor_index)
  2022. if $scene.is_a?(Scene_Battle)
  2023. battler = $scene.active_battler()
  2024. else
  2025. battler = nil
  2026. end

  2027. target = [before_cover_original_smooth_target_actor(actor_index)]
  2028. get_target_battlers_after_cover!(target, battler)

  2029. return target[0]
  2030. end
  2031. ##ここまで
  2032. end

  2033. class Game_Troop
  2034. ##追加エイリアス
  2035. include Cover_Module
  2036. #--------------------------------------------------------------------------
  2037. # ● 対象エネミーのスムーズな決定
  2038. # enemy_index : エネミーインデックス
  2039. #--------------------------------------------------------------------------

  2040. alias before_cover_original_smooth_target_enemy smooth_target_enemy

  2041. def smooth_target_enemy(enemy_index)
  2042. if $scene.is_a?(Scene_Battle)
  2043. battler = $scene.active_battler()
  2044. else
  2045. battler = nil
  2046. end

  2047. target = [before_cover_original_smooth_target_enemy(enemy_index)]
  2048. get_target_battlers_after_cover!(target, battler)

  2049. return target[0]
  2050. end
  2051. ##ここまで
  2052. end


  2053. #==============================================================================
  2054. # ◇ 付加属性名称判定モジュール
  2055. #==============================================================================
  2056. module Check_ElementName_Set
  2057. #--------------------------------------------------------------------------
  2058. # ● スキルが指定名の属性を持つか判定
  2059. #--------------------------------------------------------------------------
  2060. def skill_element_include?(skill, element_name)
  2061. @one = @two = nil
  2062. return false if skill == nil or !skill.is_a?(RPG::Skill)
  2063. for i in skill.element_set
  2064. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2065. @one = $1
  2066. @two = $2
  2067. return true
  2068. end
  2069. end
  2070. return false
  2071. end
  2072. #--------------------------------------------------------------------------
  2073. # ● アイテムが指定名の属性を持つか判定
  2074. #--------------------------------------------------------------------------
  2075. def item_element_include?(item, element_name)
  2076. @one = @two = nil
  2077. return false if item == nil or !item.is_a?(RPG::Item)
  2078. for i in item.element_set
  2079. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2080. @one = $1
  2081. @two = $2
  2082. return true
  2083. end
  2084. end
  2085. return false
  2086. end
  2087. #--------------------------------------------------------------------------
  2088. # ● 武器が指定名の属性を持つか判定
  2089. #--------------------------------------------------------------------------
  2090. def weapon_element_include?(weapon_id, element_name)
  2091. @one = @two = nil
  2092. return false if weapon_id == nil or weapon_id <= 0
  2093. for i in $data_weapons[weapon_id].element_set
  2094. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2095. @one = $1
  2096. @two = $2
  2097. return true
  2098. end
  2099. end
  2100. return false
  2101. end
  2102. #--------------------------------------------------------------------------
  2103. # ● 防具が指定名の属性を持つか判定
  2104. #--------------------------------------------------------------------------
  2105. def armor_element_include?(armor_id, element_name)
  2106. @one = @two = nil
  2107. return false if armor_id == nil or armor_id <= 0
  2108. for i in $data_armors[armor_id].guard_element_set
  2109. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2110. @one = $1
  2111. @two = $2
  2112. return true
  2113. end
  2114. end
  2115. return false
  2116. end
  2117. #--------------------------------------------------------------------------
  2118. # ● 防具が指定名の属性を持つ場合その後に付く接尾テキストを取得
  2119. #--------------------------------------------------------------------------
  2120. def armor_element_suftext(armor_id, element_name)
  2121. return nil if armor_id == nil or armor_id <= 0
  2122. for i in $data_armors[armor_id].guard_element_set
  2123. if $data_system.elements[i] =~ /#{element_name}(.*)/
  2124. return $1
  2125. end
  2126. end
  2127. return nil
  2128. end
  2129. #--------------------------------------------------------------------------
  2130. # ● アクターが指定名の属性を持つ武器を装備しているかか判定
  2131. #--------------------------------------------------------------------------
  2132. def equip_weapon_element_include?(actor, element_name)
  2133. @one = @two = nil
  2134. return false if !actor.is_a?(Game_Actor)
  2135. return false if actor.weapon_id == nil or actor.weapon_id <= 0
  2136. bool = false
  2137. one_total = 0
  2138. for i in $data_weapons[actor.weapon_id].element_set
  2139. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2140. one_total += $1.to_i
  2141. @two = $2
  2142. bool = true
  2143. end
  2144. end
  2145. # 武器管理システムXC.が導入されている場合
  2146. if $xrxs24_weapon_property_system_work
  2147. for i in [PROPERTY_ELEMENT_GRANT_1st, PROPERTY_ELEMENT_GRANT_2nd,
  2148. PROPERTY_ELEMENT_GRANT_3rd, PROPERTY_ELEMENT_GRANT_4th]
  2149. if $data_system.elements[actor.weapon_property[i]] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2150. one_total += $1.to_i
  2151. @two = $2
  2152. bool = true
  2153. end
  2154. end
  2155. end
  2156. @one = one_total
  2157. return bool
  2158. end
  2159. #--------------------------------------------------------------------------
  2160. # ● アクターが指定名の属性を持つ武器/防具を装備中か判定 数値の合計も保持
  2161. #--------------------------------------------------------------------------
  2162. def actor_element_equip?(actor, element_name)
  2163. one_total = 0
  2164. bool = false
  2165. return false if !actor.is_a?(Game_Actor)
  2166. weapon = $data_weapons[actor.weapon_id]
  2167. armor1 = $data_armors[actor.armor1_id]
  2168. armor2 = $data_armors[actor.armor2_id]
  2169. armor3 = $data_armors[actor.armor3_id]
  2170. armor4 = $data_armors[actor.armor4_id]
  2171. if equip_weapon_element_include?(actor, element_name)
  2172. one_total += @one.to_i
  2173. bool = true
  2174. end
  2175. if armor_element_include?(armor1.id, element_name)
  2176. one_total += @one.to_i
  2177. bool = true
  2178. end
  2179. if armor_element_include?(armor2.id, element_name)
  2180. one_total += @one.to_i
  2181. bool = true
  2182. end
  2183. if armor_element_include?(armor3.id, element_name)
  2184. one_total += @one.to_i
  2185. bool = true
  2186. end
  2187. if armor_element_include?(armor4.id, element_name)
  2188. one_total += @one.to_i
  2189. bool = true
  2190. end
  2191. @one = one_total
  2192. return bool
  2193. end
  2194. end
  2195. #=============================================================================
  2196. # ◇ かばうModule
  2197. #=============================================================================
  2198. ####以下新規追加Module
  2199. module Cover_Module
  2200. #--------------------------------------------------------------------------
  2201. # ● かばう 後のターゲット配列生成
  2202. #--------------------------------------------------------------------------
  2203. def get_target_battlers_after_cover!(target_battlers, active_battler = nil)
  2204. #HP割合の低い順にソート
  2205. #target_battlers.sort_by!{|b| (b.hp.to_f/b.maxhp.to_f)}
  2206. target_battlers.sort!{|a,b| (a.hp.to_f/a.maxhp.to_f) <=> (b.hp.to_f/b.maxhp.to_f)}
  2207. #HP割合の多い順にソート
  2208. actors = $game_party.actors.sort_by{|b| (b.hp.to_f/b.maxhp.to_f)}.reverse
  2209. enemies = $game_troop.enemies.sort_by{|b| (b.hp.to_f/b.maxhp.to_f)}.reverse

  2210. for i in 0...target_battlers.size
  2211. if target_battlers[i].is_a?(Game_Actor)
  2212. for actor in actors
  2213. new_target = get_target_after_cover(active_battler,target_battlers[i],actor)
  2214. if !new_target.equal?(target_battlers[i]) && new_target.current_friend.nil? #かばう人がすでにかばっていた場合かばえない
  2215. new_target.effect_message = "#{new_target.name}は#{target_battlers[i].name}をかばった!"
  2216. new_target.current_friend = target_battlers[i]
  2217. new_target.current_friend.damage = COVER_EFFECT_CHAR
  2218. target_battlers[i] = new_target
  2219. break
  2220. end
  2221. end
  2222. end

  2223. if target_battlers[i].is_a?(Game_Enemy)
  2224. for enemy in enemies
  2225. new_target = get_target_after_cover(active_battler,target_battlers[i],enemy)
  2226. if !new_target.equal?(target_battlers[i]) && new_target.current_friend.nil? #かばう人がすでにかばっていた場合かばえない
  2227. new_target.effect_message = "#{new_target.name}は#{target_battlers[i].name}をかばった!"
  2228. new_target.current_friend = target_battlers[i]
  2229. new_target.current_friend.damage = COVER_EFFECT_CHAR
  2230. target_battlers[i] = new_target
  2231. break
  2232. end
  2233. end
  2234. end
  2235. end
  2236. #ターゲット重複を排除する(かばった人が2度ダメージを受けない)
  2237. target_battlers.uniq!()
  2238. #「かばう」ステートの解除判定
  2239. for target in target_battlers
  2240. if !target.current_friend.nil?
  2241. #かばう 残り回数がなくなった場合
  2242. target.cover_remain -= 1
  2243. if target.cover_remain <= 0
  2244. target.remove_state(get_cover_state_id())
  2245. target.cover_remain = 0
  2246. end
  2247. end
  2248. end
  2249. end
  2250. #--------------------------------------------------------------------------
  2251. # ● かばう の発動判定
  2252. #--------------------------------------------------------------------------
  2253. def get_target_after_cover(battler, target, coverer)
  2254. #味方からのターゲットは庇わない
  2255. if battler.is_a?(Game_Actor)
  2256. if target.is_a?(Game_Actor)
  2257. return target
  2258. end
  2259. end
  2260. if battler.is_a?(Game_Enemy)
  2261. if target.is_a?(Game_Enemy)
  2262. return target
  2263. end
  2264. end
  2265. #庇う人が動けない時は庇わない
  2266. if !(coverer.movable? && coverer.exist?)
  2267. return target
  2268. end
  2269. #庇う人が かばう のステートになっている時のみ
  2270. if !coverer.state?(get_cover_state_id())
  2271. return target
  2272. end
  2273. #ターゲットが既に他の人を庇っている時は無効
  2274. if target.state?(get_cover_state_id())
  2275. return target
  2276. end
  2277. #ターゲットと庇う人が同じの場合は無効
  2278. if target.equal?(coverer)
  2279. return target
  2280. end
  2281. #発動確率判定
  2282. if !(rand(100) <= COVER_EFFECT_PERCENT)
  2283. return taget
  2284. end
  2285. #ターゲットのHP割合判定
  2286. if !(100.0*target.hp.to_f/target.maxhp.to_f <= COVER_HP_PERCENT)
  2287. return target
  2288. end
  2289. #「かばっている味方配列」が空だったら、全ての味方を庇う
  2290. if coverer.covered_friends.size.zero?
  2291. return coverer
  2292. else
  2293. for covered_friend in coverer.covered_friends
  2294. if target.equal?(covered_friend)
  2295. return coverer
  2296. end
  2297. end
  2298. end
  2299. return target
  2300. end
  2301. #--------------------------------------------------------------------------
  2302. # ● かばう のStateID
  2303. #--------------------------------------------------------------------------
  2304. def get_cover_state_id
  2305. result = nil
  2306. if @cover_status_id == nil
  2307. for i in 1 ... $data_states.size
  2308. if $data_states[i].name[/\A#{STATE_NAME_COVER}\Z/]
  2309. result = $data_states[i].id
  2310. break
  2311. end
  2312. end
  2313. @cover_status_id = ( result != nil ? result : 0 )
  2314. elsif @cover_status_id > 0
  2315. result = @cover_status_id
  2316. end
  2317. return result
  2318. end
  2319. end
  2320. ####Module End
  2321. #//////////////////////////////////////////////////////////////////////////////
  2322. # ◇ インクルード
  2323. #//////////////////////////////////////////////////////////////////////////////
  2324. module Check_ElementName_Set
  2325. include Fixed_PropertyNumber if $xrxs24_weapon_property_system_work
  2326. end
  2327. class Game_Battler
  2328. include Check_ElementName_Set
  2329. include Cover_Module
  2330. end
  2331. class Window_Item < Window_Selectable
  2332. include Check_ElementName_Set
  2333. end
  2334. class Scene_Battle
  2335. include Check_ElementName_Set
  2336. include Cover_Module
  2337. end
  2338. #==============================================================================
  2339. # ◇ RPG::再定義「"SP "を含む場合SPダメージとして色を変更」
  2340. #==============================================================================
  2341. module RPG
  2342. class Sprite < ::Sprite
  2343. alias xrxs19_damage damage
  2344. def damage(value, critical)
  2345. if value.is_a?(String) and value.include?($data_system.words.sp)
  2346. # 解放
  2347. dispose_damage
  2348. # 数値部分を抜き取る
  2349. value = value.scan(/[+-]?[0-9]+/)[0].to_i
  2350. # 表示文字列の設定
  2351. damage_string = $data_system.words.sp + " " + value.abs.to_s
  2352. # 描写
  2353. bitmap = Bitmap.new(160, 48)
  2354. bitmap.font.name = "黑体"
  2355. bitmap.font.size = 32
  2356. bitmap.font.color.set(0, 0, 0)
  2357. bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  2358. bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  2359. bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  2360. bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  2361. if value < 0
  2362. bitmap.font.color.set(128, 255, 255)
  2363. else
  2364. bitmap.font.color.set(255, 176, 144)
  2365. end
  2366. bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  2367. if critical
  2368. bitmap.font.size = 20
  2369. bitmap.font.color.set(0, 0, 0)
  2370. bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  2371. bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  2372. bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  2373. bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  2374. bitmap.font.color.set(255, 255, 255)
  2375. bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  2376. end
  2377. @_damage_sprite = ::Sprite.new(self.viewport)
  2378. @_damage_sprite.bitmap = bitmap
  2379. @_damage_sprite.ox = 80
  2380. @_damage_sprite.oy = 20
  2381. @_damage_sprite.x = self.x
  2382. @_damage_sprite.y = self.y - self.oy / 2
  2383. @_damage_sprite.z = 3000
  2384. @_damage_duration = 40
  2385. else
  2386. # 通常時?戻す
  2387. xrxs19_damage(value, critical)
  2388. end
  2389. end
  2390. end
  2391. end

  2392. #==============================================================================
  2393. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  2394. #==============================================================================
复制代码

Lv1.梦旅人

梦石
0
星屑
50
在线时间
24 小时
注册时间
2015-1-20
帖子
7
2
 楼主| 发表于 2015-2-20 02:09:41 | 只看该作者
{:2_272:}打扰了……已经自行解决了问题
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 04:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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