Jump to content

Boechat

Members
  • Posts

    213
  • Joined

  • Last visited

  • Days Won

    7

Everything posted by Boechat

  1. Sim, eu também não gosto de usar ACL nem timer, faço tudo por banco de dados ou pelo setAccountData. Já o timer eu substituo por getTickCount ()
  2. Por nada, qualquer coisa estamos aí Mas pera, pode declarar parâmetros na função sim! O que acontece é que você não estava chamando a função pra um player específico. Vou te dar um exemplo de um jeito (menos eficiente, porém só pra demonstração) de chamar uma função com parâmetro: function darDinheiro (thePlayer) givePlayerMoney(thePlayer, 5000) end function vipBronze() for i, thePlayer in ipairs(getElementsByType('player')) do local account = getPlayerAccount ( thePlayer ) local accName = getAccountName ( account ) if not isGuestAccount(account) then if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Bronze" ) ) then darDinheiro (thePlayer) --Se todas as condições estiverem ok, chama a função de dar dinheiro passando o player expecífico como parâmetro end end end end setTimer(vipBronze, tempo, 0)
  3. Isso mesmo!! Só tome cuidado com o element data pois quando o player desloga, esse dado se perde. Verifique se em alguma parte do código está salvando esse "gangue" pra conta com o setAccountData, e carregando novamente pro elemento quando o player logar.
  4. Quase. Quando alguém tentar entrar na polícia ela NÃO pode ser de gang, certo? Então deve ser: if not getAccountData( account, 'MembroDeGang') then --OU-- if getAccountData( account, 'MembroDeGang') == false then --As duas condições são a mesma coisa. Fugindo um pouco do assunto só pra te explicar uma coisa: O not "inverte" a condição. Se a condição der true (ou seja, o player é membro de gang) ele inverte pra false e não executa o código dentro da condição. É semelhante a um == false. Se a condição der false (ou seja, o player NÃO é membro de gang) ele inverte pra true e executa a condição. É semelhante a um == true. No fim das contas uma condição pra executar deve ser if TRUE then.
  5. Então você não pode passar o player por parâmetro, deve verificar dentro da função. local tempo = 10000 --tempo em milisegundos function vipBronze() for i, thePlayer in ipairs(getElementsByType('player')) do --Pega todos os players do servidor, joga dentro de um for (estrutura de repetição) local account = getPlayerAccount ( thePlayer ) --Pega conta do player da vez (vai verificar todos os players do servidor, um por um) local accName = getAccountName ( account ) if not isGuestAccount(account) then if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Bronze" ) ) then givePlayerMoney(thePlayer, 5000) end end end end setTimer(vipBronze, tempo, 0) Testa aí e vê se funciona.
  6. Você deve setar alguma coisa que diga que a pessoa é de gang ou de corp. Por exemplo: ------------------ENTRAR NA CORP------------------ if not getAccountData ( account, 'MembroDeGang') then setAccountData ( account, 'MembroDeCorp', true) -- SEMPRE QUE ENTRAR NA CORP, SETE ISSO. --RESTANTE --DO --CÓDIGO end ------------------ENTRAR NA GANG------------------ if not getAccountData ( account, 'MembroDeCorp') then setAccountData ( account, 'MembroDeGang', true) -- SEMPRE QUE ENTRAR NA GANG, SETE ISSO. --RESTANTE --DO --CÓDIGO end E quando a pessoa sair da corp ou da gang, não esqueça de setar os mesmos atributos acima como false.
  7. Esse setTimer está fora da função? Porque pelo visto ele está chamando a função do nada e não está passando o thePlayer como parâmetro. function vipBronze(thePlayer) local account = getPlayerAccount ( thePlayer ) local accName = getAccountName ( account ) if not isGuestAccount(account) then if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Bronze" ) ) then givePlayerMoney(player, 5000) end end end addCommandHandler ('vipbronze', vipBronze) Testa com um comando pra ver se vai funcionar. Se funcionar, o problema é na hora de chamar a função. Aparentemente você n está passando o thePlayer do parâmetro. Lembrando que a pessoa que der o comando deve estar na acl Bronze e todo o código é server-side.
  8. Existe a função setAccountData. Tecnicamente ela também é um banco de dados, mas de uma forma bem mais simples. É como se fosse um setElementData, a diferença é que os dados do setElementData ficam armazenados enquanto o elemento ainda existe (ou seja, quando a pessoa desloga, esses dados somem). Já o setAccountData fica armazenado no banco de dados das contas cadastradas, ou seja, se o jogador deslogar, o dado continua salvo no banco de dados.
  9. Sua condição está errada, só vai ser verdadeira se for uma conta de convidado, não se não for. E outra, onde você está criando a variável accName?? Teste isso e veja se funciona (não testei) : local account = getPlayerAccount ( thePlayer ) local accName = getAccountName ( account ) if not isGuestAccount(account) then if isObjectInACLGroup ("user."..accName, aclGetGroup ( "Bronze" ) ) then --CÓDIGO end end
  10. Pra saber exatamente o q ta acontecendo seria melhor o código todo. Imagino que possa ser problema quando troca pra aba 1, pode ser que não está setando aba para "aba1" e o click continua funcionando na aba2.
  11. o executeCommandHandler deve estar do mesmo lado do addCommandHandler do comando que está chamando. Ou seja, se o comando foi server-side a sua função deve ser server-side também!
  12. Parabéns pelo tutorial!!! Alguém sabe me dizer se tem como salvar objetos do MTA no banco de dados, por exemplo um marker, pickup ou um player, para poder usar de comparação em um outro momento?
  13. É exatamente pra isso que eu quero kkkkkkkkk
  14. Alguém sabe alguma forma simples de fazer um setPedCameraRotation na vertical, e não na horizontal?
  15. Na comunidade há vários mods para se estudar, aqui um sistema de login pra você.
  16. Use o onClientKey, sempre que o usuário digitar uma letra você pega o conteúdo já digitado na caixa de login e verifica se há um jogador com o nome já digitado e exibe o avatar dele. Mas acredito que você tenha que guardar o avatar em outro local, porque do jeito que você está fazendo, está pegando o avatar do localPlayer, e até logar o localPlayer é um guest (conta convidada).
  17. Cara, acho que o jeito mais simples, seguro e óbvio seria não colocar nenhum script que você não tenha ciência do conteúdo dentro do seu servidor
  18. Dá um debugscript 3 no console e veja se está dando algum erro
  19. gridlist eu gosto de usar DGS, que é em dx. Dá uma olhada: dgsCreateGridList
  20. Só dei uma olhada rápida e vou deixar alguns comentários no código, veja se ajuda em algo: function RespawnHRT(veh) --if source == localPlayer then --localPlayer no server-side? local id = getElementData(veh, "ID") local KMRodeds = executeSQLQuery ("SELECT KMRodados FROM KMCarros WHERE IDCarro=?", id) --driveDistance = getElementData(veh, "driveDistance") --Pra que está pegando o valor sendo que não irá usar e o carro só terá um driveDistance na linha de baixo? setElementData(veh, "driveDistance", KMRodeds) --end end addEvent("InfoKilometragem", true) addEventHandler("InfoKilometragem", getRootElement(), RespawnHRT) function SpawnHRT(veh) --if source == localPlayer then --localPlayer no server-side novamente. E também não está fechando esse if local id = getElementData(veh, "ID") if getElementData(veh, "driveDistance") > 0 then executeSQLQuery ("INSERT INTO KMCarros(IDCarro TEXT, KMRodados INTEGER) VALUES(?,?)", id, driveDistance) --Estava pedindo 3 parâmetros em VALUES else executeSQLQuery ("UPDATE KMCarro SET KMRodados=? WHERE IDCarro=?", driveDistance, id) end end addEvent("SetarKM", true) addEventHandler("SetarKM", getRootElement(), SpawnHRT)
  21. No for, tenta usar "ipairs" no lugar de "pairs". pairs varre a tabela em modo aleatório, ipairs em modo sequencial, não sei se vai funcionar mas vale a pena tentar...
  22. Se o problema é esse, use o onClientVehicleStartExit, que vai chamar a função quando o player começar a sair do veículo.
  23. O ideal é que use os dois para que o evento não fique ocupando memória do seu servidor sem necessidade, mas é coisa mínima. Erro não vai dar, a não ser que você use o checkpoint para alguma coisa na função do evento e você, de alguma outra maneira, chame essa função.
  24. E se salvar esses atributos com setAccountData e carregá-los pro elemento (setElementData) quando logar?
  25. Banco de dados é server-side.
×
×
  • Create New...