//////////////////////////////////////////////////////////////////////// // 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 . //////////////////////////////////////////////////////////////////////// #ifndef __MAILBOX__ #define __MAILBOX__ #include "const.h" #include "cylinder.h" #include "item.h" class Mailbox : public Item, public Cylinder { public: Mailbox(uint16_t _type): Item(_type) {} virtual ~Mailbox() {} virtual Mailbox* getMailbox() {return this;} virtual const Mailbox* getMailbox() const {return this;} //cylinder implementations 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 ReturnValue __queryRemove(const Thing* thing, uint32_t count, uint32_t flags) const {return RET_NOTPOSSIBLE;} virtual Cylinder* __queryDestination(int32_t& index, const Thing* thing, Item** destItem, uint32_t& flags) {return this;} virtual void __addThing(Creature* actor, Thing* thing) {__addThing(actor, 0, thing);} virtual void __addThing(Creature* actor, int32_t index, Thing* thing); virtual void __updateThing(Thing* thing, uint16_t itemId, uint32_t count) {} virtual void __replaceThing(uint32_t index, Thing* thing) {} virtual void __removeThing(Thing* thing, uint32_t count) {} virtual void postAddNotification(Creature* actor, Thing* thing, const Cylinder* oldParent, int32_t index, cylinderlink_t link = LINK_OWNER) {getParent()->postAddNotification(actor, thing, oldParent, index, LINK_PARENT);} virtual void postRemoveNotification(Creature* actor, Thing* thing, const Cylinder* newParent, int32_t index, bool isCompleteRemoval, cylinderlink_t link = LINK_OWNER) {getParent()->postRemoveNotification(actor, thing, newParent, index, isCompleteRemoval, LINK_PARENT);} static bool sendItem(Creature* actor, Item* item); static bool sendAddressedItem(Creature* actor, const std::string& name, uint32_t depotId, Item* item); static bool getDepotId(const std::string& townString, uint32_t& depotId); static bool getRecipient(Item* item, std::string& name, uint32_t& depotId); static bool canSend(const Item* item) {return (item->getID() == ITEM_PARCEL || item->getID() == ITEM_LETTER);} }; #endif