Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    3,972
  • Joined

  • Last visited

  • Days Won

    179

Everything posted by Lord Henry

  1. @LeonardoSsComece por aqui: addCommandHandler getPlayersInACLGroup (função útil, inclua o código-fonte dela no seu script para funcionar) outputChatBox
  2. A função setElementData sempre retornará um valor booleano. (true se ela funcionou e false se não funcionou) Por esse motivo a variável recebeu sempre será booleana. Se você quer apenas obter o novo valor do elementData do jogador, basta fazer assim: setElementData(thePlayer, "droga", getElementData(thePlayer, "droga") + 1) local recebeu = getElementData(thePlayer, "droga")
  3. A tabela vehHandling não existe fora daquele escopo do for onde ela foi criada, pois ela está numa variável local. Remova o for dela lá em baixo e coloque dentro do for principal, que cria os veículos. Faça assim: for i,v in pairs (vehAutos) do -- Para cada item da tabela vehAutos, faça: local vehInfos = v["Veh"] -- Obtém a tabela "Veh" do item. local vehSirens = v["Sirens"] -- Obtém a tabela "Sirens" do item. local vehHandling = v["Handling"] -- Obtém a tabela "Handling" do item. local ID, posX, posY, posZ, rotX, rotY, rotZ, r1, g1, b1, r2, g2, b2, r3, g3, b3, farolR, farolG, farolB = unpack(vehInfos) -- Obtém os dados da tabela vehInfos, separando em cada variável. vehAutos[i]["Viatura"] = createVehicle(ID, posX, posY, posZ, rotX, rotY, rotZ) -- Cria a viatura e armazena ela na tabela. removeVehicleSirens(vehAutos[i]["Viatura"]) -- Remove a sirene original, caso tenha. setVehicleColor(vehAutos[i]["Viatura"], r1, g1, b1, r2, g2, b2, r3, g3, b3) -- Define as cores da viatura. setVehicleHeadLightColor(vehAutos[i]["Viatura"], farolR, farolG, farolB) -- Define a cor do farol da viatura. setElementData(vehAutos[i]["Viatura"], "Descaracterizada", true) -- Define essa data na viatura. -- setElementFrozen(vehAutos[i]["Viatura"], false) -- Descongela a viatura (desnecessário, mas está aqui caso queira) for ii,vv in ipairs (vehSirens) do -- Para cada item da tabela vehSirens, faça: if (ii == 1) then -- Se é o primeiro item, então: local quantasSirenes, tipoSirenes, flag360, flagCheckLos, piscarAleatorio, semSom = unpack(vv) -- Obtém os dados da tabela que está no primeiro item, separando em cada variável. addVehicleSirens(vehAutos[i]["Viatura"], quantasSirenes, tipoSirenes, flag360, flagCheckLos, piscarAleatorio, semSom) else -- Se não for o primeiro item, então: local sirenePoint, posX, posY, posZ, r, g, b, a, aMinDia = unpack(vv) -- Obtém os dados da tabela do item, separando em cada variável. setVehicleSirens(vehAutos[i]["Viatura"], sirenePoint, posX, posY, posZ, r, g, b, a, aMinDia) end end for handling, value in pairs (vehHandling) do -- Para cada item da tabela vehHandling, faça: setVehicleHandling (vehAutos[i]["Viatura"], handling, value) -- Aplica a handling e seu respectivo valor no veículo. end end
  4. Ali em baixo do ["Viatura"] crie um ["Handling"] para cada veículo. E dentro deste vc coloca a tabela da handling do veículo. Dai no script vc chama essa parte da tabela da mesma maneira que os outros foram. Assim: local vehAutos = { [1] = { -- Infos da viatura 1. ["Veh"] = {587, 1595.05, -1711.64, 5.6, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255}, -- ID, posX, posY, posZ, rotX, rotY, rotZ, r1, g1, b1, r2, g2, b2, r3, g3, b3, farolR, farolG, farolB. (cor 4 da lataria não existe) ["Sirens"] = { -- Cada sirene separada numa sub-tabela. [1] = {6, 2, true, false, true, true}, -- (addVehicleSirens) quantasSirenes, tipoSirenes, flag360, flagCheckLos, piscarAleatorio, semSom. [2] = {1, -0.85, 2.4, 0, 255, 0, 0, 255, 255}, -- (setVehicleSirens) sirenePoint, posX, posY, posZ, r, g, b, a, aMinDia. [3] = {2, 0.85, 2.4, 0, 0, 55, 255, 255, 255}, [4] = {3, -0.7, -2.1, 0, 255, 0, 0, 255, 255}, [5] = {4, 0.7, -2.1, 0, 255, 0, 0, 255, 255}, [6] = {5, -0.5, -0.35, 0.63, 255, 0, 0, 255, 255}, [7] = {6, 0.5, -0.35, 0.63, 0, 0, 255, 255, 255}, }, ["Viatura"] = false, -- Onde o veículo (elemento) ficará armazenado. ["Handling"] = { -- (setVehicleHandling) ["maxVelocity"] = 230, ["engineAcceleration"] = 18, ["engineInertia"] = 60, ["driveType"] = "rwd", ["steeringLock"] = 40, ["collisionDamageMultiplier"] = 0.45, ["mass"] = 1500, ["turnMass"] = 3500, ["dragCoeff"] = 0.8, ["centerOfMass"] = { [1]=0, [2]=-0.3, [3]=-0.15 }, ["suspensionForceLevel"] = 1, ["suspensionDamping"] = 0.2, ["suspensionUpperLimit"] = 0.28, ["suspensionLowerLimit"] = -0.1, ["tractionMultiplier"] = 0.8, ["tractionLoss"] = 1, ["tractionBias"] = 0.5, ["brakeDeceleration"] = 7, ["brakeBias"] = 0.7, }, },
  5. Por shaders eu n sei se é possível fazer isso que vc quer, uma vez que a textura original precisa ter transparência para aceitar uma nova textura também transparente. Posso estar equivocado, mas sempre que tentei colocar textura transparente no lugar de uma opaca, ele preencheu a transparência da nova textura com preto.
  6. Você deve trancar o veículo imediatamente após ele ser criado. Se o jogador vier com uma serra elétrica sem tentar entrar no veículo, ele consegue arrancar a porta do veículo caso ele não esteja trancado. Sempre que o motorista sair do veículo ou alguém sem permissão tentar entrar como motorista, tranque novamente. Sobre a handling, sim é melhor setar pelo server-side e do que no client-side. E você já está fazendo certo em usar tabelas para guardar as informações dos handlings.
  7. @Lima_Nós não oferecemos scripts prontos. Tente programar o seu próprio e assim poderemos lhe ajudar respondendo dúvidas.
  8. Crie o veículo dentro de uma tabela, juntamente com as características dele. Espero ter ajudado. Preencha o resto da tabela você mesmo.
  9. Não precisa passar thePlayer por parâmetro, só se fosse um source. setTimer(function() setPedAnimation(thePlayer, nil) toggleAllControls(thePlayer, true) local pagou = takePlayerMoney(thePlayer, 30000) if pagou then local recebeu = giveWeapon(thePlayer, 30, 300) if recebeu then outputChatBox("Você Fabricou Uma AK47 Com Sucesso!", thePlayer, 0, 255, 0, true) end end end, 4000, 1)
  10. Não utilize o comando para ativar a função igual o nome do evento. E o esquema de clicar não está no código que vc mostrou.
  11. Não seria mais fácil vc apenas mudar o TXD do objeto com a textura nova?
  12. La nos arquivos .map dos seus mods de mapas, defina a dimensão dos objetos como -1, fazendo com que ele apareça em todas as dimensões.
  13. Primeiramente, correção de indentação. Você deve considerar o function do setTimer como um escopo novo, então tudo que estiver depois do setTimer deve ter +1 recuo. Outra coisa, depois da variável (local pagou = ...) não se adiciona +1 recuo, só depois de funções e condições. setTimer(function(thePlayer2) setPedAnimation(thePlayer2, nil) toggleAllControls(thePlayer, true) local pagou = takePlayerMoney(thePlayer2, 30000) if pagou then local recebeu = giveWeapon(thePlayer2, 30, 300) if recebeu then outputChatBox("Você Fabricou Uma AK47 Com Sucesso!", thePlayer2, 0, 255, 0, true) end end end, 4000, 1, thePlayer) Segundamente, respondendo sua dúvida: Adicione um else antes daquele end que pertence ao if getPlayerMoney... Dai dentro desse else, coloque um outputChatBox do erro.
  14. @DaddyMTAÉ obrigatório incluir o IP do servidor na sua divulgação.
  15. Faltou atribuir valor no parâmetro de função do setTimer. Vc atribui o valor depois do tempo do timer. function FabricarAK(thePlayer) if isElementWithinMarker(thePlayer, markerAk47) then if getPlayerMoney(thePlayer) >= 3000 then setElementPosition(thePlayer, 1050.2840039062, -305.37005615234, 72.99308013916) setElementRotation(thePlayer, 0, 0, 270) setPedAnimation(thePlayer, "INT_HOUSE", "wash_up", -1, true, false, false) setTimer(function(thePlayer2) -- Não pode ser igual ao parâmetro da outra função. setPedAnimation(thePlayer2, nil) local retirou = takePlayerMoney(thePlayer2) if retirou then giveWeapon(thePlayer2, 30, 300) end end, 3000, 1, thePlayer) -- Valor do parâmetro de função definido aqui, thePlayer2 recebe o valor que estiver em thePlayer. end end end addCommandHandler("ak47", FabricarAK) E na próxima vez indente seu código adequadamente. Somente noobs não sabem indentar código.
  16. local Coords = { -- Deixe isso fora das funções. {123, -321, 12}, -- Coordenada 1 {123, -321, 12}, -- Coordenada 2 {123, -321, 12}, -- Coordenada 3 } -- Quando for usar no script: local x, y, z = unpack (Coords[math.random(#Coords)])
  17. O que é espaçamento? Termo genérico cujo significado varia dependendo do contexto. Na programação, se refere aos espaços dados no início das linhas para definir os escopos das funções e condições. Normalmente são dados 4 espaços de uma vez. Utiliza a tecla SPACE. O que é tabulação? É o termo usado para atribuir espaços no início das linhas com a tecla TAB do teclado em vez do SPACE. Ao apertar TAB, ele insere um espaço único e grande, seu tamanho varia de acordo com o programa que está sendo usado para escrever o script. Ele pode ter o tamanho de 2, 4, 8 espaços. Quando usar cada tipo? E por quê? A tabulação é mais comum e útil em textos normais, como redação por exemplo. Utilizada para dar aquele espaço no início da primeira linha de um parágrafo no tamanho exato. É melhor e mais fácil do que ficar contando uma quantidade exata de espaços. Já na programação, você deve configurar o editor de scripts para inserir espaçamentos em vez de tabulações ao apertar a tecla TAB para evitar tabulações no script. É preferível o uso de espaços pois estes possuem sempre o mesmo tamanho, independente do editor de scripts que você use para ler seu código. Já a tabulação possui diferentes tamanhos dependendo de onde o código estiver sendo mostrado. Vou mostrar um exemplo prático do que acontece se você usar tabulação em um script em vez de espaços. Como ele está no editor de scripts: (notepad++) Como ele aparece no fórum: function QualquerCoisa() print("tabulação") print("espaçamento") end No script acima, ambos aparecem com o mesmo tamanho (4 espaços) no editor de scripts. Mas no fórum, a tabulação assume o tamanho de 8 espaços, o que acaba ficando grande demais e diferente do espaçamento. (selecione o script acima com seu mouse e veja como a seleção se comporta, perceba que antes do primeiro print, existe 1 único espaço grande, é uma tabulação. E no segundo print temos 4 espaços.) Essa diferença de espaços prejudica a indentação do script, que acaba ficando ilegível. Normalmente acontece quando o script tem partes de código copiadas de algum lugar com uma forma e o resto programado pelo usuário de outra forma. Você não é obrigado a programar com espaços, mas é preferível que se use espaços do que tabulações para evitar diferenças de tamanhos. Usar espaçamentos em vez de tabulações é considerada uma boa prática de programação, assim como a indentação. Curtiu este conteúdo? Achou ele útil para você ou para alguém? Deixe seu like neste tópico clicando no coração abaixo. \/
  18. Corrija a indentação, dai vc vai perceber o erro.
  19. Sim, é possível. Mas isso é considerado ilegal, uma vez que os Staffs do servidor passam a ter acesso às senhas dos jogadores, já que pra efetuar login automático você precisaria salvar a senha descriptografada em algum lugar. A não ser que você salve em um arquivo client-side separado, disponível somente na máquina do jogador. Mas se você não se importa com a ética e quiser fazer isso mesmo assim, basta salvar o serial da pessoa que criou a conta e a senha usada para criar a conta numa accountData. Esses dados são acessíveis para os Staffs, o que viola a privacidade dos jogadores. Você também precisa proibir a criação de contas secundárias. Um serial não pode criar mais do que uma conta. Caso contrário o script dará conflito pois não saberá em qual das contas logar automaticamente. É necessário isso: GetAccounts - Obtém todas as contas do servidor, isso é pesado dependendo de quantas contas existem no servidor. Um loop for para passar por cada conta. SetAccountData - Usado no momento de criação da conta. Use para setar o serial de quem criou a conta nela e setar a senha como uma data também. GetAccountData - Usado no momento de criação da conta e também ao tentar logar. Ele verifica se já existe uma conta com o serial do jogador e impede que ele crie outra conta, caso já exista uma. E também loga o jogador automaticamente nesta conta que já existe, usando a senha salva na data.
  20. @Jubs_noobA posição X, Y são aqueles dois primeiros 0 ali do DxDrawRectangle.
  21. Não existe source dentro da função do setTimer, ele sempre se torna nulo. Portanto nunca use source dentro de uma função de setTimer. Você errou na indentação, por isso não percebeu que end do timer está na posição incorreta. Ele deveria estar depois do end seguinte.
  22. Ali no lugar do 1000, troque por: math.random(500, 1000) Supondo q o valor mínimo seja 500 e o máximo 1000.
×
×
  • Create New...