Jump to content

Boechat

Members
  • Posts

    213
  • Joined

  • Last visited

  • Days Won

    7

Everything posted by Boechat

  1. Provavelmente você tem que dar um trigger com triggerClientEvent no lado do servidor para todos os players chamando a função de mudar a skin com o player que vai mudar de skin como parâmetro, assim o player vai mudar a skin dele em todos os clients.
  2. Entendo seu ponto de vista mas não concordo. Eu compartilho o conhecimento que eu venho adquirindo nos últimos meses, tenho mais de 150 respostas aqui no fórum ajudando as pessoas e não tenho a mínima obrigação de fazer isso, faço por prazer mesmo. Fazer um script dá trabalho e leva tempo (um script otimizado e sem bugs mais tempo ainda)... Se qualquer um que estuda uma profissão, seja médico ou pedreiro, cobra pelos seus serviços, por que um desenvolvedor não pode? Você pode ir na internet ou ler um livro para aprender a levantar um muro, o conhecimento está aí, nem por isso o pedreiro vai construir sua casa de graça. Tem diversos scripts gratuitos na comunidade, quem paga por script é porque quer uma coisa específica e de qualidade, que logicamente não encontrou de forma gratuita na internet. Se não houvessem pessoas para vender esses scripts com certeza teriam menos servidores bons online e consequentemente menos players e a comunidade de MTA com certeza seria mais fraca. Essa é minha opinião
  3. O index, invés de local index = data[math.random(#data)] não deveria ser local index = math.random(#data)? Da primeira forma me parece que vai sortear e atribuir a variável index a tabela com os valores de x, y e z, não o index. Se eu não tiver brisando acho que deveria ficar de um dos dois jeitos essa parte: local index = data[math.random(#data)] x, y, z = index[1], index[2], index[3] OU local index = math.random(#data) x, y, z = data[index][1], data[index][2], data[index][3]
  4. if ( getElementModel (thePlayer) == ) then A sua condição está errada, thePlayer não é um elemento. Os parâmetros desse evento são o modelo antigo e o novo modelo, não um player como vc passou pra sua função, já o source é o elemento que está sendo modificado. E também faltou o 200 depois do == para verificar. O que você poderia fazer, semelhante ao que você fez mas de uma forma correta, é: if getElementModel(source) == 200 then ... Mas por questão de desempenho é melhor pegar o newModel (que é o atual model/skin do elemento) e verificar se é 200, em vez de chamar a função getElementModel pra isso... function onPlayerModelChange (oldModel, newModel ) --Os parâmetros são a antiga e a nova skin if ( newModel == 200 ) then -- Verifica se a nova skin é a de ID 200 toggleControl ( source, "sprint", false ) --Se for: else toggleControl ( source, "sprint", true ) --Se não for: end end addEventHandler ( "onElementModelChange", root, onPlayerModelChange ) -- Aqui também tinha faltado o elemento a qual o evento vai ser anexado, no caso o root. Eu nunca usei esse evento e nem testei aqui, veja se funciona pra você e qualquer coisa posta aí no fórum
  5. Use guiSetInputEnabled. guiSetInputEnabled(true) -- Desativa as binds e as teclas só funcionam pra textos (adicione quando abrir o painel de login) guiSetInputEnabled(false) -- Reativa as binds (Adicione quando o player fizer o login e fechar o painel)
  6. Adicione esses eventos no momento em que faz o carregamento, assim o código fica mais leve: addEventHandler ("onVehicleEnter", Caminhao[source], Enter_Veh) addEventHandler ("onVehicleExit", Caminhao[source], Exit_Veh) E deixe o código assim: function Exit_Veh (player, seat) if getElementData(player, "Viagem") and seat == 0 then exports.Scripts_Dxmessages:outputDx(player, "Você tem 60 segundos para voltar pro caminhão", "warning") Tempo[player] = setTimer ( function(player) canceljobtimer (player) setElementData(player, "Viagem", nil) Tempo[player] = nil exports.Scripts_Dxmessages:outputDx(player, "Você Saiu da Van, Mercadoria Cancelada!", "warning") end, 10000, 1, player) end end function Enter_Veh (player, seat) if seat == 0 and isElement(Caminhao[player]) and Caminhao[player] == source then if isTimer(Tempo[player]) then killTimer(Tempo[player]) exports.Scripts_Dxmessages:outputDx(player, "Você voltou pro seu veículo", "warning") end end end
  7. source já é uma variável reservada pelo sistema, não a use como parâmetro. Veja se assim vai funcionar: function Exit_Veh (player) if getElementData(player, "Viagem") then exports.Scripts_Dxmessages:outputDx(player, "Você tem 60 segundos para voltar pro caminhão", "warning") Tempo[player] = setTimer ( function() canceljobtimer (player) setElementData(player, "Viagem", nil) Tempo[player] = nil exports.Scripts_Dxmessages:outputDx(player, "Você Saiu da Van, Mercadoria Cancelada!", "warning") end, 10000, 1, player) end end addEventHandler ("onVehicleExit", getRootElement(), Exit_Veh) function Enter_Veh (player) if isElement(Caminhao[player]) and getElementType(Caminhao[player]) == 'vehicle' then if isTimer(Tempo[player]) then killTimer(Tempo[player]) exports.Scripts_Dxmessages:outputDx(player, "Você voltou pro seu veículo", "warning") end end end addEventHandler ("onVehicleEnter", getRootElement(), Enter_Veh)
  8. onClientPickupHit é um evento client-side e você está usando do lado do servidor.
  9. Tente passar o sweet como parâmetro para o seu timer, assim: setTimer(destroyElement, 500, 1, sweet)
  10. Você deve colocar no arquivo meta o type como "client" para declarar o script client-side e os markers aparecerem e serem excluídos somente para o jogador que der o comando. Obs: também tem como fazer o que você quer do lado server-side porém teria que fazer algumas modificações no script.
  11. Para ativar alguma função quando clicar, use o evento onClientClick Para saber se a pessoa clicou no botão certo da dx, use a função útil isMouseInPosition Para trocar de roupa: addPedClothes Para criar um veículo: createVehicle Se você não entendeu absolutamente NADA disso tudo, recomendo que comece pelos tutoriais disponíveis no fórum e também baixe alguns mods da internet com funções parecidas com a que você deseja e estude-os.
  12. Por nada, qualquer coisa posta aí no fórum
  13. E aonde está sendo chamado a função Progress? Testa com esse comando aqui para ver se funciona: function Progress(playerSource, tempoms) triggerClientEvent(playerSource, "Progress:bar", playerSource, tempoms) end addEvent("Progress:bar", true) addEventHandler("Progress:bar", root, Progress) function teste(playerSource) Progress(playerSource, 5000) end addCommandHandler("teste", teste)
  14. Me mostra a parte que vc da um trigger no evento "Progress:bar", talvez você esteja passando um valor nulo como parâmetro.
  15. A variável temp declarada no começo do código com o valor nulo é diferente da passada por argumento que só vale dentro da função, então o que está passando como parâmetro no interpolate between tem o valor nulo. O temp é em ms né? Veja se funciona dessa forma: local temp = nil function Hud() local progresso = interpolateBetween(0, 0, 0, x*100, 0, 0, (getTickCount()-tick) / temp, "Linear") if temp + tick <= getTickCount() then removeEventHandler("onClientRender", root, Hud) end dxDrawCircle(x*1317, y*862, 18, progresso/100, progresso/100*360, tocolor(128, 128, 128, 255)) end function progress(tempoms) temp = tempoms tick = getTickCount() addEventHandler("onClientRender", root, Hud) end addEvent("Progress:bar", true) addEventHandler("Progress:bar", root, progress)
  16. local posMarkers = { [1] = {x, y, z}, -- x, y e z são as posições dos markers [2] = {x, y, z}, [3] = {x, y, z}, [4] = {x, y, z}, } local markers = {} --Tabela para armazenar os marker para excluir depois addCommandHandler("marker", function() --Comando para adicionar os markers é /marker for i, value in ipairs(posMarkers) do markers[i] = createMarker(posMarkers[i][1], posMarkers[i][2], posMarkers[i][3], "cylinder", 2.0, 255, 255, 255) --Cria o marker end end) addCommandHandler("removemarker", function() --Comando para remover os markers é /removemarker if type (markers) ~= 'table' or #markers < 1 then return end --Verificando se há marker salvo na tabela markers for i, marker in ipairs(markers) do destroyElement(marker) markers[i] = nil end end)
  17. No evento onClientPedDamage tem o parâmetro loss, que é quanto de dano o pedestre levou. Com isso e com o HP do player você pode calcular se ele vai morrer, se for morrer, cancela o evento e faz o que mais tiver que fazer (setar animação, algum shader, abrir um painel dx, etc...) function cancelPedDamage ( attacker, weapon, bodypart, loss ) local playerHealth = getElementHealth ( localPlayer ) if playerHealth - loss <= 0 then cancelEvent() -- Cancela o evento de dano no player --CÓDIGO DEPOIS DE CANCELAR A MORTE end end addEventHandler ( "onClientPedDamage", getRootElement(), cancelPedDamage )
  18. Aparentemente sim, dá uma testada pra ter certeza. Essa função aí vc está dando um trigger para todos os players passando o jogador com skin como parâmetro, né?
  19. Em engineApplyShaderToWorldTexture você tem que inserir o 3° argumento targetElement
  20. Então tá show kkkk mas só uma dica: tente evitar usar get e setElementData, principalmente dentro do evento onClientRender que chama a função milhares de vezes por minuto, são funções MUITO úteis mas já vi pessoas aqui no fórum dizendo que exige bastante do server.
  21. Do lado do servidor você deve chamar um evento para todos os clientes assim que alguém começar a trabalhar, por exemplo: não testei server-side client-side
  22. Então... Fiquei um pouco em dúvida em qual tópico postar mas não chega a ser um tutorial, é só um pedacinho de código pronto que quis disponibilizar então acho que se enquadra em "Programação Lua" né ?
  23. Não consigo mais editar o tópico então vou deixar como resposta uma atualização do código, usem esse:
  24. Eai rapaziada, eu estava precisando de um código de wordWrap e o que está disponível na wiki não funcionou direito pro que eu precisei, ficou muito bugado não sei porque. Achei melhor criar um código com o mesmo retorno e vou disponibiliza-lo aqui, talvez possa ser útil pra mais alguém... A diferença é que não está removendo a cor do texto, caso queiram modifiquem aí e adicionem isso ao código: string.gsub(text, "#%x%x%x%x%x%x", "") Sei que ainda tem alguns detalhes que podem ser melhorados, mas está funcionando bem. Até então não encontrei nenhum bug, se alguém encontrar comente aí
×
×
  • Create New...