Ir para conteúdo

Featured Replies

Postado

Bom dia a todos, estou com um erro dentro do meu servidor, a base é Poketibia DarkXPoke

 

Todos os tibia e derivado tem o depot individual, o meu simplesmente ele não fica individual, se o player colocar o item lá qualquer um pode pegar. Já vi no RME está registrado a cidade de Saffron City (Town 1), verifiquei o itens.xml não tem diferenças, gostaria de saber se tem mais alguns lugar que posso verificar se há erros ou se alguém já resolveu esse erro.

 

Segue arquivos da Source

depot.cpp

 

Spoiler
////////////////////////////////////////////////////////////////////////
// OpenTibia - an opensource roleplaying game
////////////////////////////////////////////////////////////////////////
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
////////////////////////////////////////////////////////////////////////
#include "otpch.h"
#include "depot.h"
#include "tools.h"
 
Depot::Depot(uint16_t type):
    Container(type)
{
    maxSize = 30;
    depotLimit = 1000;
}
 
Attr_ReadValue Depot::readAttr(AttrTypes_t attr, PropStream& propStream)
{
    if(attr != ATTR_DEPOT_ID)
        return Item::readAttr(attr, propStream);
 
    uint16_t depotId;
    if(!propStream.GET_USHORT(depotId))
        return ATTR_READ_ERROR;
 
    setAttribute("depotid", depotId);
    return ATTR_READ_CONTINUE;
}
 
ReturnValue Depot::__queryAdd(int32_t index, const Thing* thing, uint32_t count,
    uint32_t flags) const
{
    const Item* item = thing->getItem();
    if(!item)
        return RET_NOTPOSSIBLE;
 
    if((flags & FLAG_NOLIMIT) == FLAG_NOLIMIT)
        return Container::__queryAdd(index, thing, count, flags);
 
    int32_t addCount = 0;
    if((item->isStackable() && item->getItemCount() != count))
        addCount = 1;
 
    if(item->getTopParent() != this)
    {
        if(const Container* container = item->getContainer())
            addCount = container->getItemHoldingCount() + 1;
        else
            addCount = 1;
    }
 
    if(getItemHoldingCount() + addCount > depotLimit)
        return RET_DEPOTISFULL;
 
    return Container::__queryAdd(index, thing, count, flags);
}
 
ReturnValue Depot::__queryMaxCount(int32_t index, const Thing* thing, uint32_t count,
    uint32_t& maxQueryCount, uint32_t flags) const
{
    return Container::__queryMaxCount(index, thing, count, maxQueryCount, flags);
}
 
void Depot::postAddNotification(Creature* actor, Thing* thing, const Cylinder* oldParent,
    int32_t index, cylinderlink_t link /*= LINK_OWNER*/)
{
    if(getParent())
        getParent()->postAddNotification(actor, thing, oldParent, index, LINK_PARENT);
}
 
void Depot::postRemoveNotification(Creature* actor, Thing* thing, const Cylinder* newParent,
    int32_t index, bool isCompleteRemoval, cylinderlink_t link /*= LINK_OWNER*/)
{
    if(getParent())
        getParent()->postRemoveNotification(actor, thing, newParent,
            index, isCompleteRemoval, LINK_PARENT);
}

 

depot.h

 

Spoiler
////////////////////////////////////////////////////////////////////////
// OpenTibia - an opensource roleplaying game
////////////////////////////////////////////////////////////////////////
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
////////////////////////////////////////////////////////////////////////
 
#ifndef __DEPOT__
#define __DEPOT__
#include "container.h"
 
class Depot : public Container
{
    public:
        Depot(uint16_t type);
        virtual ~Depot() {}
 
        virtual Depot* getDepot() {return this;}
        virtual const Depot* getDepot() const {return this;}
 
        //serialization
        virtual Attr_ReadValue readAttr(AttrTypes_t attr, PropStream& propStream);
 
        uint32_t getDepotId() const;
 
        void setMaxDepotLimit(uint32_t count) {depotLimit = count;}
 
        //cylinder implementations
        virtual Cylinder* getParent() {return Item::getParent();}
        virtual const Cylinder* getParent() const {return Item::getParent();}
        virtual bool isRemoved() const {return Item::isRemoved();}
        virtual Position getPosition() const {return Item::getPosition();}
        virtual Tile* getTile() {return Item::getTile();}
        virtual const Tile* getTile() const {return Item::getTile();}
        virtual Item* getItem() {return this;}
        virtual const Item* getItem() const {return this;}
        virtual Creature* getCreature() {return NULL;}
        virtual const Creature* getCreature() const {return NULL;}
 
        virtual ReturnValue __queryAdd(int32_t index, const Thing* thing, uint32_t count,
            uint32_t flags) const;
 
        virtual ReturnValue __queryMaxCount(int32_t index, const Thing* thing, uint32_t count,
            uint32_t& maxQueryCount, uint32_t flags) const;
 
        virtual void postAddNotification(Creature* actor, Thing* thing, const Cylinder* oldParent,
            int32_t index, cylinderlink_t link = LINK_OWNER);
        virtual void postRemoveNotification(Creature* actor, Thing* thing, const Cylinder* newParent,
            int32_t index, bool isCompleteRemoval, cylinderlink_t link = LINK_OWNER);
 
        //overrides
        virtual bool canRemove() const {return false;}
 
    private:
        uint32_t depotLimit;
};
 
inline uint32_t Depot::getDepotId() const
{
    const int32_t* v = getIntegerAttribute("depotid");
    if(v)
        return (uint32_t)*v;
 
    return 0;
}
#endif

 

Obrigado pela atenção

 

 

Editado por Azareft
Inserir scripts (veja o histórico de edições)

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.9k

Informação Importante

Confirmação de Termo