VX 스크립트







module LevelUpDisplayConfig
#--------------------------------------------------------------------------
# * General Configuration Options
#--------------------------------------------------------------------------
  #The windowskin file name, minus the extension
  WINDOWSKIN_NAME = 'Window'
  #The sound effect name that is played when the window is displayed
  LEVEL_UP_SE = 'Recovery'
  #The sound effect volume
  LEVEL_UP_SE_VOLUME = 80
  #Display the skill window?
  USE_SKILL_WINDOW = true
  #The title text used in the "New Skills" window (if not nil) 
  #For example, NEW_SKILL_TITLE_TEXT = 'Abilities'
  NEW_SKILL_TITLE_TEXT = nil
  #Show the actor's sprite?
  USE_SPRITE_GRAPHIC = true
  #Opacity of the main window
  WINDOW_OPACITY = 255 
#--------------------------------------------------------------------------
# * Stat Window Configuration
#--------------------------------------------------------------------------
  #The color of the actor's name in the window (gold by default)
  NAME_COLOR = Color.new(255,235,0)
  #The color of the actor's level in the window (gold by default)
  LEVEL_COLOR = Color.new(255,235,0)
  #The color of the actor's stat names in the window (gold by default)
  STAT_COLOR = Color.new(255,235,0)
  #The color of the actor's old stat values (white by default)
  OLD_STAT_COLOR = Color.new(255,255,255)
  #The color of the actor's new stat values, if a net gain (green by default)
  NEW_STAT_VAL_COLOR = Color.new(0,250,154)
  #The color of the actor's new stat values, if a net loss (red by default)
  STAT_VAL_LOSS_COLOR = Color.new(255, 0, 0)
#--------------------------------------------------------------------------
# * Skill Window Configuration
#--------------------------------------------------------------------------
  #The color of the text in the skills title window
  SKILL_TITLE_COLOR = Color.new(255,215,0)
  #The color of the new skills text in the skills window
  SKILL_WINDOW_FONT_COLOR = Color.new(240,248,255)
#--------------------------------------------------------------------------
#  * There is no need to modify the constants below
#--------------------------------------------------------------------------
STAT_WINDOW_WIDTH = 320
SKILL_WINDOW_WIDTH = 165
WINDOW_HEIGHT = 220
SUB_WINDOW_HEIGHT = 45

end
#==========================================================================
# * Game_Actor
#--------------------------------------------------------------------------
#   overrides -
#     * display_level_up (if DISPLAY_DEF_MESSAGE is set to false in config)
#==========================================================================
include LevelUpDisplayConfig
class Game_Actor < Game_Battler
 
  attr_reader :last_level
  attr_reader :last_hp
  attr_reader :last_mp
  attr_reader :last_atk
  attr_reader :last_def
  attr_reader :last_spi
  attr_reader :last_agi
  attr_reader :last_learned_skills
  #--------------------------------------------------------------------------
  # * Change Experience
  #     exp  : New experience
  #     show : Level up display flag
  #--------------------------------------------------------------------------
  alias :eds_old_change_exp :change_exp
  def change_exp(exp, show)
    #save off the old paramters   
    prev_skills = skills   
    @last_level = @level
    @last_hp = self.base_maxhp
    @last_mp = self.base_maxmp
    @last_atk = self.base_atk
    @last_def = self.base_def
    @last_spi = self.base_spi
    @last_agi = self.base_agi
    eds_old_change_exp(exp, show)
    @last_learned_skills =  skills - prev_skills
  end
 
  if USE_SKILL_WINDOW
   
    #--------------------------------------------------------------------------
    # * Show Level Up Message
    #     new_skills : Array of newly learned skills
    #--------------------------------------------------------------------------
    #   If we are not displaying the standard message when
    #   gaining a level, simply remove the loop that creates
    #   the learned skills message.  Continue to display
    #   the skills that were learned if we are not in battle.
    #--------------------------------------------------------------------------
    alias :eds_old_display_level_up :display_level_up
    def display_level_up(new_skills)
      if $game_temp.in_battle
        $game_message.new_page
        text = sprintf(Vocab::LevelUp, @name, Vocab::level, @level)
        $game_message.texts.push(text)   
      else
        eds_old_display_level_up(new_skills)
      end
    end
   
  end #skill window check
 
end
#==========================================================================
# * Window_LevelUpdate
#--------------------------------------------------------------------------
#   The main window that appears in battle when a level is gained.
#   Displays stat info, faceset, and (optionally) the actor sprite.
#==========================================================================
class Window_LevelUpdate < Window_Base
 
  def initialize(actor)
    w = STAT_WINDOW_WIDTH
    h = WINDOW_HEIGHT
    if USE_SKILL_WINDOW
      super(272 - (w / 2) - (SKILL_WINDOW_WIDTH / 2), 50, w, h)
    else
      super(272 - (w / 2), 50, w, h)
    end
    self.windowskin = Cache.system(WINDOWSKIN_NAME)
    self.back_opacity = WINDOW_OPACITY
    self.z = 9997
    @actor = actor
    @animation_index = 0
    @arrow = Cache.picture('level_up_arrow')   
    @y_offset = 12  #give some room under level display
    #begin drawing new level and old stat text
    @col_one_offset = 0
    #Draw old stats
    @col_two_offset = @col_one_offset + 60   
    #begin drawing Faceset/sprite and skills gained
    @col_four_offset = 0
    #begin drawing Faceset/sprite graphics
    @col_five_offset = 190
    #play the sound effect
    RPG::SE.new(LEVEL_UP_SE, LEVEL_UP_SE_VOLUME).play
    #calculates the offet for drawing level info
    calc_level_offsets         
    setup_name_window
    draw_stat_names
    draw_old_stat_values 
    draw_arrows     
    draw_new_stat_values
    draw_actor_rep
    update   
  end
  #--------------------------------------------------------------------------
  # * Create and display the name window
  #--------------------------------------------------------------------------
  def setup_name_window
    @name_window = Window_Base.new(self.x + 20, self.y - 30 , fit_to_text(@actor.name), SUB_WINDOW_HEIGHT)
    @name_window.z = 9998
    @name_window.windowskin = Cache.system(WINDOWSKIN_NAME)
    @name_window.back_opacity = 255
    @name_sprite = Sprite.new
    @name_sprite.bitmap = Bitmap.new(@name_window.width, @name_window.height)
    @name_sprite.bitmap.font.color = NAME_COLOR
    @name_sprite.x = @name_window.x + 15
    @name_sprite.y = @name_window.y - 10
    @name_sprite.z = 9999
    @name_sprite.bitmap.draw_text(0, 0, @name_sprite.bitmap.width, 60, @actor.name)
  end
  #--------------------------------------------------------------------------
  # * Draws the level and stat text (not the values themselves)
  #--------------------------------------------------------------------------
  def draw_stat_names   
    self.contents.font.color = LEVEL_COLOR
    self.contents.draw_text(@col_one_offset, 0, 60, WLH, "Lv.")
    self.contents.font.color = STAT_COLOR                                             
    self.contents.draw_text(@col_one_offset, y_incr, 60, WLH, Vocab.hp)   
    self.contents.draw_text(@col_one_offset, y_incr, 60, WLH, Vocab.mp)
    self.contents.draw_text(@col_one_offset, y_incr, 60, WLH, Vocab.atk)
    self.contents.draw_text(@col_one_offset, y_incr, 60, WLH, Vocab.def)
    self.contents.draw_text(@col_one_offset, y_incr, 60, WLH, Vocab.spi)
    self.contents.draw_text(@col_one_offset, y_incr, 60, WLH, Vocab.agi)
    #reset the font color
    self.contents.font.color = Font.default_color 
    #reset the y_offset to 12
    y_incr_reset
  end
  #--------------------------------------------------------------------------
  # * Draws the old level and stat values
  #--------------------------------------------------------------------------
  def draw_old_stat_values
    self.contents.font.color = OLD_STAT_COLOR
    self.contents.draw_text(@col_level_old_offset, 0, 60, WLH, @actor.last_level)
    self.contents.draw_text(@col_two_offset, y_incr, 60, WLH, @actor.last_hp)
    self.contents.draw_text(@col_two_offset, y_incr, 60, WLH, @actor.last_mp)
    self.contents.draw_text(@col_two_offset, y_incr, 60, WLH, @actor.last_atk)
    self.contents.draw_text(@col_two_offset, y_incr, 60, WLH, @actor.last_def)
    self.contents.draw_text(@col_two_offset, y_incr, 60, WLH, @actor.last_spi)
    self.contents.draw_text(@col_two_offset, y_incr, 60, WLH, @actor.last_agi)
    #reset the font color
    self.contents.font.color = Font.default_color
    #reset the y_offset to 12
    y_incr_reset
  end
  #--------------------------------------------------------------------------
  # * Draws the arrows
  #--------------------------------------------------------------------------
  def draw_arrows
    if @actor.last_hp - 100 < 0
      @col_three_offset = @col_two_offset + 30   
    elsif @actor.last_hp - 1000 < 0
      @col_three_offset = @col_two_offset + 40
    else
      @col_three_offset = @col_two_offset + 50
    end   
    draw_arrow(@col_level_arrow_offset, 6)     #level
    draw_arrow(@col_three_offset, y_incr + 6)  #hp
    draw_arrow(@col_three_offset, y_incr + 6)  #mp
    draw_arrow(@col_three_offset, y_incr + 6)  #atk
    draw_arrow(@col_three_offset, y_incr + 6)  #def
    draw_arrow(@col_three_offset, y_incr + 6)  #spi
    draw_arrow(@col_three_offset, y_incr + 6)  #agi
    calc_col_four_offset(@col_three_offset)
    #reset the y_offset to 12
    y_incr_reset
  end
  #--------------------------------------------------------------------------
  # * Draws the new level and stat values
  #--------------------------------------------------------------------------
  def draw_new_stat_values     
    draw_new_stat(@col_level_new_offset, 0, 60, WLH, @actor.last_level, @actor.level)   
    draw_new_stat(@col_four_offset, y_incr, 60, WLH, @actor.last_hp, @actor.maxhp)
    draw_new_stat(@col_four_offset, y_incr, 60, WLH, @actor.last_mp, @actor.maxmp)
    draw_new_stat(@col_four_offset, y_incr, 60, WLH, @actor.last_atk, @actor.base_atk)
    draw_new_stat(@col_four_offset, y_incr, 60, WLH, @actor.last_def, @actor.base_def)
    draw_new_stat(@col_four_offset, y_incr, 60, WLH, @actor.last_spi, @actor.base_spi)
    draw_new_stat(@col_four_offset, y_incr, 60, WLH, @actor.last_agi, @actor.base_agi)
    self.contents.font.color = Font.default_color 
    #reset the y_offset to 12
    y_incr_reset
  end
 
  def draw_new_stat(x, y, w, h, prev_val, val)
    if val > prev_val      #gain
      self.contents.font.color = NEW_STAT_VAL_COLOR
    elsif val == prev_val  #no change
      self.contents.font.color = OLD_STAT_COLOR
    else                   #loss
      self.contents.font.color = STAT_VAL_LOSS_COLOR
    end   
    self.contents.draw_text(x, y, w, h, val)   
  end
  #--------------------------------------------------------------------------
  # * Draws the faceset and optionally the actor sprite
  #--------------------------------------------------------------------------
  def draw_actor_rep
    draw_actor_face(@actor, @col_five_offset, 0)
    if (USE_SPRITE_GRAPHIC)
      x_pos = @col_five_offset + ((self.width - @col_five_offset) / 2) - 18
      draw_character(@actor.character_name, @actor.character_index, x_pos, 160)
    end
  end
  #--------------------------------------------------------------------------
  # * Draws an arrow
  #--------------------------------------------------------------------------
  def draw_arrow(x, y)
    src_rect = Rect.new(0, 0, @arrow.width, @arrow.height)
    self.contents.blt(x, y, @arrow, src_rect)
  end
  #--------------------------------------------------------------------------
  # * figures out the spacing for the level text display
  #--------------------------------------------------------------------------
  def calc_level_offsets
    @col_level_old_offset = @col_one_offset + 30   
    if @actor.last_level < 10
      @col_level_arrow_offset = @col_level_old_offset + 20
    else
      @col_level_arrow_offset = @col_level_old_offset + 30
    end   
    @col_level_new_offset = @col_level_arrow_offset + 26
  end
  #--------------------------------------------------------------------------
  # * Increments the y counter
  #--------------------------------------------------------------------------
  def y_incr
    @y_offset += WLH
    return @y_offset
  end
  #--------------------------------------------------------------------------
  # * Resets the y counter
  #--------------------------------------------------------------------------
  def y_incr_reset
    @y_offset = 12
  end
  #--------------------------------------------------------------------------
  # * calculate where to draw col four text (new stat values)
  #--------------------------------------------------------------------------
  def calc_col_four_offset(col_three) 
    @col_four_offset = col_three + 22
  end
  #--------------------------------------------------------------------------
  # * Fit the window width to the text
  #--------------------------------------------------------------------------
  def fit_to_text(text)
    w = self.contents.text_size(text).width + 32
    return w > 90 ? w : 90
  end
  #--------------------------------------------------------------------------
  # * Update the child window position
  #--------------------------------------------------------------------------
  def update_child_window_pos
    @name_window.x = self.x + 20
    @name_window.y = self.y - 30 
    @name_sprite.x = @name_window.x + 15
    @name_sprite.y = @name_window.y - 10 
  end
  #--------------------------------------------------------------------------
  # * Destroy the sprite!
  #--------------------------------------------------------------------------
  def dispose
    super
    @name_window.dispose
    @name_sprite.dispose
  end
 
end
#============================================================================
# * Window_SkillUpdate
#----------------------------------------------------------------------------
#   The learned skill window
#============================================================================
class Window_SkillUpdate < Window_Base
 
  def initialize(actor, parent_x, parent_y, parent_width)
    x = parent_x + parent_width
    h = WINDOW_HEIGHT
    w = SKILL_WINDOW_WIDTH
    super(x, parent_y, w, h)
    self.windowskin = Cache.system(WINDOWSKIN_NAME)
    self.back_opacity = WINDOW_OPACITY
    self.contents.font.color = SKILL_WINDOW_FONT_COLOR
    self.z = 9997
    @actor = actor
    @skills = []
    setup_title_window
    populate_skill_list
  end
  #--------------------------------------------------------------------------
  # * create the title window
  #--------------------------------------------------------------------------
  def setup_title_window
    #check to see if custom text is defined
    if NEW_SKILL_TITLE_TEXT == nil
      skill_title_text = sprintf("New %ss", Vocab.skill)
    else
      skill_title_text = NEW_SKILL_TITLE_TEXT
    end
    middle_parent = self.x + (self.width / 2)
    w = fit_to_text(skill_title_text)
    h = SUB_WINDOW_HEIGHT
    x = middle_parent - (w / 2)
    y = self.y - 30
    @title_window = Window_Base.new(x, y, w, h)   
    @title_window.z = 9998
    @title_window.windowskin = Cache.system(WINDOWSKIN_NAME)
    @title_window.back_opacity = 255
    @title_sprite = Sprite.new
    @title_sprite.bitmap = Bitmap.new(@title_window.width, @title_window.height)
    @title_sprite.bitmap.font.color = SKILL_TITLE_COLOR
    @title_sprite.x = @title_window.x + 15
    @title_sprite.y = @title_window.y + 4
    @title_sprite.z = 9999
    @title_sprite.bitmap.draw_text(0, 0, @title_sprite.bitmap.width, 32, skill_title_text)
  end
  #--------------------------------------------------------------------------
  # * My edit of draw_item_name.
  #   Necessary because the default one changes the font color.
  #--------------------------------------------------------------------------
  def draw_my_item_name(item, x, y, enabled = true)
     if item != nil
      draw_icon(item.icon_index, x, y, enabled)     
      self.contents.font.color.alpha = enabled ? 255 : 128
      self.contents.draw_text(x + 24, y, 172, WLH, item.name)
    end
  end
  #--------------------------------------------------------------------------
  # * draw all of the skills that were learned
  #--------------------------------------------------------------------------
  def populate_skill_list
    skills = @actor.last_learned_skills
    y = 0
    for skill in skills
      draw_my_item_name(skill, 0, y)
      y += 32
    end
  end
  #--------------------------------------------------------------------------
  # * Fit the window width to the text
  #--------------------------------------------------------------------------
  def fit_to_text(text)   
    return self.contents.text_size(text).width + 32
  end
  #--------------------------------------------------------------------------
  # * Kill the sprite!
  #--------------------------------------------------------------------------
  alias :eds_old_dispose :dispose
  def dispose   
    eds_old_dispose
    @title_window.dispose
    @title_sprite.dispose
  end
 
end
#============================================================================
# * Scene_Battle
#----------------------------------------------------------------------------
#   overrides -
#     * display_level_up
#============================================================================
class Scene_Battle < Scene_Base
 
  #--------------------------------------------------------------------------
  # * Display Level Up
  #--------------------------------------------------------------------------
  def display_level_up
    #patch for KGC Equip Learn Skill script
    if $imported != nil and $imported["EquipLearnSkill"]
      display_master_equipment_skill
    end
    exp = $game_troop.exp_total
    for actor in $game_party.existing_members
      last_level = actor.level
      last_skills = actor.skills
      actor.gain_exp(exp, true)     
      if actor.level > last_level
        win = Window_LevelUpdate.new(actor) 
        #if we are using the skill window and the skills have changed...
        if USE_SKILL_WINDOW && last_skills.length != actor.skills.length         
          s_win = Window_SkillUpdate.new(actor, win.x, win.y, win.width)       
          wait_for_message
          s_win.dispose if USE_SKILL_WINDOW
        else
          #move the window back to center screen and update the name window
          win.x = 272 - (win.width / 2)
          win.update_child_window_pos
          wait_for_message 
        end     
        win.dispose     
      end
    end
  end
 
end

Comment '23'

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5398
417 상점 상점의 자세한 표시 32 file RPGbooster 2008.10.11 4008
416 온라인 VX Pheonix 2.0 한글 번역 버전 16 미니 2010.04.18 4002
415 2 Players Engine 2인용하기 15 file RPGbooster 2008.10.08 3999
414 파티 파티원이 따라다니는 스크립트 11 file 놀러 2011.09.15 3988
413 아이템 아이템 믹서 21 file 미양 2010.07.02 3983
412 기타 화면 해상도(640 X 480) 스크립트 6 file 쿠쿠밥솥 2012.01.10 3972
411 기타 vx 보안 시스템 19 file 허걱 2009.07.29 3966
410 상점 YERD - 커먼이벤트 샵 12 file 훈덕 2009.11.08 3961
409 메뉴 커서 모양 바꾸는 스크립트 16 아방스 2009.01.20 3958
408 메시지 문장에서1글자마다소리내기 19 작은샛별 2010.03.07 3951
407 이동 및 탈것 vx 걸을때 소리가 나도도록 하는 스크립트 33 아방스 2008.01.31 3946
406 파티 파티 변경 시스템 21 file 아방스 2008.03.09 3945
405 직업 서브클래스 선택 시스템 Subclass Selection System 7 file 카르와푸딩의아틀리에 2009.06.30 3942
404 그래픽 RPG XP의 Transitions효과를 VX에도 적용을 해보자 4 아방스 2008.01.27 3930
403 전투 VX SRPG 스크립트를 수정해봤습니다(8) - 누적수정 30 아이미르 2011.09.09 3911
402 온라인 NETVX 2버전 18 아방스 2009.02.04 3908
» 메뉴 레벨업 시 자세한 정보 나오는 스크립트 23 아방스 2009.01.20 3895
400 기타 VX에서 포그 그래픽을 사용하자 16 아방스 2008.01.31 3895
399 전투 Spirits System 정령 장착?이라고해야되나; 26 file 카르와푸딩의아틀리에 2009.08.19 3869
398 전투 VX]Mog Battleback XP 1.0 11 file WMN 2008.04.06 3868
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ... 32 Next
/ 32