Jump to content

passar a conta do jogador para o client


Recommended Posts

Posted

estou com um script de concessionaria que seta o elementdata "ownercar" igual a conta do player assim:
 

setElementData(vehicle, "ownercar", getAccountName(getPlayerAccount(source)))

porém estou com problemas para determinar isso no outro script de trancar/destrancar ja que a função de trancar e destrancar
fica no client, e no client não se pode puxar a conta do player diretamente, eu não estou conseguindo verificar se o carro
e do player ou não no client

 

-- client

function processLockUnlock(vehicle)
    local locked = isVehicleLocked(vehicle)
    if isPedInVehicle(localPlayer) then
        playSounds("lockin")
    else
        playSounds("lockout")
    end
    if locked then
        triggerServerEvent("vehicleLock", localPlayer, vehicle, false)
        outputChatBox("#4B0082[BVN - Veiculo]: #FFFFFFVeiculo destrancado!", 255, 255, 255, true)
    else
        triggerServerEvent("vehicleLock", localPlayer, vehicle, true)
        outputChatBox("#4B0082[BVN - Veiculo]: #FFFFFFVeiculo trancado!", 255, 255, 255, true)
    end
end
-----------------------------------------------------------------------------------------------------
function setVehicleLockState() --Função trancar o carro
if klikkTimer then return end
if isTimer(klikkTimerRun) then return end
klikkTimer = true
    klikkTimerRun = setTimer(function()
    klikkTimer = false
end,1000,1)
    local vehicle = getPedOccupiedVehicle ( localPlayer )
    if vehicle then
        processLockUnlock(vehicle)
else
        local int2 = getElementInterior(localPlayer)
        local dim2 = getElementDimension(localPlayer)
        local mx,my,mz = getElementPosition(localPlayer)
            for k,v in ipairs(getElementsByType("vehicle")) do
            local x,y,z = getElementPosition(v)
            local int = getElementInterior(v)
            local dim = getElementDimension(v)
            local dist = getDistanceBetweenPoints3D(x,y,z,mx,my,mz)
                if dist <= 3 and int2 == int and dim2 == dim then
                    processLockUnlock(v)
            return
            end
        end
    end
end
bindKey("k", "down", setVehicleLockState)

-- server

function onVehicleLock(locked)
    local owner = getElementData(vehicle, "ownercar")
    if owner == getAccountName(getPlayerAccount(source)) then
        setVehicleLocked(vehicle, locked)
        vehicle:setData("veh:status", locked)
    end
end
addEvent("vehicleLock", true)
addEventHandler("vehicleLock", root, onVehicleLock)

perdão pela indentação da função do meio, quando eu não indento um código e porque eu esqueço que aqui tem que substituir tab por 4 espaços, porém desta vez
eu lembrei, mas realmente não sei como indentar a parte do meio

  • Other Languages Moderators
Posted

Configure seu editor de código para sempre indentar com espaços ao apertar a tecla TAB.

No notepad++ por exemplo dá pra fazer isso.

Passo a passo de como indentar a função do meio:

Spoiler
function setVehicleLockState() -- Função trancar o carro
if klikkTimer then return end
if isTimer(klikkTimerRun) then return end
klikkTimer = true
klikkTimerRun = setTimer(function()
klikkTimer = false
end,1000,1)
local vehicle = getPedOccupiedVehicle ( localPlayer )
if vehicle then
processLockUnlock(vehicle)
else
local int2 = getElementInterior(localPlayer)
local dim2 = getElementDimension(localPlayer)
local mx,my,mz = getElementPosition(localPlayer)
for k,v in ipairs(getElementsByType("vehicle")) do
local x,y,z = getElementPosition(v)
local int = getElementInterior(v)
local dim = getElementDimension(v)
local dist = getDistanceBetweenPoints3D(x,y,z,mx,my,mz)
if dist <= 3 and int2 == int and dim2 == dim then
processLockUnlock(v)
return
end
end
end
end
bindKey("k", "down", setVehicleLockState)

 

Spoiler
function setVehicleLockState() -- Função trancar o carro
    if klikkTimer then return end
    if isTimer(klikkTimerRun) then return end -- Normalmente esta função estaria com +4, mas ela não faz parte do escopo do if anterior pois ele já abriu e fechou na mesma linha.
    klikkTimer = true -- Normalmente essa linha e as de baixo estariam com +4, mas elas não fazem parte do escopo do if anterior pois ele já abriu e fechou na mesma linha.
    klikkTimerRun = setTimer(function()
    klikkTimer = false
    end,1000,1)
    local vehicle = getPedOccupiedVehicle ( localPlayer )
    if vehicle then
    processLockUnlock(vehicle)
    else
    local int2 = getElementInterior(localPlayer)
    local dim2 = getElementDimension(localPlayer)
    local mx,my,mz = getElementPosition(localPlayer)
    for k,v in ipairs(getElementsByType("vehicle")) do
    local x,y,z = getElementPosition(v)
    local int = getElementInterior(v)
    local dim = getElementDimension(v)
    local dist = getDistanceBetweenPoints3D(x,y,z,mx,my,mz)
    if dist <= 3 and int2 == int and dim2 == dim then
    processLockUnlock(v)
    return
    end
    end
    end
end
bindKey("k", "down", setVehicleLockState)

 

Spoiler
function setVehicleLockState() -- Função trancar o carro
    if klikkTimer then return end
    if isTimer(klikkTimerRun) then return end
    klikkTimer = true
    klikkTimerRun = setTimer(function()
        klikkTimer = false -- Faz parte do escopo do timer.
    end,1000,1) -- Esse end fecha a função do timer, deve ficar no mesmo nível dele.
    local vehicle = getPedOccupiedVehicle ( localPlayer )
    if vehicle then
        processLockUnlock(vehicle) -- Faz parte do escopo do if.
    else -- Não faz parte do escopo do if.
        local int2 = getElementInterior(localPlayer) -- Fazem tudo parte do escopo do else.
        local dim2 = getElementDimension(localPlayer)
        local mx,my,mz = getElementPosition(localPlayer)
        for k,v in ipairs(getElementsByType("vehicle")) do
        local x,y,z = getElementPosition(v)
        local int = getElementInterior(v)
        local dim = getElementDimension(v)
        local dist = getDistanceBetweenPoints3D(x,y,z,mx,my,mz)
        if dist <= 3 and int2 == int and dim2 == dim then
        processLockUnlock(v)
        return
        end
        end
    end -- Fecha o if e o else, deve ficar no mesmo nível deles.
end
bindKey("k", "down", setVehicleLockState)

 

Spoiler
function setVehicleLockState() -- Função trancar o carro
    if klikkTimer then return end
    if isTimer(klikkTimerRun) then return end
    klikkTimer = true
    klikkTimerRun = setTimer(function()
        klikkTimer = false
    end,1000,1)
    local vehicle = getPedOccupiedVehicle ( localPlayer )
    if vehicle then
        processLockUnlock(vehicle)
    else
        local int2 = getElementInterior(localPlayer)
        local dim2 = getElementDimension(localPlayer)
        local mx,my,mz = getElementPosition(localPlayer)
        for k,v in ipairs(getElementsByType("vehicle")) do
            local x,y,z = getElementPosition(v) -- Fazem parte do escopo do for.
            local int = getElementInterior(v)
            local dim = getElementDimension(v)
            local dist = getDistanceBetweenPoints3D(x,y,z,mx,my,mz)
            if dist <= 3 and int2 == int and dim2 == dim then
            processLockUnlock(v)
            return
            end
        end -- Fecha o for, deve ficar no mesmo nível dele.
    end
end
bindKey("k", "down", setVehicleLockState)

 

Spoiler
function setVehicleLockState() --Função trancar o carro
    if klikkTimer then return end
    if isTimer(klikkTimerRun) then return end
    klikkTimer = true
    klikkTimerRun = setTimer(function()
        klikkTimer = false
    end, 1000, 1)
    local vehicle = getPedOccupiedVehicle (localPlayer)
    if vehicle then
        processLockUnlock(vehicle)
    else
        local int2 = getElementInterior(localPlayer)
        local dim2 = getElementDimension(localPlayer)
        local mx, my, mz = getElementPosition(localPlayer)
        for _,v in pairs(getElementsByType("vehicle")) do -- Não precisa de ipairs se a ordem e o índice forem irrelevantes.
            local x, y, z = getElementPosition(v)
            local int = getElementInterior(v)
            local dim = getElementDimension(v)
            local dist = getDistanceBetweenPoints3D(x, y, z, mx, my, mz)
            if dist <= 3 and int2 == int and dim2 == dim then
                processLockUnlock(v) -- Fazem parte do escopo do if.
                return
            end -- Fecha o if, deve ficar no mesmo nível dele.
        end
    end
end
bindKey("k", "down", setVehicleLockState)

 

 

Posted

ok, eu acho que entendi, me diga uma coisa, os ends, independente de qualquer coisa, sempre estarão em formato de escada?
e também se poder ajudar ali na questão de passar a conta do server para o client, ajuda demais

  • Other Languages Moderators
Posted
27 minutes ago, SciptNovato said:

os ends, independente de qualquer coisa, sempre estarão em formato de escada?

Não. Depende dos ifs e elses a quem eles pertencem. É comum eles ficarem em forma de escada no final das funções mas não é uma regra.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...