WOW UI Mod Guide-Chapter 2 Slash Commands

Buy WoW Gold Cheap

  • Buy WoW Classic Gold Safe at PVPBank using coupon SEAN. Pagamentos: Paypal, Crédito. Compre WoW Gold Paypal em Mulefactory. Cupão Clássico: wowcgold & Cupão De Ouro: wowrgold. Preços incríveis, entrega instantânea. Pagamentos: Paypal, Skrill, Bitcoin.
  • UI Mod Guia – Capítulo 1
  • UI Mod Guia – Capítulo 2
  • UI Mod Guia – Capítulo 3
  • UI Mod Guia – Capítulo 4
  • UI Mod Guia – Capítulo 5
  • UI Mod Guia – Capítulo 6
  • UI Mod Guia – Capítulo 7

Parte 2 Índice

  • o Que são barra de comandos, e por que eu me importo
  • Como fazer barra de comandos trabalho
  • LUA Arquivos
  • Colocá-lo todos juntos
  • o Que ele faz
  • Palavras Finais

bem-vindo à segunda Parte do nosso guia para a criação de WoW Idiotas! Nesta parcela vamos construir sobre o Addo simples que criamos na parte um. Mesmo se você já está familiarizado com a criação de AddOns, você pode querer rapidamente esquimar a parte um.

na segunda parte, eu vou assumir que você está familiarizado com o básico de Lua, XML, e arquivos toc. No entanto, não presumo que tenha uma vasta experiência de programação. O nosso foco será lidar com os comandos. Ao longo do caminho, também vamos olhar um pouco mais de perto para Lua coding. Quando terminarmos, teremos expandido o grito de batalha bastante lame da parte um para ser personalizável pelos utilizadores finais sem exigir que eles modifiquem o código Lua. Se você ainda não tem o Addo da parte um, você pode obter os arquivos <aqui>.

o que são comandos de barra, e por que eu me importo

se você jogou WoW por mais de cinco minutos, você está familiarizado com comandos de barra. São as coisas que dizem e que escrevem enquanto brincam. Os comandos de barra são uma forma muito conveniente de executar uma acção sem usar o rato. Para escritores de AddOn, comandos de barra são muito mais simples de implementar do que uma interface gráfica de usuário com janelas e botões. Se as suas necessidades são simples, os comandos slash podem ser tudo o que o seu AddOn requer.Como você sabe, WoW fornece cerca de um milhão de comandos desse tipo. O que você pode não saber é que AddOns pode adicionar seus próprios comandos de barra. Vamos ver o que é preciso para aumentar a contagem de slash para mil milhões de dólares.

HOW DO SLASH COMMANDS WORK

Every slash command that an AddOn creates has a Lua function associated with it. Quando o utilizador escreve o comando slash, WoW chama a função Lua. Internamente, a WoW mantém uma lista ¡°SlashCmdList ¡±, que é uma tabela que mapeia todos os diferentes comandos de barra para as funções que devem chamar. Podes pensar nisto como uma lista telefónica. (Lembre-se antes de salas de chat e IM, quando as pessoas usaram o telefone J) os comandos slash são como os nomes e as funções são como os números de telefone. Quando o utilizador escreve um comando de barra, WoW passa pelos comandos de barra (nomes) até encontrar o correcto. Em seguida, ele chama a função (número de telefone) para essa entrada. Aqui¡s da Lua para criar uma barra de comando:

SlashCmdList = TthAog2SetMyBattleCry;

Esta linha define a função para a ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± barra de comando para ¡°TthAog2SetMyBattleCry¡±. Se o comando ¡°TTH_ AOG2_SET_MY_BATTLE_CRY¡± slash não existir Já na tabela ¡°SlashCmdList ¡±, é criado automaticamente. (Conveniente, não é?) para que isto funcione de facto, temos de definir a função de memória do satélite em algum lugar do nosso código Lua. A função pode ser assim:

function TthAog2SetMyBattleCry(msg)
— set the battle cry, for use later
TthAog2MyBattleCry = msg;
end

(A word on convention: notice that we used all-caps for the slash command name. Isto é, nós escrevemos TTH_AOG2_SET_MY_BATTLE_CRY¡± em vez de ¡°TthAog2SetMyBattleCry¡±. Neste guia, nós vamos usar todas as capas para valores constantes C que nunca devem mudar, mesmo se o mundo se desintegrar em poeira interestelar ou nerds nevrálgicos padres ou algo igualmente horrível. Sempre que me vires a usar um nome em maiúsculas, saberás que te estou a mostrar uma constante.)

questionário: o que é que um utilizador escreve para executar o novo comando barra Ok, confesso. É uma pergunta com rasteira. Embora a linha acima de Lua cria um comando slash e associa uma função Lua com ele, ainda não temos nenhuma maneira de executá-lo. WoW usa um sistema de aliasing nifty para associar o que o utilizador escreve com os comandos de barra reais. Aqui¡s da Lua código para fazê-lo:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = “/setmybattlecry2”;

Agora, se o usuário digita ¡°/setmybattlecry2 Não na virilha!¡ ± , o comando slash ¡°TTH_AOG2_SET_MY_BATTLE_CRY¡± será executado, fazendo com que a função ¡°Tthaog2setmyblecry¡± seja chamada com o parâmetro ¡°não na virilha!¡±. (Nós colocamos um ¡°2 ¡±no final do ¡°/setmybtlecy2 ¡± porque nós vamos rever o nosso AddOn em partes posteriores deste guia e nós não queremos que os nomes para conflito.)

Why the extra step Why doesn’t creating the slash command ¡°TTH_AOG2_SET_MY_BATTLE_CRY ¡± automatically make it so the user can type ¡°/tth_ aog2_setmybattlecry¡± to run it There are two reasons. Já se pode ver o primeiro: embora os nossos nomes internos possam fazer muito sentido no nosso Código, muitas vezes são terrivelmente feios para mostrar aos utilizadores. A segunda razão é mais importante: este passo extra permite que várias palavras-chave possam executar o mesmo comando de barra. Dactilografar o vídeo é uma chatice. Deixe¡s dar às pessoas um caminho mais curto:

SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = “/smbc2”;

Agora os usuários de nossa AddOn pode digitar ¡°/setmybattlecry2 ¡±, ou ¡°/smbc2¡± para definir o grito de guerra. Note – se que na parte constante (SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2) adicionámos uma ¡°2¡± em vez de uma ¡°1¡± desta vez. Poderíamos acrescentar uma terceira palavra-chave, adicionando uma ¡°3 ¡±, e assim por diante.Embora os comandos de barra não sejam tão chiques ou visualmente atraentes como as janelas e os botões, são frequentemente convenientes para os utilizadores. E são muito mais fáceis de criar. (Se você ainda quer uma interface gráfica para o seu AddOn, e provavelmente quer, seja paciente. Vamos cobrir isso na parte sete deste guia.)

variáveis LUA

você pode ter notado algo novo na função acima. Aqui está novamente, no caso de você não ter visto:

função Tthaog2setmyblecry (msg)
— definir o grito de batalha, para uso posterior
TthAog2MyBattleCry = msg;
end

The ¡°Tthaog2mybecry = msg; ¡± é a nova parte. A taxa de crescimento é uma variável Lua. Variáveis são apenas slots para manter qualquer valor de sua escolha. Como muitas linguagens de script, Lua é muito flexível em lidar com variáveis. Se tiver usado uma linguagem de programação fortemente escrita, como o C++, poderá perguntar-se sobre a variável do tipo¡o±. Não. você pode pensar em variáveis Lua como grandes caixas vazias que podem conter praticamente qualquer coisa que você quer armazenar lá. Neste AddOn, nós armazenamos o grito de batalha preferido do usuário na variável. Um aspecto importante das variáveis é o âmbito de aplicação. Escopo significa essencialmente ¡°que código pode ver esta variável ¡±por padrão, as variáveis têm ¡°escopo global ¡±, muitas de suas funções podem ver a variável. O outro tipo de âmbito é o âmbito local. O que isto significa para nós é que só o código dentro do mesmo bloco pode ver a variável. Um bloco significa basicamente ¡°até à próxima extremidade ¡±. (A definição técnica de âmbito de aplicação em Lua é mais complicada, mas não precisamos de nos preocupar com esses detalhes aqui.)

no nosso exemplo acima, ¡°Tthaog2mercado ¡± é uma variável ¡°global ¡±, uma variável com âmbito global. A linha de ¡°TthAog2MyBattleCry = msg;¡± dentro do ¡°TthAog2SetMyBattleCry¡± função criada. Para aqueles de vocês que vêm de linguagens como C++, isso pode parecer contra-intuitivo. Mas em Lua, se uma variável não é explicitamente identificada como tendo escopo local, ela é automaticamente global. Mesmo que se declarasse dentro de uma função. Então o seguinte funcionaria:

função TthAog2SetMyBattleCry(msg)
— definir o grito de guerra, para uso posterior
TthAgo2MyBattleCry = msg;
fim

função TTHAog2Event()
— enviar uma mensagem para o chat
SendChatMessage(TthAog2MyBattleCry, “DIZER”);
fim

Observe que TthAog2MyBattleCry é usado em ambas as funções. Em ambos os lugares, refere-se à mesma variável. Usando a analogia da caixa, se Tthaog2setmyblecry colocar um valor na caixa, TthAog2Event pode olhar para a caixa e ver esse valor.

no entanto, declarar variáveis globais desta forma é uma má prática. É muito melhor declará-los no topo de seu arquivo Lua. Isso tem duas vantagens:

1) a lista completa de variáveis globais está bem ali, onde você pode facilmente ver todas elas num relance

2) você pode ter certeza de que a variável está devidamente inicializada.

por isso é muito preferível fazer isto:

— esta variável mantém o nosso grito de batalha
TthAog2MyBattleCry = “Not in the face!”;

function TthAog2SetMyBattleCry (msg)
— set the battle cry, for use later
TthAog2MyBattleCry = msg;
end

function TthAog2Event ()
— sendchatmessage(TthAog2MyBattleCry, “SAY”);
end

Now it is much easier to see what is going on.

variáveis locais são muitas vezes úteis quando só precisamos de um valor brevemente. Usando um local, é muito claro que código modifica a variável. Como o local não existe muito tempo, você geralmente pode ver todo o código que pode modificá-lo em um piscar de olhos. Seria uma boa ideia fazer eco do novo grito de guerra para o utilizador quando o programarem. Vamos modificar o plano de Acção 2 para fazer isto.:

function TthAog2SetMyBattleCry (msg)
— Set the battle cry, for use later.
TthAog2MyBattleCry = msg;

— Echo the new battle cry for confirmation.
eco local = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat (echo);
end

introduzimos várias coisas novas para além da variável local, por isso vamos olhá-las brevemente um a um:

local echo = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;

esta linha cria uma variável local chamada ¡°echo¡± para armazenar o valor que faremos eco ao utilizador. A parte após o sinal de igual faz uma cadeia de texto que começa com o conteúdo da variável TTH_ AOG2_BATTLE_CRY_SET_TO e termina com o conteúdo do msg, então atribui essa cadeia de texto para a variável local.

Uh-oh, ainda não definimos a variável TTH_AOG2_BATTLE_CRY_SET_TO. Vamos defini-lo com esta linha, colocada no topo do nosso ficheiro:

local TTH_AOG2_BATTLE_CRY_SET_TO = “Battle cry set to “;

como pode ver, a variável TTH_AOG2_BATTLE_CRY_SET_TO simplesmente contém uma cadeia de caracteres. Porque esta corda nunca muda, chama-se constante. Colocar a sua constante no topo do seu arquivo é sempre uma boa idéia. Dessa forma, se você precisar mudar o texto, a string é muito fácil de encontrar. (Como veremos na parte seis, também facilita muito a localização, ou o suporte a várias línguas.) Também, Nós declaramos a variável TTH_AOG2_BATTLE_CRY_SET_TO como local, mesmo que não esteja em uma função. Isto significa que a variável existe apenas dentro deste arquivo, e não em qualquer outro. Se você está usando apenas uma variável em um arquivo, é sempre bom torná-lo local. Assim, tem a certeza que nenhum código fora do seu ficheiro o pode ter modificado. (Você deve estar se perguntando Por que nós não fizemos o jogo 2 do Filme local. Isso é principalmente porque eu queria mostrar a vocês como era uma variável global. Mas também há outra razão, que verá na terceira parte.)

Agora vamos¡s mover para a próxima linha da função:

TthAog2OutputToChat(eco);

Esta linha chama uma função que temos de escrever, para enviar uma mensagem para a área de bate-papo. A variável eco é passada para a função. Aqui está como esta função se parece:

função TthAog2OutputToChat(msg)
se (DEFAULT_CHAT_FRAME), em seguida,
DEFAULT_CHAT_FRAME:AddMessage(msg);
fim
fim

Esta função determina se podemos mostrar texto para o padrão de bate-papo do quadro e, em caso afirmativo, exibe o texto em msg para a área de bate-papo. Este texto não é visto por qualquer outro jogador C é estritamente texto informativo para o jogador executando o AddOn. Se você não está familiarizado com como passar variáveis para funções funciona, aqui está como ele vai: quando Tthaog2setmyblecry chama TthAog2OutputToChat, passando a variável echo, Lua algumas coisas nos bastidores. Ele cria uma variável local chamada msg em TthAog2OutputToChat, em seguida, copia o valor em echo para msg. Isto nos dá uma variável local chamada msg dentro da função TthAog2OutputToChat, que podemos usar como quisermos. Não tivemos de criar uma função para fazer isto. Poderíamos ter colocado o código para sair para a área de chat diretamente na função Tthaog2setmyblecry. Mas a utilização de uma função torna muito fácil enviar texto para a área de chat. Se precisássemos de fazer isto noutro lugar, teríamos de chamar a função, não copiar um bloco inteiro de código. (Vamos tirar partido disso na Parte Três.) Também, se decidirmos mostrar o texto ao usuário de uma forma diferente, nós apenas precisamos modificar o código dentro da função. Nenhum outro código seria afetado, reduzindo a chance de um bug. Finalmente, simplificou a função de processamento de dados Tthaog2setm. Código fácil de ler é código fácil de depurar.

ainda não explorámos completamente o tratamento de cordas de Lua ou a hierarquia de quadros WoW, mas fazê-lo neste ponto seria uma distração do nosso foco principal de comandos de barra. Espero que o acima seja suficiente para você entender o que está acontecendo nesta versão do Addo.

juntando tudo

estamos agora prontos para reescrever o battle cry AddOn para permitir que o usuário especifique um battle cry preferido através de comandos slash. Assim como na primeira parte, há três arquivos envolvidos:
– toc arquivo
– arquivo XML
– Lua arquivo de código

O sumário do arquivo é quase inalterado da primeira Parte:

## Interface: 11000
## Title: TenTonHammer Guide Part 2
## Author: TenTonHammer.com
## Notes: Makes your character scream a customizable battle cry when combat begins

TthAog2.xml

Nós¡ve apenas mudou ¡°1¡± para ¡°2¡±, e alteradas as notas para chamar o grito de guerra ¡°personalizável ¡±, em vez de ¡°bobo¡±. Grava este ficheiro toc como TthAog2.toc para uma pasta chamada TthAog2 sob a pasta AddOns.

O arquivo XML é idêntico ao da Parte, exceto para alterar ¡°1¡°2¡±:

<Ui xmlns=”http://www.blizzard.com/wow/ui/” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://www.blizzard.com/wow/ui/”>
<Script file=” TthAog2.lua”/>
<Frame name=” TthAog2Core”>
<Scripts>
<OnLoad>TthAog2Load();</OnLoad>
<OnEvent>TthAog2Event();</OnEvent>
</Scripts>
</Frame>
</Ui>

Salve este arquivo XML como TthAog2.xml para uma pasta chamada TthAog2 sob a pasta AddOns.

finalmente, temos o arquivo Lua contendo o código em si. Você já viu todas estas peças:

— strings constantes.
local TTH_AOG2_BATTLE_CRY_SET_TO = ” Battle cry set to “;Esta variável contém o nosso grito de guerra.
TthAog2MyBattleCry = “Not in the face!”;

— function for printing to chat area
function TthAog2OutputToChat (msg)
if(DEFAULT_CHAT_FRAME) then
DEFAULT_CHAT_FRAME:AddMessage (msg);
end
end

— Called when the AddOn loads.
function TthAog2Load ()
— Register for an event.
this:RegisterEvent (“PLAYER_REGEN_DISABLED”);

— cria o comando slash.
SlashCmdList = TthAog2SetMyBattleCry;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY1 = “/setmybattlecry2”;
SLASH_TTH_AOG2_SET_MY_BATTLE_CRY2 = “/ smbc2”;
end

— Called when the slash command executes.
function TthAog2SetMyBattleCry (msg)
— Set the battle cry, for use later.
TthAog2MyBattleCry = msg;

— Echo the new battle cry for confirmation.
eco local = TTH_AOG2_BATTLE_CRY_SET_TO .. msg;
TthAog2OutputToChat (echo);
end

— Called to handle the event for which we’ve registered.
function TthAog2Event ()
— Send a message to chat.
SendChatMessage(TthAog2MyBattleCry, “SAY”);
end

Compared to Part One,we ¡ve added the TthAog2MyBattleCry global variable, added the code to create the slash command, added the TthAog2SetMyBattleCry function, and used the TthAog2MyBattleCry global variable in TthAog2Event. Acrescentámos também mais comentários.

Guarde este ficheiro lua como TthAog2.lua para uma pasta chamada TthAog2 sob a pasta AddOns.

o que ele faz

agora começar WoW e começar uma luta. Não na cara!¡±. Isto reflete o valor padrão da variável TthAog2MyBattleCry. Agora digite o seguinte:

/ smbc2 para a batalha!Você verá o novo grito de batalha ecoado para a área de chat. Agora entra noutra luta, e vais ver a batalha!não na cara!¡±. Se preferir desligar o grito de guerra, pode escrever apenas:

/smbc2

o nosso eco não está muito bem formulado para este caso (apenas dirá: “grito de batalha programado para ¡±). Se isto fosse um complemento real para uso do público em geral, testaríamos o valor do msg e exibiríamos um eco especial se o utilizador estivesse a limpar o grito de guerra. Porque isto é apenas um exemplo, não vamos complicar o código.

palavras finais

se você tentar a nova versão do AddOn e seu personagem grita dois gritos de batalha, é provavelmente porque você ainda tem o AddOn da parte um deste guia Instalado e ativo. Porque tivemos cuidado com o nome, isto não vai causar erros. Mas provavelmente também não é o que tu queres. Basta obter desativar ou excluir a primeira versão C O novo é melhor de qualquer maneira.No entanto, há um problema: o teu grito de guerra perde-se entre as sessões. Sempre que fechares e reiniciares Uau, vais estar de volta a … não na cara!¡±. Quando estiver pronto, passe para a terceira parte e veremos como fazer com que o seu grito de guerra preferido fique entre as sessões.