Muito bom em o/ posta mais funções XD
- Fórum
- OTServ
- Recursos
- Linguagens de Programação
- onSetOpponnent(cid, monster)
onSetOpponnent(cid, monster)
Por caotic, 17 de abr. de 2014 em Linguagens de Programação
info
Grupo: Banidos
Registrado: 08/01/13
Posts: 105
Reputação: +19
Char no Tibia: LordParaibano

onTarget?
info
Grupo: Príncipe
Registrado: 19/08/10
Posts: 4k
Reputação: +1.1k
Gênero: Masculino

e n faltou dizer aonde ela vai ser chamada nas sources? ![]()
Otima função ![]()
info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have

Na verdade onSetOpoonent acontence antes do player ir para o targerlist.onTarget?
...
falto sim xD
bem..
ja foi colocado
Editado Abril 17 por caotic
Na verdade onSetOpoonent acontence antes do player ir para o targerlist.
...
falto sim xD
bem..
ja foi colocado
Então ela só pode ser utilizada por monstros, afinal eles que possuem targetlist e friendlist, correto?
Editado Abril 17 por Garou
info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have

simEntão ela só pode ser utilizada por monstros, afinal eles que possuem targetlist e friendlist, correto?
Editado Abril 17 por caotic







info
Grupo: Infante
Registrado: 04/03/11
Posts: 1.6k
Reputação: +393
Char no Tibia: No Have
Ola galera xtibanaana.
O creatureevent onsetopponent acontence quando uma criatura seta outra como opponent para ir prosseguir como target.
Vá em creatureevent.cpp e procure:
Adicione embaixo:
Procure:
Coloque embaixo:
Continuado procure:
Coloque abaixo:
Adicione a função:
uint32_t CreatureEvent::executeSetOpponent(Creature* creature, Creature* target) { //onSetOpponent(cid, monster) 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; scriptstream << "local target = " << env->addThing(target) << std::endl; 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[35]; 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)); lua_pushnumber(L, env->addThing(target)); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executePrepareDeath] Call stack overflow." << std::endl; return 0; } }Vá em creatureevent.h e procure:
Adicione embaixo:
Procure:
Coloque embaixo:
Vá em monster.cpp e procure a função:
Substitua por essa:
bool Monster::isOpponent(const Creature* creature) { bool opponent = true; CreatureEventList attackEvents = getCreatureEvents(CREATURE_EVENT_OPPONENT); Creature* target = g_game.getCreatureByID(creature->getID()); for(CreatureEventList::iterator it = attackEvents.begin(); it != attackEvents.end(); ++it) { if(!(*it)->executeSetOpponent(target, this)) opponent = false; } if (!opponent) { return false; } return (isSummon() && getMaster()->getPlayer() && creature != getMaster()) || ((creature->getPlayer() && !creature->getPlayer()->hasFlag(PlayerFlag_IgnoredByMonsters)) || (creature->getMaster() && creature->getMaster()->getPlayer())); }Exemplo:
function onSetOpponent(cid, target) local blockedpass = {"Fire Devil", "Demon", "Lord Dragon"} if table.find(blockedpass, getCreatureName(target)) then return true end return true endEditado Abril 17 por caotic