查看: 1783|回复: 1

[已经解决] 敵血條腳本,求增加血條長度自訂功能!

[复制链接]
梦石
0
星屑
50
在线时间
448 小时
注册时间
2011-10-9
回帖
138
发表于 2014-9-1 02:53:57 | 显示全部楼层 |阅读模式

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

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

×
希望能增加開關切換血條長度、或是依敵人編號定義長度的功能

例如1號敵人,血條長度100
         2號敵人,血條長度200...等

或者是1號開關開啟時,此腳本血條長度加倍

若能解決經驗奉上,謝謝!

[pre lang="ruby" line="1"]#==============================================================================
# ★要啟用這個腳本
#~ if false
if true
#==============================================================================
# ■ Sprite_Battler
#==============================================================================

class Sprite_Battler < Sprite_Base
  # Word used in enemy Notes field to hide HP gauge 註解以隱藏HP條
  GAUGE_M = "HIDEHP"
  # 背景色                       [邊框顏色,                       內部顏色]
#~   GAUGE_BC = [Color.new(100,0,0,255), Color.new(20,0,0,200)]  #155.205.155   
  GAUGE_BC = [Color.new(100,0,0,255), Color.new(0,0,0,255)]  #155.205.155
  # 面層色(漸變效果) [左端, 右端]
  GAUGE_GC = [Color.new(150,0,0), Color.new(240,50,50)]
  #
   
  GAUGE_W = 68 # 寬度
  GAUGE_H = 4 # 高度 4
  GAUGE_S = 30 # 扣減速度(超過2)40 越小越快
  GAUGE_T = 1400 # 顯示幀數 1秒3000   10秒30000   30秒90000    60秒180000
  GAUGE_O = 16 # 不透明度16
  #
  GAUGE_V = false # 當光標出現可疑損壞。需要STRxx光標。
  #--------------------------------------------------------------------------
  # ● 繪畫血條
  #--------------------------------------------------------------------------
  def create_enhpgauge
    g_width = GAUGE_W  # 長
    g_height = GAUGE_H # 高
    f_color = GAUGE_BC # 背景色
    g_color = GAUGE_GC # 面層色
    # 圖畫繪製
    bitmap = Bitmap.new(g_width, g_height * 2)
    # 上半部分:圖畫定義,背景色
    bitmap.fill_rect(0, 0, g_width, g_height, f_color[0])         # 外框
    bitmap.fill_rect(1, 1, g_width - 2, g_height - 2, f_color[1]) # 內部
    # 上半部分:圖畫定義,面層色
    bitmap.gradient_fill_rect(1, g_height + 1, g_width - 2, g_height - 2,
                              g_color[0], g_color[1])             # 層次
    # 血條建立 # [0] = 背景色 ; [1] = 面層色
    @hp_gauge = [Sprite.new, Sprite.new]

    for i in 0..1
      sprite = @hp_gauge   
      sprite.viewport = self.viewport
      sprite.bitmap = bitmap
      sprite.src_rect.set(0, 0, g_width, g_height)
      sprite.src_rect.y = g_height if i == 1
      if $back_attack && N01::BACK_ATTACK && N01::BACK_ATTACK_NON_BACK_MIRROR
        sprite.x = Graphics.width - @battler.screen_x
      else
  #----------------------------------------------------------------------------------------------------------------------------------------------------        
#~           sprite.x = 10  #固定顯示位置
          sprite.x = @battler.screen_x + 5  #顯示在敵人腳邊
      end

      sprite.y = @battler.screen_y  - 10 #血條的高低

  #----------------------------------------------------------------------------------------------------------------------------------------------------      
      sprite.ox = g_width / 2 - 4
      sprite.oy = g_height / 2 - 1
#~       sprite.z = @battler.screen_z + 1 #血條優先度
    sprite.z = self.z =  battler.position_z + 10#血條優先度
  
#~       sprite.z = +20 if i == 1         
      sprite.opacity = 0
    end
    # 各種
    @enid = @battler.enemy_id
    @hp = @battler.hp
    @gauge_width = GAUGE_W + 1
    @gauge_opacity = 0
  end
  #----------------------------------------------------------------------------------------------------------------------------------------------------
  # ● 血條更新
  #--------------------------------------------------------------------------
  def enhpgauge_update
    # 如果對應ID敵人被傷害的時候需要顯示
    if @enid != @battler.enemy_id
      @enid = @battler.enemy_id
      @gauge_visible = true
#~ ##      @gauge_visible = false if $data_enemies[@enid].note.include?(GAUGE_M)
#~  ##     for i in @hp_gauge do i.visible = @gauge_visible end
      end
    return unless @gauge_visible
    # 計算更新
    if @hp != @battler.hp
      g_width = (@battler.hp / (@battler.maxhp * 1.0))
      @gauge_width = ((GAUGE_W * g_width) + 1).truncate
      @gauge_opacity = GAUGE_T
      @hp = @battler.hp
    end
    # 長
    g_width = @hp_gauge[1].src_rect.width
    speed = GAUGE_S
    rect = @hp_gauge[1].src_rect
    rect.width = (@gauge_width + (g_width * (speed - 1))) / speed
    if rect.width != @gauge_width
      if rect.width > @gauge_width
        rect.width -= 1
      else
        rect.width += 1
      end
    end
    rect.width = 2 if rect.width <= 1 and @hp > 0
   
   
    # 透明度
    if GAUGE_V and @battler.cursor_flash
      @gauge_opacity += GAUGE_O * 2 if @gauge_opacity <= GAUGE_T / 2
    else
      @gauge_opacity -= GAUGE_O if @gauge_opacity > 0
    end
    # 透明度適用
    for i in @hp_gauge do i.opacity = @gauge_opacity end
      

#-----------------------------------------------------------------------------------------------------------------
        if @battler.hp > 0#or @gauge_width > 1  #假如敵人存活就顯示血條
                @gauge_visible = true
                @gauge_opacity = 255
                end        
#-----------------------------------------------------------------------------------------------------------------
      
  end
  #--------------------------------------------------------------------------
  # ● 對象初始化
  #--------------------------------------------------------------------------
  alias initialize_str15 initialize
  def initialize(viewport, battler = nil)
    initialize_str15(viewport, battler)
    if @battler.is_a?(Game_Enemy)
      create_enhpgauge
      @gauge_visible = true
#~ ##      @gauge_visible = false if $data_enemies[@enid].note.include?(GAUGE_M)
#~   ##    for i in @hp_gauge do i.visible = @gauge_visible end
    end
  end
  #--------------------------------------------------------------------------
  # ● 解放(dispose)
  #--------------------------------------------------------------------------
  alias dispose_str15 dispose
  def dispose
    dispose_str15
    if @battler.is_a?(Game_Enemy)
      @hp_gauge[0].bitmap.dispose
      @hp_gauge[0].dispose
      @hp_gauge[1].dispose
    end
  end
  #--------------------------------------------------------------------------
  # ● 幀更新
  #--------------------------------------------------------------------------
  alias update_str15 update
  def update
    update_str15
    enhpgauge_update if @battler.is_a?(Game_Enemy)
  end
end
#
end[/pre]
梦石
0
星屑
68
在线时间
585 小时
注册时间
2013-5-25
回帖
1484
发表于 2014-9-4 15:47:06 | 显示全部楼层
本帖最后由 克莉丝 于 2014-9-5 09:28 编辑

代码未测试,因为这个脚本因该是你哪里截取出来的没法测试
说明:指定某号变量为非0时某号敌人血条长度与该变量相同
       例如1号变量值为150,那么1号敌人的血条长度为150.
             1号变量值为0,那么1号敌人的血条长度为默认的68.
变量编号可以再说明
  1. #==============================================================================
  2. # ★要啟用這個腳本
  3. #~ if false
  4. if true
  5. #==============================================================================
  6. # ■ Sprite_Battler
  7. #==============================================================================

  8. class Sprite_Battler < Sprite_Base
  9.   # Word used in enemy Notes field to hide HP gauge 註解以隱藏HP條
  10.   GAUGE_M = "HIDEHP"
  11.   # 背景色                       [邊框顏色,                       內部顏色]
  12. #~   GAUGE_BC = [Color.new(100,0,0,255), Color.new(20,0,0,200)]  #155.205.155   
  13.   GAUGE_BC = [Color.new(100,0,0,255), Color.new(0,0,0,255)]  #155.205.155
  14.   # 面層色(漸變效果) [左端, 右端]
  15.   GAUGE_GC = [Color.new(150,0,0), Color.new(240,50,50)]
  16.   #

  17.   GAUGE_W = 68 # 默认寬度
  18.   GAUGE_H = 4 # 高度 4
  19.   GAUGE_S = 30 # 扣減速度(超過2)40 越小越快
  20.   GAUGE_T = 1400 # 顯示幀數 1秒3000   10秒30000   30秒90000    60秒180000
  21.   GAUGE_O = 16 # 不透明度16
  22.   #
  23.   GAUGE_V = false # 當光標出現可疑損壞。需要STRxx光標。
  24.   #--------------------------------------------------------------------------
  25.   # ● 繪畫血條
  26.   #--------------------------------------------------------------------------
  27.   def create_enhpgauge
  28.     g_width = $game_variables[@battler.index] == 0 ? GAUGE_W : $game_variables[@battler.index]  # 長
  29.     g_height = GAUGE_H # 高
  30.     f_color = GAUGE_BC # 背景色
  31.     g_color = GAUGE_GC # 面層色
  32.     # 圖畫繪製
  33.     bitmap = Bitmap.new(g_width, g_height * 2)
  34.     # 上半部分:圖畫定義,背景色
  35.     bitmap.fill_rect(0, 0, g_width, g_height, f_color[0])         # 外框
  36.     bitmap.fill_rect(1, 1, g_width - 2, g_height - 2, f_color[1]) # 內部
  37.     # 上半部分:圖畫定義,面層色
  38.     bitmap.gradient_fill_rect(1, g_height + 1, g_width - 2, g_height - 2,
  39.                               g_color[0], g_color[1])             # 層次
  40.     # 血條建立 # [0] = 背景色 ; [1] = 面層色
  41.     @hp_gauge = [Sprite.new, Sprite.new]

  42.     for i in 0..1
  43.       sprite = @hp_gauge[i]   
  44.       sprite.viewport = self.viewport
  45.       sprite.bitmap = bitmap
  46.       sprite.src_rect.set(0, 0, g_width, g_height)
  47.       sprite.src_rect.y = g_height if i == 1
  48.       if $back_attack && N01::BACK_ATTACK && N01::BACK_ATTACK_NON_BACK_MIRROR
  49.         sprite.x = Graphics.width - @battler.screen_x
  50.       else
  51.   #----------------------------------------------------------------------------------------------------------------------------------------------------        
  52. #~           sprite.x = 10  #固定顯示位置
  53.           sprite.x = @battler.screen_x + 5  #顯示在敵人腳邊
  54.       end

  55.       sprite.y = @battler.screen_y  - 10 #血條的高低

  56.   #----------------------------------------------------------------------------------------------------------------------------------------------------      
  57.       sprite.ox = g_width / 2 - 4
  58.       sprite.oy = g_height / 2 - 1
  59. #~       sprite.z = @battler.screen_z + 1 #血條優先度
  60.       sprite.z = self.z =  battler.position_z + 10#血條優先度

  61. #~       sprite.z = +20 if i == 1         
  62.       sprite.opacity = 0
  63.     end
  64.     # 各種
  65.     @enid = @battler.enemy_id
  66.     @hp = @battler.hp
  67.     @gauge_width = $game_variables[@battler.index] == 0?  GAUGE_W : $game_variables[@battler.index] + 1
  68.     @gauge_opacity = 0
  69.   end
  70.   #----------------------------------------------------------------------------------------------------------------------------------------------------
  71.   # ● 血條更新
  72.   #--------------------------------------------------------------------------
  73.   def enhpgauge_update
  74.     # 如果對應ID敵人被傷害的時候需要顯示
  75.     if @enid != @battler.enemy_id
  76.       @enid = @battler.enemy_id
  77.       @gauge_visible = true
  78. #~ ##      @gauge_visible = false if $data_enemies[@enid].note.include?(GAUGE_M)
  79. #~  ##     for i in @hp_gauge do i.visible = @gauge_visible end
  80.       end
  81.     return unless @gauge_visible
  82.     # 計算更新
  83.     if @hp != @battler.hp
  84.       g_width = (@battler.hp / (@battler.maxhp * 1.0))
  85.       @gauge_width = (($game_variables[@battler.index] == 0? 68 : $game_variables[@battler.index] * g_width) + 1).truncate
  86.       @gauge_opacity = GAUGE_T
  87.       @hp = @battler.hp
  88.     end
  89.     # 長
  90.     g_width = @hp_gauge[1].src_rect.width
  91.     speed = GAUGE_S
  92.     rect = @hp_gauge[1].src_rect
  93.     rect.width = (@gauge_width + (g_width * (speed - 1))) / speed
  94.     if rect.width != @gauge_width
  95.       if rect.width > @gauge_width
  96.         rect.width -= 1
  97.       else
  98.         rect.width += 1
  99.       end
  100.     end
  101.     rect.width = 2 if rect.width <= 1 and @hp > 0


  102.     # 透明度
  103.     if GAUGE_V and @battler.cursor_flash
  104.       @gauge_opacity += GAUGE_O * 2 if @gauge_opacity <= GAUGE_T / 2
  105.     else
  106.       @gauge_opacity -= GAUGE_O if @gauge_opacity > 0
  107.     end
  108.     # 透明度適用
  109.     for i in @hp_gauge do i.opacity = @gauge_opacity end


  110. #-----------------------------------------------------------------------------------------------------------------
  111.         if @battler.hp > 0#or @gauge_width > 1  #假如敵人存活就顯示血條
  112.                 @gauge_visible = true
  113.                 @gauge_opacity = 255
  114.                 end        
  115. #-----------------------------------------------------------------------------------------------------------------

  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ● 對象初始化
  119.   #--------------------------------------------------------------------------
  120.   alias initialize_str15 initialize
  121.   def initialize(viewport, battler = nil)
  122.     initialize_str15(viewport, battler)
  123.     if @battler.is_a?(Game_Enemy)
  124.       create_enhpgauge
  125.       @gauge_visible = true
  126. #~ ##      @gauge_visible = false if $data_enemies[@enid].note.include?(GAUGE_M)
  127. #~   ##    for i in @hp_gauge do i.visible = @gauge_visible end
  128.     end
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 解放(dispose)
  132.   #--------------------------------------------------------------------------
  133.   alias dispose_str15 dispose
  134.   def dispose
  135.     dispose_str15
  136.     if @battler.is_a?(Game_Enemy)
  137.       @hp_gauge[0].bitmap.dispose
  138.       @hp_gauge[0].dispose
  139.       @hp_gauge[1].dispose
  140.     end
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● 幀更新
  144.   #--------------------------------------------------------------------------
  145.   alias update_str15 update
  146.   def update
  147.     update_str15
  148.     enhpgauge_update if @battler.is_a?(Game_Enemy)
  149.   end
  150. end
  151. #
  152. end
复制代码

点评

如果是套用敵人編號的話,會導致顯示的不正確,個人修改為以指定變數更改就可以了,非常感謝您!  发表于 2014-9-5 13:19
已修正语法错误  发表于 2014-9-5 09:29
非常期待您的幫忙!  发表于 2014-9-5 02:40
但測試時出現了錯誤,30行: SyntaxError occurred.  发表于 2014-9-5 02:39
這是屬於橫向戰鬥使用的,不需要依賴其他腳本  发表于 2014-9-5 02:38

评分

参与人数 2星屑 +120 收起 理由
丿梁丶小柒 + 100 认可答案
冷徹心扉 + 20 认可答案

查看全部评分

回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部