Sign in to follow this  
Gaimo

Alugar bike por 10 minutos

Recommended Posts

Bom dessa vez consegui fazer o script quase completo, só faltou a cereja do bolo.
Como eu posso fazer para o jogador ficar com acesso as bikes somente por 10 minutos?

Script SERVER-SIDE

table = {} -- armazena os jogadores que tem acesso as bikes

marker = createMarker(1505.57727, -1750.79688, 12.6, "cylinder", 1, 255, 100, 0, 100)

addEventHandler( "onPlayerMarkerHit", root, function(m)
	if m == marker and not isPedInVehicle(source) then -- se o jogador entrar no marker
		exports.dxmsgs:outputDx(source, "Use o comando /alugarbike para ter acesso as uma bikes, custo R$50.", "info")
	end
end)

addCommandHandler ( "alugarbike", function(source)
	if not table.source and isElementWithinMarker(source, marker) then --se o jogador não está na tabela então...
		if getPlayerMoney(source) >= 50 then
			takePlayerMoney(source, 50)
			table.source = {} --adiciona o jogador na tabela
			exports.dxmsgs:outputDx(source, "Você pode usar as bikes até deslogar.", "success")
		else
			exports.dxmsgs:outputDx(source, "Você não tem dinheiro suficiente.", "error")
		end
	end
end)

function isTempOwner(source) 
	if not table.source then -- se o jogador não está na tabela não pode usar as bikes
		exports.dxmsgs:outputDx(source, "Você precisa alugar uma bike para poder usá-la", "error")
		cancelEvent()
	end
end

veh = {
	createVehicle(481, 1505.42102, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +1, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +2, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +3, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +4, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +5, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +6, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +7, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +8, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +9, -1753.69446, 13.54688),
}

for i, v in ipairs(veh) do
	addEventHandler("onVehicleStartEnter", v, isTempOwner)
	local px, py, pz = getElementPosition(v)
	local rx, ry, rz = getElementRotation(v)
	setVehicleRespawnPosition(v, px, py, pz, rx, ry, rz)
end

function respawnVehicles()
    for i, v in ipairs(veh) do
        if not getVehicleOccupant(v, 0) then 
            respawnVehicle(v)
            setElementHealth(v, 1000)
        end 
    end 
end
setTimer(respawnVehicles, 60000, 0)

addEventHandler( "onPlayerQuit", root,
	function()
		if table.source then
			table.source = nil
		end
	end
)

Não arrumei nada no client.

Share this post


Link to post
tableVeh = {
	[1] = {481, 1505.42102, -1753.69446, 13.54688},
	[2] = {481, 1505.42102 +1, -1753.69446, 13.54688},
	[3] = {481, 1505.42102 +2, -1753.69446, 13.54688},
	[4] = {481, 1505.42102 +3, -1753.69446, 13.54688},
	[5] = {481, 1505.42102 +4, -1753.69446, 13.54688},
	[6] = {481, 1505.42102 +5, -1753.69446, 13.54688},
	[7] = {481, 1505.42102 +6, -1753.69446, 13.54688},
	[8] = {481, 1505.42102 +7, -1753.69446, 13.54688},
	[9] = {481, 1505.42102 +8, -1753.69446, 13.54688},
	[10] = {481, 1505.42102 +9, -1753.69446, 13.54688},
}

addEventHandler("onResourceStart", resourceRoot, function()
	for i=1, 10 do
		veh[i] = createVehicle(tableVeh[i][1], tableVeh[i][2], tableVeh[i][3], tableVeh[i][4])
		local rx, ry, rz = getElementRotation(veh[i])
		setVehicleRespawnPosition(tableVeh[i][2], tableVeh[i][3], tableVeh[i][4], rx, ry, rz)
		addEventHandler("onVehicleStartEnter", veh[i], isTempOwner)
	end
end )

timer = {}
function isTempOwner(thePlayer) 
	if not table.thePlayer then
		exports.dxmsgs:outputDx(thePlayer, "Você precisa alugar uma bike para poder usá-la", "error")
		cancelEvent()
	else
		for i=1, 10 do
			if source == veh[i] then
				playerAndI = getPlayerName(thePlayer) .."".. i 
				timer[playerAndI] = setTimer ( function()
					respawnVehicle(veh[i])
					if table.thePlayer then
						table.thePlayer = nil
					end
				end, 60000, 1)
			end
		end
	end
end

Não testei.

Share this post


Link to post

Não funcionou, e não entendi nada do script, tipo por que tem veh e tableVeh? Se só tem a tableVeh?
veh  = createVehicle(tableVeh[1], tableVeh[2], tableVeh[3], tableVeh[4])

Não marquei todos os erros, mas o primeiro foi que tem umas bolinhas vermelhas no código, sim!!! Se tu copiar seu código e colocar de novo em uma caixa de código vai ver umas bolinhas vermelhas, da bug aquilo no mta, depois de um tempo fui entender o erro no mta, só aparecia que faltava um "=" mas era porque tinha uma bolinha vermelha.

ESSAS BOLINHAS ↓ Clique para abrir o código.

end



Depois deu uns outros erros, mas como eu não estava entendendo o código, resolvi aproveitar umas partes e tentar fazer o meu...
 

table = {} -- armazena os jogadores que tem acesso as bikes

marker = createMarker(1505.57727, -1750.79688, 12.6, "cylinder", 1, 255, 100, 0, 100)

addEventHandler("onPlayerMarkerHit", root, function(m)
	if m == marker and not isPedInVehicle(source) then -- se o jogador entrar no marker
		exports.dxmsgs:outputDx(source, "Use o comando /alugarbike para ter acesso as uma bikes, custo R$50.", "info")
	end
end)

addCommandHandler ("alugarbike", function(thePlayer)
	if not table.thePlayer and isElementWithinMarker(thePlayer, marker) then --se o jogador não está na tabela então...
		if getPlayerMoney(thePlayer) >= 50 then
			takePlayerMoney(thePlayer, 50)
			table.thePlayer = setTimer(function() removeTempOwner() end, 10000, 1)
			exports.dxmsgs:outputDx(thePlayer, "Você pode usar as bikes por dez SEGUNDOS.", "success")
		else
			exports.dxmsgs:outputDx(thePlayer, "Você não tem dinheiro suficiente.", "error")
		end
	end
end)

function isTempOwner(thePlayer) 
	if not table.thePlayer then -- se o jogador não está na tabela não pode usar as bikes
		exports.dxmsgs:outputDx(thePlayer, "Você precisa alugar uma bike para poder usá-la", "error")
		cancelEvent()
	end
end

veh = {
	createVehicle(481, 1505.42102, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +1, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +2, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +3, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +4, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +5, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +6, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +7, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +8, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +9, -1753.69446, 13.54688),
}

for i, v in ipairs(veh) do
	addEventHandler("onVehicleStartEnter", v, isTempOwner)
	local px, py, pz = getElementPosition(v)
	local rx, ry, rz = getElementRotation(v)
	setVehicleRespawnPosition(v, px, py, pz, rx, ry, rz)
end

function respawnVehicles()
    for i, v in ipairs(veh) do
        if not getVehicleOccupant(v, 0) then 
            respawnVehicle(v)
            setElementHealth(v, 1000)
        end 
    end 
end
setTimer(respawnVehicles, 60000, 0)

function removeTempOwner(thePlayer)
	if table.thePlayer then
		table.thePlayer = nil
	end
end
addEventHandler( "onPlayerQuit", root, removeTempOwner)

Mas faltou enviar a mensagem para o jogador que o tempo dele acabou e retirar ele do veículo se é da tabela veh ={}

Então pensei nisso:
 

addCommandHandler ("alugarbike", function(thePlayer)
	if not table.thePlayer and isElementWithinMarker(thePlayer, marker) then --se o jogador não está na tabela então...
		if getPlayerMoney(thePlayer) >= 50 then
			takePlayerMoney(thePlayer, 50)
------------------------------------------------------------------------------------------------------------------------------
			local tempPlayer = thePlayer

			table.thePlayer = setTimer(
			function(tempPlayer)
				removeTempOwner(tempPlayer)
				exports.dxmsgs:outputDx(tempPlayer, "Seu tempo para usar as bikes acabou.", "warning")
			end, 10000, 1)
------------------------------------------------------------------------------------------------------------------------------        
			exports.dxmsgs:outputDx(thePlayer, "Você pode usar as bikes por dez minutos.", "success")
		else
			exports.dxmsgs:outputDx(thePlayer, "Você não tem dinheiro suficiente.", "error")
		end
	end
end)

Não consigo mandar o player para dentro do timer. Mas eu perco acesso as bikes depois dos 10 segundos do timer.

function removeTempOwner(thePlayer)
	if table.thePlayer then
		table.thePlayer = nil

		local tempVeh = getPedOccupiedVehicle(thePlayer)
		if tempVeh then --and tempVeh == Como eu detecto se o veículo pertence a tabela veh?
			removePedFromVehicle(thePlayer)
		end
	end
end

Como eu faço para detectar se o veículo é da tabela veh?

if tempVeh and tempVeh == Como eu detecto se o veículo pertence a tabela veh? then 

 

Script completo

table = {} -- armazena os jogadores que tem acesso as bikes

marker = createMarker(1505.57727, -1750.79688, 12.6, "cylinder", 1, 255, 100, 0, 100)

addEventHandler("onPlayerMarkerHit", root, function(m)
	if m == marker and not isPedInVehicle(source) then -- se o jogador entrar no marker
		exports.dxmsgs:outputDx(source, "Use o comando /alugarbike para ter acesso as uma bikes, custo R$50.", "info")
	end
end)

addCommandHandler ("alugarbike", function(thePlayer)
	if not table.thePlayer and isElementWithinMarker(thePlayer, marker) then --se o jogador não está na tabela então...
		if getPlayerMoney(thePlayer) >= 50 then
			takePlayerMoney(thePlayer, 50)
			local tempPlayer = thePlayer

			table.thePlayer = setTimer(
			function(tempPlayer)
				removeTempOwner(tempPlayer)
				exports.dxmsgs:outputDx(tempPlayer, "Seu tempo para usar as bikes acabou.", "warning")
			end, 10000, 1)
			exports.dxmsgs:outputDx(thePlayer, "Você pode usar as bikes por dez minutos.", "success")
		else
			exports.dxmsgs:outputDx(thePlayer, "Você não tem dinheiro suficiente.", "error")
		end
	end
end)

function isTempOwner(thePlayer) 
	if not table.thePlayer then -- se o jogador não está na tabela não pode usar as bikes
		exports.dxmsgs:outputDx(thePlayer, "Você precisa alugar uma bike para poder usá-la", "error")
		cancelEvent()
	end
end

veh = {
	createVehicle(481, 1505.42102, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +1, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +2, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +3, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +4, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +5, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +6, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +7, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +8, -1753.69446, 13.54688),
	createVehicle(481, 1505.42102 +9, -1753.69446, 13.54688),
}

for i, v in ipairs(veh) do
	addEventHandler("onVehicleStartEnter", v, isTempOwner)
	local px, py, pz = getElementPosition(v)
	local rx, ry, rz = getElementRotation(v)
	setVehicleRespawnPosition(v, px, py, pz, rx, ry, rz)
end

function respawnVehicles()
    for i, v in ipairs(veh) do
        if not getVehicleOccupant(v, 0) then 
            respawnVehicle(v)
            setElementHealth(v, 1000)
        end 
    end 
end
setTimer(respawnVehicles, 60000, 0)

function removeTempOwner(thePlayer)
	if table.thePlayer then
		table.thePlayer = nil

		local tempVeh = getPedOccupiedVehicle(thePlayer)
		if tempVeh then --and tempVeh == Como eu detecto se o veículo pertence a tabela veh?
			removePedFromVehicle(thePlayer)
		end
	end
end

addEventHandler( "onPlayerQuit", root, function(thePlayer)
	if table.thePlayer then
		table.thePlayer = nil
	end
end)

 

Share this post


Link to post

A respeito dessas bolinhas vermelhas, é bug do fórum que fica criando elas sozinho. Sempre delete elas do código.

Share this post


Link to post

Basicamente esses tableVeh, era o valor de dentro e o "i" o index, ex

tableVeh = {
  	[1] = {valor1, valor2, valor3...}
  }

tableVeh[1][1] -- Vai recuperar o valor1 do index1 da tabela tableVeh

Isso seria bem útil para verificar o veículo assim ficando muito mais fácil verificar se ele é da tabela ou n, ai dps u

veh = {}	
	for i=1, 9 do
  	veh[i] -- Isso vai fazer com que cada veículo fique "salvo" em cada número, o que tinha o index1 fica "salvo" em veh[1], e assim vai...
  end

 

Edited by zMpyster

Share this post


Link to post

Dei uma olhada rápida (talvez tenha mais erros), deixo abaixo melhorias:

-- Linha 17:
table.thePlayer = setTimer(
function(tempPlayer)
	removeTempOwner(tempPlayer)
	exports.dxmsgs:outputDx(tempPlayer, "Seu tempo para usar as bikes acabou.", "warning")
end, 10000, 1, thePlayer)

-- Linha 70:
local tempVeh = getPedOccupiedVehicle(thePlayer)
if tempVeh then
	for _, v in ipairs(veh) do
		if (v == tempVeh) then
			removePedFromVehicle(thePlayer)
			break
		end
	end
end

-- Linha 77:
addEventHandler( "onPlayerQuit", root, function()
	if table.source then
		if isTimer(table.source) then killTimer(table.source) end
		table.source = nil
	end
end)

 

Edited by MaligNos

Share this post


Link to post

Tente isto (não testado) :


local table = {} -- armazena os jogadores que tem acesso as bikes

local veh
local marker

addEventHandler( "onResourceStart", resourceRoot, function()
	veh = {
		[ createVehicle(481, 1505.42102, -1753.69446, 13.54688) ] = true,
		[ createVehicle(481, 1505.42102 +1, -1753.69446, 13.54688) ] = true,
		[ createVehicle(481, 1505.42102 +2, -1753.69446, 13.54688) ] = true,
		[ createVehicle(481, 1505.42102 +3, -1753.69446, 13.54688) ] = true,
		[ createVehicle(481, 1505.42102 +4, -1753.69446, 13.54688) ] = true,
		[ createVehicle(481, 1505.42102 +5, -1753.69446, 13.54688) ] = true,
		[ createVehicle(481, 1505.42102 +6, -1753.69446, 13.54688) ] = true,
		[ createVehicle(481, 1505.42102 +7, -1753.69446, 13.54688) ] = true,
		[ createVehicle(481, 1505.42102 +8, -1753.69446, 13.54688) ] = true,
		[ createVehicle(481, 1505.42102 +9, -1753.69446, 13.54688) ] = true
	}
	
	marker = createMarker(1505.57727, -1750.79688, 12.6, "cylinder", 1, 255, 100, 0, 100)
	
	for v, _ in pairs(veh) do
		local px, py, pz = getElementPosition(v)
		local rx, ry, rz = getElementRotation(v)
		setVehicleRespawnPosition(v, px, py, pz, rx, ry, rz)
	end

	addEventHandler ( "onVehicleStartEnter", resourceRoot, isTempOwner )
	
	setTimer(respawnVehicles, 60000, 0)
end )

addEventHandler("onPlayerMarkerHit", root, function(m)
	if m == marker and not isPedInVehicle(source) then -- se o jogador entrar no marker
		exports.dxmsgs:outputDx(source, "Use o comando /alugarbike para ter acesso as uma bikes, custo R$50.", "info")
	end
end)

addCommandHandler ("alugarbike", function(thePlayer)
	if not table.thePlayer and isElementWithinMarker(thePlayer, marker) then --se o jogador não está na tabela então...
		if isTimer(table.thePlayer) then
			return outputChatBox( "Você já alugou uma bike. Aguarde até que possa alugar novamente", thePlayer, 230, 30,30 )
		end
		if getPlayerMoney(thePlayer) >= 50 then
			takePlayerMoney(thePlayer, 50)

			table.thePlayer = setTimer(
				function(p)
					if not (isElement(p)) then return end
					--
					removeTempOwner(p)
					exports.dxmsgs:outputDx(p, "Seu tempo para usar as bikes acabou.", "warning")
				end, 10000, 1, thePlayer
			)
			exports.dxmsgs:outputDx(thePlayer, "Você pode usar as bikes por dez minutos.", "success")
		else
			exports.dxmsgs:outputDx(thePlayer, "Você não tem dinheiro suficiente.", "error")
		end
	end
end)

function isTempOwner(thePlayer) 
	if not table.thePlayer then -- se o jogador não está na tabela não pode usar as bikes
		exports.dxmsgs:outputDx(thePlayer, "Você precisa alugar uma bike para poder usá-la", "error")
		cancelEvent()
	end
end

function respawnVehicles()
	for v, _ in pairs(veh) do
		if not getVehicleOccupant(v, 0) then 
			respawnVehicle(v)
			fixVehicle(v)
		end 
	end 
end

function removeTempOwner(thePlayer)
	if thePlayer and table.thePlayer then

		local tempVeh = getPedOccupiedVehicle(thePlayer)
		if tempVeh and veh[tempVeh] then
			removePedFromVehicle(thePlayer)
		end
		table.thePlayer = nil
	end
end

addEventHandler( "onPlayerQuit", root, function()
	if table.source then
		if isTimer(table.source) then killTimer(table.source) end
		table.source = nil
	end
end)

 

  • Thanks 1

Share this post


Link to post

Funcionou!! Agora está 100% o script. OBRIGADO a todos que enviaram suas respostas. 😎

Share this post


Link to post

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
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.