Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.66 KB | None | 0 0
  1. uint32_t CreatureEvent::executeOnMove(Player* player, Item* item, const Position& fromPosition, const Position& toPosition,
  2.     Item* fromItem, Item* toItem, std::vector<int> status)
  3. {
  4.     //onMoveItem(cid, item, formPosition, toPosition, fromItem, toItem, status)
  5.     if(m_interface->reserveEnv())
  6.     {
  7.         ScriptEnviroment* env = m_interface->getEnv();
  8.         if(m_scripted == EVENT_SCRIPT_BUFFER)
  9.         {
  10.             env->setRealPos(player->getPosition());
  11.             std::stringstream scriptstream;
  12.             scriptstream << "local cid = " << env->addThing(player) << std::endl;
  13.  
  14.             env->streamThing(scriptstream, "item" item, env->addThing(item));
  15.             env->streamPosition(scriptstream, "fromPosition", fromPosition);
  16.             env->streamPosition(scriptstream, "toPosition", toPosition);
  17.             env->streamThing(scriptstream, "fromItem", fromItem, env->addThing(fromItem));
  18.             env->streamThing(scriptstream, "toItem", toItem, env->addThing(toItem));
  19.  
  20.             scriptstream << "local status = { equip = 0, hold = 0, slot = 0, depot = 0} " << std::endl;
  21.  
  22.             scriptstream << "status.equip = " << status[0] << std::endl;
  23.             scriptstream << "status.hold = " << status[1] << std::endl;
  24.             scriptstream << "status.slot = " << status[2] << std::endl;
  25.             scriptstream << "status.depot = " << status[3] << std::endl;
  26.  
  27.             if(m_scriptData)
  28.                 scriptstream << *m_scriptData;
  29.  
  30.             bool result = true;
  31.             if(m_interface->loadBuffer(scriptstream.str()))
  32.             {
  33.                 lua_State* L = m_interface->getState();
  34.                 result = m_interface->getGlobalBool(L, "_result", true);
  35.             }
  36.  
  37.             m_interface->releaseEnv();
  38.             return result;
  39.         }
  40.         else
  41.         {
  42.             #ifdef __DEBUG_LUASCRIPTS__
  43.             char desc[30];
  44.             sprintf(desc, "%s", player->getName().c_str());
  45.             env->setEvent(desc);
  46.             #endif
  47.  
  48.             env->setScriptId(m_scriptId, m_interface);
  49.             env->setRealPos(player->getPosition());
  50.  
  51.             lua_State* L = m_interface->getState();
  52.             m_interface->pushFunction(m_scriptId);
  53.  
  54.             lua_pushnumber(L, env->addThing(player));
  55.            
  56.             LuaInterface::pushThing(L, item, env->addThing(item));
  57.             LuaInterface::pushPosition(L, fromPosition);
  58.             LuaInterface::pushPosition(L, toPosition);
  59.             LuaInterface::pushThing(L, item, env->addThing(fromItem));
  60.             LuaInterface::pushThing(L, item, env->addThing(toItem));
  61.  
  62.             LuaInterface::createTable(L, "status");
  63.                 LuaInterface::setField(L,"equip",status[0]);
  64.                 LuaInterface::setField(L,"hold",status[1]);
  65.                 LuaInterface::setField(L,"slot",status[2]);
  66.                 LuaInterface::setField(L,"depot",status[3]);
  67.  
  68.             bool result = m_interface->callFunction(7);
  69.             m_interface->releaseEnv();
  70.             return result;
  71.         }
  72.     }
  73.     else
  74.     {
  75.         std::clog << "[Error - CreatureEvent::executeMove] Call stack overflow." << std::endl;
  76.         return 0;
  77.     }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement