Maison > Questions et réponses > le corps du texte
Je souhaite envoyer la variable du véhicule du client au rappel du serveur, là je vérifierai si la personne avec l'identifiant Steam possède le véhicule qu'elle essaie d'ouvrir, si c'est le cas, toutes les plaques d'immatriculation qu'il possède seront enregistrées dans un tableau et renvoyé au client.
Comment transmettre les paramètres du rappel client au serveur ?
#client
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
#côté serveur
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
Tout ce que vous avez à faire est d'ajouter un paramètre supplémentaire au rappel du client. Si vous définissez le tableau ci-dessus comme je l'ai fait ci-dessous, alors ",board" conviendra.
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)
Pour le côté serveur, vous avez juste besoin de 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)