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()); }
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); }
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); } }
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); }
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); }