Postado Setembro 7, 2018 6 anos 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 Setembro 9, 2018 6 anos por Lyu (veja o histórico de edições)
Postado Setembro 7, 2018 6 anos 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: Discord:
Postado Setembro 9, 2018 6 anos 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: Email: [email protected] Discord: Dwarfer#2715
Postado Setembro 9, 2018 6 anos Autor 2 minutos atrás, Dwarfer disse: Boa, só: CreatureClass -> ClassCreature ? Eita, falta de atenção minha kkkkkkk boa observação, obrigado!
Postado Setembro 9, 2018 6 anos 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 Ot Design: https://discord.gg/VgtVRNmCD7
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.