Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Fala clã, hoje irei ensiná-los como agrupar funções em uma classe e usá-las como métodos (similar ao TFS 1.x).

 

Bom, primeiramente o que são métodos?

Um método é nada mais nada menos que uma função membro de uma classe, destinadas a serem executadas por objetos instanciados.

 

Bom, não irei se aprofundar no assunto, serei direto. Abaixo segue um exemplo da diferença entre uma função e um método:

doPlayerSendCancel(player, 'Hello World') -- Função sendo chamada

player:sendCancel('Hello World') -- Método sendo chamado por um objeto 'player'

 

Mas afinal, como utilizar métodos em TFS 0.4?

Primeiramente teremos que criar uma lib chamada 110-methods.lua e adicionar o seguinte código:

Lembrando que não estou publicando tudo pronto, apenas ensinando como agrupar. E esse exemplo será somente para funções relacionadas à criaturas (players, monsters, npcs).

ClassCreature = {} -- for creature functions

function ClassCreature:new(creature)
	return setmetatable({uid = creature}, {__index = self})
end

function Creature(uid) 
	return ClassCreature:new(uid) 
end

 

Feito isso, já podemos começar a converter funções em métodos a partir do próprio arquivo uma abaixo da outra.

 

Como faremos?

Segue abaixo a conversão da função doPlayerSendCancel:

function ClassCreature:sendCancel(message) 
	return doPlayerSendCancel(self.uid, message) -- (no lugar onde estamos acostumados a colocar cid ou player, colocamos self.uid)
end

 

Agora a conversão da função doPlayerSendTextMessage:

function ClassCreature:sendTextMessage(msg, type)
	return doPlayerSendTextMessage(self.uid, type, msg)
end

 

Assim já podemos utilizar o método em nossos scripts. Com exemplo, segue abaixo um talkaction:

function onSay(player)
	player = Creature(player) -- Instância

	player:sendTextMessage('Olá ' .. player:getName() .. ', este é um exemplo de como utilizar métodos em TFS 0.4 :)', MESSAGE_INFO_DESCR)
	player:sendCancel('Você está no nível ' .. player:getLevel() .. ', parabéns!')

	return true
end

Obs: é sempre necessário instanciar da mesma forma do exemplo para códigos simples. Para mais complexos, pode-se instanciar quantos objetos quiseres.

 

E para finalizar, irei deixar alguns métodos já agrupados para vocês testarem:

 

data/lib/110-methods.lua :

ClassCreature = {} -- for creature functions 


function ClassCreature:new(creature)
	return setmetatable({uid = creature}, {__index = self})
end

function Creature(uid) 
	return ClassCreature:new(uid) 
end


-- Métodos
function ClassCreature:getName()
	return getCreatureName(self.uid)
end

function ClassCreature:getLevel()
	return getPlayerLevel(self.uid)
end

function ClassCreature:getHealth()
	return getCreatureHealth(self.uid)
end

function ClassCreature:getMana()
	return getCreatureMana(self.uid)
end

function ClassCreature:sendCancel(msg)
	return doPlayerSendCancel(self.uid, msg)
end

function ClassCreature:sendTextMessage(msg, type)
	return doPlayerSendTextMessage(self.uid, type, msg)
end

function ClassCreature:getPosition()
	return getThingPos(self.uid)
end

function ClassCreature:teleportTo(pos)
	return doTeleportThing(self.uid, pos)
end

 

E é só isso galera, esse é um dos métodos mais simples de se fazer isso. Abraços! :)

 

Créditos: Todo meu!

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

  • Respostas 8
  • Visualizações 1.6k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Muito bom dançarino, acho que pra ser um bom programador você precisa ser organizado, então tu já é um ótimo. Você poderia fazer uns tuto de lua pra quem ta começando, os antigos são bem antigos mesmo

  • Boa, só: CreatureClass -> ClassCreature ?

  • Bonita a organização do tópico. A explicação está muito boa, eu que não sei scripting entendi alguma coisa kkk   Obrigado pela contribuição

Postado

Parabéns, seu tópico de conteúdo foi aprovado!
Muito obrigado pela sua contribuição, nós do Tibia King agradecemos.
Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP.

Spoiler

Congratulations, your content has been approved!
Thank you for your contribution, we of Tibia King we are grateful.
Your content will help many other users, you received +1 REP.

 

Talvez você queira ver:

BestBaiak

[FAQ]Remere's Map Editor - Dúvidas e soluções de bugs 

 

Contato:

1.png.dadb3fc3ee6ffd08292705b6a71e3d88.png Discord:

Postado

Boa, só:

Em 07/09/2018 em 16:36, Lyu disse:

function CreatureClass:sendCancel(message) return doPlayerSendCancel(self.uid, message) -- (no lugar onde estamos acostumados a colocar cid ou player, colocamos self.uid) end

CreatureClass -> ClassCreature ?

Contato:

 

Postado
  • Autor
2 minutos atrás, Dwarfer disse:

Boa, só:

CreatureClass -> ClassCreature ?

 

Eita, falta de atenção minha kkkkkkk boa observação, obrigado! <3

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo