domingo, 3 de junho de 2012

Tutorial básico sobre hashtable

Eai galera, há um tempo havia falado que iria fazer um tutorial sobre hashtables. Então chega de enrolação e vamos logo com isso.

Galera antes de ensinar sobre hashtable, vou dizer tudo que vocês precisam pra usar hashtable. Você terá que ter um conhecimento básico sobre variáveis array e precisará criar uma hashtable em uma trigger com evento "Map Initialization":


O que é uma Hashtable?


Hashtable é uma tabela na qual você pode guardar qualquer tipo de informação. Como se fosse uma variável array. Porém nas variáveis array só temos 1 indice, em hashtable temos 2.
Exemplo:
set variavel [1] = informação
set hashtable [1] [2] = informação
Veja o exemplo de hashtable, para absorver mais ainda:











Para salvar algo na hashtable você precisa fornecer dois índices (números) que serão como um código para achar a informação. Como no exemplo acima, eu quero guardar MinhaUnit dentro da MinhaHashtable no índice 0 (zero) e 0 (zero). Então para eu recuperar o que eu gravei na hashtable eu apenas tenho que usar o load (carregar/recuperar) nos índices 0 e 0 gravando direto na minha variável.

Mas qual a real vantagem da hashtable?


A vantagem é que cada coisa do mapa tem um id (código) chamado HandleId. Esse handle id é um número maior que o limite dos indices das variáveis array, que é 8191, mas não é maior que o limite para os indices da hashtable. E além disso, a hashtable possui dois indices, tornando o armazenamento de informações mais dinâmico ainda. Vou dar um exemplo. Vou ensinar a fazer um simples knockback (aquelas magias que empurram) usando hashtable. Usarei a magia Thunder Clap para ativar nosso knockback. veja:

Acima são as triggers do knockback com hashtable. Só quero explicar mesmo a linha que salvo o valor do Angulo no indice Key (Picked Unit), isso significa que usei o código daquela unidade para ser um índice. Assim quando eu for fazer o Pick Every Unit no grupo que está todos os alvos do knockback eu novamente usarei o Key (Picked Unit) para recuperar as informações que gravei. No outro índice ainda tenho que usar valores diferentes. Se a hashtable fosse mesmo uma variável com 2 índices, é como se eu tivesse fazendo isso:
set MinhaHashtable[0][PickedUnit] = Angulo
set MinhaHashtable[1][PickedUnit] = DistanciaRestante
Estou deixando no final do tutorial um mapa com esse knockback. Caso ainda tenha restado duvidas, eu aconselho tentar usar hashtables no world editor. Ver pessoalmente como elas funcionam. E mais outra coisa, se você sabe o que são leaks verá que nas triggers que postei está cheio deles. Se você não sabe o que são leaks, procure tutoriais na internet, para criadores de mapa esse é um assunto muito importante.

É isso ai galera, até a próxima!

Mapa de Demonstração

3 comentários:

  1. Bills eu to com uma ideia para criar uma campanha no Warcraft3TFT, porém eu não sei muita coisa para poder fazer ficar legal. eu to querendo criar uma campanha em cima da historia dos naga. Po se vc poder me da uma ajuda ai blz...?
    Vlw!

    ResponderExcluir
  2. Claro, qualquer dúvida você pode me mandar um email ou então participe do http://www.teamkings.com.br

    ResponderExcluir
  3. Ola esse hastable serve para salvar informaçao de unidade tbm, pois estou com um poblema serio com replace, no global acontece varios bug to tentando corrigir a algum tempo. Devinganca no TeamKings

    ResponderExcluir