질문과 답변

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 12471
스크립트 추천 RMVXA 미니게임을 하는동안 위에 점수판을 띄워주고싶은데 방법이 없을까요? 홍홍이1 2024.02.07 15
에러 해결 RMMV bgm파일이 뜨지를 않아요 1 초본 2024.01.10 16
이벤트 작성 RMVXA 스위치가 꺼질 경우 이미지를 끄게 하고 싶습니다. 1 Payroy 2024.01.05 18
이벤트 작성 RMMV 보트가 움직여지지 않습니다. 3 file pokapoka 2024.02.19 18
맵배치 RMXP 맵칩 버그 ssplokks 2023.10.20 19
액션 전투 RMMV 메인 메뉴 혹은, 현재 메뉴 화면을 새로고침 할 수 있는 방법이 궁급합니다. 니노미야 2023.11.20 19
기본툴 사용법 RMVXA 특정 맵에서 플레이어가 움직이지 않습니다. 유_ 2023.12.25 21
기타 RMMV 색조변경이 적용되지 않는 이벤트 무명시절 2023.01.08 21
스크립트 사용 RMVXA 전투 개시시 상태 부여 스크립트 질문 AAAA. 2023.11.14 21
기본툴 사용법 RMMV 분명히 배경음악 m4a+ogg 파일 둘 다 넣었는데 게임 툴에서 인식을 못합니다 파트로클로스 2023.12.08 22
에러 해결 RMXP BGM을 발견못하는 오류 file wombat 2024.01.31 22
이벤트 작성 RMVXA 대화 중 이벤트 멈춤 해결 방안 질문 1 이름뭐하지 2024.05.19 23
기타 RMMV 플레이어가 팔로어를 바라보고 있다라는 스크립트를 찾고 있습니다 무명시절 2024.01.04 24
기타 기타 RPG 95 튕김 현상 해결방법 인큐버스 2023.01.20 24
기타 RMVXA 대사 글꼴 바꾸는법좀 알려주세요 ㅠ 극세사이불 2024.02.26 24
게임 배포 RMMZ 여러분들 게임 파일 단일화 어떤 프로그램으로 하시나요? 하라아아암 2023.11.22 24
이벤트 작성 RMMV 아이템 소지개수 별 이벤트 작성하기 1 송실용 2023.12.19 25
퀘스트 작성 RMVXA 연타 이벤트가 안 작동되어요... 1 file tokki 2023.12.24 25
에러 해결 RMVXA rgss301파일이 복사 붙여넣기가 안됩니다 다크크리에이터 2023.11.16 26
한글 패치 RM2k RM2k의 스팀 한글패치 다크크리에이터 2024.01.27 26
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 517 Next
/ 517