Ir para conteúdo

Posts Recomendados

Vi em um fórum uma função chamada onAdvance feita pelo 4220niller, mas eu não gostei nada do código, então resolvi fazer por eu mesmo.

 

Não cheguei a testar o código, mas tenho quase certeza de que irá funcionar.

 

creatureevent.cpp

 

Depois de:

 

m_logoutEvent = NULL;

 

Adicione:

 

m_advanceEvent = NULL;

 

Depois de:

 

delete m_logoutEvent;

 

Adicione:

 

delete m_advanceEvent;

 

Depois de:

 

m_logoutEvent->clearEvent();

 

Adicione:

 

m_advanceEvent->clearEvent();

 

Depois de::

 

case CREATURE_EVENT_LOGOUT:
delete m_logoutEvent;
m_logoutEvent = creatureEvent;
return true;

 

Adicione:

 

case CREATURE_EVENT_ADVANCE:
delete m_advanceEvent;
m_advanceEvent = creatureEvent;
return true;

 

Depois de:

 

uint32_t CreatureEvents::playerLogout(Player* player)
{
if(m_logoutEvent)
	return m_logoutEvent->executeOnLogout(player);
else
	return 0;
}

 

Adicione:

 

uint32_t CreatureEvents::playerAdvance(Player* player)
{
if(m_advanceEvent)
	return m_advanceEvent->executeOnAdvance(player);
else
	return 0;
}

 

Depois de:

 

else if(str == "logout")
m_type = CREATURE_EVENT_LOGOUT;

 

Adicione:

 

else if(str == "advance")
m_type = CREATURE_EVENT_ADVANCE;

 

Depois de:

 

case CREATURE_EVENT_LOGOUT:
return "onLogout";

 

Adicione:

 

case CREATURE_EVENT_ADVANCE:
return "onAdvance";

 

No final do arquivo, Adicione:

 

uint32_t CreatureEvent::executeOnAdvance(Player* player)
{
//onAdvance(cid)
if(m_scriptInterface->reserveScriptEnv())
{
	ScriptEnviroment* env = m_scriptInterface->getScriptEnv();

	#ifdef __DEBUG_LUASCRIPTS__
		char desc[30];
		sprintf(desc, "%s", player->getName().c_str());
		env->setEventDesc(desc);
	#endif

	env->setScriptId(m_scriptId, m_scriptInterface);
	env->setRealPos(player->getPosition());

	uint32_t cid = env->addThing(player);

	lua_State* L = m_scriptInterface->getLuaState();

	m_scriptInterface->pushFunction(m_scriptId);
	lua_pushnumber(L, cid);

	int32_t result = m_scriptInterface->callFunction(1);
	m_scriptInterface->releaseScriptEnv();

	return (result == LUA_TRUE);
}
else
{
	std::cout << "[Error] Call stack overflow. CreatureEvent::executeOnAdvance" << std::endl;
	return 0;
}
}

 

creatureevent.h

 

Depois de::

 

CREATURE_EVENT_LOGOUT,

 

Adicione:

 

CREATURE_EVENT_ADVANCE

 

Depois de:

 

uint32_t playerLogout(Player* player);

 

Adicione:

 

uint32_t playerAdvance(Player* player);

 

Depois de::

 

CreatureEvent* m_logoutEvent;

 

Adicione:

 

CreatureEvent* m_advanceEvent;

 

Depois de::

 

uint32_t executeOnLogout(Player* player);

Adicione:

 

uint32_t executeOnAdvance(Player* player);

 

player.cpp

 

Depois de:

 

levelMsg << "You advanced from Level " << prevLevel << " to Level " << newLevel << ".";
sendTextMessage(MSG_EVENT_ADVANCE, levelMsg.str());

 

Adicione:

 

//scripting event - onAdvance
g_creatureEvents->playerAdvance(this);

 

Depois de:

 

advMsg << "You advanced in " << g_game.getSkillName(skill) << ".";
client->sendTextMessage(MSG_EVENT_ADVANCE, advMsg.str());
client->sendSkills();

 

Adicione:

 

//scripting event - onAdvance
g_creatureEvents->playerAdvance(this);

 

Depois de:

 

MaglvMsg << "You advanced to magic level " << magLevel << ".";
sendTextMessage(MSG_EVENT_ADVANCE, MaglvMsg.str());
sendStats();

 

Adicione:

 

//scripting event - onAdvance
g_creatureEvents->playerAdvance(this);

Editado por Nostradamus
Link para o comentário
https://xtibia.com/forum/topic/65626-onadvance/
Compartilhar em outros sites

Parece ter dado um trabalhinho ^^

Eu não entendi direito pra que serve, mas já que é um trabalho seu deve ter ficado bom xP

(B.O plz o.O)

 

-------editad------------

 

Agora entendi!

Ficou legal, parabens ;*

 

Abraços.

Editado por Magodasabedoria
Link para o comentário
https://xtibia.com/forum/topic/65626-onadvance/#findComment-402544
Compartilhar em outros sites

  • 2 weeks later...

Nostradamus (:

olá (:

 

ótimo trabalho... tem uma coisinha que pode dar dor de cabeça para alguns... Nem é erro, só pra consertar a msg o/

 

em

uint32_t CreatureEvent::executeOnAdvance(Player* player)

else

{

std::cout << "[Error] Call stack overflow. CreatureEvent::executeOnLogout" << std::endl;

return 0;

}

o/

 

Te vejo por aí (:

Link para o comentário
https://xtibia.com/forum/topic/65626-onadvance/#findComment-409261
Compartilhar em outros sites

  • 1 month later...
  • 11 months later...
×
×
  • Criar Novo...