-
Posts
3,875 -
Joined
-
Days Won
67
Everything posted by DNL291
-
for i=1, 10 do for i,v in ipairs(table) do for i,v in pairs(table) do Esses três métodos vão fazer a mesma coisa, a diferença é que você usa ipairs ou pairs para iterar os valores duma tabela, você também pode fazer usando o primeiro loop no código acima, mas já tem duas funções apropriadas para isso. ipairs: percorre pelos valores da tabela (começando do índice 1), retornando os valores sempre na ordem, exemplo local cores = { [1] = "branco", [2] = "vermelho", [3] = "amarelo", [4] = "azul", [5] = "verde" } for i,v in ipairs(cores) do print(v) --[[ > branco > vermelho > amarelo > azul > verde ]] end Nesse caso, os índices são de 1 a 5. Neste caso a seguir, ipairs não funciona: local cores = { [10] = "branco", [20] = "vermelho", [30] = "amarelo", [40] = "azul", [50] = "verde" } for i,v in ipairs(cores) do print(v) -- > não sai nada end Conclusão: ipairs deve ser usado apenas quando a tabela estiver definida com uma ordem em seus índices. Se você usar: local cores = { [1] = "branco", [3] = "vermelho", [4] = "amarelo", [5] = "azul", [6] = "verde" } for i,v in ipairs(cores) do print(v) -- > branco end Note que o índice 2 é pulado. Vai sair só o valor do índice 1, os restante será ignorado. Ou seja ipairs é usado apenas em tabelas simples, quando seus índices têm uma ordem, iniciando de 1. Só deixando claro outra coisa, você não precisa criar cada índice no código quando for estruturado dessa forma. Você pode deixar: local cores = { "branco", "vermelho", "amarelo", "azul", "verde" } Isso é o mesmo que definindo os índices com 1,2,3,4,5 para cada valor, respectivamente. Sobre pairs então, fica tudo mais claro - usa-se quando a estrutura da tabela é mais complexa, exemplo: local cores = { ["white"] = "branco", ["red"] = "vermelho", ["yellow"] = "amarelo", ["blue"] = "azul", ["green"] = "verde" } for k,v in pairs(cores) do print(k.. " Tradução: "..v) --[[ > blue Tradução: azul > green Tradução: verde > yellow Tradução: amarelo > red Tradução: vermelho > white Tradução: branco ]] end Esses valores serão retornados numa ordem aleatória. EDIT: Sobre a segunda pergunta, as contas do MTA ficam armazenadas no arquivo internal.db.
-
Try changing 10 with: startingNumber + 10
-
Maybe there's an error with your database file.
-
formulario [OFF] Você acha que sabe tudo sobre MTA? Descubra agora!
DNL291 replied to Lord Henry's topic in Portuguese / Português
É verdade tinha apontado um erro na questão das coordenadas do mapa, desculpe por não me corrigir aqui, mas depois percebi que foi equivoco meu. Achei que o valor negativo ia pra direita do mapa mas é o contrário. Aproveitando isso, teve uma coisa que não 'bateu' sobre a pontuação. Assumindo que recebe 1 ponto pela resposta, na minha conta tem 43 questões mas o total de pontos é 42, certo? As perguntas sobre a aptidão do jogador conta? Enfim, fiquei surpreso pela minha pontuação.. Esperava mais de 30 fácil, mas depois revisando percebi que errei umas duas ou mais - ainda assim, estranhei os 22 pontos porque na minha soma passaria isso (mesmo na pior das hipóteses). Gostaria de ver as respostas corretas, claro que pra não comprometer o formulário, tratar disso via MP. Detalhei isso sobre as respostas aqui, porque imaginei poder ter algum erro que comprometa a nota de todos. Bom trabalho por toda elaboração, Like. EDIT: Percebi que tem do lado das respostas o que talvez mostre se acertou a pergunta (1/1 por exemplo) -
Se você usar dessa forma, só vai executar a ação se o novo nick for menor que 4 caracteres, não percebi nenhum erro no código. Obs: use /debugscript 3 sempre que testar.
-
Faltou fazer a parte da linha 3, que eu disse: if (#name < 4) then
-
O símbolo # também pega o comprimento da string. Só trocar >= (maior ou igual) para < (menor), já que 4 caracteres nesse caso é aceito. Também, remova 'source' do parâmetro e o evento 'onPlayerConnect' é desnecessário.
-
A má otimização nos scripts que causa perda de performance no servidor, se reflete no mesmo erro em relação ao mapa eu não sei. Sugiro dar uma olhada no performanceBrowser. Script mal otimizado pode fazer o servidor usar mais e mais memória ram.
-
Não sei exatamente. Talvez falta de memória ram.
-
Pra mim está com colisão. Se você também não consegue reproduzir o bug, recomendo procurar saber se algum script está causando isso. Use este código e vê se algum objeto está com colisão desativada: addEventHandler( "onResourceStart", resourceRoot, function() createObject(6966,826.79999,-2107.2,-48.2,0,0,90) createObject(6966,826.79999,-2127.7,-48.21,0,0,90) createObject(3749,836.40002,-2070.1001,17.8,0,0,0) createObject(3084,852.29999,-2070.1001,13.6,0,0,0) createObject(3084,820.5,-2070.1001,13.6,0,0,0) createObject(10841,815,-2081.6001,19.9,0,0,90) createObject(10841,815,-2104.3999,19.9,0,0,90) createObject(10841,815,-2127.2,19.9,0,0,90) createObject(10841,857.79999,-2081.6001,19.9,0,0,90) createObject(10841,857.79999,-2104.3999,19.9,0,0,90) createObject(10841,857.79999,-2127.2,19.9,0,0,90) createObject(10841,847.09998,-2137.8999,19.9,0,0,0) createObject(10841,825.70001,-2137.8999,19.9,0,0,0) createObject(3084,820.5,-2070.1001,16.8,0,0,0) createObject(3084,820.5,-2070.1001,20,0,0,0) createObject(3084,852.29999,-2070.1001,16.8,0,0,0) createObject(3084,852.29999,-2070.1001,20,0,0,0) createObject(8417,836.40002,-2090.1001,21.59,0,180,0) createObject(6976,818.09998,-2118,12.8,0,0,270) c() end ) function c() local d = 0 for i,obj in pairs(getElementsByType( "object", resourceRoot )) do if getElementCollisionsEnabled(obj) ~= true then d = d + 1 end end outputChatBox( "Há no servidor: "..tostring(d).." objetos sem colisão" ) end EDIT: corrigiu o problema?
-
O que quer dizer com "colisão diferente"? Se mostrar prints especificando o objeto, código, vai facilitar mais.
-
Pode ser só aviso que mostra no Console, troque: setTimer(function() coroutine.resume(clearing_nonexisting_peds) end,1000,0) Por: setTimer( function() if coroutine.status ~= "dead" then coroutine.resume(clearing_nonexisting_peds) end end,1000,0 )
-
Mostre o código aqui.
-
Então o objeto tem colisão, mas por algum motivo não dá colisão pra alguns jogadores. setElementCollisionsEnabled não vai corrigir, a menos que tenha desativado com essa função. O problema deve ser outro, sem código não dá pra ajudar muito além de especular.
-
Deve ser porque o objeto não tem colisão, pode até ser algum bug também.
-
Pra fazer seguir o veículo é possível, usando o mesmo método que faz os zumbis seguir o jogador. O problema é que perderia a ideia principal e tenho certeza que não ia funcionar como deve. A única alternativa que posso te sugerir é usando o carro towtruck, deixá-lo invisível e anexar ao veículo principal usando a função attachTrailerToVehicle. Eu fiz um teste rápido usando essa alternativa e pelo menos a parte inicial funciona, só algumas coisas como a rotação e offSet do towtruck precisam de ajustes pra funcionar corretamente. Enfim, mais tarde vejo isso mais a fundo pra ter certeza se realmente funciona.
-
Oh didn't know about that, since I have no experience with DayZ. So, just do what Fist said.
-
I recommend you creating these elements inside a table, so you can easily remove it through command. Also, the player element is wrong in outputChatBox function.
-
'hitElement' paramenter is missing in the function.
-
That will not work.
-
I don't think setElementData is an unreliable function, it's fine at least for me. Still, if you want to make your own system, you can use tables, since it's a strong point of Lua.
-
If you haven't found errors in the server-side, you should check the client side. Maybe something is wrong with client.
-
Updated the code, try this: addEvent("onRequestXP",true) addEventHandler("onRequestXP",root,function( m ) local acc = getPlayerAccount(source) if isGuestAccount ( acc ) ~= true then setAccountData( acc, "tempEXPBoostTS", toJSON( { tostring(getRealTime().timestamp), m } ) ) end end) addEventHandler( "onResourceStop", resourceRoot, function() for i,p in pairs(getElementsByType("player")) do if not isGuestAccount ( getPlayerAccount(p) ) then local acc = getPlayerAccount(p) local eTimestamp = getAccountEXPBoostValue( acc, "timestamp" ) if eTimestamp then setAccountData( acc, "tempEXPBoostTS", nil ) end; end end end ) function checkEXPTime() for i,p in pairs(getElementsByType("player")) do if not isGuestAccount ( getPlayerAccount(p) ) then local acc = getPlayerAccount(p) local eTimestamp = getAccountEXPBoostValue( acc, "timestamp" ) if eTimestamp and (getRealTime().timestamp - eTimestamp) > 86400 then outputChatBox("Your exp boost has expired", p) setAccountData( acc, "tempEXPBoostTS", nil ) end end end end -- check every 10 mins setTimer(checkEXPTime, (60*10) *1000, 0) addEventHandler( "onPlayerLogin", root, function( _, acc ) local eTimestamp = getAccountEXPBoostValue( acc, "timestamp" ) if eTimestamp and (getRealTime().timestamp - eTimestamp) > 86400 then outputChatBox("Your exp boost has expired", source) setAccountData( acc, "tempEXPBoostTS", nil ) end end) addEventHandler ( "onPlayerWasted", root, function( ammo, killer, weapon, bodypart ) if killer and (getElementType(killer) == "player") and killer ~= source then if not getElementData(source,"bandit") then addPlayerStats (killer,"humanity",math.random(-2500,-1000)) else addPlayerStats (killer,"humanity",math.random(1000,2500)) end setElementData(killer,"murders", (getElementData(killer,"murders") or 0) +1) local acc = getPlayerAccount(killer) local m = getAccountEXPBoostValue( acc, "multiplier" ) or 1 if not isGuestAccount(acc) and m then local addedExp = math.random(200,300) * m setElementData(killer,"experience", (getElementData(killer,"experience") or 0) + addedExp) end if getElementData(killer,"humanity") < 0 then setElementData(killer,"bandit",true) end if getElementData(source,"bandit") == true then setElementData(killer,"banditskilled", (getElementData(killer,"banditskilled") or 0) +1) end if bodypart == 9 then setElementData(killer,"headshots", (getElementData(killer,"headshots") or 0) +1) end local xX,yY,zZ = getElementPosition(source) local xk,yk,zk = getElementPosition(killer) local Distancia = getDistanceBetweenPoints3D(xX,yY,zZ,xk,yk,zk) --outputChatBox("@Distancia: "..tostring(Distancia)) outputChatBox("[INFO]#FFFFFF Você matou: #32FF32"..getPlayerName(source):gsub('#%x%x%x%x%x%x','').."#FFFFFF || Arma: #32FF32"..(weapon or "Unknown").."#FFFFFF || Distância: #32FF32"..tostring(math.floor(Distancia)).."m #FFFFFF || Exp: #32FF32"..addedExp.." ".. (tostring(m).."x"),killer,0,128,255,true) outputChatBox("[INFO]#FFFFFF Você foi morto por: #32FF32"..getPlayerName(killer):gsub('#%x%x%x%x%x%x','').."#FFFFFF || Arma: #32FF32"..(weapon or "Unknown").."#FFFFFF || Distância: #32FF32"..tostring(math.floor(Distancia)).."m",source,0,128,255,true) --setTimer(function(source,killer)end,6000,1,source) triggerClientEvent("onRollMessageStart",getRootElement(),getPlayerName(source):gsub('#%x%x%x%x%x%x','').." foi morto por "..getPlayerName(killer):gsub('#%x%x%x%x%x%x',''),255,255,255, "died") else triggerClientEvent("onRollMessageStart",getRootElement(),getPlayerName(source):gsub('#%x%x%x%x%x%x','').." morreu.",255,255,255, "died") end end ) function getAccountEXPBoostValue( acc, v ) if isGuestAccount(acc) then return false end; local t = fromJSON(getAccountData( acc, "tempEXPBoostTS" ) or "") if (type(t) ~= "table") then return false end; if v == "timestamp" then return tonumber(t[1]) elseif v == "multiplier" then return tonumber(t[2]) end return false end Haven't tested so if you get errors, see what debugscript shows.