질문과 답변

Extra Form

#--# Basic Enemy HP Bars v 2.8.2
#
# Adds customizable hp bars to enemies in battle. See configuration
#  below for more detail. Also allows for the option of using a nice
#  graphical hp bar from a image file.
#
# Usage: Plug and play, customize as needed.
#
#------#
#-- Script by: V.M of D.T
#
#- Questions or comments can be:
#    given by email: sumptuaryspade@live.ca
#    provided on facebook: http://www.facebook.com/DaimoniousTailsGames
#   All my other scripts and projects can be found here: http://daimonioustails.weebly.com/
#
#--- Free to use in any project, commercial or non-commercial, with credit given
# - - Though a donation's always a nice way to say thank you~ (I also accept actual thank you's)
 
#Customization starts here:
module DTP_HP
  #Whether to place the hp bar above or below the enemy
  ABOVE_MONSTER = true
  #Whether to use a custome image or not:
  #Image would be placed in Graphics/System and named Custom_HP.png
  CUSTOM_BAR = false
  #Whether to include the hp bar or not
  USE_HP_BAR = true
  #Whether to include an mp bar or not
  USE_MP_BAR = true
 
  #The width of the hp bar
  BAR_WIDTH = 66
  #The height of the hp bar
  BAR_HEIGHT = 5
  #The width of the border around the hp bar
  BORDER_WIDTH = 1
  #The height of the border around the hp bar
  BORDER_HEIGHT = 1
  #Offset the hp bar along the x-axis(left,right)
  BAR_OFFSET_X = 0
  #Offset the hp bar along the y-axis(up,down)
  BAR_OFFSET_Y = 0
 
  #Color for the back of the hp bar
  COLOR_BAR_BACK = Color.new(0,0,0,200)
  #First color for the hp bar gradient
  COLOR_BAR_1 = Color.new(255,0,0)
  #Second color for the hp bar gradient
  COLOR_BAR_2 = Color.new(200,100,100)
  #Outside border color
  COLOR_BORDER_1 = Color.new(0,0,0,185)
  #Inside border color
  COLOR_BORDER_2 = Color.new(255,255,255,185)
  #First color for the mp bar gradient
  MP_COLOR_BAR_1 = Color.new(0,175,255)
  #Second color fot he mp bar gradient
  MP_COLOR_BAR_2 = Color.new(0,0,255)
 
  #Whether to display text or not
  USE_TEXT = true
  #Text to be displayed, chp = current hp, mhp = max hp, php = percentage hp
  #Examples: "php%" or "chp/mhp" or "chp - php%"
  TEXT_DISPLAY = "chp"
  #Offset for the text along the x-axis(left,right)
  TEXT_OFFSET_X = 5
  #Offset for the text along the y-axis(up,down)
  TEXT_OFFSET_Y = -24
  #Size of the displayed text
  TEXT_SIZE = Font.default_size
  #Font of the displayed text
  TEXT_FONT = Font.default_name
 
  #Show bars only when specific actor in party. Array format. Example: [8,7]
  #Set to [] to not use actor only
  SPECIFIC_ACTOR = []
  #Show enemy hp bar only if certain state is applied (like a scan state)
  #Set to 0 to not use state only
  SCAN_STATE = 0
  #Enemies will show hp bar as long as they have been affected but scan state
  #at least once before
  SCAN_ONCE = false
  #Hp bars will only show when you are targetting a monster
  ONLY_ON_TARGET = false
 
  #Text to display if it's a boss monster, accepts same arguments
  BOSS_TEXT = "???"
  #The width of the boss hp bar
  BOSS_BAR_WIDTH = 66
  #The height of the boss hp bar
  BOSS_BAR_HEIGHT = 5
  #The width of the border around the boss hp bar
  BOSS_BORDER_WIDTH = 1
  #The height of the border around the boss hp bar
  BOSS_BORDER_HEIGHT = 1
  #ID's of boss monsters in array format.
  BOSS_MONSTERS = []
end
#Customization ends here
 
class Sprite_Battler
  alias hpbar_update update
  alias hpbar_dispose dispose
  def update
    hpbar_update
    return unless @battler.is_a?(Game_Enemy)
    if @battler
      update_hp_bar
    end
  end
  def update_hp_bar
    boss = DTP_HP::BOSS_MONSTERS.include?(@battler.enemy_id)
    setup_bar if @hp_bar.nil?
    if @text_display.nil?
      @text_display = Sprite_Base.new(self.viewport)
      @text_display.bitmap = Bitmap.new(100,DTP_HP::TEXT_SIZE)
      @text_display.bitmap.font.size = DTP_HP::TEXT_SIZE
      @text_display.bitmap.font.name = DTP_HP::TEXT_FONT
      @text_display.x = @hp_bar.x + DTP_HP::TEXT_OFFSET_X
      @text_display.y = @hp_bar.y + DTP_HP::TEXT_OFFSET_Y
      @text_display.z = 105
    end
    determine_visible
    return unless @hp_bar.visible
    if @hp_bar.opacity != self.opacity
      @hp_bar.opacity = self.opacity
      @mp_bar.opacity = @hp_bar.opacity if DTP_HP::USE_MP_BAR
    end
    @hp_bar.bitmap.clear
    if !boss
      width = DTP_HP::BAR_WIDTH
      height = DTP_HP::BAR_HEIGHT
      bwidth = DTP_HP::BORDER_WIDTH
      bheight = DTP_HP::BORDER_HEIGHT
    else
      width = DTP_HP::BOSS_BAR_WIDTH
      height = DTP_HP::BOSS_BAR_HEIGHT
      bwidth = DTP_HP::BOSS_BORDER_WIDTH
      bheight = DTP_HP::BOSS_BORDER_HEIGHT
    end
    btotal = (bwidth + bheight) * 2
    rwidth = @hp_bar.bitmap.width
    rheight = @hp_bar.bitmap.height
    if !DTP_HP::CUSTOM_BAR && DTP_HP::USE_HP_BAR
      @hp_bar.bitmap.fill_rect(0,0,rwidth,rheight,DTP_HP::COLOR_BAR_BACK)
      @hp_bar.bitmap.fill_rect(bwidth,bheight,rwidth-bwidth*2,rheight-bheight*2,DTP_HP::COLOR_BORDER_2)
      @hp_bar.bitmap.fill_rect(bwidth*2,bheight*2,width,height,DTP_HP::COLOR_BORDER_1)
    end
    hp_width = @battler.hp_rate * width
    if DTP_HP::USE_HP_BAR
      @hp_bar.bitmap.gradient_fill_rect(bwidth*2,bheight*2,hp_width,height,DTP_HP::COLOR_BAR_1,DTP_HP::COLOR_BAR_2)
    end
    if DTP_HP::CUSTOM_BAR && DTP_HP::USE_HP_BAR
      border_bitmap = Bitmap.new("Graphics/System/Custom_HP.png")
      rect = Rect.new(0,0,border_bitmap.width,border_bitmap.height)
      @hp_bar.bitmap.blt(0,0,border_bitmap,rect)
    end
    if DTP_HP::USE_MP_BAR
      @mp_bar.bitmap.clear
      if !DTP_HP::CUSTOM_BAR
        @mp_bar.bitmap.fill_rect(0,0,rwidth,rheight,DTP_HP::COLOR_BAR_BACK)
        @mp_bar.bitmap.fill_rect(bwidth,bheight,rwidth-bwidth*2,rheight-bheight*2,DTP_HP::COLOR_BORDER_2)
        @mp_bar.bitmap.fill_rect(bwidth*2,bheight*2,width,height,DTP_HP::COLOR_BORDER_1)
      end
      mp_width = @battler.mp_rate * width
      @mp_bar.bitmap.gradient_fill_rect(bwidth*2,bheight*2,mp_width,height,DTP_HP::MP_COLOR_BAR_1,DTP_HP::MP_COLOR_BAR_2)
      if DTP_HP::CUSTOM_BAR
        border_bitmap = Bitmap.new("Graphics/System/Custom_HP.png")
        rect = Rect.new(0,0,border_bitmap.width,border_bitmap.height)
        @mp_bar.bitmap.blt(0,0,border_bitmap,rect)
      end
    end
    return unless DTP_HP::USE_TEXT
    @text_display.opacity = @hp_bar.opacity if @text_display.opacity != @hp_bar.opacity
    @text_display.bitmap.clear
    text = DTP_HP::TEXT_DISPLAY.clone
    text = DTP_HP::BOSS_TEXT.clone if DTP_HP::BOSS_MONSTERS.include?(@battler.enemy_id)
    text.gsub!(/chp/) {@battler.hp}
    text.gsub!(/mhp/) {@battler.mhp}
    text.gsub!(/php/) {(@battler.hp_rate * 100).to_i}
    @text_display.bitmap.draw_text(0,0,100,@text_display.height,text)
  end
  def setup_bar
    boss = DTP_HP::BOSS_MONSTERS.include?(@battler.enemy_id)
    @hp_bar = Sprite_Base.new(self.viewport)
    if !boss
      width = DTP_HP::BAR_WIDTH + DTP_HP::BORDER_WIDTH * 4
      height = DTP_HP::BAR_HEIGHT + DTP_HP::BORDER_HEIGHT * 4
    else
      width = DTP_HP::BOSS_BAR_WIDTH + DTP_HP::BOSS_BORDER_WIDTH * 4
      height = DTP_HP::BOSS_BAR_HEIGHT + DTP_HP::BOSS_BORDER_HEIGHT * 4
    end
    @hp_bar.bitmap = Bitmap.new(width,height)
    @hp_bar.x = self.x - @hp_bar.width / 2 + DTP_HP::BAR_OFFSET_X
    @hp_bar.y = self.y + DTP_HP::BAR_OFFSET_Y - self.bitmap.height - @hp_bar.height
    @hp_bar.y = self.y + DTP_HP::BAR_OFFSET_Y unless DTP_HP::ABOVE_MONSTER
    @hp_bar.x = 0 if @hp_bar.x < 0
    @hp_bar.y = 0 if @hp_bar.y < 0
    @hp_bar.z = 104
    if DTP_HP::USE_MP_BAR
      @mp_bar = Sprite_Base.new(self.viewport)
      @mp_bar.bitmap = Bitmap.new(@hp_bar.width,@hp_bar.height)
      @mp_bar.x = @hp_bar.x + 6
      @mp_bar.y = @hp_bar.y + @mp_bar.height - 3
      @mp_bar.z = 103
    end
  end
  def determine_visible
    if !@battler.alive?
      @hp_bar.visible = false
      @mp_bar.visible = false if @mp_bar
      @text_display.visible = false
      if DTP_HP::SCAN_ONCE and DTP_HP::SCAN_STATE == 1
        $game_party.monster_scans[@battler.enemy_id] = true
      end
      return if !@battler.alive?
    end
    @hp_bar.visible = true
    if DTP_HP::SCAN_STATE != 0
      @hp_bar.visible = false
      @hp_bar.visible = true if @battler.state?(DTP_HP::SCAN_STATE)
      if DTP_HP::SCAN_ONCE
        @hp_bar.visible = true if $game_party.monster_scans[@battler.enemy_id] == true
        $game_party.monster_scans[@battler.enemy_id] = true if @hp_bar.visible
      end
    end
    if !DTP_HP::SPECIFIC_ACTOR.empty?
      @hp_bar.visible = false unless DTP_HP::SCAN_STATE != 0
      DTP_HP::SPECIFIC_ACTOR.each do |i|
        next unless $game_party.battle_members.include?($game_actors[i])
        @hp_bar.visible = true
      end
    end
    if DTP_HP::ONLY_ON_TARGET
      return unless SceneManager.scene.is_a?(Scene_Battle)
      return unless SceneManager.scene.enemy_window
      @hp_bar.visible = SceneManager.scene.target_window_index == @battler.index
      @hp_bar.visible = false if !SceneManager.scene.enemy_window.active
    end
    @text_display.visible = false if !@hp_bar.visible
    @text_display.visible = true if @hp_bar.visible
    @mp_bar.visible = @hp_bar.visible if DTP_HP::USE_MP_BAR
  end
  def dispose
    @hp_bar.dispose if @hp_bar
    @mp_bar.dispose if @mp_bar
    @text_display.dispose if @text_display
    hpbar_dispose
  end
end
 
class Scene_Battle
  attr_reader  :enemy_window
  def target_window_index
    begin
    @enemy_window.enemy.index
    rescue
      return -1
    end
  end
end
 
class Game_Party
  alias hp_bar_init initialize
  attr_accessor  :monster_scans
  def initialize
    hp_bar_init
    @monster_scans = []
  end
end

97bb63820b54410b92e30dcc31e5c393.png

이 스크립트인데 몬스터의 체력을 수치로 표현하는 대신에 그 몬스터의 이름이 나타나게 하는 방법은 없나요? (진지합니다)

혹시 몰라서 첨부파일에 텍스트 파일로 올려드릴게요.

Comment '2'
  • profile
    러닝은빛 2014.12.09 17:55

    이 스크립트에서 draw_text 를 검색하면 나오는 코드에서 마지막 인자에 text 변수가 오는데 그거 대신 @battler.name 을 넣어주세요.

    @text_display.bitmap.draw_text(0,0,100,@text_display.height,@battler.name)

    이런식으로 고치면 됩니다.

  • ?
    작삼 2014.12.09 21:28
    감사합니다!
    덕분에 해결되었습니다^^

List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 13184
RPG VX ACE 데이터베이스 한글패치 관련 질문 올립니다 2 file KMOY 2014.12.15 1180
RMVXA XAS 같은거말고 메이플 시점에 턴제? 1인칭이아닌 액션턴제RPG http://cafe.naver.com/droos/7 참고용 1 Lin 2014.12.14 413
RMVXA 타일셋 질문 입니다. 2 file 네트 2014.12.14 389
RMVXA 통행 가능 설정 해놓아도 움직이지 못해요. 2 file 래피더 2014.12.14 277
RMVXA 광산 내부에서 탄광차를 이용해서 움직이고 싶은데 방법이 없습니까? 1 sien1029 2014.12.14 297
RMVXA 열심히 만들고 있었는데 이동이 안되네요 1 file 바라미 2014.12.13 218
RMVXA 게임만들고 있었는데 동영상 나올 부분에 팅기네요 5 바라미 2014.12.13 314
RMVXA 이동할 때마다 MP가 줄어들 게 할 수 없을까요? 3 독눈vs항해술 2014.12.12 243
RMVXA 커먼 이벤트로 스킬 발동 (xas) 5 file BeNew 2014.12.12 328
RMVXA 습작님의 EME 스크립트와 타 스크립트의 충돌. 4 file 냐냐 2014.12.12 364
RMVXA RPG Maker VX Ace로 만든 맵 이미지 추출 질문 1 대악당 2014.12.11 1354
RMVXA 턴제 RPG 관련 질문이요 ㅠ 1 작삼 2014.12.11 243
RMVXA 대화창에서 상반신으로 얼굴 그래픽을 대체하는 방법은 무엇인가요 3 Sarto 2014.12.10 1012
RMVXA 비행 스킬을 만들 수 있을까요? 3 독눈vs항해술 2014.12.10 284
기타 [RPG VX] 맵을 제작했는데 캐릭터 위치 X값, Y값을 어떻게 확인하는거죠?? 7 에담츠키 2014.12.10 562
RMVXA 몬스터의 체력 대신에 몬스터의 이름이 나오게 하는 방법은 없나요? (스크립트 관련) 2 file 작삼 2014.12.09 327
RMVXA 스위치 on/off 에 따라 출현하는 적 바꾸기. 2 사랑넥타이 2014.12.08 438
RM2k 쯔꾸르 2000 설치를 했습니다만 툴 실행방법을 모르겠습니다 ㅠ 2 file 시아논 2014.12.07 1195
RMVXA 적이 공격하는 이펙트가 화면 중앙에 뜨는 방법을 찾습니다! 자유기사 2014.12.07 328
RMVXA 계속 키 누름 방지 이벤트를 작성하는데 어려움이 있습니다 2 file appletree 2014.12.06 302
Board Pagination Prev 1 ... 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 ... 517 Next
/ 517