//Se nao existe esse Waypoint e nao e o primeiro, //entao procurar o primeiro Waypoint if (oLocal == OBJECT_INVALID && iAtual != 1) { iAtual = 1; sLocal = "WP_" + GetTag(OBJECT_SELF) + "_0" + IntToString(iAtual); SendMessageToPC(GetFirstPC(), sLocal); oLocal = GetWaypointByTag(sLocal); } //Se o local procurado e valido entao... if (oLocal != OBJECT_INVALID) { SendMessageToPC(GetFirstPC(), "oLocal != OBJECT_INVALID"); //Carregar o Waypoint location lLocal = GetLocation(oLocal); //Parar o que esta fazendo ClearAllActions(); //Ir ate o Waypoint //ActionMoveToLocation(lLocal); ActionMoveToObject(oLocal); //Mover-se aleatoriamente proximo ao Waypoint ActionRandomWalk(); //Atualizar a posicao atual SetLocalInt(OBJECT_SELF, "CurrWP", iAtual); } //Senao, andar aleatoriamente no local else { SendMessageToPC(GetFirstPC(), "oLocal == OBJECT_INVALID"); ActionRandomWalk(); } } SetLocalInt(OBJECT_SELF, "iWalking", 1); } }Claro que o que eu realmente criei esta comentado em portugues. Mas enfim, eu criei um contador no OnHeartBeat do modulo, para definir quando o codigo no OnHeartBeat da criatura sera executado, no codigo acima, a cada 20 HeartBeat do modulo, eu executo o codigo no OnHeartBeat da criatura e com isso nao fico fazendo os mesmos comandos a cada 6 segundos. Eu tambem criei duas variaveis na criatura, uma para armazenar em qual WayPoint ela esta (CurrWP) e outra para indicar que a criatura ja esta em movimento (iWalking). A CurrWP grava o numero do WayPoint em que a criatura esta no momento, quando a criatura e criada, ela comeca com valor 1 e eu entao crio a tag "WP_Tag_01" e vou modificando apenas esse numero final para indicar pra onde a criatura esta indo. Quando nao eu nao mais encontrar uma tag na sequencia (Digamos que tenha criado 5 WayPoints e o programa procure o WP_tag_06) ele volta para o 1.Como esse evento apenas ocorre a cada 20 HeartBeat do modulo, a criatura ficava estatica logo depois do seu respawn, eu criei entao a variavel iWalking que comeca com valor 0 e assim, mesmo que nao tenha passado os 20 HeartBeat, se a criatura ainda nao esta andando, o script executa os comandos e muda o valor de iWalking para 1, indicando que a criatura agora esta andando normalmente pelo mapa. Porem, quando ele anda para outro WayPoint e executa o comando ActionRandomWalk, a criatura volta para o primeiro WayPoint e so entao comeca a andar aleatoriamente. Estranho... Mas pelo menos nao ficou como uma estatua como antes. Depois vou tentar descobrir como resolver isso.E pra finalizar esse post, esta o script do OnHeartBeat do modulo:// sh_m_heartbeat/* Script para o evento OnHeartBeat do modulo. *///::////////////////////////////////////////////////////:: Copyright (c) 2008 SubHeaven World//:: Created By: SubHeaven//:: Created On: 06/28/2008//:://////////////////////////////////////////////////void main(){ //Inclementar o contador de heartbeat. Esse contador serve para evitar //que rotinas ligadas ao evento heartbeat de outros objetos sejam executadas //a cada 6 segundos. int iModuleCont = GetLocalInt(GetModule(), "i_hbCounter"); if (iModuleCont == 100) iModuleCont = 1; else iModuleCont = iModuleCont + 1; SetLocalInt(GetModule(), "i_hbCounter", iModuleCont); //SendMessageToPC(GetFirstPC(), "HeartBeat " + IntToString(iModuleCont));}