O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Full Keyboard Module

Iniciado por Raizen, 02/12/2012 às 12:39

Full Keyboard Module

Compativel com: RMVXAce/ RMXP/ RMVX
Compatibilidade :boa
Facilidade de uso: médio
Lag gerado: baixo
[box class=titlebg]
Condições de Uso
[/box]
  Pode ser modificado, e divulgado em outros lugares, mas peço que não retire os créditos.

[box class=titlebg]
Para que serve o script
[/box]

Permite usar todas as teclas do teclado, também permite usar os comandos utilizados pelos scripters de.
- Input.trigger?
- Input.press?
- Input.repeat?
Vi que o pessoal estava usando scripts para todo o teclado, porém ele fugia do modo normal de verificar as teclas (Input.press?, Input.trigger?....) então resolvi fazer esse.

[box class=titlebg]
Script.
[/box]

#==================================================================
# Full Keyboard Module
# Autor: Raizen
# Comunidade: centrorpg.com
# Compatibilidade: RMVX, RMVXA, RMXP
#==================================================================
# Instruções:
# Para inserir uma tecla basta olhar a tabela abaixo
# e utilizar o comando de tecla dos scripts normalmente que são.

# Esse é como um gatilho, ao apertar ele indica que foi apertado 
# uma vez, e só volta a retornar verdadeiro caso seja solto a tecla
# e pressionado novamente
# Input.trigger?(tecla)

# Esse é o identico ao dos eventos, ele indica se a tecla está pressionada. 
# Input.press?(tecla)

# Esse é o utilizado nas lojas e menus, ele indica verdadeiro no momento
# que se pressiona, e indica falso até um certo tempo, depois volta a indicar
# verdadeiro.
# Input.repeat?(tecla)

# Para utilizar é bem simples, basta olhar a tabela abaixo e colocar
# um Key:: na frente, por exemplo
# Input.trigger?(Key::F)   => indica se foi pressionado a tecla F
# Input.press?(Key::Ctrl)  => indica se o Ctrl está pressionado
# Input.repeat?(Key::K6)   => indica se o numerador 6 foi pressionado
# e fará a verificação de quanto tempo ele está pressionado.

# Coloque esse código nas Condições dos eventos, 4ª aba das condições, Script:
# Input.trigger?(Key::valor da tecla abaixo) ou 
# Input.press?(Key::valor da tecla abaixo) ou
# Input.repeat?(Key::valor da tecla abaixo)

#==================================================================
module Key
K0 = 0x30 #Tecla 0 
K1 = 0x31 #Tecla 1 
K2 = 0x32 #Tecla 2 
K3 = 0x33 #Tecla 3 
K4 = 0x34 #Tecla 4 
K5 = 0x35 #Tecla 5 
K6 = 0x36 #Tecla 6 
K7 = 0x37 #Tecla 7 
K8 = 0x38 #Tecla 8 
K9 = 0x39 #Tecla 9
Ced = 0xBA # Tecla Ç
A = 0x41 #Tecla A 
B = 0x42 #Tecla B 
C = 0x43 #Tecla C 
D = 0x44 #Tecla D 
E = 0x45 #Tecla E 
F = 0x46 #Tecla F 
G = 0x47 #Tecla G 
H = 0x48 #Tecla H 
I = 0x49 #Tecla I 
J = 0x4A #Tecla J 
K = 0x4B #Tecla K 
L = 0x4C #Tecla L 
M = 0x4D #Tecla M 
N = 0x4E #Tecla N 
O = 0x4F #Tecla O 
P = 0x50 #Tecla P 
Q = 0x51 #Tecla Q 
R = 0x52 #Tecla R 
S = 0x53 #Teclar S 
T = 0x54 #Tecla T 
U = 0x55 #Tecla U 
V = 0x56 #Tecla V 
W = 0x57 #Tecla W 
X = 0x58 #Tecla X 
Y = 0x59 #Tecla Y 
Z = 0x5A #Tecla Z 
Mouse1 = 0x01 #Botão esquerdo do mouse 
Mouse2 = 0x02 #Botão direito do mouse 
Cancel = 0x03 #Cancelar/interromper processamento 
Mousewheel = 0x04 #Botão do meio do mouse (em um mouse de três botões)  
Mouse3 = 0x05 #Windows 2000/XP: Botão X1 do mouse 
Mouse4 = 0x06 #Windows 2000/XP: Botão X2 do mouse 
Back = 0x08 #Tecla BACKSPACE 
Tab = 0x09 #Tecla TAB 
Clear = 0x0C #Tecla CLEAR 
Enter = 0x0D #Tecla ENTER 
Shift = 0x10 #Tecla SHIFT 
Ctrl = 0x11 #Tecla CTRL 
Alt = 0x12 #Tecla ALT 
Pause = 0x13 #Tecla PAUSE 
Caps = 0x14 #Tecla CAPS LOCK 
Esc = 0x1B #Tecla ESC 
Space = 0x20 #Tecla SPACEBAR (Espaço) 
Pageup = 0x21 #Tecla PAGE UP 
Pagedown = 0x22 #Tecla PAGE DOWN 
End = 0x23 #Tecla END 
Home = 0x24 #Tecla HOME 
Left = 0x25 #Tecla LEFT ARROW (Seta para a esquerda) 
Up = 0x26 #Tecla UP ARROW (Seta para cima) 
Right = 0x27 #Tecla RIGHT ARROW (Seta para a direita) 
Down = 0x28 #Tecla DOWN ARROW (Seta para baixo) 
Select = 0x29 #Tecla SELECT 
Print = 0x2A #Tecla PRINT 
Execute = 0x2B #Tecla EXECUTE 
Print = 0x2C #Tecla PRINT SCREEN 
Ins = 0x2D #Tecla INS 
Del = 0x2E #Tecla DEL 
Help = 0x2F #Tecla HELP 
Lw = 0x5B #Tecla Windows do lado esquerdo 
Lr = 0x5C #Tecla Windows do lado direito 
Apps = 0x5D #Menu de contexto 
Sleep = 0x5F #Tecla Sleep 
Num0 = 0x60 #Tecla 0 (T. numérico) 
Num1 = 0x61 #Tecla 1 (T. numérico) 
Num2 = 0x62 #Tecla 2 (T. numérico) 
Num3 = 0x63 #Tecla 3 (T. numérico) 
Num4 = 0x64 #Tecla 4 (T. numérico) 
Num5 = 0x65 #Tecla 5 (T. numérico) 
Num6 = 0x66 #Tecla 6 (T. numérico) 
Num7 = 0x67 #Tecla 7 (T. numérico) 
Num8 = 0x68 #Tecla 8 (T. numérico) 
Num9 = 0x69 #Tecla 9 (T. numérico) 
NumX = 0x6A #Tecla Multiplicar 
NumA = 0x6B #Tecla Adicionar 
NumS = 0x6C #Tecla Separador 
NumM = 0x6D #Tecla Subtrair 
Dec = 0x6E #Tecla Decimal 
Div = 0x6F #Tecla Dividir 
F1 = 0x70 #Tecla F1 
F2 = 0x71 #Tecla F2 
F3 = 0x72 #Tecla F3 
F4 = 0x73 #Tecla F4 
F5 = 0x74 #Tecla F5 
F6 = 0x75 #Tecla F6 
F7 = 0x76 #Tecla F7 
F8 = 0x77 #Tecla F8 
F9 = 0x78 #Tecla F9 
F10 = 0x79 #Tecla F10 
F11 = 0x7A #Tecla F11 
F12 = 0x7B #Tecla F12 
NUMLOCK = 0x90 #Tecla NUM LOCK 
SCROLL = 0x91 #Tecla SCROLL LOCK 
end


module Input
  @trigger_keys = []
  @index = []
  GetKeyState = Win32API.new("user32","GetAsyncKeyState",'i','i')
  module_function
  def press(key)
    GetKeyState.call(key) != 0
  end
  def trigger(key)
    unless GetKeyState.call(key) == 0
     @trigger_keys.include?(key) ? (return false) : @trigger_keys.push(key)
     return true
    else
      @trigger_keys.delete(key) if @trigger_keys.include?(key)
      return false
    end
  end
  def repeat(key)
    unless GetKeyState.call(key) == 0
      @trigger_keys.push(key) unless @trigger_keys.include?(key) 
      index = @trigger_keys.index(key)
      @index[index] = 0 unless @index[index]
      @index[index] += 1
      return true if @index[index] == 1
      @index[index] >= 30 && @index[index] % 4 == 1 ? (return true) : (return false)
    else
      index = @trigger_keys.index(key) if @trigger_keys.include?(key)
      @index[index] = nil if index
    end
  end
end
class << Input
  alias raizen_trigger? trigger?
  alias raizen_repeat? repeat?
  alias raizen_press? press?
  def trigger?(key)
    raizen_trigger?(key) == false ? (trigger(key) if key.is_a?(Integer)) : true
  end
  def repeat?(key)
    raizen_repeat?(key) == false ? (repeat(key) if key.is_a?(Integer)) : true
  end
  def press?(key)
    raizen_press?(key) == false ? (press(key) if key.is_a?(Integer)) : true
  end
end


[box class=titlebg]
Imagens
[/box]

Não necessário

[box class=titlebg]
Download
[/box]

Não necessário

[box class=titlebg]
Créditos e Avisos
[/box]

Raizen pelo script

Valeu pelo script Raizen!
Está sendo muito útil em um certo script que estou fazendo.
:wow:

Olá camarada, novamente me perdoe por ressuscitar outro tópico seu e agradeço por mais uma ótima colaboração ao maker.
Durante o uso do script me surgiu uma dúvida, na verdade duas.
1)
Input.press?(tecla)
Esse comando indica se a tecla está sendo pressionada correto? Sendo assim poderia ser utilizada em um abs com a função de "charge (carregar um golpe)" ? Se eu criasse um evento comum com a condição "Chamar Script Input.press?(Key::A)", seria o equivalente de dizer que "se o personagem segurar a tecla por um determinado tempo a condição será válida" ?
2)Os comandos acima respondem a duas teclas pressionadas simultaneamente ? Por exemplo: Input.press?(Key::A,S).
Novamente me perdoem por ressuscitar só nao enviei PM por achar que talvez alguém possa possuir as mesmas dúvidas.
Parabéns pelo script e até mais!

Acesse já o meu blog!(Novo)

05/03/2013 às 07:16 #3 Última edição: 05/09/2019 às 15:03 por NumPaD
Erro 404!
A mensagem não foi encontrada!

@ Naxus: não tem problema algum, além disso tem MUITO a ver com o tópico, o iNumPad respondeu para tu, mas só uma coisa, não é o Chamar Script.

você pode fazer em um evento em processo paralelo o seguinte.

Condição <= O comando condição do Ace
Script: Input.press?(Key::A) && Input.press?(Key::S)

o && é a conjunção, pode ser usado o and se for dificil de decorar. :)

Ah sim, tá explicado o por quê de não ter funcionado rs.
Valeu galera, to tentando modificar um abs aqui por eventos e esse comando vai ser mais do que necessário.
Mais uma vez obrigado e até mais!
:ok:

Acesse já o meu blog!(Novo)

24/05/2013 às 19:43 #6 Última edição: 26/05/2013 às 23:15 por zero
Primeiro quero agradecer pelo belo script Raizen.
Gostei muito, ele tem sido muito útil.

Mas eu estou com um probleminha... primeiro eu tive um problema com o Abs que eu uso... resolvi retirando as teclas usadas pelo Abs da lista (na verdade só desabilitei com =begin/=end).
Mas eu crio muitos menus por eventos, já que sou bem leigo em script, e vi a necessidade de usar a condição>>Tecla:Z( C no editor ) por ser a tecla de ação comum. Não funcionou. A opção Tecla do comando Condição não funciona de nenhuma forma enquanto uso o Script e eu não posso usar Condição>>Script:Input.press?(Key::Z) já que Z é uma das teclas usadas pelo ABS e eu tive que desabilitar no seu script.

Pode me ajudar ?
[box title= OBS]Eu aceito um não como resposta já que eu não teria esse problema se eu não usasse um abs, mas não sei se fazia parte do script desabilitar a opção Tecla do comando Condição.[/box]

mas é exatamente isso daqui.
Condição>>Script:Input.press?(Key::Z)

Não sei oque pode estar dando errado :P, ,lembrando que o script, não deveria mudar nada das teclas comuns, provavelmente o ABS que está usando, insere teclas também, e isso dá conflito, pode postar o script que está usando de ABS?

28/05/2013 às 09:40 #8 Última edição: 28/05/2013 às 14:41 por zero
Citação de: Raizen online 27/05/2013 às 16:22
mas é exatamente isso daqui.
Condição>>Script:Input.press?(Key::Z)
Mas então o "Condição>>Tecla[ C  ]foi precionada" deixa de funcionar totalmente , sem chance de ser usado em conjunto?
Citar
Não sei oque pode estar dando errado :P, ,lembrando que o script, não deveria mudar nada das teclas comuns, provavelmente o ABS que está usando, insere teclas também, e isso dá conflito, pode postar o script que está usando de ABS?
Eu uso o XAS Hero 0.6 para Vx Ace.( multiplos scripts)
Até onde eu vi o Xas não insere nenhuma tecla que ja não fosse usada.

Eu até tentei postar aqui o script pricipal, mas ele tem 7mil e tantas linhas, não cabe no limite do post.
Caso queira dar uma olhada vou anexa-lo aqui...

[Anexo excluído pelo administrador]

Pera... acho que talvez eu esteja entendendo, você sabe que a tecla C, nos eventos é a Z não xD?

talvez seja isso sabe, tente sem meu script e veja se algo muda.

31/05/2013 às 00:10 #10 Última edição: 31/05/2013 às 00:12 por zero
Citação de: Raizen online 30/05/2013 às 20:05
Pera... acho que talvez eu esteja entendendo, você sabe que a tecla C, nos eventos é a Z não xD?

talvez seja isso sabe, tente sem meu script e veja se algo muda.

sei ¬¬, eu até citei entre parenteses.
Sem o script o evento funciona. Eu copiei o script e usei em um projeto em branco e a opção tecla tbm não funcionou, então realmente não é outro script o causador do problema...

anyway... eu mudei o script do xas troquei "Input.press?(ACTION_1_BUTTON)" por "Input.press?(Key::Z)" ... engraçado que eu só mudei em um lugar e o comando "Input.press?(ACTION_1_BUTTON)" aparece varias vezes rsrs. Antes eu tentei mudar a constante ACTION_1_BUTTON que estava setada como C para Key::Z , mas não funcionou... bom do jeito que eu deixei agora funcionou e eu não vou ficar me questionando muito rsrs..

Obrigado pela ajuda, mas ainda acho que o script desabilitar a opção tecla dos eventos possa vir a ser um problema ^^ ( caso nao tenha ficado muito claro.... a opção ainda existe, simplesmente não funciona)

Só comentei issó porque testei aqui e a função por eventos funciona 100%, por isso eu achei estranho e comentei que os botões são trocados, não sei porque o script estaria interferindo nos eventos o.o

/o/ Tio Raizen e seus epic scripts.
Eu me interessei em usar este script, guardei aqui nas minhas coisinhas para poder testar com minhas ideias de sistemas por eventos e customizar outros lances (virei eventer, eu não sabia que eu tinha essa capacidade, é como scriptar mas só que por interface visual kkkkkkkkk)
Abraços raizen, parabéns pelo ótimo script!


Kisses and Goodbye!
Gifts:
Danti | Misty


Citação de: Raizen online 31/05/2013 às 00:17
Só comentei issó porque testei aqui e a função por eventos funciona 100%, por isso eu achei estranho e comentei que os botões são trocados, não sei porque o script estaria interferindo nos eventos o.o

De fato eu te devo desculpas, testei novamente e funciona normalmente no projeto em branco, eu que havia montado o evento de forma errada da primeira vez e não notei.

Bom... então não sei o que acontece... no meu projeto com o full keyboard a opção tecla por eventos não funciona... e sem ele a opção funciona...
Bem, eu consegui que funcionasse no xas até então o que eu precisava e ja que seu script não interfere nos eventos eu poderei usa-lo tranquilo em outros projetos... Obrigado pelo interesse e me desculpe a confusão ^^.


Eai Makers!!!

Tive que ressuscitar este tópico por que estou com uma dúvida. Estou fazendo um sistema de dois jogadores, o player um usa as setas para mover o personagem, e o player dois usa W, S, A, D, mas o player um esta um pouco mais rápido que o player dois, o que posso fazer para deixar os dois na mesma velocidade?

Obs: Peço desculpas de antemão se foi o lugar errado para fazer esta pergunta, pois não sei se é por este script que se resolverá meu problema.