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

Project1

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

[已经解决] 最后一击者播放胜利动画脚本,如果敌人最后一人逃跑则.....

[复制链接]

Lv5.捕梦者

梦石
0
星屑
35186
在线时间
4169 小时
注册时间
2007-12-15
帖子
10067
跳转到指定楼层
1
发表于 2017-8-12 19:02:23 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
当敌人逃跑时候游戏跳出,因为我没设置会逃跑的速度型敌人,这个bug一直没测试出来。

328 行是   @actor_sprites.find{|ac| ac.battler==winner}.win
全部脚本如下,
请帮忙修正 谢谢

RUBY 代码复制
  1. #脚本作者 66RPG ID fux2 ,QQ 缄口不言 在下表示非常感谢。
  2. #脚本由66RPG ID 89444640 提出并与大家分享~
  3. #胜利动画增加随机播放 在胜利动画文件名下加新的编号 第6第7个星星处
  4. #!为叹号 中文全角
  5. #例 角色名★9★10★11★12★13★123!124!125★621!622!623★最后一个星可以不加
  6. class Game_Battler
  7.  
  8.   def setup_battler_ani(battler_ani, once = 0,exflag = 0)
  9.     case exflag
  10.     when 1
  11.       arr = battler_ani.split(/!/)
  12.       if arr.size > 1
  13.         @win_rnd_flag = rand(arr.size)
  14.         battler_ani = arr[@win_rnd_flag]
  15.       end
  16.     when 2
  17.       arr = battler_ani.split(/!/)
  18.       if arr.size > 1
  19.         @win_rnd_flag ||= 0
  20.         battler_ani = arr[@win_rnd_flag]
  21.       end
  22.     end
  23.     @battler_ani = battler_ani
  24.     [url=home.php?mod=space&uid=2659152]@oNCE[/url] = once
  25.   end
  26.  
  27.   alias _ini_fux initialize unless $@
  28.   def initialize
  29.     @states_source = {}
  30.     _ini_fux
  31.   end
  32.  
  33.   alias _ad_state_fux add_state unless $@
  34.   def add_state(state_id, force = false)
  35.     _ad_state_fux(state_id, force)
  36.     if $game_temp.in_battle && $scene.active_battler
  37.       user = $scene.active_battler
  38.       if self.is_a?(Game_Enemy) && user.is_a?(Game_Actor)
  39.         @states_source[state_id] = user if user
  40.       end
  41.     end
  42.   end
  43.  
  44.   alias _rm_state_fux remove_state unless $@
  45.   def remove_state(state_id, force = false)
  46.     _rm_state_fux(state_id, force)
  47.     if state?(state_id) == false
  48.       @states_source.delete(state_id)
  49.     end
  50.   end
  51.  
  52.   alias _sde_fux slip_damage_effect unless $@
  53.   def slip_damage_effect
  54.     spk = nil
  55.     if @states_source.size > 0
  56.       spk = @states_source.values[0]
  57.     end
  58.     ret = _sde_fux
  59.     if self.dead?
  60.       if $game_temp.in_battle
  61.         $scene.spec_killer = spk
  62.       end
  63.     end
  64.     return ret
  65.   end
  66.  
  67.   alias _hpp_fux hp= unless $@
  68.   def hp=(hp)
  69.     _hpp_fux(hp)
  70.     if self.dead?
  71.       if $game_temp.in_battle
  72.         $scene.spec_killer = nil
  73.       end
  74.     end
  75.     self.hp
  76.   end
  77. end
  78.  
  79. class Sprite_Battler < RPG::Sprite
  80.  
  81.   def update
  82.     super
  83.     if [url=home.php?mod=space&uid=133701]@battler[/url] == nil
  84.       self.bitmap = nil
  85.       loop_animation(nil)
  86.       loop_animation1(nil)
  87.       return
  88.     end
  89.     if @battler.battler_name != @battler_name or
  90.       @battler.battler_hue != @battler_hue
  91.       @battler_name = @battler.battler_name
  92.       @battler_hue = @battler.battler_hue
  93.       self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  94.       if not @battler.hidden and not @battler.dead?
  95.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  96.       end
  97.       @width = bitmap.width
  98.       [url=home.php?mod=space&uid=291977]@height[/url] = bitmap.height
  99.       self.ox = @width / 2
  100.       self.oy = @height
  101.     end
  102.     update_actor_animation
  103.     update_enemy_animation
  104.     if @battler.is_a?(Game_Enemy)
  105.       if @once == 1 and @loop_animation_once == 1 and
  106.         @battler.battler_dead_ani == 1
  107.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[5])
  108.       elsif @once == 1 and @loop_animation_once == 1 and $scene.phase != 5
  109.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  110.       end
  111.     end
  112.     if @battler.is_a?(Game_Actor)
  113.       if @once == 1 and @loop_animation_once == 1 and $scene.phase != 5 and
  114.         @battler.battler_dead_ani == 1 and @battler.dead?
  115.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[5])
  116.       elsif @once == 1 and @loop_animation_once == 1 and $scene.phase != 5
  117.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  118.         $fangyu = 0
  119.         @battler.setup_battler_dead_ani(0)
  120.       elsif @once == 1 and @loop_animation_once == 1 and $scene.phase == 5 and
  121.         not @battler.dead?
  122.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[7],0,2)
  123.         $fangyu = 0
  124.         @battler.setup_battler_dead_ani(0)
  125.       end
  126.     end
  127.     if @battler.damage == nil and
  128.       @battler.state_animation_id != @state_animation_id
  129.       @state_animation_id = @battler.state_animation_id
  130.       loop_animation1($data_animations[@state_animation_id])
  131.     end
  132.     if @battler.battler_ani != @battler_ani
  133.       @battler_ani = @battler.battler_ani
  134.       @once = @battler.battler_ani_once
  135.       loop_animation($data_animations[@battler_ani.to_i])
  136.     end
  137.     if @battler.blink
  138.       blink_on
  139.     else
  140.       blink_off
  141.     end
  142.     unless @battler_visible
  143.       if not @battler.hidden and not @battler.dead? and
  144.         (@battler.damage == nil or @battler.damage_pop)
  145.         if @battler.is_a?(Game_Enemy)
  146.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  147.         else
  148.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[1])
  149.         end
  150.         @battler_visible = true
  151.       end
  152.     end
  153.     if @battler_visible
  154.       if @battler.hidden
  155.         $game_system.se_play($data_system.escape_se)
  156.         escape
  157.         @battler_visible = false
  158.       end
  159.       if @battler.white_flash
  160.         whiten
  161.         @battler.white_flash = false
  162.       end
  163.       if @battler.animation_id != 0
  164.         animation = $data_animations[@battler.animation_id]
  165.         animation(animation, @battler.animation_hit,@battler.damage, @battler.critical)
  166.         @battler.animation_id = 0
  167.       end
  168.       if @battler.damage_pop
  169.         @battler.damage = nil
  170.         @battler.critical = false
  171.         @battler.damage_pop = false
  172.       end
  173.       if @battler.damage == nil and @battler.dead?
  174.         if @battler.is_a?(Game_Enemy)
  175.           if @battler.battler_dead_ani != 1
  176.             $game_system.se_play($data_system.enemy_collapse_se)
  177.             @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  178.             @battler.setup_battler_dead_ani(1)
  179.           end
  180.           collapse
  181.         else
  182.           if @battler.battler_dead_ani != 1
  183.             $game_system.se_play($data_system.enemy_collapse_se)
  184.             @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  185.             @battler.setup_battler_dead_ani(1)
  186.           end
  187.         end
  188.         @battler_visible = false
  189.       end
  190.     end
  191.     if @flash_shake_switch == true
  192.       self.x = @battler.screen_x
  193.       self.y = @battler.screen_y
  194.       self.z = @battler.screen_z
  195.       @flash_shake_switch = false
  196.     end
  197.     if @flash_shake != 0 and @battler.damage != nil and RPG::BATTLER_JUMP
  198.       if @battler.is_a?(Game_Enemy)
  199.         case @flash_shake
  200.         when 9..10
  201.           self.x -=4
  202.           self.y -=4
  203.           self.z = @battler.screen_z
  204.         when 6..8
  205.           self.x -=2
  206.           self.y -=2
  207.           self.z = @battler.screen_z
  208.         when 3..5
  209.           self.x +=2
  210.           self.y +=2
  211.           self.z = @battler.screen_z
  212.         when 1..2
  213.           self.x +=4
  214.           self.y +=4
  215.           self.z = @battler.screen_z
  216.         end
  217.       end
  218.       if @battler.is_a?(Game_Actor)
  219.         case @flash_shake
  220.         when 9..10
  221.           self.x +=4
  222.           self.y +=4
  223.           self.z = @battler.screen_z
  224.         when 6..8
  225.           self.x +=2
  226.           self.y +=2
  227.           self.z = @battler.screen_z
  228.         when 3..5
  229.           self.x -=2
  230.           self.y -=2
  231.           self.z = @battler.screen_z
  232.         when 1..2
  233.           self.x -=4
  234.           self.y -=4
  235.           self.z = @battler.screen_z
  236.         end
  237.       end
  238.       @flash_shake -= 1
  239.     end
  240.   end
  241.  
  242.   def win
  243.     if @battler_name != nil and not @battler.hidden and not @battler.dead?
  244.       @battler.setup_battler_ani(@battler_name.split(/★/)[6], 1, 1)
  245.     end
  246.   end
  247.  
  248.   def update_actor_animation
  249.     if @battler.is_a?(Game_Actor)
  250.       if @battler.show_damage_value != nil
  251.         self.damage(@battler.show_damage_value, false)
  252.         @battler.show_damage(nil)
  253.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1)
  254.         @battler.setup_battler_hurt_ani(1)
  255.       end
  256.       if @battler.current_action.kind == 0 and @battler.current_action.basic == 1 and @battler.show_damage_value != nil
  257.         if @hits > @temp_hits and not @battler.dead?
  258.           @temp_hits+=1
  259.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  260.           @battler.setup_battler_hurt_ani(1)
  261.         elsif @last_hits == 1 and not @battler.dead?
  262.           @last_hits = 0
  263.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  264.           @battler.setup_battler_hurt_ani(1)
  265.         elsif @frame_index != -1 and @frame_index != @last_frame and not @battler.dead? and !@battler.damage.is_a?(Numeric)
  266.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  267.           @battler.setup_battler_hurt_ani(1)
  268.         elsif @last_hits == 1 and not @battler.dead? and !@battler.damage.is_a?(Numeric)
  269.           @last_hits = 0
  270.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  271.           @battler.setup_battler_hurt_ani(1)
  272.         end
  273.       else
  274.         if @last_hits == 1 and not @battler.dead? and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and $fangyu != 1
  275.           @last_hits = 0
  276.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1)
  277.           @battler.setup_battler_hurt_ani(1)
  278.         elsif @hits > @temp_hits and @frame_index != @last_frame and not @battler.dead? and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and  
  279.           $fangyu != 1
  280.           @temp_hits+=1
  281.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1)
  282.           @battler.setup_battler_hurt_ani(1)
  283.         elsif @hits > @temp_hits and @frame_index != @last_frame and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and $fangyu != 1 and  
  284.           @battler.dead? and @battler.battler_dead_ani != 1
  285.           @temp_hits+=1
  286.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[3], 1)
  287.           @battler.setup_battler_hurt_ani(1)
  288.         elsif !@battler_damage.is_a?(Numeric) and @last_hits == 1 and @frame_index == @last_frame
  289.           @last_hits = 0
  290.         elsif @battler_damage.is_a?(Numeric) and @battler.damage == 0 and @last_hits == 1 and @frame_index == @last_frame
  291.           @last_hits = 0
  292.         elsif @last_hits == 1 and @frame_index == @last_frame and @battler.dead? and @battler.battler_dead_ani != 1
  293.           @last_hits = 0
  294.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  295.           @battler.setup_battler_dead_ani(1)
  296.         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
  297.           @once = 1
  298.           @battler.setup_battler_ani(@battler_name.split(/★/)[6], 1,1)
  299.         end
  300.       end
  301.     end
  302.   end
  303. end
  304.  
  305. class Scene_Battle
  306.   attr_reader   :active_battler
  307.   attr_accessor :spec_killer
  308.   def initialize
  309.     @spec_killer = nil
  310.   end
  311.  
  312.   def get_real_killer
  313.     if @spec_killer
  314.       return @spec_killer
  315.     end
  316.     return @active_battler
  317.   end
  318.  
  319.   def start_phase5
  320.     @spriteset.win(get_real_killer)
  321.     start_phase5101
  322.   end
  323. end
  324.  
  325. class Spriteset_Battle
  326.   def win(winner)
  327.     if winner
  328.       @actor_sprites.find{|ac| ac.battler==winner}.win
  329.     else
  330.       for sprite in @actor_sprites
  331.         sprite.win
  332.       end
  333.     end
  334.   end
  335. end
  336.  
  337. class Game_Actor < Game_Battler
  338.   def screen_z
  339.     case self.index
  340.     when 0
  341.       return 70
  342.     when 1
  343.       return 90
  344.     when 2
  345.       return 80
  346.     when 3
  347.       return 100
  348.     else
  349.       return 0
  350.     end
  351.   end
  352. end
  353.  
  354. module RPG
  355.   class Sprite < ::Sprite
  356.     def animation_set_sprites(sprites, cell_data, position)
  357.       for i in 0..15
  358.         sprite = sprites[i]
  359.         pattern = cell_data[i, 0]
  360.         if sprite == nil or pattern == nil or pattern == -1
  361.           sprite.visible = false if sprite != nil
  362.           next
  363.         end
  364.         sprite.visible = true
  365.         sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
  366.         if position == 3
  367.           if self.viewport != nil
  368.             sprite.x = self.viewport.rect.width / 2
  369.             sprite.y = self.viewport.rect.height - 160
  370.           else
  371.             sprite.x = 320
  372.             sprite.y = 240
  373.           end
  374.         else
  375.           sprite.x = self.x - self.ox + self.src_rect.width / 2
  376.           sprite.y = self.y - self.oy + self.src_rect.height / 2
  377.           sprite.y -= self.src_rect.height / 4 if position == 0
  378.           sprite.y += self.src_rect.height / 4 if position == 2
  379.         end
  380.         sprite.x += cell_data[i, 1]
  381.         sprite.y += cell_data[i, 2]
  382.         sprite.z = 2000+self.z
  383.         sprite.ox = 96
  384.         sprite.oy = 96
  385.         sprite.zoom_x = cell_data[i, 3] / 100.0
  386.         sprite.zoom_y = cell_data[i, 3] / 100.0
  387.         sprite.angle = cell_data[i, 4]
  388.         sprite.mirror = (cell_data[i, 5] == 1)
  389.         sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  390.         sprite.blend_type = cell_data[i, 7]
  391.       end
  392.     end
  393.   end
  394. end

Lv5.捕梦者

梦石
0
星屑
36462
在线时间
10800 小时
注册时间
2009-3-15
帖子
4815
来自 6楼
发表于 2017-8-14 12:09:40 | 只看该作者
本帖最后由 soulsaga 于 2017-8-14 14:23 编辑

有问题的话还原脚本..

RUBY 代码复制
  1. def get_real_killer
  2.     if @spec_killer
  3.       return @spec_killer
  4.     end
  5.     return $activebattler
  6.   end

反击死的问题可能要改成这样..
然后MAIN上面插入以下脚本
RUBY 代码复制
  1. class Game_Battler
  2.     #--------------------------------------------------------------------------
  3.   # ● 应用通常攻击效果
  4.   #     attacker : 攻击者 (battler)
  5.   #--------------------------------------------------------------------------
  6.  
  7. alias attack_effect20170814 attack_effect
  8.   def attack_effect(attacker)
  9.     $activebattler = attacker if attacker.is_a?(Game_Actor)#如果攻击者是角色就代入到变量里
  10.  
  11.     return attack_effect20170814(attacker)
  12.   end
  13.     #--------------------------------------------------------------------------
  14.   # ● 应用特技效果
  15.   #     user  : 特技的使用者 (battler)
  16.   #     skill : 特技
  17.   #--------------------------------------------------------------------------
  18. alias skill_effect20170814 skill_effect
  19.   def skill_effect(user, skill)
  20.     $activebattler = user if user.is_a?(Game_Actor)#如果攻击者是角色就代入到变量里
  21.     return skill_effect20170814(user, skill)
  22.   end
  23. end


就既可解決敌人逃走弹出问题..又能改成最后攻击的角色播放动画了..
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36462
在线时间
10800 小时
注册时间
2009-3-15
帖子
4815
12
发表于 2017-8-16 18:50:48 | 只看该作者
本帖最后由 soulsaga 于 2017-8-18 12:03 编辑
89444640 发表于 2017-8-16 15:18
看来还是得清楚个别的工程测试,太危险--
我先理解一下……


RUBY 代码复制
  1. #位移BY:SOULSAGA
  2. #使用方法:打开RMXP备注编辑器RXDataEditor.exe
  3. #在技能备注写
  4. #X移动:+:位移植
  5. #X移动:-:位移植
  6. #向左移是-向右移是+敌人打我方则相反
  7. #Y移动:+:位移植
  8. #Y移动:-:位移植
  9. #等待:帧数值   最大是动画总帧数+14 超过不会有效
  10. #受伤动作:战斗图用星号隔开的编号..
  11. #X持续移动:+或-:位移值:持续帧数   每1帧进行X位移持续指定帧数
  12. #Y持续移动:+或-:位移值:持续帧数   每1帧进行Y位移持续指定帧数
  13. #20170816新增版边限制
  14.  
  15. class Game_Battler
  16.   alias item_effectsoulsaga item_effect
  17.   def item_effect(item)
  18.     $skill_id = 1
  19.     $skillmoveflag = "OFF"
  20.     $wait_count = 0
  21.     @wait_skill = false
  22.     $i = 0
  23.     $battler_damage = 3
  24.     $xmove_time = 0
  25.     $xmove = 0
  26.     $ymove_time = 0
  27.     $ymove = 0
  28.     return item_effectsoulsaga(item)
  29.   end
  30.  
  31.     #--------------------------------------------------------------------------
  32.   # ● 应用通常攻击效果
  33.   #     attacker : 攻击者 (battler)
  34.   #--------------------------------------------------------------------------
  35.  
  36.  
  37. alias attack_effect20170814 attack_effect
  38.   def attack_effect(attacker)
  39.     $activebattler = attacker if attacker.is_a?(Game_Actor)#如果攻击者是角色就代入到变量里
  40.     $skill_id = 1
  41.     $skillmoveflag = "OFF"
  42.     $wait_count = 0
  43.     @wait_skill = false
  44.     $i = 0
  45.     $battler_damage = 3
  46.     $xmove_time = 0
  47.     $xmove = 0
  48.     $ymove_time = 0
  49.     $ymove = 0
  50.     return attack_effect20170814(attacker)
  51.   end
  52.     #--------------------------------------------------------------------------
  53.   # ● 应用特技效果
  54.   #     user  : 特技的使用者 (battler)
  55.   #     skill : 特技
  56.   #--------------------------------------------------------------------------
  57. alias skill_effect20170814 skill_effect
  58.   def skill_effect(user, skill)
  59.     $skill_id = skill.id
  60.     $skillmoveflag = "OFF"
  61.     $wait_count = 0
  62.     @wait_skill = false
  63.     $i = 0
  64.     $battler_damage = 3
  65.     $xmove_time = 0
  66.     $xmove = 0
  67.     $ymove_time = 0
  68.     $ymove = 0
  69.     $activebattler = user if user.is_a?(Game_Actor)#如果攻击者是角色就代入到变量里
  70.     return skill_effect20170814(user, skill)
  71.   end
  72. end
  73. module RPG
  74. class Sprite < ::Sprite
  75. #位移BY:SOULSAGA
  76.    #..........................................................................
  77.    def update_animation
  78.      if @_animation_duration > 0
  79.        frame_index = @_animation.frame_max - @_animation_duration
  80.        @frame_index = frame_index
  81.        cell_data = @_animation.frames[frame_index].cell_data
  82.        position = @_animation.position
  83.        animation_set_sprites(@_animation_sprites, cell_data, position)
  84. if $xmove_time > 0 and @battler.damage != "Miss" and @battler.damage != nil
  85.    case $xmoveif
  86.     when "-"
  87.   self.x -= $xmove if @battler.is_a?(Game_Enemy)
  88.   self.x += $xmove if @battler.is_a?(Game_Actor)
  89.     when "+"
  90.   self.x += $xmove if @battler.is_a?(Game_Enemy)
  91.   self.x -= $xmove if @battler.is_a?(Game_Actor)
  92.   end
  93.   $xmove_time -= 1
  94. end
  95. if $ymove_time > 0 and @battler.damage != "Miss" and @battler.damage != nil
  96.    case $ymoveif
  97.     when "-"
  98.   self.y -= $ymove if @battler.is_a?(Game_Enemy)
  99.   self.y += $ymove if @battler.is_a?(Game_Actor)
  100.     when "+"
  101.   self.y += $ymove if @battler.is_a?(Game_Enemy)
  102.   self.y -= $ymove if @battler.is_a?(Game_Actor)
  103.   end
  104.   $ymove_time -= 1
  105.   end
  106.       $ox = self.x if !$ox or $ox.nil?
  107.       $oy = self.y if !$oy or $oy.nil?
  108.        $wait_count -= 1 if $wait_count >= 1
  109.        if $skillmoveflag == "OFF"
  110.        @skill_xmove = []
  111. skill = $data_skills[$skill_id]
  112. skill_xymove = skill.note.split(/\r\n/)
  113. if $wait_count <= 0 and @battler.damage != "Miss" and @battler.damage != nil
  114.       while $i < skill_xymove.length
  115.         if $wait_count <= 0 and @battler.damage != "Miss" and @battler.damage != nil
  116.         @skill_xmove = skill_xymove[$i].split(/:/)
  117.       if skill_xymove[$i].include?("X移动")
  118.        case @skill_xmove[1]
  119.     when "-"
  120.        self.x -= @skill_xmove[2].to_i if @battler.is_a?(Game_Enemy)
  121.        self.x += @skill_xmove[2].to_i if @battler.is_a?(Game_Actor)
  122.        when "+"
  123.        self.x += @skill_xmove[2].to_i if @battler.is_a?(Game_Enemy)
  124.        self.x -= @skill_xmove[2].to_i if @battler.is_a?(Game_Actor)
  125.      end
  126.      end
  127.      if skill_xymove[$i].include?("Y移动")
  128.        case @skill_xmove[1]
  129.     when "+"
  130.        self.y += @skill_xmove[2].to_i if @battler.is_a?(Game_Enemy)
  131.        self.y += @skill_xmove[2].to_i if @battler.is_a?(Game_Actor)
  132.        when "-"
  133.        self.y -= @skill_xmove[2].to_i if @battler.is_a?(Game_Enemy)
  134.        self.y -= @skill_xmove[2].to_i if @battler.is_a?(Game_Actor)
  135.      end
  136.      end
  137.    end
  138.    if skill_xymove[$i].include?("X持续移动")
  139.        case @skill_xmove[1]
  140.     when "-"
  141.        self.x -= @skill_xmove[2].to_i if @battler.is_a?(Game_Enemy)
  142.        self.x += @skill_xmove[2].to_i if @battler.is_a?(Game_Actor)
  143.        $xmoveif = @skill_xmove[1]
  144.        $xmove = @skill_xmove[2].to_i
  145.        $xmove_time = @skill_xmove[3].to_i
  146.        when "+"
  147.        self.x += @skill_xmove[2].to_i if @battler.is_a?(Game_Enemy)
  148.        self.x -= @skill_xmove[2].to_i if @battler.is_a?(Game_Actor)
  149.        $xmoveif = @skill_xmove[1]
  150.        $xmove = @skill_xmove[2].to_i
  151.        $xmove_time = @skill_xmove[3].to_i
  152.      end
  153.    end
  154.    if skill_xymove[$i].include?("Y持续移动")
  155.        case @skill_xmove[1]
  156.     when "-"
  157.        self.y -= @skill_xmove[2].to_i if @battler.is_a?(Game_Enemy)
  158.        self.y += @skill_xmove[2].to_i if @battler.is_a?(Game_Actor)
  159.        $ymoveif = @skill_xmove[1]
  160.        $ymove = @skill_xmove[2].to_i
  161.        $ymove_time = @skill_xmove[3].to_i
  162.        when "+"
  163.        self.y += @skill_xmove[2].to_i if @battler.is_a?(Game_Enemy)
  164.        self.y -= @skill_xmove[2].to_i if @battler.is_a?(Game_Actor)
  165.        $ymoveif = @skill_xmove[1]
  166.        $ymove = @skill_xmove[2].to_i
  167.        $ymove_time = @skill_xmove[3].to_i
  168.      end
  169.      end
  170.    if skill_xymove[$i].include?("受伤动作")
  171.      $battler_damage = @skill_xmove[1].to_i
  172.      end
  173.    if skill_xymove[$i].include?("等待")
  174.      $wait_count = @skill_xmove[1].to_i
  175.      $skillmoveflag = "OFF"
  176.       end
  177.       $i += 1
  178.       break if $wait_count > 0
  179.       $skillmoveflag = "ON"
  180.       end
  181.   end
  182. end
  183. if frame_index == $fanime_frame_max-1
  184. self.x = $ox
  185. self.y = $oy
  186. $ox = nil
  187. $oy = nil
  188. end
  189. self.x = 640640-self.ox if self.x > 640-self.ox #if @battler.is_a?(Game_Enemy)
  190. self.x = 0+self.ox if self.x < 0+self.ox #if @battler.is_a?(Game_Actor)
  191.   #=======================================
  192.        # 修改:弹出伤害,权重计算
  193.        #=======================================
  194.        for timing in @_animation.timings
  195.          if timing.frame == frame_index
  196.            t = 1.0 * animation_process_timing(timing, @_animation_hit)            
  197.            #p t,"当前权重", @all_quanzhong,"总权重"
  198.            if @battler_damage.is_a?(Numeric) and t != 0
  199.              t *= @battler_damage
  200.              t /= @all_quanzhong
  201.              t = t.to_i
  202.              #在闪光不是最后一次的情况下,把这次伤害加入到已经发生的伤害中★★★★★★★★★★★★★★★★★★★★★★★★★★
  203.              if frame_index != @_last_frame
  204.              @p_dam+= t
  205.              end
  206.              #p @p_dam,"已发生伤害",@battler_damage,"总伤害"(调试用)★★★★★★★★★★★★★★★★★★★★★★★★★★
  207.              #闪光为最后一次的情况下,改变这次伤害的计算方法(总伤害-已经发生伤害)★★★★★★★★★★★★★★★★★★★★★★★★★★
  208.              if frame_index == @_last_frame
  209.                t= @battler_damage-@p_dam
  210.              end
  211.              #p t,"当前伤害",@battler_damage,"总伤害"
  212.              # 最后一次闪光的话,伤害修正
  213.              if frame_index == @_last_frame
  214.                @_total_damage = @battler_damage - t
  215.                @p_dam=0      #已经发生的伤害归0★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  216.             end
  217.              #p t,@battler_damage,@all_quanzhong
  218.              damage(t,@battler_critical) if timing.flash_scope != 3
  219.             #连击次数归0★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  220.             if frame_index == @_last_frame
  221.                       ############ #小改动
  222.                       @last_hits=1
  223.                       @temp_hits=0
  224.                       ############
  225.                       @hits=0
  226.             end
  227.            # 防止重复播放miss
  228.            elsif !@battler_damage.is_a?(Numeric) and timing.flash_scope != 0
  229.              damage(@battler_damage,@battler_critical)
  230.            end
  231.          end
  232.        end
  233.      else
  234.        dispose_animation
  235.        end
  236. end
  237. end
  238. end
  239.  
  240.  
  241. class Sprite_Battler < RPG::Sprite
  242.   #--------------------------------------------------------------------------
  243.   # ● 处理角色动作
  244.   #--------------------------------------------------------------------------
  245.   def update_actor_animation
  246.     if @battler.is_a?(Game_Actor)
  247.       if @battler.show_damage_value != nil
  248.         self.damage(@battler.show_damage_value, false)
  249.         @battler.show_damage(nil)
  250.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1)
  251.         @battler.setup_battler_hurt_ani(1)
  252.       end
  253.       @last_frame = $fanime_frame_max if $fanime_frame_max > @last_frame
  254.       if @battler.current_action.kind == 0 and @battler.current_action.basic == 1 and @battler.show_damage_value != nil
  255.         # 防御的时候
  256.         if @hits > @temp_hits and not @battler.dead?
  257.           ############ #小改动
  258.           @temp_hits+=1
  259.           ############
  260.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  261.           @battler.setup_battler_hurt_ani(1)
  262.           #################################################################
  263.         elsif @last_hits == 1 and not @battler.dead?
  264.           ############ #小改动
  265.           @last_hits = 0
  266.           ############
  267.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  268.           @battler.setup_battler_hurt_ani(1)
  269.           #################################################################
  270.         elsif @frame_index != -1 and @frame_index != @last_frame and not @battler.dead? and !@battler.damage.is_a?(Numeric)
  271.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  272.           @battler.setup_battler_hurt_ani(1)
  273.           #################################################################
  274.         elsif @last_hits == 1 and not @battler.dead? and !@battler.damage.is_a?(Numeric)
  275.           ############ #小改动
  276.           @last_hits = 0
  277.           ############
  278.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  279.           @battler.setup_battler_hurt_ani(1)
  280.           #################################################################
  281.         end
  282.       else
  283.         # 单回合只有一次攻击
  284.        if @last_hits == 1 and not @battler.dead? and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and $fangyu != 1
  285.           ############ #小改动
  286.           @last_hits = 0
  287.           ############
  288.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1)
  289.           @battler.setup_battler_hurt_ani(1)
  290.           #################################################################
  291.         # 单回合多次攻击
  292.        elsif @hits > @temp_hits and @frame_index != @last_frame and not @battler.dead? and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and  
  293. $fangyu != 1
  294.           ############ #小改动
  295.           @temp_hits+=1
  296.           ############
  297.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1)
  298.           @battler.setup_battler_hurt_ani(1)
  299.         ########################################################################
  300.         # 死亡之前攻击
  301.        elsif @hits > @temp_hits and @frame_index != @last_frame and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and $fangyu != 1 and  
  302. @battler.dead? and @battler.battler_dead_ani != 1
  303.           ############ #小改动
  304.           @temp_hits+=1
  305.           ############
  306.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1)
  307.           @battler.setup_battler_hurt_ani(1)
  308.           #################################################################
  309.         # 闪避的回合
  310.        elsif !@battler_damage.is_a?(Numeric) and @last_hits == 1 and @frame_index == @last_frame
  311.           @last_hits = 0
  312.           #################################################################
  313.         # 无伤害的攻击
  314.         elsif @battler_damage.is_a?(Numeric) and @battler.damage == 0 and @last_hits == 1 and @frame_index == @last_frame
  315.           @last_hits = 0
  316.           #################################################################
  317.         # 死亡判定
  318.         elsif @frame_index == @last_frame and @battler.dead? and @battler.battler_dead_ani != 1
  319.           #p 111
  320.        #elsif @last_hits == 1 and @frame_index == @last_frame and @battler.dead? and @battler.battler_dead_ani != 1
  321.           @last_hits = 0
  322.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  323.           #@battler.setup_battler_dead_ani(1)
  324.           #################################################################
  325.         # 胜利判定
  326.        elsif $scene.phase == 5 and [url=home.php?mod=space&uid=2659152]@oNCE[/url] == 0 and @battler_name != nil and not @battler.hidden and not @battler.dead? and $game_temp.battle_proc == nil
  327.              @once = 1
  328.              @battler.setup_battler_ani(@battler_name.split(/★/)[6], 1)
  329.         end
  330.       end
  331.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1) if @frame_index < @last_frame and @frame_index > 0 and @battler.battler_dead_ani != 1 and $battler_damage != 3 and @battler.damage.is_a?(Numeric)
  332.     end
  333.   end
  334.   #--------------------------------------------------------------------------
  335.   # ● 处理敌人动作
  336.   #--------------------------------------------------------------------------
  337.   def update_enemy_animation
  338.     if @battler.is_a?(Game_Enemy)
  339.       if @battler.show_damage_value != nil
  340.         self.damage(@battler.show_damage_value, false)
  341.         @battler.show_damage(nil)
  342.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1)
  343.         @battler.setup_battler_hurt_ani(1)
  344.       end
  345.       @last_frame = $fanime_frame_max if $fanime_frame_max > @last_frame
  346.       if @battler.current_action.kind == 0 and @battler.current_action.basic == 1
  347.       else
  348.         # 单回合只有一次攻击
  349.         if @last_hits == 1 and not @battler.dead? and @battler.damage.is_a?(Numeric) and @battler.damage > 0
  350.           ############ #小改动
  351.           #p 222
  352.           @last_hits = 0
  353.           ############
  354.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1)
  355.           @battler.setup_battler_hurt_ani(1)
  356.           #################################################################
  357.         # 单回合多次攻击
  358.        elsif @hits > @temp_hits and @frame_index != @last_frame and not @battler.dead? and @battler.damage.is_a?(Numeric) and @battler.damage > 0
  359.           ############ #小改动
  360.           #p 111
  361.           @temp_hits+=1
  362.           ############
  363.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1)
  364.           @battler.setup_battler_hurt_ani(1)
  365.           #################################################################
  366.         # 死亡之前攻击
  367.        elsif @hits > @temp_hits and @frame_index != @last_frame and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and @battler.dead? and @battler.battler_dead_ani != 1
  368.           ############ #小改动
  369.           #p 333
  370.           @temp_hits+=1
  371.           ############
  372.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1)
  373.           @battler.setup_battler_hurt_ani(1)
  374.           #################################################################
  375.         # 无伤害的攻击
  376.         elsif !@battler_damage.is_a?(Numeric) and @last_hits == 1 and @frame_index == @last_frame
  377.           @last_hits = 0
  378.           #################################################################
  379.         # 闪避的回合
  380.         elsif @battler_damage.is_a?(Numeric) and @battler.damage == 0 and @last_hits == 1 and @frame_index == @last_frame
  381.           @last_hits = 0
  382.           #################################################################
  383.         # 死亡判定
  384.         elsif @frame_index == @last_frame and @battler.dead? and @battler.battler_dead_ani != 1
  385.           #p $fanime_frame_max
  386.         #elsif @last_hits == 1 and @frame_index == @last_frame and @battler.dead? and @battler.battler_dead_ani != 1
  387.           @last_hits = 0
  388.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  389.           @battler.setup_battler_dead_ani(1)
  390.           collapse
  391.         end
  392.       end
  393.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1) if @frame_index < @last_frame and @frame_index > 0 and @battler.battler_dead_ani != 1 and $battler_damage != 3 and @battler.damage.is_a?(Numeric)
  394.     end
  395.   end
  396. end

更新脚本
注意+或-在这次更新掉转了..
备注工具保存后..RMXP编辑器要关闭再打开..

点评

逃跑异常脚本删了就好..位移脚本也有同样功能..  发表于 2017-8-18 11:34
我上传了改好的工程..  发表于 2017-8-18 11:13
你以后论坛复制脚本点脚本右上的复制..不然会出现URL码..  发表于 2017-8-18 11:13
测试好了..发现技能全体的话只有一个敌人会位移..但超出我能力了..  发表于 2017-8-17 21:16
弄不了,楼上放了个整合了两个攻击动画的工程,你测试吧。  发表于 2017-8-17 20:42
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
35186
在线时间
4169 小时
注册时间
2007-12-15
帖子
10067
11
 楼主| 发表于 2017-8-16 15:18:20 | 只看该作者
本帖最后由 89444640 于 2017-8-18 11:28 编辑

看来还是得清楚个别的工程测试,太危险--
我先理解一下……

需要插入的脚背插入rm的脚本最顶层

脚本编辑器打开后前外别开游戏直到保正常存以后,

脚本中的备注方式是
X移动:+:32    含义 敌方向左移动32像素
Y移动:+:16    含义 敌方向上移动16像素
等待:10         含义 受创显示10帧后,在已经产生位移的地方,执行下一个受创位移动作

由于全动画脚本的描述是这样
名字★待机★防御★挨打★死亡动态★死亡静态★胜利动态★胜利静态
因此受创动作描述应该是
受伤动作:3

可能存在问题,
敌人位于左侧版边,由于主角很多多段技能,如果可以出位移,经常会把敌人打消失,怎么办- -b
如果上述描述正确的话,那么我吧敌人打浮空以后敌人会有向下降落,这个过程如果想要手感好,必须得有个加速减速速度变化- -b
就需要按照运动规律写三四种速度变化但是XP动画中调节,一个缺点是缩为二分之一,好多细节我看不清,只能进去测试
另一个缺点就是敌人xy坐标变化后,好难控制主角动作的第二招也能打到敌人合适的位置,敌人体型有区别,目前最小的xp行走图的老鼠,最大的以前划过的大章鱼
如果都能产生位移说不过去啊,那么大的章鱼能打飞?
这招式调起来估计得死人==b
如果没有类似格斗游戏的那种直观的编辑器,那么其使用难度……

总之我晚上回去再试试吧。昨天折腾到半夜今天可不能再这样了,今天一整天都没精神

点评

受伤动作不一定是3..你可以用其他数字..战斗图文件往后加新动作也可以的..  发表于 2017-8-16 15:36
如果只是大型的不能打飞是很简单的..  发表于 2017-8-16 15:35
如果还是介意体型的话..可以在敌人备注弄一下..  发表于 2017-8-16 15:35
其实还可以写个每帧位移持续多少帧数的命令..  发表于 2017-8-16 15:31
体型没所谓..照样打飞吧..  发表于 2017-8-16 15:28
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36462
在线时间
10800 小时
注册时间
2009-3-15
帖子
4815
10
发表于 2017-8-16 10:03:36 | 只看该作者
89444640 发表于 2017-8-15 22:03
能不能用先放一边,RXDataEditor保存修改未响应半天,如果中间一直未响应,强制关闭 就无法在打开数据库了 ...

你写错命令了..
是这样写的..
X移动:+:32

等待是等一定帧数后才继续执行下个命令..
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
35186
在线时间
4169 小时
注册时间
2007-12-15
帖子
10067
9
 楼主| 发表于 2017-8-15 22:03:37 | 只看该作者
本帖最后由 89444640 于 2017-8-15 22:05 编辑

能不能用先放一边,RXDataEditor保存修改未响应半天,如果中间一直未响应,强制关闭 就无法在打开数据库了,感觉非常不安全。也许是我数据库太大了?
上面的说明我不太理解
比如我对敌人攻击造成位移,描述是 X+32 Y+16
等待是什么意思?受创持续时间?还是第几帧的时候出现受创位移?
然后受创动作 用星号隔开的编号,比如正常情况敌人如果有受创的话应该是第三个星号 我就写3?

最后RXDataEdito 姑且称之为战斗位移编辑器吧
这里面写的应该是
X+32
Y+16
14
3

然后 我要是多段技能呢?比如4连斩的招式,中间会出现好几次位移不但角色有位移 敌人也应该有,
怎么处理?

先不说这个,我就写了个位移数值
X+32
y+16
然后进游戏测试 普通攻击就出这个

不知道哪里冲突了
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36462
在线时间
10800 小时
注册时间
2009-3-15
帖子
4815
8
发表于 2017-8-14 16:46:29 | 只看该作者
本帖最后由 soulsaga 于 2017-8-15 20:50 编辑


https://rpg.blue/forum.php?mod=v ... &extra=page%3D1
位移写好了..要配合上面地址的工具使用..
RUBY 代码复制
  1. #位移BY:SOULSAGA
  2. #使用方法:打开RMXP备注编辑器RXDataEditor.exe
  3. #在技能备注写
  4. #X移动:+:位移植
  5. #X移动:-:位移植
  6. #向左移是+向右移是-敌人打我方则相反
  7. #Y移动:+:位移植
  8. #Y移动:-:位移植
  9. #等待:帧数值   最大是动画总帧数+14 超过不会有效
  10. #受伤动作:战斗图用星号隔开的编号..
  11.  
  12.  
  13.  
  14. class Game_Battler
  15.   alias item_effectsoulsaga item_effect
  16.   def item_effect(item)
  17.     $skill_id = 1
  18.     $skillmoveflag = "OFF"
  19.     $wait_count = 0
  20.     @wait_skill = false
  21.     $i = 0
  22.     $battler_damage = 3
  23.     return item_effectsoulsaga(item)
  24.   end
  25.  
  26.     #--------------------------------------------------------------------------
  27.   # ● 应用通常攻击效果
  28.   #     attacker : 攻击者 (battler)
  29.   #--------------------------------------------------------------------------
  30.  
  31.  
  32. alias attack_effect20170814 attack_effect
  33.   def attack_effect(attacker)
  34.     $activebattler = attacker if attacker.is_a?(Game_Actor)#如果攻击者是角色就代入到变量里
  35.     $skill_id = 1
  36.     $skillmoveflag = "OFF"
  37.     $wait_count = 0
  38.     @wait_skill = false
  39.     $i = 0
  40.     $battler_damage = 3
  41.     return attack_effect20170814(attacker)
  42.   end
  43.     #--------------------------------------------------------------------------
  44.   # ● 应用特技效果
  45.   #     user  : 特技的使用者 (battler)
  46.   #     skill : 特技
  47.   #--------------------------------------------------------------------------
  48. alias skill_effect20170814 skill_effect
  49.   def skill_effect(user, skill)
  50.     $skill_id = skill.id
  51.     $skillmoveflag = "OFF"
  52.     $wait_count = 0
  53.     @wait_skill = false
  54.     $i = 0
  55.     $battler_damage = 3
  56.     $activebattler = user if user.is_a?(Game_Actor)#如果攻击者是角色就代入到变量里
  57.     return skill_effect20170814(user, skill)
  58.   end
  59. end
  60. module RPG
  61. class Sprite < ::Sprite
  62. #位移BY:SOULSAGA
  63.    #..........................................................................
  64.    def update_animation
  65.      if @_animation_duration > 0
  66.        frame_index = @_animation.frame_max - @_animation_duration
  67.        @frame_index = frame_index
  68.        cell_data = @_animation.frames[frame_index].cell_data
  69.        position = @_animation.position
  70.        animation_set_sprites(@_animation_sprites, cell_data, position)
  71.  
  72.        $wait_count -= 1 if $wait_count >= 1
  73.        if $skillmoveflag == "OFF"
  74.        @skill_xmove = []
  75. skill = $data_skills[$skill_id]
  76. skill_xymove = skill.note.split(/\r\n/)
  77. if $wait_count <= 0 and @battler.damage != "Miss" and @battler.damage != nil
  78.       while $i < skill_xymove.length
  79.         if $wait_count <= 0 and @battler.damage != "Miss" and @battler.damage != nil
  80.         @skill_xmove = skill_xymove[$i].split(/:/)
  81.       if skill_xymove[$i].include?("X移动")
  82.        case @skill_xmove[1]
  83.     when "+"
  84.        self.ox += @skill_xmove[2].to_i if @battler.is_a?(Game_Enemy)
  85.        self.ox -= @skill_xmove[2].to_i if @battler.is_a?(Game_Actor)
  86.        when "-"
  87.        self.ox -= @skill_xmove[2].to_i if @battler.is_a?(Game_Enemy)
  88.        self.ox += @skill_xmove[2].to_i if @battler.is_a?(Game_Actor)
  89.        end
  90.      end
  91.      if skill_xymove[$i].include?("Y移动")
  92.        case @skill_xmove[1]
  93.     when "+"
  94.        self.oy += @skill_xmove[2].to_i if @battler.is_a?(Game_Enemy)
  95.        self.oy += @skill_xmove[2].to_i if @battler.is_a?(Game_Actor)
  96.        when "-"
  97.        self.oy -= @skill_xmove[2].to_i if @battler.is_a?(Game_Enemy)
  98.        self.oy -= @skill_xmove[2].to_i if @battler.is_a?(Game_Actor)
  99.      end
  100.      end
  101.    end
  102.    if skill_xymove[$i].include?("受伤动作")
  103.      $battler_damage = @skill_xmove[1].to_i
  104.      end
  105.    if skill_xymove[$i].include?("等待")
  106.      $wait_count = @skill_xmove[1].to_i
  107.      $skillmoveflag = "OFF"
  108.       end
  109.       $i += 1
  110.       break if $wait_count > 0
  111.       $skillmoveflag = "ON"
  112.       end
  113.   end
  114.   end
  115.   #=======================================
  116.        # 修改:弹出伤害,权重计算
  117.        #=======================================
  118.        for timing in @_animation.timings
  119.          if timing.frame == frame_index
  120.            t = 1.0 * animation_process_timing(timing, @_animation_hit)            
  121.            #p t,"当前权重", @all_quanzhong,"总权重"
  122.            if @battler_damage.is_a?(Numeric) and t != 0
  123.              t *= @battler_damage
  124.              t /= @all_quanzhong
  125.              t = t.to_i
  126.              #在闪光不是最后一次的情况下,把这次伤害加入到已经发生的伤害中★★★★★★★★★★★★★★★★★★★★★★★★★★
  127.              if frame_index != @_last_frame
  128.              @p_dam+= t
  129.              end
  130.              #p @p_dam,"已发生伤害",@battler_damage,"总伤害"(调试用)★★★★★★★★★★★★★★★★★★★★★★★★★★
  131.              #闪光为最后一次的情况下,改变这次伤害的计算方法(总伤害-已经发生伤害)★★★★★★★★★★★★★★★★★★★★★★★★★★
  132.              if frame_index == @_last_frame
  133.                t= @battler_damage-@p_dam
  134.              end
  135.              #p t,"当前伤害",@battler_damage,"总伤害"
  136.              # 最后一次闪光的话,伤害修正
  137.              if frame_index == @_last_frame
  138.                @_total_damage = @battler_damage - t
  139.                @p_dam=0      #已经发生的伤害归0★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  140.             end
  141.              #p t,@battler_damage,@all_quanzhong
  142.              damage(t,@battler_critical) if timing.flash_scope != 3
  143.             #连击次数归0★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  144.             if frame_index == @_last_frame
  145.                       ############ #小改动
  146.                       @last_hits=1
  147.                       @temp_hits=0
  148.                       ############
  149.                       @hits=0
  150.             end
  151.            # 防止重复播放miss
  152.            elsif !@battler_damage.is_a?(Numeric) and timing.flash_scope != 0
  153.              damage(@battler_damage,@battler_critical)
  154.            end
  155.          end
  156.        end
  157.      else
  158.        dispose_animation
  159.        end
  160. end
  161. end
  162. end
  163.  
  164.  
  165. class Sprite_Battler < RPG::Sprite
  166.   #--------------------------------------------------------------------------
  167.   # ● 处理角色动作
  168.   #--------------------------------------------------------------------------
  169.   def update_actor_animation
  170.     if @battler.is_a?(Game_Actor)
  171.       if @battler.show_damage_value != nil
  172.         self.damage(@battler.show_damage_value, false)
  173.         @battler.show_damage(nil)
  174.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1)
  175.         @battler.setup_battler_hurt_ani(1)
  176.       end
  177.       @last_frame = $fanime_frame_max if $fanime_frame_max > @last_frame
  178.       if @battler.current_action.kind == 0 and @battler.current_action.basic == 1 and @battler.show_damage_value != nil
  179.         # 防御的时候
  180.         if @hits > @temp_hits and not @battler.dead?
  181.           ############ #小改动
  182.           @temp_hits+=1
  183.           ############
  184.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  185.           @battler.setup_battler_hurt_ani(1)
  186.           #################################################################
  187.         elsif @last_hits == 1 and not @battler.dead?
  188.           ############ #小改动
  189.           @last_hits = 0
  190.           ############
  191.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  192.           @battler.setup_battler_hurt_ani(1)
  193.           #################################################################
  194.         elsif @frame_index != -1 and @frame_index != @last_frame and not @battler.dead? and !@battler.damage.is_a?(Numeric)
  195.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  196.           @battler.setup_battler_hurt_ani(1)
  197.           #################################################################
  198.         elsif @last_hits == 1 and not @battler.dead? and !@battler.damage.is_a?(Numeric)
  199.           ############ #小改动
  200.           @last_hits = 0
  201.           ############
  202.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[2], 1)
  203.           @battler.setup_battler_hurt_ani(1)
  204.           #################################################################
  205.         end
  206.       else
  207.         # 单回合只有一次攻击
  208.        if @last_hits == 1 and not @battler.dead? and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and $fangyu != 1
  209.           ############ #小改动
  210.           @last_hits = 0
  211.           ############
  212.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1)
  213.           @battler.setup_battler_hurt_ani(1)
  214.           #################################################################
  215.         # 单回合多次攻击
  216.        elsif @hits > @temp_hits and @frame_index != @last_frame and not @battler.dead? and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and  
  217. $fangyu != 1
  218.           ############ #小改动
  219.           @temp_hits+=1
  220.           ############
  221.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1)
  222.           @battler.setup_battler_hurt_ani(1)
  223.         ########################################################################
  224.         # 死亡之前攻击
  225.        elsif @hits > @temp_hits and @frame_index != @last_frame and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and $fangyu != 1 and  
  226. @battler.dead? and @battler.battler_dead_ani != 1
  227.           ############ #小改动
  228.           @temp_hits+=1
  229.           ############
  230.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1)
  231.           @battler.setup_battler_hurt_ani(1)
  232.           #################################################################
  233.         # 闪避的回合
  234.        elsif !@battler_damage.is_a?(Numeric) and @last_hits == 1 and @frame_index == @last_frame
  235.           @last_hits = 0
  236.           #################################################################
  237.         # 无伤害的攻击
  238.         elsif @battler_damage.is_a?(Numeric) and @battler.damage == 0 and @last_hits == 1 and @frame_index == @last_frame
  239.           @last_hits = 0
  240.           #################################################################
  241.         # 死亡判定
  242.         elsif @frame_index == @last_frame and @battler.dead? and @battler.battler_dead_ani != 1
  243.           #p 111
  244.        #elsif @last_hits == 1 and @frame_index == @last_frame and @battler.dead? and @battler.battler_dead_ani != 1
  245.           @last_hits = 0
  246.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  247.           #@battler.setup_battler_dead_ani(1)
  248.           #################################################################
  249.         # 胜利判定
  250.        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
  251.              @once = 1
  252.              @battler.setup_battler_ani(@battler_name.split(/★/)[6], 1)
  253.         end
  254.       end
  255.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1) if @frame_index < @last_frame and @frame_index > 0 and @battler.battler_dead_ani != 1 and $battler_damage != 3 and @battler.damage.is_a?(Numeric)
  256.     end
  257.   end
  258.   #--------------------------------------------------------------------------
  259.   # ● 处理敌人动作
  260.   #--------------------------------------------------------------------------
  261.   def update_enemy_animation
  262.     if @battler.is_a?(Game_Enemy)
  263.       if @battler.show_damage_value != nil
  264.         self.damage(@battler.show_damage_value, false)
  265.         @battler.show_damage(nil)
  266.         @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1)
  267.         @battler.setup_battler_hurt_ani(1)
  268.       end
  269.       @last_frame = $fanime_frame_max if $fanime_frame_max > @last_frame
  270.       if @battler.current_action.kind == 0 and @battler.current_action.basic == 1
  271.       else
  272.         # 单回合只有一次攻击
  273.         if @last_hits == 1 and not @battler.dead? and @battler.damage.is_a?(Numeric) and @battler.damage > 0
  274.           ############ #小改动
  275.           #p 222
  276.           @last_hits = 0
  277.           ############
  278.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1)
  279.           @battler.setup_battler_hurt_ani(1)
  280.           #################################################################
  281.         # 单回合多次攻击
  282.        elsif @hits > @temp_hits and @frame_index != @last_frame and not @battler.dead? and @battler.damage.is_a?(Numeric) and @battler.damage > 0
  283.           ############ #小改动
  284.           #p 111
  285.           @temp_hits+=1
  286.           ############
  287.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1)
  288.           @battler.setup_battler_hurt_ani(1)
  289.           #################################################################
  290.         # 死亡之前攻击
  291.        elsif @hits > @temp_hits and @frame_index != @last_frame and @battler.damage.is_a?(Numeric) and @battler.damage > 0 and @battler.dead? and @battler.battler_dead_ani != 1
  292.           ############ #小改动
  293.           #p 333
  294.           @temp_hits+=1
  295.           ############
  296.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1)
  297.           @battler.setup_battler_hurt_ani(1)
  298.           #################################################################
  299.         # 无伤害的攻击
  300.         elsif !@battler_damage.is_a?(Numeric) and @last_hits == 1 and @frame_index == @last_frame
  301.           @last_hits = 0
  302.           #################################################################
  303.         # 闪避的回合
  304.         elsif @battler_damage.is_a?(Numeric) and @battler.damage == 0 and @last_hits == 1 and @frame_index == @last_frame
  305.           @last_hits = 0
  306.           #################################################################
  307.         # 死亡判定
  308.         elsif @frame_index == @last_frame and @battler.dead? and @battler.battler_dead_ani != 1
  309.           #p $fanime_frame_max
  310.         #elsif @last_hits == 1 and @frame_index == @last_frame and @battler.dead? and @battler.battler_dead_ani != 1
  311.           @last_hits = 0
  312.           @battler.setup_battler_ani(@battler.battler_name.split(/★/)[4], 1)
  313.           @battler.setup_battler_dead_ani(1)
  314.           collapse
  315.         end
  316.       end
  317.       @battler.setup_battler_ani(@battler.battler_name.split(/★/)[$battler_damage], 1) if @frame_index < @last_frame and @frame_index > 0 and @battler.battler_dead_ani != 1 and $battler_damage != 3 and @battler.damage.is_a?(Numeric)
  318.     end
  319.   end
  320. end

之前让你插入的脚本替换这个..
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
35186
在线时间
4169 小时
注册时间
2007-12-15
帖子
10067
7
 楼主| 发表于 2017-8-14 16:43:56 | 只看该作者
本帖最后由 89444640 于 2017-8-14 16:46 编辑
soulsaga 发表于 2017-8-14 12:09
有问题的话还原脚本..

def get_real_killer


单人测试没问题了,特意去试了下两人的情况。
两人的情况第一名角色胜利动画依然随机播放,
第二人有三个随机胜利动作,但是每次该角色胜利必定只播放第一个,其他的都不播放,
试了十次都是播放第一个,不可能是我运气太差了。
不知道是这个脚本原先的问题我没试出来还是新出现的。
可能主角灭人的次数太多了,没注意到同伴有这个问题。
不知道第三人第四人是否也是如此。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36462
在线时间
10800 小时
注册时间
2009-3-15
帖子
4815
5
发表于 2017-8-14 09:59:48 | 只看该作者
本帖最后由 soulsaga 于 2017-8-14 10:09 编辑
89444640 发表于 2017-8-14 09:05
这样吧,我清理出来一个测试工程过来容易修改。
敌人设置100%逃跑,都调好了,请测试。


RUBY 代码复制
  1. @spriteset.win(get_real_killer) if @battler.is_a?(Game_Actor)


最后一击者播放胜利动画脚本改成这样就可以了..

评分

参与人数 2星屑 +140 梦石 +2 收起 理由
RyanBern + 2 认可答案
89444640 + 140

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
35186
在线时间
4169 小时
注册时间
2007-12-15
帖子
10067
4
 楼主| 发表于 2017-8-14 09:05:54 | 只看该作者
本帖最后由 89444640 于 2017-8-15 14:38 编辑

这样吧,我清理出来一个测试工程过来容易修改。
敌人设置100%逃跑,都调好了,请测试。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 18:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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