189 {
190
192 "SELECT messageType, sender, receiver, subject, body, money, mailTemplateId, checked, deliver_time"
193 " FROM mail WHERE id = {}", mailId);
194
195 if (!result)
196 {
198 return true;
199 }
200
201 Field* fields = result->Fetch();
205 std::string subject = fields[3].
Get<std::string>();
206 std::string body = fields[4].
Get<std::string>();
211
212
214 {
216 return true;
217 }
218
219
221 {
223 return true;
224 }
225
227 {
229 return true;
230 }
231
232 if (!sender)
233 {
235 return true;
236 }
237
239 {
241 return true;
242 }
243
245
246
247 if (player)
248 {
250 if (m)
251 {
253
255 {
256 for (auto const& itemInfo : m->items)
257 {
260 {
262 return true;
263 }
264 }
265 }
267 {
269 return true;
270 }
271 }
272 }
273
274
276
279 trans->Append(stmt);
280
283 trans->Append(stmt);
284
286 if (mailTemplate)
288
289 if (player)
290 {
291
292
294
296
298 {
299 for (auto const& itemInfo : m->items)
300 {
302 draft.AddItem(item);
303
305 }
306 }
307
308 delete m;
309 }
310 else
311 {
312
313
315 "SELECT creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments,"
316 " randomPropertyId, durability, playedTime, text, mi.item_guid, itemEntry, ii.owner_guid"
317 " FROM mail_items mi LEFT JOIN item_instance ii ON mi.item_guid = ii.guid"
318 " WHERE mi.mail_id = {}", mailId);
319
320 if (itemResult)
321 {
322 do
323 {
324 Field* itemFields = itemResult->Fetch();
327
328
329 if (!itemEntry)
330 {
331 LOG_ERROR(
"misc",
"cs_mail: Mail #{} has dangling mail_items row for item_guid {}. Cleaning up.", mailId, itemGuid);
332
335 trans->Append(delStmt);
336 continue;
337 }
338
340 if (!proto)
341 {
342 LOG_ERROR(
"misc",
"cs_mail: Mail #{} has unknown item (entry: {}, guid: {}). Cleaning up.", mailId, itemEntry, itemGuid);
343
346 trans->Append(delStmt);
347 continue;
348 }
349
352 ? ObjectGuid::Create<HighGuid::Player>(itemFields[13].Get<uint32>())
354
355 if (!item->
LoadFromDB(itemGuid, ownerGuid, itemFields, itemEntry))
356 {
357 LOG_ERROR(
"misc",
"cs_mail: Item (GUID: {}) in mail #{} failed to load. Cleaning up.", itemGuid, mailId);
358
361 trans->Append(delStmt);
362
366 return true;
367 }
368
369 draft.AddItem(item);
370 } while (itemResult->NextRow());
371 }
372 }
373
375 draft.AddMoney(money).SendReturnToSender(accountId, receiver, sender, trans);
376
378
380
382 return true;
383 }
Item * NewItemOrBag(ItemTemplate const *proto)
Definition Bag.h:67
@ CHAR_DEL_INVALID_MAIL_ITEM
Definition CharacterDatabase.h:113
@ CHAR_DEL_MAIL_BY_ID
Definition CharacterDatabase.h:110
@ CHAR_DEL_MAIL_ITEM_BY_ID
Definition CharacterDatabase.h:382
SQLTransaction< CharacterDatabaseConnection > CharacterDatabaseTransaction
Definition DatabaseEnvFwd.h:69
@ ITEM_REMOVED
Definition Item.h:212
@ LANG_MAIL_RETURN_NOT_NORMAL
Definition Language.h:1224
@ LANG_MAIL_RETURN_ALREADY_RETURNED
Definition Language.h:1226
@ LANG_MAIL_RETURN_HOOK_BLOCKED
Definition Language.h:1227
@ LANG_MAIL_RETURN_NO_SENDER
Definition Language.h:1225
@ LANG_MAIL_RETURN_NOT_FOUND
Definition Language.h:1223
@ LANG_MAIL_RETURN_SUCCESS
Definition Language.h:1222
#define LOG_ERROR(filterType__,...)
Definition Log.h:158
@ MAIL_CHECK_MASK_RETURNED
Definition Mail.h:48
#define sObjectMgr
Definition ObjectMgr.h:1712
#define sScriptMgr
Definition ScriptMgr.h:734
void SendErrorMessage(uint32 entry)
Definition Chat.cpp:216
virtual bool LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field *fields, uint32 entry)
Definition Item.cpp:419
virtual void SaveToDB(CharacterDatabaseTransaction trans)
Definition Item.cpp:336
void FSetState(ItemUpdateState state)
Definition Item.h:330
LowType GetCounter() const
Definition ObjectGuid.h:145
static ObjectGuid const Empty
Definition ObjectGuid.h:120
void RemoveMail(uint32 id)
Definition Player.cpp:2825
bool RemoveMItem(ObjectGuid::LowType itemLowGuid)
Definition Player.h:1695
Item * GetMItem(ObjectGuid::LowType itemLowGuid)
Definition Player.h:1682
Mail * GetMail(uint32 id)
Definition Player.cpp:3795
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
Definition PreparedStatement.h:157
ObjectGuid GetGUID() const
Definition ChatCommandTags.h:176
std::string const & GetName() const
Definition ChatCommandTags.h:175
Player * GetConnectedPlayer() const
Definition ChatCommandTags.h:178
Definition ItemTemplate.h:619
bool HasItems() const
Definition Mail.h:206