전투관련
2007.02.20 02:58

게이지 확인창 스크립트 (HP/SP/EXP)

조회 수 3540 추천 수 5 댓글 4
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
Extra Form


삽입 위치:「Window_Base 」아래에 새로운 줄을 넣으시고 삽입하세요.
주의점 :「RTAB 」(와)과 동시에 사용하는 경우,
            이 스크립트는 「RTAB 」보다 위에 배치하는 것.
  
개요 설명
 본대로 입니다.HP (이)나SP , 스테이터스 화면의EXP (을)를 게이지로 표시합니다.
 이 스크립트의 특징은, 현HP/ 최대HP 에 의해서, 게이지의 색이 바뀌는 것입니다.

개조 방법
 스크립트·소스의40 ~44 행목,54,55 행목,58 ~60 행목에 HP 의 게이지 표시에 대한 자세한 해설이 쓰여져 있습니다.
 또SP,EXP 에 대해서도와 같이 개조할 수 있습니다.

첨부한 파일 중 일어 원본도 있습니다. 확인하실 분은 확인하세요.
/////////////////////////////////////////////////////////////////////////////////////////////////////
이 아래부터 복사하시면됩니다. ^^


# HP/SP/EXP 게이지 표시 스크립트 Ver 1.00
# 배포원·서포트URL
# http://members.jcom.home.ne.jp/cogwheel/
# KOREA : NIOT - http://nioting.com

#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
#  액터를 취급하는 클래스입니다.이 클래스는 Game_Actors 클래스 ($game_actors)
# 의 내부에서 사용되어Game_Party 클래스 ($game_party) (으)로부터도 참조됩니다.
#==============================================================================

class Game_Actor < Game_Battler
  def now_exp
    return @exp - @exp_list[@level]
  end
  def next_exp
    return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
  end
end

#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
#  게임중의 모든 윈도우의 슈퍼 클래스입니다.
#==============================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # ● HP 게이지의 묘화
  #--------------------------------------------------------------------------
  # 오리지날의HP 묘화를 draw_actor_hp_hpsp (와)과 이름 변경
  alias :draw_actor_hp_hpsp :draw_actor_hp
  def draw_actor_hp(actor, x, y, width = 144)
    # 변수rate 에 현재의HP/MHP (을)를 대입
    if actor.maxhp != 0
      rate = actor.hp.to_f / actor.maxhp
    else
      rate = 0
    end
    # plus_x:X 좌표의 위치 보정 rate_x:X 좌표의 위치 보정(%) plus_y:Y 좌표의 위치 보정
    # plus_width: 폭의 보정 rate_width: 폭의 보정(%) height: 세로폭
    # align1: 묘화 타입1 0: 왼쪽 막혀라 1: centering 2: right justify
    # align2: 묘화 타입2 0: 카미츠메째 1: centering 2: 아래 막혀라
    # align3: 게이지 타입 0: 왼쪽 막혀라 1: right justify
    plus_x = 0
    rate_x = 0
    plus_y = 25
    plus_width = 0
    rate_width = 100
    height = 10
    align1 = 1
    align2 = 2
    align3 = 0
    # 그라데이션 설정 grade1: 하늘 게이지 grade2: 실게이지
    # (0: 옆에 그라데이션 1: 세로에 그라데이션 2: 비스듬하게 그라데이션( 격중) )
    grade1 = 1
    grade2 = 0
    # 색설정.color1: 외측선,color2: 중 범위
    # color3: 하늘 게이지 다크 칼라,color4: 하늘 게이지 라이트 칼라
    # color5: 실게이지 다크 칼라,color6: 실게이지 라이트 칼라
    color1 = Color.new(0, 0, 0, 192)
    color2 = Color.new(255, 255, 192, 192)
    color3 = Color.new(0, 0, 0, 192)
    color4 = Color.new(64, 0, 0, 192)
    color5 = Color.new(80 - 24 * rate, 80 * rate, 14 * rate, 192)
    color6 = Color.new(240 - 72 * rate, 240 * rate, 62 * rate, 192)
    # 변수sp 에 묘화 하는 게이지의 폭을 대입
    if actor.maxhp != 0
      hp = (width + plus_width) * actor.hp * rate_width / 100 / actor.maxhp
    else
      hp = 0
    end
    # 게이지의 묘화
    gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
                width, plus_width + width * rate_width / 100,
                height, hp, align1, align2, align3,
                color1, color2, color3, color4, color5, color6, grade1, grade2)
    # 오리지날의HP 묘화 처리를 호출해
    draw_actor_hp_hpsp(actor, x, y, width)
  end
  #--------------------------------------------------------------------------
  # ● SP 게이지의 묘화
  #--------------------------------------------------------------------------
  # 오리지날의SP 묘화를 draw_actor_sp_hpsp (와)과 이름 변경
  alias :draw_actor_sp_hpsp :draw_actor_sp
  def draw_actor_sp(actor, x, y, width = 144)
    # 변수rate 에 현재의SP/MSP (을)를 대입
    if actor.maxsp != 0
      rate = actor.sp.to_f / actor.maxsp
    else
      rate = 1
    end
    # plus_x:X 좌표의 위치 보정 rate_x:X 좌표의 위치 보정(%) plus_y:Y 좌표의 위치 보정
    # plus_width: 폭의 보정 rate_width: 폭의 보정(%) height: 세로폭
    # align1: 묘화 타입1 0: 왼쪽 막혀라 1: centering 2: right justify
    # align2: 묘화 타입2 0: 카미츠메째 1: centering 2: 아래 막혀라
    # align3: 게이지 타입 0: 왼쪽 막혀라 1: right justify
    plus_x = 0
    rate_x = 0
    plus_y = 25
    plus_width = 0
    rate_width = 100
    height = 10
    align1 = 1
    align2 = 2
    align3 = 0
    # 그라데이션 설정 grade1: 하늘 게이지 grade2: 실게이지
    # (0: 옆에 그라데이션 1: 세로에 그라데이션 2: 비스듬하게 그라데이션( 격중) )
    grade1 = 1
    grade2 = 0
    # 색설정.color1: 외측선,color2: 중 범위
    # color3: 하늘 게이지 다크 칼라,color4: 하늘 게이지 라이트 칼라
    # color5: 실게이지 다크 칼라,color6: 실게이지 라이트 칼라
    color1 = Color.new(0, 0, 0, 192)
    color2 = Color.new(255, 255, 192, 192)
    color3 = Color.new(0, 0, 0, 192)
    color4 = Color.new(0, 64, 0, 192)
    color5 = Color.new(14 * rate, 80 - 24 * rate, 80 * rate, 192)
    color6 = Color.new(62 * rate, 240 - 72 * rate, 240 * rate, 192)
    # 변수sp 에 묘화 하는 게이지의 폭을 대입
    if actor.maxsp != 0
      sp = (width + plus_width) * actor.sp * rate_width / 100 / actor.maxsp
    else
      sp = (width + plus_width) * rate_width / 100
    end
    # 게이지의 묘화
    gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
                width, plus_width + width * rate_width / 100,
                height, sp, align1, align2, align3,
                color1, color2, color3, color4, color5, color6, grade1, grade2)
    # 오리지날의SP 묘화 처리를 호출해
    draw_actor_sp_hpsp(actor, x, y, width)
  end
  #--------------------------------------------------------------------------
  # ● EXP 게이지의 묘화
  #--------------------------------------------------------------------------
  # 오리지날의EXP 묘화를 draw_actor_sp_hpsp (와)과 이름 변경
  alias :draw_actor_exp_hpsp :draw_actor_exp
  def draw_actor_exp(actor, x, y, width = 204)
    # 변수rate 에 현재의exp/nextexp (을)를 대입
    if actor.next_exp != 0
      rate = actor.now_exp.to_f / actor.next_exp
    else
      rate = 1
    end
    # plus_x:X 좌표의 위치 보정 rate_x:X 좌표의 위치 보정(%) plus_y:Y 좌표의 위치 보정
    # plus_width: 폭의 보정 rate_width: 폭의 보정(%) height: 세로폭
    # align1: 묘화 타입1 0: 왼쪽 막혀라 1: centering 2: right justify
    # align2: 묘화 타입2 0: 카미츠메째 1: centering 2: 아래 막혀라
    # align3: 게이지 타입 0: 왼쪽 막혀라 1: right justify
    plus_x = 0
    rate_x = 0
    plus_y = 25
    plus_width = 0
    rate_width = 100
    height = 10
    align1 = 1
    align2 = 2
    align3 = 0
    # 그라데이션 설정 grade1: 하늘 게이지 grade2: 실게이지
    # (0: 옆에 그라데이션 1: 세로에 그라데이션 2: 비스듬하게 그라데이션( 격중) )
    grade1 = 1
    grade2 = 0
    # 색설정.color1: 외측선,color2: 중 범위
    # color3: 하늘 게이지 다크 칼라,color4: 하늘 게이지 라이트 칼라
    # color5: 실게이지 다크 칼라,color6: 실게이지 라이트 칼라
    color1 = Color.new(0, 0, 0, 192)
    color2 = Color.new(255, 255, 192, 192)
    color3 = Color.new(0, 0, 0, 192)
    color4 = Color.new(64, 0, 0, 192)
    color5 = Color.new(80 * rate, 80 - 80 * rate ** 2, 80 - 80 * rate, 192)
    color6 = Color.new(240 * rate, 240 - 240 * rate ** 2, 240 - 240 * rate, 192)
    # 변수exp 에 묘화 하는 게이지의 폭을 대입
    if actor.next_exp != 0
      exp = (width + plus_width) * actor.now_exp * rate_width /
                                                          100 / actor.next_exp
    else
      exp = (width + plus_width) * rate_width / 100
    end
    # 게이지의 묘화
    gauge_rect(x + plus_x + width * rate_x / 100, y + plus_y,
                width, plus_width + width * rate_width / 100,
                height, exp, align1, align2, align3,
                color1, color2, color3, color4, color5, color6, grade1, grade2)
    # 오리지날의EXP 묘화 처리를 호출해
    draw_actor_exp_hpsp(actor, x, y)
  end
  #--------------------------------------------------------------------------
  # ● 게이지의 묘화
  #--------------------------------------------------------------------------
  def gauge_rect(x, y, rect_width, width, height, gauge, align1, align2, align3,
                color1, color2, color3, color4, color5, color6, grade1, grade2)
    case align1
    when 1
      x += (rect_width - width) / 2
    when 2
      x += rect_width - width
    end
    case align2
    when 1
      y -= height / 2
    when 2
      y -= height
    end
    # 테두리 묘화
    self.contents.fill_rect(x, y, width, height, color1)
    self.contents.fill_rect(x + 1, y + 1, width - 2, height - 2, color2)
    if align3 == 0
      if grade1 == 2
        grade1 = 3
      end
      if grade2 == 2
        grade2 = 3
      end
    end
    if (align3 == 1 and grade1 == 0) or grade1 > 0
      color = color3
      color3 = color4
      color4 = color
    end
    if (align3 == 1 and grade2 == 0) or grade2 > 0
      color = color5
      color5 = color6
      color6 = color
    end
    # 하늘 게이지의 묘화
    self.contents.gradation_rect(x + 2, y + 2, width - 4, height - 4,
                                  color3, color4, grade1)
    if align3 == 1
      x += width - gauge
    end
    # 실게이지의 묘화
    self.contents.gradation_rect(x + 2, y + 2, gauge - 4, height - 4,
                                  color5, color6, grade2)
  end
end

#------------------------------------------------------------------------------
#  Bitmap 클래스에 새로운 기능을 추가합니다.
#==============================================================================

class Bitmap
  #--------------------------------------------------------------------------
  # ● 구형을 그라데이션 표시
  #     color1 : 스타트 칼라
  #     color2 : 엔드 칼라
  #     align  :  0: 옆에 그라데이션
  #               1: 세로에 그라데이션
  #               2: 비스듬하게 그라데이션(격중에 대해 주의)
  #--------------------------------------------------------------------------
  def gradation_rect(x, y, width, height, color1, color2, align = 0)
    if align == 0
      for i in x...x + width
        red   = color1.red + (color2.red - color1.red) * (i - x) / (width - 1)
        green = color1.green +
                (color2.green - color1.green) * (i - x) / (width - 1)
        blue  = color1.blue +
                (color2.blue - color1.blue) * (i - x) / (width - 1)
        alpha = color1.alpha +
                (color2.alpha - color1.alpha) * (i - x) / (width - 1)
        color = Color.new(red, green, blue, alpha)
        fill_rect(i, y, 1, height, color)
      end
    elsif align == 1
      for i in y...y + height
        red   = color1.red +
                (color2.red - color1.red) * (i - y) / (height - 1)
        green = color1.green +
                (color2.green - color1.green) * (i - y) / (height - 1)
        blue  = color1.blue +
                (color2.blue - color1.blue) * (i - y) / (height - 1)
        alpha = color1.alpha +
                (color2.alpha - color1.alpha) * (i - y) / (height - 1)
        color = Color.new(red, green, blue, alpha)
        fill_rect(x, i, width, 1, color)
      end
    elsif align == 2
      for i in x...x + width
        for j in y...y + height
          red   = color1.red + (color2.red - color1.red) *
                  ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          green = color1.green + (color2.green - color1.green) *
                  ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          blue  = color1.blue + (color2.blue - color1.blue) *
                  ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          alpha = color1.alpha + (color2.alpha - color1.alpha) *
                  ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          color = Color.new(red, green, blue, alpha)
          set_pixel(i, j, color)
        end
      end
    elsif align == 3
      for i in x...x + width
        for j in y...y + height
          red   = color1.red + (color2.red - color1.red) *
                ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          green = color1.green + (color2.green - color1.green) *
                ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          blue  = color1.blue + (color2.blue - color1.blue) *
                ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          alpha = color1.alpha + (color2.alpha - color1.alpha) *
                ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
          color = Color.new(red, green, blue, alpha)
          set_pixel(i, j, color)
        end
      end
    end
  end
end

#==============================================================================
# ■ Sprite 모듈
#------------------------------------------------------------------------------
#  애니메이션의 관리를 실시하는 모듈입니다.
#==============================================================================

module RPG
  class Sprite < ::Sprite
    def damage(value, critical)
      dispose_damage
      if value.is_a?(Numeric)
        damage_string = value.abs.to_s
      else
        damage_string = value.to_s
      end
      bitmap = Bitmap.new(160, 48)
      bitmap.font.name = "Arial Black"
      bitmap.font.size = 32
      bitmap.font.color.set(0, 0, 0)
      bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
      bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
      bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
      bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
      if value.is_a?(Numeric) and value < 0
        bitmap.font.color.set(176, 255, 144)
      else
        bitmap.font.color.set(255, 255, 255)
      end
      bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
      if critical
        bitmap.font.size = 20
        bitmap.font.color.set(0, 0, 0)
        bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
        bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
        bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
        bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
        bitmap.font.color.set(255, 255, 255)
        bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
      end
      @_damage_sprite = ::Sprite.new
      @_damage_sprite.bitmap = bitmap
      @_damage_sprite.ox = 80 + self.viewport.ox
      @_damage_sprite.oy = 20 + self.viewport.oy
      @_damage_sprite.x = self.x + self.viewport.rect.x
      @_damage_sprite.y = self.y - self.oy / 2 + self.viewport.rect.y
      @_damage_sprite.z = 3000
      @_damage_duration = 40
    end
    def animation(animation, hit)
      dispose_animation
      @_animation = animation
      return if @_animation == nil
      @_animation_hit = hit
      @_animation_duration = @_animation.frame_max
      animation_name = @_animation.animation_name
      animation_hue = @_animation.animation_hue
      bitmap = RPG::Cache.animation(animation_name, animation_hue)
      if @@_reference_count.include?(bitmap)
        @@_reference_count[bitmap] += 1
      else
        @@_reference_count[bitmap] = 1
      end
      @_animation_sprites = []
      if @_animation.position != 3 or not @@_animations.include?(animation)
        for i in 0..15
          sprite = ::Sprite.new
          sprite.bitmap = bitmap
          sprite.visible = false
          @_animation_sprites.push(sprite)
        end
        unless @@_animations.include?(animation)
          @@_animations.push(animation)
        end
      end
      update_animation
    end
    def loop_animation(animation)
      return if animation == @_loop_animation
      dispose_loop_animation
      @_loop_animation = animation
      return if @_loop_animation == nil
      @_loop_animation_index = 0
      animation_name = @_loop_animation.animation_name
      animation_hue = @_loop_animation.animation_hue
      bitmap = RPG::Cache.animation(animation_name, animation_hue)
      if @@_reference_count.include?(bitmap)
        @@_reference_count[bitmap] += 1
      else
        @@_reference_count[bitmap] = 1
      end
      @_loop_animation_sprites = []
      for i in 0..15
        sprite = ::Sprite.new
        sprite.bitmap = bitmap
        sprite.visible = false
        @_loop_animation_sprites.push(sprite)
      end
      update_loop_animation
    end
    def animation_set_sprites(sprites, cell_data, position)
      for i in 0..15
        sprite = sprites[i]
        pattern = cell_data[i, 0]
        if sprite == nil or pattern == nil or pattern == -1
          sprite.visible = false if sprite != nil
          next
        end
        sprite.visible = true
        sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
        if position == 3
          if self.viewport != nil
            sprite.x = self.viewport.rect.width / 2
            sprite.y = self.viewport.rect.height - 160
          else
            sprite.x = 320
            sprite.y = 240
          end
        else
          sprite.x = self.x + self.viewport.rect.x -
                      self.ox + self.src_rect.width / 2
          sprite.y = self.y + self.viewport.rect.y -
                      self.oy + self.src_rect.height / 2
          sprite.y -= self.src_rect.height / 4 if position == 0
          sprite.y += self.src_rect.height / 4 if position == 2
        end
        sprite.x += cell_data[i, 1]
        sprite.y += cell_data[i, 2]
        sprite.z = 2000
        sprite.ox = 96
        sprite.oy = 96
        sprite.zoom_x = cell_data[i, 3] / 100.0
        sprite.zoom_y = cell_data[i, 3] / 100.0
        sprite.angle = cell_data[i, 4]
        sprite.mirror = (cell_data[i, 5] == 1)
        sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
        sprite.blend_type = cell_data[i, 7]
      end
    end
  end
end

  

  1. 일본어 스크립트를 번역하기 좋은 번역사이트 두곳입니다

    Date2010.01.09 Category공지사항 Byruby Views22088 Votes0
    read more
  2. 스크립트 게시판 관리자' ruby ' 입니다

    Date2010.01.09 Category공지사항 Byruby Views20728 Votes0
    read more
  3. 일본 스크립트/소스 공유 포럼

    Date2010.01.05 Category공지사항 By니오티 Views22259 Votes0
    read more
  4. 누구나 쉽게 만드는 액션알피지

    Date2012.11.25 Category전투관련 By펜릴 Views4374 Votes0
    Read More
  5. 초간단 XAS 오리지널.

    Date2011.08.04 Category전투관련 By호호리터엉 Views2621 Votes0
    Read More
  6. ZTBS

    Date2010.06.05 Category전투관련 By강현문 Views3566 Votes0
    Read More
  7. 턴제 전투방식 스크립트!!!!!!!

    Date2010.04.30 Category전투관련 ByXP 팬 Views3330 Votes0
    Read More
  8. 간단한 액션알피지용 스크립트 Ver.1.01 (게임오버 추가)

    Date2010.04.11 Category전투관련 By펜릴 Views8763 Votes0
    Read More
  9. ABP 액알 예제

    Date2010.02.10 Category전투관련 Byruby Views3531 Votes1
    Read More
  10. 어떤 한 몬스터를 공격지정할때 그 몬스터가 줌되는 스크립트

    Date2010.01.13 Category전투관련 Bywindshy Views2183 Votes0
    Read More
  11. 리얼타임을 이용한 딜레이 구현

    Date2010.01.10 Category전투관련 By펜릴 Views4197 Votes0
    Read More
  12. 레벨업시 체력 회복 스크립트

    Date2010.01.05 Category전투관련 By루시아스 Views2113 Votes0
    Read More
  13. 파괴효과 스크립트 이벤트적용 <사용법>

    Date2007.12.06 Category전투관련 By아하하 Views2691 Votes3
    Read More
  14. 파괴효과 추천스크립트

    Date2007.12.06 Category전투관련 By아하하 Views3588 Votes1
    Read More
  15. 콤보 스크립트

    Date2007.12.05 Category전투관련 By아하하 Views3700 Votes4
    Read More
  16. 턴알 게이지바 변경 스크립트 (HP/SP)

    Date2007.02.20 Category전투관련 By니오티 Views3984 Votes2
    Read More
  17. 게이지 확인창 스크립트 (HP/SP/EXP)

    Date2007.02.20 Category전투관련 By니오티 Views3540 Votes5
    Read More
Board Pagination Prev 1 Next
/ 1

Copyright ⓒ Nioting All Rights Reserved. (since 1999)    개인정보
        

Fatal error: Cannot access property sessionController::$lifetime in /web/old/xe/modules/session/session.controller.php on line 45