Przewodnik: Pozwalanie na ruch w kajdankach (FiveM)
Na serwerach role-play z FiveM kajdanki dodają realizmu i napięcia. Wielu graczy odkrywa, że domyślne zamrażanie może być zbyt restrykcyjne, przez co doświadczenie wydaje się sztuczne. Ten przewodnik pokazuje, jak pozwolić graczom poruszać się w kajdankach we wszystkich popularnych frameworkach – QBCore, ESX i vRP – jednocześnie blokując najbardziej oczywiste akcje, takie jak strzelanie czy prowadzenie pojazdu.
—
Zrozumienie procesu zakuwania w kajdanki
Gdy gracz jest zakuty w kajdanki, serwer zazwyczaj przełącza kilka ustawień po stronie klienta:
Odtwarzana jest animacja zakuwania (np. `’mp_arresting’, ‘idle’`).
Włączane są sterowanie kajdankami (`SetEnableHandcuffs`).
Encja jest zazwyczaj zamrażana, aby unieruchomić gracza.
Aby umożliwić ruch, musisz odmrozić encję przed utrzymaniem wszystkich innych restrykcyjnych kontroli. Wyzwaniem jest zlokalizowanie dokładnych linii w każdym frameworku i dostosowanie ich bez psucia istniejącej logiki.
—
1. Znajdź kod zakuwania
Przeszukaj skrypt pracy policji lub narzędziowy w poszukiwaniu sygnału wyzwalającego zakuwanie. Zazwyczaj wygląda to tak:
“`lua
TaskPlayAnim(playerPed, ‘mp_arresting’, ‘idle’, 8.0, -8, -1, 49, 0, 0, 0, 0)
SetEnableHandcuffs(playerPed, true)
FreezeEntityPosition(playerPed, true)
“`
2. Włącz ruch
Zastąp wywołanie zamrażania:
“`lua
FreezeEntityPosition(playerPed, false) — Pozwala na swobodne chodzenie
“`
Twój zaktualizowany fragment będzie wyglądał tak:
“`lua
TaskPlayAnim(playerPed, ‘mp_arresting’, ‘idle’, 8.0, -8, -1, 49, 0, 0, 0, 0)
SetEnableHandcuffs(playerPed, true)
FreezeEntityPosition(playerPed, false)
“`
3. Utrzymaj ograniczone sterowanie
Utwórz ciągły wątek, który wyłącza potencjalnie problematyczne akcje:
“`lua
Citizen.CreateThread(function()
while true do
Citizen.Wait(10)
if IsHandcuffed then
DisableControlAction(0, 24, true) — Atak
DisableControlAction(0, 25, true) — Celowanie
DisableControlAction(0, 142, true) — Alternatywny atak wręcz
DisableControlAction(0, 75, true) — Opuszczenie pojazdu
DisableControlAction(0, 92, true) — Strzelanie w pojeździe
end
end
end)
“`
Zastąp `IsHandcuffed` zmienną wskazującą stan zakucia w twoim konkretnym skrypcie.
—
1. Zlokalizuj główną sekcję zakuwania
Znajdź `esx_policejob/client/main.lua` i zlokalizuj następujący kod:
“`lua
TaskPlayAnim(playerPed, ‘mp_arresting’, ‘idle’, 8.0, -8, -1, 49, 0, 0, 0, 0)
SetEnableHandcuffs(playerPed, true)
SetPedCanPlayGestureAnims(playerPed, false)
FreezeEntityPosition(playerPed, true)
“`
2. Usuń zamrożenie
Zmień `FreezeEntityPosition(playerPed, true)` na `false`, aby umożliwić chodzenie.
3. Wyłącz sterowanie klawiszami
Zaimplementuj podobny wątek, aby zablokować broń i sterowanie pojazdem:
“`lua
Citizen.CreateThread(function()
while true do
Citizen.Wait(10)
if IsHandcuffed then
DisableControlAction(0, 142, true) — Alternatywny atak wręcz
DisableControlAction(0, 30, true) — Ruch w lewo/prawo
DisableControlAction(0, 31, true) — Ruch w górę/dół
DisableControlAction(0, 24, true) — Strzelanie
DisableControlAction(0, 92, true) — Strzelanie w samochodzie
DisableControlAction(0, 75, true) — Opuszczenie pojazdu
end
end
end)
“`
Upewnij się, że `IsHandcuffed` jest powiązane z twoją flagą zakucia w ESX.
—
1. Znajdź deklarację zakuwania
Główna logika często znajduje się w `vrp\/modules\/police.lua` lub niestandardowym zasobie. Szukaj:
lua
vRPclient.playAnim(player, {true, {{mp_arresting, idle}}, true})
vRPclient.setHandcuffed(player, true)
vRPclient.setFreeze(player, true)
2. Odblokowanie ruchu
Zamień linię zamrożenia:
lua
vRPclient.setFreeze(player, false)
3. Zablokowanie konkretnych akcji
Wstaw lub zmodyfikuj skrypt klienta, aby stale wyłączać niepożądane sterowanie:
lua
Citizen.CreateThread(function()
while true do
Citizen.Wait(10)
if IsHandcuffed then
DisableControlAction(0, 24, true) — Atak
DisableControlAction(0, 25, true) — Celowanie
DisableControlAction(0, 142, true) — Alternatywny atak wręcz
DisableControlAction(0, 75, true) — Opuszczenie pojazdu
DisableControlAction(0, 92, true) — Strzelanie w pojeździe
DisableControlAction(0, 30, true) — Ruch w lewo\/prawo
DisableControlAction(0, 31, true) — Ruch w górę\/w dół
end
end
end)
4. Synchronizacja flagi kajdanek
Zdefiniuj zmienną globalną i nasłuchuj zdarzenia po stronie serwera:
lua
local IsHandcuffed = false
RegisterNetEvent(“vrp:handcuff‘)
AddEventHandler(’vrp:handcuff‘, function(status)
IsHandcuffed = status
end)
Wywołaj to zdarzenie za każdym razem, gdy gracz zostanie skutej lub zwolniony.
—
Ostateczne uwagi
Przetestuj dokładnie na kopii swojego serwera przed wdrożeniem zmian na żywo.
Dostosuj listę `DisableControlAction` do swoich zasad odgrywania ról – niektóre serwery mogą chcieć zezwolić na określone ruchy lub zmiany.
Zawsze utrzymuj zmienne jasne i spójne; symbole zastępcze, takie jak `IsHandcuffed`, muszą być powiązane z rzeczywistymi flagami skryptów.
—
Podsumowanie – Twój ostateczny plan mobilności w kajdankach
Postępując zgodnie z tym
Przewodnik: Pozwalanie na ruch w kajdankach (FiveM), możesz wprowadzić realistyczne mechaniki kajdanek, które pozwolą graczom chodzić, jednocześnie odczuwając ograniczenia związane z byciem skrępowanym. To podejście zachowuje szczegółową rozgrywkę dla serwerów QBCore, ESX i vRP, czyniąc interakcje w odgrywaniu ról płynniejszymi i bardziej angażującymi dla wszystkich.
Powiązane ścieżki FiveMX