Gaimo Posted February 16, 2019 Share Posted February 16, 2019 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
zMpyster Posted February 16, 2019 Share Posted February 16, 2019 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
Gaimo Posted February 16, 2019 Author Share Posted February 16, 2019 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
Other Languages Moderators Lord Henry Posted February 16, 2019 Other Languages Moderators Share Posted February 16, 2019 A respeito dessas bolinhas vermelhas, é bug do fórum que fica criando elas sozinho. Sempre delete elas do código. Link to comment
zMpyster Posted February 16, 2019 Share Posted February 16, 2019 (edited) 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 February 16, 2019 by zMpyster Link to comment
[M]ister Posted February 16, 2019 Share Posted February 16, 2019 (edited) 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 February 16, 2019 by MaligNos Link to comment
DNL291 Posted February 17, 2019 Share Posted February 17, 2019 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) 1 Link to comment
Gaimo Posted February 17, 2019 Author Share Posted February 17, 2019 Funcionou!! Agora está 100% o script. OBRIGADO a todos que enviaram suas respostas. Link to comment
Gaimo Posted November 9, 2019 Author Share Posted November 9, 2019 (edited) 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 November 9, 2019 by Gaimo Link to comment
Other Languages Moderators Lord Henry Posted November 9, 2019 Other Languages Moderators Share Posted November 9, 2019 Com table.insert 1 Link to comment
Gaimo Posted November 9, 2019 Author Share Posted November 9, 2019 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 Lord Henry Posted November 9, 2019 Other Languages Moderators Share Posted November 9, 2019 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. 1 Link to comment
Gaimo Posted November 10, 2019 Author Share Posted November 10, 2019 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
[M]ister Posted November 10, 2019 Share Posted November 10, 2019 veh = {} for i=1,30 do veh[createVehicle(481, 1505.42102 + i, -1753.69446, 13.54688)] = true end 1 Link to comment
Other Languages Moderators Lord Henry Posted November 10, 2019 Other Languages Moderators Share Posted November 10, 2019 Pra que serve esse true? Link to comment
DNL291 Posted November 11, 2019 Share Posted November 11, 2019 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. 1 Link to comment
Gaimo Posted March 12, 2020 Author Share Posted March 12, 2020 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
Gaimo Posted March 13, 2020 Author Share Posted March 13, 2020 Descobri que por padrão se não for definido o RespawnPosition, ele é definido onde o veículo foi criado. Logo não precisa setar o respawnPosition. Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now