Ir para conteúdo
  • 0

ajuda c++ code


Foxkbt

Pergunta

bom galera xtibiana

venho aqui pedir ajuda de quem tiver conhecimento na area

para conserta uma função de creatureScripts q com certeza é muito cobiçada pela galera

q é a função onMove

ela funciona perfeitamente, porem faz com q todas as outras funções creatureScripts parem de funcionar!

=(

 

segue abaixo o tutorial de como adicionalas

 

creatureevent.h:

 

depois de:

[color=#333333][size=3]CREATURE_EVENT_DIRECTION[/size][/color][color=#66CC66][size=3],[/size][/color]

 

 

coloque:

[color=#333333][size=3]CREATURE_EVENT_MOVE[/size][/color][color=#66CC66][size=3],[/size][/color]

 

depois de

uint32_t executeDirection(Creature* creature, Direction old, Direction current);

 

coloque:

uint32_t executeMove(Creature* creature, const Position& fromPosition, const Position& toPosition);

 

creatureevent.cpp:

 

depois de:

else if(tmpStr == "direction")
 m_type = CREATURE_EVENT_DIRECTION;

 

coloque:

else if(tmpStr == "move")
 m_type = CREATURE_EVENT_MOVE;

 

depois de:

case CREATURE_EVENT_DIRECTION:
  return "onDirection";

 

coloque:

case CREATURE_EVENT_MOVE:
  return "onMove";

 

depois de:

case CREATURE_EVENT_OUTFIT:
  return "cid, old, current";

 

coloque:

case CREATURE_EVENT_MOVE:
  return "cid, fromPosition, toPosition";

 

e agora no final desse função (ou seja depois do "}" )

uint32_t CreatureEvent::executeDirection(Creature* creature, Direction old, Direction current)

 

coloque esta:

uint32_t CreatureEvent::executeMove(Creature* creature, const Position& fromPosition, const Position& toPosition)
{
//onMove(cid, old, current)
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;

					env->streamPosition(scriptstream, "fromPosition", fromPosition, 0);
					env->streamPosition(scriptstream, "toPosition", toPosition, 0);

  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[30];
  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));
  LuaScriptInterface::pushPosition(L, fromPosition);
  LuaScriptInterface::pushPosition(L, toPosition);

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

 

game.cpp:

depois de:

else if(currentPos.z != 7 && (!(tmpTile = map->getTile(destPos)) || (!tmpTile->ground &&
  !tmpTile->hasProperty(BLOCKSOLID))) && (tmpTile = map->getTile(Position(
  destPos.x, destPos.y, destPos.z + 1))) && tmpTile->hasHeight(3)) //try go down
 {
  flags = flags | FLAG_IGNOREBLOCKITEM | FLAG_IGNOREBLOCKCREATURE;
  destPos.z++;
 }
}

 

coloque:

bool deny = false;
CreatureEventList moveEvents = creature->getCreatureEvents(CREATURE_EVENT_MOVE);
for(CreatureEventList::iterator it = moveEvents.begin(); it != moveEvents.end(); ++it)
 if(!(*it)->executeMove(creature, currentPos, destPos))
 deny = true;

if(deny)
 return RET_NOTPOSSIBLE;

 

 

PS:se tiver uma boa alma que me explique como funciona cada parte dessa função vai me fazer progredir bastante c++

e vou ser muito grato!

^^

Link para o comentário
https://xtibia.com/forum/topic/212808-ajuda-c-code/
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...