Heim > Fragen und Antworten > Hauptteil
Ich möchte die Fahrzeugvariable vom Client an den Serverrückruf senden. Dort werde ich überprüfen, ob die Person mit der Steam-ID das Fahrzeug besitzt, das sie öffnen möchte. Wenn ja, werden alle Nummernschilder, die sie besitzt, gespeichert Ein Array wird eingefügt und an den Client zurückgesendet.
Wie übergebe ich Parameter vom Client an den Server-Callback?
#Kunde
function openmenuvehicle() local playerPed = PlayerPedId() local coords = GetEntityCoords(playerPed) local vehicle = nil if IsPedInAnyVehicle(playerPed, false) then vehicle = GetVehiclePedIsIn(playerPed, false) else vehicle = getVehicleInDirection(3.0) if not DoesEntityExist(vehicle) then vehicle = GetClosestVehicle(coords, 3.0, 0, 70) end end if DoesEntityExist(vehicle) then local lockStatus = GetVehicleDoorLockStatus(vehicle) if lockStatus == 0 or lockStatus == 1 then local trunkpos = GetWorldPositionOfEntityBone(vehicle, GetEntityBoneIndexByName(vehicle, "boot")) local distanceToTrunk = GetDistanceBetweenCoords(coords, trunkpos, 1) if distanceToTrunk <= 1.25 or (trunkpos.x + trunkpos.y + trunkpos.z) == 0.0 then ESX.TriggerServerCallback('esx_inventoryhud_trunk:getOwner', function(isOwner) print(isOwner) if isOwner then TriggerEvent( "mythic_progbar:client:progress", { name = "Open_Trunk", duration = Config.OpenTime, label = 'ABRINDO MALA', useWhileDead = false, canCancel = true, controlDisables = { disableMovement = true, disableCarMovement = true, disableMouse = false, disableCombat = true } }, function(status) if not status then currentVehicle = vehicle SetVehicleDoorOpen(vehicle, 5, false, false) local class = GetVehicleClass(vehicle) OpenCoffreInventoryMenu(GetVehicleNumberPlateText(vehicle), Config.VehicleLimit[class]) end end ) end end) else exports['okokNotify']:Alert("", "Aproxima-te da mala", 3000, 'error') end else exports['okokNotify']:Alert("", "Mala trancada", 3000, 'error') end else exports['okokNotify']:Alert("", "Sem veículos por perto", 3000, 'error') end end
#serverseitig
ESX.RegisterServerCallback("esx_inventoryhud_trunk:getOwner", function(source, cb, plate) local id = GetPlayerIdentifiers(source)[1] MySQL.Async.fetchAll("SELECT plate FROM owned_vehicles WHERE owner = @owner", {['@owner'] = id}, function(data) if data[1].owner == id then return cb(true) else return cb(false) end end) end)
P粉5672810152024-04-04 12:07:24
您所需要做的就是向客户端的回调添加一个附加参数。如果您像我下面那样定义上面的板,那么“,板”就可以了。
local plate = GetVehicleNumberPlateText(vehicle) ESX.TriggerServerCallback('esx_inventoryhud_trunk:getOwner', function(isOwner, owned_vehicles) print(isOwner) if isOwner then TriggerEvent( "mythic_progbar:client:progress", { name = "Open_Trunk", duration = Config.OpenTime, label = 'ABRINDO MALA', useWhileDead = false, canCancel = true, controlDisables = { disableMovement = true, disableCarMovement = true, disableMouse = false, disableCombat = true } }, function(status) if not status then currentVehicle = vehicle SetVehicleDoorOpen(vehicle, 5, false, false) local class = GetVehicleClass(vehicle) OpenCoffreInventoryMenu(plate, Config.VehicleLimit[class]) end end) end end, plate)
对于服务器端,您只需 cb(data)。
ESX.RegisterServerCallback("esx_inventoryhud_trunk:getOwner", function(source, cb, plate) local id = GetPlayerIdentifiers(source)[1] MySQL.Async.fetchAll("SELECT plate FROM owned_vehicles WHERE owner = @owner", {['@owner'] = id}, function(data) local found = false; for i = 1, #data do local this = data[i] if this.plate == plate then cb(true, data) found = true; -- need to do this to prevent to callbacks end end if not found then cb(false, {}) end end) end)