Jump to content

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.

Link to comment
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.

Link to comment

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)

 

Link to comment

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
Link to comment

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
Link to comment
  • Moderators

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
Link to comment
  • 8 months later...
addEventHandler( "onResourceStart", resourceRoot, function()
	local x = 0 -- valor inicial
	local y = 30 -- quantidade de bikes
	local dist = 0 -- distancia das bikes
	
	while x ~= y do
		x = x + 1
		dist = dist - 1
		createVehicle( 481, 1120, -1474 + dist, 15, 0, 0, 90 )
	end
end)

Como posso colocar os veiculos criados no while dentro de uma tabela? N'ao quero ter que fazer isso:

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
	}

 

 

Edited by Gaimo
Link to comment
addEventHandler( "onResourceStart", resourceRoot, function()
	local dist = 0
	local bmx = {}
	for i=1,30 do
		dist = dist - 1
		table.insert(bmx, i, createVehicle (481, 1120, -1474 + dist, 15, 0, 0, 90))
		
	end

	
	

end)

Como posso definir o setVehicleRespawnPosition? 

 

Tentei isso mas n'ao funcionou.

for v, _ in pairs(bmx) do
		local px, py, pz = getElementPosition(v)
		local rx, ry, rz = getElementRotation(v)
		setVehicleRespawnPosition(v, px, py, pz, rx, ry, rz)
	end

Como fica a tabela bmx com esse for ? O que tem la dentro e como esta organizado?

Expected element at argument 1 no getElementPosition e Rotation, o que exatamente significa esse V ?  for v, _         

Link to comment
  • Other Languages Moderators

Vai dar erro em tudo. Vc criou a table bmx como sendo local. Ela não existe fora daquela função.

E não entendi pq vc está criando a table daquela forma, com os veículos como índices. Não sei da onde que vc inventou isso.

  • Confused 1
Link to comment

Achei que ficaria parecido com isso:

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
	}

Entao vou ter que fazer manualmente os 30 createVehicle?

Link to comment
  • Moderators

Pra fazer uma verificação do veículo armazenado na tabela:

if veh[getPedOccupiedVehicle(player)] then
	print("é um veículo da tabela")
end

Se o intuito dele não for fazer nada disso, então ele está usando uma estrutura errada para a tabela.

  • Thanks 1
Link to comment
  • 4 months later...

Desculpa reviver o tópico mas preciso de uma ajuda, como eu seto o respawn?

 

veh = {}

-- Cria os veiculos e coloca na table veh
for i=1,6 do
    veh[createVehicle(459, 1700.75781 + 3*i, -1806.09680, 13.54688, 0,0,0)] = true
end

Tentei colocar setVehicleRespawnPosition em todo o lugar mas n foi n

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