질문과 답변

Extra Form
종류 에러 해결

 

제목대로 어제까지만 해도 잘 쓰고 있었는데 오늘 뭐 건드리지도 않았는데 오류가 나서 테스트 플레이를 할 수가 없어졌습니다.

 

오류 내용은

----------------------------

Script '전체키 스크립트(허걱)' line 315: TypeError occurred.

can't convert Symbol into Integer

----------------------------

 

입니다. 뭔가 심볼이라는 게 잘못된 것 같은데 제가 스크립트 지식이 없어서 도저히 고칠 수가 없었습니다.

 

 

 

 

 

문제가 있다는 315 라인은 이 부분입니다.

 #--------------------------------------------------
  # Trigger - 키를 눌렀는지 확인
  #--------------------------------------------------
  def self.trigger?(key)
    key = adjust_key(key)
    key.size.times { |i| return true if @@key_count[key[i]] == 1 }
    return false
  end

 

 

 

 

 

 

아래에 스크립트 전체 내용을 올리니, 부디 문제점을 아시는 분이 계시다면 도와주시길 바랍니다.

 

 

-------------------------------

=begin

Input Ex System - 전체키 입력 확장 by 허걱

Input.???([key])

ex> Input.release?(Keys::K)  #  K 버튼을 뗀 순간 true 를 반환.


press?(key)           # 키가 눌려져 있는 상태인지 확인
trigger?(key)         # 키를 눌렀는지 확인
release?(key)         # 키를 뗏는지 확인
repeat?(key)          # 키가 밀리는지 확인

any_key?              # 아무키나 눌렸는지 확인

get_key               # 눌려진 키의 배열을 취득
get_press_count(key)  # 키가 눌려져 있는 시간 취득
get_free_count        # 아무키도 안눌렸을 때의 경과 시간

dir4                  # 4 방향키 눌림 확인 - 0, 2, 4, 6, 8
dir8                  # 8 방향키 눌림 확인 - 0, 1, 2, 3, 4, 6, 7, 8, 9

upcase?               # 대문자 상태 확인


=end


#--------------------------------------------------
# 설정
#--------------------------------------------------
module InoutExConfig
  REPEAT_PREPARE = 30   # repeat 인식 시간
  REPEAT_DELAY   = 5   # repeat 인식 간격
  DEFAULT_KOREAN = true # 기본 한영상태 true 일 경우 한글/ false 일 경우 영어
end

#--------------------------------------------------
# 키 코드
#--------------------------------------------------
module Keys
  MouseL = 1
  MouseR = 2
  MouseM = 4
 
  Cancel = 3  # Ctrl + Break
 
  Back = 8
  Tab = 9
  Clear = 12  # NumLock이 꺼져 있을때의 KEY_PAD_5
  Enter = 13
  Shift = 16
  Ctrl = 17
  Alt = 18
  Pause = 19
  CapsLock = 20
  Korean = 21
  Chinese = 25
  Esc = 27
  Space = 32
  PGUP = 33
  PGDN = 34
  End = 35
  Home = 36
  Left = 37
  Up = 38
  Right = 39
  Down = 40
  Select = 41
  Execute = 43
  PrintScreen = 44
  Insert = 45
  Delete = 46
  Help = 47
 
  Num0 = 48
  Num1 = 49
  Num2 = 50
  Num3 = 51
  Num4 = 52
  Num5 = 53
  Num6 = 54
  Num7 = 55
  Num8 = 56
  Num9 = 57
 
  A = 65
  B = 66
  C = 67
  D = 68
  E = 69
  F = 70
  G = 71
  H = 72
  I = 73
  J = 74
  K = 75
  L = 76
  M = 77
  N = 78
  O = 79
  P = 80
  Q = 81
  R = 82
  S = 83
  T = 84
  U = 85
  V = 86
  W = 87
  X = 88
  Y = 89
  Z = 90
 
  LWin = 91
  RWin = 92
  Apps = 93
 
  Pad0 = 96
  Pad1 = 97
  Pad2 = 98
  Pad3 = 99
  Pad4 = 100
  Pad5 = 101
  Pad6 = 102
  Pad7 = 103
  Pad8 = 104
  Pad9 = 105
  Multiply = 106
  Add = 107
  Separator = 108
  Subtract = 109
  Decimal = 110
  Divide = 111
 
  F1 = 112
  F2 = 113
  F3 = 114
  F4 = 115
  F5 = 116
  F6 = 117
  F7 = 118
  F8 = 119
  F9 = 120
  F10 = 121
  F11 = 122
  F12 = 123
 
  NumLock = 144
  ScrollLock = 145
 
  LShift = 160
  RShift = 161
  LCtrl = 162
  RCtrl = 163
  LAlt = 164
  RAlt = 165
 
  Collon = 186
  Equal = 187
  Comma = 188
  Underscore = 189
  Dot = 190
  Backslash = 191
  Accent = 192
  Query = 193
  Float = 194
  LHook = 219
  RBar = 220
  RHook = 221
  Quote = 222
  LBar   = 226
 
  DEFAULT_KEY = {
  :LEFT => Left,
  :UP => Up,
  :RIGHT => Right,
  :DOWN => Down,
  :A => [LShift, RShift],
  :B => [Esc, Pad0, X],
  :C => [Enter, Space, Z],
  :X => A,
  :Y => S,
  :Z => D,
  :L => Q,
  :R => W,
  :SHIFT => Shift,
  :CTRL => Ctrl,
  :ALT => Alt,
  :F5 => F5,
  :F6 => F6,
  :F7 => F7,
  :F8 => F8,
  :F9 => F9,
  }
 
  Names = {
  1=>['MouseL', 'Mouse Left Button'],
  2=>['MouseR', 'Mouse Right Button'],
  3=>['Cancel'],
  4=>['MouseM', 'Mouse Middle Button'],
  8=>['Back'], 9=>['Tab'], 12=>['Clear'], 13=>['Enter'],
  16=>['Shift'], 17=>['Ctrl'], 18=>['Alt'], 19=>['Pause'], 20=>['CapsLock'],
  27=>['Esc'], 32=>[' ', 'Space'], 33=>['PGUP', 'Page Up'], 34=>['PGDN', 'Page Down'],
  35=>['End'], 36=>['Home'], 37=>['Left'], 38=>['Up'], 39=>['Right'],
  40=>['Down'], 41=>['Select'], 43=>['Execute'], 44=>['PrintScreen'],
  45=>['Insert'], 46=>['Delete'], 47=>['Help'],
  48=>['0', ')'], 49=>['1', '!'], 50=>['2', '@'], 51=>['3', '#'], 52=>['4', '$'],
  53=>['5', '%'], 54=>['6', '^'], 55=>['7', '&'], 56=>['8', '*'], 57=>['9', '('],
  65=>['a', 'A'], 66=>['b', 'B'], 67=>['c', 'C'], 68=>['d', 'D'], 69=>['e', 'E'],
  70=>['f', 'F'], 71=>['g', 'G'], 72=>['h', 'H'], 73=>['i', 'I'], 74=>['j', 'J'],
  75=>['k', 'K'], 76=>['l', 'L'], 77=>['m', 'M'], 78=>['n', 'N'], 79=>['o', 'O'],
  80=>['p', 'P'], 81=>['q', 'Q'], 82=>['r', 'R'], 83=>['s', 'S'], 84=>['t', 'T'],
  85=>['u', 'U'], 86=>['v', 'V'], 87=>['w', 'W'], 88=>['x', 'X'], 89=>['y', 'Y'],
  90=>['z', 'Z'],
  91=>['LWin'], 92=>['RWin'], 93=>['Apps'],
  96=>['0'], 97=>['1'], 98=>['2'], 99=>['3'], 100=>['4'],
  101=>['5'], 102=>['6'], 103=>['7'], 104=>['8'], 105=>['9'],
  106=>['*'], 107=>['+'], 108=>['Separator'], 109=>['-'], 110=>['.'], 111=>['/'],
  112=>['F1'], 113=>['F2'], 114=>['F3'], 115=>['F4'], 116=>['F5'], 117=>['F6'],
  118=>['F7'], 119=>['F8'], 120=>['F9'], 121=>['F10'], 122=>['F11'], 123=>['F12'],
  144=>['NumLock'], 145=>['ScrollLock'], 160=>['LShift'], 161=>['RShift'],
  162=>['LCtrl'], 163=>['RCtrl'], 164=>['LAlt'], 165=>['RAlt'],
  186=>[';', ':'], 187=>['=', '+'], 188=>[',', '<'], 189=>['-', '_'],
  190=>['.', '>'], 191=>['/', '?'], 192=>['`', '~'], 193=>['Query'],
  194=>['Float'], 219=>['[', '{'], 220=>['\\', '|'], 221=>[']', '}'],
  222=>['\'', '"'], 226=>['LBar']
  }
 
  def self.name(key, upcase = Input.upcase?)
    return "" unless Names.keys.include?(key)
    return Names[key][1] unless Names[key][1].nil? if upcase
    return Names[key][0]
  end
 
end


module Input
  #--------------------------------------------------
  # API
  #--------------------------------------------------
  @@key_state = Win32API.new("user32", "GetAsyncKeyState", "i", "i")
  @@cap_state = Win32API.new("user32", "GetKeyState", "i", "i")

  #--------------------------------------------------
  # Variables
  #--------------------------------------------------
  @@korean = InoutExConfig::DEFAULT_KOREAN
 
  MAXIMUM_SIZE = 256
  @@key_count = [0]*MAXIMUM_SIZE
  @@key_free_count = 0
 
  REPEAT_PREPARE = InoutExConfig::REPEAT_PREPARE
  REPEAT_DELAY = InoutExConfig::REPEAT_DELAY


  #--------------------------------------------------
  # Check_Key
  #--------------------------------------------------
  def self.check_key(key)
    r1 = (@@key_state.call(key) & 0x8000 == 0x8000)
    r2 = (@@key_state.call(key) & 0x8001 == 0x8001)
    return (r1 || r2)
  end
 
  #--------------------------------------------------
  # Check_Upcase
  #--------------------------------------------------
  def self.upcase?
    return ((@@cap_state.call(Keys::CapsLock) == 1) ^ press?(:SHIFT))
  end
 
  #--------------------------------------------------
  # Update
  #--------------------------------------------------
  def self.update
    key_free = true
    MAXIMUM_SIZE.times {|key|
    if check_key(key)
      @@key_count[key] += 1
      key_free = false
    elsif @@key_count[key] > 0
      @@key_count[key] = -1
    else
      @@key_count[key] = 0
    end
    }
    key_free ? @@key_free_count += 1 : @@key_free_count = 0
  end
 
  #--------------------------------------------------
  # Press - 키가 눌려져 있는 상태인지 확인
  #--------------------------------------------------
  def self.press?(key)
    key = adjust_key(key)
    key.size.times { |i| return true if @@key_count[key[i]] >= 1 }
    return false
  end
 
  #--------------------------------------------------
  # Trigger - 키를 눌렀는지 확인
  #--------------------------------------------------
  def self.trigger?(key)
    key = adjust_key(key)
    key.size.times { |i| return true if @@key_count[key[i]] == 1 }
    return false
  end
 
  #--------------------------------------------------
  # Release - 키를 뗏는지 확인
  #--------------------------------------------------
  def self.release?(key)
    key = adjust_key(key)
    key.size.times { |i| return true if @@key_count[key[i]] == -1 }
    return false
  end
 
  #--------------------------------------------------
  # Repeat - 키가 밀리는지 확인
  # ratio : 스크립트와 이벤트의 키 인식시간 오차 수정용
  #         스크립트상에서 repeat? 사용할 때 : ratio => 30
  #--------------------------------------------------
  def self.repeat?(key, ratio = 1)
    key = adjust_key(key)
    key.size.times { |i| return true if check_repeat?(key[i], ratio) }
    return false
  end
 
  #--------------------------------------------------
  # Check_Repeat
  #--------------------------------------------------
  def self.check_repeat?(key, ratio)
    return true if trigger?(key)
    return false if @@key_count[key] < (REPEAT_PREPARE * ratio)
    return @@key_count[key] % (REPEAT_DELAY * ratio) == 0
  end
 
  #--------------------------------------------------
  # GetPressCount - 키가 눌려져 있는 시간 취득
  #--------------------------------------------------
  def self.get_press_count(key, maximum = true)
    key = adjust_key(key)
    result = @@key_count[key[0]]
    key.size.times {|i|
    if maximum
      result = [result, @@key_count[key[i]]].max
    else
      result = [result, @@key_count[key[i]]].min
    end
    }
    return [result, 0].max
  end
 
  #--------------------------------------------------
  # Adjust_Key
  #--------------------------------------------------
  def self.adjust_key(key)
    if Keys::DEFAULT_KEY.keys.include?(key)
      key = Keys::DEFAULT_KEY[key]
    end
    return [key] unless key.is_a?(Array)
    return key
  end
 
  #--------------------------------------------------
  # GetFreeCount - 아무키도 안눌렸을 때의 경과 시간
  #--------------------------------------------------
  def self.get_free_count
    return @@key_free_count
  end
 
  #--------------------------------------------------
  # GetKey - 눌려진 키의 배열 취득
  #--------------------------------------------------
  def self.get_key
    result = []
    MAXIMUM_SIZE.times {|i| result.push(i) if @@key_count[i] > 0 }
    return result
  end
 
  #--------------------------------------------------
  # AnyKey? - 키가 눌렸는지 확인
  #--------------------------------------------------
  def self.any_key?
    return (get_free_count == 0)
  end
 
  #--------------------------------------------------
  # Dir4
  #--------------------------------------------------
  def self.dir4
    down = 1;    left = 2;    right = 4;    up = 8
    return 2 if dir & down == down
    return 4 if dir & left == left
    return 6 if dir & right == right
    return 8 if dir & up == up
    return 0
  end


  #--------------------------------------------------
  # Dir8
  #--------------------------------------------------
  def self.dir8
    down = 1;    left = 2;    right = 4;    up = 8
    case dir
    when down; return 2
    when left; return 4
    when right; return 6
    when up; return 8
    when down+left; return 1
    when down+right; return 3
    when up+left; return 7
    when up+right; return 9
    else; return 0
    end
  end
 
  #--------------------------------------------------
  # Dir
  #--------------------------------------------------
  def self.dir
    result = 0
    result += 1 if press?(Keys::Down)
    result += 2 if press?(Keys::Left)
    result += 4 if press?(Keys::Right)
    result += 8 if press?(Keys::Up)
    return result
  end
 
  #--------------------------------------------------------------------------
  # ●
  #--------------------------------------------------------------------------
  def self.is_korean?
    return @@korean
  end
 
  #--------------------------------------------------------------------------
  # ●
  #--------------------------------------------------------------------------
  def self.toggle_korean
    @@korean = !@@korean
  end
end


class Game_Interpreter
  #--------------------------------------------------------------------------
  # ●
  #--------------------------------------------------------------------------
  alias input_ex_command_111 command_111
  def command_111
    @params[1] = adjust_original_key(@params[1]) if @params[0] == 11
    input_ex_command_111
  end
  #--------------------------------------------------------------------------
  # ●
  #--------------------------------------------------------------------------
  def adjust_original_key(key)
    new_key = {2=>:DOWN, 4=>:LEFT, 6=>:RIGHT, 8=>:UP,
    11=>:A, 12=>:B, 13=>:C, 14=>:X, 15=>:Y, 16=>:Z, 17=>:L, 18=>:R}
    return new_key[key] if new_key.keys.include?(key)
    return key
  end
end

# presented by 허걱

 

 

 

 

 

 

■ 질문전 필독!
  • 질문할 내용이 이 게시판이나 강좌에 이미 있는지 확인합니다.
  • 하나의 게시물에는 하나의 질문만 합니다.
  • 제목은 질문의 핵심 내용으로 작성합니다.
  • 질문 내용은 답변자가 쉽게 이해할 수 있도록 최대한 상세하게 작성합니다.
  • 스크립트의 전문이 필요할 경우 txt 파일 등으로 첨부해 주시기 바랍니다.
  • 답변받은 게시물은 삭제하지 않습니다.
  • 답변이 완료된 경우 해당 답변해주신 분들께 감사의 댓글을 달아줍니다.
    • 처음 오신 분들은 공지 게시물을 반드시 읽어주세요!

※ 미준수시 사전경고 없이 게시물을 삭제합니다.


List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 12391
기본툴 사용법 RMVX rpg maker mv "액터가 해당 상태가 됐을 때"의 메세지가 나타나지 않습니다. 5 file 빅터 2023.06.03 75
에러 해결 RMMV RPG Maker MV 사용 중입니다 배포 후 게임 수정이 안되네요 도와주세요ㅜㅜ 1 IN 2023.05.30 76
기본툴 사용법 RMVXA 아무 것도 없는 허공에서 플레이어가 움직일 수 있게 만들고 싶습니다. 3 file zx히어로zx 2023.05.22 66
스크립트 사용 RMVXA SAS IV HUD의 내용을 메뉴가 열려있는 동안 숨길 수 있게 하는 방법은 없을까요? file 아무개 2023.05.22 25
에러 해결 RMVXA 허걱님의 전체키 스크립트를 쓰고 있었는데 오류가 납니다. DefaultName 2023.05.21 48
이벤트 작성 RMMV 선택지를 다 고르면 없어지는 이벤트 만드는법 알려주세요 3 슥슧 2023.05.21 81
플러그인 사용 RMMV 타이틀 윈도우 수정하는데 도와주세요 1 file 먹사 2023.05.18 86
기본툴 사용법 RMMV 게임 배포 질문 1 카미쉬 2023.05.17 60
기타 RMXP 게임 세이브를 할때 덮어쓰기 경고를 만들고 싶습니다. really0 2023.05.17 29
기본툴 사용법 RMMV 걸어다니는 NPC 앞 4칸에 있으면 이벤트 발동 6 카미쉬 2023.05.16 61
기본툴 사용법 RMMV 특정 아이템을 지니고 있으면 선택지가 하나 들어나게 하기 2 카미쉬 2023.05.16 61
플러그인 추천 RMMZ 5명 이상 파티원 대열보행을 하는법이 궁금합니다. 로레니 2023.05.15 35
기본툴 사용법 RMMV 여러명과 대화 후 넘기기 2 file 카미쉬 2023.05.14 46
이벤트 작성 RMMV 캐릭터 의상변경 질문.. 1 file 김아야아 2023.05.14 66
플러그인 생성 RMMV RMMV에서 npm 사용하는 방법 (윈도우 바탕화면 변경) 1 LV 2023.05.14 62
이벤트 작성 RMMV 이벤트로 애니메이션을 재생하는 법이 궁금합니다 1 알만툴탐구 2023.05.11 65
에러 해결 RMMV 캐릭터가 걸을 때 옆으로 한 픽셀씩 늘어납니다 3 file 조각0 2023.05.10 83
기본툴 사용법 RMMV 알만툴 내에서 화면 색감을 보정하는 방법이 있을까요? 4 file 조각0 2023.05.09 146
스크립트 사용 RMVXA 메뉴 배경화면이 바뀌질 않아요 file 둣녀 2023.05.09 49
기본툴 사용법 RMMV 기본제공 타일을 불러올 수 있나요?? 1 file 란스 2023.05.07 40
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 516 Next
/ 516