之前是玩家背包每個東西都是滿的,副本掉落,會掉很多東西,因為玩家背包都滿了,需要發送郵件,當時主程就要求這些東西作為一封郵件發出去
首先是獲取之前db_req中有沒有郵件
bool bDBMailExist = m_userMailStrategy->GetExistMailWithAttach(db_req->mutable_mails(), pDBMail);
現成的代碼。如果存在給這些郵件直接添加附件
m_userMailStrategy->AddAttachTo(gameEle, pDBMail);
m_userMailStrategy->AddAttachTo(gameEle, pUserMail);
bool CUserMailStrategy::AddAttachTo(const struct_game_element& gameEle, db_user_mail* pDBMail) {ASSERT(pDBMail);::google::protobuf::RepeatedPtrField< ::db_mail_attach >::iterator iter = pDBMail->mutable_attachs()->begin();for (; iter != pDBMail->mutable_attachs()->end(); ++iter){if (iter->mutable_element()->type() == gameEle.type()){if (gameEle.type() != struct_game_element::EELEMENTTYPE_ITEM || iter->mutable_element()->id() == gameEle.id())//非道具類型直接疊加 {iter->mutable_element()->set_num(iter->mutable_element()->num() + gameEle.num());return true;}}}db_mail_attach* pAttach = pDBMail->add_attachs();pAttach->set_attach_id(CMailMgr::GetInstance()->CreateId(eIdType_MailAttach));pAttach->mutable_element()->CopyFrom(gameEle);return true; }
說實話我不喜歡寫這些代碼,在某些特殊出現的情況下的優化,實在是太花時間,現在我要優化,看著這些我都蛋疼,這樣的代碼很容易出錯,寫的時候要小心,哎,還是按照這個模式來吧。
不過如果剛開始設計的好,這些需求實現起來應該也簡單