Praca mechanika w FiveM: repair natives, tuning mods i sprawdzenia pracy
Zbuduj pracę mechanika w FiveM: napraw pojazd za pomocą SetVehicleFixed i health natives, strojenie za pomocą SetVehicleModKit i SetVehicleMod, zapisz mody i bramy akcje według pracy.
Objaw: Twój mechanik naprawia samochód i silnik wciąż się dymi, wgniecenia pozostają, dostrojony element znika po restarcie, lub każdy gracz może naprawiać pojazdy za darmo.
Praca mechanika to dwie prace w jednej: naprawa (wartości zdrowotne i natives) i tuning (mody pojazdu). Oba działają na kliencie, więc część, którą musisz chronić, to kto jest dozwolony, aby je uruchomić.
Naprawa pojazdu
Jeden native to nie dość dla czystej naprawy. Ta kombinacja robi pracę:
-- client
local function repairVehicle(vehicle)
SetVehicleFixed(vehicle)
SetVehicleDeformationFixed(vehicle)
SetVehicleEngineHealth(vehicle, 1000.0)
SetVehicleBodyHealth(vehicle, 1000.0)
SetVehicleUndriveable(vehicle, false)
SetVehicleEngineOn(vehicle, true, true, false)
endSetVehicleFixednaprawia pojazd w ogólności, łącznie z oponami.SetVehicleDeformationFixedusuwa wgniecenia, które pierwszy native może zostawić.SetVehicleEngineHealthiSetVehicleBodyHealthbiorą wartość aż do1000.0. Poniżej zera silnik jest martwy, więc ustawienie ich z powrotem go uruchamia.
Ponieważ pojazd to sieciowa jednostka, klient dokonujący naprawy powinien ją posiadać. Jeśli naprawa działa na Twoim własnym samochodzie, a nie na samochodzie klienta, najpierw poproś o kontrolę:
NetworkRequestControlOfEntity(vehicle)
local timeout = 0
while not NetworkHasControlOfEntity(vehicle) and timeout < 50 do
Wait(10)
timeout += 1
endDla częściowych napraw (tylko silnik, tylko ciało), wywołaj tylko pasującego native'a zdrowia. Wartości zdrowia są również ważne dla innych skryptów, na przykład vehicle damage and engine health wyjaśnia co każda liczba robi.
Tuning za pomocą SetVehicleMod
Mody to ponumerowane sloty. Dwie reguły dotyczą wszystkich z nich:
- Wywołaj
SetVehicleModKit(vehicle, 0)przed jakąkolwiek zmianą modu. - Zapytaj grę ile opcji slot ma z
GetNumVehicleMods. Indeks-1to część zasobowa.
-- client
local function setMod(vehicle, modType, index)
SetVehicleModKit(vehicle, 0)
local count = GetNumVehicleMods(vehicle, modType)
if index >= -1 and index < count then
SetVehicleMod(vehicle, modType, index, false)
end
end
-- engine is mod type 11, brakes 12, transmission 13, suspension 15
setMod(vehicle, 11, 2)
-- turbo is a toggle, not a numbered mod
ToggleVehicleMod(vehicle, 18, true)Sprawdzenie indeksu przeciwko GetNumVehicleMods unika cichej awarii, gdy pojazd ma mniej opcji niż oczekujesz. Farba i kolor używają własnych native'ów (SetVehicleColours i inne), więc traktuj je jako osobne menu.
Wskazówka: zbuduj menu tuningu z samego pojazdu, pętlując przez sloty z
GetNumVehicleMods, zamiast na stałe kodować liczby. Pojazdy addon'owe często mają inną liczbę opcji.
Zapisywanie modów
Ustawienie modu zmienia tylko żywą jednostkę. Gdy gracz przechowuje samochód w garażu i wyjmuje go ponownie, mod znika, chyba że był zapisany z pojazdem. Zapisz pełny zestaw właściwości po stroeniu i zastosuj je, gdy pojazd się pojawia. Cały przepływ znajduje się w saving vehicle properties and mods.
Akcje bramowane przez pracę
Kod naprawy i tuning działa na kliencie, więc zmodyfikowany klient może go wywołać dla każdego. Umieść regułę na serwerze:
-- server (ox_lib)
lib.callback.register('mechanic:canRepair', function(source)
-- 1. job check: use your framework's player/job getter here
-- 2. distance check: the player must be near a vehicle or workshop
-- 3. item check and removal
local removed = exports.ox_inventory:RemoveItem(source, 'repairkit', 1)
return removed and true or false
end)-- client
lib.callback('mechanic:canRepair', false, function(ok)
if ok then repairVehicle(vehicle) end
end)Sprawdzenie pracy zależy od Twojego frameworku. Na ESX przeczytaj pracę z obiektu gracza, na QBCore i QBox przeczytaj ją z danych gracza. Użyj getera Twojego frameworku w kroku 1 i porównaj z nazwą swojej pracy mechanika, jak omówiono w adding a job on ESX i adding a job on QBCore. Dla wzorca callback'a na wszystkich frameworkach, zobacz server callbacks.
Inne rzeczy warte bramy:
- Zestawy naprawcze jako przedmioty, więc naprawa coś kosztuje i element jest usuwany na serwerze.
- Strefy warsztatu, więc tuning otwiera się tylko wewnątrz garażu lub przy stanowisku.
- Płacenie mechanikowi lub kontu społeczeństwa na serwerze, nie z klienta.
Pasek postępu z opcją anulowania sprawia, że naprawy wyglądają dobrze. Zobacz progress bars on ESX, QBCore and ox_lib.
Checklist
| Objaw | Rozwiązanie |
|---|---|
| Wgniecenia pozostają po naprawie | Dodaj SetVehicleDeformationFixed |
| Silnik wciąż się dymi | Ustaw siłę silnika z powrotem na 1000.0 |
| Naprawa działa tylko na Twoim własnym samochodzie | Najpierw poproś o kontrolę sieciową pojazdu |
SetVehicleMod nic nie robi |
Najpierw wywołaj SetVehicleModKit(vehicle, 0) |
| Indeks modu poza zakresem | Sprawdzaj GetNumVehicleMods dla tego slotu |
| Mody znikają po restarcie | Zapisz właściwości z pojazdem |
| Każdy może naprawiać | Sprawdzaj pracę, dystans i przedmiot na serwerze |
Szybkie odpowiedzi
Dlaczego SetVehicleFixed nie naprawia uszkodzenia ciała?
Naprawia większość pojazdu, ale nie zawsze widoczne zniekształcenie. Wywołaj również SetVehicleDeformationFixed(vehicle) i ustaw siłę silnika i ciała samodzielnie.
Dlaczego SetVehicleMod nic nie robi?
Musisz najpierw wywołać SetVehicleModKit(vehicle, 0). Bez modyfikacji, gra ignoruje zmianę modu.
Jak mogę upewnić się, że tylko mechanicy mogą naprawiać?
Sprawdzaj pracę na serwerze zanim zaakceptujesz naprawę, i weź przedmiot naprawy na serwerze. Sprawdzenie pracy po stronie klienta może być pominięte przez zmodyfikowanego klienta.

