Ir para conteúdo
  • 0
Entre para seguir isso  
Pepeco

Programação Onde usar OnSelectTarget

Pergunta

Pepeco    4
Pepeco

Base: TFS 1.2, Versão 8.6

Qual a sua pergunta? Queria saber onde usar o OnSelectTarget e sua tag, se é em events, creaturescript... Peguei esse script de outro forum, então estarei disponibilizando o código dele aqui.

 

Spoiler

Este código torna possível incluir algum script quando o monstro escolhe um alvo.

Testado em TFS 1.2

monster.cpp

ache:

bool Monster::selectTarget(Creature* creature)

 

substitua:

Spoiler


bool Monster::selectTarget(Creature* creature)
{
    if (!isTarget(creature)) {
        return false;
    }

    auto it = std::find(targetList.begin(), targetList.end(), creature);
    if (it == targetList.end()) {
        //Target not found in our target list.
        return false;
    }

    if (isHostile() || isSummon()) {
        if (executeOnSelectTarget(creature) == 1){
            if (setAttackedCreature(creature) && !isSummon()) {
                    g_dispatcher.addTask(createTask(std::bind(&Game::checkCreatureAttack, &g_game, getID())));
            }
        }
        else
            return false;
    }
    return setFollowCreature(creature);
}

bool Monster::executeOnSelectTarget(Creature* creature){
   
    // onSelectTarget(self, target)
    if (mType->targetEvent != -1) {
        LuaScriptInterface* scriptInterface = mType->scriptInterface;
   
        if (!scriptInterface->reserveScriptEnv()) {
            std::cout << "[Error - Monster::onSelectTarget] Call stack overflow" << std::endl;
            return true;
        }

        ScriptEnvironment* env = scriptInterface->getScriptEnv();
        env->setScriptId(mType->targetEvent, scriptInterface);

        lua_State* L = scriptInterface->getLuaState();
        scriptInterface->pushFunction(mType->targetEvent);

        LuaScriptInterface::pushUserdata<Monster>(L, this);
        LuaScriptInterface::setMetatable(L, -1, "Monster");

        LuaScriptInterface::pushUserdata(L, creature);
        LuaScriptInterface::setCreatureMetatable(L, -1, creature);

        return (scriptInterface->callFunction(2));
    }
    return true;
}

 

monster.h

ache:

bool selectTarget(Creature* creature);

 

inclua:

bool executeOnSelectTarget(Creature* creature);

monsters.cpp:

ache:

Spoiler


    scriptInterface = nullptr;
    creatureAppearEvent = -1;
    creatureDisappearEvent = -1;
    creatureMoveEvent = -1;
    creatureSayEvent = -1;
    thinkEvent = -1;

 

inclua:

targetEvent = -1;

ache:

mType->thinkEvent = scriptInterface->getEvent("onThink");

inclua:

mType->targetEvent = scriptInterface->getEvent("onSelectTarget");

Creditos: MarceLoko

Editado por Pepeco

Compartilhar este post


Link para o post
Compartilhar em outros sites

4 respostass a esta questão

Recommended Posts

  • 0
Majesty    1755
Majesty

Events.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
Pepeco    4
Pepeco

Deu erro :/

unknown.png

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
GryLLo    19
GryLLo

Você está alterando o fonte do OT, ou seja, seu C++
Para que as coisas funcionem ao fazer esse tipo de alteração você precisa recompilar o servidor, você fez isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
Pepeco    4
Pepeco

sim, recompilei ele e deu tudo certinho :/

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×