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.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/game/Mail.h b/src/game/Mail.h
index 5dc8cb5fd3d..8cbe46e6396 100644
--- a/src/game/Mail.h
+++ b/src/game/Mail.h
@@ -19,11 +19,15 @@
*/
#ifndef TRINITY_MAIL_H
#define TRINITY_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 MailCheckMask
{
MAIL_CHECK_MASK_NONE = 0,
@@ -32,6 +36,7 @@ enum MailCheckMask
MAIL_CHECK_MASK_COD_PAYMENT = 8,
MAIL_CHECK_MASK_RETURNED = 16
};
+
enum MailMessageType
{
MAIL_NORMAL = 0,
@@ -40,12 +45,14 @@ enum 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,
@@ -56,6 +63,7 @@ enum MailAuctionAnswers
AUCTION_CANCELED = 5,
AUCTION_SALE_PENDING = 6
};
+
// gathered from Stationery.dbc
enum MailStationery
{
@@ -66,21 +74,27 @@ enum MailStationery
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:
@@ -88,6 +102,7 @@ class MailItemsInfo
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;
@@ -97,6 +112,7 @@ class MailItemsInfo
mailItem.item = item;
i_MailItemMap[guidlow] = mailItem;
}
+
void AddItem(uint32 guidlow, uint8 slot = 0)
{
MailItem mailItem;
@@ -104,8 +120,10 @@ class MailItemsInfo
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)
@@ -117,6 +135,7 @@ class MailItemsInfo
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;
@@ -135,6 +154,7 @@ struct Mail
uint32 COD;
uint32 checked;
MailState state;
+
void AddItem(uint32 itemGuidLow, uint32 item_template)
{
MailItemInfo mii;
@@ -142,6 +162,7 @@ struct Mail
mii.item_template = item_template;
items.push_back(mii);
}
+
void AddAllItems(MailItemsInfo& pMailItemsInfo)
{
for(MailItemMap::iterator mailItemIter = pMailItemsInfo.begin(); mailItemIter != pMailItemsInfo.end(); ++mailItemIter)
@@ -150,6 +171,7 @@ struct Mail
AddItem(mailItem.item_guidlow, mailItem.item_template);
}
}
+
bool RemoveItem(uint32 item_guid)
{
for(std::vector<MailItemInfo>::iterator itr = items.begin(); itr != items.end(); ++itr)
@@ -162,6 +184,7 @@ struct Mail
}
return false;
}
+
bool HasItems() const { return !items.empty(); }
};
#endif