Skip to content

Instantly share code, notes, and snippets.

@toriato
Last active September 22, 2024 04:39
Show Gist options
  • Save toriato/56f98c00d2099b81d29de73e57c15b8f to your computer and use it in GitHub Desktop.
Save toriato/56f98c00d2099b81d29de73e57c15b8f to your computer and use it in GitHub Desktop.
AHK script for KartRider Minecraft movement mapping
#Requires AutoHotkey v2.0
#SingleInstance Force
#HotIf InMinecraft()
global ACCELERATION := 3 ; 가속도
global DECELERATION := 1 ; 감속도
global DEFAULT_MAX_SPEED := 10 ; 최대 마우스 움직임 속도
global DRIFT_MAX_SPEED := 25 ; 드리프트 중 최대 마우스 움직임 속도
global DRIFT_TIME := 20 ; 드리프트 지속 시간
global DRIFT_COOLDOWN := 30 ; 드리프트 재사용 대기 시간
;================================================================================
; 카트라이더: 마인크래프트 입력 스크립트
;================================================================================
; 이 스크립트는 화살표 키보드 입력을 마우스 움직임으로 맵핑하는 스크립트입니다.
; 가상으로 드리프트 느낌을 구현하려 시도했으나 아쉽게도 실제 게임처럼 동작하진 않습니다.
; 또, 부스터(쉬프트키)와 드리프트(컨트롤키)를 빠르게 연타시 컨트롤이 고정되는 버그가 존재합니다.
;================================================================================
global driftTimeLeft := 0
global driftCooldown := 0
global keys := Map(
'Left', KeyData(-1),
'Right', KeyData(1)
)
class KeyData {
offset := 0
speed := 0
pressed := false
__New(offset := 0) {
this.offset := offset
}
}
InMinecraft() {
try {
return WinGetProcessName('A') ~= 'javaw?\.exe' && WinGetTitle('A') ~= '^Minecraft'
}
return false
}
Toggle() {
keyName := StrReplace(A_ThisHotkey, ' Up')
if (!keys.Has(keyName)) {
return
}
key := keys.Get(keyName)
key.pressed := !(A_ThisHotkey ~= ' Up$')
}
Left::Toggle()
Right::Toggle()
Left Up::Toggle()
Right Up::Toggle()
Up::W
Down::S
Space::LShift
LShift::F24
LControl::A ; FIXME: 쉬프트와 컨트롤을 번갈아가며 연타시 컨트롤이 고정되는 버그가 있음
loop {
if !InMinecraft() {
continue
}
x := 0
maxSpeed := (GetKeyState('F24') && driftTimeLeft > 0) ? DRIFT_MAX_SPEED : DEFAULT_MAX_SPEED
if driftTimeLeft > 0 {
--driftTimeLeft
}
if driftCooldown > 0 {
--driftCooldown
}
if GetKeyState('F24') && !driftTimeLeft && !driftCooldown {
driftTimeLeft := DRIFT_TIME
driftCooldown := DRIFT_COOLDOWN
}
for _, key in keys {
if key.pressed {
if Abs(key.speed) < maxSpeed {
key.speed += key.offset * ACCELERATION
} else {
key.speed -= key.offset * DECELERATION
}
} else {
if Abs(key.speed) > DECELERATION {
key.speed -= key.offset * DECELERATION
} else {
key.speed := 0
}
}
x += key.speed
}
DllCall('mouse_event', 'UInt', 1, 'Int', x, 'Int', 0)
Sleep(10)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment