/** * Prepares the items in a MailDraft. */ bool MailDraft::prepareItems(Player* receiver) { if (!m_mailTemplateId || !m_mailTemplateItemsNeed) return false; m_mailTemplateItemsNeed = false; // mailLoot can be empty Loot mailLoot(receiver, m_mailTemplateId, LOOT_MAIL); LootItemList lootList; mailLoot.GetLootItemsListFor(receiver, lootList); for (LootItemList::const_iterator lootItr = lootList.begin(); lootItr != lootList.end(); ++lootItr) { if (m_items.size() < MAX_MAIL_ITEMS) { LootItem* lootitem = *lootItr; if (Item* item = Item::CreateItem(lootitem->itemId, lootitem->count, receiver)) { item->SaveToDB(); // save for prevent lost at next mail load, if send fail then item will deleted AddItem(item); } } } return true; }
void Mail::prepareTemplateItems(Player* receiver) { if (!mailTemplateId || !items.empty()) return; has_items = true; CharacterDatabase.BeginTransaction(); CharacterDatabase.PExecute("UPDATE mail SET has_items = 1 WHERE id = %u", messageID); // mailLoot can be empty Loot mailLoot(receiver, mailTemplateId, LOOT_MAIL); LootItemList lootList; mailLoot.GetLootItemsListFor(receiver, lootList); for (LootItemList::const_iterator lootItr = lootList.begin(); lootItr != lootList.end(); ++lootItr) { if (items.size() < MAX_MAIL_ITEMS) { LootItem* lootitem = *lootItr; if (Item* item = Item::CreateItem(lootitem->itemId, lootitem->count, receiver)) { item->SaveToDB(); AddItem(item->GetGUIDLow(), item->GetEntry()); receiver->AddMItem(item); CharacterDatabase.PExecute("INSERT INTO mail_items (mail_id,item_guid,item_template,receiver) VALUES ('%u', '%u', '%u','%u')", messageID, item->GetGUIDLow(), item->GetEntry(), receiver->GetGUIDLow()); } } } CharacterDatabase.CommitTransaction(); }
/** * Prepares the items in a MailDraft. */ bool MailDraft::prepareItems(Player* receiver) { if (!m_mailTemplateId || !m_mailTemplateItemsNeed) return false; m_mailTemplateItemsNeed = false; Loot mailLoot(NULL); // can be empty mailLoot.FillLoot(m_mailTemplateId, LootTemplates_Mail, receiver, true, true); uint32 max_slot = mailLoot.GetMaxSlotInLootFor(receiver); for (uint32 i = 0; m_items.size() < MAX_MAIL_ITEMS && i < max_slot; ++i) { if (LootItem* lootitem = mailLoot.LootItemInSlot(i, receiver)) { if (Item* item = Item::CreateItem(lootitem->itemid, lootitem->count, receiver)) { item->SaveToDB(); // save for prevent lost at next mail load, if send fail then item will deleted AddItem(item); } } } return true; }
void Mail::prepareTemplateItems(Player* receiver) { MasterPlayer* masterReceiver = receiver->GetSession()->GetMasterPlayer(); if (!mailTemplateId || !items.empty() || !masterReceiver) return; has_items = true; Loot mailLoot(NULL); // can be empty mailLoot.FillLoot(mailTemplateId, LootTemplates_Mail, receiver, true, true); CharacterDatabase.BeginTransaction(); CharacterDatabase.PExecute("UPDATE mail SET has_items = 1 WHERE id = %u", messageID); uint32 max_slot = mailLoot.GetMaxSlotInLootFor(receiver); for (uint32 i = 0; items.size() < MAX_MAIL_ITEMS && i < max_slot; ++i) { if (LootItem* lootitem = mailLoot.LootItemInSlot(i, receiver)) { if (Item* item = Item::CreateItem(lootitem->itemid, lootitem->count, receiver)) { item->SaveToDB(); AddItem(item->GetGUIDLow(), item->GetEntry()); masterReceiver->AddMItem(item); CharacterDatabase.PExecute("INSERT INTO mail_items (mail_id,item_guid,item_template,receiver) VALUES ('%u', '%u', '%u','%u')", messageID, item->GetGUIDLow(), item->GetEntry(), masterReceiver->GetGUIDLow()); } } } CharacterDatabase.CommitTransaction(); }