如何將參數從客戶端傳遞到伺服器回調,將資料儲存在數組中,然後將其發送回客戶端
P粉785905797
P粉785905797 2024-04-03 13:05:29
0
1
482

我想將車輛變數從客戶端發送到伺服器回調,在那裡,我將驗證具有steam id的人是否擁有他試圖打開的車輛,如果他擁有,那麼所有的他擁有的車牌將被保存在一個數組中,並發送回客戶端。

如何將參數從客戶端傳遞到伺服器回呼?

#客戶端

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

#伺服器端

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粉785905797
P粉785905797

全部回覆(1)
P粉567281015

您所需要做的就是在客戶端的回調中新增一個附加參數。如果您像我下面那樣定義上面的板,那麼“,板”就可以了。

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)
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板