Ir para conteúdo
  • Cadastre-se

(Resolvido)Como reduzir o Script?


Ir para solução Resolvido por psychonaut,

Posts Recomendados

Esse script eu fiz para cada skill level aumentar um pouco a quantidade de mana que o player ganha. Postei apenas parte dele aqui porque ele é bem grande, segue sempre a mesma sequencia. queria saber se exite algum jeito de fazer a mesma coisa mas mais rezumido no script, porque com o script grande cada click faz o computador ler todos os códigos então vários players usando com certeza vai pesar. Não tenho ideia de como reduzir o script. Se tiver alguém bom que saiba fazer isso, ajuda ai. 

 

 



local mana = 100


function onUse(cid, item, frompos, item2, topos)
if getPlayerSkillLevel(cid,3) >= 0 and getPlayerSkillLevel(cid,3) <= 1 then
doCreatureAddMana(cid, mana/2)
end
if getPlayerSkillLevel(cid,3) >= 1 and getPlayerSkillLevel(cid,3) <= 2 then
doCreatureAddMana(cid, mana/1.75)
end
if getPlayerSkillLevel(cid,3) >= 2 and getPlayerSkillLevel(cid,3) <= 3 then
doCreatureAddMana(cid, mana/1.50)
end
if getPlayerSkillLevel(cid,3) >= 3 and getPlayerSkillLevel(cid,3) <= 4 then
doCreatureAddMana(cid, mana/1.25)
end 

end

Link para o post
Compartilhar em outros sites
local bonus = {{0, 1, 2},
		{1, 2, 1.75},
		{2, 3, 1.5},
		{3, 4, 1.25}
		}

function onUse(cid, item, frompos, item2, topos)

	for k, v in pairs(bonus) do
		if getPlayerSkillLevel(cid,3) >= v[1] and getPlayerSkillLevel(cid,3) <= v[2] then
			return doCreatureAddMana(cid, mana / v[3])
		end
	end
end

 

                                                                     Ajudei? De nada \o/                                            Att Rusherzin

Link para o post
Compartilhar em outros sites
  • Solução

Não tem como fazer menos se você precisa fazer algo, a menor distancia entre dois pontos é uma linha reta, então a melhor organização é usar a função mais adequada o possível, pra por exemplo, em vez de fazer duas ou três funções para um resultado, fazer uma só com a função certa(falando em funções do TFS). Nessa parte do código você já poderia ter usado elseif:

Elseif pois lua não tem switch tipo o do C, algumas pessoas criam ela com caseof ou vararg, se tivessem varios elseif no código, seria melhor um

 

function onUse(cid, item, frompos, item2, topos)
if getPlayerSkillLevel(cid,3) <= 1 then
doCreatureAddMana(cid, mana/2)
elseif getPlayerSkillLevel(cid,3) == 1 or getPlayerSkillLevel(cid,3) == 2 then
doCreatureAddMana(cid, mana/1.75)
elseif getPlayerSkillLevel(cid,3) == 2 or getPlayerSkillLevel(cid,3) == 3 then
doCreatureAddMana(cid, mana/1.50)
elseif getPlayerSkillLevel(cid,3) == 3 or getPlayerSkillLevel(cid,3) == 4 then
doCreatureAddMana(cid, mana/1.25)
end   
end

 

 

Caso tenha mais coisas no script. uma coisa que ajuda a limpar o código é criar funções, quando você vai repetir algo muitas vezes, é só usar a função em vez de escrever tudo de novo.

Lua tem uma performance incrível, por isso que é bastante usada. Como não tem uma estrutura de repetição aí, não vejo notável diferença pra colocar a função getPlayerSkillLevel em uma variável local(local playerskilllevel = getPlayerSkillLevel(cid,3)), o que pode ser feito mas são poucos valores ali, mas se tivesse uma estrutura de repetição, você colocaria a função antes em uma variável.

 

Os 3 R da reciclagem se aplicam em lua, reduza, reuse e recicle.

 

Porém no seu caso, acho que a criação de uma formula seria melhor, mas você não poderia escolher um valor especifico para cada level. A sua formula teria que usar o getPlayerSkillLevel junto com outros valores para adicionar a mana.

doCreatureAddMana(cid, (getPlayerMaxMana(cid) / 10) + (mana * ((getPlayerSkillLevel(cid,3) / alguma coisa))))

Esse é só um exemplo, não sei direito se você está usando um padrão, se quiser reduzir mesmo o script, vale a pena usar um, dá pra criar qualquer padrão, até usar alguns ifs pra isso.

Essa aí do exemplo adiciona 10% da mana máxima do jogador + a mana que você colocou lá(100) * uma porcentagem do skill level ou alguma outra coisa, esse é só um exemplo.


A solução pra mim então é, ou usar uma formula(aí não vai controlar os valores) ou reduzir usando uma alternativa pro switch pois a cadeia de comparação não é eficiente.

Spoiler

 


local valor
local mudarmana = {
  [1] = function (x) valor = 2 end,
  [2] = function (x) valor = 1.75 end,
  [3] = function (x) valor = 1.50 end,
  [4] = function (x) valor = 1.25 end,
}
mudarmana[getPlayerSkillLevel(cid,3)]
doCreatureAddMana(cid, mana/valor)

 

 

Essa daí permite passar parâmetros no mudarmana[ ](parâmetro) por causa da função(é exemplo, tem que editar), você poderia remover pois não vai usar, mas pode usar se precisar colocar mais coisas.

local valor
local mudarmana = {
  [1] = 2,
  [2] = 1.75,
  [3] = 1.50,
  [4] = 1.25
}
mudarmana[getPlayerSkillLevel(cid,3)]
doCreatureAddMana(cid, mana/valor)

 

Você pode repetir o mesmo valor pra 2 aí, ou então

local mudarmana = {
  [0] = 2,
  [2] = 1.75,
  [4] = 1.50,
  [6] = x,
}
local i
if (getPlayerSkillLevel(cid,3) % 2 == 0) then
    i = getPlayerSkillLevel(cid,3)
else
    i = getPlayerSkillLevel(cid,3) + 1
end
doCreatureAddMana(cid, mana/mudarmana[i])

Isso é pra somar um caso seja ímpar, pois não entendi muito bem, sua verificação tá meio bugada, maior ou igual a 0 ou menor ou igual a 1, seria 0 ou 1, o mesmo em seguida, 1 ou 2, então pra não repetir poderia verificar se é ímpar e somar 1, aí você só teria números pares, entãa só coloca números pares na tabela mudarmana com o valor, bom não sei se tá funcionando o script, foi só um exemplo.

 

Tem varias outras maneiras só dar uma pesquisada, ah e a tabela ali fica fora da função onUse.

Editado por psychonaut (veja o histórico de edições)

Life is so meaningless, there is nothing worth a smile
So goodbye, I'll miss you

 

 

sugestões?

 

 

Link para o post
Compartilhar em outros sites

É por esse motivo que ainda acredito no TibiaKing. Explicação inteligentíssima psychonaut

Gostei muito da sua resolução, e com o que agora eu sei posso usar de várias formas para reduzir varios outros scripts meus. Ta mais que reputado, parabéns e obrigado. 

 

Dúvida Sanada

Link para o post
Compartilhar em outros sites
13 minutos atrás, koete disse:

É por esse motivo que ainda acredito no TibiaKing. Explicação inteligentíssima psychonaut

Gostei muito da sua resolução, e com o que agora eu sei posso usar de várias formas para reduzir varios outros scripts meus. Ta mais que reputado, parabéns e obrigado. 

 

Dúvida Sanada

 

De boa, qualquer duvida traz aí pro fórum, tem mt mais coisa pra melhorar a performance dos scripts, mas lua no geral é bem rápida então mt gente não da atenção pra isso.

Ah e se tu quiser limpar o código, da pra reduzir mais tirando o else e colocando direto o if para caso não seja par.

 

local mudarmana = {
  [0] = 2,
  [2] = 1.75,
  [4] = 1.50,
  [6] = x,
}

local i = getPlayerSkillLevel(cid,3)
if (i % 2 ~= 0) then i = i + 1 end
doCreatureAddMana(cid, mana/mudarmana[i])

 

Tem a função math.fmod() também que é semelhante ao % usado antes mas um pouco melhor porque funciona com floats, só que em algumas versões antigas é só math.mod() então não passo pros outros.

Life is so meaningless, there is nothing worth a smile
So goodbye, I'll miss you

 

 

sugestões?

 

 

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo