Project1

标题: 武器决定杀敌方式 v0.1 [欢迎提供新方式] [打印本页]

作者: hide秀    时间: 2008-7-7 01:58
标题: 武器决定杀敌方式 v0.1 [欢迎提供新方式]
武器决定杀敌方式 v0.1

作者:秀秀

这个是根据武器ID来判断杀敌人方式的

默认做了8种杀敌方式 截图效果不好 具体还是看范例吧{/cy}

如果希望增加新的杀敌方式 请回帖,如果能做我会增加进去的

当然自己能看懂自己脚本添加也是可以的{/cy}


  使用方法:设置死亡方式数组里面包含的武器ID
  
            设置件脚本开始的常量
            
            例如:Dead_Way3 = [12,14,77]
            
            表示武器数据库ID为12,14,77的武器使用的是第三种死亡方式
            
            如果不包含在树组里面的 全部使用默认的死亡方式
            
            死亡方式对照表如下:
            
            1.右=>左
            2.X压缩
            3.Y压缩
            4.闪烁
            5.扫描线
            6.斜飞
            7.一文字斩
            8.倒

-------------下载范例----------------------------------------------------------
http://rpg.blue/upload_program/f ... 方式_95795734.rar
-------------------------------------------------------------------------------




脚本:

=begin
  
  武器决定杀敌人方式v0.1
  
  作者:秀秀

  使用方法:设置死亡方式数组里面包含的武器ID
  
            设置件脚本开始的常量
            
            例如:Dead_Way3 = [12,14,77]
            
            表示武器数据库ID为12,14,77的武器使用的是第三种死亡方式
            
            如果不包含在树组里面的 全部使用默认的死亡方式
            
            死亡方式对照表如下:
            
            1.右=>左
            2.X压缩
            3.Y压缩
            4.闪烁
            5.扫描线
            6.斜飞
            7.一文字斩
            8.倒

=end


# 这里设置 武器ID的杀敌方式

module Dead_Way
  Dead_Way1 = [1,2,3,4]  
  Dead_Way2 = [5,6,7,8]
  Dead_Way3 = [9,10,11,12]
  Dead_Way4 = [13,14,15,16]
  Dead_Way5 = [17,18,19,20]
  Dead_Way6 = [21,22,23,24]
  Dead_Way7 = [25,26,27,28]
  Dead_Way8 = [29,30,31,32]
end




module RPG
  class Sprite < ::Sprite
    @@kind = 0
    def initialize(viewport = nil)
      super(viewport)
      @_whiten_duration = 0
      @_appear_duration = 0
      @_escape_duration = 0
      @_collapse_duration = 0
      @_damage_duration = 0
      @_animation_duration = 0
      @dead_way_duration = 0
      @temp_sprite = nil
      @_blink = false
    end
    alias ori_whiten whiten
    def whiten
      ori_whiten
      @dead_way_duration = 0
    end
    alias ori_appear appear
    def appear
      ori_appear
      @dead_way_duration = 0
    end
    alias ori_escape escape
    def escape
      ori_escape
      @dead_way_duration = 0
    end
    alias ori_collapse collapse
    def collapse
      ori_collapse
      @dead_way_duration = 0
    end
    alias ori_dispose dispose
    def dispose
      dispose_temp_sprite
      ori_dispose
    end
    def dispose_temp_sprite
       if @temp_sprite != nil
          @temp_sprite.bitmap.dispose
          @temp_sprite.dispose
          @_damage_sprite = nil
       end
    end  
   
     
    def dead_way(kind)
      @@kind = kind
      @width = self.bitmap.width
      @height = self.bitmap.height

      if kind != 4
        @temp_sprite = Sprite.new
        @temp_sprite.bitmap = self.bitmap.clone
        @temp_sprite.x = self.x
        @temp_sprite.y = self.y - @temp_sprite.bitmap.height/2
        @temp_sprite.ox = @width/2
        @temp_sprite.oy = @height/2
        self.opacity = 0
      end

      case @@kind
      when 1
        #create_sprite(1)
        @dead_way_duration = 60
        @w = @width/8
      when 2
        #create_sprite(2)
        @dead_way_duration = 60
      when 3  
        #create_sprite(3)
        @dead_way_duration = 60
      when 4  
        @dead_way_duration = 70
      when 5
        #create_sprite(5)
        @dead_way_duration = 120
        @h = @height/30
        @array_lines = []
        for i in 0..31
          @array_lines.push(@h*i)
        end
      when 6
        #create_sprite(6)
        @dead_way_duration = 100
      when 7
        #create_sprite(7)
        @dead_way_duration = 40
      when 8  
        #create_sprite(8)
        @dead_way_duration = 40
        #@temp_sprite.angle = 90
      end
      @_escape_duration = 0
      @_whiten_duration = 0
      @_appear_duration = 0
      @_collapse_duration = 0
    end  

    def effect?
      @_whiten_duration > 0 or
      @_appear_duration > 0 or
      @_escape_duration > 0 or
      @_collapse_duration > 0 or
      @_damage_duration > 0 or
      @_animation_duration > 0 or
      @dead_way_duration > 0
    end

   
    def rigit_to_left
      @dead_way_duration -= 4
      rect = Rect.new((@width-(1+@dead_way_duration/6)*@w)-3,0,@w+3,@height)
      # rect=Rect.new(0,0,10,80)
      @temp_sprite.bitmap.fill_rect(rect,Color.new(0,0,0,0))
      if @dead_way_duration <= 0
        @@kind = 0
      end  
    end  
   
    def xx
      @dead_way_duration -= 4
      @temp_sprite.zoom_x -= 0.1
      if @dead_way_duration <= 6
        @@kind = 0
      end  
    end
   
    def yy
      @dead_way_duration -= 6
      @temp_sprite.zoom_y -= 0.12
      if @dead_way_duration == 0
        @@kind = 0
      end  
    end
   
    def shan
      @dead_way_duration -= 1
      case @dead_way_duration
      when 69
        self.opacity = 0
        @temp_sprite = Sprite.new
        @temp_sprite.bitmap = self.bitmap.clone
        @temp_sprite.x = self.x
        @temp_sprite.y = self.y - self.bitmap.height/2
        @temp_sprite.ox = @width/2
        @temp_sprite.oy = @height/2
      when 64..68
        @temp_sprite.opacity = 0
      when 58..63  
        @temp_sprite.opacity = 255
      when 53..57
        @temp_sprite.opacity = 0
      when 48..52
        @temp_sprite.opacity = 255
      when 43..47
        @temp_sprite.opacity = 0
      when 38..42  
        @temp_sprite.opacity = 255
      when 33..37
        @temp_sprite.opacity = 0
      when 29..32  
        @temp_sprite.opacity = 255
      when 25..28
        @temp_sprite.opacity = 0
      when 22..24
        @temp_sprite.opacity = 255
      when 19..21
        @temp_sprite.opacity = 0
      when 16..18
        @temp_sprite.opacity = 255
      when 13..15
        @temp_sprite.opacity = 0
      when 10..12
        @temp_sprite.opacity = 255
      when 8..9
        @temp_sprite.opacity = 0
      when 6..7
        @temp_sprite.opacity = 255
      when 4..5
        @temp_sprite.opacity = 0
      when 2..3
        @temp_sprite.opacity = 255
      when 1
        @temp_sprite.opacity = 0
      when 0  
        @temp_sprite.opacity = 0
        @@kind = 0
      end
    end  
   
    def line_es
      @dead_way_duration -= 3
      if @array_lines.size == 0
        return
      end  
      a = rand(@array_lines.size)
      rect = Rect.new(0,@array_lines[a],@width,@h)
      @temp_sprite.bitmap.fill_rect(rect,Color.new(0,0,0,0))
      @array_lines.delete_at a
      if @dead_way_duration <= 0
        @@kind = 0
      end  
    end  
   
    def fly_45
      @dead_way_duration -= 2
      @temp_sprite.x -= 3
      @temp_sprite.y -= 3
      @temp_sprite.angle -= 60
      @temp_sprite.zoom_x -= 0.02
      @temp_sprite.zoom_y -= 0.02
      if @dead_way_duration <= 0
        @@kind = 0
      end  
    end  
   
    def yi
      @dead_way_duration -= 1
      case @dead_way_duration
        when 39
          rect = Rect.new(0,@temp_sprite.oy-@height/20,@width/5,@height/20)
          @temp_sprite.bitmap.fill_rect(rect,Color.new(0,0,0,0))
        when 38
          rect = Rect.new(@width/5,@temp_sprite.oy-@height/20,@width/5,@height/20)
          @temp_sprite.bitmap.fill_rect(rect,Color.new(0,0,0,0))
        when 37
          rect = Rect.new(@width/5*2,@temp_sprite.oy-@height/20,@width/5,@height/20)
          @temp_sprite.bitmap.fill_rect(rect,Color.new(0,0,0,0))
        when 36
          rect = Rect.new(@width/5*3,@temp_sprite.oy-@height/20,@width/5,@height/20)
          @temp_sprite.bitmap.fill_rect(rect,Color.new(0,0,0,0))
        when 35  
          rect = Rect.new(@width/5*4,@temp_sprite.oy-@height/20,@width/5,@height/20)
          @temp_sprite.bitmap.fill_rect(rect,Color.new(0,0,0,0))
        when 34  
          @temp_sprite.opacity = 0
          @sprite1 = Sprite.new
          @sprite2 = Sprite.new
          @sprite1.x,@sprite1.y = @temp_sprite.x,@temp_sprite.y
          @sprite2.x,@sprite2.y = @temp_sprite.x,@temp_sprite.y
          @sprite1.ox,@sprite1.oy = @temp_sprite.ox,@temp_sprite.oy
          @sprite2.ox,@sprite2.oy = @temp_sprite.ox,@temp_sprite.oy

          @sprite1.bitmap = Bitmap.new(@width,@height)
          @sprite2.bitmap = Bitmap.new(@width,@height)
          @sprite1.bitmap.blt(0,0,@temp_sprite.bitmap,Rect.new(0,0,@width,
                              @temp_sprite.oy))
          @sprite2.bitmap.blt(0,@temp_sprite.oy,@temp_sprite.bitmap,Rect.new(0,
                              @temp_sprite.oy,@width,@temp_sprite.oy))
         
        when 25..33  
          @sprite1.x -= 2
          @sprite2.x += 2
        when 1..24  
          @sprite1.opacity -= 10
          @sprite2.opacity -= 10
        when 0  
          @@kind = 0
          @sprite1.dispose
          @sprite1.bitmap.dispose
          @sprite2.dispose
          @sprite2.bitmap.dispose
        end
        
    end  
   
    def dao
      @dead_way_duration -= 1
      case @dead_way_duration
      when 33..39
        @temp_sprite.y -= 6
      when 28..32
        @temp_sprite.angle = 180
      when 21..27
        @temp_sprite.y += 6
      when 10..20
        @temp_sprite.angle = 90
      when 0..9
        @temp_sprite.opacity = 0
      end  
      if @dead_way_duration <= 0
        @@kind = 0
      end  
    end  
   
   
    def update
      super
      if @_whiten_duration > 0
        @_whiten_duration -= 1
        self.color.alpha = 128 - (16 - @_whiten_duration) * 10
      end
      if @_appear_duration > 0
        @_appear_duration -= 1
        self.opacity = (16 - @_appear_duration) * 16
      end
      if @_escape_duration > 0
        @_escape_duration -= 1
        self.opacity = 256 - (32 - @_escape_duration) * 10
      end
      if @_collapse_duration > 0
        @_collapse_duration -= 1
        self.opacity = 256 - (48 - @_collapse_duration) * 6
      end
      if @_damage_duration > 0
        @_damage_duration -= 1
        case @_damage_duration
        when 38..39
          @_damage_sprite.y -= 4
        when 36..37
          @_damage_sprite.y -= 2
        when 34..35
          @_damage_sprite.y += 2
        when 28..33
          @_damage_sprite.y += 4
        end
        @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
        if @_damage_duration == 0
          dispose_damage
        end
      end

      if @dead_way_duration > 0
        case @@kind
        when 0
         @dead_way_duration -= 1
        when 1
         rigit_to_left
        when 2
          xx
        when 3
          yy
        when 4
          shan
        when 5
          line_es
        when 6  
          fly_45
        when 7  
          yi
        when 8
          dao
        end
        # @@kind = 0
      end  

      if @_animation != nil and (Graphics.frame_count % 2 == 0)
        @_animation_duration -= 1
        update_animation
      end
      if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
        update_loop_animation
        @_loop_animation_index += 1
        @_loop_animation_index %= @_loop_animation.frame_max
      end
      if @_blink
        @_blink_count = (@_blink_count + 1) % 32
        if @_blink_count < 16
          alpha = (16 - @_blink_count) * 6
        else
          alpha = (@_blink_count - 16) * 6
        end
        self.color.set(255, 255, 255, alpha)
      end
      @@_animations.clear
    end

   end
end   

class Sprite_Battler < RPG::Sprite
  def update
    super
    if @battler == nil
      self.bitmap = nil
      loop_animation(nil)
      return
    end
    if @battler.battler_name != @battler_name or
       @battler.battler_hue != @battler_hue
      @battler_name = @battler.battler_name
      @battler_hue = @battler.battler_hue
      self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
      @width = bitmap.width
      @height = bitmap.height
      self.ox = @width / 2
      self.oy = @height
      if @battler.dead? or @battler.hidden
        self.opacity = 0
      end
    end
    if @battler.damage == nil and
       @battler.state_animation_id != @state_animation_id
      @state_animation_id = @battler.state_animation_id
      loop_animation($data_animations[@state_animation_id])
    end
    if @battler.is_a?(Game_Actor) and @battler_visible
      if $game_temp.battle_main_phase
        self.opacity += 3 if self.opacity < 255
      else
        self.opacity -= 3 if self.opacity > 207
      end
    end
    if @battler.blink
      blink_on
    else
      blink_off
    end
    unless @battler_visible
      if not @battler.hidden and not @battler.dead? and
         (@battler.damage == nil or @battler.damage_pop)
        appear
        @battler_visible = true
      end
    end
    if @battler_visible
      if @battler.hidden
        $game_system.se_play($data_system.escape_se)
        escape
        @battler_visible = false
      end
      if @battler.white_flash
        whiten
        @battler.white_flash = false
      end
      if @battler.animation_id != 0
        animation = $data_animations[@battler.animation_id]
        animation(animation, @battler.animation_hit)
        @battler.animation_id = 0
      end
      if @battler.damage_pop
        damage(@battler.damage, @battler.critical)
        @battler.damage = nil
        @battler.critical = false
        @battler.damage_pop = false
      end
      if @battler.damage == nil and @battler.dead?
        if @battler.is_a?(Game_Enemy)
          $game_system.se_play($data_system.enemy_collapse_se)
        else
          $game_system.se_play($data_system.actor_collapse_se)
        end

       id = $scene.active_battler.weapon_id

       for i in 1..8
        if eval("Dead_Way::Dead_Way#{i}").include?(id)
          dead_way(i)
          break
        else
          collapse
        end  
       end

        @battler_visible = false
      end
    end

    self.x = @battler.screen_x
    self.y = @battler.screen_y
    self.z = @battler.screen_z
  end
end

class Scene_Battle
  attr_reader  :active_battler
end



作者: 越前リョーマ    时间: 2008-7-7 02:07
攻击方式怪怪的……
作者: 喵喵の黄昏    时间: 2008-7-7 02:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: hide秀    时间: 2008-7-7 02:17
{/cy}下载范例看看吧~有没有新的杀敌方式提供?呵呵
作者: 喵喵の黄昏    时间: 2008-7-7 04:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: 松谷修三    时间: 2008-7-8 18:28
{/hx}乱飞做得出来不?
作者: 问题    时间: 2008-7-9 00:51
攻击方式的确怪了点{/fd}
新方式的话有很多。
如果可以的话,能做这几种吗:
1 一文字斩是横着的,可以来个竖着的(或者方向灵活一点)
2 做过POWERPOINT的话么,里面那个溶解效果不错
3 WAR3里的一种,大=>小,最后消失
4 其实偶觉得可以做成随机选择杀敌方式就更好啦~~如一文字斩的随机方向性

作者: 灯笼菜刀王    时间: 2008-7-11 03:04
提供,

大卸八快式

火烧,然后变黑,然后变粉飘走

冰冻,变蓝,然后碎开。

雷击,颜色反相,然后消失。

TF(踢飞),战斗图从大变小然后化为星星。

PIA飞。 战斗图从右飞到左然后到边上弹回右

推倒,透视效果,就是战斗图梯行变化。

升天,战斗图变灰,然后一个透明的图从原来的地方飘上天。

万箭穿心,战斗图上布满小洞而死。

砍头,  战斗图height 分3份(三头身战斗图~,我的游戏格式-v-) 上面那份掉落。

贯通,战斗图中心出现个大洞

爆炸,战斗图分4份,然后放射性散开。

待续.....

作者: 浩气青天    时间: 2008-9-5 05:44
图片有点乱,没怎么看清楚。
作者: dna_7086    时间: 2008-9-5 18:59
提示: 作者被禁止或删除 内容自动屏蔽
作者: 周子民    时间: 2008-12-27 02:48
提示: 作者被禁止或删除 内容自动屏蔽




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