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
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}
constexpr auto DAY
Definition: Common.h:49
std::uint8_t uint8
Definition: Define.h:109
std::int8_t int8
Definition: Define.h:105
#define sScriptMgr
Definition: ScriptMgr.h:708
#define sBattlegroundMgr
Definition: BattlegroundMgr.h:188
#define sObjectMgr
Definition: ObjectMgr.h:1623
#define sCharacterCache
Definition: CharacterCache.h:83
@ CONFIG_MAIL_DELIVERY_DELAY
Definition: IWorld.h:267
@ MAIL_STATE_UNCHANGED
Definition: Mail.h:69
@ MAIL_AUCTION
Definition: Mail.h:39
@ MAIL_CREATURE
Definition: Mail.h:40
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
Definition: DatabaseEnvFwd.h:70
@ CHAR_INS_MAIL_ITEM
Definition: CharacterDatabase.h:111
@ CHAR_INS_MAIL
Definition: CharacterDatabase.h:109
@ BATTLEGROUND_TYPE_NONE
Definition: SharedDefines.h:3480
#define sWorld
Definition: World.h:444
Player * FindPlayerByLowGUID(ObjectGuid::LowType lowguid)
Definition: ObjectAccessor.cpp:254
Seconds GetGameTime()
Definition: GameTime.cpp:38
uint32 GetEntry() const
Definition: Object.h:112
Definition: ObjectGuid.h:118
Definition: Player.h:1064
void AddNewMailDeliverTime(time_t deliver_time)
Definition: Player.cpp:2877
void AddMItem(Item *it)
Definition: Player.h:1661
WorldSession * GetSession() const
Definition: Player.h:1978
void AddMail(Mail *mail)
Definition: Player.h:1636
void deleteIncludedItems(CharacterDatabaseTransaction trans, bool inDB=false)
Definition: Mail.cpp:133
uint32 GetCOD() const
Definition: Mail.h:133
uint32 GetMoney() const
Definition: Mail.h:132
std::string const & GetSubject() const
Definition: Mail.h:131
uint16 GetMailTemplateId() const
Definition: Mail.h:130
void prepareItems(Player *receiver, CharacterDatabaseTransaction trans)
Definition: Mail.cpp:100
std::string const & GetBody() const
Definition: Mail.h:134
ObjectGuid::LowType receiver
Definition: Mail.h:174
uint8 messageType
Definition: Mail.h:170
uint32 messageID
Definition: Mail.h:169
time_t expire_time
Definition: Mail.h:179
uint32 sender
Definition: Mail.h:173
uint8 stationery
Definition: Mail.h:171
std::string subject
Definition: Mail.h:175
std::string body
Definition: Mail.h:176
void AddItem(ObjectGuid::LowType itemGuidLow, uint32 item_template)
Definition: Mail.h:186
time_t deliver_time
Definition: Mail.h:180
uint32 COD
Definition: Mail.h:182
uint32 checked
Definition: Mail.h:183
MailState state
Definition: Mail.h:184
uint32 money
Definition: Mail.h:181
uint16 mailTemplateId
Definition: Mail.h:172
AccountTypes GetSecurity() const
Definition: WorldSession.h:359