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

Project1

 找回密码
 注册会员
搜索

本人新人脚本盲,求问怎么将灵魂升天的效果和彩虹神剑.....

查看数: 1422 | 评论数: 2 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-3-2 13:22

正文摘要:

本人新人脚本盲,在添加了彩虹神剑脚本后,发现原本的角色阵亡灵魂升天脚本失效了,角色阵亡后出现了如图中红圈所示的变白效果而已,因为灵魂升天的脚本没有注释,我看不懂,不知道怎么将两个脚本合并,既能有彩 ...

回复

qkqwe 发表于 2015-3-2 16:50:33
芯☆淡茹水 发表于 2015-3-2 13:49
大概的整合了一下,没测试

可以啦!感谢大神!{:2_275:}
芯☆淡茹水 发表于 2015-3-2 13:49:11
大概的整合了一下,没测试
  1. =begin
  2. ==============================================================================

  3. 彩虹神剑(伤害分段显示)显示总伤害版 v1.0b

  4. ==============================================================================

  5. 彩虹神剑 by 柳柳
  6. 显示总伤害修改 by 叶子

  7. ==============================================================================

  8. 6-20-2006 v1.0
  9. 在彩虹神剑的基础上增加了显示总伤害的功能,而且总伤害的数字是弹出伤害时逐渐增加的

  10. v1.0a
  11. 修正了显示伤害和实际伤害有差别的问题
  12. 修正了miss的情况下显示miss混乱的问题
  13. 修正了对己方技能重复显示伤害的问题
  14. 未修正播放目标动画第一帧时目标有时无端跳动的BUG

  15. v1.0b
  16. 修改了总伤害数字的位置和z坐标
  17. 未修正播放目标动画第一帧时目标有时无端跳动的BUG

  18. ==============================================================================
  19. =end
  20. # 核心的说明:
  21. # damage_pop 不再附带damage()的功能,这个放到animation里面去了

  22. module RPG
  23. #--------------------------------------------------------------------------
  24. # ● 常量设定
  25. #--------------------------------------------------------------------------
  26. # 是否显示总伤害
  27. SHOW_TOTAL_DAMAGE = true
  28. # 角色受攻击时是否跳一下
  29. BATTLER_JUMP = true

  30. class Sprite < ::Sprite
  31.    #==========================================
  32.    # 修改说明:
  33.    # @flash_shake用来制作挨打时候跳跃
  34.    # @_damage    用来记录每次打击之后弹出数字
  35.    # @_total_damage 记录总伤害
  36.    # @_total_damage_duration 总伤害持续帧
  37.    #==========================================
  38.    #alias 66RPG_rainbow_initialize : initialize
  39.    def initialize(viewport = nil)
  40.      #66RPG_rainbow_initialize(viewport)
  41.      super(viewport)
  42.      @_whiten_duration = 0
  43.      @_appear_duration = 0
  44.      @_escape_duration = 0
  45.      @_collapse_duration = 0
  46.      @_damage_duration = 0
  47.      @_animation_duration = 0
  48.      @_blink = false
  49.      # 挨打时候跳跃
  50.      @flash_shake = 0
  51.      # 伤害记录数组
  52.      @_damage = []
  53.      # 总伤害数字
  54.      @_total_damage = 0
  55.      # 总伤害持续帧
  56.      @_total_damage_duration = 0
  57.      @coll_time = 0
  58.    end
  59.    def collapse
  60.       @coll.dispose if @coll != nil  
  61.       @coll = Sprite.new
  62.       @coll.bitmap = Bitmap.new("Graphics/Battlers/#{@battler_name}")  
  63.       @coll.ox = self.ox
  64.       @coll.oy = self.oy
  65.       @coll.opacity = 100
  66.       @coll.z = 0
  67.       @coll.blend_type = 1
  68.       @coll.x = self.x
  69.       @coll.y = self.y
  70.       @coll_time = 42
  71.       @_whiten_duration = 0
  72.       @_appear_duration = 0
  73.       @_escape_duration = 0
  74.    end
  75.    def damage(value, critical)
  76.      if value.is_a?(Numeric)
  77.        damage_string = value.abs.to_s
  78.      else
  79.        damage_string = value.to_s
  80.      end
  81.      bitmap = Bitmap.new(160, 48)
  82.      bitmap.font.name = "Arial Black"
  83.      bitmap.font.size = 32
  84.      bitmap.font.color.set(0, 0, 0)
  85.      bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  86.      bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  87.      bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  88.      bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  89.      #=======================================
  90.      # 修改:颜色
  91.      #=======================================
  92.      if value.is_a?(Numeric) and value < 0
  93.        bitmap.font.color.set(176, 255, 144)
  94.      else
  95.        bitmap.font.color.set(255, 55, 55)
  96.      end
  97.      bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  98.      if critical
  99.        bitmap.font.size = 20
  100.        bitmap.font.color.set(0, 0, 0)
  101.        bitmap.draw_text(-1, -1, 160, 20, "暴击", 1)
  102.        bitmap.draw_text(+1, -1, 160, 20, "暴击", 1)
  103.        bitmap.draw_text(-1, +1, 160, 20, "暴击", 1)
  104.        bitmap.draw_text(+1, +1, 160, 20, "暴击", 1)
  105.        bitmap.font.color.set(255, 255, 255)
  106.        bitmap.draw_text(0, 0, 160, 20, "暴击", 1)
  107.      end
  108.      @_damage_sprite = ::Sprite.new(self.viewport)
  109.      @_damage_sprite.bitmap = bitmap
  110.      @_damage_sprite.ox = 80
  111.      @_damage_sprite.oy = 20
  112.      @_damage_sprite.x = self.x
  113.      @_damage_sprite.y = self.y - self.oy / 2
  114.      @_damage_sprite.z = 3000
  115.      @_damage_duration = 40
  116.      #=======================================
  117.      # 修改:推入新的伤害
  118.      #=======================================
  119.      @_damage.push([@_damage_sprite,@_damage_duration-10,0, rand(30) - 15, rand(3)])
  120.      # 总伤害处理
  121.      make_total_damage(value)
  122.    end
  123.    #--------------------------------------------------------------------------
  124.    # ● 总伤害处理
  125.    #--------------------------------------------------------------------------
  126.    def make_total_damage(value)
  127.      if value.is_a?(Numeric) and SHOW_TOTAL_DAMAGE
  128.        @_total_damage += value
  129.      else
  130.        return
  131.      end
  132.      bitmap = Bitmap.new(300, 150)
  133.      bitmap.font.name = "Arial Black"
  134.      bitmap.font.size = 48
  135.      bitmap.font.color.set(0, 0, 0)
  136.      bitmap.draw_text(+2, 12+2, 160, 36, @_total_damage.abs.to_s, 1)
  137.      if @_total_damage < 0
  138.        bitmap.font.color.set(80, 255, 00)
  139.      else
  140.        bitmap.font.color.set(255, 140, 0)
  141.      end
  142.      bitmap.draw_text(0, 12, 160, 36, @_total_damage.abs.to_s, 1)
  143.      if @_total_damage_sprite.nil?
  144.        @_total_damage_sprite = ::Sprite.new(self.viewport)
  145.        @_total_damage_sprite.ox = 80
  146.        @_total_damage_sprite.oy = 20
  147.        @_total_damage_sprite.z = 3000
  148.      end
  149.      @_total_damage_sprite.bitmap = bitmap
  150.      @_total_damage_sprite.zoom_x = 1.5
  151.      @_total_damage_sprite.zoom_y = 1.5
  152.      @_total_damage_sprite.x = self.x
  153.      @_total_damage_sprite.y = self.y  - self.oy / 2 - 64
  154.      @_total_damage_sprite.z = 3001
  155.      @_total_damage_duration = 80
  156.    end
  157.    def animation(animation, hit, battler_damage="", battler_critical=false)
  158.      dispose_animation      
  159.      #=======================================
  160.      # 修改:记录伤害和critical
  161.      #=======================================
  162.      @battler_damage = battler_damage
  163.      @battler_critical = battler_critical
  164.      @_animation = animation
  165.      return if @_animation == nil
  166.      @_animation_hit = hit
  167.      @_animation_duration = @_animation.frame_max
  168.      animation_name = @_animation.animation_name
  169.      animation_hue = @_animation.animation_hue
  170.      bitmap = RPG::Cache.animation(animation_name, animation_hue)
  171.      #=======================================
  172.      # 修改:计算总闪光权限值
  173.      #=======================================
  174.      for timing in @_animation.timings
  175.        quanzhong = animation_process_timing(timing, @_animation_hit,true)
  176.        @all_quanzhong += quanzhong
  177.        # 记录最后一次闪光
  178.        @_last_frame = timing.frame if quanzhong != 0
  179.      end      
  180.      if @@_reference_count.include?(bitmap)
  181.        @@_reference_count[bitmap] += 1
  182.      else
  183.        @@_reference_count[bitmap] = 1
  184.      end
  185.      #=======================================
  186.      # 修改:行动方动画不显示伤害
  187.      #=======================================
  188.      if $scene.is_a?(Scene_Battle)
  189.        if $scene.animation1_id == @battler.animation_id
  190.          @battler_damage = ""
  191.        end
  192.      end
  193.      @_animation_sprites = []
  194.      if @_animation.position != 3 or not @@_animations.include?(animation)
  195.        for i in 0..15
  196.          sprite = ::Sprite.new(self.viewport)
  197.          sprite.bitmap = bitmap
  198.          sprite.visible = false
  199.          @_animation_sprites.push(sprite)
  200.        end
  201.        unless @@_animations.include?(animation)
  202.          @@_animations.push(animation)
  203.        end
  204.      end
  205.      update_animation
  206.    end
  207.    #=======================================
  208.    # 修改:更换清除伤害的算法,以防万一
  209.    #       本内容在脚本中没有使用过
  210.    #=======================================
  211.    def dispose_damage
  212.      for damage in @_damage.reverse
  213.        damage[0].bitmap.dispose
  214.        damage[0].dispose
  215.        @_damage.delete(damage)
  216.      end
  217.      @_total_damage = 0
  218.      @_last_frame = -1
  219.      if @_total_damage_sprite != nil
  220.        @_total_damage_duration = 0
  221.        @_total_damage_sprite.bitmap.dispose
  222.        @_total_damage_sprite.dispose
  223.        @_total_damage_sprite = nil
  224.      end
  225.    end
  226.    def dispose_animation
  227.      #=======================================
  228.      # 修改:清除记录的伤害,清除权重记录
  229.      #=======================================
  230.      @battler_damage = nil
  231.      @battler_critical = nil
  232.      @all_quanzhong = 1
  233.      @_total_damage = 0
  234.      @_last_frame = -1
  235.      if @_animation_sprites != nil
  236.        sprite = @_animation_sprites[0]
  237.        if sprite != nil
  238.          @@_reference_count[sprite.bitmap] -= 1
  239.          if @@_reference_count[sprite.bitmap] == 0
  240.            sprite.bitmap.dispose
  241.          end
  242.        end
  243.        for sprite in @_animation_sprites
  244.          sprite.dispose
  245.        end
  246.        @_animation_sprites = nil
  247.        @_animation = nil
  248.      end
  249.    end
  250.    def update
  251.      super
  252.      if @_whiten_duration > 0
  253.        @_whiten_duration -= 1
  254.        self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  255.      end
  256.      if @_appear_duration > 0
  257.        @_appear_duration -= 1
  258.        self.opacity = (16 - @_appear_duration) * 16
  259.      end
  260.      if @_escape_duration > 0
  261.        @_escape_duration -= 1
  262.        self.opacity = 256 - (32 - @_escape_duration) * 10
  263.      end
  264.      if @_collapse_duration > 0
  265.        @_collapse_duration -= 1
  266.        self.opacity = 256 - (48 - @_collapse_duration) * 6
  267.      end
  268.      if @coll_time > 0
  269.         @coll_time -= 1
  270.         @coll.y = self.y - (48 - @coll_time) * 6
  271.         self.opacity = 256 - (48 - @coll_time) * 6
  272.         if @coll_time == 0
  273.           @coll.dispose
  274.         end
  275.       end
  276.      #=======================================
  277.      # 修改:更新算法,更新弹出
  278.      #=======================================
  279.      if @_damage_duration > 0
  280.        @_damage_duration -= 1
  281.        for damage in @_damage
  282.          damage[0].x = self.x + self.viewport.rect.x -
  283.                        self.ox + self.src_rect.width / 2 +
  284.                        (40 - damage[1]) * damage[3] / 10
  285.          damage[0].y -= damage[4]+damage[1]/10
  286.          damage[0].opacity = damage[1]*20
  287.          damage[1] -= 1
  288.          if damage[1]==0
  289.            damage[0].bitmap.dispose
  290.            damage[0].dispose
  291.            @_damage.delete(damage)
  292.            next
  293.          end
  294.        end
  295.      end
  296.      #=======================================
  297.      # 添加:弹出总伤害
  298.      #=======================================
  299.      if @_total_damage_duration > 0
  300.        @_total_damage_duration -= 1
  301.        @_total_damage_sprite.y -= 1 if @_total_damage_duration % 2 == 0
  302.        if @_total_damage_sprite.zoom_x > 1.0
  303.          @_total_damage_sprite.zoom_x -= 0.05
  304.        end
  305.        if @_total_damage_sprite.zoom_y > 1.0
  306.          @_total_damage_sprite.zoom_y -= 0.05
  307.        end
  308.        @_total_damage_sprite.opacity = 256 - (24 - @_total_damage_duration) * 16
  309.        if @_total_damage_duration <= 0
  310.          @_total_damage = 0
  311.          @_total_damage_duration = 0
  312.          @_total_damage_sprite.bitmap.dispose
  313.          @_total_damage_sprite.dispose
  314.          @_total_damage_sprite = nil
  315.        end
  316.      end
  317.      #=======================================
  318.      if @_animation != nil and (Graphics.frame_count % 2 == 0)
  319.        @_animation_duration -= 1
  320.        update_animation
  321.      end
  322.      if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  323.        update_loop_animation
  324.        @_loop_animation_index += 1
  325.        @_loop_animation_index %= @_loop_animation.frame_max
  326.      end
  327.      if @_blink
  328.        @_blink_count = (@_blink_count + 1) % 32
  329.        if @_blink_count < 16
  330.          alpha = (16 - @_blink_count) * 6
  331.        else
  332.          alpha = (@_blink_count - 16) * 6
  333.        end
  334.        self.color.set(255, 255, 255, alpha)
  335.      end
  336.      @@_animations.clear
  337.    end
  338.    def update_animation
  339.      if @_animation_duration > 0
  340.        frame_index = @_animation.frame_max - @_animation_duration
  341.        cell_data = @_animation.frames[frame_index].cell_data
  342.        position = @_animation.position
  343.        animation_set_sprites(@_animation_sprites, cell_data, position)
  344.        #=======================================
  345.        # 修改:弹出伤害,权重计算
  346.        #=======================================
  347.        for timing in @_animation.timings
  348.          if timing.frame == frame_index
  349.            t = 1.0 * animation_process_timing(timing, @_animation_hit)            
  350.            #p t,"当前权重", @all_quanzhong,"总权重"
  351.            if @battler_damage.is_a?(Numeric) and t != 0
  352.              t *= @battler_damage
  353.              t /= @all_quanzhong
  354.              #p t,"当前伤害",@battler_damage,"总伤害"
  355.              t = t.to_i
  356.              # 最后一次闪光的话,伤害修正
  357.              if frame_index == @_last_frame
  358.                @_total_damage = @battler_damage - t
  359.              end
  360.              #p t,@battler_damage,@all_quanzhong
  361.              damage(t,@battler_critical)
  362.            # 防止重复播放miss
  363.            elsif !@battler_damage.is_a?(Numeric) and timing.flash_scope != 0
  364.              damage(@battler_damage,@battler_critical)
  365.            end
  366.          end
  367.        end
  368.      else
  369.        dispose_animation
  370.      end
  371.    end
  372.    #=======================================
  373.    # 修改:敌人跳跃的功能 + 添加返回数值
  374.    #=======================================
  375.     def animation_process_timing(timing, hit,dontflash=false)
  376.       if (timing.condition == 0) or
  377.          (timing.condition == 1 and hit == true) or
  378.          (timing.condition == 2 and hit == false)
  379.         unless dontflash
  380.           if timing.se.name != ""
  381.             se = timing.se
  382.             Audio.se_play("Audio/SE/" + se.name, se.volume, se.pitch)
  383.           end
  384.         end
  385.         case timing.flash_scope
  386.         when 1
  387.           unless dontflash
  388.             self.flash(timing.flash_color, timing.flash_duration * 2)
  389.             if @_total_damage >0
  390.               @flash_shake_switch = true
  391.               @flash_shake = 10
  392.             end
  393.           end
  394.           return timing.flash_color.alpha * timing.flash_duration
  395.         when 2
  396.           unless dontflash
  397.             if self.viewport != nil
  398.               self.viewport.flash(timing.flash_color, timing.flash_duration * 2)
  399.               return timing.flash_color.alpha * timing.flash_duration
  400.             end
  401.           end
  402.         when 3
  403.           unless dontflash
  404.             self.flash(nil, timing.flash_duration * 2)
  405.           end
  406.           return timing.flash_color.alpha * timing.flash_duration
  407.         end
  408.       end      
  409.       return 0
  410.     end   
  411. end
  412. end
  413. #==============================================================================
  414. # ■ Sprite_Battler
  415. #==============================================================================
  416. class Sprite_Battler < RPG::Sprite
  417. #--------------------------------------------------------------------------
  418. # ● 初始化对像
  419. #    添加跳跃记录
  420. #--------------------------------------------------------------------------
  421. def initialize(viewport, battler = nil)
  422.   super(viewport)
  423.   @battler = battler
  424.   @battler_visible = false
  425.   @flash_shake_switch = true
  426. end
  427. #--------------------------------------------------------------------------
  428. # ● 刷新画面
  429. #    增添跳跃功能
  430. #--------------------------------------------------------------------------
  431. def update
  432.   super
  433.   # 战斗者为 nil 的情况下
  434.   if @battler == nil
  435.     self.bitmap = nil
  436.     loop_animation(nil)
  437.     return
  438.   end
  439.   # 文件名和色相与当前情况有差异的情况下
  440.   if @battler.battler_name != @battler_name or
  441.      @battler.battler_hue != @battler_hue
  442.     # 获取、设置位图
  443.     @battler_name = @battler.battler_name
  444.     @battler_hue = @battler.battler_hue
  445.     self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  446.     @width = bitmap.width
  447.     @height = bitmap.height
  448.     self.ox = @width / 2
  449.     self.oy = @height
  450.     # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  451.     if @battler.dead? or @battler.hidden
  452.       self.opacity = 0
  453.     end
  454.   end
  455.   # 动画 ID 与当前的情况有差异的情况下
  456.   if @battler.damage == nil and
  457.      @battler.state_animation_id != @state_animation_id
  458.     @state_animation_id = @battler.state_animation_id
  459.     loop_animation($data_animations[@state_animation_id])
  460.   end
  461.   # 应该被显示的角色的情况下
  462.   if @battler.is_a?(Game_Actor) and @battler_visible
  463.     # 不是主状态的时候稍稍降低点透明度
  464.     if $game_temp.battle_main_phase
  465.       self.opacity += 3 if self.opacity < 255
  466.     else
  467.       self.opacity -= 3 if self.opacity > 207
  468.     end
  469.   end
  470.   # 明灭
  471.   if @battler.blink
  472.     blink_on
  473.   else
  474.     blink_off
  475.   end
  476.   # 不可见的情况下
  477.   unless @battler_visible
  478.     # 出现
  479.     if not @battler.hidden and not @battler.dead? and
  480.        (@battler.damage == nil or @battler.damage_pop)
  481.       appear
  482.       @battler_visible = true
  483.     end
  484.   end
  485.   # 可见的情况下
  486.   if @battler_visible
  487.     # 逃跑
  488.     if @battler.hidden
  489.       $game_system.se_play($data_system.escape_se)
  490.       escape
  491.       @battler_visible = false
  492.     end
  493.     # 白色闪烁
  494.     if @battler.white_flash
  495.       whiten
  496.       @battler.white_flash = false
  497.     end
  498.     # 动画
  499.     if @battler.animation_id != 0
  500.       animation = $data_animations[@battler.animation_id]
  501.       animation(animation, @battler.animation_hit,@battler.damage, @battler.critical)
  502.       @battler.animation_id = 0
  503.     end
  504.     # 伤害
  505.     if @battler.damage_pop
  506.       @battler.damage = nil
  507.       @battler.critical = false
  508.       @battler.damage_pop = false
  509.     end
  510.     # korapusu
  511.     if @battler.damage == nil and @battler.dead?
  512.       if @battler.is_a?(Game_Enemy)
  513.         $game_system.se_play($data_system.enemy_collapse_se)
  514.       else
  515.         $game_system.se_play($data_system.actor_collapse_se)
  516.       end
  517.       collapse
  518.       @battler_visible = false
  519.     end
  520.   end
  521.   # 设置活动块的坐标
  522.   if @flash_shake_switch == true
  523.     self.x = @battler.screen_x
  524.     self.y = @battler.screen_y
  525.     self.z = @battler.screen_z
  526.     @flash_shake_switch = false
  527.   end
  528.   if @flash_shake != 0 and @battler.damage != nil and RPG::BATTLER_JUMP
  529.     case @flash_shake
  530.     when 9..10
  531.       self.x = @battler.screen_x
  532.       self.y -=4
  533.       self.z = @battler.screen_z
  534.     when 6..8
  535.       self.x = @battler.screen_x
  536.       self.y -=2
  537.       self.z = @battler.screen_z
  538.     when 3..5
  539.       self.x = @battler.screen_x
  540.       self.y +=2
  541.       self.z = @battler.screen_z
  542.     when 2
  543.       self.x = @battler.screen_x
  544.       self.y += 4
  545.       self.z = @battler.screen_z
  546.     when 1
  547.       self.x = @battler.screen_x
  548.       self.y = @battler.screen_y
  549.       self.z = @battler.screen_z
  550.     end
  551.     @flash_shake -= 1
  552.   end
  553. end
  554. end

  555. #==============================================================================
  556. # ■ Scene_Battle
  557. #------------------------------------------------------------------------------
  558. #  处理战斗画面的类。
  559. #==============================================================================

  560. class Scene_Battle
  561. #--------------------------------------------------------------------------
  562. # ● 定义实例变量
  563. #--------------------------------------------------------------------------
  564. attr_reader   :animation1_id                    # 行动方动画ID
  565. end
复制代码

评分

参与人数 1梦石 +1 收起 理由
RyanBern + 1 认可答案

查看全部评分

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

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

GMT+8, 2024-11-23 12:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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