Example #1
0
/**
 * 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;
}
Example #2
0
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();
}
Example #3
0
/**
 * 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;
}
Example #4
0
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();
}