Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    3,955
  • Joined

  • Last visited

  • Days Won

    178

Everything posted by Lord Henry

  1. A primeira forma é mais direta, você não declara o nome da função. É mais fácil, porém você não vai conseguir dar unbind depois, pois não terá o nome da função para desbindar. Ideal para quando você quer dar binds permanentes, que não serão desbindadas depois. Essa forma também não permite que você chame por outras formas, por exemplo via comando. A segunda forma resolve todas as limitações da primeira, porém você precisa declarar um nome para a função. Normalmente essa é a forma mais usada. A terceira forma com função local é usada somente por usuários avançados em situações específicas. Funções locais não funcionam fora de seu escopo, porém são um pouco mais leves do que as funções globais, pois elas são apagadas da memória depois que o programa sai do escopo em que elas foram criadas. Também são mais difíceis de hackear com scripts de terceiros que reescrevem sua função. Eu particularmente uso mais a primeira e segunda forma.
  2. Olá. Os markers do tipo cylinder possuem colisão bugada. Você precisa deixá-los um pouco voando para que a colisão deles funcione. Se realmente for um problema para você, sugiro que crie markers do tipo "corona" invisíveis e use-os no script. Então os markers do tipo cylinder seriam apenas visuais.
  3. Aparentemente, a variável Model não pode ser convertida para número. Ou então, não existe esse índice na tabela Config["customCarNames"] Coloque isso antes da sua linha para ver oq está na variável Model: iprint(Model)
  4. Sim, é possível com interpolateBetween.
  5. A questão que mais pesa é a execução diversas vezes em pouco tempo. Trigger em loop também é pesado. Se a elementData não precisa ser sincronizada com todos os jogadores, você pode setá-la no modo de inscrição. Assim você consegue definir jogadores específicos para sincronizar essa elementData só com ele. Fica mais leve do que sincronizar com todo mundo.
  6. Fazer trigger em loop é inviável. Se existe essa necessidade de troca constante de dados entre client-servidor, você pode usar elementDatas.
  7. Depende do que se deseja fazer e qual o tempo de repetição do timer.
  8. Prefira usar tabelas do que elementDatas. Salve no banco de dados sempre que alguém logar/deslogar ou o resource for reiniciado/parado.
  9. Já tentou depurar o código para saber quais partes do código ele está lendo? Coloque um outputChatBox diferente depois de cada if e for. addEvent("Preis:LogarPerson", true) addEventHandler("Preis:LogarPerson", root, function(id) outputChatBox("A: "..id) local t = dbPoll(dbQuery(db, "SELECT * FROM persons WHERE ID=?", id), -1) local Conta = "" local ContaOficial = "" local Nome = "" local Sobrenome = "" local Emprego = "" for i,t2 in ipairs(t) do outputChatBox("B: "..i) Conta = t2.Conta ContaOficial = t2.ContaOficial Nome = t2.Nome Sobrenome = t2.Sobrenome Emprego = t2.Emprego end if (Conta ~= ContaOficial) then outputChatBox("C") logOut(source) logIn(source, getAccount(Conta), "PreisOlympia") end outputChatBox("D: "..tostring(Nome).."_"..tostring(Sobrenome)) setPlayerName(source, Nome .. "_" .. Sobrenome) setElementData(source, "Emprego", Emprego) outputChatBox("Logado com sucesso") triggerClientEvent(source, "Preis:CloseCriadorPersonagem", source) end)
  10. Também mostre a parte do código onde o erro aponta.
  11. Trabalhar com gráficos é muito complexo no MTA. Comece tentando fazer gráficos para coisas mais simples para estudar como criar um. Só depois tente implementar oq você descobriu naquilo que você deseja. Imagino que você vai precisar de um DxDrawLine e vários DxDrawRectangle.
  12. Pra colocar em ordem é só clicar na coluna que você quer organizar em ordem crescente ou decrescente.
  13. if getElementData(thePlayer, "dataName") == "dataValue" then -- Código pra quem tem a data. else -- Código pra quem não tem a data. end
  14. Sim, é possível. Com restartResource Mas não faça o resource dar restart em si mesmo, pois isso vai quebrar o timer. Faça um resource que reinicia os outros.
  15. Happy New Year everyone. A new fresh start to those who got unbanned.
  16. local deletou = false -- Variável q serve pra evitar de ficar deletando veículos a cada segundo enquanto a hora for 4. setTimer(function() local horario = getRealTime() local hora = horario.hour -- Obtém o horário do servidor. if hora == "4" then -- Se a hora for 4, então: if not deletou then -- Se ainda não deletou veículos, então: deletou = true -- Considera os veículos como deletados. Evita de ficar deletando veículos a cada segundo enquanto a hora for 4. for i,veh in pairs(getElementsByType("vehicle")) do -- Para cada veículo no mapa, faça: local counter = 0 for seat, player in pairs(getVehicleOccupants(veh)) do -- Conta quantos passageiros tem no veículo. counter = counter + 1 end if counter == 0 then -- Se o veículo estiver vazio, então: if getElementData(veh, "veiculoEterno") then -- Evita destruir veículos que tenham essa elementData específica. Coloque essa elementData em veículos que você não quer que sejam destruídos. Os veículos com essa elementData serão respawnados em vez de destruídos. respawnVehicle(veh) else -- Se o veículo não tem aquela elementData, então: destroyElement(veh) -- Deleta o veículo. end end end end else -- Se a hora não for 4, então a variável volta a ser false, assim quando chegar na hora 4 novamente, ele vai deletar novamente. deletou = false end end, 1000, 0) -- Executa isso a cada segundo, infinitas vezes.
  17. Ali na função do "onClientRender", altere os valores do fadeInImage e do fadeOutImage, como se fosse no dxDrawImage normal.
  18. Sim, dar armas, setar vida/colete é tudo feito no lado servidor. Você vai precisar de triggers para fazer o painel ativar um evento no lado servidor. No seu código client-side, no lugar disso: setWeaponAmmo(thePlayer, 31, 999) Coloque isso: triggerServerEvent("bopepainel", resourceRoot, "armas") E então no seu código server-side, adicione isso: addEvent("bopepainel", true) addEventHandler("bopepainel", resourceRoot, function(tipo) if tipo == "armas" then giveWeapon (client, 31, 999, true) -- client = localPlayer que ativou este evento. giveWeapon (client, 24, 999) giveWeapon (client, 25, 999) giveWeapon (client, 29, 999) -- elseif tipo == "vidacolete" then -- Ative isso depois que criar o botão de vida/colete e configurar o trigger dele. -- setElementHealth (client, 100) -- setPedArmor (client, 100) end end)
  19. Comece estudando este painel de ranking.
  20. Acredito que seja possível com shaders.
  21. Não faça spam de tópicos. Você já foi respondido aqui: Caso ainda tenha dúvidas, responda naquele tópico.
  22. Faça backup do internal.db e do registry.db e coloque-os na nova host também.
×
×
  • Create New...