aboutsummaryrefslogtreecommitdiff
path: root/src/game/Mail.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Mail.h')
-rw-r--r--src/game/Mail.h212
1 files changed, 212 insertions, 0 deletions
diff --git a/src/game/Mail.h b/src/game/Mail.h
new file mode 100644
index 00000000000..bec54eb41f7
--- /dev/null
+++ b/src/game/Mail.h
@@ -0,0 +1,212 @@
+/*
+ * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/>
+ *
+ * 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 2 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#ifndef MANGOS_MAIL_H
+#define MANGOS_MAIL_H
+
+#include "Common.h"
+#include <map>
+
+class Item;
+
+#define MAIL_BODY_ITEM_TEMPLATE 8383 // - plain letter, A Dusty Unsent Letter: 889
+#define MAX_MAIL_ITEMS 12
+
+enum MAIL_RESPONSE
+{
+ MAIL_OK = 0,
+ MAIL_MONEY_TAKEN = 1,
+ MAIL_ITEM_TAKEN = 2,
+ MAIL_RETURNED_TO_SENDER = 3,
+ MAIL_DELETED = 4,
+ MAIL_MADE_PERMANENT = 5
+};
+
+enum MAIL_ERRORS
+{
+ MAIL_ERR_BAG_FULL = 1,
+ MAIL_ERR_CANNOT_SEND_TO_SELF = 2,
+ MAIL_ERR_NOT_ENOUGH_MONEY = 3,
+ MAIL_ERR_RECIPIENT_NOT_FOUND = 4,
+ MAIL_ERR_NOT_YOUR_TEAM = 5,
+ MAIL_ERR_INTERNAL_ERROR = 6,
+ MAIL_ERR_DISABLED_FOR_TRIAL_ACC = 14,
+ MAIL_ERR_RECIPIENT_CAP_REACHED = 15,
+ MAIL_ERR_CANT_SEND_WRAPPED_COD = 16,
+ MAIL_ERR_MAIL_AND_CHAT_SUSPENDED = 17
+};
+
+enum MailCheckMask
+{
+ MAIL_CHECK_MASK_NONE = 0,
+ MAIL_CHECK_MASK_READ = 1,
+ MAIL_CHECK_MASK_AUCTION = 4,
+ MAIL_CHECK_MASK_COD_PAYMENT = 8,
+ MAIL_CHECK_MASK_RETURNED = 16
+};
+
+enum MailMessageType
+{
+ MAIL_NORMAL = 0,
+ MAIL_AUCTION = 2,
+ MAIL_CREATURE = 3, // client send CMSG_CREATURE_QUERY on this mailmessagetype
+ MAIL_GAMEOBJECT = 4, // client send CMSG_GAMEOBJECT_QUERY on this mailmessagetype
+ MAIL_ITEM = 5, // client send CMSG_ITEM_QUERY on this mailmessagetype
+};
+
+enum MailState
+{
+ MAIL_STATE_UNCHANGED = 1,
+ MAIL_STATE_CHANGED = 2,
+ MAIL_STATE_DELETED = 3
+};
+
+enum MailAuctionAnswers
+{
+ AUCTION_OUTBIDDED = 0,
+ AUCTION_WON = 1,
+ AUCTION_SUCCESSFUL = 2,
+ AUCTION_EXPIRED = 3,
+ AUCTION_CANCELLED_TO_BIDDER = 4,
+ AUCTION_CANCELED = 5,
+ AUCTION_SALE_PENDING = 6
+};
+
+// gathered from Stationery.dbc
+enum MailStationery
+{
+ MAIL_STATIONERY_UNKNOWN = 0x01,
+ MAIL_STATIONERY_NORMAL = 0x29,
+ MAIL_STATIONERY_GM = 0x3D,
+ MAIL_STATIONERY_AUCTION = 0x3E,
+ MAIL_STATIONERY_VAL = 0x40,
+ MAIL_STATIONERY_CHR = 0x41
+};
+
+struct MailItemInfo
+{
+ uint32 item_guid;
+ uint32 item_template;
+};
+
+struct MailItem
+{
+ MailItem() : item_slot(0), item_guidlow(0), item_template(0), item(NULL) {}
+
+ uint8 item_slot; // slot in mail
+ uint32 item_guidlow; // item guid (low part)
+ uint32 item_template; // item entry
+ Item *item; // item pointer
+
+ void deleteItem(bool inDB = false);
+};
+
+typedef std::map<uint32, MailItem> MailItemMap;
+
+class MailItemsInfo
+{
+ public:
+ MailItemMap::const_iterator begin() const { return i_MailItemMap.begin(); }
+ MailItemMap::const_iterator end() const { return i_MailItemMap.end(); }
+ MailItemMap::iterator begin() { return i_MailItemMap.begin(); }
+ MailItemMap::iterator end() { return i_MailItemMap.end(); }
+
+ void AddItem(uint32 guidlow, uint32 _template, Item *item, uint8 slot = 0)
+ {
+ MailItem mailItem;
+ mailItem.item_slot = slot;
+ mailItem.item_guidlow = guidlow;
+ mailItem.item_template = _template;
+ mailItem.item = item;
+ i_MailItemMap[guidlow] = mailItem;
+ }
+
+ void AddItem(uint32 guidlow, uint8 slot = 0)
+ {
+ MailItem mailItem;
+ mailItem.item_guidlow = guidlow;
+ mailItem.item_slot = slot;
+ i_MailItemMap[guidlow] = mailItem;
+ }
+
+ uint8 size() const { return i_MailItemMap.size(); }
+ bool empty() const { return i_MailItemMap.empty(); }
+
+ void deleteIncludedItems(bool inDB = false)
+ {
+ for(MailItemMap::iterator mailItemIter = begin(); mailItemIter != end(); ++mailItemIter)
+ {
+ MailItem& mailItem = mailItemIter->second;
+ mailItem.deleteItem(inDB);
+ }
+ }
+ private:
+ MailItemMap i_MailItemMap; // Keep the items in a map to avoid duplicate guids (which can happen), store only low part of guid
+};
+
+struct Mail
+{
+ uint32 messageID;
+ uint8 messageType;
+ uint8 stationery;
+ uint16 mailTemplateId;
+ uint32 sender;
+ uint32 receiver;
+ std::string subject;
+ uint32 itemTextId;
+ std::vector<MailItemInfo> items;
+ std::vector<uint32> removedItems;
+ time_t expire_time;
+ time_t deliver_time;
+ uint32 money;
+ uint32 COD;
+ uint32 checked;
+ MailState state;
+
+ void AddItem(uint32 itemGuidLow, uint32 item_template)
+ {
+ MailItemInfo mii;
+ mii.item_guid = itemGuidLow;
+ mii.item_template = item_template;
+ items.push_back(mii);
+ }
+
+ void AddAllItems(MailItemsInfo& pMailItemsInfo)
+ {
+ for(MailItemMap::iterator mailItemIter = pMailItemsInfo.begin(); mailItemIter != pMailItemsInfo.end(); ++mailItemIter)
+ {
+ MailItem& mailItem = mailItemIter->second;
+ AddItem(mailItem.item_guidlow, mailItem.item_template);
+ }
+ }
+
+ bool RemoveItem(uint32 itemId)
+ {
+ for(std::vector<MailItemInfo>::iterator itr = items.begin(); itr != items.end(); ++itr)
+ {
+ if(itr->item_guid == itemId)
+ {
+ items.erase(itr);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ bool HasItems() const { return !items.empty(); }
+};
+#endif