-- tabela com a posição dos markers
local markers = {
{
pos = { 505.2783203125, -1340.4423828125, 15.9609375 }, -- XYZ
int = 0, -- Interior -> padrão 0
dim = 0 -- Dimensão -> padrão 0
},
}
-- aqui criamos um element pai, isso servirá para que não precisemos adicionar um evento pra cara marker
local markerStorage = {
['parentElement'] = createElement( 'marker.parent' ),
['markerData'] = { }
}
-- armazena as bikes alugadas
local rentStorage = { }
-- desconta o dinheiro do jogador
local getPay = function( value, thePlayer )
local validValue = value and tonumber( value ) and value > 0
if not validValue then
return false
end
local playerMoney = getPlayerMoney( thePlayer ) or 0
if playerMoney < value then
return false
end
return takePlayerMoney( thePlayer, tonumber( value ) )
end
local isElementWithinRentMarker = function( thePlayer )
for i, _ in pairs( markerStorage['markerData'] ) do
if isElementWithinMarker( thePlayer, i ) then
return true
end
end
return false
end
-- verifica se o player tem uma bike, se tiver ele destroi a bike e retorna true
local verifyAndDestroyRentVehicle = function( thePlayer )
-- verifica se a pessoa tem uma bike alugada
if rentStorage[ thePlayer ] then
-- verifica se a bike existe
if isElement( rentStorage[ thePlayer ] ) then
-- destrói a bike
destroyElement( rentStorage[ thePlayer ] )
end
-- zera a tabela
rentStorage[ thePlayer ] = nil
return true
end
return false
end
-- mensagem para quando alguém entrar no marker
local markerOutputMessage = function( hit, dim )
local isValidElement = isElement( hit ) and getElementType( hit ) == 'player'
if not isValidElement then
return
end
local isElementInVehicle = getPedOccupiedVehicle( hit )
if isElementInVehicle then
outputChatBox( 'Você precisa estar fora de um veículo para alugar uma bicicleta.', hit, 255, 255, 255 )
return
end
outputChatBox( 'Digite /alugarbike para alugar a bike', hit, 0, 255, 0 )
end
-- comando de alugar a bike
addCommandHandler( 'alugarbike',
function( thePlayer )
-- verifica se o jogador está em um dos markeres de aluguel
local isElementInMarker = isElementWithinRentMarker( thePlayer )
-- verifica se o jogador está em um veículo
local isElementInVehicle = getPedOccupiedVehicle( thePlayer )
-- caso alguma das verificações seja verdadeira ele cancela a execução
if not isElementInMarker or isElementInVehicle then
return
end
-- destrói a bike caso o jogador já tenha uma
if verifyAndDestroyRentVehicle( thePlayer ) then
return
end
-- cobra o dinheiro do jogador
local payment = getPay( 50, thePlayer ) or false
-- verifica se o jogador tem dinheiro suficiente/se o pagamento foi feito
if not payment then
outputChatBox( '#FFFFFFAlgo deu errado com seu pagamento, verifique se você tem a quantia necessária para alugar uma bike', thePlayer, 255, 255, 255, true )
return
end
-- pega posição do jogador
local playerPosX, playerPosY, playerZ = getElementPosition( thePlayer )
-- pega dimensão e o interior do marker
local dim, int = markerStorage['markerData']['dim'] or 0, markerStorage['markerData']['int'] or 0
-- cria a bike e armazena na tabela
rentStorage[ thePlayer ] = createVehicle( 510, playerPosX, playerPosY, playerZ )
-- seta o interior e a dimensão da bike
setElementDimension( rentStorage[ thePlayer ], dim )
setElementInterior( rentStorage[ thePlayer ], int )
-- teleporta o jogador pra dentro da bike
warpPedIntoVehicle( thePlayer, rentStorage[ thePlayer ] )
end)
-- esse evento será chamado sempre que o resource ligar
addEventHandler( 'onResourceStart', resourceRoot,
function( )
-- fazemos um loop na tabela com as posições dos markers
for i, v in ipairs( markers ) do
-- cria o marker
local marker = createMarker( v.pos[1], v.pos[2], v.pos[3], 'cylinder', 1, 255, 0, 0, 150 ) -- criamos o marker
-- setamos o interior e a dimensão do marker
setElementInterior( marker, v.int )
setElementDimension( marker, v.dim )
-- setamos o marker como elemento filho do elemento pai que criamos acima
setElementParent( marker, markerStorage['parentElement'] )
-- armazenamos alguns dados do marker
markerStorage['markerData'][ marker ] = {
['markerElement'] = marker,
['int'] = v.int,
['dim'] = v.dim
}
end
addEventHandler('onMarkerHit', markerStorage['parentElement'], markerOutputMessage)
end)
-- esse evento será chamado sempre que alguém sair de um veículo
addEventHandler( 'onVehicleExit', root,
function( thePlayer )
verifyAndDestroyRentVehicle( thePlayer )
end)
-- esse evento é chamado sempre que alguém sair do servidor
addEventHandler( 'onPlayerQuit', root,
function( )
verifyAndDestroyRentVehicle( source )
end)
Não sei o que foi que eu fiz que mandei a versão com erro pra vc ao invés da corrigida, mas agora sim, aqui está a correta.