Jump to content

Meu painel esta abrindo para todos os jogadores do servidor


Recommended Posts

Ta uma bagunça, pra ser sincero nem sem o que está acontecendo, o painel abre pra geral, ou não abre pra mim abre pra outro.

Qual a diferença entre root, getElementRoot() e localPlayer ?

 

Server-side

sW, sH = guiGetScreenSize()
aBoxes = 0
panel = false

function GUI()
    panel = true
    dxDrawImage(sW/2 - 320, sH/2 - 320, 640, 640, "files/img/painel.png")
    --dxDrawImage(sW/2 + 170, sH/2 - 150, 30, 30, "files/img/bAccept.png")
end

function showPanel(source)
    if panel == false then
        showCursor(not isCursorShowing(source))
        addEventHandler("onClientRender", source, GUI)
        panel = true
        return
    elseif panel == true then
        removeEventHandler("onClientRender", source, GUI)
        panel = false
    end
end

function isCursorOnElement( posX, posY, width, height )
	if isCursorShowing( ) then
		local mouseX, mouseY = getCursorPosition( )
		local clientW, clientH = guiGetScreenSize( )
		local mouseX, mouseY = mouseX * clientW, mouseY * clientH
		if ( mouseX > posX and mouseX < ( posX + width ) and mouseY > posY and mouseY < ( posY + height ) ) then
			return true
		end
	end
	return false
end

function click(_,state)
    if state == "down" and panel then
        -- Accept
        if isCursorOnElement(sW/2 - 75, sH/2 + 100, 150, 40) then
            showCursor(false)
            showPanel()
            triggerServerEvent ( "setJob", resourceRoot, localPlayer)
        -- Close
        elseif isCursorOnElement(sW/2 + 170, sH/2 - 150, 30, 30) then
            showCursor(false)
            showPanel()
        end
    end
end
addEventHandler ( "onClientClick", getRootElement(), click)

routes = {
    --[1] = {1567.93457, -1893.43579, 12.96944},
    --[2] = {1405.94702, -1880.95251, 12.95655},
    [1] = {1688.91943, -1829.25281, 13.48962},
    [2] = {1689.58313, -1797.27710, 13.48806},
}

ped = createPed(0, 1683.96326, -1815.92603, 13.54688)
setElementFrozen(ped, true)
getJob = createMarker(1683.96326, -1815.92603, 13.54688-0.8, "cylinder", 2, 0, 0, 0, 10)

-- usefull function
function randomDiff (start, finish)
	if start >= finish or not start or not finish then return false end
	if (math.floor(start) ~= start) or (math.floor(finish) ~= finish) then return false end
	local rand = math.random(start, finish)
	while (rand == lastRand) do
		rand = math.random(start, finish)
	end
	lastRand = rand
	return rand
end

-- Gera uma rota para o player
function rota()
    local RR = routes[randomDiff(1, #routes)]
    target = createMarker(RR[1], RR[2], RR[3], "cylinder", 2, 255, 0, 0, 255)
    blip = createBlipAttachedTo(target, 41, 1)
end

function startJob()
    aBoxes = 0
    startMarker = createMarker(1683.57776, -1811.70239, 13.54688 - 0.8, "cylinder", 2, 255, 0, 0, 255)
    createBlipAttachedTo(startMarker, 41, 1)
end
addEvent( "startJob", true )
addEventHandler( "startJob", localPlayer, startJob )

function frozen(thePlayer, time)
    setTimer(function() setElementFrozen(getPedOccupiedVehicle(thePlayer), true) end, 300, 1)
    setTimer(function() setElementFrozen(getPedOccupiedVehicle(thePlayer), false) end, time, 1)
end

function del()
    destroyElement(blip)
    destroyElement(target)
end
addEvent( "del", true )
addEventHandler( "del", localPlayer, del)

-- Main
addEventHandler( "onClientMarkerHit", getRootElement(), function (thePlayer, dim)
    -- Source = Marker que o player hitou
    if dim then
        if source == getJob and not isPedInVehicle(thePlayer) then
            showPanel(thePlayer)
        end
        if source == startMarker then
            -- Avisar se o jogador já tem as caixas e não pode pegar mais
            if aBoxes >= 10 then outputChatBox("Aviso, player ja tem as caixas") return end
            -- Roda alguma animacao
            frozen(thePlayer, 3000)    
            -- Seta a quantidade de caixas pra 10
            aBoxes = 3            
            -- Gera uma rota aleatoria
            setTimer(function() rota() end, 3000, 1)
        end
        -- Se o marker existe e eh o destino do player
        if target ~= nil and source == target then
            del()
            frozen(thePlayer, 3000)
            -- Paga o player
            setElementData(localPlayer, "dinheiro", math.random(100, 200))
            -- Faz alguma animacao e para o carro

            -- Diminui uma caixa
            aBoxes = aBoxes - 1
            -- Informa a quantidade de caixas
            outputChatBox("Caixas restantes: "..aBoxes)

            if aBoxes > 0 then
                -- Gera uma rota aleatoria
                setTimer(function() rota() end, 3000, 1)
            elseif aBoxes == 0 then
                outputChatBox("Retorne ao estoque para pegar mais caixas.")
            end   
        end
    end
end)

 

Link to comment
  • A maior parte do problema está na função showPanel, nela não precisa do argumento source na função, por padrão o jogador vai ser localPlayer
  • O  isCursorShowing no client-side não precisa do argumento do player, dito isso, você deve remover o source do mesmo.
  • Como dito ali em cima, por padrão o jogador vai ser localPlayer, então em addEventHandler e removeEventHandler você deve alterar o source para localPlayer
  • Na função click tem um erro no triggerServerEvent você está enviando o localPlayer para todo o resourceRoot, o certo é você remover o resourceRoot e deixar apenas o localPlayer

 

Provavelmente há mais problemas, mas está tão bagunçado e confuso, que lendo por cima consegui ver esses ditos acima.

 

35 minutes ago, Gaimo said:

Qual a diferença entre root, getElementRoot() e localPlayer ?

root é uma abreviação do getRootElement.

O root/getRootElement, Como o nome deles já diz, ele retorna todos os elementos raiz.

o localPlayer é apenas para o client-side, o mesmo retorna jogador local.

Edited by Tommy.
Link to comment

Assim? 
 

function showPanel()
    if panel == false then
        showCursor(not isCursorShowing())
        addEventHandler("onClientRender", localPlayer, GUI)
        panel = true
        return
    elseif panel == true then
        removeEventHandler("onClientRender", localPlayer, GUI)
        panel = false
    end
end

 

Link to comment

Basta verificar no evento onClientMarkerHit se o hitElement é igual a localPlayer

addEventHandler( "onClientMarkerHit", getRootElement(), function (thePlayer, dim)
    -- Source = Marker que o player hitou
    if dim and thePlayer == localPlayer then
        if source == getJob and not isPedInVehicle(thePlayer) then
            showPanel(thePlayer)
        end
        if source == startMarker then
            -- Avisar se o jogador já tem as caixas e não pode pegar mais
            if aBoxes >= 10 then outputChatBox("Aviso, player ja tem as caixas") return end
            -- Roda alguma animacao
            frozen(thePlayer, 3000)    
            -- Seta a quantidade de caixas pra 10
            aBoxes = 3            
            -- Gera uma rota aleatoria
            setTimer(function() rota() end, 3000, 1)
        end
        -- Se o marker existe e eh o destino do player
        if target ~= nil and source == target then
            del()
            frozen(thePlayer, 3000)
            -- Paga o player
            setElementData(localPlayer, "dinheiro", math.random(100, 200))
            -- Faz alguma animacao e para o carro

            -- Diminui uma caixa
            aBoxes = aBoxes - 1
            -- Informa a quantidade de caixas
            outputChatBox("Caixas restantes: "..aBoxes)

            if aBoxes > 0 then
                -- Gera uma rota aleatoria
                setTimer(function() rota() end, 3000, 1)
            elseif aBoxes == 0 then
                outputChatBox("Retorne ao estoque para pegar mais caixas.")
            end   
        end
    end
end)

 

Edited by MainSCR
  • Thanks 1
Link to comment

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...