bool BuffManager::CanAddBuff(const SBuffBaseData *pData, CFightObject *pSender) { if (!pData) { rfalse(4,1,"BuffManager::CanAddBuff(const SBuffBaseData *pData)1"); return false; } if (m_curObj&&pSender) { if (m_curObj->GetGID() != pSender->GetGID()) //给目标添加BUFF { if (!m_curObj->m_bPlayerAction[CST_ADDBUFF]) { rfalse(2, 1, "目标当前无法添加BUFF"); return false; } } } BuffGroup::iterator groupIt = m_buffGroup.find(pData->m_GroupID); if (groupIt == m_buffGroup.end()) { //rfalse(2, 1, "玩家身上没有Buff组%d中的Buff", pData->m_GroupID); //MY_ASSERT(m_buffList.end() == m_buffList.find(pData->m_ID)); return true; } BuffList::iterator buffIt = m_buffList.find(groupIt->second); if (buffIt == m_buffList.end()) { rfalse(4,1,"BuffManager::CanAddBuff(const SBuffBaseData *pData)2"); return false; } MY_ASSERT(m_buffList.end() != buffIt); //TODO:Tony Modify [2012-3-11]Comment:[IF语句后面有;] //if (pData->m_GroupID != buffIt->second->m_GroupID); /////////////////////////////////////////////////////////////////// if (pData->m_GroupID != buffIt->second->m_GroupID) { rfalse(4,1,"BuffManager::CanAddBuff(const SBuffBaseData *pData)3"); return false; } MY_ASSERT(pData->m_GroupID == buffIt->second->m_GroupID); if (!buffIt->second->m_CanBeReplaced) return false; // 如果可被替换,那么查看权重 if (buffIt->second->m_Weight > pData->m_Weight) return false; // 顶替 RemoveBuff(buffIt->second); return true; }
void BuffManager::Free() { BuffList copy(m_buffList); for (BuffList::iterator it = copy.begin(); it != copy.end(); ++it) RemoveBuff(it->second); if (g_InDebugMode) MY_ASSERT(m_buffList.empty() && "Buff管理器中的Buff没有被清干净!"); }
void BuffManager::CheckDelBuffType(DWORD delType) { BuffList copy(m_buffList); for (BuffList::iterator it = copy.begin(); it != copy.end(); ++it) { if (delType == it->second->m_PropertyID) RemoveBuff(it->second); } }
void BuffManager::CheckDelBuffSpot(DWORD delFlag) { if (0 == delFlag || (delFlag & (delFlag-1))) return; BuffList copy(m_buffList); for (BuffList::iterator it = copy.begin(); it != copy.end(); ++it) { if ((it->second->m_DeleteType & delFlag)&& (it->second->m_InturptRate != 0 || delFlag == BDT_DEAD) ) RemoveBuff(it->second); } return; }
bool NFCBuffModule::AddBuff( const NFIDENTID& self, const std::string& strConfig, const NFIDENTID& releaserIdent ) { //1 死亡判断 //2 最大MAX判断 //3 是否BUFF免疫判断 //4 BUFF是否存在判断 NFIBuffConfigModule::NFCBuffConfig* pBuffConfig = m_pBuffConfigModule->GetBuffConfig( strConfig ); if ( pBuffConfig ) { //5 是否有此BUFF判断,有则更新时间 if ( HasBuff( self, strConfig ) ) { //更新时间 SetBuffTime( self, strConfig, pBuffConfig->EffectTimeValue, pBuffConfig->EffectTimeInterval ); } else { //6 同组BUFF判断 if ( pBuffConfig->BuffGroupIDValue > 0 ) { std::string strOldConfig = GetGroupBuffIndex( self, pBuffConfig->BuffGroupIDValue ); if ( !strOldConfig.empty() ) { //同组只能一个BUFF,删掉老的 RemoveBuff( self, strOldConfig ); } } //不同的类型 if ( NFIBuffConfigModule::BuffType::BT_BUFF == pBuffConfig->BuffTypeValue ) { ProcessBuffValue( self, pBuffConfig, releaserIdent ); } else if ( NFIBuffConfigModule::BuffType::BT_DEBUFF == pBuffConfig->BuffTypeValue ) { ProcessDeBuffValue( self, pBuffConfig, releaserIdent ); } } } return true; }