187{
188 sScriptMgr->OnBeforeMailDraftSendMailTo(
this, receiver, sender, checked, deliver_delay, custom_expiration, deleteMailItemsFromDB, sendMail);
189
190 if (deleteMailItemsFromDB)
192
193 if (!sendMail)
194 return;
195
196 Player* pReceiver = receiver.GetPlayer();
197
198 if (pReceiver)
200
202
204
205
207
208
211
214
216 expire_delay = 3 *
DAY;
217 else if (custom_expiration > 0)
218 expire_delay = custom_expiration *
DAY;
219 else
220 {
223 }
224
225 time_t expire_time = deliver_time + expire_delay;
226
227
231 stmt->
SetData(++index,
uint8(sender.GetMailMessageType()));
232 stmt->
SetData(++index,
int8(sender.GetStationery()));
234 stmt->
SetData(++index, sender.GetSenderId());
235 stmt->
SetData(++index, receiver.GetPlayerGUIDLow());
244 trans->Append(stmt);
245
246 for (MailItemMap::const_iterator mailItemIter =
m_items.begin(); mailItemIter !=
m_items.end(); ++mailItemIter)
247 {
250 stmt->
SetData(1, mailItemIter->second->GetGUID().GetCounter());
251 stmt->
SetData(2, receiver.GetPlayerGUIDLow());
252 trans->Append(stmt);
253 }
254
255 sMailMgr->OnMailSent(receiver.GetPlayerGUIDLow());
256
257
258 if (pReceiver)
259 {
261
269
270 for (MailItemMap::const_iterator mailItemIter =
m_items.begin(); mailItemIter !=
m_items.end(); ++mailItemIter)
271 {
272 Item* item = mailItemIter->second;
274 }
275
278 m->
sender = sender.GetSenderId();
279 m->
receiver = receiver.GetPlayerGUIDLow();
284
286
288 {
289 for (MailItemMap::iterator mailItemIter =
m_items.begin(); mailItemIter !=
m_items.end(); ++mailItemIter)
290 {
291 pReceiver->
AddMItem(mailItemIter->second);
292 }
293 }
294 }
296 {
298 }
299}
#define sBattlegroundMgr
Definition BattlegroundMgr.h:190
@ CHAR_INS_MAIL_ITEM
Definition CharacterDatabase.h:111
@ CHAR_INS_MAIL
Definition CharacterDatabase.h:109
constexpr auto DAY
Definition Common.h:49
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
Definition DatabaseEnvFwd.h:69
std::uint8_t uint8
Definition Define.h:109
std::int8_t int8
Definition Define.h:105
#define sMailMgr
Definition MailMgr.h:85
@ MAIL_STATE_UNCHANGED
Definition Mail.h:68
@ MAIL_AUCTION
Definition Mail.h:38
@ MAIL_CREATURE
Definition Mail.h:39
#define sObjectMgr
Definition ObjectMgr.h:1730
#define sScriptMgr
Definition ScriptMgr.h:743
@ BATTLEGROUND_TYPE_NONE
Definition SharedDefines.h:3736
@ CONFIG_MAIL_DELIVERY_DELAY
Definition WorldConfig.h:221
void deleteIncludedItems(CharacterDatabaseTransaction trans, bool inDB=false)
Definition Mail.cpp:133
uint32 GetCOD() const
Definition Mail.h:132
uint32 GetMoney() const
Definition Mail.h:131
std::string const & GetSubject() const
Definition Mail.h:130
uint16 GetMailTemplateId() const
Definition Mail.h:129
void prepareItems(Player *receiver, CharacterDatabaseTransaction trans)
Definition Mail.cpp:100
std::string const & GetBody() const
Definition Mail.h:133
uint32 GetEntry() const
Definition Object.h:117
void AddNewMailDeliverTime(time_t deliver_time)
Definition Player.cpp:2980
void AddMItem(Item *it)
Definition Player.h:1699
WorldSession * GetSession() const
Definition Player.h:2030
void AddMail(Mail *mail)
Definition Player.h:1673
AccountTypes GetSecurity() const
Definition WorldSession.h:467
#define sWorld
Definition World.h:318
Seconds GetGameTime()
Definition GameTime.cpp:38
Player * FindPlayerByLowGUID(ObjectGuid::LowType lowguid)
Definition ObjectAccessor.cpp:275
ObjectGuid::LowType receiver
Definition Mail.h:173
uint8 messageType
Definition Mail.h:169
uint32 messageID
Definition Mail.h:168
time_t expire_time
Definition Mail.h:178
uint32 sender
Definition Mail.h:172
uint8 stationery
Definition Mail.h:170
std::string subject
Definition Mail.h:174
std::string body
Definition Mail.h:175
void AddItem(ObjectGuid::LowType itemGuidLow, uint32 item_template)
Definition Mail.h:185
time_t deliver_time
Definition Mail.h:179
uint32 COD
Definition Mail.h:181
uint32 checked
Definition Mail.h:182
MailState state
Definition Mail.h:183
uint32 money
Definition Mail.h:180
uint16 mailTemplateId
Definition Mail.h:171
References Mail::AddItem(), Player::AddMail(), Player::AddMItem(), Player::AddNewMailDeliverTime(), BATTLEGROUND_TYPE_NONE, Mail::body, CHAR_INS_MAIL, CHAR_INS_MAIL_ITEM, CharacterDatabase, Mail::checked, Mail::COD, CONFIG_MAIL_DELIVERY_DELAY, DAY, deleteIncludedItems(), Mail::deliver_time, Mail::expire_time, ObjectAccessor::FindPlayerByLowGUID(), GetBody(), GetCOD(), ObjectGuid::GetCounter(), Object::GetEntry(), GameTime::GetGameTime(), Object::GetGUID(), MailSender::GetMailMessageType(), GetMailTemplateId(), GetMoney(), MailReceiver::GetPlayer(), MailReceiver::GetPlayerGUIDLow(), WorldSession::GetSecurity(), MailSender::GetSenderId(), Player::GetSession(), MailSender::GetStationery(), GetSubject(), m_COD, m_items, m_money, MAIL_AUCTION, MAIL_CREATURE, MAIL_STATE_UNCHANGED, Mail::mailTemplateId, Mail::messageID, Mail::messageType, Mail::money, prepareItems(), Mail::receiver, sBattlegroundMgr, Mail::sender, PreparedStatementBase::SetData(), sMailMgr, sObjectMgr, sScriptMgr, Mail::state, Mail::stationery, Mail::subject, and sWorld.
Referenced by Player::_LoadBrewOfTheMonth(), Player::_LoadInventory(), Player::AutoUnequipOffhandIfNeed(), AchievementMgr::CompletedAchievement(), Player::GiveLevel(), WorldSession::HandleAuctionRemoveItem(), item_commandscript::HandleItemRefundCommand(), item_commandscript::HandleItemRestoreCommand(), WorldSession::HandleMailTakeItem(), quest_commandscript::HandleQuestComplete(), quest_commandscript::HandleQuestReward(), spell_gen_spirit_of_competition_participant::HandleScript(), spell_gen_spirit_of_competition_winner::HandleScript(), send_commandscript::HandleSendItemsCommand(), WorldSession::HandleSendMail(), send_commandscript::HandleSendMailCommand(), send_commandscript::HandleSendMoneyCommand(), CalendarMgr::RemoveEvent(), Player::RewardQuest(), AuctionHouseMgr::SendAuctionCancelledToBidderMail(), AuctionHouseMgr::SendAuctionExpiredMail(), AuctionHouseMgr::SendAuctionOutbiddedMail(), AuctionHouseMgr::SendAuctionSalePendingMail(), AuctionHouseMgr::SendAuctionSuccessfulMail(), AuctionHouseMgr::SendAuctionWonMail(), Player::SendItemRetrievalMail(), Player::SendItemRetrievalMail(), npc_minigob_manabonk::SendMailToPlayer(), SendReturnToSender(), WorldState::SendScourgeInvasionMail(), and ServerMailMgr::SendServerMail().