Boa noite! Estava desenvolvendo um projeto de NDBO e precisava de um Stack-Item que suportasse mais de 100 itens. Dei uma procurada na net, mas não encontrei uma solução adequada. Os que encontrei eram bugados ou tinham um limite de 255 itens. No fim, acabei fazendo um, que permite configurar o limite diretamente no config.lua. Porém, como acabaram de fazer um e soltram FREE uma parte do codigo, irei disponibilizar aqui como foi feito.
Em container.cpp:
Procure por:
__queryMaxCount e substitua ou modifique para isso:
Ainda em container.cpp, procure por __queryDestination e modifique ou substitua por:
Agora em game.cpp:
Procure por:
playerMoveThing e mude para:
playerMoveItem e mude para:
internalMoveItem em "Item* updateItem = NULL;" e mude para
internalMoveTradeItem em "Item* updateItem = NULL;" e mude para :
internalAddItem em "Item* toItem = *stackItem;" mude para
Agora em game.h:
Procure por playerMoveThing e mude para:
bool playerMoveThing(const uint32_t& playerId, const Position& fromPos,
const uint16_t& spriteId, const int16_t& fromStackpos, const Position& toPos, const uint16_t& count);
Procure por playerMoveItem e mude para:
bool playerMoveItem(const uint32_t& playerId, const Position& fromPos,
const uint16_t& spriteId, const int16_t& fromStackpos, const Position& toPos, const uint16_t& count);
Agora em item.cpp:
Procue por setSubType((uint16_t)_count); e comente ele.
Agora em item.h:
Procure por getWorth() e substitua por:
int64_t getWorth() const {return getItemCount() * items[id].worth;}
Procue por uint16_t id; e em "count" mude para esse:
int16_t count;
Agora em luascript.cpp:
Procure por luaDoTransformItem e mude para:
Procure por luaDoPlayerAddItem e mude para:
Procure por luaDoCreateItem e mude para:
Procure por luaDoCreateItemEx e mude para:
Agora em networkmessage.cpp:
Procure por void NetworkMessage::addItem e mude para:
Procure por void NetworkMessage::addItem e mude para:
Agora em networkmessage.h:
Procure por void addItem e mude para:
void addItem(uint16_t id, uint16_t count, Player* player, bool withDescription = false);
Agora em player.cpp:
Procure por __queryMaxCount e mude para:
Procure por __queryDestination e mude para:
Agora em protocolgame.cpp:
Procure por "void ProtocolGame::parseThrow" e mude para:
uint16_t count = msg.get<uint16_t>();
Agora em tile.cpp:
Procure por "if(item->isStackable() && count != item->getItemCount())" e mude para:
Agora vá em configmanager.cpp:
E adicione a seguinte linha:
m_confNumber[STACK_ITEM_MAX] = getGlobalNumber("StackItem_Max", 100);
Por fim, vá em configmanager.h:
E adicione a seguinte linha em "enum number_config_t":
STACK_ITEM_MAX,
DETALHE, no seu client é necessario ativar a feature: g_game.enableFeature(GameCountU16) e no config.lua adicione a linha: StackItem_Max = 1000
Lembrando que esse STACK é apenas para OTX, caso deseje para TFS 1.x só entrar em contato pelo DC: trint. Qualquer erro só deixar o comentario.
Como é meu primeiro topico desde já peço perdão pela forma que foi feito kkkk.