Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Um feliz ano novo a todos, tudo de bom boas festas, curtam bastante, muita farra, diversão, e não esqueçam da proteção! Kkkkkkkk

 

Tudo de bom galera, desejo que em 2017 o mundo open tibia melhore!! 

 

xD  

 

:wow:     :beers:      :drinks:   :rock:   :th_78:   :28:  

 

                                                              ezgif-1-98aab239f3.gif.1a897c9c3225228909e7b356a5cfb8e4.gif

Link para o post
Compartilhar em outros sites

Feliz 2017 \o

Bruno de Carvalho Câmara / Administrador TibiaKing

[email protected]


 

btn_donateCC_LG.gif

 

Em 26/12/2016 em 03:47, Spraypaint disse:

A força da alienação vem dessa fragilidade dos indivíduos, quando apenas conseguem identificar o que os separa e não o que os une.

-miltinho

 

wMwSJFE.png?1

 

Link para o post
Compartilhar em outros sites
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por Wise
      Notei que alguns membros precisavam desse creature event pra desenvolver alguns sistemas, então eu resolvi compartilhá-lo com vocês.



      Na source, em creatureevent.cpp



      Abaixo de:
      else if(tmpStr == "preparedeath") m_type = CREATURE_EVENT_PREPAREDEATH;
       
      Adicione:
      else if(tmpStr == "moveitem") m_type = CREATURE_EVENT_MOVEITEM;
       
      Abaixo de:
      case CREATURE_EVENT_PREPAREDEATH: return "onPrepareDeath";
       
      Adicione:
      case CREATURE_EVENT_MOVEITEM: return "onMoveItem";
       
      Abaixo de:
      case CREATURE_EVENT_PREPAREDEATH: return "cid, deathList";
       
      Adicione:
      case CREATURE_EVENT_MOVEITEM: return "cid, item, count, toContainer, fromContainer, fromPos, toPos";
       
      Antes de:
      bool CreatureEvents::playerLogout(Player* player, bool forceLogout)
       
      Adicione:
      uint32_t CreatureEvent::executeMoveItem(Player* player, Item* item, uint8_t count, const Position& fromPos, const Position& toPos, Item* toContainer, Item* fromContainer, int16_t fstack) { //onMoveItem(cid, item, count, toContainer, fromContainer, fromPos, toPos) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(player->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(player) << std::endl; env->streamThing(scriptstream, "item", item, env->addThing(item)); scriptstream << "local count = " << count << std::endl; env->streamThing(scriptstream, "toContainer", toContainer, env->addThing(toContainer)); env->streamThing(scriptstream, "fromContainer", fromContainer, env->addThing(fromContainer)); env->streamPosition(scriptstream, "fromPos", fromPos, fstack); env->streamPosition(scriptstream, "toPos", toPos, 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", player->getName().c_str()); env->setEvent(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(player->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); LuaInterface::pushThing(L, item, env->addThing(item)); lua_pushnumber(L, count); LuaInterface::pushThing(L, toContainer, env->addThing(toContainer)); LuaInterface::pushThing(L, fromContainer, env->addThing(fromContainer)); LuaInterface::pushPosition(L, fromPos, fstack); LuaInterface::pushPosition(L, toPos, 0); bool result = m_interface->callFunction(7); m_interface->releaseEnv(); return result; } } else { std::clog << "[Error - CreatureEvent::executeMoveItem] Call stack overflow." << std::endl; return 0; } }

       
      Agora, em creatureevent.h


      Abaixo de:
      uint32_t executePrepareDeath(Creature* creature, DeathList deathList);
       
      Adicione:
      uint32_t executeMoveItem(Player* player, Item* item, uint8_t count, const Position& fromPos, const Position& toPos, Item* toContainer, Item* fromContainer, int16_t fstack);
       
      Procure por:
      CREATURE_EVENT_PREPAREDEATH
       
      Substitua por:
      CREATURE_EVENT_PREPAREDEATH, CREATURE_EVENT_MOVEITEM

       
      E em game.cpp


      Depois de:
      if(!canThrowObjectTo(mapFromPos, mapToPos) && !player->hasCustomFlag(PlayerCustomFlag_CanThrowAnywhere)) { player->sendCancelMessage(RET_CANNOTTHROW); return false; }
       
      Adicione:
      bool success = true; CreatureEventList moveitemEvents = player->getCreatureEvents(CREATURE_EVENT_MOVEITEM); for(CreatureEventList::iterator it = moveitemEvents.begin(); it != moveitemEvents.end(); ++it) { Item* toContainer = toCylinder->getItem(); Item* fromContainer = fromCylinder->getItem(); if(!(*it)->executeMoveItem(player, item, count, fromPos, toPos, (toContainer ? toContainer : 0), (fromContainer ? fromContainer : 0), fromStackpos) && success) success = false; } if(!success) return false;

       
      Um exemplo BEM simples do uso desse creature event:



      Tag:
      <event type="moveitem" name="MoveItem" event="script" value="moveitem.lua"/>

       
      moveitem.lua
      function onMoveItem(cid, item, count, toContainer, fromContainer, fromPos, toPos) local item = 12345 if item.itemid == item and getPlayerAccess(cid) < 4 then return doPlayerSendCancel(cid, 'You are not allowed to move this item.') and false end return true end Nessa estrutura de controle, se o item for o de ID 12345 e o cid tiver acesso menor do que 4, retornará false e ele não poderá mover o item.
      Se não for o caso, a checagem feita será false e retornará true, então o cid poderá mover o item.




      Esse callback registra creature event?
      Sim:
      registerCreatureEvent(cid, "MoveItem")  
      Créditos: Summ.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo