Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    4,008
  • Joined

  • Last visited

  • Days Won

    184

Everything posted by Lord Henry

  1. No evento "onResourceStart", source não é um jogador. Até porque, você declarou source como parâmetro de função, outro vacilo. Outra coisa: Você anexou o evento ao getRootElement ( ), isso significa que essa função será chamada sempre que qualquer resource for iniciado além deste.
  2. Primeiramente vc deve indexar o objeto no jogador, caso contrário outro jogador vai causar conflito no objeto criado por este jogador. Se o jogador sair do servidor, deve-se destruir o objeto dele. obejto = {} -- Table vazia, onde todos os objetos serão armazenados. Não sei se 'obejto' foi escrito errado de propósito, mas mantive da forma que estava. function createObjectG (thePlayer, commandName) if (isElement (obejto[thePlayer])) then return outputConsole ("Já existe um objeto criado por você. Delete-o antes de criar outro.", thePlayer) end local x, y, z = getElementPosition (thePlayer) -- pega a posição do player que executou o comando obejto[thePlayer] = createObject (1237, x , y , z -1) -- cria o obejto na posição do player e indexa o objeto no jogador. if (obejto[thePlayer]) then -- checa se o objeto foi criado com sucesso. outputConsole ("Objeto criado com sucesso!", thePlayer) else outputConsole ("Falha ao criar o objeto!", thePlayer) end end addCommandHandler ("cb", createObjectG) function deletObjeto (thePlayer, commandName) if (isElement (obejto[thePlayer])) then -- Verifica se o objeto existe antes de tentar destruí-lo. destroyElement (obejto[thePlayer]) obejto[thePlayer] = nil -- Anula a variável do objeto destruído para liberar espaço na memória. (sempre faça isso após destruir um elemento que está numa variável global) outputConsole ("Objeto destruído com sucesso!", thePlayer) else outputConsole ("Você não tem um objeto criado!", thePlayer) end end addCommandHandler ("dob", deletObjeto) addEventHandler ("onPlayerQuit", root, function (quitType, reason, responsibleElement) if (isElement (obejto[source])) then -- Se existe um objeto criado pelo jogador que saiu do server, então: destroyElement (obejto[source]) -- Destrói esse objeto. obejto[source] = nil -- Anula a variável dele. end end)
  3. Sobre o primeiro problema: source deixa de existir dentro de uma função de setTimer. Para evitar isso, você precisa passar o source como parâmetro de função no setTimer. setTimer (function (theSource) -- theSource = source que foi passado como parâmetro. destroyElement (theSource) end, 30000, 1, source) -- Passa o source como parâmetro de função do setTimer. Sobre o segundo problema: Para respawnar um veículo, você pode simplesmente definir a posição de respawn dele com setVehicleRespawnPosition e depois respawná-lo com respawnVehicle.
  4. Em vez de tentar apagar o fogo, só ir aumentando a vida dos carros até que o fogo suma.
  5. Como vc quer que saia vehicle se vc está obtendo o tipo do playerSource? function getMyVehType (thePlayer) if getPedOccupiedVehicle (thePlayer) then outputChatBox ("O seu tipo é: "..getElementType(getPedOccupiedVehicle (thePlayer))..".", thePlayer, 255,255,255) end end addCommandHandler ("tipo", getMyVehType)
  6. Vlw mano, tmj. Se inscreve lá pra dar aquela força.
  7. Não faz sentido aquele return e também está faltando um end no final. addCommandHandler ("setlevel", function (thePlayer, cmd, jogador, level) local theJogador = getPlayerFromName (jogador) if (not theJogador) or (not level) then return end if (isObjectInACLGroup ("user."..getAccountName (getPlayerAccount (thePlayer)), aclGetGroup ("Console"))) then setElementData (theJogador, "Level", tonumber(level)) outputChatBox ("Level setado no jogador com sucesso.", thePlayer) end end)
  8. Chegou a aparecer a mensagem "Level setado no jogador com sucesso."? Se não apareceu, é pq vc errou o nick do jogador. Tem que ser o nick exato, incluindo os códigos de cores.
  9. Isto resolve o problema: function getStart () if (getElementData (localPlayer, "tempo:Logou")) then return end -- Evita de resetar o tempo online quando este resource for reiniciado, impedindo que os players resetem suas datas. setElementData (localPlayer, "tempo:Logou", getTickCount()) end addEventHandler ("onClientResourceStart", resourceRoot, getStart) function renderTest () if getElementData (localPlayer, "tempo:Logou") then local tempoJogando = getTickCount() - getElementData (localPlayer, "tempo:Logou") local hours = tempoJogando/3600000 local minutes = (tempoJogando/60000) % 60 local seconds = (tempoJogando/1000) % 60 local tempoOnline = string.format("%02d:%02d:%02d", hours, minutes, seconds) dxDrawText ("Tempo Online: "..tempoOnline.."", 653, 413, 874, 441, tocolor(0, 0, 0, 255), 1.00, "default", "left", "top", false, false, false, false, false) end end addEventHandler ("onClientRender", root, renderTest) Obs: No cálculo do servidor, estará errado agora. Pois a data do jogador foi obtida no cliente e não no servidor. Mas seu DX estará sempre certo. Remova a parte de setar a data no jogador ao fazer login no servidor.
  10. Já descobri o erro. getTickCount no servidor, mostra os milissegundos desde que o servidor foi iniciado, no caso de servidor local, quantos milissegundos o MTA Server.exe está em execução. No cliente, é quantos milissegundos desde que o cliente Multi Theft Auto.exe está em execução. Por isso que sempre dará diferença entre eles. Isso significa, que quando o player loga e salva o getTickCount() nele. No cliente, esse getTickCount salvo no jogador é do servidor, mas ele tenta fazer uma subtração com o getTickCount do cliente. Gerando essa diferença.
  11. No cliente vc está usando parênteses a mais em hours, minutes e seconds.
  12. addCommandHandler ("setlevel", function (thePlayer, cmd, jogador, level) local theJogador = getPlayerFromName (jogador) if (not theJogador) or (not level) then return end setElementData (theJogador, "Level", tonumber(level)) outputChatBox ("Level setado no jogador com sucesso.", thePlayer) end)
  13. Esse elementData está diferente. Você botou : em vez de .
  14. No lado server, não precisa disso: local time = tempoJogando; E o outputChatBox acabou ficando estranho: "Você está jogando a exatamente 0:10:14 segundos."
  15. Só colocar isso no início da função do dxDraw dele que resolve. if not (getPedOccupiedVehicle (localPlayer)) then return end
  16. O seu radar é editado ou é original do GTA?
  17. addEventHandler ("onPlayerLogin", root, function (prevAcc, currAcc) setElementData (source, "tempo.Logou", getTickCount()) end) function meuTempoOnline (thePlayer, cmd) if (getElementData (thePlayer, "tempo.Logou")) then local tempoJogando = getTickCount() - getElementData (thePlayer, "tempo.Logou") -- Isso também pode ser usado no client. outputChatBox ("Você esta jogando a exatamente: "..tempoJogando.." segundos.", thePlayer) end end addCommandHandler ("temp", meuTempoOnline) Em vez de salvar em variável, daria pra salvar como elementData para ser possível usar no client também.
  18. Por se tratar de um script server-side, você precisa indexar as variáveis no jogador. Você não pode usar variáveis simples pois outros jogadores irão influenciar nela. Isso significa, que quando um segundo jogador logar, a variável tempo do primeiro jogador será substituída pelo tempo do segundo jogador, perdendo o tempo online do primeiro jogador. E não use setElementData dentro de timers curtos. Pois eles são muito pesados.
  19. Use o Resource:Bone_attach Ele permite que você anexe elementos nos ossos dos personagens.
  20. Se estiver se referindo a um Hud editado, você precisa editar no resource dele.
  21. Na terceira função, não é if (botao == "left") then e sim if (button == "left") then, pois foi oq vc definiu nos parâmetros da function. (o que vc definiu dentro do parênteses após o nome da function.) O addEventHandler ("onClientGUIClick") sempre dará erro, pois vc está tentando adicionar uma função de clique antes de criar o botão. O botão será criado somente depois quando aquela primeira função for chamada. Para resolver isso vc tem 2 opções. Mover o addEventHandler para dentro daquela primeira função, depois de criar o botão. E em vez de usar button no segundo argumento, use botao no lugar. Manter o addEventHandler ali fora mas sem definir um botão específico. Dai use guiRoot no lugar de button. Dessa forma a função ativará ao clicar em qualquer guiCreateButton deste resource. E então dentro dessa função vc pode verificar if (source == botao) then para fazer funcionar somente no botão específico.
  22. onPlayerLogin setPlayerHudComponentVisible
×
×
  • Create New...