Jump to content
×
×
  • Create New...

[TFS 0.3.6] [CreatureEvent] function onMove(cid, fromPosition, toPosition)


Recommended Posts

Olá eu venho trazer ao Xtibia á função OnMove, bom sem mais delongas vamos ao código.

 

Vá em creatureevent.h e procure por:

CREATURE_EVENT_DIRECTION ,

Embaixo do texto acima cole:

CREATURE_EVENT_MOVE ,

Depois procure por:

uint32_t executeDirection(Creature* creature, Direction old, Direction current);

Embaixo do texto acima cole:

 uint32_t executeMove(Creature* creature, const Position& fromPosition, const Position& toPosition);

Vá em creatureevent.cpp e procure por:

else if(tmpStr == "direction")        m_type = CREATURE_EVENT_DIRECTION;

Embaixo do texto acima cole:

else if(tmpStr == "move")        m_type = CREATURE_EVENT_MOVE;

Depois procure por:

case CREATURE_EVENT_DIRECTION:            return "onDirection";

Embaixo do texto acima cole:

case CREATURE_EVENT_MOVE:            return "onMove";

Depois procure por:

case CREATURE_EVENT_OUTFIT:            return "cid, old, current";

Embaixo do texto acima cole:

case CREATURE_EVENT_MOVE:            return "cid, fromPosition, toPosition";

Agora encima da função:

uint32_t CreatureEvent::executeDirection(Creature* creature, Direction old, Direction current)

Coloque:

uint32_t CreatureEvent::executeMove(Creature* creature, const Position& fromPosition, const Position& toPosition){    //onMove(cid, old, current)    if(m_interface->reserveEnv())    {        ScriptEnviroment* env = m_interface->getEnv();        if(m_scripted == EVENT_SCRIPT_BUFFER)        {            env->setRealPos(creature->getPosition());            std::stringstream scriptstream;            scriptstream << "local cid = " << env->addThing(creature) << std::endl;                         env->streamPosition(scriptstream, "fromPosition", fromPosition, 0);                        env->streamPosition(scriptstream, "toPosition", toPosition, 0);             scriptstream << m_scriptData;            bool result = true;            if(m_interface->loadBuffer(scriptstream.str()))            {                lua_State* L = m_interface->getState();                result = m_interface->getGlobalBool(L, "_result", true);            }             m_interface->releaseEnv();            return result;        }        else        {            #ifdef __DEBUG_LUASCRIPTS__            char desc[30];            sprintf(desc, "%s", creature->getName().c_str());            env->setEventDesc(desc);            #endif             env->setScriptId(m_scriptId, m_interface);            env->setRealPos(creature->getPosition());             lua_State* L = m_interface->getState();            m_interface->pushFunction(m_scriptId);             lua_pushnumber(L, env->addThing(creature));            LuaScriptInterface::pushPosition(L, fromPosition);            LuaScriptInterface::pushPosition(L, toPosition);             bool result = m_interface->callFunction(3);            m_interface->releaseEnv();            return result;        }    }    else    {        std::cout << "[Error - CreatureEvent::executeMove] Call stack overflow." << std::endl;        return 0;    }}

Agora em game.cpp procure por:

else if(currentPos.z != 7 && (!(tmpTile = map->getTile(destPos)) || (!tmpTile->ground &&            !tmpTile->hasProperty(BLOCKSOLID))) && (tmpTile = map->getTile(Position(            destPos.x, destPos.y, destPos.z + 1))) && tmpTile->hasHeight(3)) //try go down        {            flags = flags | FLAG_IGNOREBLOCKITEM | FLAG_IGNOREBLOCKCREATURE;            destPos.z++;        }    }

Embaixo do ultimo " } " cole isso:

bool deny = false;    CreatureEventList moveEvents = creature->getCreatureEvents(CREATURE_EVENT_MOVE);    for(CreatureEventList::iterator it = moveEvents.begin(); it != moveEvents.end(); ++it)        if(!(*it)->executeMove(creature, currentPos, destPos))        deny = true;     if(deny)        return RET_NOTPOSSIBLE;

 

Pronto, Basta compilar e utilizar.

 

Créditos

Darkhaos (Por postar em outro fórum)Error404 (Por trazer ao Xtibia)

 

Link to post
Share on other sites
Agora, Deadpool disse:

Amigo, você é bem antigo no fórum, nos dois sabemos que este e o outro código que você postou já existem aqui, então por favor.. Rep não dá fama.

Sem zueira não encontrei o código aqui poderia passar o link? e não entendi o porque de negativar meu rep...

Link to post
Share on other sites
1 minuto atrás, Deadpool disse:

Só olhar o perfil do Oneshot.

Vou dar uma olhada... eu volto aqui pra editar falando pra excluir o tópico ou não.

 

EDIT - Não achei se tiver como acha e me envia os dois, grato.

Edited by Error404
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now