질문과 답변

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 12456
이벤트 작성 RMVXA 전투 도중 문장 5 박열정 2019.02.14 73
기타 RMVXA vx ace) 자동 부활 스킬 게임이만들고파 2021.01.04 73
RMVXA 이 스크립트를 조금 바꿔주실수 있을까요 버섯수프 2017.01.06 74
RMVXA 에러 해결 file rpg메이드 2018.11.04 74
이벤트 작성 RMVXA 오브젝트 상호작용에 대한 질문입니다 3 file 오구잡채 2024.05.02 74
기본툴 사용법 RMVXA 타일 B 첫번째 칸 연관성 2 겜만들고싶다앙 2021.08.22 75
RMVXA 여기 사이트에있는 스크립트 사용하고 싶습니다. 바크지누크 2018.05.11 75
RMVXA vx ace 무기에 격 넣기.. 크런키맛아듀크림 2016.07.16 75
RMVXA Spriteset_Map 클래스에서 추가적인 비트맵을 생성해 불러온 후, 변수에 따라 다른 이미지 불러오기 3 안나카레리나 2018.09.02 75
기본툴 사용법 RMVXA 한 맵에 액터를 다수로 넣는 법 3 MAYO 2019.08.24 75
RMVXA 전투불능이 되더라도 특정 상태이상은 유지되게 설정하는 방법 임버 2016.08.03 75
RMVXA 인스턴트 오류 관련 Lockerroom 2016.09.11 75
RMVXA 전투 시 대화창이 뚝뚝 끊기는 문제를 해결하고 싶습니다 첸멜 2016.09.17 75
이벤트 작성 RMVXA 랜덤 박스에서 얻은 것을 표시하는 방법 3 겜만들고싶다앙 2020.08.26 76
RMVXA 간단한 스크립트 질문 임버 2016.08.02 76
RMVXA XAS 오버드라이브 불망울 2017.07.25 76
스크립트 사용 RMVXA yanfly 배틀엔진 스크립트 질문 file Goker 2020.03.30 76
기본툴 사용법 RMVXA 액터 그래픽을 중간에 바꾸고 싶어요 2 설님 2021.04.10 76
스크립트 추천 RMVXA 달리는 스프라이트와 대각선 이동 5 다크크리에이터 2023.07.08 76
스크립트 사용 RMVXA 세이브 슬롯 수 줄이는 방법 2 할짓없는인간 2021.05.05 77
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 150 Next
/ 150