- void WorldSession::SendExternalMails()
- {
- sLog->outDetail("EXTERNAL MAIL> Sending mails in queue...");
- PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_GET_EXTERNAL_MAIL);
- PreparedQueryResult result = CharacterDatabase.Query(stmt);
- if (!result)
- {
- sLog->outDetail("EXTERNAL MAIL> No mails in queue...");
- return;
- }
- SQLTransaction trans = CharacterDatabase.BeginTransaction();
- MailDraft* mail = NULL;
- do
- {
- Field *fields = result->Fetch();
- uint32 id = fields[0].GetUInt32();
- uint32 receiver_guid = fields[1].GetUInt32();
- std::string subject = fields[2].GetString();
- std::string body = fields[3].GetString();
- uint32 money = fields[4].GetUInt32();
- uint32 itemId = fields[5].GetUInt32();
- uint32 itemCount = fields[6].GetUInt32();
- uint32 type = fields[7].GetUInt32();
- Player *receiver = ObjectAccessor::FindPlayer(receiver_guid);
- switch (type)
- {
- case 1:
- mail = new MailDraft(subject, body);
- if (money)
- {
- sLog->outDetail("EXTERNAL MAIL> Adding money");
- mail->AddMoney(money);
- }
- if (itemId)
- {
- sLog->outDetail("EXTERNAL MAIL> Adding %u of item with id %u", itemCount, itemId);
- if(Item* mailItem = Item::CreateItem(itemId, itemCount))
- {
- mailItem->SaveToDB(trans);
- mail->AddItem(mailItem);
- }
- }
- mail->SendMailTo(trans, receiver ? receiver : MailReceiver(receiver_guid), MailSender(MAIL_NORMAL, 0, MAIL_STATIONERY_GM), MAIL_CHECK_MASK_RETURNED);
- delete mail;
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_EXTERNAL_MAIL);
- stmt->setUInt32(0, id);
- trans->Append(stmt);
- break;
- case 2:
- if (receiver)
- {
- if (AchievementEntry const* achievementEntry = GetAchievementStore()->LookupEntry(itemId))
- receiver->CompletedAchievement(achievementEntry);
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_EXTERNAL_MAIL);
- stmt->setUInt32(0, id);
- trans->Append(stmt);
- }
- break;
- }
- sLog->outDetail("EXTERNAL MAIL> Mail sent");
- } while (result->NextRow());
- CharacterDatabase.CommitTransaction(trans);
- sLog->outDetail("EXTERNAL MAIL> All Mails Sent...");
- }