기타
2011.07.16 21:16

이름입력 스크립트

조회 수 2208 추천 수 0 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form
라이센스 기타 라이센스
출처 아방스
강의종류 강의 아님
사용/적용순서 스크립트 에디터에서
Main 위에 스크립트를 새로 만들어
적힌 스크립트를 그대로 붙여넣기 하면 됩니다.

그리고 이름입력의 처리를 하면 입력 방식이 바뀝니다.

이름입력 스크립트 입니다

자음과 모음을 따로 선택해서 입력하는 방식입니다.

 

 

 

 

 

 

 

 

 

 

 

 

#==============================================================================
# ■ Name Window Setting
#==============================================================================
module NWS
 
  BACKGROUND = true  #배경의 표시여부(true: 표시, false: 표시X)
  OPACITY = 200 #윈도우의 투명도(0~255)
 
  #캐릭터 그림과 이름이 표시되는 위쪽의 윈도우 부분
  NEW_X = 136 #x좌표
  NEW_Y = 72 # Y좌표
 
  #숫자, 자음, 모음 각각의 요소가 표시되는 아래쪽의 윈도우 부분
  NIW_X = 136 #x좌표
  NIW_Y = 200 # Y좌표
 
  #숫자, 자음, 모음 각각의 요소
  #순서를 바꿔도 괜찮고, ABCD라던가 새롭게 추가해도 괜찮습니다.
  #다만 바뀐것과 같게 아래의 VER_LINE, HOR_LINE, CONFIRM 세개도
  #수정해 줍시다.
  TABLE = [ '1','2','3','4','5', '6','7','8','9','0',
              'ㅂ','ㅈ','ㄷ','ㄱ','ㅅ', 'ㅛ','ㅕ','ㅑ','ㅐ','ㅔ',
              'ㅃ','ㅉ','ㄸ','ㄲ','ㅆ',  '','','','ㅒ','ㅖ',
              'ㅁ','ㄴ','ㅇ','ㄹ','ㅎ', 'ㅗ','ㅓ','ㅏ','ㅣ','',
              'ㅋ','ㅌ','ㅊ','ㅍ','','ㅠ','ㅜ','ㅡ','','결정']
  VER_LINE = 5 #세로의 갯수
  HOR_LINE = 10 #가로의 갯수
  CONFIRM = 49 #'결정'의 위치
 
end
#==============================================================================
# ■ Window_NameEdit
#==============================================================================
class Window_NameEdit < Window_Base
#---------------------------------------------------------------------------
  CONSO = ["ㄱ","ㄲ","ㄳ","ㄴ","ㄵ","ㄶ","ㄷ","ㄸ","ㄹ","ㄺ","ㄻ","ㄼ","ㄽ","ㄾ","ㄿ","ㅀ","ㅁ","ㅂ","ㅃ","ㅄ","ㅅ","ㅆ","ㅇ","ㅈ","ㅉ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"]
  HEAD = ["ㄱ","ㄲ","ㄴ","ㄷ","ㄸ","ㄹ","ㅁ","ㅂ","ㅃ","ㅅ","ㅆ","ㅇ","ㅈ","ㅉ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"]
  TABLE = ["ㄱ","ㄲ","ㄳ","ㄴ","ㄵ","ㄶ","ㄷ","ㄹ","ㄺ","ㄻ","ㄼ","ㄽ","ㄾ","ㄿ","ㅀ","ㅁ","ㅂ","ㅄ","ㅅ","ㅆ","ㅇ","ㅈ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"]
  TABLE_SIDE = ["ㄱ","ㄴ","ㄹ","ㅂ"]
  ANOTHER_TABLE_SIDE = [[nil,"ㅅ"],["ㅈ","ㅎ"],["ㄱ","ㅁ","ㅂ","ㅅ","ㅌ","ㅍ","ㅎ"],[nil,"ㅅ"]]
  VOWEL = ["ㅏ","ㅐ","ㅑ","ㅒ","ㅓ","ㅔ","ㅕ","ㅖ","ㅗ","ㅘ","ㅙ","ㅚ","ㅛ","ㅜ","ㅝ","ㅞ","ㅟ","ㅠ","ㅡ","ㅢ","ㅣ"]
  COM_VOWEL = ["ㅗ","ㅜ","ㅡ"]
  ANOTHER_COM_VOWEL = [["ㅏ","ㅐ","ㅣ"],["ㅓ","ㅔ","ㅣ"],"ㅣ"]
#--------------------------------------------------------------------------
  attr_reader   :name                     # 이름
  attr_reader   :prompt                     # 프롬프트
  attr_reader   :index                     # 커서 위치
  attr_reader   :max_char               # 최대 문자수
#--------------------------------------------------------------------------
  def initialize(actor, max_char)
    super(NWS::NEW_X, NWS::NEW_Y, (NWS::HOR_LINE + 1) * 32, 128)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = NWS::OPACITY
    @actor = actor
    @prompt = []
    @max_char = max_char
    name_array = actor.name.split(//)[0...@max_char]
    @name = []
    @default_name = []
    for i in 0...name_array.size
      @name << name_array[i]
      @default_name << name_array[i]
    end
    self.active = false
    refresh
  end
#--------------------------------------------------------------------------
  def restore_default
    @name = @default_name.dup
    @prompt = []
    refresh
  end
#--------------------------------------------------------------------------
  def add(character)
    @prompt << character
    refresh
  end
#--------------------------------------------------------------------------
  def back
    @prompt == [] ? @name.pop : @prompt.pop
    refresh
  end
#--------------------------------------------------------------------------
  def item_rect(index)
    rect = Rect.new(0, 0, 0, 0)
    rect.x = 188 - (@max_char + 1) * 12 + index * 32
    rect.y = 32
    rect.width = 32
    rect.height = 32
    return rect
  end
#--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    draw_actor_graphic(@actor, 60, 70)
    name = prompt_to_letter
    if @name.size == @max_char
          @prompt = []
          name = ""
          @index = @name.size - 1
    else
          @index = @name.size
    end
    for i in 0...@name.size
      self.contents.draw_text(item_rect(i), @name[i], 1)
    end
    self.contents.draw_text(item_rect(@name.size), name, 1)
    update_cursor
  end
#--------------------------------------------------------------------------
  def update_cursor
    self.cursor_rect = item_rect(@index)
  end
#--------------------------------------------------------------------------
  def update
    super
    update_cursor
  end
 
#============================================================================
# ■ prompt_to_letter, 1st~5th phase, where?(array = from, c = what)
#----------------------------------------------------------------------------
# 이 이하는 글자를 조합하는 내용입니다.
# 다른 부분은 관계없지만, 이 이하의 부분은 수정하지 않길 권장합니다.
# 일부 폰트에서 특정 문자가 표현되지 않습니다. (삃,쮃 등등..)
#
# 2009. 3. 18 by Heircoss
#============================================================================
  def prompt_to_letter
    size = @prompt.size
    case size
    when 0
          return ""
    when 1
          return @prompt[0]
    when 2
          first_phase
    when 3
          second_phase
    when 4
          third_phase
    when 5
          fourth_phase
    when 6
          fifth_phase
    end
  end
  def first_phase
    if CONSO.include?(@prompt[0])
          if CONSO.include?(@prompt[1])
                c0, c1 = conso_plus_conso
          else
                return conso_plus_vowel
          end
    else
          c0, c1 = vowel_plus_vowel
    end
    if c1 == nil
          return c0
    else
          @name << @prompt.shift
    end                 
    return @prompt[0]
  end
  def second_phase
    if CONSO.include?(@prompt[0])
          if CONSO.include?(@prompt[1])
                if CONSO.include?(@prompt[2])
                      @name << conso_plus_conso(@prompt.shift, @prompt.shift)
                else
                      @name << @prompt.shift
                      return conso_plus_vowel
                end
          else
                if TABLE.include?(@prompt[2])
                      return conso_plus_vowel_plus_table
                else
                      c0, c1 = vowel_plus_vowel(@prompt[1], @prompt[2])
                      if c1 == nil
                            return conso_plus_vowel(@prompt[0],c0)
                      else
                            @name << conso_plus_vowel(@prompt.shift, @prompt.shift)
                      end
                end
          end
    else
          @name << vowel_plus_vowel(@prompt.shift, @prompt.shift)
    end
    return @prompt[0]
  end
  def third_phase
    if CONSO.include?(@prompt[2])
          if CONSO.include?(@prompt[3])
                c0, c1 = conso_plus_conso(@prompt[2], @prompt[3])
                if c1 == nil
                      conso, vowel, table = @prompt[0],@prompt[1],c0
                      return conso_plus_vowel_plus_table(conso, vowel, table)
                else
                      conso, vowel, table = @prompt.shift, @prompt.shift, @prompt.shift
                      @name << conso_plus_vowel_plus_table(conso, vowel, table)
                end         
          else
                conso, vowel = @prompt.shift, @prompt.shift
                @name << conso_plus_vowel(conso, vowel)
                return  conso_plus_vowel
          end
    else
          if TABLE.include?(@prompt[3])
                conso = @prompt[0]
                vowel = vowel_plus_vowel(@prompt[1], @prompt[2])
                table = @prompt[3]
                return conso_plus_vowel_plus_table(conso, vowel, table)
          else
                conso = @prompt.shift
                vowel = vowel_plus_vowel(@prompt.shift, @prompt.shift)
                @name << conso_plus_vowel(conso, vowel)
          end
    end
    return @prompt[0]
  end
  def fourth_phase
    if CONSO.include?(@prompt[4])
          if CONSO.include?(@prompt[2])
                conso = @prompt.shift
                vowel = @prompt.shift
                table = conso_plus_conso(@prompt.shift,@prompt.shift)
                @name << conso_plus_vowel_plus_table(conso, vowel, table)
          else
                c0, c1 = conso_plus_conso(@prompt[3], @prompt[4])
                if c1 == nil
                      conso = @prompt[0]
                      vowel = vowel_plus_vowel(@prompt[1], @prompt[2])
                      table =  c0
                      return conso_plus_vowel_plus_table(conso, vowel, table)
                else
                      conso = @prompt.shift
                      vowel = vowel_plus_vowel(@prompt.shift, @prompt.shift)
                      table = @prompt.shift
                      @name << conso_plus_vowel_plus_table(conso, vowel, table)
                end
          end
    else
          @name << second_phase
          @prompt = @prompt[3..4]
          return first_phase
    end
    return @prompt[0] 
  end
  def fifth_phase
    if CONSO.include?(@prompt[5])
      conso = @prompt.shift
      vowel = vowel_plus_vowel(@prompt.shift, @prompt.shift)
      table = conso_plus_conso(@prompt.shift, @prompt.shift)
      @name << conso_plus_vowel_plus_table(conso, vowel, table)
    else
      @name << third_phase
      @prompt = @prompt[4..5]
      return first_phase
    end
    return @prompt[0]
  end
  def conso_plus_conso(c0 = @prompt[0], c1 = @prompt[1])
    index0 = where?(TABLE_SIDE,c0)
    if index0 != nil
          index1 = where?(ANOTHER_TABLE_SIDE[index0],c1)
          if index1 != nil
                index0 = where?(CONSO, c0)
                return CONSO[index0 + index1 + 1]
          end
    end
    return c0, c1
  end
  def vowel_plus_vowel(c0 = @prompt[0], c1 = @prompt[1])
    index0 = where?(COM_VOWEL,c0)
    if index0 != nil
          index1 = where?(ANOTHER_COM_VOWEL[index0],c1)
          if index1 != nil
                index0 = where?(VOWEL, c0)
                return VOWEL[index0 + index1 + 1]
          end
    end
    return c0, c1                
  end                 
  def conso_plus_vowel(c0 = @prompt[0], c1 = @prompt[1])
    index0 = where?(HEAD,c0)
    index1 = where?(VOWEL,c1)                       
    return [44032 + (588 * index0) + (28 * index1)].pack('U*')
  end
  def conso_plus_vowel_plus_table(c0 = @prompt[0], c1 = @prompt[1], c2 = @prompt[2])
    index0 = where?(HEAD,c0)
    index1 = where?(VOWEL,c1)
    index2 = where?(TABLE,c2)
    return [44032 + (588 * index0) + (28 * index1) + index2 + 1].pack('U*')
  end
  def where?(array, c)
    if array.class != Array && array == c
          return 0
    else
          array.each_with_index do |item, index|
                return index if item == c
          end
    end
    return nil
  end           
end
#============================================================================
# ■ 여기까지
#============================================================================

#============================================================================
# ■ Window_NameInput
#============================================================================
class Window_NameInput < Window_Base
#--------------------------------------------------------------------------
  def initialize
    super(NWS::NIW_X, NWS::NIW_Y, (NWS::HOR_LINE + 1) * 32, (NWS::VER_LINE + 1) * 32 )
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = NWS::OPACITY
    @index = 0
    refresh
    update_cursor
  end
#--------------------------------------------------------------------------
  def character
    return NWS::TABLE[@index]
  end
#--------------------------------------------------------------------------
  def is_decision
    return (@index == NWS::CONFIRM)
  end
#--------------------------------------------------------------------------
  def item_rect(index)
    rect = Rect.new(0, 0, 0, 0)
    rect.x = index % NWS::HOR_LINE * 32
    rect.y = index / NWS::HOR_LINE * 32
    rect.width = 32
    rect.height = 32
    return rect
  end
#--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...NWS::TABLE.size
      rect = item_rect(i)
      rect.x += 2
      rect.width -= 4
      self.contents.draw_text(rect, NWS::TABLE[i], 1)
    end
  end
#--------------------------------------------------------------------------
  def update_cursor
    self.cursor_rect = item_rect(@index)
  end
#--------------------------------------------------------------------------
  def cursor_down(wrap)
    if @index < NWS::VER_LINE * NWS::HOR_LINE - NWS::HOR_LINE
      @index += NWS::HOR_LINE
    elsif wrap
      @index -= NWS::VER_LINE * NWS::HOR_LINE - NWS::HOR_LINE
    end
  end
#--------------------------------------------------------------------------
  def cursor_up(wrap)
    if @index >= NWS::HOR_LINE
      @index -= NWS::HOR_LINE
    elsif wrap
      @index += NWS::VER_LINE * NWS::HOR_LINE - NWS::HOR_LINE
    end
  end
#--------------------------------------------------------------------------
  def cursor_right(wrap)
    if @index % NWS::HOR_LINE < (NWS::HOR_LINE - 1)
      @index += 1
    elsif wrap
      @index -= (NWS::HOR_LINE - 1)
    end
  end
#--------------------------------------------------------------------------
  def cursor_left(wrap)
    if @index % NWS::HOR_LINE > 0
      @index -= 1
    elsif wrap
      @index += (NWS::HOR_LINE - 1)
    end
  end
#--------------------------------------------------------------------------
  def cursor_to_decision
    @index = NWS::CONFIRM
  end
#--------------------------------------------------------------------------
  def update
    super
    last_mode = @mode
    last_index = @index
    if Input.repeat?(Input::DOWN)
      cursor_down(Input.trigger?(Input::DOWN))
    end
    if Input.repeat?(Input::UP)
      cursor_up(Input.trigger?(Input::UP))
    end
    if Input.repeat?(Input::RIGHT)
      cursor_right(Input.trigger?(Input::RIGHT))
    end
    if Input.repeat?(Input::LEFT)
      cursor_left(Input.trigger?(Input::LEFT))
    end
    if Input.trigger?(Input::A)
      cursor_to_decision
    end
    if @index != last_index
      $game_system.se_play($data_system.cursor_se)
    end
    update_cursor
  end
end

#===========================================================================
# ■ Scene_Name
#===========================================================================
class Scene_Name
#---------------------------------------------------------------------------
  def main
    @actor = $game_actors[$game_temp.name_actor_id]
    back = Spriteset_Map.new if NWS::BACKGROUND == true
    @edit_window = Window_NameEdit.new(@actor, $game_temp.name_max_char)
    @input_window = Window_NameInput.new
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    back.dispose if NWS::BACKGROUND == true
    @edit_window.dispose
    @input_window.dispose
  end
#--------------------------------------------------------------------------
  def terminate
    @menuback_sprite.dispose
    @edit_window.dispose
    @input_window.dispose
  end
#--------------------------------------------------------------------------
  def return_scene
    $scene = Scene_Map.new
  end
#--------------------------------------------------------------------------
  def update
    @edit_window.update
    @input_window.update
    if Input.repeat?(Input::B)
      if @edit_window.name == [] && @edit_window.prompt == []
        $game_system.se_play($data_system.buzzer_se)
      else
        $game_system.se_play($data_system.cancel_se)
        @edit_window.back
      end
    elsif Input.trigger?(Input::C)
      if @input_window.is_decision
        if @edit_window.name.size == 0 && @edit_window.prompt.size == 0        # 이름이 비어있는 경우
          @edit_window.restore_default
          if @edit_window.name.size == 0 && @edit_window.prompt.size == 0
            $game_system.se_play($data_system.buzzer_se)
          else
            $game_system.se_play($data_system.decision_se)
          end
        else
          $game_system.se_play($data_system.decision_se)
          name = @edit_window.prompt_to_letter
          name = @edit_window.name.to_s + name
          @actor.name = name
          return_scene
        end
      elsif @input_window.character != "" && @input_window.character != nil
        if @edit_window.name.size > @edit_window.max_char
          $game_system.se_play($data_system.buzzer_se)
        else
          $game_system.se_play($data_system.decision_se)
          @edit_window.add(@input_window.character)       
        end
      end
    end
  end
end


  1. 일본어 스크립트를 번역하기 좋은 번역사이트 두곳입니다

    Date2010.01.09 Category공지사항 Byruby Views22078 Votes0
    read more
  2. 스크립트 게시판 관리자' ruby ' 입니다

    Date2010.01.09 Category공지사항 Byruby Views20725 Votes0
    read more
  3. 일본 스크립트/소스 공유 포럼

    Date2010.01.05 Category공지사항 By니오티 Views22249 Votes0
    read more
  4. 게이지바 스크립트!! 최고!!

    Date2011.08.08 Category기타 By코아 코스튬 Views4237 Votes0
    Read More
  5. 이름입력 스크립트

    Date2011.07.16 Category기타 By닉네임이없습니다 Views2208 Votes0
    Read More
  6. 중복일것 같은데;; [한글 이름 입력]

    Date2011.01.05 Category기타 By꼬마쟁이 Views4641 Votes0
    Read More
  7. 상태창표시 스크립투 Ver 6.0

    Date2010.09.21 Category기타 By코아 코스튬 Views2412 Votes2
    Read More
  8. 3d 스크립트 (적용시 바로 실행가능&암호걸림)

    Date2010.06.04 Category기타 Bykjs Views4065 Votes0
    Read More
  9. Staff Roll

    Date2010.03.04 Category기타 By허걱 Views7486 Votes0
    Read More
  10. 게임 화면에 좌표 띄우기

    Date2010.01.25 Category기타 Bywindshy Views1768 Votes1
    Read More
  11. 디버깅 화면 재 구성

    Date2010.01.05 Category기타 By루시아스 Views1834 Votes0
    Read More
  12. 일어 스크립트 한글화 방법 안내

    Date2007.02.01 Category기타 By니오티 Views2572 Votes4
    Read More
  13. 어떤님이 부탁하신 온라인 같은 hud입니다

    Date2007.10.19 Category기타 By루비 Views2593 Votes2
    Read More
  14. 더욱더 간편하게! 에메스엔의 귀차니즘 탈출!

    Date2007.02.20 Category기타 By샤이닉 Views2357 Votes2
    Read More
  15. 몬스터 도감

    Date2007.02.01 Category기타 By니오티 Views2870 Votes3
    Read More
  16. 돈맡기기 시스템

    Date2007.01.31 Category기타 By히카루 Views3325 Votes2
    Read More
  17. 한글입력기

    Date2007.01.31 Category기타 By히카루 Views14278 Votes1
    Read More
  18. 레벨과 능력치 9999까지 만들기

    Date2007.01.31 Category기타 Bywindshy Views2184 Votes0
    Read More
  19. 아이템 보관소 스크립트 (KGC펌)

    Date2005.12.11 Category기타 Byケロロ 님의 ツク-ル Views2673 Votes5
    Read More
Board Pagination Prev 1 Next
/ 1

Copyright ⓒ Nioting All Rights Reserved. (since 1999)    개인정보
        

Fatal error: Cannot access property sessionController::$lifetime in /web/old/xe/modules/session/session.controller.php on line 45