Example #1
0
void IDSP::SendTask(void *addr, u16 iram_addr, u16 len, u16 start)
{
	// addr			main ram addr			4byte aligned (1 Gekko word)
	// iram_addr	dsp addr				4byte aligned (2 DSP words)
	// len			block length in bytes	multiple of 4 (wtf? if you want to fill whole iram, you need 8191)
	//											(8191 % 4 = 3) wtffff
	// start		dsp iram entry point
	while (CheckMailTo());
	SendMailTo(0x80F3A001);
	while (CheckMailTo());
	SendMailTo((u32)addr);
	while (CheckMailTo());
	SendMailTo(0x80F3C002);
	while (CheckMailTo());
	SendMailTo(iram_addr);
	while (CheckMailTo());
	SendMailTo(0x80F3A002);
	while (CheckMailTo());
	SendMailTo(len);
	while (CheckMailTo());
	SendMailTo(0x80F3B002);
	while (CheckMailTo());
	SendMailTo(0);
	while (CheckMailTo());
	SendMailTo(0x80F3D001);
	while (CheckMailTo());
	SendMailTo(start);
	while (CheckMailTo());
}
Example #2
0
void WorldSession::SendMailTo(Player* receiver, Object* sender, uint8 stationery, uint32 receiver_guidlow, std::string subject, uint32 itemTextId, MailItemsInfo* mi, uint32 money, uint32 COD, uint32 checked, uint32 deliver_delay, uint16 mailTemplateId)
{
    MailMessageType mailType;
    uint32 senderGuidOrEntry;
    switch(sender->GetTypeId())
    {
        case TYPEID_UNIT:
            mailType = MAIL_CREATURE;
            senderGuidOrEntry = sender->GetEntry();
            break;
        case TYPEID_GAMEOBJECT:
            mailType = MAIL_GAMEOBJECT;
            senderGuidOrEntry = sender->GetEntry();
            break;
        case TYPEID_ITEM:
            mailType = MAIL_ITEM;
            senderGuidOrEntry = sender->GetEntry();
            break;
        case TYPEID_PLAYER:
            mailType = MAIL_NORMAL;
            senderGuidOrEntry = sender->GetGUIDLow();
            break;
        default:
            mailType = MAIL_NORMAL;
            senderGuidOrEntry = receiver_guidlow;
            sLog.outError( "WorldSession::SendMailTo - Mail have unexpected sender typeid (%u), sent from receiver to self", sender->GetTypeId());
            break;
    }

    SendMailTo(receiver, mailType, stationery, senderGuidOrEntry, receiver_guidlow, subject, itemTextId, mi, money, COD, checked,deliver_delay,mailTemplateId);
}
Example #3
0
void MailDraft::SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32 receiver_guid )
{
    Player *receiver = sObjectMgr.GetPlayer(MAKE_NEW_GUID(receiver_guid, 0, HIGHGUID_PLAYER));

    uint32 rc_account = 0;
    if(!receiver)
        rc_account = sObjectMgr.GetPlayerAccountIdByGUID(MAKE_NEW_GUID(receiver_guid, 0, HIGHGUID_PLAYER));

    if(!receiver && !rc_account)                            // sender not exist
    {
        deleteIncludedItems(true);
        return;
    }

    // prepare mail and send in other case
    bool needItemDelay = false;

    if(!m_items.empty())
    {
        // if item send to character at another account, then apply item delivery delay
        needItemDelay = sender_acc != rc_account;

        // set owner to new receiver (to prevent delete item with sender char deleting)
        CharacterDatabase.BeginTransaction();
        for(MailItemMap::iterator mailItemIter = m_items.begin(); mailItemIter != m_items.end(); ++mailItemIter)
        {
            Item* item = mailItemIter->second;
            item->SaveToDB();                      // item not in inventory and can be save standalone
            // owner in data will set at mail receive and item extracting
            CharacterDatabase.PExecute("UPDATE item_instance SET owner_guid = '%u' WHERE guid='%u'", receiver_guid, item->GetGUIDLow());
        }
        CharacterDatabase.CommitTransaction();
    }

    // If theres is an item, there is a one hour delivery delay.
    uint32 deliver_delay = needItemDelay ? sWorld.getConfig(CONFIG_MAIL_DELIVERY_DELAY) : 0;

    // will delete item or place to receiver mail list
    if (sender_guid == auctionbot.GetAHBplayerGUID())
    {
        SendMailTo(MailReceiver(receiver,receiver_guid), MailSender(MAIL_CREATURE, sender_guid), MAIL_CHECK_MASK_RETURNED, deliver_delay);
    }
    else
    {
        SendMailTo(MailReceiver(receiver,receiver_guid), MailSender(MAIL_NORMAL, sender_guid), MAIL_CHECK_MASK_RETURNED, deliver_delay);
    }
}
Example #4
0
void MailDraft::SendReturnToSender(uint32 sender_acc, uint32 sender_guid,
        uint32 receiver_guid, SQLTransaction& trans) {
    Player *receiver = sObjectMgr->GetPlayer(
            MAKE_NEW_GUID(receiver_guid, 0, HIGHGUID_PLAYER));

    uint32 rc_account = 0;
    if (!receiver)
        rc_account = sObjectMgr->GetPlayerAccountIdByGUID(
                MAKE_NEW_GUID(receiver_guid, 0, HIGHGUID_PLAYER));

    if (!receiver && !rc_account) // sender not exist
            {
        deleteIncludedItems(trans, true);
        return;
    }

    // prepare mail and send in other case
    bool needItemDelay = false;

    if (!m_items.empty()) {
        // if item send to character at another account, then apply item delivery delay
        needItemDelay = sender_acc != rc_account;

        // set owner to new receiver (to prevent delete item with sender char deleting)
        for (MailItemMap::iterator mailItemIter = m_items.begin();
                mailItemIter != m_items.end(); ++mailItemIter) {
            Item* item = mailItemIter->second;
            item->SaveToDB(trans); // item not in inventory and can be save standalone
            // owner in data will set at mail receive and item extracting
            PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(
                    CHAR_SET_ITEM_OWNER);
            stmt->setUInt32(0, receiver_guid);
            stmt->setUInt32(1, item->GetGUIDLow());
            trans->Append(stmt);
        }
    }

    // If theres is an item, there is a one hour delivery delay.
    uint32 deliver_delay =
            needItemDelay ?
                    sWorld->getIntConfig(CONFIG_MAIL_DELIVERY_DELAY) : 0;

    // will delete item or place to receiver mail list
    SendMailTo(trans, MailReceiver(receiver, receiver_guid),
            MailSender(MAIL_NORMAL, sender_guid), MAIL_CHECK_MASK_RETURNED,
            deliver_delay);
}
Example #5
0
void MailDraft::SendReturnToSender(uint32 sender_acc, uint32 sender_guid, uint32 receiver_guid, SQLTransaction& trans)
{
    Player* receiver = ObjectAccessor::FindPlayerInOrOutOfWorld(MAKE_NEW_GUID(receiver_guid, 0, HIGHGUID_PLAYER));

    uint32 rc_account = 0;
    if (!receiver)
        rc_account = sObjectMgr->GetPlayerAccountIdByGUID(MAKE_NEW_GUID(receiver_guid, 0, HIGHGUID_PLAYER));

    if (!receiver && !rc_account)                            // sender not exist
    {
        deleteIncludedItems(trans, true);
        return;
    }

    if (!m_items.empty())
    {
        // if item send to character at another account, then apply item delivery delay
        //needItemDelay = sender_acc != rc_account;

        // set owner to new receiver (to prevent delete item with sender char deleting)
        for (MailItemMap::iterator mailItemIter = m_items.begin(); mailItemIter != m_items.end(); ++mailItemIter)
        {
            Item* item = mailItemIter->second;
            item->SaveToDB(trans);                      // item not in inventory and can be save standalone
            // owner in data will set at mail receive and item extracting
            PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_OWNER);
            stmt->setUInt32(0, receiver_guid);
            stmt->setUInt32(1, item->GetGUIDLow());
            trans->Append(stmt);
        }
    }

    // xinef: WowWiki: "Return mail arrives immediately."

    // will delete item or place to receiver mail list
    SendMailTo(trans, MailReceiver(receiver, receiver_guid), MailSender(MAIL_NORMAL, sender_guid), MAIL_CHECK_MASK_RETURNED, 0);
}