terça-feira, 31 de março de 2015

Os meu addons? Eu mesmo faço!




Você já pensou em fazer addons do World of Warcraft? Independente da sua resposta, leia este post...

No meu último post falei um pouco a respeito da linguagem Lua, que é brasileira e é utilizada pela Blizzard para ser o "motor" de interface do WoW.

Contudo, ao final do post, compartilhei um vídeo do projeto Code.org, que incentiva as pessoas à programar, fazendo seus próprios códigos. Esta filosofia acredita que, ao programar, as pessoas ganharão mais autonomia no nosso contexto tecnológico, desenvolvendo suas próprias soluções.


E cá estou eu novamente para instigá-los neste sentido: vocês já pensaram em fazer um addon?

Bem, inicialmente, deixe-me contar-lhes um segredo, o fato é que programar não tem segredo, basta entender o que se quer comunicar com o computador, saber como a "língua" que você quer usar funciona e tentar, tentar e tentar... Comece pelo simples e depois vá aumentando a complexidade.

Com o addon é a mesma coisa, portanto vou te apresentar uma ideia simples para fazer uma addon para resolver esta questão.

Pegando a Missão


Minha necessidade é: "Como não falo nada de inglês, gostaria de um addon para enviar frases simples em inglês, como 'Olá Todos!' e 'Obrigado!'"

Para tal, gostaria de ter uma janela com um botão para cada mensagem que quero disparar.

Primeiro vamos entender o que é um addon. São três tipos de arquivos:

1) .toc: Um arquivo que é, na realidade uma espécie de identificação do addon. Tem linhas que declaram qual a versão do WoW que é suportada por ele, quem é o autor e sua descrição que aparece na janelinha de addons do jogo. Tem, também, a lista de arquivos que compõem a solução;

2) .xml: XML é um formato de uso geral na computação. Trata-se de um arquivo com "marcações" e "seções". No caso dos addons, este arquivo é usado para se montar um ou vários elementos visuais. Ele desenha a tela, com suas particularidades de cor, tamanho, posicionamento e indica quais comportamentos os elementos terão;

3) .lua: É o chamado arquivo de scripting. Aqui é onde fica a lógica toda do addon. Neste arquivo são inseridas as linhas de código para que o WoW se comporte da maneira que deseja, com a linguagem Lua.

Fazendo a Missão

Agora que já sabemos os tipos de arquivos, vamos iniciar. Crie uma pasta com o nome exato que terá seu addon, isto será importante, pois ele procurará as pastas dentro da pasta Addons do WoW e, em cada pasta procurará um arquivo .toc com o mesmo nome. Neste arquivo estarão os dados necessários para a carga e execução do addon. Como mostrado na imagem abaixo, criei uma pasta dentro das minhas pastas de desenvolvimento e não direto no WoW, para não correr riscos durante o desenvolvimento.

Exemplo de pasta onde ficarão os arquivos do addon

Agora podemos criar e editar os três arquivos que conterão a solução ao nosso problema. Eu utilizo o NotePad++ para esta tarefa, mas você pode utilizar qualquer programa que grave texto puro (o Word, por exemplo, não serve, pois ele coloca marcas de formatação no arquivo, o que irá danificar o projeto).

O primeiro será o arquivo "Frases.toc", com o seguinte conteúdo

## Interface: 60100
## Title: Frases Bilíngues
## Notes: "Addon para auxiliar falantes em português, para armazenar e usar frases básicas"
## Version: 1.0
Frases.xml
Frases.lua

A primeira linha do arquivo contém a versão da chamada API do WoW "## Interface: 60100", que muda junto com a expansão e alguns casos com patches que a modifiquem.

Para saber qual é esta versão, abra o jogo e digite o seguinte na janela de chat:
/run print((select(4, GetBuildInfo())))

A segunda linha tem o título do aaddon que vai aparecer na janela de addons e a terceira contém a descrição mais detalhada.

A quarta linha tem a versão do addon (número que cada desenvolvedor dá para controlar as versões e correções feitas no addon).

Logo na sequencia tem os arquivos que irão fazer parte da solução. Lembre-se que o WoW espera que o arquivo "toc" tenha o mesmo nome da pasta para carregá-lo e lê-lo, contudo, os outros arquivos podem ter nomes distintos. Coloquei os mesmos para facilitar o entendimento.

Outras chaves podem ser colocadas no arquivo toc, de acordo com este guia:

O segundo arquivo será o "Frases.xml" é a representação da minha interface

Para ler um XML, seja ele qual for, use a seguinte técnica. Normalmente ele começa com uma "tag" ou marcação, por exemplo "<UI" que irá finalizar com um "/>" ou "</UI". Dentro de cada marcação, podem ter várias outras marcações, que seguirão a mesma lógica. Isto mostra que cada seção, marcada por uma tag de início e fim, pode ter seções internas.

Na prática, o exemplo do nosso addon ilustra isto bem. Como podem ver na imagem final, teremos um painel com dois botões. Os botões são "filhos" do painel, estão dentro dele e são controlados por ele.

Imagem Final do Addon

As palavras que fazem a marcação são bem intuitivas. Veja bem, jogando "Frame" no Google Translate, a primeira palavra que vem é "Quadro". É exatamente esta a forma que iremos desenhar. E "Button" é traduzido como "botão". Leia com calma e sem medo o XML e você verá que não tem muito mistério, apenas formatações de fundo de tela, cores, fontes e coisas do tipo.

Veja arquivo completo abaixo:

<?xml version="1.0"?>
 <Ui xmlns="http://www.blizzard.com/wow/ui/"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Script file="Frases.lua" />

<Frame name="PainelFrases" parent="UIParent" toplevel="true" enableMouse="true">
<Size>
<AbsDimension x="147" y="90" />
</Size>
<Anchors>
<Anchor point="CENTER">
<Offset x="-43" y="-11" />
</Anchor>
</Anchors>
<Backdrop bgFile="Interface\DialogFrame\UI-DialogBox-Background" edgeFile="Interface\DialogFrame\UI-DialogBox-Border" tile="true">
<BackgroundInsets>
<AbsInset left="11" right="12" top="12" bottom="11" />
</BackgroundInsets>
<TileSize>
<AbsValue val="32" />
</TileSize>
<EdgeSize>
<AbsValue val="32" />
</EdgeSize>
</Backdrop>
<Frames>
<Button name="OlaTodos" inherits="UIPanelButtonTemplate" text="Olá a todos">
<Size>
<AbsDimension x="75" y="28" />
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset x="32" y="-52" />
</Anchor>
</Anchors>
<Frames />
<Layers />
<Scripts>
<OnClick>Hi();</OnClick>
</Scripts>
</Button>

<Button name="Obrigado" inherits="UIPanelButtonTemplate" text="Obrigado">
<Size>
<AbsDimension x="75" y="28" />
</Size>
<Anchors>
<Anchor point="TOPLEFT">
<Offset x="32" y="-22" />
</Anchor>
</Anchors>
<Frames />
<Layers />
<Scripts>
<OnClick>Thanks();</OnClick>
</Scripts>
</Button>

</Frames>
<Layers>
</Layers>
</Frame>
 </Ui>

Eu quero chamar atenção especial para três linhas, que são exatamente os pontos de ligação do "xml" com meu arquivo "lua" que irá executar as ações.

<Script file="Frases.lua" /> -> Esta linha ensina ao xml quem irá executar o comportamento indicado pelos elementos da tela;

<OnClick>Hi();</OnClick> -> Esta linha instrui ao primeiro botão que execute a função Hi() que está dentro do arquivo "Frases.lua";

<OnClick>Thanks();</OnClick> -> Esta linha instrui ao segundo botão que execute a função Thanks() que está dentro do arquivo "Frases.lua".

Existem muitas outras tags e possibilidades de formatação de tela. Para uma referência mais detalhada, veja em: http://www.wowwiki.com/XML_UI

O terceiro arquivo será, por fim o "Frases.lua"

Aqui teremos os scripts executados pelas ações da interface, com o seguinte conteúdo:

function Hi() 
  SendChatMessage("Hi All!" ,"SAY");
end

function Thanks() 
  SendChatMessage("Thank You!" ,"SAY");
end

Neste caso, as funções estão usando o /say, mas você pode direcioná-los para outros chats.

Entregando a Missão

Bem, agora é a hora da verdade. Siga os passos abaixo:

1) Localize a pasta "Interface\Addons" dentro das pastas do jogo, conforme imagem abaixo. (O caminho vai variar de acordo com o local de instalação do WoW, mas a pasta Addons sempre estará dentro da pasta "Interface".

Exemplo de Pasta do WoW

2) Crie a pasta "Frases" dentro da pasta "Addons". É importante que o nome seja exatamente este para que ele reconheça o addon.


3) Copie os três arquivos "Frases.toc", "Frases.xml" e "Frases.lua" para dentro da pasta "Frases" recém criada.


Agora basta rodar o WoW.

Na tela inicial, veja se nosso addon aparece, conforme imagem, se não aparecer, repita com cuidado a operação acima. Saia e entre no jogo novamente.

Tela Inicial

E quando logar, deve aparecer a janela da seguinte forma:

Tela Dentro do Jogo

Agora é testar.



Importante: se em algum momento dos seus testes o WoW travar ou tiver comportamento estranho, basta excluir a pasta "Frases" de dentro da pasta "Interface\Addons" do jogo.

Versão 2.

Ah, mas o addon só tem estas duas frases? A janelinha não se move? queria editar e salvar minhas próprias frases dentro do jogo.

Bom, se você chegou até aqui e sentiu que estas perguntas são relevantes, significa que o bichinho do desenvolvimento te pegou. Na internet tem muito material sobre o assunto. Defina seus próximos requisitos e mãos à obra.


Algumas referências:

http://wowprogramming.com/docs
http://www.wowwiki.com/WoW_AddOn
http://www.wowinterface.com/forums/forumdisplay.php?f=12
http://www.mmo-champion.com/threads/817817-Creating-Your-Own-WoW-Addon
https://addonstudio.codeplex.com/discussions/251771
http://www.dev-hq.net/posts/2--create-world-of-warcraft-addon



Montanha





fonte de imagem: http://fc07.deviantart.net/fs70/i/2014/230/1/6/gnome_engineer_by_ancientsources-d4t3lsm.jpg - acesso em 27.mar.2015
fonte de imagem: http://th05.deviantart.net/fs70/PRE/f/2010/296/5/6/goblin_engineer_by_nefarei-d31cg23.jpg - acesso em 27.mar.2015
fonte de imagem: http://gamestudies.org/articleimages/30_Figure1a.jpg - acesso em 27.mar.2015
fonte de imagem: http://muse.union.edu/unfiltered/files/2012/11/level70.jpg - acesso em 27.mar.2015
fonte de imagem: arquivo pessoal -  - acesso em 27.mar.2015
fonte de pesquisa: http://www.cojanowow.com.br/2015/03/dentro-do-wow-bate-um-coracao-brasileiro.html - acesso em 27.mar.2015
fonte de pesquisa: http://us.blizzard.com/pt-br/ - acesso em 27.mar.2015
fonte de pesquisa: http://us.battle.net/wow/pt/game/ - acesso em 27.mar.2015
fonte de pesquisa: http://code.org/ - acesso em 27.mar.2015
fonte de pesquisa: http://pt.wikipedia.org/wiki/XML - acesso em 27.mar.2015
fonte de pesquisa: http://www.lua.org/portugues.html - acesso em 27.mar.2015
fonte de pesquisa: http://notepad-plus-plus.org/ - acesso em 27.mar.2015
fonte de pesquisa: http://www.wowwiki.com/API_SendChatMessage - acesso em 27.mar.2015
fonte de pesquisa: http://www.wowwiki.com/XML_UI - acesso em 27.mar.2015
fonte de pesquisa: https://translate.google.com.br/ - acesso em 27.mar.2015
fonte de pesquisa: http://wowprogramming.com/docs - acesso em 27.mar.2015
fonte de pesquisa: http://www.wowwiki.com/WoW_AddOn - acesso em 27.mar.2015
fonte de pesquisa: http://www.wowinterface.com/forums/forumdisplay.php?f=12 - acesso em 27.mar.2015
fonte de pesquisa: http://www.mmo-champion.com/threads/817817-Creating-Your-Own-WoW-Addon - acesso em 27.mar.2015
fonte de pesquisa: https://addonstudio.codeplex.com/discussions/251771 - acesso em 27.mar.2015
fonte de pesquisa: http://www.dev-hq.net/posts/2--create-world-of-warcraft-addon - acesso em 27.mar.2015

4 comentários:

Estou dando ênfase nessa "mão na roda" que pouco citada foi nesse artigo.
Uma IDE para criar a interface do Addon:
https://addonstudio.codeplex.com/

Fala Cesar!

Obrigado por contribuir. A ideia de não apresentar nenhuma ferramenta, lib ou framework de addon (como a Ace, por exemplo), foi apresentar o mecanismo de forma mais crua.

A ideia é fazer um "Raio-X" do addon para quem não conhece.

À medida que a pessoa se interesse, ela vai naturalmente procurando meios de acelerar o desenvolvimento.

Galera eu uso Visual Basic para ler as .XML dentre outras ele a melhor pra mim e já uso há anos

Olá Daniel,

Você deve estar se referindo ao Visual Studio, né?

Sim, é uma excelente ferramenta para ler XML, contudo é muito pesado. Caso não seja um desenvolvedor VB especificamente, aí recomendo o NotePad++ por ser mais leve e ainda dar suporte à edição dos arquivos Lua.

Abs.

Postar um comentário