sábado, 22 de janeiro de 2011

MUI: global local

Afinal, o que é MUI?
MUI significa Multi-Unit Instanceability. Uma trigger é MUI quando ela pode ser usada por duas ou mais unidades, ao mesmo tempo (sem causar bug).

Vamos aprender um pouco sobre MUI
Um bom exemplo de MUI é aquele mode do dota, -wtf. Aquele mode super fun em que suas habilidades não possuem cooldown e você fica usando a mesma habilidade toda hora. Para que você possa ter um mode daqueles em seu mapa, será preciso que todas as habilidades do seus heróis sejão MUI. =P

Vamos falar de mais alguns exemplos de MUI. Sabe aquele event response chamado Triggering Unit? Então, ele é MUI! "Como assim?" Uai, você pode usar o "Triggering Unit" até o final da trigger, sem medo dela bugar. Esse event response grava o valor da unidade até o termino do trigger e você pode usar "waits" bem longos pra comprovar isso. É bom saber que aqueles LastCreated...Restored...ReplacedUnit não são MUI, eles são global variable e por isso tem seu valor trocado toda hora.


Usando variables para fazer MUI
Antes de mais nada, você deve saber o básico sobre as variables (variáveis, em português). Existem dois tipos de variables, as global e as local. Global variables são aquelas que pode usar em todos os trigger e local variables podem ser usadas apenas na trigger em que ela foi declarada. Logo você deve entender que global variables não são MUI, à menos que você crie indexs (mas isso é outra coisa). Já as local variables são 101% MUI.

Vou ensinar a vocês a usarem as "global local variables". "Pra que serve isso?" Serve pra você torna sua global variable em local variable (ou seja, MUI). "Hmmm...E como faço isso?" Crie uma variable ( Ctrl+B ) do tipo unit chamada "Unit". Depois em seu trigger crie uma local variable usando a action Custom Script, assim:

local unit udg_Unit
 Esse udg_ antes do nome da nossa local refere-se as variables criadas em GUI, em outras palavras, criadas naquela caixinha de variables do Trigger Editor. Toda variable criada lá é global e recebe o prefixo "udg_" no nome dela.
Essa local que criamos então tem o mesmo nome da variable global que criamos antes. Ela substituirá nossa global apenas naquele trigger. veja o exemplo:

Events
    Map Initialization
Conditions
Actions
    local unit udg_Unit
    Create 1 Footman for Player 1 (Red) at (Center of (Playable map area)) facing 0.00 degrees
    Set Unit = (Last created unit)
    ...


Nesse trigger a global variable Unit irá se tornar local, ou seja, (mais uma vez) MUI. tem um probleminha com essa global local variables, elas não podem ser usadas em uma If/Then/Else’sCondition, em uma Group Condition,dentro de um Group Loop ou em um Conditional Wait. Nunca se esqueça se "setar" local variables para null, apenas faça isto no final do trigger:
Set Unit = No unit
Por rasões ainda desconhecidas, apenas uma "global local variable" de cada tipo funciona por trigger. Ou seja, você não pode usar duas varibles do tipo unit em um mesmo trigger pra fazer uma global local das duas, apenas uma funcionaria.

Por enquanto esse tutorial está muito "meio" mal explicado, mas assim que der eu melhoro ele. E futuramente eu vou fazer um exemplo de Triggered Spell MUI. Espero que não esteja assim tão escroto, como eu estou pensando.

Creditos à Tom Jones (The Helper) pelo tutorial em inglês. 


Visite nosso Forum XD

2 comentários:

  1. Ai cara eu li o tuto todo e persebi que com MUI resolva meu problema em um mapa...
    mais não entendi bem como deixar a variavel MUI...

    (no mapa que to fazendo eu fiz um sistema de repick, mas quando da repick ele deleta heros de todos os players... acho que isso é por causa do loop e variavel global de players...)

    acho que não eu não consegui falar de um jeito claro mais como eu poderia usar variaveis e loops em apenas 1 trigger mais pra funcionar todos os players e deletar o hero apenas do player que ativo o evento?

    By brutallouco dnv lhe enchendo.kk

    ResponderExcluir
  2. Desculpa por demorar a responder, seu comment tava na caixa de spam =/

    Olha esse link e veja se te ajuda em algo.

    http://world-editor-tutorials.thehelper.net/herotavern.php

    ResponderExcluir