XP 스크립트

  테스트용으로 예전에 해 본 것입니다.  손댄 것이라고는 해도 문자셋 추가 정도입니다.  한글 문자셋은 조합입력 루틴이 없는 더미로, 그냥 이런 식으로 문자셋 추가가 가능함을 보여주는 예시입니다.(물론 마음같아서는 모 씨의 한글이름 입력기의 조합입력 부분을 도입하고 싶지만 실력이 안 되어서...)  원본이 어떻게 작동하는 지 궁금하다면 http://avangs.info/255902에 첨부되어 있는 데모를 받아서 실행시켜 보기 바랍니다.


# Advanced Enter Hero Name Window
# by RPG Advocate


#==============================================================================
# ** Window_NameEdit
#------------------------------------------------------------------------------
#  This window is used to edit your name on the input name screen.
#==============================================================================

class Window_NameEdit < Window_Base
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :char_type                # character type
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     actor    : actor
  #     max_char : maximum number of characters
  #--------------------------------------------------------------------------
  def initialize(actor, max_char)
    super(0, 0, 640, 128)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = actor
    @name = actor.name
    @max_char = max_char
    @char_type = []
    # Fit name within maximum number of characters
    name_array = @name.split(//)[0...@max_char]
    @name = ""
    for i in 0...name_array.size
      @name += name_array[i]
      @char_type[i] = 1
    end
    @default_name = @name
    @index = name_array.size
    refresh
    update_cursor_rect
  end
  #--------------------------------------------------------------------------
  # * Return to Default Name
  #--------------------------------------------------------------------------
  def restore_default
    @name = @default_name
    for i in 0..@default_name.size
       @char_type[i] = 1
    end
    @index = @name.split(//).size
    refresh
    update_cursor_rect
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    # Draw name
    name_array = @name.split(//)
    for i in 0...@max_char
      c = name_array[i]
      if c == nil
        c = "_"
      end
      x = 320 - @max_char * 14 + i * 28
      if @char_type[i] == 1 or @char_type[i] == 5
        self.contents.font.name = "Arial"
        self.contents.font.size = 24
      elsif @char_type[i] == 2 or @char_type[i] == 3
        self.contents.font.name = ["MS Pゴシック",'MS PGothic']
        self.contents.font.size = 22
      else
        self.contents.font.name = ["굴림",'Gulim']
        self.contents.font.size = 22
      end
      self.contents.draw_text(x, 32, 28, 32, c, 1)
    end
    # Draw graphic
    draw_actor_graphic(@actor, 320 - @max_char * 14 - 40, 80)
  end
end



#==============================================================================
# ** Window_NameInput
#------------------------------------------------------------------------------
#  This window is used to select text characters on the input name screen.
#==============================================================================

class Window_NameInput < Window_Base
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :mode
  #--------------------------------------------------------------------------
  # * CONSTANTS
  #--------------------------------------------------------------------------
  ENGLISH_TABLE =
  [
    "A","B","C","D","E",
    "F","G","H","I","J",
    "K","L","M","N","O",
    "P","Q","R","S","T",
    "U","V","W","X","Y",
    "Z","","IJ","Ç","Ñ",
    "0","1","2","3","4",
    "5", "6" ,"7", "8" ,"9",
    "","","","","",
    "a", "b" ,"c", "d" ,"e",
    "f","g","h","i","j",
    "k","l","m","n","o",
    "p","q","r","s","t",
    "u","v","w","x","y",
    "z","","ij","ç","ñ",
    ".",",","?","!","/",
    "\\","<",">",";",":",
    "","", "" , "" , "" ,
    "@","#","$","%","^",
    "&","*","(",")","",
    "[","]","'","\"","~",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "", "" ,"", "" ,"",
    "","","","","",
  ]
  HIRAGANA_TABLE =
  [
    "あ","い","う","え","お",
    "か","き","く","け","こ",
    "さ","し","す","せ","そ",
    "た","ち","つ","て","と",
    "な","に","ぬ","ね","の",
    "は","ひ","ふ","へ","ほ",
    "ま","み","む","め","も",
    "や", "" ,"ゆ", "" ,"よ",
    "ら","り","る","れ","ろ",
    "わ", "" ,"を", "" ,"ん",
    "が","ぎ","ぐ","げ","ご",
    "ざ","じ","ず","ぜ","ぞ",
    "だ","ぢ","づ","で","ど",
    "ば","び","ぶ","べ","ぼ",
    "ぱ","ぴ","ぷ","ぺ","ぽ",
    "ゃ","ゅ","ょ","っ","ゎ",
    "ぁ","ぃ","ぅ","ぇ","ぉ",
    "ー","・", "" , "" , "" ,
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
  ]
  KATAKANA_TABLE =
  [
    "ア","イ","ウ","エ","オ",
    "カ","キ","ク","ケ","コ",
    "サ","シ","ス","セ","ソ",
    "タ","チ","ツ","テ","ト",
    "ナ","ニ","ヌ","ネ","ノ",
    "ハ","ヒ","フ","ヘ","ホ",
    "マ","ミ","ム","メ","モ",
    "ヤ", "" ,"ユ", "" ,"ヨ",
    "ラ","リ","ル","レ","ロ",
    "ワ", "" ,"ヲ", "" ,"ン",
    "ガ","ギ","グ","ゲ","ゴ",
    "ザ","ジ","ズ","ゼ","ゾ",
    "ダ","ヂ","ヅ","デ","ド",
    "バ","ビ","ブ","ベ","ボ",
    "パ","ピ","プ","ペ","ポ",
    "ャ","ュ","ョ","ッ","ヮ",
    "ァ","ィ","ゥ","ェ","ォ",
    "ー","・","ヴ", "" , "" ,
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
  ]
  HANGUL_TABLE =
  [
    "ㄱ","ㄴ","ㄷ","ㄹ","ㅁ",
    "ㅂ","ㅅ","ㅇ","ㅈ","ㅊ",
    "ㅋ","ㅌ","ㅍ","ㅎ","",
    "ㄲ","ㄸ","ㅃ","ㅆ","ㅉ",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "ㅏ","ㅑ","ㅓ","ㅕ","ㅗ",
    "ㅛ", "ㅜ" ,"ㅠ", "ㅡ" ,"ㅣ",
    "ㅐ","ㅔ","ㅒ","ㅖ","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
    "","","","","",
  ]
  ETC_LATIN_LETTER_TABLE= #May require Unicode typeset
  [
    'À','È','Ì','Ò','Ù',
    'Á','É','Í','Ó','Ú',
    'Â','Ê','Î','Ô','Û',
    'Ä','Ë','Ï','Ö','Ü',
    'Ā','Ē','Ī','Ō','Ū',
    'Ă','Ĕ','Ĭ','Ŏ','Ŭ',
    'Ǎ','Ě','Ǐ','Ǒ','Ǔ',
    'Ã','Ẽ','Ĩ','Õ','Ũ',
    "","","","","",
    'à','è','ì','ò','ù',
    'á','é','í','ó','ú',
    'â','ê','î','ô','û',
    'ä','ë','ï','ö','ü',
    'ā','ē','ī','ō','ū',
    'ă','ĕ','ĭ','ŏ','ŭ',
    'ǎ','ě','ǐ','ǒ','ǔ',
    'ã','ẽ','ĩ','õ','ũ',
    "","","","","",
    'Å','Æ','Œ','Ø','Ÿ',
    'å','æ','œ','ø','ÿ',
    'Ő','Ű','Č','Ð','Đ',
    'ő','ű','č','ð','đ',
    "Ş","Ł","Ř","Š","Ž",
    "ş","ł","ř","š","ž",
    "","","","","",
    "","","","","",
    "","","","","¿",
  ]
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(160, 128, 480, 352)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.active = false
    @index = -1
    @mode = 1
    refresh
    update_cursor_rect
  end
  #--------------------------------------------------------------------------
  # * Set Cursor Position
  #     index : new cursor position
  #--------------------------------------------------------------------------
  def index=(value)
    @index = value
    update_cursor_rect
  end
  #--------------------------------------------------------------------------
  # * Set Character Type
  #--------------------------------------------------------------------------
  def character
    if @mode == 1
      return ENGLISH_TABLE[@index]
    elsif @mode == 2
      return HIRAGANA_TABLE[@index]
    elsif @mode == 3
      return KATAKANA_TABLE[@index]
    elsif @mode == 4
      return HANGUL_TABLE[@index]
    else
      return ETC_LATIN_LETTER_TABLE[@index]
    end
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0..134
      x = 4 + i / 5 / 9 * 152 + i % 5 * 28
      y = i / 5 % 9 * 32
      if @mode == 1
        self.contents.font.name = "Arial"
        self.contents.font.size = 24
        self.contents.draw_text(x, y, 28, 32, ENGLISH_TABLE[i], 1)
      elsif @mode == 2
        self.contents.font.name = ["MS Pゴシック",'MS PGothic']
        self.contents.font.size = 22
        self.contents.draw_text(x, y, 28, 32, HIRAGANA_TABLE[i], 1)
      elsif @mode == 3
        self.contents.font.name = ["MS Pゴシック",'MS PGothic']
        self.contents.font.size = 22
        self.contents.draw_text(x, y, 28, 32, KATAKANA_TABLE[i], 1)
      elsif @mode == 4
        self.contents.font.name = ["굴림",'Gulim']
        self.contents.font.size = 22
        self.contents.draw_text(x, y, 28, 32, HANGUL_TABLE[i], 1)
      else
        self.contents.font.name = "Arial"
        self.contents.font.size = 24
        self.contents.draw_text(x, y, 28, 32, ETC_LATIN_LETTER_TABLE[i], 1)
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Update Cursor Rectangle
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if self.active == false
      self.cursor_rect.empty
    else
      x = 4 + @index / 5 / 9 * 152 + @index % 5 * 28
      y = @index / 5 % 9 * 32
      self.cursor_rect.set(x, y, 28, 32)
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    if @index >= 0 && @index <= 134
      if Input.repeat?(Input::RIGHT)
        $game_system.se_play($data_system.cursor_se)
          if @index % 5 == 4
            if @index < 94
              @index += 41
            end
          else
            @index += 1
          end
        end
      if Input.repeat?(Input::LEFT)
        $game_system.se_play($data_system.cursor_se)
          if @index % 5 == 0
            if @index < 45
              self.active = false
              @index = -999
              return
            else
              @index -= 41
            end
          else
            @index -= 1
          end
      end
      if Input.repeat?(Input::DOWN)
        $game_system.se_play($data_system.cursor_se)
        if @index % 45 < 40
          @index += 5
        end
      end
      if Input.repeat?(Input::UP)
        if Input.trigger?(Input::UP) or @index % 45 >= 5
          $game_system.se_play($data_system.cursor_se)
          if @index % 45 >= 5
            @index -= 5
          end
        end
      end
    end
    update_cursor_rect
  end
end



#==============================================================================
# ** Window_NameCommand
#------------------------------------------------------------------------------
#  This window is used to choose the font on the input name screen.
#==============================================================================

class Window_NameCommand < Window_Command
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@item_max
      if i == 1 or i == 2
        font = 1
        self.contents.font.name = ["MS Pゴシック",'MS PGothic']
        self.contents.font.size = 22
      elsif i == 3
        font = 2
        self.contents.font.name = ["굴림",'Gulim']
        self.contents.font.size = 22
      else
        font = 0
        self.contents.font.name = "Arial"
        self.contents.font.size = 24      
      end
      draw_item(i, normal_color, font)
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #     index : item number
  #     color : text color
  #     f     : character fontname
  #--------------------------------------------------------------------------
  def draw_item(index, color, f)
    if f == 0
      self.contents.font.color = color
      self.contents.font.name = "Arial"
      self.contents.font.size = 24
    elsif f == 1
      self.contents.font.name = ["MS Pゴシック",'MS PGothic']
      self.contents.font.size = 22
    else
      self.contents.font.name = ["굴림",'Gulim']
      self.contents.font.size = 22
    end
    rect = Rect.new(4, 32 * index, self.contents.width - 8, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index])
  end
end



#==============================================================================
# ** Scene_Name
#------------------------------------------------------------------------------
#  This class performs name input screen processing.
#==============================================================================

class Scene_Name
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    # Get actor
    @actor = $game_actors[$game_temp.name_actor_id]
    # Make windows
    @edit_window = Window_NameEdit.new(@actor, $game_temp.name_max_char)
    @input_window = Window_NameInput.new
    @alert_window = Window_Base.new(188, 208, 264, 64)
    @alert_window.contents = Bitmap.new(228, 32)
    @alert_window.contents.font.name = "Arial"
    @alert_window.contents.font.size = 24
    @alert_window.contents.draw_text(0, 0, 228, 32, "You must enter a name.")
    @alert_window.z = 1001
    @alert_window.visible = false
    c1 = "English"
    c2 = "ひらがな"
    c3 = "カタカナ"
    c4 = "한글"
    c5 = "Etc"
    c6 = "Space"
    c7 = "Backspace"
    c8 = "Default"
    c9 = "Done"
    commands = [c1, c2, c3, c4, c5, c6, c7, c8, c9]
    @command_window = Window_NameCommand.new(160, commands)
    @input_window.active = false
    @input_window.visible = true
    @command_window.index = 0
    @command_window.visible = true
    @command_window.active = true
    @command_window.x = 0
    @command_window.y = 128
    @command_window.z = 1000
    @alert_count = 0
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end    
    # Prepare for transition
    Graphics.freeze
    # Dispose of windows
    @edit_window.dispose
    @input_window.dispose
    @command_window.dispose
    @alert_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Update windows
    @edit_window.update
    @input_window.update
    @command_window.update
    @alert_window.update
    if @alert_window.visible == true && @alert_count > 0
      @alert_count -= 1
      if @alert_count <= 0
        @command_window.active = true
        @alert_window.visible = false
      end
      return
    end
    if @input_window.active == false
      @command_window.active = true
    end
    if @command_window.active == false
      @input_window.active = true
    end
    if Input.repeat?(Input::B) && @input_window.active == true
      if @edit_window.index == 0
        return
      else
        $game_system.se_play($data_system.cancel_se)
        @edit_window.back
      end
    end
    if Input.repeat?(Input::B) && @command_window.active == true
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    if Input.trigger?(Input::C)
      if @command_window.active == true
        case @command_window.index
        when 0 #Latin Alphabet and Numbers
          $game_system.se_play($data_system.decision_se)
          @input_window.mode = 1
          @input_window.refresh
          @command_window.active = false
          @input_window.active = true
          @input_window.index = 0
          return
        when 1 #Japanese Hiragana
          $game_system.se_play($data_system.decision_se)
          @input_window.mode = 2
          @input_window.refresh
          @command_window.active = false
          @input_window.active = true
          @input_window.index = 0
          return
        when 2 #Japanese Katakana
          $game_system.se_play($data_system.decision_se)
          @input_window.mode = 3
          @input_window.refresh
          @command_window.active = false
          @input_window.active = true
          @input_window.index = 0
          return
        when 3 #Korean
          $game_system.se_play($data_system.decision_se)
          @input_window.mode = 4
          @input_window.refresh
          @command_window.active = false
          @input_window.active = true
          @input_window.index = 0
          return
        when 4 #Latin Alphabet with Diacritics and other
          $game_system.se_play($data_system.decision_se)
          @input_window.mode = 5
          @input_window.refresh
          @command_window.active = false
          @input_window.active = true
          @input_window.index = 0
          return
        when 5
          if @edit_window.index < $game_temp.name_max_char
            $game_system.se_play($data_system.decision_se)
            @edit_window.add(" ")
          else
            $game_system.se_play($data_system.buzzer_se)
          end
          return
        when 6
          $game_system.se_play($data_system.decision_se)
          @edit_window.back
          return
        when 7
          $game_system.se_play($data_system.decision_se)
          @edit_window.restore_default
          return
        when 8
          if @edit_window.name == ""
            $game_system.se_play($data_system.buzzer_se)
            @alert_window.visible = true
            @command_window.active = false
            @alert_count = 60
            return
          end
          $game_system.se_play($data_system.decision_se)
          @actor.name = @edit_window.name
          $game_system.se_play($data_system.decision_se)
          $scene = Scene_Map.new
          return
        end
      end
      if @edit_window.index == $game_temp.name_max_char && 
         @input_window.active == true
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      if @input_window.character == "" && @input_window.active == true
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      if @input_window.character != nil && @input_window.active == true &&
         @edit_window.index <= $game_temp.name_max_char
        $game_system.se_play($data_system.decision_se)
        if @input_window.mode == 1
          @edit_window.char_type[@edit_window.index] = 1
        else
          @edit_window.char_type[@edit_window.index] = 2
        end
        @edit_window.add(@input_window.character)
      end
      return
    end
  end
end







List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6155
81 기타 [Game_Actor] 게이지바 표시 스크립트 8 file - 하늘 - 2009.08.03 4174
80 전투 ATB시스템 입니다. [스샷 첨부] 17 백호 2009.02.22 4182
79 미니맵 [헬악이님 제보] 단축키 미니맵 만들기!!| 13 file 아방스 2007.11.09 4191
78 HUD 맵 이름 표시와 미니맵을 같이하자 8 file 뮤리온。 2011.10.08 4193
77 이름입력 한글이름 입력기 스크립트 14 백호 2009.02.22 4207
76 메뉴 메뉴를 바꾸는 스크립트 14 №1 2012.08.04 4209
75 메인화면에 별똥별 효과 6 file 아방스 2007.11.09 4218
74 기타 [게이지바]게이지바 스크립트 2.5 (실용적?) 17 file 코아 코스튬 2010.12.05 4219
73 스킬 스킬샵 스크립트 16 file 독도2005 2009.08.24 4220
72 전투 사이드뷰 전투(보행그래픽) 15 file 백호 2009.02.21 4244
71 기타 말풍선 스크립트. 62 file 『동그라미』♥ 2010.02.04 4254
70 이동 및 탈것 아하! 그렇구나의 3D 신기술 체험 3 14 아하!잘봤어요. 2010.02.28 4258
69 타이틀/게임오버 [펌]색다른 게임오버 스크립트 14 file 또라에몽 2010.05.09 4265
68 액알입니다.정말 확신함 12 dkqkfsoatp 2007.12.13 4266
67 기타 XP 각종 스크립트입니다. 36 file 쿠도신이치 2009.04.26 4267
66 HUD 캐릭터 아래 SP,HP표시해주는 스크립트 33 file 김!제스! 2010.08.04 4271
65 온라인 온라인스크립트 실행방법 13 file 백호 2009.02.22 4275
64 기타 쓸만한스크립트61개포함 28 file 궭크이 2012.01.09 4298
63 키입력 한글입력기 6 백호 2009.02.22 4302
62 메뉴 기본메뉴 뜯어고친것. (스샷추가) 6 file 백호 2009.02.22 4315
Board Pagination Prev 1 ... 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 Next
/ 52