Jump to content

Dúvidas


Recommended Posts

Olá sou novo no forum e tenho algumas dúvidas espero que alguma boa alma me ajude.

1- Recentemente tomei vergonha na cara e começei a estudar lua(Já li todos tutorias da wiki,  e já começei a ler os da lua.org), e me deparei com uma grande dúvida, qual script desenvolver para que eu possa evoluir, eu tenho muitas ideias mas quando vou executa-las me deparo com a falta de conhecimento, se vocês derem algumas dicas ficaria grato.

2 - Lendo alguns tópicos no forum baixei a GM do NerdGaming(recomendação do DNL em um topic antigo) para tentar estudar alguns scripts e percebi que muitos servidores RPG(meu foco) usam SQL e fiquei me perguntando: aprender sql primeiro ou lua?

3- Como estou tentando aprender lua e meu foco é o RPG resolvi desevolver um sistema de fome e sede e gostaria de saber quais funções usar além de ElementData. Obs* no sistema quando o jogador correr, pular, pedalar ou até andar ele irá perder uma porcentagem dependendo da atividade.

4-  Também fiquei me perguntando(há sempre uma duvida nessa cabeça) se é possível um script só ser rodado em um servidor específico(a checagem poderia ser pelo nome do servidor), e se possível quais funções usar?

 

Eu acho que por hoje é só, peço desculpas por alguns erros ortográficos é pressa para obter respostas, desde de já agradeço a ajuda de todos(Vim do Futuro para mandar essa Mensagem)

E já aviso a todos que vocês vão ver muitos posts meus neste forum.

Ass: pz1

 

ALLONS-Y

Edited by pz1
Link to comment
  • Moderators

1 - Por onde começar, te recomendo começar aprendendo o básico do básico se seu conhecimento de Lua é zero. Se você já teve experiência com outras linguagens, você já pode ir um pouco além e aprender aquilo que sentir a necessidade, pois terá um progresso mais rápido do que alguém que está conhecendo programação/scripting pela primeira vez.

O básico de Lua, pelo que eu posso te dizer é: boolean, strings, tabelas, funções, condições, loop; Introdução à linguagem: funções gerais e seus usos; funções do MTA - que é o que vai te dar toda a noção da aplicação da linguagem no MTA. Fora isso algumas coisas que naturalmente você também pode acrescentar ao seu conhecimento como, Edição de mapas, shaders, Banco de dados e o funcionamento interno do MTA que vai te ajudar entender muitas coisas com mais precisão e se aprofundar.

2 - Você vai precisar do conhecimento básico de Lua, isso é indispensável. Primeiro busque se aprofundar mais nisso, depois vem o resto

3 - setTimer | getControlState (Você pode fazer usando onClientRender no lado client)

4 - É  possível impedir um script de rodar verificando o nome do servidor, mas você tem outras opções pra proteger o seu script de uma forma eficiente.

Edited by DNL291
  • Thanks 1
Link to comment
  • Other Languages Moderators

Acrescentando a resposta 4 do @DNL291:
 

Sim, é possível restringir um script para rodar somente em um servidor específico, mas é melhor restringir por IP pois nada impede o proprietário de mudar o nome do servidor para tentar burlar o sistema de restrição.

Eu desenvolvi um sistema avançado de bloqueio, ele funciona assim:

Spoiler

 

O sistema de bloqueio está em um resource chamado "serverIP" que eu criei. Totalmente criptografado em .luac, sem ele o resource restrito nem funciona. O serverIP verifica o IP privado de um servidor (nem sempre é o IP que aparece na lista de servidores) e verifica se este IP está autorizado no resource privado. Se não estiver, cancela a ativação daquele resource.

  1. Para garantir que não seja possível burlar esse sistema, o "serverIP" retorna sempre IP false caso falte alguma permissão de acesso ou se não for possível obter o real IP. O serverIP precisa de acesso admin.
  2. Se o usuário for um programador experiente e tentar criar um falso "serverIP" que retorne sempre um IP autorizado. O sistema inteiro ainda conta com senhas criptografadas de segurança de 218%. Se ele fizer outro "serverIP", não terá mais as senhas corretas e bloqueará o sistema inteiro.
  3. Se o usuário se achar esperto e mandar o "serverIP" junto com o resource para outra pessoa, não vai funcionar pois o IP privado do outro servidor será diferente.
  4. Se o usuário tentar abrir o resource para remover o verificador de IP, vai estar tudo criptografado e anexado junto ao código principal do resource. Não está em um script separado.
  5. Alterar os arquivos .meta não resolve em nada. Mas pode fazer o "serverIP" parar de funcionar, fazendo com que o resource privado pare de funcionar.
  6. Remover as permissões de admin do "serverIP" para tentar impedi-lo de desativar o resource não vai funcionar, pois é o próprio resource restrito que cancela sua ativação caso haja problemas.
  7. O resource restrito não exige nenhuma permissão especial, a não ser aquelas necessárias para seu funcionamento normal para o qual foi desenvolvido.
  8. Mudar o nome do "serverIP" irá bloquear o sistema inteiro e o resource restrito deixará de funcionar.
  9. O resource também está criptografado em .luac
  10. O usuário ainda consegue dar output nos dados enviados pelo "serverIP", mas não vai adiantar nada pois as senhas são enviadas já criptografadas ao resource restrito.
  11. Cada resource restrito tem verificação dupla de IP.

 

De fato, não é uma tarefa fácil mexer com segurança, você precisa pensar em todas as possibilidades de invasão e armar um jeito de impedir todas elas. No fim das contas nenhum sistema é 100% seguro, mas garanto que precisa ser muito profissional para passar pela criptografia, isso está além de programadores.

Edited by Lord Henry
  • Thanks 1
Link to comment
  • Moderators
7 hours ago, Lord Henry said:

Sim, é possível restringir um script para rodar somente em um servidor específico, mas é melhor restringir por IP pois nada impede o proprietário de mudar o nome do servidor para tentar burlar o sistema de restrição.

E também, se a pessoa for criar uma verificação simples, tipo um if getServerName() == "lasmdlk" then, vai ser muito vulnerável. Vai bastar apenas reescrever a função do MTA pra burlar:

function getServerName()
  return "nome do server"
end

 

  • Thanks 1
Link to comment

Galera estou com uma grande dificuldade na parte de tirar a vida do jogador quando ele estiver com 0 pontos de fome, já tentei várias formas de fazer esse script, já até tentei coloca-lo em client-side mas não consegui.

A única forma que consegui foi essa:

function Health(player)
	local hgdt = tonumber(getElementData(player, "Hunger"))
	if hgdt <= 0 then
	local gh = getElementHealth(player)
    timehgd = setTimer( function() setElementHealth(player, gh-5) end, 500, 0)
	end
end

Mas com addCommandHandler, quando tento adicionar qualquer EventHandler ocorre os seguintes erros:

"attempt to compare nil with number" este erro ocorre quando adiciono um event e mantenho o tonumber.

"attempt to compare boolean with number" este erro ocorre quando adiciono um event e retiro o tonumber.

 

Possivelmente estou errando em algo fácil, mas como sou iniciante não percebi o erro.

 
 
Link to comment
  • Other Languages Moderators
function Health (player)
	local hungerLvl = tonumber (getElementData (player, "Hunger"))
	if hungerLvl <= 0 then -- Se o jogador estiver com fome, então:
		local healthLvl = getElementHealth (player)
		hungerTimer = setTimer (function() -- Começa a matar 5 de HP a cada meio segundo.
			setElementHealth (player, healthLvl - 5)
		end, 500, 0)
		if healthLvl == 0 then -- Se o jogador não tem mais vida (morreu), então:
			if isTimer (hungerTimer) then
				killTimer (hungerTimer) -- Para de tirar a vida que ele nem tem.
			end
		end
	elseif isTimer (hungerTimer) then -- Se o jogador não estiver mais com fome, para de tirar a vida dele.
		killTimer (hungerTimer)
	end
end

 

  • Thanks 1
Link to comment
  • Other Languages Moderators
2 hours ago, pz1 said:

Obrigado Lord Henry só tinha 1 erro no script o "player", usei "localplayer" e o script funcionou.

 

Status: Concluido(por enquanto kk)

Obrigado à #Roots, Lord Henry e DNL291.

 

Ah... Vc não me disse que era Client-Side o script. Achei que fosse Server-side.

Mas tudo bem, que bom que funcionou.

Deixa um like lá pra ajudar.

Edited by Lord Henry
  • Thanks 1
Link to comment
  • 2 weeks later...

Eu tenho um servidor, do qual gostaria de adicionar novos postes de luz na cidade que encontrei na internet. Porem já tentei de todas as formas e não consigo adiciona-lo na lista de objetos que aparece no editor de mapas do MTA. Poderiam me ajudar?

Queria só que aparecessem na lista de objetos aí vou trocando os antigos por eles aos poucos no servidor.

Link to comment
  • Moderators
1 hour ago, Mayconzito said:

Eu tenho um servidor, do qual gostaria de adicionar novos postes de luz na cidade que encontrei na internet. Porem já tentei de todas as formas e não consigo adiciona-lo na lista de objetos que aparece no editor de mapas do MTA. Poderiam me ajudar?

Queria só que aparecessem na lista de objetos aí vou trocando os antigos por eles aos poucos no servidor.

@Mayconzito, Dá próxima vez crie um tópico por favor.

Quanto ao seu problema, eu não sei como funciona esse mod, mas você precisa converter cada objeto para o MTA usando os IDs e substituindo com código Lua.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...