PO

[Creaturescripts]Function onSpawn(cid)

Por PostadorHunter, 25 de fev. de 2013 em Linguagens de Programação

script
14
2.6k
25 de fevereiro de 2013 às 15:32

Créditos: Doggynub(Otland)

Testado em tfs 0.4


creatureEvent.h:

 

procure por:

uint32_t executePrepareDeath(Creature* creature, DeathList deathList);

 

em baixo coloque:

uint32_t executeOnSpawn(Creature* creature);

 

procure por:

CREATURE_EVENT_DEATH,

 

substitua a linha debaixo por:

CREATURE_EVENT_PREPAREDEATH,
CREATURE_EVENT_SPAWN


creatureevent.cpp

 

procure por:

else if(tmpStr == "preparedeath")
m_type = CREATURE_EVENT_PREPAREDEATH;

 

em baixo coloque:

else if(tmpStr == "spawn")
m_type = CREATURE_EVENT_SPAWN;

 

procure por:

case CREATURE_EVENT_PREPAREDEATH:
return "onPrepareDeath";

 

em baixo coloque

case CREATURE_EVENT_SPAWN:
return "onSpawn";

 

procure por:

case CREATURE_EVENT_PREPAREDEATH:
return "cid, deathList";

 

embaixo coloque:

case CREATURE_EVENT_SPAWN:
return "onSpawn";

 

procure por:

case CREATURE_EVENT_PREPAREDEATH:
 return "cid, deathList";

 

embaixo coloque:

case CREATURE_EVENT_SPAWN:
return "cid";

 

Va até o final do arquivo e coloque

uint32_t CreatureEvent::executeOnSpawn(Creature* creature)
{

//onSpawn(cid)
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;



if(m_scriptData)
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__
std::stringstream desc;
desc << creature->getName();
env->setEvent(desc.str());
#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));


bool result = m_interface->callFunction(1);
m_interface->releaseEnv();
return result;
}
}
else
{
std::clog << "[Error - CreatureEvent::executeCast] Call stack overflow." << std::endl;
return 0;
}
}


monster.cpp

 

procure por:

void Monster::onCreatureAppear(const Creature* creature)
{
Creature::onCreatureAppear(creature);
if(creature == this)
{
//We just spawned lets look around to see who is there.
if(isSummon())
isMasterInRange = canSee(master->getPosition());

 

embaixo de uns 2 Enters e coloque:

CreatureEventList spawn = getCreatureEvents(CREATURE_EVENT_SPAWN);
for(CreatureEventList::iterator it = spawn.begin(); it != spawn.end(); ++it)
(*it)->executeOnSpawn(this);


Editado Maio 1 por PostadorHunter

Daniel BighouseD
25 de fevereiro de 2013 às 15:35

Pode explicar oq isso faz?

25 de fevereiro de 2013 às 15:48

é um creature event que executa quando o monstro da respawn

Daniel BighouseD
25 de fevereiro de 2013 às 16:01

é um creature event que executa quando o monstro da respawn

Isso eu sei mais quero saber oq faz ele?

Tipo monstro da mais exp, fica mais forte, o tempo fica mais rapido do spawn, sei lá....

25 de fevereiro de 2013 às 16:06

é um creature event que executa quando o monstro da respawn

Isso eu sei mais quero saber oq faz ele?

Tipo monstro da mais exp, fica mais forte, o tempo fica mais rapido do spawn, sei lá....

depende do seu script

aqui um exemplo do criador do código

function onSpawn(cid)
doBroadcastMessage("Monster ".. getCreatureName(cid).." was created.")
return true
end

Daniel BighouseD
25 de fevereiro de 2013 às 16:24

Hum tipo o sistema de raspawn de shiny aleatório de poketibia?

25 de fevereiro de 2013 às 16:26

sim

Daniel BighouseD
25 de fevereiro de 2013 às 16:28

sim

 

Legal gostei REP+

BananaFightB
25 de fevereiro de 2013 às 16:38

Muito bom o conteúdo usuário reputado.

CaronteC
25 de fevereiro de 2013 às 18:21

é uma função que faz o script executar quando ouver um spawn.

 

Exemplo :

function onCastSpell.

function onUse.

function onSay.

Todo script precisa de uma para ser executado.

SnowszS
01 de março de 2013 às 18:19

Bem isso dava pra ter sido feito em lua, mas parabens gostei ^^.

01 de março de 2013 às 19:04

Bem isso dava pra ter sido feito em lua, mas parabens gostei ^^.

não dava não
Daniel BighouseD
01 de março de 2013 às 19:09

Bem isso dava pra ter sido feito em lua, mas parabens gostei ^^.

não dava não

 

Olha não quero discordar mais fiz o evento Spawn funcionar tranquilamente em LUA '-'

2 meses depois...
BananaFightB
01 de maio de 2013 às 05:09

Acabei de perceber quando tava tentando instalar esse código nas minhas source que ele tem um erro, Vá aonde você pegou ele e confira o tutorial de instalação.