VX 스크립트

#===============================================================
# ● [VX] ◦ Monster Book ◦ □
#--------------------------------------------------------------
# ◦ by Woratana [woratana@hotmail.com]
# ◦ Thaiware RPG Maker Community
# ◦ Released on: 10/08/2008
# ◦ Version: 1.0
#--------------------------------------------------------------
# ** HOW TO USE
#--------------------------------------------------------------
# * Call Scene Monster Book by call script:
#  $scene = Scene_MonsterBook.new

# * Complete all enemies' information by call script:
#  $game_system.set_monbook_complete

# * Clear all enemies' information by call script:
#  $game_system.reset_monbook
#--------------------------------------------------------------
# * Show enemy's information by call script:
#  $game_system.monbook[enemy_id] = true

# * Hide enemy's information by call script:
#  $game_system.monbook[enemy_id] = false

# ^ Change enemy_id to ID of enemy you want
# ** e.g. $game_system.monbook[10] = true
#===============================================================

module Wora_Monbook

#===============================================================
# ** [Setup Part] - Config script in this part
#-------------------------------------------------------------- 
  SHOW_IN_MENU = true # Show Monster Book in Menu Command? (true / false)
  MENU_COMMAND = '몬스터 도감' # Menu command name for Monster Book
  MENU_INDEX = 4 # Index of menu command you want to insert monster book 
 
  TEXT_TITLE = '몬스터 도감'
  # Monster Book Title (Show at top left of the screen)
  TEXT_FOUND = 'Found: '
  # Text before number of how many monster are found
  TEXT_COMPLETED = 'Completed: '
  # Text before percentage of how many monster are found
 
  TEXT_DOT = '.'
  # Text show after enemy's ID (e.g. '.' will make '2.' and ')' will make '2)' )
 
  COMPARE_STATUS = true
  # Use Compare Status System? It will compare enemy's status with highest level
  # actor in party. Show GREEN number if enemy has lower status.
  # Show RED-GRAY number if enemy has higher status. (true / false)
#===============================================================
end

#===============================================================
# ** [Alias] Game_System
#--------------------------------------------------------------
class Game_System
  attr_accessor :monbook
  alias :wora_monbook_gamsys_ini :initialize
  def initialize
    wora_monbook_gamsys_ini
    create_monbook
  end
 
  def create_monbook
    @monbook ||= Array.new($data_enemies.size) {false}
  end
 
  def set_monbook_complete
    @monbook = Array.new($data_enemies.size) {true}
    @monbook[0] = false
  end
 
  def reset_monbook
    @monbook = Array.new($data_enemies.size) {false}
  end
end

#===============================================================
# ** [Alias] Game_Troop
#--------------------------------------------------------------
class Game_Troop < Game_Unit
  alias :wora_monbook_gamtroop_setup :setup
  def setup(*args)
    wora_monbook_gamtroop_setup(*args)
    $game_system.create_monbook
    @enemies.each {|e| $game_system.monbook[e.enemy_id] = true }
  end
end

#===============================================================
# ** Window_MonsterBHelp
#--------------------------------------------------------------
class Window_MonsterBHelp < Window_Base
  include Wora_Monbook
 
  def initialize
    super(0, 0, 544, WLH + 32)
    # Write Monster Book Title
    contents.font.color = system_color
    contents.draw_text(0, 0, contents.width, WLH, TEXT_TITLE)
    # Calculate found monster & complete percentage
    found_count = 0
    $game_system.monbook.each {|e| found_count += 1 if e }
    percent_count = (found_count * 100) / ($data_enemies.size - 1)
    # Collect & Store Text in variables
    found_text = found_count.to_s + '/' + ($data_enemies.size - 1).to_s
    percent_text = percent_count.to_s + '%'
    mid_text = ' | '
    right_text = TEXT_FOUND + found_text + mid_text + TEXT_COMPLETED +
  percent_text
    # Calculate Text Width
    found_t_width = contents.text_size(TEXT_FOUND).width
    found_width = contents.text_size(found_text).width
    percent_t_width = contents.text_size(TEXT_COMPLETED).width
    mid_width = contents.text_size(mid_text).width
    right_width = contents.text_size(right_text).width
    # Write Monster Found & Complete Percentage
    contents.font.color = normal_color
    contents.draw_text(contents.width - right_width, 0, contents.width, WLH,
  TEXT_FOUND)
    contents.draw_text(contents.width - right_width + found_t_width +
  found_width, 0, contents.width, WLH, mid_text + TEXT_COMPLETED)
    contents.font.color = crisis_color
    contents.draw_text(contents.width - right_width + found_t_width, 0,
  contents.width, WLH, found_text)
    contents.draw_text(contents.width - right_width + found_t_width +
  found_width + mid_width + percent_t_width, 0, contents.width, WLH,
  percent_text)
  end
end

#===============================================================
# ** Window_MonsterBDetail
#--------------------------------------------------------------
class Window_MonsterBDetail < Window_Base
  def initialize(window_temp)
    super(window_temp.x, window_temp.y, window_temp.width, window_temp.height)
    self.opacity = 0
    @win_image = Window_Base.new(self.x, self.y, self.width, self.height)
    self.z = @win_image.z + 1
    @last_enemy = 0
  end
 
  def visible=(bool)
    super
    @win_image.visible = bool
  end
 
  def dispose
    @win_image.dispose
    super
  end
 
  def write_detail(enemy_id)
    return if @last_enemy == enemy_id
    contents.clear
    @win_image.contents.clear
    @last_enemy = enemy_id
    data = $data_enemies[enemy_id]
    # Draw Enemy Graphic
    bitmap = Cache.battler(data.battler_name, data.battler_hue)
    bw = bitmap.width < 160 ? (160 - bitmap.width) / 2 : 0
    bh = contents.height - bitmap.height
    @win_image.contents.blt(bw, bh, bitmap, bitmap.rect)
    bitmap.dispose
    # Write Name
    contents.font.color = normal_color
    contents.draw_text(0, 0, contents.width, WLH,
  data.id.to_s + Wora_Monbook::TEXT_DOT + ' ' + data.name)
    # Write Enemy Status
    hpx = 120
    draw_enemy_stat(data, contents.width - (hpx * 2) - 32, 0, hpx, 'hp')
    draw_enemy_stat(data, contents.width - hpx, 0, hpx, 'mp')
    draw_enemy_stat(data, contents.width - (hpx * 2) - 32, WLH * 2, hpx, 'atk')
    draw_enemy_stat(data, contents.width - hpx, WLH * 2, hpx, 'def')
    draw_enemy_stat(data, contents.width - (hpx * 2) - 32, WLH * 3, hpx, 'spi')
    draw_enemy_stat(data, contents.width - hpx, WLH * 3, hpx, 'agi')
    draw_enemy_stat(data, contents.width - (hpx * 2) - 32, WLH * 4, hpx, 'hit')
    draw_enemy_stat(data, contents.width - hpx, WLH * 4, hpx, 'eva')
    draw_enemy_stat(data, contents.width - (hpx * 2) - 32, WLH * 6, hpx, 'exp')
    draw_enemy_stat(data, contents.width - hpx, WLH * 6, hpx, 'gold')
    rect = Rect.new(contents.width - (hpx * 2) - 8, (WLH * 8) - 8, 216,
  (WLH * 4) + 16)
    contents.fill_rect(rect, Color.new(0,0,0,140))
    lsize = 2 # Line Size
    lcolor = Color.new(255,255,255,160) # Line Color
    contents.fill_rect(rect.x, rect.y, lsize, rect.height, lcolor)
    contents.fill_rect(rect.x, rect.y, rect.width, lsize, lcolor)
    contents.fill_rect(rect.x + rect.width - lsize, rect.y, lsize,
  rect.height, lcolor)
    contents.fill_rect(rect.x, rect.y + rect.height - lsize, rect.width,
  lsize, lcolor)
    contents.font.color = system_color
    contents.draw_text(contents.width - (hpx * 2), WLH * 8, 200, WLH,
  'Drop Item 1')
    draw_enemy_drop(data, 1, contents.width - (hpx * 2), WLH * 9)
    contents.font.color = system_color
    contents.draw_text(contents.width - (hpx * 2), WLH * 10, 200, WLH,
  'Drop Item 2')
    draw_enemy_drop(data, 2, contents.width - (hpx * 2), WLH * 11)
  end

  def draw_enemy_stat(actor, x, y, width, stat)
    color1 = system_color
    color2 = normal_color
    slash = false
    # Find highest level actor
    if Wora_Monbook::COMPARE_STATUS
      hactor = ($game_party.members.sort {|a,b| a.level <=> b.level })
      hactor = hactor[hactor.size - 1]
    end
    case stat
    when 'hp'
      vocab = Vocab::hp
      number = actor.maxhp
      hnumber = hactor.maxhp if Wora_Monbook::COMPARE_STATUS
      slash = true
    when 'mp'
      vocab = Vocab::mp
      number = actor.maxmp
      hnumber = hactor.maxmp if Wora_Monbook::COMPARE_STATUS
      slash = true
    when 'atk'
      vocab = Vocab::atk
      number = actor.atk
      hnumber = hactor.atk if Wora_Monbook::COMPARE_STATUS
    when 'def'
      vocab = Vocab::def
      number = actor.def
      hnumber = hactor.def if Wora_Monbook::COMPARE_STATUS
    when 'spi'
      vocab = Vocab::spi
      number = actor.spi
      hnumber = hactor.spi if Wora_Monbook::COMPARE_STATUS
    when 'agi'
      vocab = Vocab::agi
      number = actor.agi
      hnumber = hactor.agi if Wora_Monbook::COMPARE_STATUS
    when 'hit'
      vocab = 'HIT'
      number = actor.hit
      hnumber = hactor.hit if Wora_Monbook::COMPARE_STATUS
    when 'eva'
      vocab = 'EVA'
      number = actor.eva
      hnumber = hactor.eva if Wora_Monbook::COMPARE_STATUS
    when 'exp'
      vocab = 'EXP'
      number = actor.exp
      color2 = crisis_color
    when 'gold'
      vocab = 'Gold'
      number = actor.gold
      color2 = crisis_color
    end
    if Wora_Monbook::COMPARE_STATUS and !hnumber.nil?
      if hnumber > number # Higher
        color2 = power_up_color
      elsif hnumber < number # Less
        color2 = power_down_color
      elsif hnumber == number # Equal
        color2 = normal_color
      end
    end
    contents.font.color = color1
    contents.draw_text(x, y, 50, WLH, vocab)
    xr = x + width
    contents.font.color = color2
    if slash
      contents.draw_text(xr - 95, y, 40, WLH, number, 2)
      contents.draw_text(xr - 55, y, 11, WLH, '/', 2)
    end
    w_ava = slash ? 40 : 80
    contents.draw_text(xr - w_ava, y, w_ava, WLH, number, 2)
  end
 
  def draw_enemy_drop(actor, drop_id, x, y)
    drop = eval('actor.drop_item' + drop_id.to_s)
    if drop.kind.zero?
      contents.font.color = normal_color
      contents.draw_text(x, y, 200, WLH, "  ---------")
    else
      case drop.kind
      when 1; item = $data_items[drop.item_id]
      when 2; item = $data_weapons[drop.weapon_id]
      when 3; item = $data_armors[drop.armor_id]
      end
      draw_item_name(item, x, y)
    end
  end
end
#===============================================================
# ** Scene_MonsterBook
#--------------------------------------------------------------
class Scene_MonsterBook < Scene_Base
  def initialize(from_menu = false)
    @from_menu = from_menu
  end
 
  def start
    super
    create_menu_background
    $game_system.create_monbook
    @window_help = Window_MonsterBHelp.new
    # Create Monster List
    monlist = []
    $game_system.monbook.each_index do |i|
      next if i == 0 # The first index in $data_enemies is blank
      # If player found the monster
      if $game_system.monbook[i]
        montext = i.to_s + Wora_Monbook::TEXT_DOT + ' ' + $data_enemies[i].name
      else # If player haven't found
        montext = i.to_s + Wora_Monbook::TEXT_DOT
      end
      monlist << montext
    end
    @window_monlist = Window_Command.new(544, monlist, 2)
    @window_monlist.y = @window_help.height
    @window_monlist.height = Graphics.height - @window_help.height
    @window_monlist.active = true
    @window_mondetail = Window_MonsterBDetail.new(@window_monlist)
    @window_mondetail.visible = false
  end
 
  def update
    super
    if @window_monlist.active
      @window_monlist.update
      if Input.trigger?(Input::C)
        # View monster's detail if found monster
        if $game_system.monbook[@window_monlist.index + 1]
          Sound.play_decision
          @window_monlist.active = false
          @window_monlist.visible = false
          @window_mondetail.active = true
          @window_mondetail.visible = true
          @window_mondetail.write_detail(@window_monlist.index + 1)
        else
          Sound.play_cancel
        end
      elsif Input.trigger?(Input::B)
        Sound.play_cancel
        # Return
        $scene = @from_menu ? Scene_Menu.new(Wora_Monbook::MENU_INDEX) :
      Scene_Map.new
      end
    elsif @window_mondetail.active
      if Input.trigger?(Input::B)
        Sound.play_cancel
        @window_monlist.active = true
        @window_monlist.visible = true
        @window_mondetail.active = false
        @window_mondetail.visible = false
      end
    end
  end
 
  def terminate
    super
    dispose_menu_background
    @window_help.dispose
    @window_monlist.dispose
    @window_mondetail.dispose
  end
end

#=============================================================
# * Window_Command Insert Tool
#=============================================================
class Window_Command < Window_Selectable
  unless method_defined? :wora_cominstool_wincom_ini
    alias wora_cominstool_wincom_ini initialize
    alias wora_cominstool_wincom_drawitem draw_item
  end
 
  #------------------------------------
  # * [Alias] Initialize
  #------------------------------------
  def initialize(*args)
    @disabled_commands = [] # Array to keep track of disabled commands
    wora_cominstool_wincom_ini(*args)
  end
 
  #------------------------------------
  # * [Alias] Draw_Item
  #------------------------------------
  def draw_item(*args)
    wora_cominstool_wincom_drawitem(*args)
    # Set array's index to 1 if command is disabled
    @disabled_commands[args[0]] = args[1].nil? || args[1] ? nil : true
  end
 
  #------------------------------------
  # * Insert Command
  #------------------------------------
  def ins_command(index, text)
    @commands.insert(index, text) # Insert new commands
    @disabled_commands.insert(index, nil)
    # Set new height for window
    old_disabled_commands = @disabled_commands.dup
    self.height = (@commands.size + @column_max - 1) / @column_max * WLH + 32
    @item_max = @commands.size # Update @item_max to make refresh works correctly
    create_contents            # Create new content because window's size changed
    refresh                    # Redraw window's contents
    old_disabled_commands.each_index do |i|
      if !old_disabled_commands[i].nil?
        draw_item(i, false)    # Draw commands that disabled before
      end
    end
  end
 
  #------------------------------------
  # * Add Command
  #------------------------------------
  def add_command(text)
    ins_command(@commands.size, text) # Add new command to new index
  end
end

#=============================================================
# * Add command linked to Monster Book in Menu
#=============================================================
if Wora_Monbook::SHOW_IN_MENU
  class Scene_Menu < Scene_Base 
    #--------------------------------------------------------------------------
    # * Sort New Command(s)
    #--------------------------------------------------------------------------
    def wsort_newcommand
      @wsorted_command ||= [] # Array to collect sorted commands
      wnewcommand = @wnewcommand - @wsorted_command # Remove sorted commands
      wnewcommand.sort.each {|i| @menu_index += 1 if @menu_index >= i }
      @command_window.index = @menu_index # Set window's index to new index
      @wsorted_command = @wsorted_command + @wnewcommand # Add sorted commands
    end

    #--------------------------------------------------------------------------
    # * [Alias] Create Command Window
    #--------------------------------------------------------------------------
    alias wora_menucomorg_scemenu_crecomwin create_command_window
    def create_command_window(*args)
      wora_menucomorg_scemenu_crecomwin(*args)
      # Insert new command
      @command_window.ins_command(Wora_Monbook::MENU_INDEX,
    Wora_Monbook::MENU_COMMAND)
      # Set index to correct one if @menu_index is after/equal to new command
      @wnewcommand ||= []
      @wnewcommand << Wora_Monbook::MENU_INDEX
      wsort_newcommand
    end

    #--------------------------------------------------------------------------
    # * [Alias] Update Command Selection
    #--------------------------------------------------------------------------
    alias wora_menucomorg_scemenu_updcomsel update_command_selection
    def update_command_selection(*args)
      @menucomorpg_change = false
      # If player choose new command
      if Input.trigger?(Input::C) and @command_window.index ==
      Wora_Monbook::MENU_INDEX
        Sound.play_decision
        $scene = Scene_MonsterBook.new(true)
      else # If player choose index after new command
        if Input.trigger?(Input::C) and @command_window.index >
        Wora_Monbook::MENU_INDEX
          @command_window.index -= 1 # Decrease index to make old update works
          @menucomorpg_change = true
        end
        wora_menucomorg_scemenu_updcomsel(*args)
      end
      @command_window.index += 1 if @menucomorpg_change # Increase index back
    end
   
    #--------------------------------------------------------------------------
    # * [Alias] Update Actor Selection
    #--------------------------------------------------------------------------
    alias wora_menucomorg_scemenu_updactsel update_actor_selection
    def update_actor_selection(*args)
      @menucomorpg_change = false
      # If player choose index after new command
      if Input.trigger?(Input::C) and @command_window.index >
      Wora_Monbook::MENU_INDEX
        @command_window.index -= 1 # Decrease index to make old update works
        @menucomorpg_change = true
      end
      wora_menucomorg_scemenu_updactsel(*args)
      @command_window.index += 1 if @menucomorpg_change # Increase index back
    end
  end
end

Who's 작은샛별

?

제작중게임

 

1.코아스타온라인

2. 신비의숲


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 3 습작 2012.12.24 5309
44 메뉴 KGC - 커스텀 메뉴 커멘드 (번역) 1 듀란테 2015.07.27 1020
43 메뉴 Etude87's Menu Editor for VX 25 습작 2015.01.14 1400
42 메뉴 Etude87_Ace_Style_Formation_Change ver.1.01 습작 2014.10.05 702
41 메뉴 MOG - Scroll Bar for VX file 습작 2014.07.06 1072
40 메뉴 기본메인 메뉴 아이콘 추가 10 아방스 2010.12.11 4566
39 메뉴 kgc 파라미터 배분 09/07/25 13 시트르산 2010.09.24 2322
38 메뉴 자작 메뉴 스크립트 for VX(L's Simple Custom Menu VX ver.) 5 Alkaid 2010.09.02 4697
37 메뉴 스타일 크로노 트리거 메뉴 31 file 콩밥 2010.07.19 4525
36 메뉴 매우 간단명료한 메뉴. 32 file 비극ㆍ 2010.04.23 6602
35 메뉴 Final Fantasy VII Menu System 8 비극ㆍ 2010.04.19 3502
» 메뉴 몬스터도감(유즈미짱님의엘카르디아같은종류) 1 작은샛별 2010.03.07 4192
33 메뉴 윈도우 색변경 스크립트 7 file 비극ㆍ 2010.03.01 2591
32 메뉴 전투 결과 상세 표시 스크립트 (한글화) 15 file 강진수 2010.02.26 3339
31 메뉴 YERD - 커먼 이벤트 메뉴 4 file 훈덕 2009.11.08 3847
30 메뉴 YERD - 시스템 옵션 5 file 훈덕 2009.11.08 3132
29 메뉴 확장 스테이터스 화면 - KGC 23 file 카르와푸딩의아틀리에 2009.08.19 5051
28 메뉴 전투결과 상세 표시 스크립트 24 file 카르와푸딩의아틀리에 2009.07.07 4135
27 메뉴 전투 결과 팝업 스크립트 12 file 카르와푸딩의아틀리에 2009.06.30 3372
26 메뉴 몬스터도감 심플버전! 52 file 카르와푸딩의아틀리에 2009.06.30 6895
25 메뉴 전투승리시 아이템 경험치팝업창 스크립트 18 file 카르와푸딩의아틀리에 2009.06.23 3754
Board Pagination Prev 1 2 3 Next
/ 3