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 5398
637 스킬 훔치기 스킬을 만드는 스크립트! 5 우켈킁 2011.03.31 2390
636 기타 회피,명중,크리 스테이트를 작성하는 스크립트 9 카르와푸딩의아틀리에 2009.06.30 2393
635 기타 확장 에러 메시지 13 file 허걱 2009.08.17 2497
634 메뉴 확장 스테이터스 화면 - KGC 23 file 카르와푸딩의아틀리에 2009.08.19 5057
633 기타 화폐단위 구분해 주는 스크립트 38 file 허걱 2010.04.13 3652
632 이동 및 탈것 화면의 부드러운 스크롤 스크립트 32 카르와푸딩의아틀리에 2009.07.17 3817
631 기타 화면에 그림 그리는 스크립트 21 file 강진수 2010.02.27 2962
630 기타 화면 확대 스크립트 12 file 에돌이 2011.07.22 3061
629 기타 화면 해상도(640 X 480) 스크립트 6 file 쿠쿠밥솥 2012.01.10 3972
628 아이템 현재있는 파티원 선택 레벨업 아이템 만들기 1 file 싸패 2016.06.06 713
627 헬프윈도우 확장 13 file RPGbooster 2008.10.08 2872
626 메뉴 헬프 윈도우 중앙표시 스크립트 11 file 양념통닼 2008.06.10 3348
625 키입력 해외 제작자 He Who Jets님의 마우스 스크립트(mouse system) 1 file 보자기군 2014.09.30 1261
624 기타 해상도 변경 스크립트 11 카리스 2011.07.19 2723
623 스킬 합성샾 스크립트 ^^ [동영상 포함] 6 file 아방스 2008.09.23 6038
622 키입력 한글입력기(펌) 수정 10 전설의달빛조각사 2011.04.03 2674
621 이름입력 한글로 이름 입력하는 스크립트입니다. 55 file 헤르코스 2009.03.18 6662
620 이름입력 한글 이름 입력 스크립트입니다.^^ 14 레시온 2008.03.18 4382
619 액터 한계돌파(렙9999) 18 작은샛별 2010.03.07 3273
618 이동 및 탈것 피티원이 따라다니는 스크립트 38 file 아방스 2009.02.05 5024
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 32 Next
/ 32