Ayene - Nie 21 Lut, 2010 16:42 Temat postu: Dodatkowe przyciski na klawiaturze
~ Dodatkowe przyciski na klawiaturze [VX] ~
Krótki opis
Skrypt umożliwia wykorzystanie innych przycisków na klawiaturze niż domyślne. Można przykładowo wykorzystać literkę 'L', która normalnie, nie odpowiada za nic. Skrypt jest jedynie dodatkiem, ale dzięki niemu można wspomniane literki wykorzystać z innych skryptach.
State = Win32API.new('user32','GetKeyState',['i'],'i')
Key = Win32API.new('user32','GetAsyncKeyState',['i'],'i')
USED_KEYS = [Mouse_Left, Mouse_Right]
module_function
def self.getstate(key)
return true unless State.call(key).between?(0, 1)
return false
end
def self.testkey(key)
Key.call(key) & 0x01 == 1
end
def self.update
@keys = []
@keys.push(Input::Mouse_Left) if self.testkey(Input::Mouse_Left)
@keys.push(Input::Mouse_Right) if self.testkey(Input::Mouse_Right)
@keys.push(Input::Back) if self.testkey(Input::Back)
@keys.push(Input::Tab) if self.testkey(Input::Tab)
@keys.push(Input::Enter) if self.testkey(Input::Enter)
@keys.push(Input::Shift) if self.testkey(Input::Shift)
@keys.push(Input::Ctrl) if self.testkey(Input::Ctrl)
@keys.push(Input::Alt) if self.testkey(Input::Alt)
@keys.push(Input::Esc) if self.testkey(Input::Esc)
for key in Input::Letters.values
@keys.push(key) if self.testkey(key)
end
for key in Input::Numberkeys.values
@keys.push(key) if self.testkey(key)
end
for key in Input::Numberpad.values
@keys.push(key) if self.testkey(key)
end
for key in Input::Fkeys.values
@keys.push(key) if self.testkey(key)
end
@keys.push(Input::Collon) if self.testkey(Input::Collon)
@keys.push(Input::Equal) if self.testkey(Input::Equal)
@keys.push(Input::Comma) if self.testkey(Input::Comma)
@keys.push(Input::Underscore) if self.testkey(Input::Underscore)
@keys.push(Input::Dot) if self.testkey(Input::Dot)
@keys.push(Input::Backslash) if self.testkey(Input::Backslash)
@keys.push(Input::Lb) if self.testkey(Input::Lb)
@keys.push(Input::Rb) if self.testkey(Input::Rb)
@keys.push(Input::Quote) if self.testkey(Input::Quote)
@keys.push(Input::Space) if self.testkey(Input::Space)
@keys.push(Input::LT) if self.testkey(Input::LT)
@keys.push(Input::UPs) if self.testkey(Input::UPs)
@keys.push(Input::RT) if self.testkey(Input::RT)
@keys.push(Input::DN) if self.testkey(Input::DN)
@pressed = []
@pressed.push(Input::Space) if self.getstate(Input::Space)
@pressed.push(Input::Mouse_Left) if self.getstate(Input::Mouse_Left)
@pressed.push(Input::Mouse_Right) if self.getstate(Input::Mouse_Right)
@pressed.push(Input::Back) if self.getstate(Input::Back)
@pressed.push(Input::Tab) if self.getstate(Input::Tab)
@pressed.push(Input::Enter) if self.getstate(Input::Enter)
@pressed.push(Input::Shift) if self.getstate(Input::Shift)
@pressed.push(Input::Ctrl) if self.getstate(Input::Ctrl)
@pressed.push(Input::Alt) if self.getstate(Input::Alt)
@pressed.push(Input::Esc) if self.getstate(Input::Esc)
@pressed.push(Input::LT) if self.getstate(Input::LT)
@pressed.push(Input::UPs) if self.getstate(Input::UPs)
@pressed.push(Input::RT) if self.getstate(Input::RT)
@pressed.push(Input::DN) if self.getstate(Input::DN)
for key in Input::Numberkeys.values
@pressed.push(key) if self.getstate(key)
end
for key in Input::Numberpad.values
@pressed.push(key) if self.getstate(key)
end
for key in Input::Letters.values
@pressed.push(key) if self.getstate(key)
end
for key in Input::Fkeys.values
@pressed.push(key) if self.getstate(key)
end
@pressed.push(Input::Collon) if self.getstate(Input::Collon)
@pressed.push(Input::Equal) if self.getstate(Input::Equal)
@pressed.push(Input::Comma) if self.getstate(Input::Comma)
@pressed.push(Input::Underscore) if self.getstate(Input::Underscore)
@pressed.push(Input::Dot) if self.getstate(Input::Dot)
@pressed.push(Input::Backslash) if self.getstate(Input::Backslash)
@pressed.push(Input::Lb) if self.getstate(Input::Lb)
@pressed.push(Input::Rb) if self.getstate(Input::Rb)
@pressed.push(Input::Quote) if self.getstate(Input::Quote)
end
def self.triggerd?(key)
return true if @keys.include?(key)
return false
end
def self.pressed?(key)
return true if @pressed.include?(key)
return false
end
def self.dir4
return 2 if self.pressed?(Input::DN)
return 4 if self.pressed?(Input::LT)
return 6 if self.pressed?(Input::RT)
return 8 if self.pressed?(Input::UPs)
return 0
end
def trigger?(key)
Inputed?(key,"trigger")
end
def repeat?(key)
Inputed?(key,"repeat")
end
def press?(key)
Inputed?(key,"press")
end
def Inputed?(key,type)
keys = []
case key
when Input::DOWN
keys.push(Input::DN)
when Input::UP
keys.push(Input::UPs)
when Input::LEFT
keys.push(Input::LT)
when Input::RIGHT
keys.push(Input::RT)
when Input::A
keys.push(Input::Shift)
when Input::B
keys.push(Input::Esc, Input::Numberpad[0], Input::Letters["X"])
when Input::C
keys.push(Input::Space, Input::Enter)
when Input::L
keys.push(Input::Letters["Q"])
when Input::R
keys.push(Input::Letters["W"])
when Input::X
keys.push(Input::Letters["A"])
when Input::Y
keys.push(Input::Letters["S"])
when Input::Z
keys.push(Input::Letters["D"])
when Input::F5
keys.push(Input::Fkeys[5])
when Input::F6
keys.push(Input::Fkeys[6])
when Input::F7
keys.push(Input::Fkeys[7])
when Input::F8
keys.push(Input::Fkeys[8])
when Input::F9
keys.push(Input::Fkeys[9])
when Input::CTRL
keys.push(Input::Ctrl)
when Input::ALT
keys.push(Input::Alt)
else
keys.push(key)
end
case type
when "trigger"
for k in keys
if Input.triggerd?(k)
return true
end
end
when "repeat"
for k in keys
if Input.triggerd?(k)
return true
end
end
when "press"
for k in keys
if self.pressed?(k)
return true
end
end
end
return false
end
def check(key)
Win32API.new("user32","GetAsyncKeyState",['i'],'i').call(key) & 0x01 == 1
end
def mouse_update
@used_i = []
for i in USED_KEYS
x = check(i)
if x == true
@used_i.push(i)
end
end
end
def self.name?(num)
return "MOUSE LEFT" if num==1
return "MOUSE RIGHT" if num==2
return "MOUSE MIDDLE" if num==4
return "MOUSE 4TH" if num==5
return "MOUSE 5TH" if num==6
return "BACKSPACE" if num==8
return "TAB" if num==9
return "RETURN" if num==13
return "SHIFT" if num==16
return "CTLR" if num==17
return "ALT" if num==18
return "CAPS LOCK" if num==20
return "ESCAPE" if num==27
return "SPACE" if num==32
return "PGUP" if num==33
return "PGDN" if num==34
return "END" if num==35
return "HOME" if num==36
return "LEFT" if num==37
return "UP" if num==38
return "RIGHT" if num==39
return "DOWN" if num==40
return "SNAPSHOT" if num==44
return "INSERT" if num==45
return "DELETE" if num==46
return "0" if num==48
return "1" if num==49
return "2" if num==50
return "3" if num==51
return "4" if num==52
return "5" if num==53
return "6" if num==54
return "7" if num==55
return "8" if num==56
return "9" if num==57
return "A" if num==65
return "B" if num==66
return "C" if num==67
return "D" if num==68
return "E" if num==69
return "F" if num==70
return "G" if num==71
return "H" if num==72
return "I" if num==73
return "J" if num==74
return "K" if num==75
return "L" if num==76
return "M" if num==77
return "N" if num==78
return "O" if num==79
return "P" if num==80
return "Q" if num==81
return "R" if num==82
return "S" if num==83
return "T" if num==84
return "U" if num==85
return "V" if num==86
return "W" if num==87
return "X" if num==88
return "Y" if num==89
return "Z" if num==90
return "LWIN" if num==91
return "RWIN" if num==92
return "APPS" if num==93
return "0" if num==96
return "1" if num==97
return "2" if num==98
return "3" if num==99
return "4" if num==100
return "5" if num==101
return "6" if num==102
return "7" if num==103
return "8" if num==104
return "9" if num==105
return "*" if num==106
return "+" if num==107
return "-" if num==109
return "." if num==110
return "/" if num==111
return "F1" if num==112
return "F2" if num==113
return "F3" if num==114
return "F4" if num==115
return "F5" if num==116
return "F6" if num==117
return "F7" if num==118
return "F8" if num==119
return "F9" if num==120
return "F10" if num==121
return "F11" if num==122
return "F12" if num==123
return "NUM LOCK" if num==144
return "SCROLL LOCK" if num==145
return "LEFT SHIFT" if num==160
return "RIGHT SHIFT" if num==161
return "LEFT CTRL" if num==162
return "RIGHT CTRL" if num==163
return "LEFT ALT" if num==164
return "RIGHT ALT" if num==165
return ";" if num==186
return "=" if num==187
return "," if num==188
return "_" if num==189
return "." if num==190
return "/" if num==191
return "`" if num==192
return "[" if num==219
return " \\ " if num==220
return "]" if num==221
return "'" if num==222
return "??? - " + "#{num}"
end
end
Instrukcja
1. Wklej skrypt nad "Main" w Edytorze Skryptu.
Piszcie w razie problemów.bionicl - Nie 21 Lut, 2010 21:20 to co zrobić aby było L ? po prostu wpisać l?Ayene - Nie 21 Lut, 2010 21:27 Aby przyporządkować, np literkę 'L' w kodzie skryptu tam, gdzie jest np:
Kod:
if Input.trigger?(Input::R)
Zamiast Input::R należy wpisać:
Kod:
Input::Letters["L"]
Czyli po zmianach taka linijka wyglądałaby następująco:
Kod:
if Input.trigger?(Input::Letters["L"])
bionicl - Nie 21 Lut, 2010 21:46 Aaaa... dzięki.
PS. czy dzięki temu skryptowi da się jakoś ruszać myszką?...Ayene - Pon 22 Lut, 2010 08:36 Do tego można wykorzystać Input::Mouse_Left lub Input::Mouse_Right. Wówczas coś się wyświetli po wciśnięciu lewego lub prawego przycisku myszy pw115 - Pon 22 Lut, 2010 14:25 Świetny skrypt Ayene napewno go użyję w swoim vx'owym projekcie
Gz dominikos - Sob 06 Mar, 2010 19:33 Przydało by się coś takiego do xp.Ayene - Nie 07 Mar, 2010 11:07 dominikos, skrypt powinien też działać pod XP. Sprawdź Asantos - Pon 05 Kwi, 2010 18:59 A jak można tego użyć w warunku? Warunek: Skrypt: Input::Numberkeys["1"] nie działa, trzeba to jakoś inaczej zdeklarować?
Dobra działa :)
Dla całej reszty: trzeba napisać input.trigger?(input::/cośtam/) - jeśli źle proszę poprawić :)Sabikku - Pon 05 Kwi, 2010 19:10 Po pierwsze, do hasha Numberkeys wpisujesz zwykłe liczby (1), nie stringi ("1"). Po drugie, całość obejmij 'Input.trigger?(...)', które sprawdza, czy przycisk jest wciśnięty.
Twój warunek w edytorze zdarzeń będzie wyglądał tak:
Kod:
Input.trigger?(Input::Numberkeys[1])
@edit: wyprzedziłeś mnie...! :)
Sprawdziłem pod xp, działa. Fajny skrypt, krótszy i wygodniejszy niż keyboard input module cybersama, którego używałem do tej pory.Draph - Wto 01 Cze, 2010 12:59 Zrobiłem wszystko według instrukcji, jednak przy próbie uruchomienia projektu wyskakuje mi błąd:
"Wystąpił problem z aplikacją Game.exe(...)" itd. Czy ktoś wie czym to może być spowodowane?CreeperCrisis - Wto 01 Cze, 2010 13:15 Dragrot, zrób screen błedu.
Ayene, co mam zrobić, żeby jak kliknę lewy przycisk myszy uruchamiało mi się typowe zdarzenie?Draph - Wto 01 Cze, 2010 13:21 Proszę: http://img34.imageshack.us/img34/6035/bladj.png
Z tego błędy chyba nic nie wywnioskujesz :/
Zaznaczę że błąd pojawia się około sekundy po włączeniu projektu.CreeperCrisis - Wto 01 Cze, 2010 13:26 Czy to się dzieje po wstawieniu skryptu. Spróbuj na pustym lub prześlę demoDraph - Wto 01 Cze, 2010 13:32 Usunąłem skrypt i wszystko zaczęło działać, gdy wstawiłem go ponownie błąd znowu się pojawił. Więc jest to wina skryptu o dziwo :/ Czy to może mieć coś wspólnego z tym że posiadam makera xp tsukuru? Może mam starego rgssa w windowsie?Ayene - Wto 01 Cze, 2010 16:31 Dragrot, skrypt działa na XP, ale sprawdzany był tylko po kątem kompatybilności z wersją angielską programu. To kolejny dowód na to, że wersja polska jest do niczego.
Pozdrawiam.
sebek_minko, możesz zastosować poniższy krótki skrót:
Spoiler:
Kod:
module Ayene
ID_TYPOWEGO_ZDARZENIA = 1 # ID typowego zdarzeniam
end
class Scene_Map < Scene_Base
alias ayene_callcomevent_scmap_update update
def update
ayene_callcomevent_scmap_update
if Input.trigger?(Input::Mouse_Left) && $data_common_events[Ayene::ID_TYPOWEGO_ZDARZENIA] != nil
$game_temp.common_event_id = Ayene::ID_TYPOWEGO_ZDARZENIA
$scene = Scene_Map.new
end
end
end
Draph - Wto 01 Cze, 2010 20:54 A czy szanowna pani administratorka wie gdzie można zdobyć darmową angielską wersję makera xp? Czy jedyną darmową wersją xp jest tsukuru pl.PaKiTos - Czw 09 Wrz, 2010 14:55 dodaj do folderu z grą bibliotekę 100J i zadziała na polskiej!Matiwrubli - Czw 13 Sty, 2011 14:24 znajdziesz program na www.rpgmaker.pljp145 - Pon 06 Cze, 2011 21:24 A co zrobić by gdy przycisne na klawiaturze [M] przełącznik '0001' zmienił się no on a po ponownym wcisnięcu na off itd. Angius - Wto 07 Cze, 2011 19:47 Ustawić odpowiedni warunek.
Cytat:
Jeśli przełącznik 0001 jest on Jeśli wciśnięty przycisk M Przełącznik 0001 na off Jeśli nie brak akcji Jeśli nie Jeśli wciśnięty przycisk M Przełącznik 0001 na on Jeśli nie Brak akcji
Mogło mi się coś pomieszać przez te tagi z kolorkami jp145 - Wto 07 Cze, 2011 21:45 Hmm...
Niestety jeśli chodzi o skrypty to jestem zielony ;-( .
A nie mógł by ktos by gotowego skrypyu wrzucić??
Bardzo prosze i z góry dzięki.Angius - Wto 07 Cze, 2011 21:47 Err... To JEST gotowy skrypt, który trzeba wrzucić...
A to, co ja napisałem, to typowe zdarzenie, jakie powinienieś ustawić, by działało włączanie i wyłączanie tym samym przyciskiem.jp145 - Wto 07 Cze, 2011 22:10 dobra nieważne..Michu_1999 - Nie 13 Lis, 2011 14:08 Nie kumam o co chodzi z tym skryptem. Bawie się i bawię, a dalej nie wiem.tracersgta - Nie 13 Lis, 2011 14:15 Znowu kilkumiesieczny odkop... Dodaje on do gry więcej przycisków... Bez tego skryptu, nie mogłeś nacisnąć F4, i coś by się stało... A z nim możesz...Michu_1999 - Nie 13 Lis, 2011 15:15 @tracersgta wiem o co w nim chodzi tylko nie wiem jak się nim posługiwaćAyene - Nie 13 Lis, 2011 16:15 Michu_1999, wysil się trochę proszę i przeczytaj kilka postów pod pierwszym, a będziesz wiedział tracersgta - Nie 13 Lis, 2011 16:34 Aby przyporządkować, np literkę 'L' w kodzie skryptu tam, gdzie jest np:
Kod:
if Input.trigger?(Input::R)
Zamiast Input::R należy wpisać:
Kod:
Input::Letters["L"]
Czyli po zmianach taka linijka wyglądałaby następująco:
Kod:
if Input.trigger?(Input::Letters["L"])
EzioMasterPl - Sob 18 Lut, 2012 20:23 Ayene , a jak mam zrobic tak , żeby po naciśnięciu "L" wyskakiwał mi dziennik misji?
Chodzi mi co mam zrobic w skrypcie z dziennikiem i tym , aby działało.
Bo nie da się wyświetlic na raz statusu i misji bez kasowania zapisu , to pomyślałem że tak wyświetlę okno misji. Z góry dzięki za pomocrafal3386 - Czw 05 Kwi, 2012 10:08 Mógłby ktoś dodać demo? Bo jak wpisuje w typowym zdarzeniu na warunku:
Input.trigger?(Input::Numberkeys[1])
W równoległym zdarzeniu to po naciśnięciu 1 nic sie niedzieje.Ayene - Czw 05 Kwi, 2012 19:44 W takim razie, jakim sposobem mi działa?