Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    3,981
  • Joined

  • Last visited

  • Days Won

    181

Everything posted by Lord Henry

  1. Hum...já entendi oq vc quer dizer. Ok, vou colocar a verificação nas garagens tbm...apesar de já ter essa verificação nas casas.
  2. Jogadores deslogados não conseguem comprar casas, logo não tem como eles abrirem os portões. O que eu fiz foi bloquear quem está logado com uma conta chamada guest. Estes agora não conseguem mais comprar casas, mesmo estando logados. O que eu quero dizer é que não há necessidade de fazer essa verificação no resource das garagens pois ela já existe no resource das casas. Os dois resources funcionam de maneira sincronizada. O portão abre/fecha somente pra quem comprou a respectiva casa. Para comprar precisa estar logado. Isso foi necessário para evitar que jogadores burlem os sistemas anti-guest de todos os demais resources. Porque isGuestAccount não detecta jogadores logados, somente os deslogados. Se eu não bloquear essa conta no register, o jogador pode criar uma conta chamada guest e conseguir comprar uma casa, pois o isGuestAccount não irá bloqueá-lo pois ele está logado. Foi por esse motivo que eu preferi fazer o bloqueio dessa conta no /register. O problema de criar uma conta chamada guest, é que dai jogadores deslogados passam a ter acesso à casa também, pois a conta deslogada usa a mesma string da conta logada guest.
  3. Pronto, já consegui. Agora jogadores logados na conta guest também não vão mais poder comprar casas, mesmo se for uma conta registrada.
  4. Pronto, fui no admin_server.lua, procurei por register. Dai lá eu adicionei essa condição: elseif username == "guest" or username == "Guest" or username == "Console" or username == "console" then outputChatBox ( "register: - Esta conta é proibida de ser registrada.", player, 255, 100, 70 ) outputServerLog ( "ADMIN ERROR: "..getPlayerName ( player ).." tried to register account '"..username.."' (IP: "..getPlayerIP(player).." Serial: "..getPlayerSerial(player)..")" ) Dai ficou assim: addCommandHandler ( "register", function ( player, command, arg1, arg2 ) local username = getPlayerName ( player ) local password = arg1 if ( arg2 ) then username = arg1 password = arg2 end if ( password ~= nil ) then if ( string.len ( password ) < 4 ) then outputChatBox ( "register: - Senha precisa ser no mínimo 4 caracteres.", player, 255, 100, 70 ) elseif ( getAccount ( username ) ) then outputChatBox ( "register: - Esta conta já existe.", player, 255, 100, 70 ) elseif username == "guest" or username == "Guest" or username == "Console" or username == "console" then outputChatBox ( "register: - Esta conta é proibida de ser registrada.", player, 255, 100, 70 ) outputServerLog ( "ADMIN ERROR: "..getPlayerName ( player ).." tried to register account '"..username.."' (IP: "..getPlayerIP(player).." Serial: "..getPlayerSerial(player)..")" ) elseif ( addAccount ( username, password ) ) then outputChatBox ( "Você se registrou com sucesso! Username: '"..username.."', Senha: '"..password.."'(não esqueça)", player, 255, 100, 70 ) outputServerLog ( "ADMIN: "..getPlayerName ( player ).." registered account '"..username.."' (IP: "..getPlayerIP(player).." Serial: "..getPlayerSerial(player)..")" ) else outputChatBox ( "Unknown Error", player, 255, 100, 70 ) end else outputChatBox ( "register: - Sintaxe é 'register <login> <senha>'", player, 255, 100, 70 ) end end ) Vou ver se mexo no sistema de casas para impedir que jogadores registrados com conta guest consigam comprar casas. Me referindo a outros servidores que não possuem esse bloqueio no /register.
  5. Eu coloquei como dono da primeira casa guest e depois desloguei. Dai o jogador deslogado conseguiu movimentar o portão...mas dai seria um problema com criação de contas, pois não deveria ser possível criar uma conta chamada guest. Vou ver onde fica o comando /register e tentar bloquear o /register guest e o /register Console.
  6. Vou deixar assim: local dono = executeSQLQuery ("SELECT owner FROM housevip_data WHERE ID=?", 2) local dono = dono[1].owner Dessa forma está funcionando tranquilo. function checkOwnership (thePlayer) local dono = executeSQLQuery ("SELECT owner FROM housevip_data WHERE ID=?", 2) local dono = dono[1].owner local acc = getAccountName(getPlayerAccount(thePlayer)) if dono == acc then if isGarageOpen (9) then setGarageOpen (9, false) else setGarageOpen (9, true) end else outputChatBox ("Você não é o proprietário da casa ID 2.", thePlayer) end end addCommandHandler ("garagem", checkOwnership) Vc pode testar criando uma tabela pequena com uma coluna 'ID' e uma coluna 'owner', dai vc coloca 2 no ID e a sua conta no owner pra testar. addEventHandler ('onResourceStart', resourceRoot, function() executeSQLQuery ("CREATE TABLE IF NOT EXISTS housevip_data (ID INTEGER, owner TEXT)") end) Depois você desloga e tenta mover o portão de novo.
  7. Quer que eu crie uma nova tabela, insira os valores nela e depois selecione-os? Eu não entendi direito oq vc quis dizer com "indexar" Eu fiz assim e ele retornou lordhenry local dono = executeSQLQuery ("SELECT owner FROM housevip_data WHERE ID=?", 2) print(dono[1].owner) Era pra retornar isso mesmo, só que o portão não funciona mais '-' Mas não gera erros.
  8. Pelo o que eu li, dbQuery só é usado para banco de dados customizados, mas estou usando o banco de dados padrão (registry.db) pois é ali que o resource das casas criou a tabela.
  9. Hum... A propósito, o seu exemplo não deu certo. ERROR: attempt to index field '?' (a nil value)
  10. Malandramente consegui fazendo dessa forma por comando: outputChatBox ("Para movimentar o portão da casa do CJ, use o comando /garagem") outputChatBox ("Você precisa ser o proprietário da casa do CJ.") function checkOwnership (thePlayer) local houseID = 2 local hr = executeSQLQuery( "SELECT * FROM housevip_data WHERE ID=?", houseID ); -- Seleciona todo mundo do housevip_data onde a linha cujo ID seja 2 (houseID). -- Se eu trocar o houseID (2) por 1 na linha acima, ele retorna vazio pois vai pegar a linha do ID 1. local donoCJ = hr[1].owner -- Recebe o valor da coluna 'owner' da linha do ID 2. --Não sei por qual motivo coloquei 1 ali no [], só sei que se mudar dai n funciona mais '-' local acc = getAccountName(getPlayerAccount(thePlayer))--Acc recebe a conta de quem executou o comando. if donoCJ == acc then -- Se a conta do dono da casa for igual a conta de quem executou o comando, faz o seguinte: if isGarageOpen (9) then -- Se a garagem da casa do CJ estiver aberta, faz o seguinte: setGarageOpen (9, false) -- Fecha a garagem. else -- Senão, se estiver fechada, faz o seguinte: setGarageOpen (9, true) -- Abre a garagem. end else -- Se a conta do dono da casa for diferente da conta de quem executou o comando, faz o seguinte: outputChatBox ("Você não é o proprietário da casa ID "..houseID, thePlayer) end end addCommandHandler ("garagem", checkOwnership) Agora só vou criar os ColCuboid para fazer isso automaticamente quando o jogador colidir no collider da garagem.
  11. Olá pessoas peçonhentas. Bom, estou fazendo uns testes com portão que abre somente para determinado jogador cuja conta seja igual a um determinado campo do banco de dados. Por exemplo, quero que o portão abra somente quando o jogador da conta "lordhenry" se aproxime, mas não é tão simples, pois essa conta pode mudar caso ele venda a casa, dai o valor passa a ser vazio. Dai se outra pessoa comprar a casa, dai a conta dessa pessoa fica naquele campo que estava vazio e o portão passa a abrir somente com a conta dessa pessoa. Eu estou pensando em usar executeSQLQuery("SELECT.... Mas não sei o que declarar após isso para ele receber o valor daquela célula do banco de dados. Tentei usar: local accOwner = executeSQLQuery("SELECT 'owner' FROM 'housevip_data' WHERE 'ID'=?", 2) Ou também: local accOwner = executeSQLQuery("SELECT 'ID' FROM 'housevip_data' WHERE 'owner'=?", 2) Mas não da certo pois ele retorna uma tabela em vez de um valor.
  12. Update Agora todas as questões estão numeradas, assim fica mais fácil identificar qual a questão que se refere. Questão 7 atualizada, na versão anterior a resposta estava muito distante da altura certa. Questão 10 atualizada, na versão anterior o resultado variava entre os testes. Questão 12 atualizada, na versão anterior a resposta estava incorreta, todas as alternativas eram incorretas. '-' Sobre a questão 19, foi enviado um pedido para a Google solicitando a correção do bug de pontuação zerada. Questão 21 atualizada, na frase havia um erro a mais do que a resposta. Para evitar de mudar a resposta, esse erro foi corrigido na frase. Pequenas alterações em algumas descrições das questões para facilitar o entendimento.
  13. (tópico bloqueado)
  14. Você caiu na pegadinha do mínimo detalhe. Apenas uma alternativa está correta, é necessário prestar extrema atenção a todos os detalhes da frase a ser completada. A alternativa que vc selecionou está incorreta mesmo. Estava mencionada na descrição da pergunta que poderia haver mais de uma resposta correta, me referindo a pergunta sobre oq o CJ diz quando cai de um lugar muito alto. Além disso, caixas de seleção podem ser selecionadas mais de uma. Quando somente uma resposta for correta, dai são círculos de múltipla escolha. Sim, está explícito no início do teste que é necessário muito tempo disponível para completar o teste, pois muitas perguntas o participante precisa testar no jogo para descobrir a resposta. Além de muita paciência e concentração para prestar atenção nas descrições das perguntas. Só é contra as regras mostrar o gabarito ou resposta correta. Como não há uma resposta correta na imagem, não há problema.
  15. Na verdade existe um problema com a geração automática das notas devido a um bug do próprio Google Forms, pois em perguntas que existem mais de uma resposta correta (caixas de seleção), ele considera errado se você não selecionar todas as corretas. (selecionar tipo 7 respostas corretas mas são 8 corretas no total) No caso, existe 1 pergunta que possui várias respostas corretas, mas o formulário não lhe atribui o total de pontos daquela questão (8 pontos) caso você deixe de assinalar 1 das respostas corretas, em vez disso ele deveria atribuir pelo menos parcial naquela questão, mas em vez disso ele zera. Depois eu corrigi isso e arrumei as notas manualmente, atribuindo a pontuação correta daquela questão levando em consideração quantas respostas corretas o participante selecionou. Fora essa questão, não há outros problemas. Em relação ás perguntas de aptidão, elas servem apenas para o participante ter a chance de pular a seção que não possui conhecimento, essas perguntas não valem nota. Caso o participante negue, ele irá zerar na seção cuja pergunta irá levar, pois não irá responder nenhuma daquelas questões.
  16. Olá a todos. Desenvolvi este longo formulário com perguntas relacionadas a Multi Theft Auto e gostaria da participação de vocês. Comentem abaixo se houver alguma dúvida (não pergunte as respostas), alguma pergunta que considere errada ou sugestões de novas perguntas. Formulário:
  17. Nunca me ocorreu problemas com colisão nos mapas que fiz. Somente se eu alterar a escala do objeto. Você por acaso está fazendo o mapa inteiro com .map ou inteiro no .lua? Ou parte em um e parte no outro? Se for em .lua, ele é server-side ou client-side?
  18. Bem difícil...não consigo pensar em nada para simular a corda e muito menos em como fazer o veículo "seguir" o outro veículo dessa forma. Além disso, duvido que alguém faça isso de graça pra você. Mas a ideia é boa sim.
  19. I can't access the original blip. If I could, I would just change the original blip's color.
  20. I'm already doing this. But sometimes the original Projectile's blip keep upon the custom blip, even if I put the ordering arg to 32767.
  21. When I use this, the Projectile is not spawned anymore. ------------------------------------------------------------------------------- Hey guys, test using this, client-side: function attackIntruderA51 () local a51MissileA = createProjectile (localPlayer, 20, 15.49994, 1719.1, 25.5, 5, localPlayer, 0, 0, 0, 0, 0, 1) local a51MissileB = createProjectile (localPlayer, 20, 237.7, 1696.8, 25.5, 5, localPlayer, 0, 0, 0, 0, 0, 1) end addCommandHandler ("attack", localPlayer, attackIntruderA51)
  22. getAttachedElements doesn't work, because it returns a table, not the element.
×
×
  • Create New...