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

Project1

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

[原创发布] XP全动画脚本修改版

[复制链接]

Lv5.捕梦者

梦石
0
星屑
36462
在线时间
10800 小时
注册时间
2009-3-15
帖子
4815
跳转到指定楼层
1
发表于 2017-3-30 00:10:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 RyanBern 于 2017-6-4 13:46 编辑

修改自XP全动画战斗脚本
增加战斗中位移功能
全战斗动画战斗脚本修改位移BY:SOULSAGA
设置都在数据库里
指定动画编号的SE与闪烁时机里面SE文件名包含X移动就是X位移 包含Y移动就是Y位移
红绿蓝相加就是最终位移坐标值
強度(其实应该叫不透明度)为0时往左移动1时往右
SE文件名包含Y移动就会是Y位移
不透明度为0时往下移动为1时往上
SE音量除5 = 移位移动次数 每1SE持续帧数移动1次
用法:复制战斗特效和全动画战斗最终版本脚本插入到MAIN上面
1号动画ID用来给普攻用了..想改变的话修改战斗特效脚本1888行的$se_skill_id = 1

以下脚本
RUBY 代码复制
  1. #==============================================================================
  2. # ■ 全动画战斗系统(修改加强再加强版)感谢soulsaga修正敌方死亡消失时间
  3. #812行左右有常规设定
  4. #------------------------------------------------------------------------------
  5. #  By whbm
  6. #   应用脚本 彩虹神剑 By 66
  7. #位移脚本 by SOULSAGA
  8. #简要介绍:
  9. #    本脚本实现了战斗的动态效果,其中包含了待机、攻击、防御、挨打、胜利、死亡。类似于超级横版、超级战斗。但是本系统特色在于所有效果的实现并不是靠庞大的战斗图,
  10. #而是使用了数据库中的动画。这样不仅突破了不同人不同祯数量的限制,并且方便了单动画单祯的修改。
  11. #使用方法:
  12. #   
  13. #    1.数据库的设置
  14. #      敌人必要的动画有待机、挨打、死亡三个必要的动画
  15. #      角色必要的动画有待机、挨打、防御、死亡动态、胜利动态、死亡静态、胜利静态
  16. #
  17. #      死亡静态与胜利静态:动画中只有1祯,为相应动态动画的最后一祯
  18. #      
  19. #      剩下的就是人物攻击的动画,和正常的动画是一样设置
  20. #      如图中的攻击等待动画只是为了在播放攻击动画的同时消除人物本身(素材原因,人物攻击的时候离开了原位,如果是在原位置放魔法是用不上的)
  21. #    2.战斗图的设置
  22. #      战斗图其实只是一个透明的图片,它只是用来描述一个敌人或者角色的大小,并与相应的战斗动画编号相衔接。
  23. #      战斗图的文件名格式如下:
  24. #          名字★待机★防御★挨打★死亡动态★死亡静态★胜利动态★胜利静态★施法动画(本人自己添加的).png
  25. #          (其中“名字”一项与动画无关)
  26. #          例如:
  27. #          紫烟★140★141★148★149★150★144★145★146.png
  28. #      对于敌人无胜利动画或者防御动画,请保持该位置为空,例如:
  29. #          蓝若冰★124★★126★127★128★★★129.png
  30. #    综上,设置就这么完成了。
  31. #注意!设置战斗动画的闪烁时,不能用画面闪烁,只能用角色闪烁,否则伤害显示会混乱
  32. #==============================================================================
  33.     $fangyu = 0
  34.     Skill_full_animation=[141,555,663,896,1147,1149,1151,1512,1508,1153,]
  35.     #这里添加人物出手方全屏动画的位置。数字等于动画id.
  36. #################################################################
  37. #此处更改是为了增加状态画面
  38. ##################################################################
  39. #================
  40. module RPG
  41.   class Sprite < ::Sprite
  42.     @@_animations = []
  43.     @@_reference_count = {}
  44.     def dispose
  45.       dispose_damage
  46.       dispose_animation
  47.       dispose_loop_animation
  48.        dispose_loop_animation1
  49.       super
  50.     end
  51.    def loop_animation1(animation)
  52.       return if animation == @_loop_animation1
  53.       dispose_loop_animation1
  54.       @_loop_animation1 = animation
  55.       return if @_loop_animation1 == nil
  56.       @_loop_animation1_index = 0
  57.       animation_name = @_loop_animation1.animation_name
  58.       animation_hue = @_loop_animation1.animation_hue
  59.       bitmap = RPG::Cache.animation(animation_name, animation_hue)
  60.       if @@_reference_count.include?(bitmap)
  61.         @@_reference_count[bitmap] += 1
  62.       else
  63.         @@_reference_count[bitmap] = 1
  64.       end
  65.       @_loop_animation1_sprites = []
  66.       for i in 0..15
  67.         sprite = ::Sprite.new(self.viewport)
  68.         sprite.bitmap = bitmap
  69.         sprite.visible = false
  70.         @_loop_animation1_sprites.push(sprite)
  71.       end
  72.       update_loop_animation1
  73.     end
  74.     def dispose_loop_animation1
  75.       if @_loop_animation1_sprites != nil
  76.         sprite = @_loop_animation1_sprites[0]
  77.         if sprite != nil
  78.           @@_reference_count[sprite.bitmap] -= 1
  79.           if @@_reference_count[sprite.bitmap] == 0
  80.             sprite.bitmap.dispose
  81.           end
  82.         end
  83.         for sprite in @_loop_animation1_sprites
  84.           sprite.dispose
  85.         end
  86.         @_loop_animation1_sprites = nil
  87.         @_loop_animation1 = nil
  88.       end
  89.     end
  90.     def update_loop_animation1
  91.       frame_index = @_loop_animation1_index
  92.       cell_data = @_loop_animation1.frames[frame_index].cell_data
  93.       position = @_loop_animation1.position
  94.       animation_set_sprites(@_loop_animation1_sprites, cell_data, position)
  95.       for timing in @_loop_animation1.timings
  96.         if timing.frame == frame_index
  97.           animation_process_timing(timing, true)
  98.         end
  99.       end
  100.     end
  101.   end
  102. end
  103. #===============
  104. #新加部分
  105.  
  106. class Spriteset_Battle
  107.   #--------------------------------------------------------------------------
  108.   # ● 初始化变量
  109.   #--------------------------------------------------------------------------
  110.   def initialize
  111.     # 出手动画帧数
  112.     $fanime_frame_max = 0
  113.     # 生成显示端口
  114.     @viewport1 = Viewport.new(0, 0, 640, 320)
  115.     @viewport2 = Viewport.new(0, 0, 640, 320)
  116.     @viewport3 = Viewport.new(0, 0, 640, 480)
  117.     @viewport4 = Viewport.new(0, 0, 640, 320)
  118.     #@viewport2.z = 101
  119.     @viewport3.z = 200
  120.     @viewport4.z = 5000
  121.     # 生成战斗背景活动块
  122.     @battleback_sprite = Sprite.new(@viewport1)
  123.     # 生成敌人活动块
  124.     @enemy_sprites = []
  125.     for enemy in $game_troop.enemies.reverse
  126.       @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  127.     end
  128.     # 生成角色活动块
  129.     @actor_sprites = []
  130.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  131.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  132.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  133.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  134.     #######################################################
  135.     #若是5人制,加入次行,现在暂时废止
  136.     #  @actor_sprites.push(Sprite_Battler.new(@viewport1))
  137.     #########################################################
  138.     # 生成天候
  139.     @weather = RPG::Weather.new(@viewport1)
  140.     # 生成图片活动块
  141.     @picture_sprites = []
  142.     for i in 51..100
  143.       @picture_sprites.push(Sprite_Picture.new(@viewport3,
  144.         $game_screen.pictures[i]))
  145.     end
  146.     # 生成计时器块
  147.     @timer_sprite = Sprite_Timer.new
  148.     # 刷新画面
  149.     update
  150.   end
  151.   #..........................................................................
  152.   #--------------------------------------------------------------------------
  153.   # ● 胜利图
  154.   #--------------------------------------------------------------------------
  155.   def win
  156.     for sprite in @actor_sprites
  157.       sprite.win
  158.     end
  159.   end
  160.   #..........................................................................
  161.   #--------------------------------------------------------------------------
  162.   # ● 刷新画面
  163.   #--------------------------------------------------------------------------
  164.   def update
  165.     # 刷新角色的活动块 (对应角色的替换)
  166.     @actor_sprites[0].battler = $game_party.actors[0]
  167.     @actor_sprites[1].battler = $game_party.actors[1]
  168.     @actor_sprites[2].battler = $game_party.actors[2]
  169.     @actor_sprites[3].battler = $game_party.actors[3]
  170.     # 战斗背景的文件名与现在情况有差异的情况下
  171.     if @battleback_name != $game_temp.battleback_name
  172.       @battleback_name = $game_temp.battleback_name
  173.       if @battleback_sprite.bitmap != nil
  174.         @battleback_sprite.bitmap.dispose
  175.       end
  176.       @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
  177.       @battleback_sprite.src_rect.set(0, 0, 640, 320)
  178.     end
  179.     # 刷新战斗者的活动块
  180.     for sprite in @enemy_sprites + @actor_sprites
  181.       sprite.update
  182.     end
  183.     # 刷新天气图形
  184.     @weather.type = $game_screen.weather_type
  185.     @weather.max = $game_screen.weather_max
  186.     @weather.update
  187.     # 刷新图片活动块
  188.     for sprite in @picture_sprites
  189.       sprite.update
  190.     end
  191.     # 刷新计时器活动块
  192.     @timer_sprite.update
  193.     # 设置画面的色调与震动位置
  194.     @viewport1.tone = $game_screen.tone
  195.     @viewport1.ox = $game_screen.shake
  196.     # 设置画面的闪烁色
  197.     @viewport4.color = $game_screen.flash_color
  198.     # 刷新显示端口
  199.     @viewport1.update
  200.     @viewport2.update
  201.     @viewport4.update
  202.   end
  203. end
  204. class Arrow_Enemy < Arrow_Base
  205.   #--------------------------------------------------------------------------
  206.   # ● 获取光标指向的敌人
  207.   #--------------------------------------------------------------------------
  208.   def enemy
  209.     return $game_troop.enemies[@index]
  210.   end
  211.   #--------------------------------------------------------------------------
  212.   # ● 刷新画面
  213.   #--------------------------------------------------------------------------
  214.   def update
  215.     super
  216.     # 如果指向不存在的敌人就离开
  217.     $game_troop.enemies.size.times do
  218.       break if self.enemy.exist?
  219.       @index += 1
  220.       @index %= $game_troop.enemies.size
  221.     end
  222.     # 光标右
  223.     if Input.repeat?(Input::RIGHT)
  224.       $game_system.se_play($data_system.cursor_se)
  225.       $game_troop.enemies.size.times do
  226.         @index += 1
  227.         @index %= $game_troop.enemies.size
  228.         break if self.enemy.exist?
  229.       end
  230.     end
  231.     # 光标左
  232.     if Input.repeat?(Input::LEFT)
  233.       $game_system.se_play($data_system.cursor_se)
  234.       $game_troop.enemies.size.times do
  235.         @index += $game_troop.enemies.size - 1
  236.         @index %= $game_troop.enemies.size
  237.         break if self.enemy.exist?
  238.       end
  239.     end
  240.     # 设置活动块坐标
  241.     if self.enemy != nil
  242.       self.x = self.enemy.screen_x + self.ox
  243.       self.y = self.enemy.screen_y + self.oy
  244.     end
  245.   end
  246. end
  247. class Arrow_Actor < Arrow_Base
  248.   #--------------------------------------------------------------------------
  249.   # ● 获取光标指向的角色
  250.   #--------------------------------------------------------------------------
  251.   def actor
  252.     return $game_party.actors[@index]
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● 刷新画面
  256.   #--------------------------------------------------------------------------
  257.   def update
  258.     super
  259.     # 光标右
  260.     if Input.repeat?(Input::RIGHT)
  261.       $game_system.se_play($data_system.cursor_se)
  262.       @index += 1
  263.       @index %= $game_party.actors.size
  264.     end
  265.     # 光标左
  266.     if Input.repeat?(Input::LEFT)
  267.       $game_system.se_play($data_system.cursor_se)
  268.       @index += $game_party.actors.size - 1
  269.       @index %= $game_party.actors.size
  270.     end
  271.     # 设置活动块坐标
  272.     if self.actor != nil
  273.       self.x = self.actor.screen_x + self.ox
  274.       self.y = self.actor.screen_y + self.oy
  275.     end
  276.   end
  277. end
  278. class Scene_Battle
  279.   #--------------------------------------------------------------------------
  280.   # ● 刷新画面 (主回合步骤 3 : 行动方动画)
  281.   #--------------------------------------------------------------------------
  282.   #################################################
  283.   ###############################################
  284.   #此处为了改出自身施法动画做了较大修改
  285.   #恢复性技能要设置一个属性!默认#21
  286.   ###################################################
  287.   ###################################################
  288. def update_phase4_step3
  289.  
  290.   case @active_battler.current_action.kind
  291.  
  292.   when 1
  293.     #-----------------
  294.     #buff技能
  295.     #------------------
  296.  
  297.     ################################################
  298.    if $data_skills[@active_battler.current_action.skill_id].element_set.include?(21)
  299. #给buff型技能设定一个属性,默认21
  300.  
  301.      # 行动方动画 (ID 为 0 的情况下是白色闪烁)
  302.      if @animation1_id == 0
  303.        @active_battler.white_flash = true
  304.      else
  305.        @active_battler.animation_id = @animation1_id
  306.        @active_battler.animation_hit = true
  307.      end
  308.  
  309.     # 限制动画长度、最低 8 帧
  310.     @wait_count = 8
  311.     # 移至步骤 4
  312.     @phase4_step = 4 #转到第四步就会显示了
  313.  
  314.  
  315.     else   
  316.     #$data_skills[@active_battler.current_action.skill_id].element_set.include?(11)
  317.     #------------------------
  318.     #buff之外的技能
  319.     #------------------------
  320.     #=========
  321.     # 行动方动画 (ID 为 0 的情况下是白色闪烁)
  322.     ############################################
  323. # 行动方动画 (ID 为 0 的情况下是白色闪烁)
  324.     if @animation1_id == 0
  325.       @active_battler.white_flash = true
  326.     else
  327.     # 添加施法动画
  328.     $fanime_frame_max = $data_animations[@animation1_id].frame_max
  329. #     @active_battler.setup_battler_ani(@active_battler.battler_name.split(/★/)[8], 1)
  330.       @active_battler.animation_id = @animation1_id
  331.       @active_battler.animation_hit = true
  332.     end
  333.  
  334.   $game_party.actors.each{|i|i.animation_id=@animation1_id}if Skill_full_animation.include?(@animation1_id)
  335.  
  336.     # 对像方动画
  337.     for target in @target_battlers
  338.       target.animation_id = @animation2_id
  339.       target.animation_hit = (target.damage != "Miss")
  340.       ###########################################################
  341.       target.setup_battler_dead_ani(0)
  342.       ############################################################
  343.       #.......................................................................
  344.       if target.is_a?(Game_Actor)
  345.         ##############
  346.         if target.guarding?
  347.           $fangyu = 1
  348.         end
  349.         ##############
  350.         if target.current_action.kind == 0 and target.current_action.basic == 1
  351.            target.setup_battler_ani(target.battler_name.split(/★/)[2], 1)
  352.          #else
  353.            #target.current_action.kind == 0 and target.current_action.basic == 1
  354.           # target.setup_battler_ani(target.battler_name.split(/★/)[3], 0)
  355.            else
  356.          target.setup_battler_hurt_ani(0)
  357.         end
  358.       end
  359.       if target.is_a?(Game_Enemy)
  360.        if target.current_action.kind == 0 and target.current_action.basic == 1
  361.           target.setup_battler_ani(target.battler_name.split(/★/)[1])
  362.         else
  363.           target.setup_battler_hurt_ani(0)
  364.         end
  365.       end
  366.       #.......................................................................
  367.     end
  368.     # 对像方动画
  369.     for target in @target_battlers
  370.       target.animation_id = @animation2_id
  371.       target.animation_hit = (target.damage != "Miss")
  372.       #......................................................................
  373.     end
  374.  
  375.     # 限制动画长度、最低 8 帧
  376.     @wait_count = 8
  377.     # 移至步骤 5
  378.     @phase4_step = 5
  379. end
  380.  
  381.   ###############################################################333
  382.              #----------------
  383.   when 2 #物品
  384.               #----------
  385.      if @animation1_id == 0
  386.       @active_battler.white_flash = true
  387.     else
  388.       @active_battler.animation_id = @animation1_id
  389.       @active_battler.animation_hit = true
  390.     end
  391.  
  392.     # 限制动画长度、最低 8 帧
  393.     @wait_count = 8
  394.     # 移至步骤 4
  395.     @phase4_step = 4
  396.  
  397.   when 0
  398.  
  399.    # 行动方动画 (ID 为 0 的情况下是白色闪烁)
  400.     if @animation1_id == 0
  401.       @active_battler.white_flash = true
  402.     else
  403.     # 添加施法动画
  404. #     @active_battler.setup_battler_ani(@active_battler.battler_name.split(/★/)[8], 1)
  405.       @active_battler.animation_id = @animation1_id
  406.       @active_battler.animation_hit = true
  407.     end
  408.     # 对像方动画
  409.     for target in @target_battlers
  410.       target.animation_id = @animation2_id
  411.       target.animation_hit = (target.damage != "Miss")
  412.       ###########################################################
  413.       target.setup_battler_dead_ani(0)
  414.       ############################################################
  415.       #.......................................................................
  416.       if target.is_a?(Game_Actor)
  417.         ##############
  418.         if target.guarding?
  419.           $fangyu = 1
  420.         end
  421.         ##############
  422.         if target.current_action.kind == 0 and target.current_action.basic == 1
  423.            target.setup_battler_ani(target.battler_name.split(/★/)[2], 1)
  424.          #else
  425.            #target.current_action.kind == 0 and target.current_action.basic == 1
  426.           # target.setup_battler_ani(target.battler_name.split(/★/)[3], 0)
  427.            else
  428.          target.setup_battler_hurt_ani(0)
  429.         end
  430.       end
  431.       if target.is_a?(Game_Enemy)
  432.        if target.current_action.kind == 0 and target.current_action.basic == 1
  433.           target.setup_battler_ani(target.battler_name.split(/★/)[1])
  434.         else
  435.           target.setup_battler_hurt_ani(0)
  436.         end
  437.       end
  438.       #.......................................................................
  439.     end
  440.     # 对像方动画
  441.     for target in @target_battlers
  442.       target.animation_id = @animation2_id
  443.       target.animation_hit = (target.damage != "Miss")
  444.       #......................................................................
  445.     end
  446.     # 限制动画长度、最低 8 帧
  447.     @wait_count = 8
  448.     # 移至步骤 5
  449.     @phase4_step = 5
  450.  
  451.   end
  452. end
  453. #--------------------------------------------------------------------------
  454.   # ● 刷新画面 (主回合步骤 4 : 对像方动画) ★
  455.   #--------------------------------------------------------------------------
  456.   def update_phase4_step4
  457.     # 对像方动画
  458.     for target in @target_battlers
  459.       target.animation_id = @animation2_id
  460.       target.animation_hit = (target.damage != "Miss")
  461.       #......................................................................
  462.  
  463.     end
  464.     # 限制动画长度、最低 8 帧
  465.     @wait_count = 8
  466.     # 移至步骤 5
  467.     @phase4_step = 5
  468.   end
  469. end
  470. ######################################################3
  471.  
  472. #############################################################################
  473. #                                横版修改   
  474. #改角色的坐标#
  475. ###注意,此处虽然按照5人制改了坐标,但是因为前面未设置,所以无效
  476.  
  477. #############################################################################
  478. class Game_Actor < Game_Battler
  479.  
  480. #--------------------------------------------------------------------------
  481.   # ● 取得战斗画面的 X 坐标
  482.   #--------------------------------------------------------------------------
  483.   def screen_x
  484.     case self.index  
  485.     when 0
  486.        return 486
  487.        #角色1的横坐标
  488.       when 1
  489.        return 426
  490.        #角色2的横坐标
  491.       when 2
  492.        return 580
  493.        #角色3的横坐标
  494.       when 3
  495.        return 540
  496.        #角色4的横坐标
  497.     else
  498.       return 640
  499.     end
  500.   end
  501.   #----
  502.   #--------------------------------------------------------------------------
  503.   # ● 取得战斗画面的 Y 坐标
  504.   #--------------------------------------------------------------------------
  505.   def screen_y
  506.     # 返回计算后的队伍 Y 坐标的排列顺序
  507.     case self.index  
  508.     when 0
  509.        return 240
  510.        #角色1的纵坐标
  511.       when 1
  512.        return 312
  513.        #角色2的纵坐标
  514.       when 2
  515.        return 240
  516.        #角色3的纵坐标
  517.       when 3
  518.        return 310
  519.        #角色4的纵坐标
  520.     else
  521.       return 1000320
  522.     end
  523.   end
  524.   #--------------------------------------------------------------------------
  525.   # ● 取得战斗画面的 Z 坐标
  526.   #--------------------------------------------------------------------------
  527.   def screen_z
  528.     # 返回计算后的队伍 Z 坐标的排列顺序
  529.     case self.index
  530.     when 0
  531.       return 100
  532.     when 1
  533.       return 90
  534.     when 2
  535.       return 80
  536.     when 3
  537.       return 70
  538.     else
  539.       return 0
  540.     end
  541.   end
  542. end
  543.  
  544. class Scene_Battle
  545.  
  546. #--------------------------------------------------------------------------
  547.   # ● 取得战斗画面的 X 坐标
  548.   #--------------------------------------------------------------------------
  549.   def screen_x
  550.     # 返回计算后的队伍 X 坐标的排列顺序
  551.     if self.index != nil
  552.       #......................................................................
  553.       return self.index * 90 + 500
  554.       #......................................................................
  555.     else
  556.       return 0
  557.     end
  558.   end
  559.   #--------------------------------------------------------------------------
  560.   # ● 取得战斗画面的 Y 坐标
  561.   #--------------------------------------------------------------------------
  562.   def screen_y
  563.     #........................................................................
  564.     return 464 - self.index * 110
  565.     #........................................................................
  566.   end
  567.    #--------------------------------------------------------------------------
  568.   # ● 取得战斗画面的 Z 坐标
  569.   #--------------------------------------------------------------------------
  570.   def screen_z
  571.     # 返回计算后的队伍 Z 坐标的排列顺序
  572.     case self.index
  573.     when 0
  574.       return 100
  575.     when 1
  576.       return 90
  577.     when 2
  578.       return 80
  579.     when 3
  580.       return 70
  581.     else
  582.       return 0
  583.     end
  584.   end
  585. end
  586.  
  587. class Scene_Battle
  588.   #..........................................................................
  589.   #--------------------------------------------------------------------------
  590.   # ● 返回phase
  591.   #--------------------------------------------------------------------------
  592.   def phase
  593.     return @phase
  594.   end
  595.   #--------------------------------------------------------------------------
  596.   # ● 返回phase4_step
  597.   #--------------------------------------------------------------------------
  598.   def phase4_step
  599.     return @phase4_step
  600.   end
  601.   #--------------------------------------------------------------------------
  602.   # ● 返回phase4_step
  603.   #--------------------------------------------------------------------------
  604.   def actor_command_active?
  605.     return @actor_command_window.active
  606.   end
  607.   #..........................................................................
  608. end
  609. class Game_Battler
  610.   #..........................................................................
  611.   #--------------------------------------------------------------------------
  612.   # ● 获取循环的动画 ID
  613.   #--------------------------------------------------------------------------  
  614.   def show_damage(value)
  615.     @show_damage_value = value
  616.   end
  617.   #--------------------------------------------------------------------------
  618.   # ● 获取循环的动画 ID
  619.   #--------------------------------------------------------------------------
  620.   def show_damage_value
  621.     return @show_damage_value
  622.   end
  623.   #--------------------------------------------------------------------------
  624.   # ● 获取循环的动画 ID
  625.   #--------------------------------------------------------------------------
  626.   def battler_ani
  627.     return @battler_ani
  628.   end
  629.   #--------------------------------------------------------------------------
  630.   # ● 获取循环的动画 ID
  631.   #--------------------------------------------------------------------------
  632.   def setup_battler_ani(battler_ani, once = 0)
  633.     @battler_ani = battler_ani
  634.     @once = once
  635.   end
  636.   #--------------------------------------------------------------------------
  637.   # ● 获取循环的动画 ID
  638.   #--------------------------------------------------------------------------
  639.   def setup_battler_hurt_ani(hurt)
  640.     @hurt = hurt
  641.   end  
  642.   #--------------------------------------------------------------------------
  643.   # ● 获取循环的动画 ID
  644.   #--------------------------------------------------------------------------
  645.   def setup_battler_dead_ani(over)
  646.     @over = over
  647.   end
  648.   #--------------------------------------------------------------------------
  649.   # ● 获取循环的动画 ID
  650.   #--------------------------------------------------------------------------
  651.   def battler_dead_ani
  652.     return @over
  653.   end
  654.   #--------------------------------------------------------------------------
  655.   # ● 获取循环的动画 ID
  656.   #--------------------------------------------------------------------------
  657.   def battler_ani_once
  658.     return @once
  659.   end
  660.   #--------------------------------------------------------------------------
  661.   # ● 获取循环的动画 ID
  662.   #--------------------------------------------------------------------------
  663.   def battler_hurt_ani
  664.     return @hurt
  665.   end
  666.   #########################
  667.   #..........................................................................
  668. end
  669. class Sprite_Battler < RPG::Sprite
  670.   #..........................................................................
  671.   #--------------------------------------------------------------------------
  672.   # ● 胜利图
  673.   #--------------------------------------------------------------------------
  674.   def win
  675.     if @battler_name != nil and not @battler.hidden and not @battler.dead?
  676.       @battler.setup_battler_ani(@battler_name.split(/★/)[6], 1)
  677.     end
  678.   end
  679.   #..........................................................................
  680.   #--------------------------------------------------------------------------
  681.   # ● 释放
  682.   #--------------------------------------------------------------------------
  683.   def dispose
  684.     if self.bitmap != nil
  685.       self.bitmap.dispose
  686.     end
  687.     super
  688.   end
  689.   #--------------------------------------------------------------------------
  690.   # ● 刷新画面
  691.   #--------------------------------------------------------------------------
  692.   def update
  693.     super
  694.     # 战斗者为 nil 的情况下
  695.     if @battler == nil
  696.       self.bitmap = nil
  697.       loop_animation(nil)
  698.        loop_animation1(nil)
  699.       return
  700.     end
  701.     # 文件名和色相与当前情况有差异的情况下
  702.     if @battler.battler_name != @battler_name or
  703.        @battler.battler_hue != @battler_hue
  704.       @battler_hue = @battler.battler_hue
  705.       # 获取、设置位图
  706.       @battler_name = @battler.battler_name
  707.       self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  708.       #.......................................................................
  709.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  710.       #.......................................................................
  711.       @width = bitmap.width
  712.       @height = bitmap.height
  713.       self.ox = @width / 2
  714.       self.oy = @height
  715.       # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  716.       if @battler.is_a?(Game_Enemy)
  717.         if @battler.dead? or @battler.hidden
  718.           self.opacity = 0
  719.         end
  720.       end
  721.     end
  722.     # 动画 ID 与当前的情况有差异的情况下
  723.     #.........................................................................
  724.     if @battler.battler_ani != @battler_ani
  725.       @battler_ani = @battler.battler_ani
  726.       loop_animation($data_animations[@battler_ani.to_i])
  727.  
  728.  
  729.  
  730.      end
  731.  
  732.     #.........................................................................
  733.     # 应该被显示的角色的情况下
  734.     if @battler.is_a?(Game_Actor) and @battler_visible
  735.       # 不是主状态的时候稍稍降低点透明度
  736.       if $game_temp.battle_main_phase
  737.         self.opacity += 3 if self.opacity < 255
  738.       else
  739.         self.opacity -= 3 if self.opacity > 207
  740.       end
  741.     end
  742.     # 明灭
  743.     if @battler.blink
  744.       blink_on
  745.     else
  746.       blink_off
  747.     end
  748.     # 不可见的情况下
  749.     unless @battler_visible
  750.       # 出现 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  751.       if not @battler.hidden and not @battler.dead? and
  752.          (@battler.damage == nil or @battler.damage_pop)
  753.         if @battler.is_a?(Game_Enemy)
  754.           appear
  755.         else
  756.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  757.         end
  758.         @battler_visible = true
  759.       end
  760.     end
  761.     # 可见的情况下
  762.     if @battler_visible
  763.       # 逃跑
  764.       if @battler.hidden
  765.         $game_system.se_play($data_system.escape_se)
  766.         escape
  767.         @battler_visible = false
  768.       end
  769.       # 白色闪烁
  770.       if @battler.white_flash
  771.         whiten
  772.         @battler.white_flash = false
  773.       end
  774.       # 动画
  775.       if @battler.animation_id != 0
  776.         animation = $data_animations[@battler.animation_id]
  777.         animation(animation, @battler.animation_hit)
  778.         @battler.animation_id = 0
  779.       end
  780.       # 伤害
  781.       if @battler.damage_pop
  782.         damage(@battler.damage, @battler.critical)
  783.         @battler.damage = nil
  784.         @battler.critical = false
  785.         @battler.damage_pop = false
  786.       end
  787.       # korapusu
  788.       if @battler.damage == nil and @battler.dead?
  789.         #....................................................................
  790.         if @battler.is_a?(Game_Enemy)
  791.           $game_system.se_play($data_system.enemy_collapse_se)
  792.           #collapse
  793.         else
  794.           $game_system.se_play($data_system.actor_collapse_se)
  795.         end
  796.         #....................................................................
  797.         @battler_visible = false
  798.       end
  799.     end
  800.     # 设置活动块的坐标
  801.     self.x = @battler.screen_x
  802.     self.y = @battler.screen_y
  803.     self.z = @battler.screen_z
  804.   end
  805. end
  806. module RPG
  807.   class Sprite < ::Sprite
  808.     def damage(value, critical)
  809.       dispose_damage
  810.       if value.is_a?(Numeric)
  811.         damage_string = value.abs.to_s
  812.       else
  813.         damage_string = value.to_s
  814.       end
  815.       bitmap = Bitmap.new(160, 48)
  816.       bitmap.font.name = "Arial Black"
  817.       bitmap.font.size = 32
  818.       bitmap.font.color.set(0, 0, 0)
  819.       bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  820.       bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  821.       bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  822.       bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  823.       if value.is_a?(Numeric) and value < 0
  824.         bitmap.font.color.set(176, 255, 144)
  825.       else
  826.         bitmap.font.color.set(255, 255, 255)
  827.       end
  828.       bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  829.       if critical
  830.         bitmap.font.size = 20
  831.         bitmap.font.color.set(0, 0, 0)
  832.         bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  833.         bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  834.         bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  835.         bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  836.         bitmap.font.color.set(255, 255, 255)
  837.         bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  838.       end
  839.       @_damage_sprite = ::Sprite.new(self.viewport)
  840.       @_damage_sprite.bitmap = bitmap
  841.       @_damage_sprite.ox = 80
  842.       @_damage_sprite.oy = 20
  843.       @_damage_sprite.x = self.x
  844.       @_damage_sprite.x -= self.bitmap.width/2 if @battler.is_a?(Game_Actor)
  845.       @_damage_sprite.y = self.y - self.oy / 2
  846.       @_damage_sprite.z = 3000
  847.       @_damage_duration = 40
  848.     end
  849.   end
  850. end
  851. ###########################################################
  852. ##############################################################
  853. #在此处更改伤害显示图
  854. #################################################################
  855. module RPG
  856. #--------------------------------------------------------------------------
  857. # ● 常量设定
  858. #--------------------------------------------------------------------------
  859. # 是否显示总伤害
  860. SHOW_TOTAL_DAMAGE = true
  861. # 角色受攻击时是否跳一下
  862. BATTLER_JUMP = false
  863. # 伤害美化字符串文件夹名(放在Pictures文件夹中的子文件夹)
  864. STRING_DOCUMENTS = "String/"
  865. # 是否使用伤害美化效果
  866. USE_DAMAGE =true
  867. # 连续伤害的动画ID
  868. SLIP_DAMAGE_ANIMATION_ID = 236
  869.  
  870. class Sprite < ::Sprite
  871.    #==========================================
  872.    # 修改说明:
  873.    # @flash_shake用来制作挨打时候跳跃
  874.    # @_damage    用来记录每次打击之后弹出数字
  875.    # @_total_damage 记录总伤害
  876.    # @_total_damage_duration 总伤害持续帧
  877.    #==========================================
  878.    #alias 66RPG_rainbow_initialize : initialize
  879.    def initialize(viewport = nil)
  880.      #66RPG_rainbow_initialize(viewport)
  881.      super(viewport)
  882.      @_whiten_duration = 0
  883.      @_appear_duration = 0
  884.      @_escape_duration = 0
  885.      @_collapse_duration = 0
  886.      @_damage_duration = 0
  887.      @_animation_duration = 0
  888.      @_blink = false
  889.      # 挨打时候跳跃
  890.      @flash_shake = 0
  891.      # 伤害记录数组
  892.      @_damage = []
  893.      # 总伤害数字
  894.      @_total_damage = 0
  895.      # 总伤害持续帧
  896.      @_total_damage_duration = 0
  897.      #.........................................................................
  898.      #记录已经发生的伤害的变量
  899.      @p_dam=0
  900.      @hits=0
  901.      ############ #小改动
  902.      #记录前一次攻击次数
  903.      @temp_hits=0
  904.      #判断是否为最后一次攻击
  905.      @last_hits=0
  906.      ############
  907.      #.........................................................................
  908.    end
  909.    #--------------------------------------------------------------------------
  910.    #美化的伤害处理
  911.    #--------------------------------------------------------------------------
  912.     def damage(value, critical)
  913.  
  914. if USE_DAMAGE == true then
  915.  
  916.       # 释放伤害,效果是伤害数字快速消失,觉得不如不消失好看......
  917.       #dispose_damage
  918.       #清除hit数
  919.       dispose_hit
  920.       # 如果伤害值是数值
  921.       if value.is_a?(Numeric)
  922.         # 绝对值转为字符串
  923.         damage_string = value.abs.to_s
  924.       else
  925.         # 转为字符串
  926.         damage_string = value.to_s
  927.       end
  928.       # 初始化位图
  929.       bitmap = Bitmap.new(162, 64)
  930.       bitmap.font.name = ["方正隶书_GBK","黑体", "宋体"]
  931.       bitmap.font.size = 32
  932.       # 伤害值是数值的情况下
  933.       if value.is_a?(Numeric)
  934.         # 分割伤害值字符串
  935.         damage_array = damage_string.scan(/./)
  936.         damage_x = 81 - damage_string.size * 9
  937.         # 伤害值为负的情况下
  938.         if value < 0
  939.           # 调用回复数字表
  940.           rect_y = 32
  941.         else
  942.           # 调用伤害数字表
  943.           rect_y = 0
  944.         end
  945.         # 循环伤害值字符串
  946.         for char in damage_array
  947.           number = char.to_i
  948.           # 显示伤害数字
  949.           bitmap.blt(damage_x, 32, RPG::Cache.picture(STRING_DOCUMENTS + "Damage"),#"Damagenew"),
  950.           Rect.new(number * 18, rect_y, 18, 32))
  951.           # 后移一位
  952.           damage_x += 18
  953.         end
  954.       # 伤害值不是数值的情况
  955.       else
  956.         # 如果伤害值不是 Miss
  957.         unless value == "Miss"
  958.           # 系统默认描画字符串
  959.           bitmap.font.color.set(0, 0, 0)
  960.           bitmap.draw_text(-1, 27, 162, 36, damage_string, 1)
  961.           bitmap.draw_text(+1, 27, 162, 36, damage_string, 1)
  962.           bitmap.draw_text(-1, 29, 162, 36, damage_string, 1)
  963.           bitmap.draw_text(+1, 29, 162, 36, damage_string, 1)
  964.           bitmap.font.color.set(255, 255, 255)
  965.           bitmap.draw_text(0, 28, 162, 36, damage_string, 1)
  966.         # Miss 的情况下
  967.         else
  968.           # 显示未击中图画
  969.           bitmap.blt(36, 28, RPG::Cache.picture(STRING_DOCUMENTS + "Damage"), Rect.new(90, 64, 90, 32))
  970.         end
  971.       end
  972.       # 会心一击标志打开的情况
  973.       if critical
  974.         #会心一击伤害效果
  975. ###########################################################
  976.         $game_screen.start_flash(Color.new(255,255,255,255),5)
  977. ###########################################################
  978.         # 显示会心一击图画
  979.         bitmap.blt(36, 0, RPG::Cache.picture(STRING_DOCUMENTS + "Damage"), Rect.new(0, 64, 90, 32))
  980.       end
  981.  
  982. else
  983.  
  984.      #.........................................................................
  985.      #清除hit数
  986.      dispose_hit
  987.      #.........................................................................
  988.      if value.is_a?(Numeric)
  989.        damage_string = value.abs.to_s
  990.      else
  991.        damage_string = value.to_s
  992.      end
  993.      bitmap = Bitmap.new(160, 48)
  994.      bitmap.font.name = "Arial Black"
  995.      bitmap.font.size = 32
  996.      bitmap.font.color.set(0, 0, 0)
  997.      bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  998.      bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  999.      bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  1000.      bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  1001.      #=======================================
  1002.      # 修改:颜色
  1003.      #=======================================
  1004.      if value.is_a?(Numeric) and value < 0
  1005.        bitmap.font.color.set(176, 255, 144)
  1006.      else
  1007.        bitmap.font.color.set(255, 55, 55)
  1008.      end
  1009.      bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  1010.      if critical
  1011.        #会心一击伤害效果
  1012. ###########################################################
  1013.        $game_screen.start_flash(Color.new(255,255,255,255),5)
  1014. ###########################################################
  1015.        bitmap.font.size = 20
  1016.        bitmap.font.color.set(0, 0, 0)
  1017.        bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  1018.        bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  1019.        bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  1020.        bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  1021.        bitmap.font.color.set(255, 255, 255)
  1022.        bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  1023.      end
  1024.  
  1025. end
  1026.  
  1027.      # 伤害值定位     
  1028.      @_damage_sprite = ::Sprite.new#(self.viewport)
  1029.      @_damage_sprite.bitmap = bitmap
  1030.      @_damage_sprite.ox = 80
  1031.      @_damage_sprite.oy = 20
  1032.      @_damage_sprite.x = self.x
  1033.      @_damage_sprite.y = self.y - self.oy / 2
  1034.      @_damage_sprite.z = 3000
  1035.      @_damage_duration = 40
  1036.      #=======================================
  1037.      # 修改:推入新的伤害
  1038.      #=======================================
  1039.      @_damage.push([@_damage_sprite,@_damage_duration-10,0, rand(30) - 15, rand(3)])
  1040.      # 总伤害处理
  1041.      make_total_damage(value)
  1042.  
  1043.  
  1044.  
  1045.     end
  1046.    #--------------------------------------------------------------------------
  1047.    # ● 返回 @hits
  1048.    #--------------------------------------------------------------------------
  1049.    def get_hit
  1050.      return @hits
  1051.    end
  1052.    #--------------------------------------------------------------------------
  1053.    # ● hit数的美化描绘
  1054.    #--------------------------------------------------------------------------
  1055.    #..........................................................................
  1056.    def hit
  1057.      # 如果伤害值是数值
  1058.      # 转为字符串
  1059.      value=@hits
  1060.      hits_string = value.to_s
  1061.      # 初始化位图
  1062.      bitmap = Bitmap.new(320, 64)
  1063.      bitmap.font.name = "Arial Black"
  1064.      bitmap.font.size = 32
  1065.      # 分割伤害值字符串
  1066.      hits_array = hits_string.scan(/./)
  1067.      hits_x = - 36.2#hits_string.size * 18.1 # 81 - hits_string.size * 18.1
  1068.      rect_y = 0
  1069.      # 循环伤害值字符串
  1070.      for char in hits_array
  1071.        # 后移一位
  1072.        hits_x += 36.2
  1073.        number = char.to_i
  1074.        # 显示伤害数字
  1075.        bitmap.blt(hits_x, 0, RPG::Cache.picture(STRING_DOCUMENTS + "Number"),
  1076.        Rect.new(number * 36.2, rect_y, 36.2, 50))if value>1
  1077.      end
  1078.      hits_x += 18.1
  1079.  
  1080.      bitmap.blt(hits_x, 0, RPG::Cache.picture(STRING_DOCUMENTS + "HITS"),
  1081.                 Rect.new(0, -18, 90, 50)) if value>1
  1082.      # 伤害值定位
  1083.      @_hits_sprite = ::Sprite.new(self.viewport)
  1084.      @_hits_sprite.bitmap = bitmap
  1085.      @_hits_sprite.x = 560 - hits_string.size * 36.2
  1086.      @_hits_sprite.y = 70
  1087.      @_hits_sprite.z = 3000
  1088.      @_hits_duration = 40
  1089.    end
  1090.    #..........................................................................
  1091.    #--------------------------------------------------------------------------
  1092.    # ● 美化的总伤害处理
  1093.    #--------------------------------------------------------------------------
  1094.    def make_total_damage(value)
  1095.  
  1096. if USE_DAMAGE == true then     
  1097.  
  1098.      if value.is_a?(Numeric)# and SHOW_TOTAL_DAMAGE
  1099.        @_total_damage += value
  1100.         # 绝对值转为字符串
  1101.         damage_string = @_total_damage.abs.to_s
  1102.       else
  1103.         return
  1104.       end
  1105. #####################################################小改动
  1106.      if SHOW_TOTAL_DAMAGE
  1107. #####################################################
  1108.       # 初始化位图
  1109.       bitmap = Bitmap.new(300, 150)
  1110.       bitmap.font.name = "Arial Black"
  1111.       bitmap.font.size = 32
  1112.       # 伤害值是数值的情况下
  1113.       if value.is_a?(Numeric)
  1114.         # 分割伤害值字符串
  1115.         damage_array = damage_string.scan(/./)
  1116.         damage_x = 40 - damage_string.size * 9
  1117.         # 伤害值为负的情况下
  1118.         if value < 0
  1119.           # 调用回复数字表
  1120.           name= STRING_DOCUMENTS + "Number3"
  1121.         else
  1122.           # 调用伤害数字表
  1123.           name= STRING_DOCUMENTS + "Number2"
  1124.         end
  1125.         # 循环伤害值字符串
  1126.         for char in damage_array
  1127.           number = char.to_i
  1128.           # 显示伤害数字
  1129.           bitmap.blt(damage_x, 0, RPG::Cache.picture(name),
  1130.           Rect.new(number * 36.2, 0, 36.2, 50))
  1131.           # 后移一位
  1132.           damage_x += 36.2
  1133.         end
  1134. #####################################################小改动
  1135.      end
  1136. #####################################################
  1137.       end
  1138.  
  1139. else
  1140.    #--------------------------------------------------------------------------
  1141.    # ● 总伤害处理
  1142.    #--------------------------------------------------------------------------
  1143.      if value.is_a?(Numeric)# and SHOW_TOTAL_DAMAGE
  1144.        @_total_damage += value
  1145.      else
  1146.        return
  1147.      end
  1148. #####################################################小改动
  1149.      if SHOW_TOTAL_DAMAGE
  1150. #####################################################
  1151.      bitmap = Bitmap.new(300, 150)
  1152.      bitmap.font.name = "Arial Black"
  1153.      bitmap.font.size = 48
  1154.      bitmap.font.color.set(0, 0, 0)
  1155.      bitmap.draw_text(+2, 12+2, 160, 36, @_total_damage.abs.to_s, 1)
  1156.      if @_total_damage < 0
  1157.        bitmap.font.color.set(80, 255, 00)
  1158.      else
  1159.        bitmap.font.color.set(255, 140, 0)
  1160.      end
  1161.  
  1162.      bitmap.draw_text(0, 12, 160, 36, @_total_damage.abs.to_s, 1)
  1163. #####################################################小改动
  1164.      end
  1165. #####################################################
  1166. end
  1167.  
  1168.      if @_total_damage_sprite.nil?
  1169.        @_total_damage_sprite = ::Sprite.new#self.viewport
  1170.        @_total_damage_sprite.ox = 80
  1171.        @_total_damage_sprite.oy = 20
  1172.        @_total_damage_sprite.z = 3000
  1173.      end
  1174.      @_total_damage_sprite.bitmap = bitmap
  1175.      @_total_damage_sprite.zoom_x = 1.5
  1176.      @_total_damage_sprite.zoom_y = 1.5
  1177.      @_total_damage_sprite.x = self.x
  1178.      @_total_damage_sprite.y = self.y  - self.oy / 2 - 64
  1179.      @_total_damage_sprite.z = 3001
  1180.      #.........................................................................
  1181.      @_total_damage_duration = 40
  1182.      #.........................................................................
  1183.      #.........................................................................
  1184.      #hit数描绘
  1185.      @hits+=1
  1186.      hit
  1187.      #.........................................................................
  1188.    end
  1189.    def animation(animation, hit, battler_damage="", battler_critical=false)
  1190.      dispose_animation      
  1191.      #=======================================
  1192.      # 修改:记录伤害和critical
  1193.      #=======================================
  1194.      @battler_damage = battler_damage
  1195.      @battler_critical = battler_critical
  1196.      @_animation = animation
  1197.      return if @_animation == nil
  1198.      @_animation_hit = hit
  1199.      @_animation_duration = @_animation.frame_max
  1200.      animation_name = @_animation.animation_name
  1201.      animation_hue = @_animation.animation_hue
  1202.      bitmap = RPG::Cache.animation(animation_name, animation_hue)
  1203.      #=======================================
  1204.      # 修改:计算总闪光权限值
  1205.      #=======================================
  1206.      for timing in @_animation.timings
  1207.        quanzhong = animation_process_timing(timing, @_animation_hit,true)
  1208.        @all_quanzhong += quanzhong
  1209.        # 记录最后一次闪光
  1210.        @_last_frame = timing.frame if quanzhong != 0
  1211.      end
  1212.      #.........................................................................
  1213.      @last_frame = @_last_frame
  1214.  
  1215.      #.........................................................................
  1216.      if @@_reference_count.include?(bitmap)
  1217.        @@_reference_count[bitmap] += 1
  1218.      else
  1219.        @@_reference_count[bitmap] = 1
  1220.      end
  1221.      #=======================================
  1222.      # 修改:行动方动画不显示伤害
  1223.      #=======================================
  1224.      if $scene.is_a?(Scene_Battle)
  1225.  
  1226.        if $scene.animation1_id == @battler.animation_id
  1227.          @battler_damage = ""
  1228.        end
  1229.      end
  1230.      @_animation_sprites = []
  1231.      if @_animation.position != 3 or not @@_animations.include?(animation)
  1232.        for i in 0..15
  1233.          sprite = ::Sprite.new(self.viewport)
  1234.          sprite.bitmap = bitmap
  1235.          sprite.visible = false
  1236.          @_animation_sprites.push(sprite)
  1237.        end
  1238.        unless @@_animations.include?(animation)
  1239.          @@_animations.push(animation)
  1240.        end
  1241.      end
  1242.      update_animation
  1243.    end
  1244.    #=======================================
  1245.    # 修改:更换清除伤害的算法,以防万一
  1246.    #       本内容在脚本中没有使用过
  1247.    #=======================================
  1248.    def dispose_damage
  1249.      for damage in @_damage.reverse
  1250.        damage[0].bitmap.dispose
  1251.        damage[0].dispose
  1252.        @_damage.delete(damage)
  1253.      end
  1254.      @_total_damage = 0
  1255.      @_last_frame = -1
  1256.      if @_total_damage_sprite != nil
  1257.        @_total_damage_duration = 0
  1258.        @_total_damage_sprite.bitmap.dispose
  1259.        @_total_damage_sprite.dispose
  1260.        @_total_damage_sprite = nil
  1261.      end
  1262.    end
  1263.    #=======================================
  1264.    # 清除hit数
  1265.    #=======================================
  1266.    #...........................................................................
  1267.    def dispose_hit
  1268.      if @_hits_sprite != nil
  1269.        @_hits_sprite.bitmap.dispose
  1270.        @_hits_sprite.dispose
  1271.        @_hits_sprite = nil
  1272.      end
  1273.    end
  1274.    #...........................................................................
  1275.    def dispose_animation
  1276.      #=======================================
  1277.      # 修改:清除记录的伤害,清除权重记录
  1278.      #=======================================
  1279.      @battler_damage = nil
  1280.      @battler_critical = nil
  1281.      @all_quanzhong = 1
  1282.      @_total_damage = 0
  1283.      @_last_frame = -1
  1284.      #.........................................................................
  1285.      @hits = 0
  1286.      #.........................................................................
  1287.      if @_animation_sprites != nil
  1288.        sprite = @_animation_sprites[0]
  1289.        if sprite != nil
  1290.          @@_reference_count[sprite.bitmap] -= 1
  1291.          if @@_reference_count[sprite.bitmap] == 0
  1292.            sprite.bitmap.dispose
  1293.          end
  1294.        end
  1295.        for sprite in @_animation_sprites
  1296.          sprite.dispose
  1297.        end
  1298.        @_animation_sprites = nil
  1299.        @_animation = nil
  1300.      end
  1301.    end
  1302.    def update
  1303.      super
  1304.      if @_whiten_duration > 0
  1305.        @_whiten_duration -= 1
  1306.        self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  1307.      end
  1308.      if @_appear_duration > 0
  1309.        @_appear_duration -= 1
  1310.        self.opacity = (16 - @_appear_duration) * 16
  1311.      end
  1312.      if @_escape_duration > 0
  1313.        @_escape_duration -= 1
  1314.        self.opacity = 256 - (32 - @_escape_duration) * 10
  1315.      end
  1316.      if @_collapse_duration > 0
  1317.        @_collapse_duration -= 1
  1318.        self.opacity = 256 - (48 - @_collapse_duration) * 6
  1319.      end
  1320.      #=======================================
  1321.      # 修改:更新算法,更新弹出
  1322.      #=======================================
  1323.      if @_damage_duration > 0
  1324.        @_damage_duration -= 1
  1325.        for damage in @_damage
  1326.          damage[0].x = self.x + self.viewport.rect.x -
  1327.                        self.ox + self.src_rect.width / 2 +
  1328.                        (40 - damage[1]) * damage[3] / 10
  1329.          damage[0].y -= damage[4]+damage[1]/10
  1330.          damage[0].opacity = damage[1]*20
  1331.          damage[1] -= 1
  1332.          if damage[1]==0
  1333.            damage[0].bitmap.dispose
  1334.            damage[0].dispose
  1335.            @_damage.delete(damage)
  1336.            next
  1337.          end
  1338.        end
  1339.      end
  1340.      #=======================================
  1341.      # 添加:弹出总伤害
  1342.      #=======================================
  1343.      if @_total_damage_duration > 0
  1344.        @_total_damage_duration -= 1
  1345.        @_total_damage_sprite.y -= 1 if @_total_damage_duration % 2 == 0
  1346.        if @_total_damage_sprite.zoom_x > 1.0
  1347.          @_total_damage_sprite.zoom_x -= 0.05
  1348.        end
  1349.        if @_total_damage_sprite.zoom_y > 1.0
  1350.          @_total_damage_sprite.zoom_y -= 0.05
  1351.        end
  1352.        @_total_damage_sprite.opacity = 256 - (24 - @_total_damage_duration) * 16
  1353.        #......................................................................
  1354.        if @_total_damage_duration <= 7 and @_total_damage_duration > 0
  1355.          @_hits_sprite.opacity -= 32 if @_hits_sprite
  1356.          @_hits_sprite.x += 1
  1357.        end
  1358.        #......................................................................
  1359.        if @_total_damage_duration <= 0
  1360.          #.....................................................................
  1361.          dispose_hit
  1362. ##########################
  1363.          @_total_damage = 0
  1364. ##########################
  1365.          #.....................................................................
  1366.          @_total_damage = 0
  1367.          @_total_damage_duration = 0
  1368. #####################################################小改动
  1369.          if SHOW_TOTAL_DAMAGE
  1370.          @_total_damage_sprite.bitmap.dispose
  1371.          end
  1372. #####################################################
  1373.          @_total_damage_sprite.dispose
  1374.          @_total_damage_sprite = nil
  1375.        end
  1376.      end
  1377.      #=======================================
  1378.      if @_animation != nil and (Graphics.frame_count % 2 == 0)
  1379.        @_animation_duration -= 1
  1380.        update_animation
  1381.      end
  1382.      if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  1383.        update_loop_animation
  1384.        @_loop_animation_index += 1
  1385.        #......................................................................
  1386.        @loop_animation_once = 0
  1387.        @loop_animation_once = 1 if @once == 1 and @_loop_animation_index == @_loop_animation.frame_max
  1388.        #......................................................................
  1389.        @_loop_animation_index %= @_loop_animation.frame_max
  1390.      end
  1391.  
  1392.      if @_loop_animation1 != nil and (Graphics.frame_count % 2 == 0)
  1393.         update_loop_animation1
  1394.         @_loop_animation1_index += 1
  1395.         @_loop_animation1_index %= @_loop_animation1.frame_max
  1396.       end
  1397.  
  1398.      if @_blink
  1399.        @_blink_count = (@_blink_count + 1) % 32
  1400.        if @_blink_count < 16
  1401.          alpha = (16 - @_blink_count) * 6
  1402.        else
  1403.          alpha = (@_blink_count - 16) * 6
  1404.        end
  1405.        self.color.set(255, 255, 255, alpha)
  1406.      end
  1407.      @@_animations.clear
  1408.    end
  1409.    #..........................................................................
  1410.    def loop_animation_once
  1411.      return @_loop_animation_once
  1412.    end
  1413.    #..........................................................................
  1414.    def update_animation
  1415.      if @_animation_duration > 0
  1416.        frame_index = @_animation.frame_max - @_animation_duration
  1417.        @frame_index = frame_index
  1418.        cell_data = @_animation.frames[frame_index].cell_data
  1419.        position = @_animation.position
  1420.        animation_set_sprites(@_animation_sprites, cell_data, position)
  1421.  
  1422.  
  1423.        se_name = []
  1424.        se_red = []
  1425.        se_green = []
  1426.        se_blue = []
  1427.        se_alpha = []
  1428.        se_frame = []
  1429.        se_flash_duration = []
  1430.        se_volume = []
  1431.        $se_animation = "" if !$se_animation
  1432.        #return if $data_skills[57].animation2_id != @battler.animation_id
  1433.        $se_animation = @_animation if $data_skills[$se_skill_id].animation2_id == @battler.animation_id and $se_animation == ""
  1434.        if $se_animation != ""
  1435.          $move_duration = [] if !$move_duration
  1436.        $wait_count = [] if !$wait_count
  1437.        $se_x = self.ox if $se_x.nil?
  1438.        $se_y = self.oy if $se_y.nil?
  1439.        for i in 0..$se_animation.timings.size-1
  1440.        se_name[i] = $se_animation.timings[i].se.name
  1441.        se_red[i] = $se_animation.timings[i].flash_color.red.to_i
  1442.        se_green[i] = $se_animation.timings[i].flash_color.green.to_i
  1443.        se_blue[i] = $se_animation.timings[i].flash_color.blue.to_i
  1444.        se_alpha[i] = $se_animation.timings[i].flash_color.alpha.to_i
  1445.        se_frame[i] = $se_animation.timings[i].frame
  1446.        se_flash_duration[i] = $se_animation.timings[i].flash_duration
  1447.        se_volume[i] = $se_animation.timings[i].se.volume/5
  1448.     end
  1449.   if $move_duration == [] and $wait_count == []
  1450.   for i in 0..$se_animation.timings.size-1
  1451.   $move_duration[i] = se_volume[i]
  1452.   $wait_count[i] = se_flash_duration[i]
  1453. end
  1454. end
  1455.   for i in 0..$wait_count.size-1
  1456.   $wait_count[i] -= 1 if $wait_count[i] >= 1 and frame_index >= $se_animation.timings[i].frame
  1457. end
  1458.      #XY移动BY:SOULSAGA 20170330
  1459.      if se_name.size != 0
  1460.      for i in 0..se_name.size-1
  1461.        next if se_name[i][/移动/] != "移动"
  1462.        if se_name[i][/X移动/] == "X移动"
  1463.      case se_alpha[i]
  1464.      when 0
  1465.        xmove = se_red[i] + se_green[i] + se_blue[i]
  1466.        if $wait_count[i] <= 0 and $move_duration[i] > 0 and @battler.damage != "Miss" and @battler.damage != nil
  1467.        self.ox += xmove
  1468.        $move_duration[i] -= 1 if $move_duration[i] >= 1
  1469.      end
  1470.      when 1
  1471.        xmove = se_red[i] + se_green[i] + se_blue[i]
  1472.        if $wait_count[i] <= 0 and $move_duration[i] > 0 and @battler.damage != "Miss" and @battler.damage != nil
  1473.        self.ox += xmove
  1474.        $move_duration[i] -= 1 if $move_duration[i] >= 1
  1475.      end
  1476.    end
  1477. end
  1478. if se_name[i][/Y移动/] == "Y移动"
  1479.      case se_alpha[i]
  1480.      when 0
  1481.        ymove = se_red[i] + se_green[i] + se_blue[i]
  1482.        if $wait_count[i] <= 0 and $move_duration[i] > 0 and @battler.damage != "Miss" and @battler.damage != nil
  1483.        self.oy -= ymove
  1484.        $move_duration[i] -= 1 if $move_duration[i] >= 1
  1485.        end
  1486.      when 1
  1487.        ymove = se_red[i] + se_green[i] + se_blue[i]
  1488.        if $wait_count[i] <= 0 and $move_duration[i] > 0 and @battler.damage != "Miss" and @battler.damage != nil
  1489.        self.oy += ymove
  1490.        $move_duration[i] -= 1 if $move_duration[i] >= 1
  1491.        end
  1492.    end
  1493. end
  1494. end
  1495. end
  1496.   if frame_index == $se_animation.frame_max-1
  1497.     #p self.ox
  1498.      self.ox = $se_x
  1499.      self.oy = $se_y
  1500.      $se_x = nil
  1501.      $se_y = nil
  1502.      $move_duration = []
  1503.      $wait_count = []
  1504.      $se_animation = ""
  1505.    end
  1506.    end
  1507.        #=======================================
  1508.        # 修改:弹出伤害,权重计算
  1509.        #=======================================
  1510.        for timing in @_animation.timings
  1511.          if timing.frame == frame_index
  1512.            t = 1.0 * animation_process_timing(timing, @_animation_hit)            
  1513.            #p t,"当前权重", @all_quanzhong,"总权重"
  1514.            if @battler_damage.is_a?(Numeric) and t != 0
  1515.              t *= @battler_damage
  1516.              t /= @all_quanzhong
  1517.              t = t.to_i
  1518.              #在闪光不是最后一次的情况下,把这次伤害加入到已经发生的伤害中★★★★★★★★★★★★★★★★★★★★★★★★★★
  1519.              if frame_index != @_last_frame
  1520.              @p_dam+= t
  1521.              end
  1522.              #p @p_dam,"已发生伤害",@battler_damage,"总伤害"(调试用)★★★★★★★★★★★★★★★★★★★★★★★★★★
  1523.              #闪光为最后一次的情况下,改变这次伤害的计算方法(总伤害-已经发生伤害)★★★★★★★★★★★★★★★★★★★★★★★★★★
  1524.              if frame_index == @_last_frame
  1525.                t= @battler_damage-@p_dam
  1526.              end
  1527.              #p t,"当前伤害",@battler_damage,"总伤害"
  1528.              # 最后一次闪光的话,伤害修正
  1529.              if frame_index == @_last_frame
  1530.                @_total_damage = @battler_damage - t
  1531.                @p_dam=0      #已经发生的伤害归0★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  1532.             end
  1533.              #p t,@battler_damage,@all_quanzhong
  1534.              damage(t,@battler_critical)
  1535.             #连击次数归0★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  1536.             if frame_index == @_last_frame
  1537.                       ############ #小改动
  1538.                       @last_hits=1
  1539.                       @temp_hits=0
  1540.                       ############
  1541.                       @hits=0
  1542.             end
  1543.            # 防止重复播放miss
  1544.            elsif !@battler_damage.is_a?(Numeric) and timing.flash_scope != 0
  1545.              damage(@battler_damage,@battler_critical)
  1546.            end
  1547.          end
  1548.        end
  1549.      else
  1550.        dispose_animation
  1551.      end
  1552.    end
  1553.    #=======================================
  1554.    # 修改:敌人跳跃的功能 + 添加返回数值
  1555.    #=======================================
  1556.    def update_loop_animation
  1557.      frame_index = @_loop_animation_index
  1558.      cell_data = @_loop_animation.frames[frame_index].cell_data
  1559.      position = @_loop_animation.position
  1560.      #•改•
  1561.      if @wait_count.to_i <= 0
  1562.        @wait_count = 0
  1563.        animation_set_sprites(@_loop_animation_sprites, cell_data, position)
  1564.      else
  1565.        @wait_count -= 1
  1566.        for sprite in @_loop_animation_sprites
  1567.          sprite.visible = false
  1568.        end
  1569.      end
  1570.      if @wait_flash.to_i <= 0
  1571.        @wait_flash = 0
  1572.      else
  1573.        @wait_flash -= 1
  1574.        for sprite in @_loop_animation_sprites
  1575.          sprite.blend_type = 1
  1576.        end
  1577.      end
  1578.      #•改•
  1579.      for timing in @_loop_animation.timings
  1580.        if timing.frame == frame_index
  1581.          animation_process_timing(timing, true)
  1582.        end
  1583.      end
  1584.    end
  1585.    #=======================================
  1586.    # 修改:敌人跳跃的功能 + 添加返回数值
  1587.    #=======================================
  1588.    def loop_animation(animation)
  1589.      return if animation == @_loop_animation
  1590.      dispose_loop_animation
  1591.  
  1592.      @_loop_animation = animation
  1593.      return if @_loop_animation == nil
  1594.      @_loop_animation_index = 0
  1595.      animation_name = @_loop_animation.animation_name
  1596.      animation_hue = @_loop_animation.animation_hue
  1597.      bitmap = RPG::Cache.animation(animation_name, animation_hue)
  1598.      if @@_reference_count.include?(bitmap)
  1599.        @@_reference_count[bitmap] += 1
  1600.      else
  1601.        @@_reference_count[bitmap] = 1
  1602.      end
  1603.      @_loop_animation_sprites = []
  1604.      for i in 0..15
  1605.        sprite = ::Sprite.new
  1606.        sprite.bitmap = bitmap
  1607.        sprite.visible = false
  1608.        @_loop_animation_sprites.push(sprite)
  1609.      end
  1610.      update_loop_animation
  1611.    end
  1612.    #=======================================
  1613.    # 修改:敌人跳跃的功能 + 添加返回数值
  1614.    #=======================================
  1615.     def animation_process_timing(timing, hit,dontflash=false)
  1616.       if (timing.condition == 0) or
  1617.          (timing.condition == 1 and hit == true) or
  1618.          (timing.condition == 2 and hit == false)
  1619.         unless dontflash
  1620.           if timing.se.name != ""
  1621.             se = timing.se
  1622.             Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
  1623.           end
  1624.         end
  1625.         case timing.flash_scope
  1626.         when 1
  1627.           unless dontflash
  1628.             self.flash(timing.flash_color, timing.flash_duration * 2)
  1629.             #....................................................................
  1630.             @wait_flash = timing.flash_duration
  1631.             #....................................................................
  1632.             if @_total_damage >0
  1633.               @flash_shake_switch = true
  1634.               @flash_shake = 10
  1635.             end
  1636.           end
  1637.           return timing.flash_color.alpha * timing.flash_duration
  1638.         when 2
  1639.           unless dontflash
  1640.             if self.viewport != nil
  1641.               self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
  1642.               return timing.flash_color.alpha * timing.flash_duration
  1643.             end
  1644.           end
  1645.         when 3
  1646.           unless dontflash
  1647.             self.flash(nil, timing.flash_duration * 2)
  1648.             #@_loop_animation_count = 1
  1649.             #•改•
  1650.             @wait_count = timing.flash_duration
  1651.             #•改•
  1652.           end
  1653.           return timing.flash_color.alpha * timing.flash_duration
  1654.         end
  1655.       end      
  1656.       return 0
  1657.     end   
  1658. end
  1659. end
  1660. #==============================================================================
  1661. # ■ Sprite_Battler
  1662. #==============================================================================
  1663. class Sprite_Battler < RPG::Sprite
  1664. #--------------------------------------------------------------------------
  1665. # ● 初始化对像
  1666. #    添加跳跃记录
  1667. #--------------------------------------------------------------------------
  1668. def initialize(viewport, battler = nil)
  1669.   super(viewport)
  1670.   @battler = battler
  1671.   @battler_visible = false
  1672.   @flash_shake_switch = true
  1673.  
  1674.   #........................................................................
  1675.   @once = 0
  1676.   @frame_index = -1
  1677.   @last_frame = 0
  1678.   #........................................................................
  1679. end
  1680. #--------------------------------------------------------------------------
  1681. # ● 刷新画面
  1682. #    增添跳跃功能
  1683. #--------------------------------------------------------------------------
  1684. def update
  1685.   super
  1686.   # 战斗者为 nil 的情况下
  1687.   if @battler == nil
  1688.     self.bitmap = nil
  1689.     loop_animation(nil)
  1690.    loop_animation1(nil)
  1691.     return
  1692.   end
  1693.   # 文件名和色相与当前情况有差异的情况下
  1694.   if @battler.battler_name != @battler_name or
  1695.      @battler.battler_hue != @battler_hue
  1696.     # 获取、设置位图
  1697.     @battler_name = @battler.battler_name
  1698.     @battler_hue = @battler.battler_hue
  1699.     self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  1700.     #.......................................................................
  1701.     if not @battler.hidden and not @battler.dead?
  1702.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  1703.     end
  1704.     #.......................................................................
  1705.     @width = bitmap.width
  1706.     @height = bitmap.height
  1707.     self.ox = @width / 2
  1708.     self.oy = @height
  1709.  
  1710.   end
  1711.   #.......................................................................
  1712.   update_actor_animation
  1713.   update_enemy_animation
  1714.   #.......................................................................
  1715.   # 动画 ID 与当前的情况有差异的情况下
  1716.   #.........................................................................
  1717.   if @battler.is_a?(Game_Enemy)
  1718.     if @once == 1 and @loop_animation_once == 1 and
  1719.        @battler.battler_dead_ani == 1
  1720.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[5])
  1721.     elsif @once == 1 and @loop_animation_once == 1 and $scene.phase != 5
  1722.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  1723.     end
  1724.   end
  1725.   if @battler.is_a?(Game_Actor)
  1726.     ####################################################################
  1727.     if @once == 1 and @loop_animation_once == 1 and $scene.phase != 5 and
  1728.        @battler.battler_dead_ani == 1 and @battler.dead?
  1729.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[5])
  1730.     #######################################################################
  1731.     elsif @once == 1 and @loop_animation_once == 1 and $scene.phase != 5
  1732.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  1733.       #################################################################
  1734.       $fangyu = 0
  1735.       @battler.setup_battler_dead_ani(0)
  1736.       ########################################################
  1737.     elsif @once == 1 and @loop_animation_once == 1 and $scene.phase == 5 and
  1738.           not @battler.dead?
  1739.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[7])
  1740.       ######################################################
  1741.       $fangyu = 0
  1742.       @battler.setup_battler_dead_ani(0)
  1743.       ######################################################
  1744.     end
  1745.   end
  1746.  
  1747. if @battler.damage == nil and
  1748.        @battler.state_animation_id != @state_animation_id
  1749.       @state_animation_id = @battler.state_animation_id
  1750.      # loop_animation($data_animations[@state_animation_id])
  1751.        loop_animation1($data_animations[@state_animation_id])
  1752.     end
  1753.  
  1754.  
  1755.   if @battler.battler_ani != @battler_ani
  1756.     @battler_ani = @battler.battler_ani
  1757.     @once = @battler.battler_ani_once
  1758.     loop_animation($data_animations[@battler_ani.to_i])
  1759.     # @battler.state_animation_id != @state_animation_id
  1760.       #@state_animation_id = @battler.state_animation_id
  1761.      # loop_animation($data_animations[@state_animation_id])
  1762.       # loop_animation1($data_animations[@state_animation_id])
  1763.  
  1764.  
  1765.   end
  1766.   #.........................................................................
  1767.   # 明灭
  1768.   if @battler.blink
  1769.     blink_on
  1770.   else
  1771.     blink_off
  1772.   end
  1773.   # 不可见的情况下
  1774.   unless @battler_visible
  1775.     # 出现
  1776.     if not @battler.hidden and not @battler.dead? and
  1777.        (@battler.damage == nil or @battler.damage_pop)
  1778.       #.......................................................................
  1779.       if @battler.is_a?(Game_Enemy)
  1780.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  1781.         #appear
  1782.       else
  1783.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  1784.       end
  1785.       #.......................................................................
  1786.       @battler_visible = true
  1787.     end
  1788.   end
  1789.   # 可见的情况下
  1790.   if @battler_visible
  1791.     # 逃跑
  1792.     if @battler.hidden
  1793.       $game_system.se_play($data_system.escape_se)
  1794.       escape
  1795.       @battler_visible = false
  1796.     end
  1797.     # 白色闪烁
  1798.     if @battler.white_flash
  1799.       whiten
  1800.       @battler.white_flash = false
  1801.     end
  1802.     # 动画
  1803.     if @battler.animation_id != 0
  1804.       animation = $data_animations[@battler.animation_id]
  1805.       animation(animation, @battler.animation_hit,@battler.damage, @battler.critical)
  1806.       # animation(animation, @battler.animation_hit)
  1807.       @battler.animation_id = 0
  1808.     end
  1809.     # 伤害
  1810.     if @battler.damage_pop
  1811.       @battler.damage = nil
  1812.       @battler.critical = false
  1813.       @battler.damage_pop = false
  1814.     end
  1815.     # korapusu
  1816.     if @battler.damage == nil and @battler.dead?
  1817.       if @battler.is_a?(Game_Enemy)
  1818.         if @battler.battler_dead_ani != 1
  1819.           #p "Battler Death Error"
  1820.           $game_system.se_play($data_system.enemy_collapse_se)
  1821.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  1822.           @battler.setup_battler_dead_ani(1)
  1823.         end
  1824.         #.....................................................................
  1825.         collapse
  1826.         #.....................................................................
  1827.       else
  1828.         #.....................................................................
  1829.         if @battler.battler_dead_ani != 1
  1830.           #p "Battler Death Error"
  1831.           $game_system.se_play($data_system.enemy_collapse_se)
  1832.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  1833.           @battler.setup_battler_dead_ani(1)
  1834.         end
  1835.         #.....................................................................
  1836.       end
  1837.       @battler_visible = false
  1838.     end
  1839.   end
  1840.   # 设置活动块的坐标
  1841.   if @flash_shake_switch == true
  1842.     self.x = @battler.screen_x
  1843.     self.y = @battler.screen_y
  1844.     self.z = @battler.screen_z
  1845.     @flash_shake_switch = false
  1846.   end
  1847.   if @flash_shake != 0 and @battler.damage != nil and RPG::BATTLER_JUMP
  1848.     if @battler.is_a?(Game_Enemy)
  1849.       case @flash_shake
  1850.       when 9..10
  1851.         self.x -=4
  1852.         self.y -=4
  1853.         self.z = @battler.screen_z
  1854.       when 6..8
  1855.         self.x -=2
  1856.         self.y -=2
  1857.         self.z = @battler.screen_z
  1858.       when 3..5
  1859.         self.x +=2
  1860.         self.y +=2
  1861.         self.z = @battler.screen_z
  1862.       when 1..2
  1863.         self.x +=4
  1864.         self.y +=4
  1865.         self.z = @battler.screen_z
  1866.       end
  1867.     end
  1868.     if @battler.is_a?(Game_Actor)
  1869.       case @flash_shake
  1870.       when 9..10
  1871.         self.x +=4
  1872.         self.y +=4
  1873.         self.z = @battler.screen_z
  1874.       when 6..8
  1875.         self.x +=2
  1876.         self.y +=2
  1877.         self.z = @battler.screen_z
  1878.       when 3..5
  1879.         self.x -=2
  1880.         self.y -=2
  1881.         self.z = @battler.screen_z
  1882.       when 1..2
  1883.         self.x -=4
  1884.         self.y -=4
  1885.         self.z = @battler.screen_z
  1886.       end
  1887.     end
  1888.    @flash_shake -= 1
  1889.   end
  1890. end
  1891. end
  1892.  
  1893. #==============================================================================
  1894. # ■ Scene_Battle
  1895. #------------------------------------------------------------------------------
  1896. #  处理战斗画面的类。
  1897. #==============================================================================
  1898.  
  1899. class Scene_Battle
  1900. #--------------------------------------------------------------------------
  1901. # ● 定义实例变量
  1902. #--------------------------------------------------------------------------
  1903. attr_reader   :animation1_id                    # 行动方动画ID
  1904. end
  1905. class Sprite_Battler < RPG::Sprite
  1906.   #--------------------------------------------------------------------------
  1907.   # ● 处理角色动作
  1908.   #--------------------------------------------------------------------------
  1909.   def update_actor_animation
  1910.     if @battler.is_a?(Game_Actor)
  1911.       if @battler.show_damage_value != nil
  1912.         self.damage(@battler.show_damage_value, false)
  1913.         @battler.show_damage(nil)
  1914.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1)
  1915.         @battler.setup_battler_hurt_ani(1)
  1916.       end
  1917.       @last_frame = $fanime_frame_max if $fanime_frame_max > @last_frame
  1918.       if @battler.current_action.kind == 0 and @battler.current_action.basic == 1 and @battler.show_damage_value != nil
  1919.         # 防御的时候
  1920.         if @hits > @temp_hits and not @battler.dead?
  1921.           ############ #小改动
  1922.           @temp_hits+=1
  1923.           ############
  1924.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  1925.           @battler.setup_battler_hurt_ani(1)
  1926.           #################################################################
  1927.         elsif @last_hits == 1 and not @battler.dead?
  1928.           ############ #小改动
  1929.           @last_hits = 0
  1930.           ############
  1931.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  1932.           @battler.setup_battler_hurt_ani(1)
  1933.           #################################################################
  1934.         elsif @frame_index != -1 and @frame_index != @last_frame and not @battler.dead? and !@battler.damage.is_a?(Numeric)
  1935.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  1936.           @battler.setup_battler_hurt_ani(1)
  1937.           #################################################################
  1938.         elsif @last_hits == 1 and not @battler.dead? and !@battler.damage.is_a?(Numeric)
  1939.           ############ #小改动
  1940.           @last_hits = 0
  1941.           ############
  1942.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  1943.           @battler.setup_battler_hurt_ani(1)
  1944.           #################################################################
  1945.         end
  1946.       else
  1947.         # 单回合只有一次攻击
  1948.        if @last_hits == 1 and not @battler.dead? and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and $fangyu != 1
  1949.           ############ #小改动
  1950.           @last_hits = 0
  1951.           ############
  1952.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1)
  1953.           @battler.setup_battler_hurt_ani(1)
  1954.           #################################################################
  1955.         # 单回合多次攻击
  1956.        elsif @hits > @temp_hits and @frame_index != @last_frame and not @battler.dead? and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and  
  1957. $fangyu != 1
  1958.           ############ #小改动
  1959.           @temp_hits+=1
  1960.           ############
  1961.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1)
  1962.           @battler.setup_battler_hurt_ani(1)
  1963.         ########################################################################
  1964.         # 死亡之前攻击
  1965.        elsif @hits > @temp_hits and @frame_index != @last_frame and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and $fangyu != 1 and  
  1966. @battler.dead? and @battler.battler_dead_ani != 1
  1967.           ############ #小改动
  1968.           @temp_hits+=1
  1969.           ############
  1970.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1)
  1971.           @battler.setup_battler_hurt_ani(1)
  1972.           #################################################################
  1973.         # 闪避的回合
  1974.        elsif !@battler_damage.is_a?(Numeric) and @last_hits == 1 and @frame_index == @last_frame
  1975.           @last_hits = 0
  1976.           #################################################################
  1977.         # 无伤害的攻击
  1978.         elsif @battler_damage.is_a?(Numeric) and @battler.damage == 0 and @last_hits == 1 and @frame_index == @last_frame
  1979.           @last_hits = 0
  1980.           #################################################################
  1981.         # 死亡判定
  1982.  
  1983.         elsif @frame_index == @last_frame and @battler.dead? and @battler.battler_dead_ani != 1
  1984.        #elsif @last_hits == 1 and @frame_index == @last_frame and @battler.dead? and @battler.battler_dead_ani != 1
  1985.           @last_hits = 0
  1986.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  1987.           #@battler.setup_battler_dead_ani(1)
  1988.           #################################################################
  1989.         # 胜利判定
  1990.        elsif $scene.phase == 5 and @once == 0 and @battler_name != nil and not @battler.hidden and not @battler.dead? and $game_temp.battle_proc == nil
  1991.              @once = 1
  1992.              @battler.setup_battler_ani(@battler_name.split(/★/)[6], 1)
  1993.         end
  1994.       end
  1995.     end
  1996.   end
  1997.   #--------------------------------------------------------------------------
  1998.   # ● 处理敌人动作
  1999.   #--------------------------------------------------------------------------
  2000.   def update_enemy_animation
  2001.     if @battler.is_a?(Game_Enemy)
  2002.       if @battler.show_damage_value != nil
  2003.         self.damage(@battler.show_damage_value, false)
  2004.         @battler.show_damage(nil)
  2005.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1)
  2006.         @battler.setup_battler_hurt_ani(1)
  2007.       end
  2008.       @last_frame = $fanime_frame_max if $fanime_frame_max > @last_frame
  2009.       if @battler.current_action.kind == 0 and @battler.current_action.basic == 1
  2010.       else
  2011.         # 单回合只有一次攻击
  2012.         if @last_hits == 1 and not @battler.dead? and @battler.damage.is_a?(Numeric) and @battler.damage > 0
  2013.           ############ #小改动
  2014.           @last_hits = 0
  2015.           ############
  2016.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1)
  2017.           @battler.setup_battler_hurt_ani(1)
  2018.           #################################################################
  2019.         # 单回合多次攻击
  2020.        elsif @hits > @temp_hits and @frame_index != @last_frame and not @battler.dead? and @battler.damage.is_a?(Numeric) and @battler.damage > 0
  2021.           ############ #小改动
  2022.           @temp_hits+=1
  2023.           ############
  2024.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1)
  2025.           @battler.setup_battler_hurt_ani(1)
  2026.           #################################################################
  2027.         # 死亡之前攻击
  2028.        elsif @hits > @temp_hits and @frame_index != @last_frame and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and @battler.dead? and  
  2029. @battler.battler_dead_ani != 1
  2030.           ############ #小改动
  2031.           @temp_hits+=1
  2032.           ############
  2033.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1)
  2034.           @battler.setup_battler_hurt_ani(1)
  2035.           #################################################################
  2036.         # 无伤害的攻击
  2037.         elsif !@battler_damage.is_a?(Numeric) and @last_hits == 1 and @frame_index == @last_frame
  2038.           @last_hits = 0
  2039.           #################################################################
  2040.         # 闪避的回合
  2041.         elsif @battler_damage.is_a?(Numeric) and @battler.damage == 0 and @last_hits == 1 and @frame_index == @last_frame
  2042.           @last_hits = 0
  2043.           #################################################################
  2044.         # 死亡判定
  2045.         elsif @frame_index == @last_frame and @battler.dead? and @battler.battler_dead_ani != 1
  2046.         #elsif @last_hits == 1 and @frame_index == @last_frame and @battler.dead? and @battler.battler_dead_ani != 1
  2047.           @last_hits = 0
  2048.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  2049.           @battler.setup_battler_dead_ani(1)
  2050.           collapse
  2051.         end
  2052.       end
  2053.     end
  2054.   end
  2055. end
  2056.  
  2057. class Scene_Battle
  2058.   alias update101 update
  2059.   def update
  2060.     update101
  2061.     @actor_command_window.z=4999
  2062.     @item_window.z=4999 if @item_window
  2063.     @skill_window.z=4999 if @skill_window
  2064.   end
  2065.  
  2066.   alias start_phase5101 start_phase5
  2067.   def start_phase5
  2068.     @spriteset.win #显示战斗胜利动画
  2069.     start_phase5101
  2070.   end
  2071. end


战斗特效脚本
RUBY 代码复制
  1. #==============================================================================
  2. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  3. #==============================================================================
  4.  
  5. # ▼▲▼ XRXS19. 特殊効果詰め合わせ:戦闘用 with 29 parts ver..18a ▼▲▼
  6. # by 桜雅 在土, 和希, シムナフ
  7.  
  8. #==============================================================================
  9. # ■ 以下内容定义各特技的属性名
  10. #==============================================================================
  11. class Game_Battler
  12.   RERAISE_STATE_NAME = /复活/           
  13.   LIBLA_SKILL_ELEMENT_NAME = "透视"     
  14.   POWERSTOCK_SKILL_ELEMENT_NAME = "聚气"
  15.   POWERSTOCK_BASE_RATE = 0.5            #——每回合聚气威力上升倍率
  16.   STEAL_SKILL_ELEMENT_NAME = "偷窃"
  17.   ELEMENT_NAME_SP_DAMAGE = "SP损伤"
  18.   ELEMENT_NAME_HP_DRAIN = "HP吸收"
  19.   ELEMENT_NAME_SP_DRAIN = "SP吸收"
  20.   ELEMENT_NAME_CRITICAL_HIT = "必杀"
  21.   ELEMENT_NAME_CERTAIN_HIT = "必中"
  22.   ELEMENT_NAME_HP_COST = "HP消耗"
  23. end
  24. class Game_BattleAction
  25.   ELEMENT_NAME_SPEED_PRIORITY = "优先度"
  26. end
  27. class Scene_Battle
  28.   ELEMENT_NAME_HP_COST = "HP消耗"
  29.   ELEMENT_NAME_DERIVER = "派生"
  30.   ELEMENT_NAME_MOVE_TIMES = "行动回数"
  31.   ELEMENT_NAME_AREA_ENEMY_ALL = "全体化"
  32.   ELEMENT_NAME_AREA_WHOLE = "全域化"
  33.   ELEMENT_NAME_AREA_ENEMY_RAND = "敌方随机"
  34.   ELEMENT_NAME_AREA_ACTOR_RAND ="我方随机"
  35.   ELEMENT_NAME_AREA_ALL_RANDOM ="对象随机"
  36.   RERAISE_HP = 1
  37.   RERAISE_HP_PERCENT = 0
  38.   RERAISE_ANIMATION_ID = 26
  39. end
  40. module Cover_Module
  41.   ELEMENT_NAME_COVER = "援助"
  42.   STATE_NAME_COVER = "援助"
  43.   COVER_HP_PERCENT = 100
  44.   COVER_EFFECT_PERCENT = 100
  45.   COVER_EFFECT_CHAR = "Covered!"
  46.   COVER_ANIMATION_ID = 64
  47.   COVER_DEFAULT_NUMBER = 2
  48. end
  49. #==============================================================================
  50. $xrxs19_special_effections_set_work = true
  51. #--------------------------------------------------------------------------
  52. # ● 属性修正の計算?改
  53. #--------------------------------------------------------------------------
  54. class Game_Battler
  55. def elements_correct(element_set)
  56. # 無属性の場合 100 を返す
  57. return 100 if element_set == []
  58. # 与えられた属性のレートを全て乗算
  59. result = 100
  60. for i in element_set
  61. result *= self.element_rate(i) / 100.0
  62. end
  63. return result.to_i
  64. end
  65. end
  66. #==============================================================================
  67. # ■ Game_Battler
  68. #==============================================================================
  69. class Game_Battler
  70. #--------------------------------------------------------------------------
  71. # ● 追加公開インスタンス変数
  72. #--------------------------------------------------------------------------
  73. attr_accessor :reraise_state
  74. attr_accessor :reraised # リレイズしたかどうか
  75. attr_accessor :metamor_target # 変身対象
  76. attr_accessor :battler_name # バトラーグラフィック
  77. attr_reader :battler_name_original # バトラーグラフィック初期値
  78. attr_writer :hp0_ban # HP/SPの 0 化または最大制限の解除
  79. attr_writer :certain_hit # 必中受け(Trueだと攻撃を避けられない)
  80. attr_accessor :covered_friends #庇っている味方の配列
  81. attr_accessor :effect_message #
  82. attr_accessor :current_friend #かばっている味方
  83. attr_accessor :cover_remain #かばう可能な残り回数
  84. #--------------------------------------------------------------------------
  85. # ● 初期化
  86. #--------------------------------------------------------------------------
  87. alias xrxs19_battler_initialize initialize
  88. def initialize
  89. xrxs19_battler_initialize
  90. # 「かばう」用変数初期化
  91. @covered_friends = []
  92. @effect_message = nil
  93. @current_friend = nil
  94. @cover_remain = 0
  95. end
  96. #--------------------------------------------------------------------------
  97. # ● ステートの付加
  98. # state_id : ステート ID
  99. # force : 強制付加フラグ (オートステートの処理で使用)
  100. #--------------------------------------------------------------------------
  101. alias xrxs19_add_state add_state
  102. def add_state(state_id, force = false)
  103. xrxs19_add_state(state_id, force)
  104. # 「かばう」のステート付加の場合
  105. if state_id == get_cover_state_id()
  106. self.cover_remain = COVER_DEFAULT_NUMBER
  107. end
  108. end
  109. #--------------------------------------------------------------------------
  110. # ● HP の変更
  111. #--------------------------------------------------------------------------
  112. def hp=(hp)
  113. if @hp0_ban
  114. @hp = hp
  115. else
  116. @hp = [[hp, maxhp].min, 0].max
  117. # 戦闘不能を付加または解除
  118. for i in 1...$data_states.size
  119. if $data_states[i].zero_hp
  120. if self.dead?
  121. # 追加
  122. for x in 1...$data_states.size
  123. # ステート名は変更可。
  124. if $data_states[x].name[RERAISE_STATE_NAME] != nil
  125. reraise_id = $data_states[x].id
  126. break
  127. end
  128. end
  129. # リレイズ復活
  130. if reraise_id != nil && self.state?(reraise_id)
  131. self.remove_state(reraise_id)
  132. @reraised = true
  133. # 戦闘不能マイナスステートに設定されているものを解除
  134. if $data_states[i].minus_state_set != []
  135. for j in $data_states[i].minus_state_set
  136. remove_state(j)
  137. end
  138. end
  139. elsif
  140. # ここまで
  141. add_state(i)
  142. end
  143. else
  144. remove_state(i)
  145. end
  146. end
  147. end
  148. end
  149. end
  150. #--------------------------------------------------------------------------
  151. # ● SP の変更
  152. #--------------------------------------------------------------------------
  153. def sp=(sp)
  154. if @hp0_ban
  155. @sp = sp
  156. else
  157. @sp = [[sp, maxsp].min, 0].max
  158. end
  159. end
  160. #--------------------------------------------------------------------------
  161. # ● ステート [攻撃を回避できない] 判定
  162. #--------------------------------------------------------------------------
  163. alias xrxs19_cant_evade? cant_evade?
  164. def cant_evade?
  165. return true if @certain_hit
  166. return xrxs19_cant_evade?
  167. end
  168. #--------------------------------------------------------------------------
  169. # ● 通常攻撃の効果適用
  170. #--------------------------------------------------------------------------
  171. alias xrxs19_attack_effect attack_effect# alias したものは effect_it 内で使用
  172. def attack_effect(attacker)
  173. # 通常攻撃の場合、skill = nil で呼ぶ
  174. return effect_it(attacker, nil)
  175. end
  176. #--------------------------------------------------------------------------
  177. # ● スキルの効果適用
  178. #--------------------------------------------------------------------------
  179. alias xrxs19_skill_effect skill_effect # alias したものは effect_it 内で使用
  180. def skill_effect(user, skill)
  181. # スキルの場合は、skill を指定して呼ぶ
  182. return effect_it(user, skill)
  183. end
  184. #--------------------------------------------------------------------------
  185. # ● 効果適用
  186. #--------------------------------------------------------------------------
  187. def effect_it(user, skill = nil)
  188. # 実行前の数値を保持
  189. last_hp = self.hp
  190. last_sp = self.sp
  191. @hp0_ban = true
  192. # 武器IDの取得
  193. weapon_id = user.is_a?(Game_Actor) ? user.weapon_id : 0
  194. # 特殊効果:必中
  195. if skill != nil and skill_element_include?(skill, ELEMENT_NAME_CERTAIN_HIT)
  196. self.certain_hit = true
  197. elsif skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_CERTAIN_HIT)
  198. self.certain_hit = true
  199. end
  200. # 基本実行、skill が nil かどうかで通常攻撃とスキルを分別
  201. if skill == nil
  202. bool = xrxs19_attack_effect(user)
  203. else
  204. bool = xrxs19_skill_effect(user, skill)
  205. end
  206. # ダメージ測定
  207. damage = last_hp - self.hp
  208. # 必中の解除
  209. self.certain_hit = false
  210. # 特殊効果:スティール/アイテム奪取
  211. if skill != nil and skill_element_include?(skill, STEAL_SKILL_ELEMENT_NAME)
  212. self.steal_effect(user, skill) if self.is_a?(Game_Enemy)
  213. elsif skill == nil and equip_weapon_element_include?(user, STEAL_SKILL_ELEMENT_NAME)
  214. self.steal_effect(user, skill) if self.is_a?(Game_Enemy)
  215. end
  216. # 特殊効果:対象に変身
  217. if skill != nil and skill_element_include?(skill, "变身")
  218. if user.metamor_target == nil
  219. if self.metamor_target == nil
  220. # 変身状態で無い場合、変身
  221. user.metamor_target = self
  222. else
  223. # 対象が変身状態の場合、対象の変身対象に変身する。
  224. user.metamor_target = self.metamor_target
  225. end
  226. else
  227. # 変身状態の場合、変身を解除する
  228. user.metamor_target = user
  229. end
  230. # 自分への変身を禁止
  231. user.metamor_target = nil if user.metamor_target == user
  232. # 対象のダメージ表示を消す
  233. self.damage = nil if self.damage == "Miss"
  234. # HP/SP最大値変更への対応
  235. @hp0_ban = false
  236. user.hp = user.hp
  237. user.sp = user.sp
  238. end
  239. # 特殊効果:武器を投げる
  240. if (skill != nil and skill_element_include?(skill, "武器投掷"))
  241. # 投擲武器の取得
  242. throw_weapon = $data_weapons[user.current_action.basic]
  243. # 武器の消費
  244. if $xrxs24_weapon_property_system_work
  245. $game_party.lose_weapon(throw_weapon.id, user.current_action.basic_ex)
  246. else
  247. $game_party.lose_weapon(throw_weapon.id, 1)
  248. end
  249. # ダメージの変更
  250. self.hp += damage if bool
  251. damage = throw_weapon.atk
  252. if weapon_element_include?(throw_weapon.id, "投掷威力")
  253. damage = damage * @one.to_i / 100
  254. end
  255. self.damage = damage
  256. self.hp -= self.damage
  257. bool = true
  258. end
  259. # 特殊効果:消費金額に順ずる固定ダメージ
  260. if skill != nil and skill_element_include?(skill, "金钱投掷")
  261. # ゴールドの消費
  262. last_gold = $game_party.gold
  263. $game_party.gain_gold(-1 * ($game_party.gold * skill.variance / 100 + skill.power))
  264. self.hp += damage if bool
  265. damage = last_gold - $game_party.gold
  266. self.damage = damage
  267. self.hp -= self.damage
  268. bool = true
  269. end
  270. # 基本実行でfalse(Miss等)の場合、ここで終了する
  271. # つまり、この上までにダメージに関係なく実行される特殊効果をいれて
  272. # これより下はダメージに関係する特殊効果を入れる。
  273. # "武器投擲"と"銭投げ"はMissでも金額を消費するため上に。
  274. return false if bool == false
  275. # 特殊効果:防御能力の判定
  276. if damage > 0 and self.guarding?
  277. # 特殊効果:防御能力 2(強防御)
  278. if battler_element_rank?(self, "防御能力") == 2
  279. damage /= 2
  280. self.damage -= damage
  281. self.hp += damage
  282. end
  283. # 特殊効果:防御能力 1(無効防御)
  284. if battler_element_rank?(self, "防御能力") == 1
  285. self.hp += damage
  286. damage = 0
  287. self.damage = damage
  288. end
  289. end
  290. # 特殊効果:必殺確実クリティカル
  291. if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_CRITICAL_HIT)) or
  292. (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_CRITICAL_HIT)) and damage > 0
  293. if self.critical
  294. self.critical = false
  295. damage /= 2
  296. self.damage -= damage
  297. self.hp += damage
  298. end
  299. if @one == nil or rand(100) < @one.to_i
  300. self.critical = true
  301. self.hp -= damage
  302. damage *= 2
  303. self.damage = damage
  304. end
  305. end
  306. # 特殊効果:使用者の 最大HP - 現在HP 固定ダメージ
  307. if skill != nil and skill_element_include?(skill, "固定HP差分")
  308. self.hp += damage
  309. damage = user.maxhp - user.hp
  310. self.damage = damage
  311. self.hp -= self.damage
  312. self.critical = false # 固定ダメージ故クリティカルを禁止
  313. end
  314. # 特殊効果:使用者の 現在HP 固定ダメージ
  315. if skill != nil and skill_element_include?(skill, "现在HP损伤")
  316. self.hp += damage
  317. damage = user.hp
  318. self.damage = damage
  319. self.hp -= self.damage
  320. self.critical = false # 固定ダメージ故クリティカルを禁止
  321. end
  322. # 特殊効果:現在HPに順ずる固定ダメージ
  323. if skill != nil and skill_element_include?(skill, "固定现在HP")
  324. self.hp += damage
  325. damage = self.hp * skill.variance / 100 + skill.power
  326. damage *= -1 if skill.power < 0
  327. self.damage = damage
  328. self.hp -= self.damage
  329. self.critical = false # 固定ダメージ故クリティカルを禁止
  330. end
  331. # 特殊効果:最大HPに順ずる固定ダメージ
  332. if skill != nil and skill_element_include?(skill, "固定最大HP")
  333. self.hp += damage
  334. damage = self.maxhp * @one.to_i / 100
  335. damage *= -1 if skill.power < 0
  336. self.damage = damage
  337. self.hp -= self.damage
  338. self.critical = false # 固定ダメージ故クリティカルを禁止
  339. end
  340. # 特殊効果:HPではなくSPにダメージを与える
  341. if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_SP_DAMAGE)) or
  342. (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_SP_DAMAGE))
  343. self.hp += damage
  344. self.sp -= damage
  345. self.damage = "SP " + damage.to_s
  346. # このタイミングで戦闘不能判定
  347. @hp0_ban = false
  348. self.sp = self.sp
  349. real_damage = last_sp - self.sp
  350. else
  351. # このタイミングで戦闘不能判定
  352. @hp0_ban = false
  353. self.hp = self.hp
  354. real_damage = last_hp - self.hp
  355. end
  356. # 使用者のHP/SPもリセット
  357. user.hp = user.hp
  358. user.sp = user.sp
  359. # 特殊効果:与えたダメージを自分のHPとして吸収
  360. if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_HP_DRAIN)) or
  361. (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_HP_DRAIN))
  362. user.damage = -real_damage * @one.to_i / 100
  363. user.hp -= user.damage
  364. end
  365. # 特殊効果:与えたダメージを自分のSPとして吸収
  366. if (skill != nil and skill_element_include?(skill, ELEMENT_NAME_SP_DRAIN)) or
  367. (skill == nil and equip_weapon_element_include?(user, ELEMENT_NAME_SP_DRAIN))
  368. user.damage = -real_damage * @one.to_i / 100
  369. user.sp -= user.damage
  370. user.damage = "SP " + user.damage.to_s
  371. end
  372. return true
  373. end
  374. #--------------------------------------------------------------------------
  375. # ● バトラーの指定名の属性のランクを判定
  376. #--------------------------------------------------------------------------
  377. def battler_element_rank?(battler, element_name)
  378. for i in 1..$data_system.elements.size
  379. if $data_system.elements[i] == element_name
  380. if self.is_a?(Game_Actor)
  381. return $data_classes[battler.class_id].element_ranks[i]
  382. else
  383. return $data_enemies[battler.id].element_ranks[i]
  384. end
  385. end
  386. end
  387. return 3
  388. end
  389. #--------------------------------------------------------------------------
  390. # ● MaxHP の取得
  391. #--------------------------------------------------------------------------
  392. alias xrxs19_maxhp maxhp
  393. def maxhp
  394. if !@metamor_target.nil?
  395. return @metamor_target.maxhp
  396. end
  397. xrxs19_maxhp
  398. end
  399. #--------------------------------------------------------------------------
  400. # ● MaxSP の取得
  401. #--------------------------------------------------------------------------
  402. alias xrxs19_maxsp maxsp
  403. def maxsp
  404. if !@metamor_target.nil?
  405. return @metamor_target.maxsp
  406. end
  407. xrxs19_maxsp
  408. end
  409. #--------------------------------------------------------------------------
  410. # ● 腕力の取得
  411. #--------------------------------------------------------------------------
  412. alias xrxs19_str str
  413. def str
  414. if !@metamor_target.nil?
  415. return @metamor_target.str
  416. end
  417. xrxs19_str
  418. end
  419. #--------------------------------------------------------------------------
  420. # ● 器用さの取得
  421. #--------------------------------------------------------------------------
  422. alias xrxs19_dex dex
  423. def dex
  424. if !@metamor_target.nil?
  425. return @metamor_target.dex
  426. end
  427. xrxs19_dex
  428. end
  429. #--------------------------------------------------------------------------
  430. # ● 素早さの取得
  431. #--------------------------------------------------------------------------
  432. alias xrxs19_agi agi
  433. def agi
  434. if !@metamor_target.nil?
  435. return @metamor_target.agi
  436. end
  437. xrxs19_agi
  438. end
  439. #--------------------------------------------------------------------------
  440. # ● 魔力の取得
  441. #--------------------------------------------------------------------------
  442. alias xrxs19_int int
  443. def int
  444. if !@metamor_target.nil?
  445. return @metamor_target.int
  446. end
  447. xrxs19_int
  448. end
  449. #--------------------------------------------------------------------------
  450. # ● 攻撃力の取得
  451. #--------------------------------------------------------------------------
  452. alias xrxs19_atk atk
  453. def atk
  454. if !@metamor_target.nil?
  455. return @metamor_target.atk
  456. end
  457. xrxs19_atk
  458. end
  459. #--------------------------------------------------------------------------
  460. # ● 物理防御の取得
  461. #--------------------------------------------------------------------------
  462. alias xrxs19_pdef pdef
  463. def pdef
  464. if !@metamor_target.nil?
  465. return @metamor_target.pdef
  466. end
  467. xrxs19_pdef
  468. end
  469. #--------------------------------------------------------------------------
  470. # ● 魔法防御の取得
  471. #--------------------------------------------------------------------------
  472. alias xrxs19_mdef mdef
  473. def mdef
  474. if !@metamor_target.nil?
  475. return @metamor_target.mdef
  476. end
  477. xrxs19_mdef
  478. end
  479. #--------------------------------------------------------------------------
  480. # ● 回避修正の取得
  481. #--------------------------------------------------------------------------
  482. alias xrxs19_eva eva
  483. def eva
  484. if !@metamor_target.nil?
  485. return @metamor_target.eva
  486. end
  487. xrxs19_eva
  488. end
  489. end
  490.  
  491. #==============================================================================
  492. # ■ Game_BattleAction
  493. #==============================================================================
  494. class Game_BattleAction
  495. #--------------------------------------------------------------------------
  496. # ● 公開インスタンス変数
  497. #--------------------------------------------------------------------------
  498. attr_accessor :speed_priority # スピード優先度
  499. attr_accessor :weapon_id # 武器 ID
  500. attr_accessor :basic_ex # 基本拡張(補助的に数値を保持)
  501. #--------------------------------------------------------------------------
  502. # ● クリア
  503. #--------------------------------------------------------------------------
  504. alias xrxs19_clear clear
  505. def clear
  506. @weapon_id = 0
  507. xrxs19_clear
  508. end
  509. #--------------------------------------------------------------------------
  510. # ● スキルの優先度取得
  511. #--------------------------------------------------------------------------
  512. def speed_priority
  513. if @kind == 0 and @basic == 0
  514. # 通常攻撃の場合
  515. elsif @kind == 1
  516. # スキルの場合
  517. return 0 if $data_skills[@skill_id] == nil
  518. for i in $data_skills[@skill_id].element_set
  519. if $data_system.elements[i] != nil
  520. if $data_system.elements[i] =~ /^#{ELEMENT_NAME_SPEED_PRIORITY}([+-]?[0-9]+)/
  521. return $1.to_i
  522. end
  523. end
  524. end
  525. end
  526. return 0
  527. end
  528. end
  529. #==============================================================================
  530. # ■ Game_Actor
  531. #==============================================================================
  532. class Game_Actor < Game_Battler
  533. #--------------------------------------------------------------------------
  534. # ● セットアップ
  535. #--------------------------------------------------------------------------
  536. alias xrxs19_setup setup
  537. def setup(actor_id)
  538. xrxs19_setup(actor_id)
  539. @reraised = false
  540. @reraise_state = 0
  541. @metamor_target = nil
  542. @battler_name_original = @battler_name
  543. end
  544. #--------------------------------------------------------------------------
  545. # ● MaxHP の取得
  546. #--------------------------------------------------------------------------
  547. alias xrxs19_maxhp maxhp
  548. def maxhp
  549. if !@metamor_target.nil?
  550. return @metamor_target.maxhp
  551. end
  552. xrxs19_maxhp
  553. end
  554. #--------------------------------------------------------------------------
  555. # ● スキルの使用可能判定
  556. #--------------------------------------------------------------------------
  557. alias xrxs19_skill_can_use? skill_can_use?
  558. def skill_can_use?(skill_id)
  559. # スキルを取得
  560. @skill = $data_skills[skill_id]
  561. # HP消費スキルの場合
  562. if skill_element_include?(@skill, ELEMENT_NAME_HP_COST) and @actor_id > 0
  563. # HP が足りない場合は使用不可
  564. if $data_skills[skill_id].sp_cost > self.hp
  565. return false
  566. end
  567. # SP消費量を回復させ、SP が足りない場合を回避(最大値を超えて回復)
  568. self.hp0_ban = true
  569. self.sp += @skill.sp_cost
  570. bool = xrxs19_skill_can_use?(skill_id)
  571. # SPを元に戻す
  572. self.sp -= @skill.sp_cost
  573. self.hp0_ban = false
  574. return bool
  575. else
  576. return xrxs19_skill_can_use?(skill_id)
  577. end
  578. end
  579. end
  580. #==============================================================================
  581. # ■ Game_Enemy
  582. #==============================================================================
  583. class Game_Enemy < Game_Battler
  584. #--------------------------------------------------------------------------
  585. # ● オブジェクト初期化
  586. #--------------------------------------------------------------------------
  587. alias xrxs19_initialize initialize
  588. def initialize(troop_id, member_index)
  589. xrxs19_initialize(troop_id, member_index)
  590. @reraised = false
  591. @reraise_state = 0
  592. @metamor_target = nil
  593. @battler_name_original = @battler_name
  594. end
  595. end
  596. #==============================================================================
  597. # ■ Window_Item
  598. #==============================================================================
  599. class Window_Item < Window_Selectable
  600. #--------------------------------------------------------------------------
  601. # ● オブジェクト初期化
  602. #--------------------------------------------------------------------------
  603. alias xrxs19_initialize initialize
  604. def initialize
  605. xrxs19_initialize
  606. refresh
  607. end
  608. #--------------------------------------------------------------------------
  609. # ● 値の受け渡し
  610. #--------------------------------------------------------------------------
  611. def set_itemkind(itemkind)
  612. @itemkind = itemkind
  613. refresh
  614. end
  615. #--------------------------------------------------------------------------
  616. # ● 値の受け渡し
  617. #--------------------------------------------------------------------------
  618. def set_restrict(restrict)
  619. @restrict = restrict
  620. refresh
  621. end
  622. #--------------------------------------------------------------------------
  623. # ● リフレッシュ
  624. #--------------------------------------------------------------------------
  625. alias xrxs19_refresh refresh
  626. def refresh
  627. if @itemkind != 11
  628. xrxs19_refresh
  629. return
  630. end
  631. # 11 = 制限:投擲武器のみ
  632. if self.contents != nil
  633. self.contents.dispose
  634. self.contents = nil
  635. end
  636. @data = []
  637. @data_id = []
  638. for i in 1...$data_weapons.size
  639. if $game_party.weapon_number(i) > 0
  640. @data.push($data_weapons[i]) if weapon_element_include?(i, "投掷威力")
  641. end
  642. end
  643. # 項目数が 0 でなければビットマップを作成し、全項目を描画
  644. @item_max = @data.size
  645. if @item_max > 0
  646. self.contents = Bitmap.new(width - 32, row_max * 32)
  647. for i in 0...@item_max
  648. draw_item(i)
  649. end
  650. end
  651. end
  652. #--------------------------------------------------------------------------
  653. # ● 項目の描画
  654. #--------------------------------------------------------------------------
  655. alias xrxs19_draw_item draw_item
  656. def draw_item(index)
  657. if @itemkind != 11
  658. xrxs19_draw_item(index)
  659. return
  660. end
  661. # 11 = 制限:投擲武器のみ
  662. item = @data[index]
  663. number = $game_party.weapon_number(item.id)
  664. self.contents.font.color = normal_color
  665. x = 4 + index % @column_max * (288 + 32)
  666. y = index / @column_max * 32
  667. rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  668. self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  669. bitmap = RPG::Cache.icon(item.icon_name)
  670. opacity = self.contents.font.color == normal_color ? 255 : 128
  671. self.contents.blt(x, y+4, bitmap, Rect.new(0, 0, 32, 32), opacity)
  672. self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  673. self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  674. self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  675. end
  676. end
  677. #==============================================================================
  678. # ■ Scene_Battle
  679. #==============================================================================
  680. class Scene_Battle
  681. #--------------------------------------------------------------------------
  682. # ● メイン処理
  683. #--------------------------------------------------------------------------
  684. alias xrxs19_main main
  685. def main
  686. @phase4_5_done = false
  687. xrxs19_main
  688. end
  689. #--------------------------------------------------------------------------
  690. # ● フレーム更新 (アクターコマンドフェーズ)
  691. #--------------------------------------------------------------------------
  692. alias xrxs19_update_phase3 update_phase3
  693. def update_phase3
  694. # 武器のみアイテムウィンドウが有効の場合
  695. if @item_window_weapons != nil and @item_window_weapons.visible
  696. update_phase3_item_window_weapons
  697. return
  698. end
  699. # 他
  700. xrxs19_update_phase3
  701. end
  702. #--------------------------------------------------------------------------
  703. # ● フレーム更新 (アクターコマンドフェーズ : スキル選択)
  704. #--------------------------------------------------------------------------
  705. alias xrxs19_update_phase3_skill_select update_phase3_skill_select
  706. def update_phase3_skill_select
  707. # C ボタンが押された場合
  708. if Input.trigger?(Input::C)
  709. # スキルウィンドウで現在選択されているデータを取得
  710. @skill = @skill_window.skill
  711. if skill_element_include?(@skill, "武器投掷")
  712. # 使用できない場合
  713. if @skill == nil or not @active_battler.skill_can_use?(@skill.id)
  714. # ブザー SE を演奏
  715. $game_system.se_play($data_system.buzzer_se)
  716. return
  717. end
  718. # 決定 SE を演奏
  719. $game_system.se_play($data_system.decision_se)
  720. # アクションを設定
  721. @active_battler.current_action.skill_id = @skill.id
  722. # アイテム選択へ移行する
  723. start_item_select_from_skill(@one.to_i)
  724. return
  725. end
  726. end
  727. xrxs19_update_phase3_skill_select
  728. end
  729. #--------------------------------------------------------------------------
  730. # ● フレーム更新 (アクターコマンドフェーズ : 武器のみアイテム選択)
  731. #--------------------------------------------------------------------------
  732. def update_phase3_item_window_weapons
  733. # 武器アイテムウィンドウを可視状態にする
  734. @item_window_weapons.visible = true
  735. # 武器アイテムウィンドウを更新
  736. @item_window_weapons.update
  737. # B ボタンが押された場合
  738. if Input.trigger?(Input::B)
  739. # キャンセル SE を演奏
  740. $game_system.se_play($data_system.cancel_se)
  741. # 武器アイテムの選択を終了
  742. end_item_select_from_skill
  743. return
  744. end
  745. # C ボタンが押された場合
  746. if Input.trigger?(Input::C)
  747. # 決定 SE を演奏
  748. $game_system.se_play($data_system.decision_se)
  749. # アイテムウィンドウで現在選択されているデータを取得
  750. @item = @item_window_weapons.item
  751. # アクションを設定
  752. @active_battler.current_action.basic = @item.id
  753. if $xrxs24_weapon_property_system_work
  754. # アイテムウィンドウで現在選択されているデータを取得
  755. @item_room_no = @item_window_weapons.item_room_no
  756. # アクションを設定
  757. @active_battler.current_action.basic_ex = @item_room_no
  758. end
  759. # 武器のみアイテムウィンドウを不可視化
  760. @item_window_weapons.visible = false
  761. # 効果範囲が敵単体の場合
  762. if @skill.scope == 1
  763. # エネミーの選択を開始
  764. start_enemy_select
  765. # 効果範囲が味方単体の場合
  766. elsif @skill.scope == 3 or @skill.scope == 5
  767. # アクターの選択を開始
  768. start_actor_select
  769. # 効果範囲が単体ではない場合
  770. else
  771. # アイテムの選択を終了
  772. end_item_select_from_skill
  773. # 次のアクターのコマンド入力へ
  774. phase3_next_actor
  775. end
  776. return
  777. end
  778. end
  779. #--------------------------------------------------------------------------
  780. # ● スキルからのアイテム選択開始
  781. #--------------------------------------------------------------------------
  782. def start_item_select_from_skill(restrict = 0)
  783. # 投擲アイテムウィンドウを作成 ( 武器のみ:投擲可能のみ )
  784. @item_window_weapons = Window_Item.new
  785. if restrict == 1
  786. @item_window_weapons.set_itemkind(11)
  787. else
  788. @item_window_weapons.set_itemkind(1)
  789. end
  790. # ヘルプウィンドウを関連付け
  791. @item_window_weapons.help_window = @help_window
  792. # スキルウィンドウを無効化
  793. @skill_window.active = false
  794. @skill_window.visible = false
  795. end
  796. #--------------------------------------------------------------------------
  797. # ● スキルからのアイテム選択終了
  798. #--------------------------------------------------------------------------
  799. def end_item_select_from_skill
  800. # 武器のみアイテムウィンドウを解放
  801. @item_window_weapons.dispose
  802. @item_window_weapons = nil
  803. # ヘルプウィンドウを隠す
  804. @help_window.visible = false
  805. # スキルウィンドウを有効化
  806. @skill_window.active = true
  807. @skill_window.visible = true
  808. end
  809. #--------------------------------------------------------------------------
  810. # ● エネミー選択開始
  811. #--------------------------------------------------------------------------
  812. alias xrxs19_start_enemy_select start_enemy_select
  813. def start_enemy_select
  814. return if start_select_check
  815. xrxs19_start_enemy_select
  816. end
  817. #--------------------------------------------------------------------------
  818. # ● アクター選択開始
  819. #--------------------------------------------------------------------------
  820. alias xrxs19_start_actor_select start_actor_select
  821. def start_actor_select
  822. return if start_select_check
  823. xrxs19_start_actor_select
  824. end
  825. #--------------------------------------------------------------------------
  826. # ● 選択開始時のチェック
  827. #--------------------------------------------------------------------------
  828. def start_select_check
  829. # "全体化"、"全域化"、"対象ランダム"の判定
  830. case @active_battler.current_action.kind
  831. when 0 # 攻撃
  832. # ここで「攻撃」使用者の武器IDを保持しておく
  833. @active_battler.current_action.weapon_id = @active_battler.weapon_id
  834. # チェックに戻る
  835. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_ALL) or
  836. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_WHOLE) or
  837. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_RAND) or
  838. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ACTOR_RAND) or
  839. equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ALL_RANDOM)
  840. phase3_next_actor
  841. return true
  842. end
  843. when 1 # スキル
  844. if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_ALL) or
  845. skill_element_include?(@skill, ELEMENT_NAME_AREA_WHOLE) or
  846. skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_RAND) or
  847. skill_element_include?(@skill, ELEMENT_NAME_AREA_ACTOR_RAND) or
  848. skill_element_include?(@skill, ELEMENT_NAME_AREA_ALL_RANDOM)
  849. end_skill_select
  850. phase3_next_actor
  851. return true
  852. end
  853. when 2 # アイテム
  854. if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_ALL) or
  855. item_element_include?(@item, ELEMENT_NAME_AREA_WHOLE) or
  856. item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_RAND) or
  857. item_element_include?(@item, ELEMENT_NAME_AREA_ACTOR_RAND) or
  858. item_element_include?(@item, ELEMENT_NAME_AREA_ALL_RANDOM)
  859. end_item_select
  860. phase3_next_actor
  861. return true
  862. end
  863. end
  864. return false
  865. end
  866. #--------------------------------------------------------------------------
  867. # ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備)
  868. #--------------------------------------------------------------------------
  869. alias xrxs19_update_phase4_step1 update_phase4_step1
  870. def update_phase4_step1
  871. # 初期化
  872. @phase4_act_continuation = 0
  873. @phase4_act_times_max = 1
  874. @skill = nil
  875. @weapon_id = nil
  876. # 戻す
  877. xrxs19_update_phase4_step1
  878. end
  879. #--------------------------------------------------------------------------
  880. # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  881. #--------------------------------------------------------------------------
  882. alias xrxs19_update_phase4_step2 update_phase4_step2
  883. def update_phase4_step2
  884. #リレイズ判定
  885. next_phase_ok = true
  886. next_phase_ok = update_reraise_effect(@active_battler)
  887. if !next_phase_ok
  888. return
  889. end
  890. if next_phase_ok
  891. # ステップ 2 へ
  892. xrxs19_update_phase4_step2
  893. end
  894. end
  895. #--------------------------------------------------------------------------
  896. # ● 基本アクション 結果作成
  897. #--------------------------------------------------------------------------
  898. alias xrxs19_make_basic_action_result make_basic_action_result
  899. def make_basic_action_result
  900. # 攻撃の場合
  901. if @active_battler.current_action.basic == 0
  902. # 武器IDの取得
  903. @weapon_id = @active_battler.is_a?(Game_Actor) ? @active_battler.weapon_id : 0
  904. # 指定行動回数取得 ( "行動回数"が無い場合は 1 のまま )
  905. weapon_element_include?(@weapon_id, ELEMENT_NAME_MOVE_TIMES)
  906. @phase4_act_times_max = @one.to_i if @one != nil
  907. # アニメーション ID を設定
  908. @animation1_id = @active_battler.animation1_id
  909. @animation2_id = @active_battler.animation2_id
  910. # 初期化
  911. @target_battlers = []
  912. # 対象側バトラーの配列を設定
  913. # "全体化"の判定
  914. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_ALL)
  915. # 行動側バトラーがエネミーの場合
  916. if @active_battler.is_a?(Game_Enemy)
  917. if @active_battler.restriction == 3
  918. @target_battlers = $game_troop.enemies
  919. else
  920. @target_battlers = $game_party.actors
  921. end
  922. end
  923. # 行動側バトラーがアクターの場合
  924. if @active_battler.is_a?(Game_Actor)
  925. if @active_battler.restriction == 3
  926. @target_battlers = $game_party.actors
  927. else
  928. @target_battlers = $game_troop.enemies
  929. end
  930. end
  931. end
  932. # "敵ランダム"の判定
  933. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ENEMY_RAND)
  934. # 行動側バトラーがエネミーの場合
  935. if @active_battler.is_a?(Game_Enemy)
  936. if @active_battler.restriction == 3
  937. tb_array = $game_troop.enemies
  938. else
  939. tb_array = $game_party.actors
  940. end
  941. end
  942. # 行動側バトラーがアクターの場合
  943. if @active_battler.is_a?(Game_Actor)
  944. if @active_battler.restriction == 3
  945. tb_array = $game_party.actors
  946. else
  947. tb_array = $game_troop.enemies
  948. end
  949. end
  950. @target_battlers = [tb_array[rand(tb_array.size)]]
  951. end
  952. # "味方ランダム"の判定
  953. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ACTOR_RAND)
  954. # 行動側バトラーがエネミーの場合
  955. if @active_battler.is_a?(Game_Enemy)
  956. if @active_battler.restriction == 3
  957. tb_array = $game_party.actors
  958. else
  959. tb_array = $game_troop.enemies
  960. end
  961. end
  962. # 行動側バトラーがアクターの場合
  963. if @active_battler.is_a?(Game_Actor)
  964. if @active_battler.restriction == 3
  965. tb_array = $game_troop.enemies
  966. else
  967. tb_array = $game_party.actors
  968. end
  969. end
  970. @target_battlers = [tb_array[rand(tb_array.size)]]
  971. end
  972. # "全域化"の判定
  973. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_WHOLE)
  974. @target_battlers = $game_party.actors + $game_troop.enemies
  975. end
  976. # "対象ランダム"の判定
  977. if equip_weapon_element_include?(@active_battler, ELEMENT_NAME_AREA_ALL_RANDOM)
  978. tb_array = $game_party.actors + $game_troop.enemies
  979. @target_battlers = [tb_array[rand(tb_array.size)]]
  980. end
  981. if @target_battlers.size > 0
  982. ##かばう追加
  983. get_target_battlers_after_cover!(@target_battlers, @active_battler)
  984. # 通常攻撃の効果を適用
  985. for target in @target_battlers
  986. target.attack_effect(@active_battler)
  987. end
  988. return
  989. end
  990. end
  991. xrxs19_make_basic_action_result
  992. end
  993. #--------------------------------------------------------------------------
  994. # ● スキルまたはアイテムの対象側バトラー設定
  995. #--------------------------------------------------------------------------
  996. alias xrxs19_set_target_battlers set_target_battlers
  997. def set_target_battlers(scope)
  998. case @active_battler.current_action.kind
  999. when 1
  1000. # "全体化"の判定
  1001. if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_ALL)
  1002. scope = 2
  1003. return
  1004. end
  1005. # "全域化"の判定
  1006. scope = 8 if skill_element_include?(@skill, ELEMENT_NAME_AREA_WHOLE)
  1007. # "敵ランダム"の判定
  1008. scope = 9 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ENEMY_RAND)
  1009. # "味方ランダム"の判定
  1010. scope =10 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ACTOR_RAND)
  1011. # "対象ランダム"の判定
  1012. scope =11 if skill_element_include?(@skill, ELEMENT_NAME_AREA_ALL_RANDOM)
  1013. when 2
  1014. # "全体化"の判定
  1015. if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_ALL)
  1016. scope = 2
  1017. return
  1018. end
  1019. # "全域化"の判定
  1020. scope = 8 if item_element_include?(@item, ELEMENT_NAME_AREA_WHOLE)
  1021. # "敵ランダム"の判定
  1022. scope = 9 if item_element_include?(@item, ELEMENT_NAME_AREA_ENEMY_RAND)
  1023. # "味方ランダム"の判定
  1024. scope =10 if item_element_include?(@item, ELEMENT_NAME_AREA_ACTOR_RAND)
  1025. # "対象ランダム"の判定
  1026. scope =11 if item_element_include?(@item, ELEMENT_NAME_AREA_ALL_RANDOM)
  1027. end
  1028. case scope
  1029. when 8
  1030. @target_battlers = $game_party.actors + $game_troop.enemies
  1031. return
  1032. when 9
  1033. # 行動側バトラーがエネミーの場合
  1034. if @active_battler.is_a?(Game_Enemy)
  1035. tb_array = $game_party.actors
  1036. end
  1037. # 行動側バトラーがアクターの場合
  1038. if @active_battler.is_a?(Game_Actor)
  1039. tb_array = $game_troop.enemies
  1040. end
  1041. @target_battlers = [tb_array[rand(tb_array.size)]]
  1042. return
  1043. when 10
  1044. # 行動側バトラーがエネミーの場合
  1045. if @active_battler.is_a?(Game_Enemy)
  1046. tb_array = $game_troop.enemies
  1047. end
  1048. # 行動側バトラーがアクターの場合
  1049. if @active_battler.is_a?(Game_Actor)
  1050. tb_array = $game_party.actors
  1051. end
  1052. @target_battlers = [tb_array[rand(tb_array.size)]]
  1053. return
  1054. when 11
  1055. tb_array = $game_party.actors + $game_troop.enemies
  1056. @target_battlers = [tb_array[rand(tb_array.size)]]
  1057. return
  1058. end
  1059. # 呼び戻す
  1060. xrxs19_set_target_battlers(scope)
  1061. ##追加
  1062. get_target_battlers_after_cover!(@target_battlers, @active_battler)
  1063. end
  1064. #--------------------------------------------------------------------------
  1065. # ● スキルアクション 結果作成
  1066. #--------------------------------------------------------------------------
  1067. alias xrxs19_make_skill_action_result make_skill_action_result
  1068. def make_skill_action_result
  1069. # スキルを取得
  1070. @skill = $data_skills[@active_battler.current_action.skill_id]
  1071. # 既に一回以上行動している場合
  1072. if @phase4_act_continuation >= 1
  1073. # SP消費分のSPを回復させて擬似的にSPを減らさない
  1074. @active_battler.sp += @skill.sp_cost
  1075. else
  1076. # 指定行動回数取得
  1077. skill_element_include?(@skill, ELEMENT_NAME_MOVE_TIMES)
  1078. @phase4_act_times_max = @one.to_i if @one != nil
  1079. # 特殊効果:消費金額に順ずる固定ダメージ
  1080. if skill_element_include?(@skill, "金钱投掷")
  1081. # ゴールドウィンドウを作成
  1082. if @gold_window == nil or @gold_window.visible == false
  1083. @gold_window = Window_Gold.new
  1084. @gold_window.x = 640 - @gold_window.width
  1085. @gold_window.y = 64
  1086. @gold_window.opacity = 160
  1087. @gold_window.visible = true
  1088. end
  1089. end
  1090. # HP消費スキルの場合
  1091. if skill_element_include?(@skill, ELEMENT_NAME_HP_COST)
  1092. # HPが足りるか判定
  1093. if @active_battler.hp <= @skill.sp_cost
  1094. # 足りない場合
  1095. # ステップ 1 に移行
  1096. @phase4_step = 1
  1097. return
  1098. end
  1099. # SP消費分のSPを回復させて擬似的にSPを減らさない(最大値を超えて回復)
  1100. @active_battler.hp0_ban = true
  1101. @active_battler.sp += @skill.sp_cost
  1102. # 戻す
  1103. xrxs19_make_skill_action_result
  1104. # HPを消費
  1105. @active_battler.hp -= @skill.sp_cost
  1106. # HP/SPの制限の解除
  1107. @active_battler.hp0_ban = false
  1108. return
  1109. end
  1110. end
  1111. xrxs19_make_skill_action_result
  1112. ##追加
  1113. make_cover_skill_action_result()
  1114. end
  1115. #--------------------------------------------------------------------------
  1116. # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  1117. #--------------------------------------------------------------------------
  1118. alias xrxs19_update_phase4_step3 update_phase4_step3
  1119. def update_phase4_step3
  1120. # 既に一回以上行動している場合
  1121. if @phase4_act_continuation >= 1
  1122. # ステップ 4 に移行
  1123. @phase4_step = 4
  1124. @wait_count = 0
  1125. return
  1126. end
  1127. xrxs19_update_phase4_step3
  1128. # ちからためメッセージ表示。
  1129. for target in @target_battlers
  1130. if !target.action_message.nil?
  1131. @help_window.set_text(target.action_message, 1)
  1132. target.action_message = nil
  1133. end
  1134. end
  1135. end
  1136. #--------------------------------------------------------------------------
  1137. # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  1138. #--------------------------------------------------------------------------
  1139. alias xrxs19_update_phase4_step4 update_phase4_step4
  1140. def update_phase4_step4
  1141. # 武器投擲時、「武器のアニメーション」を対象に使う
  1142. if skill_element_include?(@skill, "武器投掷")
  1143. @animation2_id = $data_weapons[@active_battler.current_action.basic].animation2_id
  1144. end
  1145. # ゴールドウィンドウを更新
  1146. @gold_window.refresh if @gold_window != nil
  1147. if skill_element_include?(@skill, "变身")
  1148. tb_array = @target_battlers
  1149. @target_battlers = [@active_battler]
  1150. xrxs19_update_phase4_step4
  1151. @target_battlers = tb_array
  1152. else
  1153. xrxs19_update_phase4_step4
  1154. end
  1155. # かばわれたメンバーのアニメーション
  1156. for target in @target_battlers
  1157. if target.current_friend != nil
  1158. target.current_friend.animation_id = COVER_ANIMATION_ID
  1159. end
  1160. end
  1161. # 既に一回以上行動している場合
  1162. if @phase4_act_continuation >= 1
  1163. @wait_count = 0
  1164. end
  1165. end
  1166. #--------------------------------------------------------------------------
  1167. # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  1168. #--------------------------------------------------------------------------
  1169. alias xrxs19_update_phase4_step5 update_phase4_step5
  1170. def update_phase4_step5
  1171. # 呼び戻す
  1172. xrxs19_update_phase4_step5
  1173. # かばわれたメンバーのダメージ
  1174. for target in @target_battlers
  1175. if target.current_friend != nil
  1176. target.current_friend.damage_pop = true
  1177. #かばっている状態の初期化
  1178. target.current_friend = nil
  1179. end
  1180. end
  1181. # 生存確認
  1182. target_still_left = false
  1183. for target in @target_battlers
  1184. # ターゲットが生き残っているか判別
  1185. target_still_left = true if !target.dead?
  1186. # 戦闘不能時で、変身を解除
  1187. if target.dead? and target.metamor_target != nil
  1188. target.animation_id = 17 # 戦闘不能変身解除時のアニメーションID
  1189. target.animation_hit = true
  1190. target.battler_name = target.battler_name_original
  1191. target.metamor_target = nil
  1192. end
  1193. end
  1194. # ダメージ表示
  1195. if @active_battler.damage != nil
  1196. @active_battler.damage_pop = true
  1197. end
  1198. # 変身対象のバトラーグラフィックをコピー
  1199. if skill_element_include?(@skill, "变身")
  1200. if @active_battler.metamor_target != nil
  1201. @active_battler.battler_name = @active_battler.metamor_target.battler_name
  1202. else
  1203. @active_battler.battler_name = @active_battler.battler_name_original
  1204. end
  1205. end
  1206. # ターゲットの敵への処理
  1207. for target in @target_battlers
  1208. # スティール結果メッセージ表示。ただし、複数ターゲットの表示は不可能
  1209. if !target.effect_message.nil?
  1210. @help_window.set_text(target.effect_message, 1)
  1211. target.effect_message = nil
  1212. end
  1213. end
  1214. # 行動した回数のカウントを 1 加算
  1215. @phase4_act_continuation += 1
  1216. # 実行済み行動回数が、指定行動回数に達したかを判別
  1217. if @phase4_act_continuation < @phase4_act_times_max
  1218. # 達していない場合
  1219. # 生存している場合、続ける。
  1220. if target_still_left
  1221. # 指定行動回数に満たない場合は繰り返す為、ステップ 2 に移行
  1222. @phase4_step = 2
  1223. @wait_count = 0
  1224. # スキル使用中の場合はヘルプウィンドウを隠すのをやめる
  1225. if @active_battler.current_action.kind == 1
  1226. @help_window.visible = true
  1227. end
  1228. end
  1229. else
  1230. # 達した場合
  1231. # 敵が生存、かつ skillが"派生"属性を持つ場合
  1232. if target_still_left and
  1233. (skill_element_include?(@skill, ELEMENT_NAME_DERIVER) or
  1234. (@weapon_id != nil and equip_weapon_element_include?(@active_battler, ELEMENT_NAME_DERIVER)))
  1235. if @one.to_i > 0
  1236. # 回数をリセット
  1237. @phase4_act_continuation = 0
  1238. @phase4_act_times_max = 1
  1239. # 武器攻撃ではなくなるため @weapon_id を nil 化
  1240. @weapon_id = nil
  1241. # 新しいスキルID
  1242. @active_battler.current_action.kind = 1
  1243. @active_battler.current_action.skill_id = @one.to_i
  1244. # ステップ 2 に移行
  1245. @phase4_step = 2
  1246. @wait_count = 0
  1247. end
  1248. end
  1249. end
  1250. # ゴールドウィンドウを隠す
  1251. @gold_window.visible = false if @gold_window != nil
  1252. end
  1253. #--------------------------------------------------------------------------
  1254. # ● フレーム更新 (メインフェーズ ステップ 6 : リレイズ表示→リフレッシュ)
  1255. #--------------------------------------------------------------------------
  1256. alias xrxs19_update_phase4_step6 update_phase4_step6
  1257. def update_phase4_step6
  1258. next_phase_ok = true
  1259. #リレイズ判定
  1260. for enemy in $game_troop.enemies
  1261. next_phase_ok = update_reraise_effect(enemy)
  1262. if !next_phase_ok
  1263. return
  1264. end
  1265. end
  1266. for actor in $game_party.actors
  1267. next_phase_ok = update_reraise_effect(actor)
  1268. if !next_phase_ok
  1269. return
  1270. end
  1271. end
  1272. if next_phase_ok
  1273. xrxs19_update_phase4_step6
  1274. end
  1275. end
  1276. #===================================================
  1277. #リレイズエフェクト
  1278. #===================================================
  1279. def update_reraise_effect(battler)
  1280. if battler.reraised
  1281. case battler.reraise_state
  1282. when 0
  1283. battler.reraise_state = 1 # コラプス待ち
  1284. @wait_count = 16
  1285. return false
  1286. when 1
  1287. battler.reraise_state = 2 # 復活アニメーション
  1288. ##IDは好きなアニメーションIDを指定
  1289. battler.animation_id = RERAISE_ANIMATION_ID
  1290. @wait_count = 8
  1291. return false#
  1292. when 2
  1293. #復活処理
  1294. battler.hp = battler.maxhp * RERAISE_HP_PERCENT / 100 + RERAISE_HP
  1295. battler.reraise_state = 3 #アピアーアニメーション
  1296. @wait_count = 8
  1297. return false#
  1298. when 3
  1299. battler.reraise_state = 0 #終了?通常処理に戻る
  1300. battler.reraised = false #フラグを初期値へ
  1301. @status_window.refresh
  1302. return true
  1303. end
  1304. else
  1305. return true
  1306. end
  1307. end
  1308. #--------------------------------------------------------------------------
  1309. # ● アフターバトルフェーズ開始
  1310. #--------------------------------------------------------------------------
  1311. alias xrxs19_update_phase5 update_phase5
  1312. def update_phase5
  1313. next_phase_ok = false
  1314. # 次のアクターへ
  1315. @phase5_i = -1 if @phase5_i == nil
  1316. @phase5_i += 1
  1317. if @phase5_i < $game_party.actors.size
  1318. actor = $game_party.actors[@phase5_i]
  1319. # 変身状態の味方がいるか判別し、それを解除する
  1320. if actor.metamor_target != nil
  1321. actor.animation_id = 17 # 戦闘終了変身解除時のアニメーションID
  1322. actor.animation_hit = true
  1323. actor.battler_name = actor.battler_name_original
  1324. actor.metamor_target = nil
  1325. # ステータスウィンドウをリフレッシュ
  1326. @status_window.refresh
  1327. # アニメーションの長さにかかわらず、最低 4 フレーム待つ
  1328. @wait_count = 4
  1329. end
  1330. else
  1331. next_phase_ok = true
  1332. end
  1333. if next_phase_ok
  1334. xrxs19_update_phase5
  1335. end
  1336. end
  1337. #--------------------------------------------------------------------------
  1338. # ● 行動順序作成
  1339. #--------------------------------------------------------------------------
  1340. alias xrxs19_make_action_orders make_action_orders
  1341. def make_action_orders
  1342. xrxs19_make_action_orders
  1343. # 優先度の大きい順 (同値の場合は素早さの速い順) に並び替え
  1344. @action_battlers.sort! do |a, b|
  1345. if a.current_action.speed_priority > b.current_action.speed_priority
  1346. -1
  1347. elsif a.current_action.speed_priority < b.current_action.speed_priority
  1348. +1
  1349. elsif a.current_action.speed > b.current_action.speed
  1350. -1
  1351. elsif a.current_action.speed < b.current_action.speed
  1352. +1
  1353. else
  1354. 0 # a <=> b
  1355. end
  1356. end
  1357. end
  1358. #--------------------------------------------------------------------------
  1359. # ● バトル終了
  1360. #--------------------------------------------------------------------------
  1361. alias xrxs19_battle_end battle_end
  1362. def battle_end(result)
  1363. for i in 0...$game_party.actors.size
  1364. actor = $game_party.actors[i]
  1365. # 変身状態の味方がいるか判別し、それを解除する
  1366. if actor.metamor_target != nil
  1367. actor.battler_name = actor.battler_name_original
  1368. actor.metamor_target = nil
  1369. end
  1370. end
  1371. xrxs19_battle_end(result)
  1372. end
  1373. end
  1374. #=============================================================================
  1375. # ◇ スティール
  1376. #=============================================================================
  1377. class Game_Battler
  1378. #--------------------------------------------------------------------------
  1379. # ● 公開インスタンス変数
  1380. #--------------------------------------------------------------------------
  1381. attr_accessor :effect_message
  1382. #--------------------------------------------------------------------------
  1383. # ● オブジェクト初期化
  1384. #--------------------------------------------------------------------------
  1385. alias before_steal_original_battler_initialize initialize
  1386. def initialize
  1387. before_steal_original_battler_initialize()
  1388. @effect_message = nil
  1389. @steal_skill_id = $data_system.elements.index(STEAL_SKILL_ELEMENT_NAME)
  1390. end
  1391. end
  1392. class Game_Enemy < Game_Battler
  1393. #--------------------------------------------------------------------------
  1394. # ● オブジェクト初期化
  1395. #--------------------------------------------------------------------------
  1396. alias before_steal_original_enemy_initialize initialize
  1397. def initialize(troop_id, member_index)
  1398. before_steal_original_enemy_initialize(troop_id, member_index)
  1399. @item_possession = true
  1400. end
  1401. #===================================================
  1402. #
  1403. #===================================================
  1404. def name
  1405. name = $data_enemies[@enemy_id].name.split(/-/)[0]
  1406. if !name.nil?
  1407. return name = name.strip()
  1408. else
  1409. return ''
  1410. end
  1411. end
  1412. #===================================================
  1413. #ノーマルアイテムの指定 
  1414. #エネミーネームに -n種類 ID 個数(-na 10 10) と入れて指定。
  1415. #種類は、i(アイテム) w(武器) a(防具)のいずれか一つ
  1416. #個数は省略可能、自動で1扱い。
  1417. #また、ドロップアイテムと同一にしたい場合は
  1418. #エネミーネームに -nd 個数(-nd 2) と入れて指定。
  1419. #個数は省略可能、自動で1扱い。
  1420. #===================================================
  1421.  
  1422. def normal_item
  1423. return get_item_from_name("n")#オプション"n"の文字列から取得
  1424. end
  1425.  
  1426. #===================================================
  1427. #レアアイテムの指定 
  1428. #エネミーネームに -r種類 ID 個数(-na 10 10) と入れて指定。
  1429. #種類は、i(アイテム) w(武器) a(防具)のいずれか一つ
  1430. #個数は省略可能、自動で1扱い。
  1431. #また、ドロップアイテムと同一にしたい場合は
  1432. #エネミーネームに -rd 個数(-nd 2) と入れて指定。
  1433. #個数は省略可能、自動で1扱い。
  1434. #===================================================
  1435.  
  1436. def rare_item
  1437. return get_item_from_name("r")#オプション"r"の文字列から取得
  1438. end
  1439.  
  1440. #===================================================
  1441. #*Nameからアイテムを抜き出す処理
  1442. #===================================================
  1443. def get_item_from_name(opt)
  1444. names = $data_enemies[@enemy_id].name.split(/-/)
  1445. if names.size > 1
  1446. for i in 1...names.size
  1447. if names[i][0,1] != opt
  1448. next
  1449. end
  1450.  
  1451. names[i].sub!(/^.(.*)/){$1}
  1452. ary = names[i].split(/ /)
  1453.  
  1454. if ary[0][0,1] == "g"
  1455. cgy = "g"
  1456. id = 0
  1457. if ary[1].nil?
  1458. ary[1] = "1"
  1459. elsif ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1460. ary[1] = "1"
  1461. end
  1462. possession = {"Category"=>cgy, "ID"=>id, "Num"=>ary[1].to_i}
  1463. return possession
  1464.  
  1465. elsif ary[0][0,1] == "d"
  1466. cgy = ""
  1467. id = 0
  1468. if self.item_id != 0
  1469. cgy = "i"
  1470. id = self.item_id
  1471. elsif self.weapon_id != 0
  1472. cgy = "w"
  1473. id = self.weapon_id
  1474. elsif self.armor_id != 0
  1475. cgy = "a"
  1476. id = self.armor_id
  1477. else
  1478. return nil
  1479. end
  1480.  
  1481. if ary[1].nil?
  1482. ary[1] = "1"
  1483. elsif ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1484. ary[1] = "1"
  1485. end
  1486. possession = {"Category"=>cgy, "ID"=>id, "Num"=>ary[1].to_i}
  1487. return possession
  1488.  
  1489. elsif !ary[0].sub!(/^([iwa])/){$1}.nil? && !ary[1].sub!(/^([0-9]+)/){$1}.nil?
  1490. if ary[2].nil? || ary[2].sub!(/^([0-9]+)/){$1}.nil?
  1491. ary[2] = "1"
  1492. end
  1493. possession = {"Category"=>ary[0], "ID"=>ary[1].to_i, "Num"=>ary[2].to_i}
  1494. return possession
  1495.  
  1496. end
  1497. end
  1498. end
  1499. return nil
  1500. end
  1501.  
  1502. #===================================================
  1503. #スティールエフェクト
  1504. #===================================================
  1505.  
  1506. def steal_effect(user, skill) # 引数skillを追加
  1507.  
  1508. pos = self.normal_item
  1509.  
  1510. if !@item_possession || pos.nil?
  1511. @effect_message = "没有东西可偷。"
  1512. #self.damage = "Miss"
  1513. return false
  1514. end
  1515.  
  1516. #盗み成功判定 アジリティが同一で50%、2倍で100%
  1517. if rand(100) <= ((user.agi+0.01)/(self.agi+0.01))*100/2
  1518. r_pos = self.rare_item
  1519. #レアアイテム判定
  1520. if !r_pos.nil? && rand(10) <= 1
  1521. pos = r_pos
  1522. end
  1523.  
  1524. case pos["Category"]
  1525. when "i"
  1526. item = $data_items[pos["ID"]]
  1527. if item.nil?
  1528. print "这个物品不存在!"
  1529. return false
  1530. end
  1531. $game_party.gain_item(item.id, pos["Num"])
  1532. when "w"
  1533. item = $data_weapons[pos["ID"]]
  1534. if item.nil?
  1535. print "这个物品不存在!"
  1536. return false
  1537. end
  1538. $game_party.gain_weapon(item.id, pos["Num"])
  1539. when "a"
  1540. item = $data_armors[pos["ID"]]
  1541. if item.nil?
  1542. print "这个物品不存在!"
  1543. return false
  1544. end
  1545. $game_party.gain_armor(item.id, pos["Num"])
  1546. when "g"
  1547. # ゴールド獲得
  1548. $game_party.gain_gold(pos["Num"])
  1549. end
  1550.  
  1551. if pos["Category"] == "g"
  1552. @effect_message = "#{pos["Num"]}#{$data_system.words.gold}偷到!"
  1553. else
  1554. @effect_message = "#{item.name}#{pos["Num"]}个偷到!"
  1555. end
  1556. @item_possession = false
  1557.  
  1558. self.damage = "Steal!" if self.damage == "Miss"
  1559. return true
  1560. else
  1561. @effect_message = "没有东西可偷???"
  1562. #self.damage = "Miss
  1563. return false
  1564. end
  1565.  
  1566. return false # 念のためfalse返す処理追加
  1567. # 多分なくてもifの結果(false)が返ると思うけど…
  1568. end
  1569. end
  1570. #=============================================================================
  1571. # ■ ライブラ スキル実装スクリプト 2004/09/24 - 0.1α
  1572. #=============================================================================
  1573. class Game_Battler
  1574. #--------------------------------------------------------------------------
  1575. # ● 追加公開インスタンス変数
  1576. #--------------------------------------------------------------------------
  1577. attr_accessor :libla_reserve # ライブラ予約
  1578. #--------------------------------------------------------------------------
  1579. # ● 初期化
  1580. #--------------------------------------------------------------------------
  1581. alias before_libra_initialize initialize
  1582.  
  1583. def initialize
  1584. before_libra_initialize
  1585. # 「ライブラ」属性のID取得
  1586. @libra_element_id = $data_system.elements.index(LIBLA_SKILL_ELEMENT_NAME)
  1587. @libra_element_id = 0 if @libra_element_id.nil?
  1588. # 今回の行動フェイズでライブラを受けたかどうかフラグ、初期化
  1589. @libla_reserve = false
  1590. end
  1591. #--------------------------------------------------------------------------
  1592. # ● スキルの効果適用
  1593. # user : 使用者 (バトラー)
  1594. # skill: スキル
  1595. #--------------------------------------------------------------------------
  1596. alias before_libra_skill_effect skill_effect
  1597. def skill_effect(user, skill)
  1598. #「ライブラ」スキルかどうかの判定。
  1599. if skill.element_set.include?(@libra_element_id)
  1600. # 命中率を適用する場合は下のif文のコメントを外してください
  1601. #if rand(100) < skill.hit
  1602. # このバトラーがエネミーなら情報ウィンドウを表示する
  1603. if self.is_a?(Game_Enemy)
  1604. self.libla_reserve = true
  1605. end
  1606. # 命中率を適用する場合は下のelse~endのコメントを外してください
  1607. #else
  1608. # self.damage = "Miss"
  1609. #end
  1610. # 普通のスキル判定は行わない。
  1611. return true
  1612. else
  1613. return before_libra_skill_effect(user, skill)
  1614. end
  1615. end
  1616. end
  1617. #==============================================================================
  1618. # ■ Scene_Battle
  1619. #==============================================================================
  1620. class Scene_Battle
  1621. #--------------------------------------------------------------------------
  1622. # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示)
  1623. #--------------------------------------------------------------------------
  1624. alias before_libra_update_phase4_step5 update_phase4_step5
  1625. def update_phase4_step5
  1626. # ダメージ表示
  1627. for target in @target_battlers
  1628. if target.libla_reserve
  1629. libra_window = Window_EnemyStatus.new(target)
  1630. loop do
  1631. # ゲーム画面を更新
  1632. Graphics.update
  1633. # 入力情報を更新
  1634. Input.update
  1635. # ボタンが押されたら情報ウィンドウを閉じてループを中断
  1636. if Input.trigger?(Input::C) or Input.trigger?(Input::B)
  1637. libra_window.dispose
  1638. libra_window = nil
  1639. break
  1640. end
  1641. end
  1642. end
  1643. # ライブラ予約フラグを解除
  1644. target.libla_reserve = false
  1645. end
  1646. before_libra_update_phase4_step5
  1647. end
  1648. end
  1649. #==============================================================================
  1650. # ■ Window_EnemyStatus
  1651. #------------------------------------------------------------------------------
  1652. #  エネミーのステータスを表示するステータスウィンドウです。
  1653. #==============================================================================
  1654. class Window_EnemyStatus < Window_Base
  1655. #--------------------------------------------------------------------------
  1656. # ● オブジェクト初期化
  1657. # enemy : エネミー
  1658. #--------------------------------------------------------------------------
  1659. def initialize(enemy)
  1660. super(0, 64, 640, 256)
  1661. self.contents = Bitmap.new(width - 32, height - 32)
  1662. self.back_opacity = 127
  1663. @enemy = enemy
  1664. refresh
  1665. end
  1666. #--------------------------------------------------------------------------
  1667. # ● リフレッシュ
  1668. #--------------------------------------------------------------------------
  1669. def refresh
  1670. self.contents.clear
  1671. draw_enemy_name(@enemy, 4, 0)
  1672. draw_enemy_state(@enemy, 4, 48)
  1673. draw_enemy_hp(@enemy,196, 48, 172)
  1674. draw_enemy_sp(@enemy,196, 72, 172)
  1675. draw_enemy_parameter(@enemy, 4, 120, 0)
  1676. draw_enemy_parameter(@enemy, 4, 144, 1)
  1677. draw_enemy_parameter(@enemy, 4, 168, 2)
  1678. draw_enemy_parameter(@enemy, 4, 192, 7)
  1679. draw_enemy_parameter(@enemy,196, 120, 3)
  1680. draw_enemy_parameter(@enemy,196, 144, 4)
  1681. draw_enemy_parameter(@enemy,196, 168, 5)
  1682. draw_enemy_parameter(@enemy,196, 192, 6)
  1683. self.contents.font.color = system_color
  1684. self.contents.draw_text(384, 24, 80, 32, "EXP")
  1685. self.contents.draw_text(384, 48, 80, 32, "金钱")
  1686. self.contents.draw_text(384, 96, 96, 32, "战利品")
  1687. self.contents.draw_text(384, 144, 96, 32, "偷窃物")
  1688. self.contents.font.color = normal_color
  1689. self.contents.draw_text(384 + 80, 24, 84, 32, @enemy.exp.to_s, 2)
  1690. self.contents.draw_text(384 + 80, 48, 84, 32, @enemy.gold.to_s, 2)
  1691. draw_item_name(get_enemy_item(@enemy,1), 384 + 16, 120)
  1692. draw_item_name(get_enemy_item(@enemy,2), 384 + 16, 168)
  1693. draw_item_name(get_enemy_item(@enemy,3), 384 + 16, 192)
  1694. end
  1695. #--------------------------------------------------------------------------
  1696. # ○ アイテムの取得
  1697. #--------------------------------------------------------------------------
  1698. def get_enemy_item( enemy, type )
  1699. case type
  1700. when 1:
  1701. if enemy.item_id != nil and enemy.item_id != 0
  1702. return $data_items[enemy.item_id]
  1703. elsif enemy.weapon_id != nil and enemy.weapon_id != 0
  1704. return $data_weapons[enemy.weapon_id]
  1705. elsif enemy.armor_id != nil and enemy.armor_id != 0
  1706. return $data_armors[enemy.armor_id]
  1707. else
  1708. return nil
  1709. end
  1710. when 2:
  1711. info = enemy.get_item_from_name("n")
  1712. return nil if info == nil
  1713. case info["Category"]
  1714. when "i"
  1715. return $data_items[info["ID"]]
  1716. when "w"
  1717. return $data_weapons[info["ID"]]
  1718. when "a"
  1719. return $data_armors[info["ID"]]
  1720. otherwise
  1721. return nil
  1722. end
  1723. when 3:
  1724. info = enemy.get_item_from_name("r")
  1725. return nil if info == nil
  1726. case info["Category"]
  1727. when "i"
  1728. return $data_items[info["ID"]]
  1729. when "w"
  1730. return $data_weapons[info["ID"]]
  1731. when "a"
  1732. return $data_armors[info["ID"]]
  1733. otherwise
  1734. return nil
  1735. end
  1736. otherwise
  1737. return nil
  1738. end
  1739. end
  1740. #--------------------------------------------------------------------------
  1741. # ● 名前の描画
  1742. # enemy : エネミー
  1743. # x : 描画先 X 座標
  1744. # y : 描画先 Y 座標
  1745. #--------------------------------------------------------------------------
  1746. def draw_enemy_name(enemy, x, y)
  1747. self.contents.font.color = normal_color
  1748. self.contents.draw_text(x, y, 120, 32, enemy.name)
  1749. end
  1750. #--------------------------------------------------------------------------
  1751. # ● ステートの描画
  1752. # enemy : エネミー
  1753. # x : 描画先 X 座標
  1754. # y : 描画先 Y 座標
  1755. # width : 描画先の幅
  1756. #--------------------------------------------------------------------------
  1757. def draw_enemy_state(enemy, x, y, width = 120)
  1758. text = make_battler_state_text(enemy, width, true)
  1759. self.contents.font.color = enemy.hp == 0 ? knockout_color : normal_color
  1760. self.contents.draw_text(x, y, width, 32, text)
  1761. end
  1762. #--------------------------------------------------------------------------
  1763. # ● HP の描画
  1764. # enemy : エネミー
  1765. # x : 描画先 X 座標
  1766. # y : 描画先 Y 座標
  1767. # width : 描画先の幅
  1768. #--------------------------------------------------------------------------
  1769. def draw_enemy_hp(enemy, x, y, width = 144)
  1770. # 文字列 "HP" を描画
  1771. self.contents.font.color = system_color
  1772. self.contents.draw_text(x, y, 32, 32, $data_system.words.hp)
  1773. # MaxHP を描画するスペースがあるか計算
  1774. if width - 32 >= 108
  1775. hp_x = x + width - 108
  1776. flag = true
  1777. elsif width - 32 >= 48
  1778. hp_x = x + width - 48
  1779. flag = false
  1780. end
  1781. # HP を描画
  1782. self.contents.font.color = enemy.hp == 0 ? knockout_color :
  1783. enemy.hp <= enemy.maxhp / 4 ? crisis_color : normal_color
  1784. self.contents.draw_text(hp_x, y, 48, 32, enemy.hp.to_s, 2)
  1785. # MaxHP を描画
  1786. if flag
  1787. self.contents.font.color = normal_color
  1788. self.contents.draw_text(hp_x + 48, y, 12, 32, "/", 1)
  1789. self.contents.draw_text(hp_x + 60, y, 48, 32, enemy.maxhp.to_s)
  1790. end
  1791. end
  1792. #--------------------------------------------------------------------------
  1793. # ● SP の描画
  1794. # enemy : エネミー
  1795. # x : 描画先 X 座標
  1796. # y : 描画先 Y 座標
  1797. # width : 描画先の幅
  1798. #--------------------------------------------------------------------------
  1799. def draw_enemy_sp(enemy, x, y, width = 144)
  1800. # 文字列 "SP" を描画
  1801. self.contents.font.color = system_color
  1802. self.contents.draw_text(x, y, 32, 32, $data_system.words.sp)
  1803. # MaxSP を描画するスペースがあるか計算
  1804. if width - 32 >= 108
  1805. sp_x = x + width - 108
  1806. flag = true
  1807. elsif width - 32 >= 48
  1808. sp_x = x + width - 48
  1809. flag = false
  1810. end
  1811. # SP を描画
  1812. self.contents.font.color = enemy.sp == 0 ? knockout_color :
  1813. enemy.sp <= enemy.maxsp / 4 ? crisis_color : normal_color
  1814. self.contents.draw_text(sp_x, y, 48, 32, enemy.sp.to_s, 2)
  1815. # MaxSP を描画
  1816. if flag
  1817. self.contents.font.color = normal_color
  1818. self.contents.draw_text(sp_x + 48, y, 12, 32, "/", 1)
  1819. self.contents.draw_text(sp_x + 60, y, 48, 32, enemy.maxsp.to_s)
  1820. end
  1821. end
  1822. #--------------------------------------------------------------------------
  1823. # ● パラメータの描画
  1824. # enemy : エネミー
  1825. # x : 描画先 X 座標
  1826. # y : 描画先 Y 座標
  1827. # type : パラメータの種類 (0~6)
  1828. #--------------------------------------------------------------------------
  1829. def draw_enemy_parameter(enemy, x, y, type)
  1830. case type
  1831. when 0
  1832. parameter_name = $data_system.words.atk
  1833. parameter_value = enemy.atk
  1834. when 1
  1835. parameter_name = $data_system.words.pdef
  1836. parameter_value = enemy.pdef
  1837. when 2
  1838. parameter_name = $data_system.words.mdef
  1839. parameter_value = enemy.mdef
  1840. when 3
  1841. parameter_name = $data_system.words.str
  1842. parameter_value = enemy.str
  1843. when 4
  1844. parameter_name = $data_system.words.dex
  1845. parameter_value = enemy.dex
  1846. when 5
  1847. parameter_name = $data_system.words.agi
  1848. parameter_value = enemy.agi
  1849. when 6
  1850. parameter_name = $data_system.words.int
  1851. parameter_value = enemy.int
  1852. when 7
  1853. parameter_name = "回避"
  1854. parameter_value = enemy.eva
  1855. end
  1856. self.contents.font.color = system_color
  1857. self.contents.draw_text(x, y, 120, 32, parameter_name)
  1858. self.contents.font.color = normal_color
  1859. self.contents.draw_text(x + 120, y, 36, 32, parameter_value.to_s, 2)
  1860. end
  1861. end
  1862. #=============================================================================
  1863. # ◇ ちからため スキル実装スクリプト by 和希
  1864. #=============================================================================
  1865. class Game_Battler
  1866. #--------------------------------------------------------------------------
  1867. # ● 追加公開インスタンス変数
  1868. #--------------------------------------------------------------------------
  1869. attr_accessor :powerstock # 「ちからため」回数
  1870. attr_accessor :action_message # ヘルプウィンドウに表示する文字
  1871. #--------------------------------------------------------------------------
  1872. # ● 初期化
  1873. #--------------------------------------------------------------------------
  1874. alias before_powerstock_original_initialize initialize
  1875. def initialize
  1876. before_powerstock_original_initialize
  1877. @powerstock = 0
  1878. @powerstock_skill_id = $data_system.elements.index(POWERSTOCK_SKILL_ELEMENT_NAME)
  1879. @powerstock_skill_id = 0 if @powerstock_skill_id == nil
  1880. @effect_message = nil
  1881. end
  1882. #--------------------------------------------------------------------------
  1883. # ● 通常攻撃の効果適用
  1884. # attacker : 攻撃者 (バトラー)
  1885. #--------------------------------------------------------------------------
  1886. alias before_powerstock_original_attack_effect attack_effect
  1887. def attack_effect(attacker)
  1888.   $se_skill_id = 1
  1889. # 攻撃者が「ちからため」しているか?
  1890. if attacker.powerstock > 0
  1891. bool_powerstock = true
  1892. # 攻撃者の力を一時的に上昇させる
  1893. stock_attacker_str = attacker.str
  1894. attacker.str += ( stock_attacker_str * POWERSTOCK_BASE_RATE * attacker.powerstock ).to_i
  1895. # ヘルプメッセージに「ちからためx?」を出す
  1896. @action_message = POWERSTOCK_SKILL_ELEMENT_NAME
  1897. @action_message += " x"
  1898. @action_message += attacker.powerstock.to_s
  1899. # ストックを消す
  1900. attacker.powerstock = 0
  1901. else
  1902. bool_powerstock = false
  1903. end
  1904. # fukuyamaさん↓のミス発見ありがとうございました
  1905. result = before_powerstock_original_attack_effect(attacker)
  1906. # 力を上昇させていた場合、元に戻す
  1907. if bool_powerstock
  1908. attacker.str = stock_attacker_str
  1909. end
  1910. return result
  1911. end
  1912. #--------------------------------------------------------------------------
  1913. # ● スキルの効果適用
  1914. # user : 使用者 (バトラー)
  1915. # skill: スキル
  1916. #--------------------------------------------------------------------------
  1917. alias before_powerstock_original_skill_effect skill_effect
  1918. def skill_effect(user, skill)
  1919. #「ちからため」スキルかどうかの判定。
  1920. $se_skill_id = skill.id
  1921. if skill.element_set.include?(@powerstock_skill_id)
  1922. # 命中率を適用する場合は下のif文のコメントを外してください
  1923. #if rand(100) < skill.hit
  1924. @powerstock += 1 # 「ちからため」回数を1増やす
  1925. # ダメージに"Charge"をセットする
  1926. self.damage = "Charge"
  1927. # 命中率を適用する場合は下のelse~endのコメントを外してください
  1928. #else
  1929. # self.damage = "Miss"
  1930. #end
  1931. # 普通のスキル判定は行わない。
  1932. return true
  1933. else
  1934. return before_powerstock_original_skill_effect(user, skill)
  1935. end
  1936. end
  1937. end
  1938. #=============================================================================
  1939. # ◇ 見切りステート by 和希
  1940. #=============================================================================
  1941. class Game_Battler
  1942. # 見切りステートの名前
  1943. ABANDONS_SKILL_STATE_NAME = "断念"
  1944. #--------------------------------------------------------------------------
  1945. # ● 通常攻撃の効果適用
  1946. #--------------------------------------------------------------------------
  1947. alias before_abandons_original_attack_effect attack_effect
  1948.  
  1949. def attack_effect(attacker)
  1950. # 見切りステートが存在するか?
  1951. if nil != (abandons_skill = get_abandons_id)
  1952. # 見切りステートにかかっているか?
  1953. if self.state?(abandons_skill)
  1954. ## 避ける!
  1955. # クリティカルフラグをクリア
  1956. self.critical = false
  1957. # ダメージに "Avoid!!" を設定
  1958. self.damage = "Avoid!!"
  1959. # 見切りステートを解除
  1960. self.remove_state(abandons_skill,true)
  1961. # メソッド終了
  1962. return false
  1963. end
  1964. end
  1965. # 見切りステート状態でなかった時は通常どおり
  1966. return before_abandons_original_attack_effect(attacker)
  1967. end
  1968. #--------------------------------------------------------------------------
  1969. # ● 見切りステータスのID取得
  1970. #--------------------------------------------------------------------------
  1971. def get_abandons_id
  1972. result = nil
  1973. if @abandons_status_id == nil
  1974. for i in 1 ... $data_states.size
  1975. if $data_states[i].name[/\A#{ABANDONS_SKILL_STATE_NAME}\Z/]
  1976. result = $data_states[i].id
  1977. break
  1978. end
  1979. end
  1980. @abandons_status_id = ( result != nil ? result : 0 )
  1981. elsif @abandons_status_id > 0
  1982. result = @abandons_status_id
  1983. end
  1984. return result
  1985. end
  1986. end
  1987. #=============================================================================
  1988. # ◇ かばう by シムナフ
  1989. #=============================================================================
  1990. #==============================================================================
  1991. # ■ Scene_Battle
  1992. #==============================================================================
  1993. class Scene_Battle
  1994. #追加
  1995. attr_reader :active_battler
  1996. #ここまで
  1997. ##新メソッド
  1998. def make_cover_skill_action_result
  1999. cover_num = 0
  2000. cover_bool = false
  2001. for i in @skill.element_set
  2002. if !($data_system.elements[i][/^#{ELEMENT_NAME_COVER}/].nil?)
  2003. cover_bool = true
  2004. elm_num = $data_system.elements[i][/([+-]*[0-9]+)/]
  2005. if !(elm_num.nil?)
  2006. cover_num += elm_num.to_i
  2007. end
  2008. end
  2009. end
  2010.  
  2011. if cover_bool.equal?(true)
  2012. ##自分のみが対象だった場合は味方からランダムに1人をかばう
  2013. if @target_battlers.include?(@active_battler)
  2014. if @target_battlers.size == 1
  2015. if @target_battlers[0].is_a?(Game_Actor)
  2016. friends = $game_party.actors.dup
  2017. friends.delete(@active_battler)
  2018. @target_battlers = [friends[rand(friends.size)]]
  2019. elsif @target_battlers[0].is_a?(Game_Enemy)
  2020. friends = $game_troop.enemies.dup
  2021. friends.delete(@active_battler)
  2022. @target_battlers = [friends[rand(friends.size)]]
  2023. end
  2024. else
  2025. @target_battlers.delete(@active_battler)
  2026. end
  2027. end
  2028.  
  2029. @active_battler.covered_friends = @target_battlers.dup
  2030. @active_battler.add_state(get_cover_state_id())##ステート付加時にデフォルト回数で発動回数が設定される
  2031. if (cover_num > 0)
  2032. @active_battler.cover_remain = cover_num#発動回数が有った場合はその回数で上書き
  2033. end
  2034. for target in @target_battlers
  2035. target.damage = COVER_EFFECT_CHAR
  2036. end
  2037. end
  2038. end
  2039. ##ここまで
  2040. end
  2041.  
  2042. class Game_Party
  2043. ##追加エイリアス
  2044. include Cover_Module
  2045. #--------------------------------------------------------------------------
  2046. # ● 対象アクターのスムーズな決定
  2047. # actor_index : アクターインデックス
  2048. #--------------------------------------------------------------------------
  2049.  
  2050. alias before_cover_original_smooth_target_actor smooth_target_actor
  2051.  
  2052. def smooth_target_actor(actor_index)
  2053. if $scene.is_a?(Scene_Battle)
  2054. battler = $scene.active_battler()
  2055. else
  2056. battler = nil
  2057. end
  2058.  
  2059. target = [before_cover_original_smooth_target_actor(actor_index)]
  2060. get_target_battlers_after_cover!(target, battler)
  2061.  
  2062. return target[0]
  2063. end
  2064. ##ここまで
  2065. end
  2066.  
  2067. class Game_Troop
  2068. ##追加エイリアス
  2069. include Cover_Module
  2070. #--------------------------------------------------------------------------
  2071. # ● 対象エネミーのスムーズな決定
  2072. # enemy_index : エネミーインデックス
  2073. #--------------------------------------------------------------------------
  2074.  
  2075. alias before_cover_original_smooth_target_enemy smooth_target_enemy
  2076.  
  2077. def smooth_target_enemy(enemy_index)
  2078. if $scene.is_a?(Scene_Battle)
  2079. battler = $scene.active_battler()
  2080. else
  2081. battler = nil
  2082. end
  2083.  
  2084. target = [before_cover_original_smooth_target_enemy(enemy_index)]
  2085. get_target_battlers_after_cover!(target, battler)
  2086.  
  2087. return target[0]
  2088. end
  2089. ##ここまで
  2090. end
  2091.  
  2092.  
  2093. #==============================================================================
  2094. # ◇ 付加属性名称判定モジュール
  2095. #==============================================================================
  2096. module Check_ElementName_Set
  2097. #--------------------------------------------------------------------------
  2098. # ● スキルが指定名の属性を持つか判定
  2099. #--------------------------------------------------------------------------
  2100. def skill_element_include?(skill, element_name)
  2101. @one = @two = nil
  2102. return false if skill == nil or !skill.is_a?(RPG::Skill)
  2103. for i in skill.element_set
  2104. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2105. @one = $1
  2106. @two = $2
  2107. return true
  2108. end
  2109. end
  2110. return false
  2111. end
  2112. #--------------------------------------------------------------------------
  2113. # ● アイテムが指定名の属性を持つか判定
  2114. #--------------------------------------------------------------------------
  2115. def item_element_include?(item, element_name)
  2116. @one = @two = nil
  2117. return false if item == nil or !item.is_a?(RPG::Item)
  2118. for i in item.element_set
  2119. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2120. @one = $1
  2121. @two = $2
  2122. return true
  2123. end
  2124. end
  2125. return false
  2126. end
  2127. #--------------------------------------------------------------------------
  2128. # ● 武器が指定名の属性を持つか判定
  2129. #--------------------------------------------------------------------------
  2130. def weapon_element_include?(weapon_id, element_name)
  2131. @one = @two = nil
  2132. return false if weapon_id == nil or weapon_id <= 0
  2133. for i in $data_weapons[weapon_id].element_set
  2134. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2135. @one = $1
  2136. @two = $2
  2137. return true
  2138. end
  2139. end
  2140. return false
  2141. end
  2142. #--------------------------------------------------------------------------
  2143. # ● 防具が指定名の属性を持つか判定
  2144. #--------------------------------------------------------------------------
  2145. def armor_element_include?(armor_id, element_name)
  2146. @one = @two = nil
  2147. return false if armor_id == nil or armor_id <= 0
  2148. for i in $data_armors[armor_id].guard_element_set
  2149. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2150. @one = $1
  2151. @two = $2
  2152. return true
  2153. end
  2154. end
  2155. return false
  2156. end
  2157. #--------------------------------------------------------------------------
  2158. # ● 防具が指定名の属性を持つ場合その後に付く接尾テキストを取得
  2159. #--------------------------------------------------------------------------
  2160. def armor_element_suftext(armor_id, element_name)
  2161. return nil if armor_id == nil or armor_id <= 0
  2162. for i in $data_armors[armor_id].guard_element_set
  2163. if $data_system.elements[i] =~ /#{element_name}(.*)/
  2164. return $1
  2165. end
  2166. end
  2167. return nil
  2168. end
  2169. #--------------------------------------------------------------------------
  2170. # ● アクターが指定名の属性を持つ武器を装備しているかか判定
  2171. #--------------------------------------------------------------------------
  2172. def equip_weapon_element_include?(actor, element_name)
  2173. @one = @two = nil
  2174. return false if !actor.is_a?(Game_Actor)
  2175. return false if actor.weapon_id == nil or actor.weapon_id <= 0
  2176. bool = false
  2177. one_total = 0
  2178. for i in $data_weapons[actor.weapon_id].element_set
  2179. if $data_system.elements[i] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2180. one_total += $1.to_i
  2181. @two = $2
  2182. bool = true
  2183. end
  2184. end
  2185. # 武器管理システムXC.が導入されている場合
  2186. if $xrxs24_weapon_property_system_work
  2187. for i in [PROPERTY_ELEMENT_GRANT_1st, PROPERTY_ELEMENT_GRANT_2nd,
  2188. PROPERTY_ELEMENT_GRANT_3rd, PROPERTY_ELEMENT_GRANT_4th]
  2189. if $data_system.elements[actor.weapon_property[i]] =~ /#{element_name}([+-]?[0-9]+)?(%)?/
  2190. one_total += $1.to_i
  2191. @two = $2
  2192. bool = true
  2193. end
  2194. end
  2195. end
  2196. @one = one_total
  2197. return bool
  2198. end
  2199. #--------------------------------------------------------------------------
  2200. # ● アクターが指定名の属性を持つ武器/防具を装備中か判定 数値の合計も保持
  2201. #--------------------------------------------------------------------------
  2202. def actor_element_equip?(actor, element_name)
  2203. one_total = 0
  2204. bool = false
  2205. return false if !actor.is_a?(Game_Actor)
  2206. weapon = $data_weapons[actor.weapon_id]
  2207. armor1 = $data_armors[actor.armor1_id]
  2208. armor2 = $data_armors[actor.armor2_id]
  2209. armor3 = $data_armors[actor.armor3_id]
  2210. armor4 = $data_armors[actor.armor4_id]
  2211. if equip_weapon_element_include?(actor, element_name)
  2212. one_total += @one.to_i
  2213. bool = true
  2214. end
  2215. if armor_element_include?(armor1.id, element_name)
  2216. one_total += @one.to_i
  2217. bool = true
  2218. end
  2219. if armor_element_include?(armor2.id, element_name)
  2220. one_total += @one.to_i
  2221. bool = true
  2222. end
  2223. if armor_element_include?(armor3.id, element_name)
  2224. one_total += @one.to_i
  2225. bool = true
  2226. end
  2227. if armor_element_include?(armor4.id, element_name)
  2228. one_total += @one.to_i
  2229. bool = true
  2230. end
  2231. @one = one_total
  2232. return bool
  2233. end
  2234. end
  2235. #=============================================================================
  2236. # ◇ かばうModule
  2237. #=============================================================================
  2238. ####以下新規追加Module
  2239. module Cover_Module
  2240. #--------------------------------------------------------------------------
  2241. # ● かばう 後のターゲット配列生成
  2242. #--------------------------------------------------------------------------
  2243. def get_target_battlers_after_cover!(target_battlers, active_battler = nil)
  2244. #HP割合の低い順にソート
  2245. #target_battlers.sort_by!{|b| (b.hp.to_f/b.maxhp.to_f)}
  2246. target_battlers.sort!{|a,b| (a.hp.to_f/a.maxhp.to_f) <=> (b.hp.to_f/b.maxhp.to_f)}
  2247. #HP割合の多い順にソート
  2248. actors = $game_party.actors.sort_by{|b| (b.hp.to_f/b.maxhp.to_f)}.reverse
  2249. enemies = $game_troop.enemies.sort_by{|b| (b.hp.to_f/b.maxhp.to_f)}.reverse
  2250.  
  2251. for i in 0...target_battlers.size
  2252. if target_battlers[i].is_a?(Game_Actor)
  2253. for actor in actors
  2254. new_target = get_target_after_cover(active_battler,target_battlers[i],actor)
  2255. if !new_target.equal?(target_battlers[i]) && new_target.current_friend.nil? #かばう人がすでにかばっていた場合かばえない
  2256. new_target.effect_message = "#{new_target.name}は#{target_battlers[i].name}をかばった!"
  2257. new_target.current_friend = target_battlers[i]
  2258. new_target.current_friend.damage = COVER_EFFECT_CHAR
  2259. target_battlers[i] = new_target
  2260. break
  2261. end
  2262. end
  2263. end
  2264.  
  2265. if target_battlers[i].is_a?(Game_Enemy)
  2266. for enemy in enemies
  2267. new_target = get_target_after_cover(active_battler,target_battlers[i],enemy)
  2268. if !new_target.equal?(target_battlers[i]) && new_target.current_friend.nil? #かばう人がすでにかばっていた場合かばえない
  2269. new_target.effect_message = "#{new_target.name}は#{target_battlers[i].name}をかばった!"
  2270. new_target.current_friend = target_battlers[i]
  2271. new_target.current_friend.damage = COVER_EFFECT_CHAR
  2272. target_battlers[i] = new_target
  2273. break
  2274. end
  2275. end
  2276. end
  2277. end
  2278. #ターゲット重複を排除する(かばった人が2度ダメージを受けない)
  2279. target_battlers.uniq!()
  2280. #「かばう」ステートの解除判定
  2281. for target in target_battlers
  2282. if !target.current_friend.nil?
  2283. #かばう 残り回数がなくなった場合
  2284. target.cover_remain -= 1
  2285. if target.cover_remain <= 0
  2286. target.remove_state(get_cover_state_id())
  2287. target.cover_remain = 0
  2288. end
  2289. end
  2290. end
  2291. end
  2292. #--------------------------------------------------------------------------
  2293. # ● かばう の発動判定
  2294. #--------------------------------------------------------------------------
  2295. def get_target_after_cover(battler, target, coverer)
  2296. #味方からのターゲットは庇わない
  2297. if battler.is_a?(Game_Actor)
  2298. if target.is_a?(Game_Actor)
  2299. return target
  2300. end
  2301. end
  2302. if battler.is_a?(Game_Enemy)
  2303. if target.is_a?(Game_Enemy)
  2304. return target
  2305. end
  2306. end
  2307. #庇う人が動けない時は庇わない
  2308. if !(coverer.movable? && coverer.exist?)
  2309. return target
  2310. end
  2311. #庇う人が かばう のステートになっている時のみ
  2312. if !coverer.state?(get_cover_state_id())
  2313. return target
  2314. end
  2315. #ターゲットが既に他の人を庇っている時は無効
  2316. if target.state?(get_cover_state_id())
  2317. return target
  2318. end
  2319. #ターゲットと庇う人が同じの場合は無効
  2320. if target.equal?(coverer)
  2321. return target
  2322. end
  2323. #発動確率判定
  2324. if !(rand(100) <= COVER_EFFECT_PERCENT)
  2325. return taget
  2326. end
  2327. #ターゲットのHP割合判定
  2328. if !(100.0*target.hp.to_f/target.maxhp.to_f <= COVER_HP_PERCENT)
  2329. return target
  2330. end
  2331. #「かばっている味方配列」が空だったら、全ての味方を庇う
  2332. if coverer.covered_friends.size.zero?
  2333. return coverer
  2334. else
  2335. for covered_friend in coverer.covered_friends
  2336. if target.equal?(covered_friend)
  2337. return coverer
  2338. end
  2339. end
  2340. end
  2341. return target
  2342. end
  2343. #--------------------------------------------------------------------------
  2344. # ● かばう のStateID
  2345. #--------------------------------------------------------------------------
  2346. def get_cover_state_id
  2347. result = nil
  2348. if @cover_status_id == nil
  2349. for i in 1 ... $data_states.size
  2350. if $data_states[i].name[/\A#{STATE_NAME_COVER}\Z/]
  2351. result = $data_states[i].id
  2352. break
  2353. end
  2354. end
  2355. @cover_status_id = ( result != nil ? result : 0 )
  2356. elsif @cover_status_id > 0
  2357. result = @cover_status_id
  2358. end
  2359. return result
  2360. end
  2361. end
  2362. ####Module End
  2363. #//////////////////////////////////////////////////////////////////////////////
  2364. # ◇ インクルード
  2365. #//////////////////////////////////////////////////////////////////////////////
  2366. module Check_ElementName_Set
  2367. include Fixed_PropertyNumber if $xrxs24_weapon_property_system_work
  2368. end
  2369. class Game_Battler
  2370. include Check_ElementName_Set
  2371. include Cover_Module
  2372. end
  2373. class Window_Item < Window_Selectable
  2374. include Check_ElementName_Set
  2375. end
  2376. class Scene_Battle
  2377. include Check_ElementName_Set
  2378. include Cover_Module
  2379. end
  2380. #==============================================================================
  2381. # ◇ RPG::再定義「"SP "を含む場合SPダメージとして色を変更」
  2382. #==============================================================================
  2383. module RPG
  2384. class Sprite < ::Sprite
  2385. alias xrxs19_damage damage
  2386. def damage(value, critical)
  2387. if value.is_a?(String) and value.include?($data_system.words.sp)
  2388. # 解放
  2389. dispose_damage
  2390. # 数値部分を抜き取る
  2391. value = value.scan(/[+-]?[0-9]+/)[0].to_i
  2392. # 表示文字列の設定
  2393. damage_string = $data_system.words.sp + " " + value.abs.to_s
  2394. # 描写
  2395. bitmap = Bitmap.new(160, 48)
  2396. bitmap.font.name = "黑体"
  2397. bitmap.font.size = 32
  2398. bitmap.font.color.set(0, 0, 0)
  2399. bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  2400. bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  2401. bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  2402. bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  2403. if value < 0
  2404. bitmap.font.color.set(128, 255, 255)
  2405. else
  2406. bitmap.font.color.set(255, 176, 144)
  2407. end
  2408. bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  2409. if critical
  2410. bitmap.font.size = 20
  2411. bitmap.font.color.set(0, 0, 0)
  2412. bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
  2413. bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
  2414. bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
  2415. bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
  2416. bitmap.font.color.set(255, 255, 255)
  2417. bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  2418. end
  2419. @_damage_sprite = ::Sprite.new(self.viewport)
  2420. @_damage_sprite.bitmap = bitmap
  2421. @_damage_sprite.ox = 80
  2422. @_damage_sprite.oy = 20
  2423. @_damage_sprite.x = self.x
  2424. @_damage_sprite.y = self.y - self.oy / 2
  2425. @_damage_sprite.z = 3000
  2426. @_damage_duration = 40
  2427. else
  2428. # 通常時?戻す
  2429. xrxs19_damage(value, critical)
  2430. end
  2431. end
  2432. end
  2433. end
  2434.  
  2435. #==============================================================================
  2436. # 本脚本来自[url]www.66RPG.com[/url],使用和转载请保留此信息
  2437. #==============================================================================

位移.gif (94.07 KB, 下载次数: 14)

位移.gif

Lv1.梦旅人

梦石
0
星屑
99
在线时间
59 小时
注册时间
2015-9-4
帖子
43
2
发表于 2017-6-21 14:12:25 | 只看该作者
有范烈没
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 08:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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