Ir para conteúdo
Entre para seguir isso  
Gpwjhlkdcf

Lua Orientada a Objetos (POO)

Recommended Posts

Gpwjhlkdcf    21
Gpwjhlkdcf

Removido.

Editado por Skyen Hasus

Compartilhar este post


Link para o post
rivcdrigo    0
rivcdrigo

cara o tópico tá muito bom, mas isso seria uma forma de atribuir valores a objetos sem ter que "estar" no objetos, já estando pré-definidos?

 

ps: vou desistir de scripts quanto antes :D

Compartilhar este post


Link para o post
Dark Billie    0
Dark Billie

Agora sim Skyen, estou trabalhando em alguma utilidade para POO...no servidor que estou trabalhando provavelmente haverá mais um scripter, vou ver se trabalho junto com ele usando POO :D

 

Vou ir baixar um servidor para treinar POO, e...tomara que seja fácil *--*

Compartilhar este post


Link para o post
Gpwjhlkdcf    21
Gpwjhlkdcf
cara o tópico tá muito bom, mas isso seria uma forma de atribuir valores a objetos sem ter que "estar" no objetos, já estando pré-definidos?

 

ps: vou desistir de scripts quanto antes :D

Não é bem assim, mas é quase.

Veja bem: O objeto está apontando para uma classe. Se você chamar um atributo do objeto, mas o objeto não possuir este atributo, então o programa vai "passar reto" e, em vez de procurar pelo atributo dentro do objeto, ele vai procurar este atributo (Que o objeto não tem) dentro dos atributos da classe. Se o objeto possuir o atributo, então vai ser este que o programa vai usar, e não vai precisar procurar na classe.

 

A mesma coisa acontece com os métodos, por isso nós definimos métodos para as classes, ao invés de definir métodos para um objeto especifico. Assim, quando mandarmos o objeto executar alguma coisa, se o objeto não possuir tal método, ele vai "pegar emprestado" o método da classe, e então executar.

 

Pode parecer um pouco confuso. Observe o desenho feio abaixo:

imagemrym.png

Observe que, quando um valor não é encontrado no objeto, ele parte para os valores da classe. Se não encontrar na classe, então é nil.

Compartilhar este post


Link para o post
rivcdrigo    0
rivcdrigo
Pode parecer um pouco confuso. Observe o desenho feio abaixo:

 

po.. acho q entendi, mas isso será o "futuro" dos scripts?

 

e seguinte, vc usou o exemplo de patas lá em cima..

oque poderia ser usado como exemplo em um ot?

Compartilhar este post


Link para o post
Gpwjhlkdcf    21
Gpwjhlkdcf
po.. acho q entendi, mas isso será o "futuro" dos scripts?

 

e seguinte, vc usou o exemplo de patas lá em cima..

oque poderia ser usado como exemplo em um ot?

Por enquanto, pouca coisa pode ser citada. Eu estou refazendo meu Warp Gates System usando POO. Observe algumas partes:

 

--[[
* Warp Gates System - Library
 + Second Version
 + Using Object Oriented Lua

* Created by Skyen Hasus, the OTServ Networks Fox
 + Visit me - http://www.otserv.com.br

* Warning: Any unautorized distribuition of this code is forbidden.
 + Copyright © Skyen Hasus - 2009
]]--

warp = {
 config = {
   statusInactive = -1;
   statusActive = 1;
   listHeadline = "Your active Warp Gates:";
   listNoActives = "You have no active Warp Gates.";
   listPrefix = " • ";
 };
 name = "";
 pos = {
   x = nil;
   y = nil;
   z = nil
 };
 gates = {};
}

function warp:new(id, name, pos)
   if self:getWarpById(id) then
     return self:getWarpById(id)
   end
 local object = {}
 local index = {}
 setmetatable(object, {__index = warp})
 object.id = id or #warp.gates + 1
 object.name = name
 object.pos = pos
 warp.gates[id] = {}
 setmetatable(warp.gates[id], {__index = object})
 return object
end

function warp:getList()
 return self.gates
end

function warp:getWarpById(id)
 return self.gates[id]
end

function warp:getWarpByName(name)
   for index, warp in pairs(self.gates) do
       if warp.name == name then
         return warp
       end
   end
 return false
end

function warp:getWarpByPosition(pos)
   for index, warp in pairs(self.gates) do
       if warp.pos.x == pos.x and warp.pos.y == pos.y and warp.pos.z == pos.z then
         return warp
       end
   end
 return false
end

function warp:isActive(cid)
   if getPlayerStorageValue(cid, self.id) == self.config.statusActive then
     return true
   end
 return false
end

function warp:activate(cid)
 doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "This Warp Gate is now active!")
 doSendMagicEffect(getCreaturePosition(cid), CONST_ME_MAGIC_BLUE)
 return setPlayerStorageValue(cid, self.id, self.config.statusActive)
end

function warp:deactivate(cid)
 return setPlayerStorageValue(cid, self.id, self.config.statusInactive)
end

warp:new(5000, "Rookgaard Temple", {x=396, y=396, z=6})

Isto é somente a biblioteca do sistema. Vou postar aqui quando eu terminar, mas é um exemplo do uso de POO em Open Tibia Servers.

 

Outros exemplos que podem ser citados são os scripts que usam Revscriptsys (Retirados do OTFans):

item = createItem(2543) -- Create an Item object, a bolt to be exact
item:setCount(88) -- Set the amount of bolts to 88

tile = map:getTile(1024, 1024, 7) -- Get the tile object at 1024, 1024, 7
item = tile:getTopItem() -- Fetches the highest item on the tile

item = map:getTile(1024,1024,7):getTopItem()
if item then
 -- Item was valid, do something fun!
else
 -- No item was fetched. Error?
end

Sim, estes serão os scripts do futuro, por isso é bom aprender POO o quanto antes.

Editado por Skyen Hasus

Compartilhar este post


Link para o post
Mock    32
Mock

boa skyen, no tutorial do eventide eu nao entendi NADA. esse tutorial sim está otimo.

 

E vai ser bem util, quando lançar os revscripts quem nao souber POO nao vai saber fazer nada ^^

Compartilhar este post


Link para o post
Bob Mascado    0
Bob Mascado

Nossa cara perfeito ...

Ta muito completo ...

Estavamos precisano de tutos assim ...

Compartilhar este post


Link para o post
minininha    0
minininha

Skyen Hasus.

 

Eu entendi como funciona o POO, mas ainda tenho algumas duvidas...

 

Vamos supor, eu entendi o seu exemplo dado no final do post, porém, como ele saberá o objeto a ser usado? por exemplo, vc indicou ki o animal voador "voe"... Mas como ki o script vai "determinar" a imagem desse objeto voador?

De onde ele vai tirar essa imagem?

 

Outra coisa também é "como o sistema começaria?" ele começaria do nada ou teríamos que criar um script ki quando utilizar algum item começar este script dos animais (ou então agregar um comando onUse ou etc. ao inicio do script para começar o script)

 

Ou então se fosse só para dar um "set" em um monstro do ot, esse script não deveria ter alguma coisa a ver com a pasta que estão os monsters/npcs?

 

Ou então seria feito uma linha no script de um monstro atribuindo uma habilidade deste script nele?

 

Por exemplo como quando definimos os elementos dos monstros, mas neste estilo:

 

MonsterType = voador

 

Desculpe ter tantas duvidas, mas é que algumas coisas ficaram um pouco vagas na minha cabeça xD

É que faz um tempin ki nao mecho com ots e agora estou querendo voltar... Ai to meio desatualizada xD

 

Obrigada

 

Minininha~

Editado por minininha

Compartilhar este post


Link para o post
Mock    32
Mock

@minininha

Você nao entendeu, aquele script nao é para otserver, isso é um script para se rodar em um lua binario (interpretador lua) esse exempl oque ele deu foi apenas um exempl ode como funciona.

Compartilhar este post


Link para o post
Gpwjhlkdcf    21
Gpwjhlkdcf

Minininha, vou por partes...

 

Skyen Hasus.

 

Eu entendi como funciona o POO, mas ainda tenho algumas duvidas...

 

Vamos supor, eu entendi o seu exemplo dado no final do post, porém, como ele saberá o objeto a ser usado? por exemplo, vc indicou ki o animal voador "voe"... Mas como ki o script vai "determinar" a imagem desse objeto voador?

De onde ele vai tirar essa imagem?

Bem, o script que eu fiz foi um pequeno exemplo, mas não foi um exemplo para ser usado em OTServers.

 

Como você deve saber, os scripts para OTServer são feitos na linguagem de programação Lua, portanto, Lua não é uma linguagem para OTServers.

 

No meu exemplo, eu não me foquei em OTServers, e sim em Lua geral, por isso, não é necessária uma imagem, uma vez que a ação voar vai resultar em um texto escrito na tela: "Pomba Cinza voou até uma altura de 8 metros."

 

Na verdade, não foi o texto "Pomba Cinza" que voou. Quem voou foi o objeto que tem como atributo "nome" o valor "Pomba Cinza", então ao voar, eu defini que seria chamado o nome deste objeto: "self.nome".

 

Outra coisa também é "como o sistema começaria?" ele começaria do nada ou teríamos que criar um script ki quando utilizar algum item começar este script dos animais (ou então agregar um comando onUse ou etc. ao inicio do script para começar o script)

Todo script em Lua é lido da posição 1 até a posição <EOF>.

EOF quer dizer End of File, ou seja, o fim do script.

 

Ou seja, ele vai lendo o script começando do começo e vai até o final, executando o que for pedido.

 

No caso, um "print" solto no meio do script seria executado assim que o script chegasse no comando. Porém, se este print estiver dentro de uma função, ele só seria executado quando a função fosse chamada.

 

Se tudo estivesse dentro de uma função, o script só executaria quando esta função for chamada, mas como você pode ver, eu deixei os comandos que dão inicio ao script fora de qualquer função.

 

Como o exemplo não foi feito para OTServers, não existe o evento onUse. Tudo será executado quando o interpretador Lua iniciar.

 

Esqueça OTServers aqui! Estamos falando de Lua, não de OTServers.

 

Ou então se fosse só para dar um "set" em um monstro do ot, esse script não deveria ter alguma coisa a ver com a pasta que estão os monsters/npcs?

 

Ou então seria feito uma linha no script de um monstro atribuindo uma habilidade deste script nele?

 

Por exemplo como quando definimos os elementos dos monstros, mas neste estilo:

 

MonsterType = voador

 

Desculpe ter tantas duvidas, mas é que algumas coisas ficaram um pouco vagas na minha cabeça xD

É que faz um tempin ki nao mecho com ots e agora estou querendo voltar... Ai to meio desatualizada xD

 

Obrigada

 

Minininha~

Creio que minhas respostas acima tenham respondido à esta pergunta.

Eu fico extremamente feliz que alguém tenha realmente lido o tutorial, e entendido parte dele, com dúvidas para perguntar.

 

Qualquer outra dúvida você pode postar aqui mesmo, ou enviar uma Mensagem Particular para mim ou para o Mock, ou procurar por nós no mIRC (WebChat) da OTServ Networks, ou por MSN: [email protected]

Compartilhar este post


Link para o post
akro    0
akro

Muito bom, vlw ai pelo tuto :)

Compartilhar este post


Link para o post
ParsonS    0
ParsonS

existe algum programa para facilitar a programação de lua, agilisando a mesma ?

Compartilhar este post


Link para o post
Sorcerer of luz    0
Sorcerer of luz

Eu peço por obséquio que me conseda outra explicação que seja mais detalhada. No exemplo de como usar POO.

 

 

Ps:Da proxima explica POO please.

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×