Postado Julho 25, 2015 9 anos 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.hache: 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 Julho 26, 2015 9 anos por Marcelo Druida (veja o histórico de edições)
Postado Julho 25, 2015 9 anos Em nome da comunidade do TK, muito obrigado pela contribuição! 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 [FAQ] BBCODE [LIB] Constant [RME] Administrando bordas. [TALK] Broadcast Editável. [TALK] Sugest. [TALK] Checkpoint. [MOVE] Pântano pegajoso. [ACTION] Piggy Bank. (Cassino). [GLOBAL] Uptime Ad. [C0DE] Consertando 'Invalid Password' [PROGRAM] Quest Maker
Postado Julho 26, 2015 9 anos 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 Julho 26, 2015 9 anos por Marcelo Druida (veja o histórico de edições)
Postado Julho 26, 2015 9 anos 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: "OTServ → Scripting → Bibliotecas e Funções"Para: "OTServ → Programação Open Tibia → Có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.