Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Boa noite!

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:

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:

    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");

 

 

Em breve:

Player onSelectTarget

Editado por Marcelo Druida (veja o histórico de edições)

  • Respostas 6
  • Visualizações 2.4k
  • Created
  • Última resposta

Top Posters In This Topic

Postado

Em nome da comunidade do TK, muito obrigado pela contribuição! :wow:
Seu tópico de conteúdo foi aprovado e será movido para a seção adequada. Você ganhou 1 REP+!

 

 

Bem legal marcelo, eu talvez use.

Se quiser sua dúvida tirada, mande PM com os links, e não com a dúvida (outros podem ter a mesma dúvida, e o fórum serve para ser usado).

 

Tópicos:


Mostrar conteúdo oculto

 

yNlhRVC.png

 

55px-Judo_yellow_belt.svg.png

Postado
  • Autor

Testado em TFS 1.2

 

Pequeno exemplo de utilização:

function onSelectTarget(self, target)
	
        -- monstros da race VENOM não atacam jogadores abaixo do level 100
	if self:getRace() == RACE_VENOM and target:getLevel() >= 100 then
		return true
	end
	return false
end

Dica: você pode utilizar o método :getTargetList() para saber quem mais é um alvo possível do monstro.

Editado por Marcelo Druida (veja o histórico de edições)

Postado

O tópico foi movido para a área correta, preste mais atenção da próxima vez!
Leia as regras do fórum: http://tibiaking.com/forum/topic/1281-regras-gerais/?p=7680

Este tópico foi movido:
De: "OTServScriptingBibliotecas e Funções"
Para: "OTServProgramação Open TibiaCódigos Prontos"

                              _
                          .-'` `}
                  _./)   /       }
                .'o   \ |       }
                '.___.'`.\    {`
                /`\_/  , `.    }                                      ME DA UMA NOZ!
                \=' .-'   _`\  {
                 `'`;/      `,  }
                    _\   @   ;  }
                   /__`;-...'--'

Cluck!

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo