Jump to content

iDannz [Breno]

Members
  • Posts

    38
  • Joined

  • Last visited

1 Follower

About iDannz [Breno]

  • Birthday 17/04/2001

Details

  • Gang
    StoneAge
  • Location
    Brazil
  • Occupation
    Student.

Recent Profile Visitors

1,116 profile views

iDannz [Breno]'s Achievements

Rat

Rat (9/54)

11

Reputation

  1. its working fine here, just tested it now.
  2. All you should do is get new look at coordinates -> send to server -> sync to others clients but remember; dont try to destroy your server's network --serverside addEvent('syncLookAt', true) addEventHandler('syncLookAt', root, function(x,y,z) triggerLatentClientEvent("setLookAt", 30000, false, client, x,y,z) -- triggerClientEvent("setLookAt", client, x,y,z) end) --clientside local screenW, screenH = guiGetScreenSize() setTimer(function() local x,y,z = getWorldFromScreenPosition(screenW*0.5, screenH*0.5, 10) triggerLatentServerEvent("syncLookAt", 30000, false, localPlayer, x,y,z) -- triggerServerEvent("syncLookAt", localPlayer, x,y,z) end, 200, 0) addEvent('setLookAt', true) addEventHandler('setLookAt', root, function(x,y,z) setPedLookAt(source, x,y,z) end)
  3. Das das uma, ou você remove/adiciona o onClientRender quando quiser, ou pode usar variáveis, como no exemplo abaixo; onde a variável será trocada a cada 1 segundo e meio local mostrandoOutroRetangulo = true addEventHandler('onClientRender', root, function() dxDrawRectangle(...) if mostrandoOutroRetangulo then dxDrawRectangle(...) end end) setTimer(function() mostrandoOutroRetangulo = not mostrandoOutroRetangulo --(recebe o valor contrario do atual, ou seja, se estiver true vira false e vice-versa) end, 1500, 0) no seu caso quando quiser que tal coisa não apareça você pode remover a variável com e quando quiser que volte a aparecer basta voltar a variavel pra true
  4. Você deve usar um dos eventos que que são ativados quando o jogador entra em um veiculo, e então verificar se ele possui a licença e caso não tenha, você deve aumentar o nivel de procurado, como no exemplo abaixo: -- evento ativado quando o jogador entra no veiculo addEventHandler('onPlayerVehicleEnter', root, function() --// se o jogador não tenha a licença if not getElementData(source, 'carLicense') then local stars = getPlayerWantedLevel(source) -- se o nivel de procurados for menor que 6 if stars < 6 then -- checamos se as novas estrelas (atual+3) ultrapassa o numero 6, e corrigimos local newStars = stars+3 <= 6 and stars+3 or 6 --setamos o novo nivel de procurado setPlayerWantedLevel(source, newStars) --enviamos a mensagem no chat outputChatBox('Você não possui a carteira de motorista, então ganhou +3 niveis de procurado.', source) end end end)
  5. Você não deu apenas o exemplo, você está incitando ele a ele introduzir seu código incompleto ao servidor dele; e "falar mal" do código dos outros nem sempre é ruim, tendo vista que se o código está mal feito e pode melhorar, só sendo tolo pra querer lutar tanto pra não melhora-lo, só estou dando dicas de como podem obter melhores resultados, boa tarde pra você também, humildão.
  6. é, parece que você quer polemizar sim. Você poderia ao menos salvar os dados na conta a partir da tabela no onPlayerQuit e então remover os dados do player da tabela, mas faça-o como quiser, como você disse; cada um tem seu jeito de codificar e escrever seus resources.
  7. O código que você fez não parece ter o resultado que ele espera pelos seguintes motivos; O código será executado a cada 10 minutos. Ou seja, se o jogador jogador X jogou por 9 minutos e acabou se desconectando, ao retornar ele terá que ficar online por 10 minutos pra obter a experiência onde no caso o correto seria ele jogar por apenas mais 1 minuto pra obter a experiência. Pra ganhar level ele terá que ficar conectado por uma 1h:10m, sem sair, já que a experiencia recebida não é salva e a tabela se inicia com 0 de experiência, e não por 1. Ou seja, mesmo que você já tenha jogado por 60 minutos e tenha 5/6 de experiência, caso você saia do jogo, ao voltar sua experiência será 0. Os dados que são inseridos na tabela table_experiencia nunca são removidos, e isso depois de um tempo vai começar a causar problemas de desempenho.
  8. De tão mal feito que o código estava acabamos nao percebendo que as condições originais não faziam o minimo sentido, desta maneira deve funcionar como vc espera; function timecount ( ) for i, player in ipairs(getElementsByType("player")) do local acc = getPlayerAccount(player) if acc then if not isGuestAccount(acc) then local level = getElementData(player,"Level") or 0 if tonumber(level) == nil then level = 0 end local exp = getElementData(player,"LSys:EXP") or 0 if tonumber(exp) == nil then exp = 0 end local onlinetime = getElementData(player,"LSys:Online") or 0 if tonumber(onlinetime) == nil then onlinetime = 0 end local mins = getElementData(player,"LSys:Mins") or 0 if tonumber(mins) == nil then mins = 0 end if tonumber(mins) >= 600 then outputDebugString("resetou minuto") outputChatBox ( "#ffffff[ #82FA58UP #ffffff] - Você Ganhou +1 de Experiência. (".. tonumber(exp)+1 .."/20)", player, 255, 255, 255, true ) setElementData(player,"LSys:EXP",tonumber(exp)+1) playSoundFrontEnd ( player, 44 ) setElementData(player,"LSys:Mins",1) end if tonumber(exp) >= 19 then setElementData(player,"LSys:EXP",0) setElementData(player,"Level",tonumber(level)+1) outputDebugString ( "Adicionou um nivel" ) outputChatBox ( "#ffffff[ #82FA58UP #ffffff] - Você Juntou 20 de Experiência e Ganhou +1 Level ("..tonumber(level)+1 ..")", player, 255, 255, 255, true ) playSoundFrontEnd ( player, 45 ) end if tonumber(mins) < 600 then setElementData(player,"LSys:Mins",tonumber(mins)+1) setElementData(player,"LSys:Online",tonumber(onlinetime)+1) outputDebugString("adicionou minuto") end end end end end setTimer ( timecount, 1000, 0 )
  9. O seu segundo método está quase funcional, você só esqueceu de remover um end (já que você removeu um if)
  10. A solução que eu dei seria viável apenas para alguns casos, principalmente pelo fato de que se a resource for parada os dados obviamente serão resetados. Mas se no caso você queira utilizar pra salvar dados como Level, Experiência, ou outros dados que são muito utilizados, você deve setar usando elementData com sync on, para de fato possibilitar as checagens dos outros clientes, o ponto que eu quis chegar é de que existem dados que não precisam ser enviados, mas que as pessoas os enviam (muitas vezes sem querer) só por ser o caminho mais fácil de se obter tal resultado. De qualquer maneira, caso você queira utilizar o sistema que eu enviei acima, eu recomendo que você o replique nas resources em que você vai usar, principalmente por ser um código pequeno (se você apagar os comentários não irá passar de 15 linhas) e também porque se você utilizar exportações nas funções getData e setData chamando-as para salvar dados de uma resource X, caso a resource em que o código está configurado com exports seja reiniciada você vai acabar tendo resultados inesperados na resource X.
  11. Tente otimizar um pouco este código (na minha opinião isso tudo poderia ser feito client-side com no máximo 10 linhas). O uso excessivo de elementData pode ferrar o fluxo de rede do seu servidor, pois cada vez que você o utiliza sem desativar o argumento de sincronização da função ele será enviado e atualizado para todos os outros elementos. Ou seja, quando o servidor possui 10 jogadores online, mesmo que você use setElementData em apenas um, esses dados serão enviados para os outros 9 da mesma maneira pra sincronização. Agora imagine uma situação escalável, onde você vai setar vários elementData pra cada jogador (que serão enviados pra todos os outros elementos), e o pior; tudo isso a cada 1 segundo. A melhor maneira de manter dados armazenados em Lua é o uso de tabelas (inclusive no caso do MTA, onde isso continua sendo mais rápido do que usar setElementData com sync off), esse é um dos diferenciais da linguagem, já que em Lua se pode indexar quase tudo em uma tabela (não que seja sempre uma boa ideia). Segue um breve exemplo de como utilizar tabelas de uma maneira semelhante a elementDatas; -- iniciamos a tabela, armazenando-a na variável "datas" local datas = {} -- criamos uma função pra facilitar o nosso trabalho function setData(element, key, value) -- caso o jogador não possua seu registro na tabela "datas", o registro é criado if not datas[element] then datas[element] = {} end --inserimos o valor ligado ao nome do dado setado datas[element][key] = value end function getData(element, key) return datas[element] and datas[element][key] -- recebemos o valor salvo na tabela a partir do jogador e o nome do dado end -- removemos o registro do jogador quando ele sai do servidor. -- (isso pode ser bastante necessário, faça-o também com onElementDestroy caso vá utilizar com outros tipos de elementos.) addEventHandler('onPlayerQuit', root, function() if datas[source] then datas[source] = nil end end) Com o código acima adicionado ao seu script você pode utilizar os seguintes métodos: setData(jogador, 'Nome do nosso dado', 'teste123') getData(jogador, 'Nome do nosso dado') Onde setData funcionará como um setElementData e getData funcionará como um getElementData, mas obviamente sem a sincronização com os outros clientes e de maneira até mais rápida. Vale lembrar que o código acima não lhe dará a liberdade de importar os dados salvos na tabela a partir de outros resources, a não ser que você exporte as funções setData e getData, cenário o qual eu não sei dizer se seria vantajoso, apenas testando, pois acho que usar elementData com sync off seria mais rápido.
  12. Eu acho que esse é um dos piores códigos que eu já vi, mas de qualquer maneira, observe a linha 10 onde ele verifica se o jogador possui a data "AirNewSCR_LiberarXP" igual a "Sim", e em seguida seta a data para "Não", e acaba não retornando a data pra "Sim" (não nesse código), então aparentemente o problema está ai.
  13. Sim, e o mais dahora é que da pra "hackear" esse código compilado dele facilmente, já vi que tem fileExists, fileOpen, fileGetSize, fileClose, md5
  14. 1m:10s Eu não recebi o feedback Devo falar como fiz?
×
×
  • Create New...