Search the Community
Showing results for tags 'loop'.
-
Neste tutorial irei explicar qual a diferença entre um loop usando pairs e um loop usando ipairs. Mas antes de prosseguir, é necessário entender o que é uma tabela indexada e uma tabela não indexada. Tabela indexada é aquela cujos itens tem seu índice declarado. Os índices podem ser números, textos ou elementos. Tabela não indexada é aquela cujos itens não tem seu índice declarado. Porém a linguagem Lua automaticamente indexará essas tabelas com inteiros sequenciais. local tabela = {"1", 2, "três", 0.4, false, 0} -- Tabela não indexada. -- O MTA vai considerar a tabela acima dessa forma: local tabela = { -- Tabela indexada com inteiros sequenciais. [1] = "1", [2] = 2, [3] = "três", [4] = 0.4, [5] = false, [6] = 0 } -- Escrevi a tabela na vertical para facilitar a leitura, não faz diferença escrever tudo na mesma linha. É importante saber disso pois ipairs leva em consideração os índices dos itens de uma tabela, como veremos a seguir. CONCEITO Tanto o pairs quanto o ipairs são utilizados para fazer loops que percorrem uma tabela usando o laço de repetição for. Mas existem situações em que um ipairs não funciona e também há situações em que o pairs não atende ao objetivo que o scripter precisa. Basicamente, o pairs percorre os itens de uma tabela mas não garante a mesma ordem em que eles foram declarados e nem a sequência de seus índices. Sem qualquer ordem específica, ele não exige que a tabela seja indexada por inteiros sequenciais, já que ele não leva em consideração a ordem dos índices da tabela. Enquanto o ipairs (significado: index-value pairs) percorre os itens de uma tabela sempre seguindo a sequência de seus índices. Verificando primeiro o item de índice 1, depois o item de índice 2 e assim por diante. Se um índice da sequência estiver faltando, ele não percorrerá o resto e vai parar de verificar. Também não importa a ordem em que os índices são declarados. Se você declara o item de índice 2 e depois o item de índice 1, mesmo assim ele vai ler o item de índice 1 primeiro e depois o item de índice 2. O ipairs também não é capaz de verificar itens cujo índice não seja um inteiro, pois ele não sabe a sequência que ele pertence, portanto itens de índice string não são verificados pelo ipairs. EXEMPLOS Usando o pairs: (note que o exemplo é server-side, mas tanto o pairs quanto o ipairs podem ser usados client-side também) Server-side addCommandHandler("eae", function(thePlayer, cmd) -- Vamos setar algumas elementDatas em si mesmo só para testes. setElementData(thePlayer, "vida", 100) setElementData(thePlayer, "colete", 90) -- (Datas fictícias, não alteram de verdade a vida nem colete do jogador). setElementData(thePlayer, "vivo", true) setElementData(thePlayer, "procurado", false) setElementData(thePlayer, "emprego", "Mecânico") local datas = getAllElementData(thePlayer) -- Obtém uma tabela com todas as elementDatas do jogador que executou o comando /eae -- A tabela retornada seria assim: (supondo que o jogador não tenha outras elementDatas setadas nele) --[[ local datas = { ["vida"] = 100, ["colete"] = 90, ["vivo"] = true, ["procurado"] = false, -- Este é o único jeito de saber se uma elementData false existe mesmo. ["emprego"] = "Mecânico" } --]] -- Para verificar cada item dessa tabela, o pairs precisa ser usado pois os índices são strings enquanto o ipairs só funciona com índices inteiros sequenciais. for name, value in pairs(datas) do print(name.." = "..tostring(value)) end -- Não há qualquer garantia de que os itens sejam verificados na mesma ordem em que foram declarados. Consideramos isso aleatório. end) Obs: O pairs também funciona em tabelas com índices inteiros sequenciais como o ipairs, porém percorre de maneira aleatória enquanto o ipairs segue a sequência dos índices. 1) Se trocar o pairs por um ipairs, nenhum item será verificado. Pois não foi encontrado o índice 1. Obs2: Mesmo se você definir uma elementData com nome "1", o índice continuará sendo uma string, não sendo lido pelo ipairs. Vimos acima um exemplo que precisa usar pairs pois o ipairs não funcionaria. Agora veremos um exemplo onde o ipairs seria mais adequado. Client-side local palavras = { [1] = "Neste ", [2] = "caso ", [3] = "a ", [4] = "ordem ", [6] = "importa " -- Esqueci do índice 5 de propósito. } local mensagem = "" for i, v in ipairs(palavras) do mensagem = mensagem..v end print(mensagem) Faça os seguintes testes: 1) Execute o código acima do jeito que está, veremos que a mensagem final aparece incompleta. Pois ele não encontrou o índice 5 e parou de verificar o resto dos itens. Retornando a mensagem "Neste caso a ordem " 2) Se trocarmos o ipairs por um pairs, veremos que a mensagem ficará bagunçada, pois os itens foram verificados de maneira aleatória. Porém desta vez todas as palavras serão verificadas, pois o índice não é levado em consideração pelo pairs, somente pelo ipairs. 3) Troque o pairs pelo ipairs de volta e substitua o índice 6 por 5. A mensagem aparecerá completa e com as palavras em ordem. Já que não haverá nenhum índice faltando na sequência. 4) Troque a ordem dos itens da tabela dessa forma: (preste atenção na vírgula, ela é obrigatória em todos os itens, exceto no último) local palavras = { [4] = "ordem ", [2] = "caso ", [5] = "importa ", [1] = "Neste ", [3] = "a " } Veremos que o ipairs continuará verificando cada item na ordem correta. Já que o que importa para ele são os índices e não a ordem em que os itens foram declarados na tabela.
-
Quero que ele gire! local gate = createObject(13831, 1401.72900, -806.37512, 84.99246, 0, 0, 0) function girar () moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 10) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 20) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 30) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 40) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 50) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 60) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 70) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 80) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 90) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 100) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 110) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 120) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 130) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 140) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 150) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 160) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 170) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 180) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 190) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 200) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 210) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 220) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 230) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 240) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 250) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 260) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 270) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 280) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 290) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 300) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 310) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 320) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 330) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 340) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 350) moveObject(gate, 6000, 1401.72900, -806.37512, 84.99246, 0, 0, 360) end addEventHandler("onResourceStart", root, girar)
-
Estou com um grande problema no meu sistema de inventário, não consegui pensar em uma solução até o momento. Preciso fazer um sistema de resetar o inventário do player através de comando ou quando o mesmo morrer, tentei mais ou menos desta maneira: ItensNaoRemoviveis = { ["identidade"] = true, ["porte"] = true, ["cnh"] = true, ["ak47natal"] = true, } inventario = { [1] = {"hamburguer", 2}, [2] = {"suco", 3}, [3] = {"glock", 5}, [4] = {"kit_reparo", 2}, } function teste() for i, v in pairs(inventario) do local item = inventario[i][1] if not ItensNaoRemoviveis[item] then table.remove(i) end end end addCommandHandler("test", teste) Porém, quando usa o table.remove, ele "deleta" o index atual e acaba puxando o próximo pro lugar dele, ai quando o loop roda novamente, ele vai para o próximo index do loop, ignorando o que foi "movido". Usar o bom e velho 'nil' não é viável nessa situação pois se setar o inventario inteiro como nil, o jogador perde itens como documentos, skins de armas compradas na loja, etc. e se setar o inventario[index] como nil, o próximo item que será adicionado através do table.insert irá "pular" este campo vazio e será adicionado depois da última linha "válida" da tabela, e quando chegar no limite de slots do inventario (30), ele não vai mais acrescentar item e vai retornar uma mensagem de erro, mesmo tendo os espaços vazios feitos pelo nil. inventario = nil inventario[i] = nil
-
Olá, estou com um loadingscreen que quando o player entra no sv baixando os arquivos a loading aparece. porem quando o download acaba ela continua carregando ifinitamente e não para --Client local sx, sy = guiGetScreenSize() local x, y = (sx/1366), (sy/768) local resourceRoot = getResourceRootElement(getThisResource()) local screenWidth, screenHeight = guiGetScreenSize() local myScreenSource = dxCreateScreenSource(screenWidth, screenHeight) local root = getRootElement() local rote = 0 local musica = true local Tipo = nil local pLife = {} local AlphaAB = 0 function pLife.iniciarLoadingScreen() PlayMusicLoandig = playSound("olds/sound/music.mp3", true) Tipo = "Play" setSoundVolume(PlayMusicLoandig,1.0) showCursor(true) showChat(false) addEventHandler("onClientRender", root, pLife.MenuDxLoad) end addEventHandler("onClientResourceStart", resourceRoot, pLife.iniciarLoadingScreen) function pLife.fimLoandingScreen() if isTransferBoxActive() == true then setTimer(pLife.fimLoandingScreen, 2000, 1) else removeEventHandler("onClientRender", root, pLife.MenuDxLoad) destroyElement(PlayMusicLoandig) showCursor(false) showChat(true) musica = false end end setTimer(pLife.fimLoandingScreen, 2000, 1) pLife = {} pLife["img"] = 1 pLife["timer"] = setTimer(function() pLife["img"] = 1 and 2 end, 40000, 0) function pLife.MenuDxLoad() rote = rote +12/8 local seconds = getTickCount() / 6000 local scale = math.sin(seconds) * 1 local seconds2 = getTickCount() / 4000 local scale2 = math.sin(seconds2) * 1 local rotation2 = 0 local AnimStouro = getSoundFFTData(PlayMusicLoandig, 2048, 2) for i,v in pairs(AnimStouro) do rotation1 = math.round((v*530),0) rotation2 = math.round((v*430),0) + 7 end AlphaAB = AlphaAB + 0.4 if AlphaAB >= 255 then AlphaAB = 255 end dxDrawImage(x*0, y*0, x*1366, y*768, "olds/images/bg.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*0, y*0, x*1366, y*768, "olds/images/lights.png", 0, 0, 0, tocolor(255, 255, 255, 0*rotation1+rotation2), false) dxDrawImage(x*630/scale, y*280, x*94, y*160, "olds/images/logo.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*580, y*240/scale, x*117, y*90, "olds/images/coroa.png", 330, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*30, y*205, x*17, y*34, "olds/images/pausa.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) dxDrawImage(x*72, y*205, x*32, y*34, "olds/images/play.png", 0, 0, 0, tocolor(255, 255, 255, 255), false) if Tipo == "Pausa" then dxDrawImage(x*30, y*205, x*17, y*34, "olds/images/pausa.png", 0, 0, 0, tocolor(0, 111, 255, 255), false) elseif Tipo == "Play" then dxDrawImage(x*72, y*205, x*32, y*34, "olds/images/play.png", 0, 0, 0, tocolor(0, 111, 255, 255), false) end dxDrawImage(x*-24/scale2, y*163, x*441, y*636, "olds/images/"..pLife["img"]..".png", 0, 0, 0, tocolor(255, 255, 255, AlphaAB), false) dxDrawImage(x*623, y*627, x*100, y*100, "olds/images/load.png", rote, 0, 0, tocolor(255, 255, 255, 255), false) end addEventHandler('onClientClick', root, function(button, state, _, _, _, _, _, element) if button == 'left' and state == 'down' and musica then if cursorPosition(x*30, y*205, x*17, y*34) then setSoundPaused(PlayMusicLoandig, true) Tipo = "Pausa" elseif cursorPosition(x*72, y*205, x*32, y*34) then setSoundPaused(PlayMusicLoandig, false) Tipo = "Play" end end end) function pLife.OnStop () setPlayerHudComponentVisible("armour", true) setPlayerHudComponentVisible("wanted", true) setPlayerHudComponentVisible("weapon", true) setPlayerHudComponentVisible("money", true) setPlayerHudComponentVisible("health", true) setPlayerHudComponentVisible("clock", true) setPlayerHudComponentVisible("breath", true) setPlayerHudComponentVisible("ammo", true) setPlayerHudComponentVisible("radar", true) end addEventHandler("onClientResourceStop", getResourceRootElement(getThisResource()), pLife.OnStop) function pLife.OnStart () setPlayerHudComponentVisible("armour", false) setPlayerHudComponentVisible("wanted", false) setPlayerHudComponentVisible("weapon", false) setPlayerHudComponentVisible("money", false) setPlayerHudComponentVisible("health", false) setPlayerHudComponentVisible("clock", false) setPlayerHudComponentVisible("breath", false) setPlayerHudComponentVisible("ammo", false) setPlayerHudComponentVisible("radar", false) end addEventHandler( "onClientResourceStart", getResourceRootElement(getThisResource()), pLife.OnStart ) --Shared function cursorPosition(x, y, width, height) if(not isCursorShowing()) then return false end local sx, sy = guiGetScreenSize() local cx, cy = getCursorPosition() local cx, cy =(cx*sx),(cy*sy) if(cx >= x and cx <= x + width) and(cy >= y and cy <= y + height) then return true else return false end end function math.round(number, decimals, method) decimals = decimals or 0 local factor = 10 ^ decimals if(method == "ceil" or method == "floor") then return math[method](number * factor) / factor else return tonumber(("%."..decimals.."f"):format(number)) end end -- META <meta> <script src="loadC.lua" type="client"/> <script src="loadG.lua" type="shared"/> <file src="olds/images/1.png"/> <file src="olds/images/2.png"/> <file src="olds/images/bg.png"/> <file src="olds/images/load.png"/> <file src="olds/images/logo.png"/> <file src="olds/images/pausa.png"/> <file src="olds/images/play.png"/> <file src="olds/images/coroa.png"/> <file src="olds/images/lights.png"/> <file src="olds/sound/music.mp3"/> <download_priority_group>1</download_priority_group> </meta>
-
السلام عليكم ابي استفسر عن عمل شئ كيف اسوي لوب تصنع كل السيارات الي في التيبل؟
-
?السلام عليكم ,معاي مشكله ب لوب ارور الي في صوره local tick = getTickCount() local playerPodium = {} function updateMapInfo(info) playerPodium = info tick = getTickCount() for i,data in ipairs(playerPodium) do if data.user then local avatar = getAvatarByUser(data.user) if avatar then playerPodium[i].img = avatar else playerPodium[i].img = "avatars/default.png" end else playerPodium[i].img = "avatars/default.png" end end removeEventHandler("onClientRender",root,podiumRender) addEventHandler("onClientRender",root,podiumRender) end addEvent("podiumStart",true) addEventHandler("podiumStart",root,updateMapInfo) هل فيه خطأ ب loop
-
client: local Admins = {} addEvent("updateAdmins",true) addEventHandler("updateAdmins",root, function(t) Admins = t end) function isPlayerAdmin(player) if(Admins[player]) then return true end return false end function asdi() for k,v in ipairs(Admins) do outputChatBox(k) end end addCommandHandler("asd",asdi) server: local Admins = {} function isPlayerAdmin(player) if(Admins[player]) then return true end return false end addEventHandler("onPlayerLogin",root, function() if isObjectInACLGroup ( "user." .. getAccountName ( getPlayerAccount ( source ) ), aclGetGroup ( "Admin" ))then if not(Admins[source])then Admins[source]= source triggerClientEvent("updateAdmins",source,Admins) end end end) addEventHandler("onPlayerQuit",root, function() if(Admins[source])then Admins[source]= nil triggerClientEvent("updateAdmins",source,Admins) end end) No errors, no warnings... What wrong?
-
Galera, estou aprendendo a fazer scripts, e editei um script que achei na Internet de uma forma que ele pudesse ter quantos markers eu quisesse, no caso de um trabalho, porém, gostaria de saber se existe alguma forma de eu deixa-lo mais otimizado, usando loops ou algo do tipo, eu evitaria de ter que escrever quase a mesma coisa para cada Marker? Eu estou querendo fazer um trabalho de Sedex, e peguei de outro script que eu achei, uma barra que carrega na tela, então usei setElementFrozen para congelar o veículo, então a barrinha aparece e carrega, quando ela termina de carregar, o veículo é descongelado, até ai tudo bem, porém, estou usando um script que faz com que uma mensagem apareça no topo da tela, "Parabéns, você entregou uma encomenda (1/10), então tentei fazer com que primeiro aparecesse "Entregando encomenda", e após os 5 segundos do setElementFrozen, aparecesse a mensagem que entregou. Mas não estou conseguindo fazer. Então tentei fazer junto a barra de carregamento, para aparecer o ENTREGANDO ENCOMENDA, mas também não consegui. Vou deixar apenas os 2 primeiros markers, para vocês verem sobre o que eu falei de Loops, se há alguma forma de utilizar nesse código, peço desculpas se estiver mal identado, ainda sou iniciante em programação. Peço que ninguém pegue esses códigos para si, pois é um script que editei totalmente para o meu servidor, e não ficaria feliz se fosse roubado!!! ----------------------- Server-Side ----------------------- --Markers Minicio = createMarker (1222.713, -1799.09, 16.555 -1, "cylinder", 1.5, 255 ,255 ,0, 130) mk01 = createMarker ( 1261.461, -1831.496, 13.385 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk02 = createMarker ( 1426.6989746094,-961.05804443359,36.34884262085 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk03 = createMarker ( 2175.4973144531,1122.1480712891,12.679032325745 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk04 = createMarker ( 2079.6228027344,1444.5053710938,10.8203125 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk05 = createMarker ( 2170.8229980469,1678.8610839844,10.8203125 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk06 = createMarker ( 2102.5812988281,2217.4921875,10.8203125 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk07 = createMarker ( 2031.4614257813,1923.1041259766,12.294158935547 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk08 = createMarker ( 1697.4500732422,1451.1950683594,10.763988494873 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk09 = createMarker ( 1561.4448242188,1078.6629638672,10.8203125 -1, "checkpoint", 3, 255 ,255 ,0, 130) mk10 = createMarker ( 954.54888916016,-922.796875,44.080444335938 -1, "checkpoint", 3, 255 ,255 ,0, 130) --1066.3614501953,-1341.8918457031,13.3828125 -1 --Blips Attached Binicio = createBlipAttachedTo (Minicio, 42) B01 = createBlipAttachedTo ( mk01, 19 ) B02 = createBlipAttachedTo ( mk02, 19 ) B03 = createBlipAttachedTo (mk03, 19) B04 = createBlipAttachedTo (mk04, 19) B05 = createBlipAttachedTo (mk05, 19) B06 = createBlipAttachedTo (mk06, 19) B07 = createBlipAttachedTo (mk07, 19) B08 = createBlipAttachedTo (mk08, 19) B09 = createBlipAttachedTo (mk09, 19) B10 = createBlipAttachedTo ( mk10, 19 ) --Markers Visibilidade setElementVisibleTo (Minicio, root, true) setElementVisibleTo (mk01, root, false) setElementVisibleTo (mk02, root, false) setElementVisibleTo (mk03, root, false) setElementVisibleTo (mk04, root, false) setElementVisibleTo (mk05, root, false) setElementVisibleTo (mk06, root, false) setElementVisibleTo (mk07, root, false) setElementVisibleTo (mk08, root, false) setElementVisibleTo (mk09, root, false) setElementVisibleTo (mk10, root, false) --Blips Visibilidade setElementVisibleTo (Binicio, root, false) setElementVisibleTo (B01, root, false) setElementVisibleTo (B02, root, false) setElementVisibleTo (B03, root, false) setElementVisibleTo (B04, root, false) setElementVisibleTo (B05, root, false) setElementVisibleTo (B06, root, false) setElementVisibleTo (B07, root, false) setElementVisibleTo (B08, root, false) setElementVisibleTo (B09, root, false) setElementVisibleTo (B10, root, false) veh = {} function inicio (source) if isElementWithinMarker(source, Minicio) and veh[source] and isElement( veh[source] ) then destroyElement ( veh[source] ) veh[source] = nil end x,y,z = getElementPosition(source) veh[source] = createVehicle(413, 1239.748, -1829.575, 13.404, -0, 0, 274.52) warpPedIntoVehicle ( source, veh[source] ) setCameraTarget (source) setElementData ( source, "inicio", true ) --Aqui ele torna a Data Inicio verdadeira, registrando que o player passou pela marker inicio. setElementVisibleTo ( B01, source, true ) --Torna visivel o Blip 1 setElementVisibleTo ( mk01, source, true) --Torna visivel o Marker 1 exports.Scripts_Dxmessages:outputDx(source, "Entregue as encomendas nos pontos marcados em seu GPS", "info") --outputChatBox ("#ffcc00[ #ffffffSedex #ffcc00] #ffffffEntregue as encomendas nos pontos marcados em seu GPS.",source,0,0,0,true ) end addEventHandler( "onMarkerHit", Minicio, inicio ) function mk1 (source) if isElementWithinMarker(source, mk01) and veh[source] and isElement(veh[source]) then --Checa se o elemento que está na marker 1 é o source, com o veículo source. if getElementData(source, "inicio", true) then --Ele verifica se o jogador passou pela Marker para iniciar o serviço, antes de poder pegar a Marker 1 setElementFrozen(veh[source], true) --Freeza o veículo. triggerClientEvent(source, "doShowProgressBar", source) --Barra que mostra o processo da entrega da encomenda. givePlayerMoney(source,300) setElementVisibleTo ( B01, source, false ) --Ao pegar o Marker 1, ele torna o Marker 1 invisivel. setElementVisibleTo (mk01, source, false) --Ao pegar o Blip 1, ele torna o Marker 1 invisivel. --outputChatBox("#ffcc00[ #ffffffSedex #ffcc00] #ffffffVocê entregou uma encomenda! #ffcc00(#ffffff01/10#ffcc00)",source,0,0,0,true) setElementVisibleTo ( B02, source, true ) --Aqui ele torna visivel o Marker 2, para o player continuar a entrega. setElementVisibleTo (mk02, source, true) --Aqui ele torna visivel o Blip 2, para o player continuar a entrega. setTimer(setElementFrozen, 5000,1, veh[source], false) --Depois de 5 segundos o veículo é descongelado msg = setTimer(exports.Scripts_Dxmessages:outputDx(source, "Entregando encomenda", "info"), 5000, 1) --Tentativa da mensagem de entregando encomenda if isTimer(msg) == false then exports.Scripts_Dxmessages:outputDx(source, "Você entregou uma encomenda! #ffcc00(#ffffff01/10#ffcc00)", "success") --Aqui era para quando o timer se tornasse falso, ou seja, não existisse mais aparecia a mensagem de entregue. setElementData ( source, "Marker01", true ) --Aqui ele registra que o player passou pela primeira marca. setTimer ( setElementData, 50, 1, source, "inicio", false ) --Aqui ele registra o inicio como false, para o player não poder pegar mais de uma vez a mesma marca. end end end end addEventHandler("onMarkerHit",mk01 ,mk1) --Depois disso, ele repete tudo de novo. function mk2 (source) if isElementWithinMarker(source, mk02) and veh[source] and isElement(veh[source]) then --Checa se o elemento que está na marker 2 é o source, com o veículo source. if getElementData(source, "Marker01", true) then --Checa se passou pela Marker 1, e assim vai... setElementFrozen(veh[source], true) triggerClientEvent(source, "doShowProgressBar", source) givePlayerMoney(source,300) setElementVisibleTo ( B02, source, false ) setElementVisibleTo (mk02, source, false) outputChatBox("#ffcc00[ #ffffffSedex #ffcc00] #ffffffVocê entregou uma encomenda! #ffcc00(#ffffff02/10#ffcc00)",source,0,0,0,true) setElementVisibleTo ( B03, source, true ) setElementVisibleTo (mk03, source, true) setTimer(setElementFrozen, 5000,1, veh[source], false) msg = setTimer(exports.Scripts_Dxmessages:outputDx(source, "Você entregou uma encomenda! #ffcc00(#ffffff01/10#ffcc00)", "success"), 5000, 1) if isTimer(msg) then exports.Scripts_Dxmessages:outputDx(source, "Você entregou uma encomenda! #ffcc00(#ffffff01/10#ffcc00)", "success") setElementData ( source, "Marker02", true ) setTimer ( setElementData, 50, 1, source, "Marker01", false ) end end end end addEventHandler("onMarkerHit",mk02 ,mk2) ----------------------- Client-Side ----------------------- --==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==Ajustar Posição da Tela--==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==- local screenW,screenH = guiGetScreenSize() -- Função de Reposicionar Largura e altura da tela local resW, resH = 1280, 720 local x, y = (resW/screenW),(resH/screenH) -- juntar dois elementos em x, y --==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==Ajustar Posição da Tela--==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==- --==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==Barra de Carregamento--==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==- local tempo, valor = 1000, 4 -- Tempo de carregamento local startTick local pBarCurWidth, pBarWidth = 0, 700 -- largura e altura do dx addEvent("doShowProgressBar", true) -- Ativar um evento personalizado addEventHandler("doShowProgressBar", root, function() startTick = getTickCount() -- Começar contagem if addEventHandler("onClientRender", root, renderDXProgressBar) then -- se executar essa função fara alguma coisa, no caso n tera nada caso queira usar para desbugar script end end ) function renderDXProgressBar() local now = getTickCount() if (now + startTick) >= tempo then -- Aumentar a largura da barra pBarCurWidth = pBarCurWidth + valor startTick = getTickCount() if pBarCurWidth > pBarWidth then -- Barra de progresso cheia pBarCurWidth = pBarWidth pBarCurWidth = 0 removeEventHandler("onClientRender", root, renderDXProgressBar) startTick = nil end end dxDrawRectangle(x*358, y*316, pBarWidth, 30, tocolor(0, 0, 0, 150), false) dxDrawRectangle(x*358, y*316, pBarCurWidth, 30, tocolor(255, 255, 0, 200), false) dxDrawText( tostring( math.ceil((pBarCurWidth * 100) / pBarWidth) ).." %", x*358, y*316, (x*358) + pBarWidth, (y*316) + 29, tocolor(255,255,255), 2) dxDrawText("ENTREGANDO ENCOMENDA", x*358, y*316, tocolor(255,255,255,255),2, "roboto") --Onde tentei colocar o texto para aparecer na tela. end --==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==Barra de Carregamento--==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-==-
- 2 replies
-
- trabalho
- dxdrawtext
-
(and 1 more)
Tagged with:
-
Olá novamente ?, alguém poderia me ensinar por favor como utilizo loop for, queria que esse retangulo troca-se de cor a cada um certo tempo, fiz isso abaixo mas fiz errado demais, se alguém poder me ajudar ficarei muito grato (OBS: Sou apenas um scripter iniciante ?) local sx, sy = guiGetScreenSize() local x, y = (sx/1366), (sy/768) cor = {} function dxLoginS() local rectangle = dxDrawRectangle(x*0, y*70, x*500, y*5, cor) cor[1] = tocolor(10, 85, 230, 255) cor[2] = tocolor(255, 140, 0, 255) cor[3] = tocolor(190, 255, 0, 255) for i = cor do return rectangle end setTimer(function () if rectangle then end, 2500, 1) end addEventHandler("onClientRender", root, dxLoginS)
- 16 replies
-
- loop
- programação em lua
-
(and 1 more)
Tagged with:
-
Olá! Tudo bom com vocês? Eu ainda sou amador, e utilizo alguns loops prontos, mas nunca montei um, na verdade, nem sequer sei como ele funciona. Alguém poderia me explicar como eu poderia utilizá-lo para obter a lista de jogadores, ou como utilizá-lo em uma tabela, ou seja, como utilizá-lo de maneira geral. Obrigado!
-
function onClientClick(button, state) if button == "left" and state == "down" then for k, v in ipairs(fegyverek) do if isInBox(screenW * 0.5703, screenH * 0.2700+(elem * 49.5), screenW * 0.0656, screenH * 0.0269) then fegyver = k end end if isInBox(screenW * 0.5703, screenH * 0.2700+(elem * 49.5), screenW * 0.0656, screenH * 0.0269) then if fegyver == 3 then outputChatBox("asd") end end end end addEventHandler("onClientClick", root, onClientClick) function isInBox(xS,yS,wS,hS) if(isCursorShowing()) then local cursorX, cursorY = getCursorPosition() cursorX, cursorY = cursorX*sX, cursorY*sY if(cursorX >= xS and cursorX <= xS+wS and cursorY >= yS and cursorY <= yS+hS) then return true else return false end end end What wrong in this? No error/warning in debugscript..
-
Hey everyone, again, I have a problem. I want to teleport the player whenever it hits the entry/exit marker of a Burger Shot. However, whenever I add the functions to the "onMarkerHit" event, I keep teleporting back and forth. Script is server-sided. --Entry/Exit marker grabbed from .map file local burgershotEnter = getElementByID("burgershotEnter") local burgershotExit = getElementByID("burgershotExit") -- Table of spawn location when entering/leaving Burger Shot local burgershotSpawn = { enter = { x = 364.4189453125, y = -74.154296875, z = 1001.5078125, rot = 313.42001342773 }, exit = { x = -2334.7392578125, y = -166.7958984375, z = 35.5546875, rot = 221.95193481445 } } -- Debug stuff whether coordinates of entry/exit markers are the same as defined in .map (which in this case, it is) local enterPosX, enterPosY, enterPosZ = getElementPosition(burgershotEnter) local exitPosX, exitPosY, exitPosZ = getElementPosition(burgershotExit) outputChatBox ( "Enter: " .. tostring(burgershotEnter) .. " " .. enterPosX .. ", " .. enterPosY .. ", " .. enterPosZ ) outputChatBox ( "Exit: " .. tostring(burgershotExit) .. " " .. exitPosX .. ", " .. exitPosY .. ", " .. exitPosZ ) --------------------------------------- function burgershotEnterHit( player ) outputChatBox("Welcome to Burger Shot! If you want to order something, click on the ped.") setElementInterior( player, 10, burgershotSpawn["enter"]["x"], burgershotSpawn["enter"]["y"], burgershotSpawn["enter"]["z"]) --setPlayerRotation( burgershotSpawn["enter"]["rot"] ) end function burgershotExitHit( player ) outputChatBox("Thanks for visiting Burger Shot! Come again soon!") setElementInterior( player, 0, burgershotSpawn["exit"]["x"], burgershotSpawn["exit"]["y"], burgershotSpawn["exit"]["z"]) --setPlayerRotation( burgershotSpawn["exit"]["rot"] ) end addEventHandler( "onMarkerHit", burgershotEnter, burgershotEnterHit ) addEventHandler( "onMarkerHit", burgershotExit, burgershotExitHit ) Do I still have to check if the player is in the marker or not? Because I thought I don't need to do that when I tie the function to an event with the according marker. Thanks in advance!
-
Hello! I have made closely an entire faction-system, but i have problems with loops. This client side script is for put the faction members and their properties in one table. menuPlayers = {} for i = 1, #memberUsernames do menuPlayers[i].name = memberUsernames[i] menuPlayers[i].rank = memberRanks[i] menuPlayers[i].status = memberOnline[i] menuPlayers[i].lastlogin = memberLastLogin[i] menuPlayers[i].active = 0 end when i do it like this ^^ i got this error for the rows in the loop: attempt to index field '?' (a nil value) But, when i remove the loop and try it for only the first player, it works: menuPlayers = {} menuPlayers[1].name = memberUsernames[1] menuPlayers[1].rank = memberRanks[1] menuPlayers[1].status = memberOnline[1] menuPlayers[1].lastlogin = memberLastLogin[1] menuPlayers[1].active = 0 Any help? Thanks.
-
My mta play sounds but, in minutes the sound make a loop and don't stop, i'm restart the mta and in minutes begins again! In my old gta sa i had tha Proxy_sa.exe and don't have a problems, but i don't know to resolve the issue of sound! Thanks!