00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "post.hpp"
00023
00024 #include "../account-server/character.hpp"
00025 #include "../common/configuration.hpp"
00026
00027 Letter::Letter(unsigned int type, Character *sender, Character *receiver)
00028 : mId(0), mType(type), mSender(sender), mReceiver(receiver)
00029 {
00030
00031 }
00032
00033 Letter::~Letter()
00034 {
00035 if (mSender)
00036 delete mSender;
00037
00038 if (mReceiver)
00039 delete mReceiver;
00040
00041 }
00042
00043 void Letter::setExpiry(unsigned long expiry)
00044 {
00045 mExpiry = expiry;
00046 }
00047
00048 unsigned long Letter::getExpiry() const
00049 {
00050 return mExpiry;
00051 }
00052
00053 void Letter::addText(const std::string &text)
00054 {
00055 mContents = text;
00056 }
00057
00058 std::string Letter::getContents()
00059 {
00060 return mContents;
00061 }
00062
00063 bool Letter::addAttachment(InventoryItem item)
00064 {
00065 unsigned int max = Configuration::getValue("mail_maxAttachments", 3);
00066 if (mAttachments.size() > max)
00067 {
00068 return false;
00069 }
00070
00071 mAttachments.push_back(item);
00072
00073 return true;
00074 }
00075
00076 Character* Letter::getReceiver()
00077 {
00078 return mReceiver;
00079 }
00080
00081 Character* Letter::getSender()
00082 {
00083 return mSender;
00084 }
00085
00086 std::vector<InventoryItem> Letter::getAttachments()
00087 {
00088 return mAttachments;
00089 }
00090
00091 Post::~Post()
00092 {
00093 std::vector<Letter*>::iterator itr_end = mLetters.end();
00094 for (std::vector<Letter*>::iterator itr = mLetters.begin();
00095 itr != itr_end;
00096 ++itr)
00097 {
00098 delete (*itr);
00099 }
00100
00101 mLetters.clear();
00102 }
00103
00104 bool Post::addLetter(Letter *letter)
00105 {
00106 unsigned int max = Configuration::getValue("mail_maxLetters", 10);
00107 if (mLetters.size() > max)
00108 {
00109 return false;
00110 }
00111
00112 mLetters.push_back(letter);
00113
00114 return true;
00115 }
00116
00117 Letter* Post::getLetter(int letter) const
00118 {
00119 if (letter < 0 || (size_t) letter > mLetters.size())
00120 {
00121 return NULL;
00122 }
00123 return mLetters[letter];
00124 }
00125
00126 unsigned int Post::getNumberOfLetters() const
00127 {
00128 return mLetters.size();
00129 }
00130
00131 void PostManager::addLetter(Letter *letter)
00132 {
00133 std::map<Character*, Post*>::iterator itr =
00134 mPostBox.find(letter->getReceiver());
00135 if (itr != mPostBox.end())
00136 {
00137 itr->second->addLetter(letter);
00138 }
00139 else
00140 {
00141 Post *post = new Post();
00142 post->addLetter(letter);
00143 mPostBox.insert(
00144 std::pair<Character*, Post*>(letter->getReceiver(), post)
00145 );
00146 }
00147 }
00148
00149 Post* PostManager::getPost(Character *player)
00150 {
00151 std::map<Character*, Post*>::iterator itr =
00152 mPostBox.find(player);
00153 if (itr == mPostBox.end())
00154 {
00155 return NULL;
00156 }
00157
00158 return itr->second;
00159 }
00160
00161 void PostManager::clearPost(Character *player)
00162 {
00163 std::map<Character*, Post*>::iterator itr =
00164 mPostBox.find(player);
00165 if (itr != mPostBox.end())
00166 {
00167 delete itr->second;
00168 mPostBox.erase(itr);
00169 }
00170 }