XP 스크립트

  이전에 작성했던 메뉴 스크립트를 약간 수정해 본 것입니다.  SDK 요구하지 않는 건 안 만들었으므로 쓰실 분은 알아서 변환하시길(dispose라든가 그런 것에 주의한다면 별로 안 어렵습니다).

이전버전 소스: http://save-point.org/thread-2372.html



#============================================================================
#L's Custom Menu - Simple DMS Edit SDK2 ver.
# * Release 2(2013-01-18)
# - Replaced Dubealex's gold display with dragonslayer's simplified form.
# - Edited menu status window to conform party size.
# - Changed map window size and position.
# - And some more...
#============================================================================

#--------------------------------------------------------------------------
# * Begin SDK Log
#--------------------------------------------------------------------------
SDK.log("L's CMS", 'Landarma', 'R2', '2013-01-18')

#--------------------------------------------------------------------------
# * Begin SDK Requirement Check
#--------------------------------------------------------------------------
SDK.check_requirements(2.0, [1])

#--------------------------------------------------------------------------
# * Begin SDK Enable Test
#--------------------------------------------------------------------------
if SDK.enabled?("L's CMS")

#------Menu Command Configuration
module SDK::Scene_Commands
  #============================================================================
  # ** Scene_Menu
  #============================================================================
  module Scene_Menu
    Item     = 'Item'
    Skill    = 'Skill'
    Equip    = 'Equip'
    Status   = 'Status'
    Save     = 'Save'
    Load     = 'Load'
    End_Game = 'Exit'
    
    Order    = 'Order'
    Party    = 'Party'
    Option   = 'Option'
    Quest    = 'Quest'
    System   = 'System'
    
    Menu_Commands = [Item, Skill, Equip, Status, Order, Party, System]
    SysMenu_Commands = [Option, Save, Load, End_Game]
  end
end

#------------------------


if SDK.enabled?('Map Info')

#============================================================================== 
# ■ Game_Map 
#============================================================================== 
class Game_Map    
  def name
     $data_mapinfos[@map_id].name
  end   
end

else
#------------
#------------------------------------------------------------------------------
#  Game_Map
#------------------------------------------------------------------------------
class Game_Map
#------------------------------------------------------------------------------
#  Name
#------------------------------------------------------------------------------
  def name
    $map_infos[@map_id]
  end
end


#========================================
#■ Scene_Title
#--------------------------------------------------------------------------------
# Setting functions for the Title
#========================================
class Scene_Title
  $map_infos = load_data("Data/MapInfos.rxdata")
  for key in $map_infos.keys
    $map_infos[key] = $map_infos[key].name
  end
end

#-----------------
end

 
#==============================================================================
# ** Window_MenuStatus
#------------------------------------------------------------------------------
#  This window displays party member status on the menu screen.
#==============================================================================

class Window_MenuStatus < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    $game_party.actors.size < 4 ? i = 14 : i = 0
    $game_party.actors.size == 1 ? i = 24 : i = i
    size_height = ($game_party.actors.size * 102)+i
    super(0, 0, 480, size_height)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
    self.active = false
    self.index = -1
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
      x = 64
      y = i * 96
      actor = $game_party.actors[i]
      draw_actor_graphic(actor, x - 40, y + 72)
      draw_actor_name(actor, x, y)
      draw_actor_class(actor, x + 144, y)
      draw_actor_level(actor, x, y + 24)
      draw_actor_state(actor, x + 90, y + 24)
      draw_actor_exp(actor, x, y + 48)
      draw_actor_hp(actor, x + 236, y + 24)
      draw_actor_sp(actor, x + 236, y + 48)
    end
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index < 0
      self.cursor_rect.empty
    else
      self.cursor_rect.set(0, @index * 96, self.width - 32, 84)
    end
  end
end



class Window_Infos < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 160, 130)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.windowskin = RPG::Cache.windowskin($game_system.windowskin_name)     
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    #---Show Time
    self.contents.font.color = system_color
    self.contents.draw_text(4, 0, 120, 32, "Time")
    @total_sec = Graphics.frame_count / Graphics.frame_rate
    hour = @total_sec / 60 / 60
    min = @total_sec / 60 % 60
    sec = @total_sec % 60
    text = sprintf("%02d:%02d:%02d", hour, min, sec)
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 120, 32, text, 2)
    #---Show Steps
    self.contents.font.color = system_color
    self.contents.draw_text(4, 25, 120, 32, "Steps")
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 42, 120, 32, $game_party.steps.to_s, 2)
    #---Show Money
    gold = $game_party.gold.to_s
    unless gold.size > 4
      money = gold
    else
      case gold.size
      when 5
        ary = gold.slice!(0,2)
        money = ary + ","+ gold
      when 6
        ary = gold.slice!(0,3)
        money = ary + ","+ gold
      when 7
        ary1 = gold.slice!(0,4)
        ary2 = ary1.slice!(1,4)
        money = ary1 + ","+ ary2 +","+ gold
      end
    end
    
    self.contents.font.color = normal_color     
    cx = contents.text_size($data_system.words.gold).width    
    self.contents.draw_text(4, 67, 120-cx-2, 32, money, 2)
    self.contents.font.color = system_color 
    self.contents.draw_text(124-cx, 67, cx, 32, $data_system.words.gold, 2)
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    if Graphics.frame_count / Graphics.frame_rate != @total_sec
      refresh
    end
  end
end


class Window_MapName < Window_Base
 def initialize
   super(0, 0, 480, 64)
   self.contents = Bitmap.new(width - 32, height - 32)   
   refresh
 end
 def refresh
   self.contents.clear
   self.contents.font.color = system_color
   self.contents.draw_text(4, 0, 120, 32, "Location")
   self.contents.font.color = normal_color
   self.contents.draw_text(4, 0, 160, 32, $game_map.name, 2)
 end
end


#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
#  This class performs menu screen processing.
#==============================================================================

class Scene_Menu < SDK::Scene_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     menu_index : command cursor's initial position
  #--------------------------------------------------------------------------
  def initialize(menu_index = 0)
    @menu_index = menu_index
    party_order_init
  end
  #--------------------------------------------------------------------------
  # * Party Order Change Initiation
  #--------------------------------------------------------------------------
  def party_order_init
    @changer = 0 #Change Party Order by Yargovish
    @where = 0 #
    @checker = 0  #
  end
  #--------------------------------------------------------------------------
  # * Main Processing : Spriteset Initialization
  #--------------------------------------------------------------------------
  def main_spriteset  
    #Draw Background
    @background = Spriteset_Map.new
  end
  #--------------------------------------------------------------------------
  # * Main Processing : Window Initialization
  #--------------------------------------------------------------------------
  def main_window
    super
    # Make main command window
    main_command_window
    system_command_window
    # Make Info Window
    @infos_window = Window_Infos.new
    @infos_window.x = 0
    @infos_window.y = 350
    @infos_window.opacity = 160
    # Make map name window
    @mapname_window = Window_MapName.new
    @mapname_window.x = 160
    @mapname_window.y = 416
    @mapname_window.opacity = 160
    # Make status window
    @status_window = Window_MenuStatus.new
    @status_window.x = 160
    @status_window.y = 0
    @status_window.opacity = 160
  end
  #--------------------------------------------------------------------------
  # * Main Processing : Window Initialization : Main Command
  #--------------------------------------------------------------------------
  def main_command_window
    # Make command window
    command = SDK::Scene_Commands::Scene_Menu::Menu_Commands.dup
    @command_window = Window_Command.new(160, command)
    @command_window.opacity = 160
    @command_window.index = @menu_index
    if @command_window.height > 256
      @command_window.height = 256
    end
    # If number of party members is 0
    if $game_party.actors.size == 0
      # Disable items, skills, equipment, and status
      @command_window.disable_item(0)
      @command_window.disable_item(1)
      @command_window.disable_item(2)
      @command_window.disable_item(3)
    end
    if $game_party.actors.size <= 1 #
      #Disable change party order
      @command_window.disable_item(4)
    end
  end
  #--------------------------------------------------------------------------
  # * Main Processing : Window Initialization : System Command
  #--------------------------------------------------------------------------
  def system_command_window
    # Make command window
    sys_command = SDK::Scene_Commands::Scene_Menu::SysMenu_Commands.dup
    @sys_command_window = Window_Command.new(128, sys_command)
    @sys_command_window.visible = false
    @sys_command_window.active = false
    @sys_command_window.x = 100
    @sys_command_window.y = 180
    @sys_command_window.opacity = 160
    #@sys_command_window.z = 0
    check_save_available
    check_load_available
  end
  #-----------------
  def check_save_available
    # If save is forbidden
    if $game_system.save_disabled
      # Disable save
      @sys_command_window.disable_item(1)
    end
  end
  #-----------------
  def check_load_available
    #Check if saved file exists
    @load_enabled = (Dir.glob('Save*.rxdata').size > 0)
    if !@load_enabled
      #Put your @command_window.disable_item(index)
      @sys_command_window.disable_item(2)
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    # If command window is active: call update_command
    if @command_window.active
      update_command
      return
    # If status window is active: call update_status
    elsif @status_window.active
      update_status
      return
    end
    
    if @sys_command_window.active
      @sys_command_window.z = +500
    end
    # If system window is active: call update_sys_command
    if @sys_command_window.active
      update_sys_command
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when command window is active)
  #--------------------------------------------------------------------------
  def update_command
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Switch to map screen
      $scene = Scene_Map.new
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Return if Disabled Command
      if disabled_main_command?
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Command Input
      main_command_input
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Update SysCommand Window
  #--------------------------------------------------------------------------
  def update_sys_command
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @command_window.active = true
      @sys_command_window.active = false
      @sys_command_window.visible = false
      @sys_command_window.index = 0
      @sys_command_window.z = -500
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Return if Disabled Command
      if disabled_main_command?
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Command Input
      sys_command_input
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when status window is active)
  #--------------------------------------------------------------------------
  def update_status
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Make command window active
      @command_window.active = true
      @status_window.active = false
      @status_window.index = -1
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Return if Disabled Command
      if disabled_main_command?
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Command Input
      sub_command_input
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Disabled Main Command? Test
  #--------------------------------------------------------------------------
  def disabled_main_command?
    # Gets Current Command
    command = @command_window.command
    sys_command = @sys_command_window.command
    # Gets SDK Scene_Menu Commands
    c = SDK::Scene_Commands::Scene_Menu
    # If 0 Party Size
    if $game_party.actors.size == 0
      # If Item, Skill, Equip or Status Selected
      if [c::Item, c::Skill, c::Equip, c::Status].include?(command)
        return true
      end
    end
    if $game_party.actors.size <= 1
      if [c::Order].include?(command)
        return true
      end
    end
    # If Save Disabled && Command is Save
    return true if $game_system.save_disabled && sys_command == c::Save
    # If Load Disabled && Command is Load
    return true if !@load_enabled && sys_command == c::Load
    return false
  end
  #--------------------------------------------------------------------------
  # * Main Command Input
  #--------------------------------------------------------------------------
  def main_command_input
    # Play decision SE
    $game_system.se_play($data_system.decision_se)
    # Branch by command window cursor position
    case @command_window.command
    when SDK::Scene_Commands::Scene_Menu::Item      # item
      command_item
    when SDK::Scene_Commands::Scene_Menu::Skill     # skill
      command_skill
    when SDK::Scene_Commands::Scene_Menu::Equip     # equipment
      command_equip
    when SDK::Scene_Commands::Scene_Menu::Status    # status
      command_status
    when SDK::Scene_Commands::Scene_Menu::Order      # order
      command_order
    when SDK::Scene_Commands::Scene_Menu::Party      # party
      command_party
    when SDK::Scene_Commands::Scene_Menu::Option    #option
      command_option
    when SDK::Scene_Commands::Scene_Menu::System  # call system menu      
      $game_system.se_play($data_system.decision_se)
      @sys_command_window.active = true
      @sys_command_window.visible = true
      @command_window.active = false   
    end
  end
  #--------------------------------------------------------------------------
  # * System Command Input
  #--------------------------------------------------------------------------
  def sys_command_input
    # Play decision SE
    $game_system.se_play($data_system.decision_se)
    # Branch by command window cursor position
    case @sys_command_window.command
    when SDK::Scene_Commands::Scene_Menu::Save  #save
      command_save
    when SDK::Scene_Commands::Scene_Menu::Load  #load
      command_load
    when SDK::Scene_Commands::Scene_Menu::End_Game  #end game
      command_endgame
    when SDK::Scene_Commands::Scene_Menu::Option    #option
      command_option
    end
  end
  #--------------------------------------------------------------------------
  # * Disabled Sub Command? Test
  #--------------------------------------------------------------------------
  def disabled_sub_command?
    # If Skill Selected
    if @command_window.command == SDK::Scene_Commands::Scene_Menu::Skill
      # If this actor's action limit is 2 or more
      if $game_party.actors[@status_window.index].restriction >= 2
        return true
      end
    end
    return false
  end
  #--------------------------------------------------------------------------
  # * Sub Command Input
  #--------------------------------------------------------------------------
  def sub_command_input
    # Play decision SE
    $game_system.se_play($data_system.decision_se)
    # Branch by command window cursor position
    case @command_window.command
    when SDK::Scene_Commands::Scene_Menu::Skill     # skill
      command_skill
    when SDK::Scene_Commands::Scene_Menu::Equip     # equipment
      command_equip
    when SDK::Scene_Commands::Scene_Menu::Status    # status
      command_status
    when SDK::Scene_Commands::Scene_Menu::Order      # order
      command_order
    end
  end
  #--------------------------------------------------------------------------
  # * Command : Item
  #--------------------------------------------------------------------------
  def command_item
    # Switch to item screen
    $scene = Scene_Item.new
  end
  #--------------------------------------------------------------------------
  # * Command : Skill
  #--------------------------------------------------------------------------
  def command_skill
    # If Main Command Active
    if @command_window.active
      # Activate Status Window
      active_status_window
      return
    end
    # Switch to skill screen
    $scene = Scene_Skill.new(@status_window.index)
  end
  #--------------------------------------------------------------------------
  # * Command : Equip
  #--------------------------------------------------------------------------
  def command_equip
    # If Main Command Active
    if @command_window.active
      # Activate Status Window
      active_status_window
      return
    end
    # Switch to equipment screen
    $scene = Scene_Equip.new(@status_window.index)
  end
  #--------------------------------------------------------------------------
  # * Command : Status
  #--------------------------------------------------------------------------
  def command_status
    # If Main Command Active
    if @command_window.active
      # Activate Status Window
      active_status_window
      return
    end
    # Switch to status screen
    $scene = Scene_Status.new(@status_window.index)
  end
  #--------------------------------------------------------------------------
  # * Command : Order
  #--------------------------------------------------------------------------
  def command_order
    # If Main Command Active
    if @command_window.active
      # Activate Status Window
      active_status_window
      @checker = 0
      return
    end
    #Change Party Order by Yargovish
    if @checker == 0
      @changer = $game_party.actors[@status_window.index]
      @where = @status_window.index
      @checker = 1
    else
      $game_party.actors[@where] = $game_party.actors[@status_window.index]
      $game_party.actors[@status_window.index] = @changer
      @checker = 0
      @status_window.refresh
      $game_player.refresh #
    end      
  end
  #--------------------------------------------------------------------------
  # * Command : Party
  #--------------------------------------------------------------------------
  def command_party
    # Switch to party change screen
    #Put your Party Change Scene here
  end
  #--------------------------------------------------------------------------
  # * Command : Option
  #--------------------------------------------------------------------------
  def command_option
    # Switch to option screen
    #Put your Option Scene here
  end
  #--------------------------------------------------------------------------
  # * Command : Quest
  #--------------------------------------------------------------------------
  def command_quest
    # Switch to quest screen
    #Put your Quest Scene here
  end
  #--------------------------------------------------------------------------
  # * Command : Save
  #--------------------------------------------------------------------------
  def command_save
    # Switch to save screen
    $scene = Scene_Save.new
  end
  #--------------------------------------------------------------------------
  # * Command : Load
  #--------------------------------------------------------------------------
  def command_load
    # Switch to load screen
    $scene = Scene_Load.new
  end
  #--------------------------------------------------------------------------
  # * Command : End Game
  #--------------------------------------------------------------------------
  def command_endgame
    # Switch to end game screen
    $scene = Scene_End.new
  end
  #--------------------------------------------------------------------------
  # * Activate Status Window
  #--------------------------------------------------------------------------
  def active_status_window
    # Make status window active
    @command_window.active = false
    @status_window.active = true
    @status_window.index = 0
  end
end

#--------------------------------------------------------------------------
# * End SDK Enable Test
#--------------------------------------------------------------------------
end



List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6153
88 메뉴 MOG - Scroll Bar for XP file 습작 2014.07.06 1532
» 메뉴 L's Simple Custom Menu #1 R2 (SDK 2.x 필요) Alkaid 2013.01.18 1227
86 메뉴 Leidy's Ring Command Window 1.2 by DerVVulfman Alkaid 2012.09.09 1430
85 메뉴 메뉴를 바꾸는 스크립트 14 №1 2012.08.04 4205
84 메뉴 Etude87_Horror_Menu_XP ver.1.1 15 file 습작 2012.08.04 2759
83 메뉴 메뉴바꾸기 4 file ureazy 2012.07.23 2843
82 메뉴 메뉴화면에 '해야 할 일' 알려주는 창 넣기 11 하진 2012.04.23 3255
81 메뉴 [메뉴] 간단한 형식의 CoaMenu2Scroll 버젼 20 file 코아 코스튬 2010.10.24 3526
80 메뉴 3D Menu Script 7 현문 2010.10.06 4077
79 메뉴 CoaMenu2탄Ver2.0 15 file 코아 코스튬 2010.10.03 2091
78 메뉴 CoaMenuVer0.1 10 file 코아 코스튬 2010.09.25 2701
77 메뉴 L's Custom Menu #3: 1인용 메뉴 Revision 1 3 Alkaid 2010.09.12 2360
76 메뉴 L's Custom Menu #4: 'Compact' (SDK 2.x 필수) Alkaid 2010.09.11 1755
75 메뉴 Ring menu edit (Non-SDK ver.) Alkaid 2010.09.08 1538
74 메뉴 Ring menu edit for SDK2 (Original by Hypershadow180) file Alkaid 2010.09.08 1374
73 메뉴 Stormtronics CMS 5.39b - Hybrid Edition by Blizzard 4 file Alkaid 2010.09.06 1742
72 메뉴 Ryex's Collapsing CMS 2.51 3 Alkaid 2010.09.05 1667
71 메뉴 자작 메뉴 스크립트들(L's Simple CMS and menu scenes) (SDK 호환?) 10 Alkaid 2010.09.02 3455
70 메뉴 새로운 메뉴 15 file 또라에몽 2010.07.17 5301
69 메뉴 메이플스토리처럼 메뉴를^^ 57 file 딸기님 2010.07.13 7137
Board Pagination Prev 1 2 3 4 5 Next
/ 5