domingo, 12 de junho de 2011

Atualizações no Buff Generator

Buff Generator atualizado pra 1.4b. Apenas poucas mudanças no codigo. E o BGType foi para a versão 1.01, agora ele tambem expecifica o buff por magico (magical) ou fisico (physical).

Abraços

Leia Mais...

segunda-feira, 6 de junho de 2011

Buff Generator

Atualizei meu system para a versão 1.4. E agora ele chama Buff Generator.

Siga o link: http://blizzeditors.com.br/topic/17-buff-generator/

Leia Mais...

sexta-feira, 3 de junho de 2011

Aprenda a Fazer Recipes

O que você vai precisar:
  • 3 itens (no minimo)
  • Noção básica sobre Triggers (para fazer uma trigger simples)
  • Criatividade para criar seus próprios recipes (Opcional)
Vamos iniciar pelo início:
Um recipe, no contexto popular, é o que podemos chamar de fusão de itens: "Quando um herói pegar tais itens, eles se juntam e formam apenas um (mais poderoso geralmente)", por exemplo. Você com certeza já viu isso em algum mapa, aposto que foi no DotA.
Pois bem, se você está lendo esse tutorial, tem uma grande chance de você está querendo aprender a fazer isso. Você irá se surpreender como é facil.

Vamos fazer nossos itens:
Vamos começar fazendo apenas um teste, uma demonstração. Depois de aprender a fazer um recipe, você estará pronto para fazer seus recipes como você quiser.
  • Crie 3 novos itens.
  • Nomeie um de Item 1, outro de Item 2 e o ultimo de Item 3.

Pronto, já temos nossos itens. Vamos trabalhar agora com a trigger, que irá fazer o Item 1 e Item 2 se jutarem e formar o Item 3.

Evento:
Precisamos de um evento que verifique quando uma unidade pegar um item. Usaremos esse:

Events
    Unit - A unit Acquires an item

Assim, esse evento ativa a trigger quando uma unidade (qualquer uma) pegar um item.

Condições:
Para que o trigger não ative toda hora que uma unidade qualquer pegue um item, colocaremos a seguintes condições:

Conditions
    Or - Any (Conditions) are true
        Conditions
            (Item-type of (Item being manipulated)) Equal to Item 1
            (Item-type of (Item being manipulated)) Equal to Item 2

Essas condições irão verificar se o item que foi adiquirido é o Item 1 ou Item 2. Se não for um desses dois, não irá acontecer nada.

Ações:
É aqui que a mágica acontece. Iremos agora fazer com que a trigger verifique se a unidade tem os itens certos. Caso ela tenha, esses itens irão desaparece (fundir) e ela ganhará o Item 3 (a fusão dos Item 1 e Item 2). Essas são as ações:


Actions
    -------- Primeiro confira se a unidade tem os itens que precisa --------
    If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        If - Conditions
            ((Triggering unit) has an item of type Item 1) Equal to True
            ((Triggering unit) has an item of type Item 2) Equal to True
        Then - Actions
            -------- Se ela tiver, remova os itens de requerimento --------
            Item - Remove (Item carried by (Triggering unit) of type Item 1)
            Item - Remove (Item carried by (Triggering unit) of type Item 2)
            -------- Adicione o item novo --------
            Hero - Create Item 3 and give it to (Triggering unit)
        Else - Actions
Efeitos:
Bem, a sua trigger já está completa. Mas caso você queira que algum efeito aconteça quando ela juntar os itens, é só por essas actions no final da trigger:

-------- Cria um efeito na unidade --------
Special Effect - Create a special effect attached to the origin of (Triggering unit) using Abilities\Spells\Items\AIam\AIamTarget.mdl
-------- Destrua o efeito, para não causar lag --------
Special Effect - Destroy (Last created special effect)

O efeito que usei foi o "Abilities\Item Agility Gain". Depois dele coloquei uma ação que destroi um efeito especial depois que ele termina, não ligue para ela caso você não tenha entendido. Futuramente você entenderá.

Resultado Final:
Nossa trigger finalizada ficou assim:

Trigger Pronta
    Events
        Unit - A unit Acquires an item
    Conditions
        Or - Any (Conditions) are true
            Conditions
                (Item-type of (Item being manipulated)) Equal to Item 1
                (Item-type of (Item being manipulated)) Equal to Item 2
    Actions
        -------- Primeiro confira se a unidade tem os itens que precisa --------
        If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            If - Conditions
                ((Triggering unit) has an item of type Item 1) Equal to True
                ((Triggering unit) has an item of type Item 2) Equal to True
            Then - Actions
                -------- Se ela tiver, remova os itens de requerimento --------
                Item - Remove (Item carried by (Triggering unit) of type Item 1)
                Item - Remove (Item carried by (Triggering unit) of type Item 2)
                -------- Adicione o item novo --------
                Hero - Create Item 3 and give it to (Triggering unit)
                -------- Cria um efeito especial na unidade (isso é opcional) --------
                Special Effect - Create a special effect attached to the origin of (Triggering unit) using Abilities\Spells\Items\AIam\AIamTarget.mdl
                Special Effect - Destroy (Last created special effect)
            Else - Actions
Espero do fundo do coração que você tenha entendido tudinho. Caso não tenha encontrado alguma ação ou condição, poste que eu te ajudo.



Obrigado por ler.

Leia Mais...

quarta-feira, 30 de março de 2011

O que faz um jogo ser um sucesso ou leva-lo ao fracasso?

Esta é realmente um pergunta difícil de responder, pois envolve muitos aspectos diferentes. Neste tutorial, vamos ver alguns desses aspectos, na esperança de que vai ajudar você a criar jogos melhores. Este tutorial é um resumo do tutorial escrito por Mark Overmars.

O que é um jogo?
Antes de falar sobre bons jogos você deve saber o que um jogo é em primeiro lugar. Há uma quantidade surpreendente de discussões sobre esta questão e há muitas definições diferentes. É mais fácil dizer o que um jogo não é.

Um jogo não é um filme (OH RLY?)
Isto é bastante óbvio, mas por quê? Que elementos dos jogos estão faltando nos filmes? A principal diferença é que não há participação ativa do espectador em um filme. O espectador não tem controle sobre o filme e não pode tomar decisões que influenciam o resultado do filme. Além disso, o resultado final do filme é fixo (embora o espectador não pôde sabê-lo). Este é um aspecto crucial de filmes e peças teatrais. Nos jogos, o oposto é verdadeiro. As pessoas não gostam quando o resultado de um jogo é fixo. Elas querem influenciar o resultado. Elas querem estar no controle.

Um brinquedo não é um jogo
Você brinca com um brinquedo, mas não brinca com um jogo. Você joga o jogo. Alguns jogos chegam bem perto de serem um brinquedo. Um briquedo não tem objetivos predefinidos, você tem que cria-los por conta própria. Por exemplo, em The Sims não há objetivos claramente definidos. Você pode ter sua própria família e criar seus próprios objetivos (como criar a família mais bonitinha), mas não há realmente uma noção de ganhar o jogo. Você pode adicionar essa noção por si só (criando uma meta pra você), mas isso não será um fim natural. Mas claro, não há nada de errado em criar brinquedos interativos de computador.

Um quebra-cabeça não é um jogo
Este é mais difícil. É evidente que muitos jogos contêm elementos de quebra-cabeça. Mas um quebra-cabeça é estático, enquanto que um jogo é dinâmico e mudanças irão ocorrer enquanto jogá-lo. Um jogo pode ser jogado uma e outras vezes e há diferentes estratégias que levam ao sucesso.

Então, o que é um jogo? Aqui está uma definição possível:
Um jogo é uma atividade (vamos dizer assim) em que um ou mais jogadores tomam decisões através do controle de objetos do jogo e de recursos, em busca de um objetivo.
Note que a definição não fala sobre gráficos ou efeitos sonoros (no caso de jogos de computador). Tais aspectos, obviamente, desempenham um papel importante para torna-los jogos atraentes, mas não são os aspectos essenciais dos jogos. Vejamos os ingredientes diferentes da definição em alguns detalhes. Focando sempre nos jogos de video game e computador.

Um jogo de computador é um software
Esta situação torna bastante diferente de outros jogos . Por exemplo, jogos de tabuleiro ou esportes. Ela tira um pouco da diversão dos jogos. Não há peças para se movimentar e não há satisfação física (Embora o Nitendo Wii e o Kinect estão mostrando o contrário). Também os aspectos sociais são menos importantes, embora os MMOs criaram uma nova forma de interação social. Mas nós ficamos um pouco em troca. Um software pode se adaptar muito melhor aos jogadores. A maioria dos jogos de computador têm um elemento em tempo real que não está presente em jogos de tabuleiro. O jogo continua mesmo quando os jogadores não fazem nada. Isso pode levar a emoção maior e uma melhor sensação de presença no mundo do jogo. Jogos de computador também podem se adaptar aos jogadores tornando-o satisfatório para jogadores muito diferentes, tanto para iniciantes ou veterandos. A possibilidade de ter adversários controlados pelo computador adiciona muitos novos desafios. Os jogos de computador também podem ser mais complexos, porque o próprio jogo pode ajudar os jogadores a entender os diferentes aspectos e ensinar o jogador a jogar. Finalmente, os jogos de computador podem criar um ambiente mais envolvente, adicionando gráficos maravilhosos, músicas e cenas cortadas.

Um jogo de computador tem jogadores
Isto é bastante óbvio. Um jogo não é algo para assistir. Você deve estar envolvido em um jogo. Não subestime a importância do jogador. Game designers iniciantes geralmente se esquece que você faz não o jogo para si, mas para as pessoas que estão indo jogar. Assim, você sempre tem que pensar em quem eles são. Um jogo para crianças deve ser bastante diferente de um jogo para adultos. Você precisa escolher o público correto. Jogos ruins são frequentemente escritos para o público errado. Por exemplo, alguns simuladores tentam reproduzir todos os controles possivel, tornando o jogo mais realista. Mas para jogadores que só querem se divertir, isso se torna irritante.

Jogar um jogo é tomar decisões
O jogador toma decisões que influenciam no resto do jogo. Em jogos de ação geralmente tal decisão envolve em que direção ir e qual a arma de escolher. Em complicados jogos de estratégia as decisões envolvem construir seu reinado, quais unidades treinar, quando e onde atacar, etc. É claro que suas decisões devem ter algum efeito no jogo. Surpreendentemente, em muitos jogos o efeito das decisões é apenas ilusório. Por exemplo, em alguns jogos não vai importar a arma que você escolher. Isso muitas vezes leva à frustração. É importante que você saiba euilibrar todas as dicisões para o jogo se torne satisfatório.

Jogar um jogo é controlar
O jogador deve se sentir no controle do jogo. E não o contrário. Seqüências ininterruptas em que o controle é tirado das mãos do jogador, que ainda ocorre em muitos jogos, levam à frustração. Quanto mais liberdade existir para o jogador, o melhor será o jogabilidade. Há no entanto uma pegadinha aqui. Um jogo também tem surpresas e efeitos dramáticos. Tais efeitos podem ser criados muito melhor se o jogador não está no controle. Por exemplo, em um filme, quando o personagem principal se aproxima de uma porta e começa a tocar uma música. O espectador sabe que algo está para acontecer. Juntamente com zoom na porta, isso pode criar um grande efeito dramático. Mas se o mesmo acontecer em um jogo e no último instante, o jogador decide não abrir a porta, a maioria dos efeitos desaparece e até torna o momento sem noção. Saber até que ponto oferecer liberdade ao jogador é meio dificil, pois muita liberadade torna até o jogo mais díficil. Sempre que você precisar restringir o jogador, tente fazer isso de uma maneira natural. Por exemplo, usar uma cinematic, como fazemos no warcraft.

Objetos e recursos do jogo
Em alguns jogos o jogador controla várias unidades, contruções, veiculos, etc. Enquanto em outros o jogador controla apenas uma unidade, como jogos em primeira pessoa. Além dos objetos do jogo que o jogador controla, normalmente há muitos outros objetos que são controlados pelo computador. Porém os objetos do jogador desempenham um papel muito importante, não se esqueça. Além de controlar objetos o jogador muitas vezes tem que controlar recursos. Isso é comum em jogos de estrategia, quando o jogador tem que controalr comida, ouro, madeira. Mas também em muitos outros jogos que exista recursos para gerir, como munição para suas armas, um escudo que só pode ser usado por um tempo limitado, etc. Deve ser planejar muito bem os recursos do jogo, pois eles são um papel interessante na jogabilidade. E claro, o jogador deve balancear a disponibilidade dos recursos de acordo com a necessidade, tentando assim alcançar um nível de jogo interessante.
É importante lembrar que o jogador deve alcançar esses objetivo pelo esforço dele, pela pratica que adquiriu ao longo do jogo e não pela sorte.

Um jogo precisa de um objetivo
Este é um elemento crucial do jogo. As pessoas querem ganhar o jogo, portanto, deve haver um objetivo a cumprir. Para jogos longos, deve haver também uns sub-objetivos, como passar uma fase, adiquirir um item, etc. Quando o jogador antingir um objetivo ou sub-objetivo ele deve ganhar recompensas. As melhores recompensas são geralmente são objetos do jogo (como armas), novos poderes e até informações úteis.

Então, por que um jogo é bom?
    Você já sabe o que é um jogo, pelo menos um de computador. No entanto lá não fala quando um jogo é bom. Tudo citado acima são elementos que um jogo bom de ter, porém faltou dizer que a criatividade e a inovação são igualmente importantes.
    Como eu disse, este tutorial deve ter-lhe dado uma idéia das coisas que importam ao tentar criar um bom jogo de computador. Mas no final a melhor maneira de aprender é você fazer um jogo e criticar seus próprios resultados.
    Outro conselho é aprender com os erros de outras pessoas. Sempre que você planejar fazer um determinado tipo de jogo, olhe para os jogos similares. Tente jogá-los e ver o que eles fizeram certo e o que eles fizeram de errado. É muito comum ainda ver alguns jogos repitindo os erros de outros jogos.

Créditos ao Mark Overmars que escreveu o tutorial original (em inglês). E também ao gostoso do Bills por ter resumido, quase nada, e ter traduzido.

Leia Mais...

quarta-feira, 23 de março de 2011

Noticia: Parado

O blog ficará parado por tempo indeterminado.

Leia Mais...

terça-feira, 15 de fevereiro de 2011

News

Ae galera, vou mudar o blog para um outro lugar daqui uns tempos. Assim que tiver tempo vou mover meus posts pra la e apagar os daqui. Mas isso vai demorar um pouco.

^^

Leia Mais...

domingo, 13 de fevereiro de 2011

Add Life v1.1

Esse system é bem simples e util. Para você adicionar HP (hit points) a uma unidade ao ponto que ela fique com hp completo, você deve adicionar uma habilidade que almenta a quantidade de hp dela. Para não ter o trabalho de cria aquelas functions que adicionam e removem essa habilidade, eu fiz esse system.

O system só tem uma function principal:
function UnitAddLife takes unit whichUnit, real amount returns nothing
Essa function adiciona uma quantidade de hp (amount) a unidade desejada (whichUnit). Simples!

Script do Sistema:
library AddLife
// Add Life System
// Criado por "Bills"
// Versão: 1.2
//=====================================
// Como implementar:
// Crie uma nova trigger,
// converta ela para custom script,
// salve seu mapa,
// feche-o,
// reabra-o
// e apague o ! da linha abaixo.
//! external ObjectMerger w3a AIlz ALBA anam "Life Bonus" ansf "(Bills's AddLife System)" Ilif 1 500000 aite 0
//=====================================================================
//Caso ja tenha essa native declarada, "comenta" a linha abaixo
native UnitAlive takes unit whichUnit returns boolean

private struct AL extends array // struct array não possui method create/destroy
    private static constant integer LIFE_BONUS_ABIL = 'ALBA'
    private static unit array tempUnit
    private static integer index
    private static timer timerFunc
   
    private static method removeLifeBonus takes nothing returns nothing
        loop
            exitwhen (index==0)
            call UnitRemoveAbility(tempUnit[index],LIFE_BONUS_ABIL)
            if (UnitAlive(tempUnit[index])) then
                call SetWidgetLife(tempUnit[index],GetWidgetLife(tempUnit[index]))
            endif
            set index=index-1
        endloop
    endmethod
   
    static method unitAddLife takes unit u, real amount returns nothing
        set amount=GetWidgetLife(u)+amount
        call SetWidgetLife(u,amount)
        if (GetWidgetLife(u)<amount) then
            call UnitAddAbility(u,LIFE_BONUS_ABIL)
            call SetWidgetLife(u,amount)
            set index=index+1
            set tempUnit[index]=u
            call ResumeTimer(timerFunc)
        endif
    endmethod
   
    private static method onInit takes nothing returns nothing
        set index=0
        set timerFunc=CreateTimer()
        call TimerStart(timerFunc,0.00,false,function thistype.removeLifeBonus)
    endmethod
endstruct

 function UnitAddLife takes unit u, real amount returns nothing // por compatibilidade
    call AL.unitAddLife(u,amount)
 endfunction

endlibrary

Leia Mais...

quinta-feira, 3 de fevereiro de 2011

Fear v1.0

WTF is Fear?
O.O fear? fear signica medo, se eu não estiver errado. Fear é um status comum em alguns MMORPG (eu mesmo só conheço de WoW e zOMG). 
Quando uma unidade está "feared" ela irá correr para longe do daquele que amedrontou ela.

Como usar Fear em seu mapa
- Crie uma nova trigger chamada "Fear" e converta ela para Custom Script.
- Substitua todo texto na trigger pelo script desse system.
- Salve seu mapa e feche o editor.
- Reabra seu mapa e apague o ! na segunda linha do script. Pronto!

Funtions Principais do System
function UnitFearTarget takes unit source, unit target, real duration returns nothing
Esta function adiciona fear a um alvo a sua escolha.

function UnitRemoveFear takes unit whichUnit returns nothing
Esta function remove fear da unidade.

function IsUnitFeared takes unit whichUnit returns boolean
Esta function indica se a unidade está ou não "feared".

Como usar Fear com buffs
Fear System funciona sem buff, apenas contando a duração. Caso você prefira que o fear tenha buff ele irá durar até a duração escolhida ou até o alvo perder o buff. Se você quiser usar buff siga a instruções abaixo:

- Escolha um buff padrão para o fear. Feito isso, mude o valor da variable BUFF_CHECKER para o raw-code do buff escolhido. 

private constant integer BUFF_CHECKER = 'B000'
Agora mude o valor da variable USE_BUFF_CHECKER para true.
Pronto!

Obs: use dummy para adicionar o buff escolhido, pois caso você demore a adicionar aquele buff (não pode demorar mais que 0.2 segundos) a unidade acaba perdendo o fear, pois o trigger detecta que a unidade não estava com o buff.



Leia Mais...

quinta-feira, 27 de janeiro de 2011

Library and Scope

O que é library? E scope? 
Library e scope são como ( não sei explicar isso) metodos de você poder organizar suas functions. Quem ja fez Jass no world editor sem JNPG sabe como era um saco ter que declarar uma function antes de algumas outras. Era um pé no saco! Eu tive a sorte de ficar apenas alguns dias sem conhecer o JNPG^^
Só pro pessoal menos culto entender, pra vc usar uma function A em uma function B, você precisa declarar a function A antes da function B. Caso contrario dá erro.

Qual a diferença de library e scope?
Quando você declara suas functions dentro de uma library elas sempre serão declaradas no inicio do bloco de functions. E quando você declara functions dentro de uma scope, essas são declaradas lá no final do bloco. Só pra constar, library são sempre usadas para system, pois você precisará usar as functions dele no resto dos triggers. E scope são mais usados para fazer Spells, pois você geralmente irá usar function de outros lugares (systems, por exemplo) nela.

Como eu crio uma library ou uma scope?
Pra criar uma library você digita library NOMEDALIBRARY antes de todas as functions que você queira que esteja dentro dela e quando você terminar você escreva enlibrary para fechar a library. Veja o exemplo:


library MinhaLibrary
    function A takes nothing returns nothing
    endfunction
endlibrary

E para criar uma scope é bem parecido, mas no lugar de library você escreve scope.



scope MeuScope
    function B takes nothing returns nothing
        call A()
    endfunction
endscope

Como eu sei que minha library A vai ser declarada antes da library B?
vamos imaginar que você queira usar algumas function da library A na sua library B. Você sabe que as libraries são declaradas la no inicio do bloco, mas não faz idéia de como declarar a libary A antes da B. É como se a library B dependesse da library A, certo? Então você deve usar requires e o nome da library que será a dependencia. Veja o exemplo:

library A
endlibrary

library B requires A
endlibrary

Assim elas vão ser organizadas de forma que a library seja declarada antes da B, para que a B possa usar a A. Nunca faz isso que vou mostrar:

library A requires B
endlibrary

library B requires A
endlibrary

Caso você faça algo parecido, criará um loop infinito, pois a library A precisa da B e a B da A. Na época o laiev me deu uma resposta mais legal, mas lembro mais =P

Obs: Você não pode usar o requires em uma scope, apenas em library.
Outra Obs: No lugar de requires você pode usar needs ou uses, caso prefira.

Você também pode usar a palavra initializer. Ela faz com que uma function da sua library/scope seja executada (chamada) no inicialização do jogo. Apenas digite initializer e o nome da function depois do nome da library/scope e antes dos requires (no caso de ser uma library). Veja o exemplo:

library A initializer init
    function init takes nothing returns nothing
    endlibrary
endlibrary

Obs: A function que você escolher não deve ter nenhum parametro, tanto de takes quanto returns.

Private e Public Functions
Eu ia finalizar meu tuto sem falar disso, mas vou falar sobre private e public function. Isso é importante explicar. ^^

quando você escreve uma function com private antes, quer dizer que você só poderá executa-la dentro da library e ela também só valerá lá, ou seja, você poderá criar functions com nomes iguais desde que elas sejam privates. Function public são aqueles que devem ser chamadas com um prefixo igual ao nome da library. Por exemplo:


library TEST
    public function A takes nothing returns nothing
    endfunction
endlibrary

function B takes nothing returns nothing
    call TEST_A()
endfucntion

Obs: Você pode usar o private em variables também. Assim, essas variables poderão ser usadas apenas dentro da library/scope.

Bom, espero que eu não tenha cagado nesse tutorial também. Caso gostou, não gostou ou acha que falta algo... posta ae!
Flws...


Creditos à mim e ao laiev, que me ensino essa budega um dia. XD 


Leia Mais...

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

Leia Mais...