in CUser::Process()
after
PHP Code:
if( IsLive() )
{
add
PHP Code:
#ifdef __SYS_ONLINECOUNT_BUFFS
this->ApplyOnlineBuff();
#endif // __SYS_ONLINECOUNT_BUFFS
at the end of the file add this:
PHP Code:
#ifdef __SYS_ONLINECOUNT_BUFFS
const int CUser::GetClosestCount()
{
int nNum = 0;
for (auto it : prj.m_aOnlineCountBuffs)
{
if (g_UserMng.GetCount() >= it.first)
nNum = it.first;
}
return nNum;
}
vector<int> CUser::GetValidCounts()
{
vector<int> nValidBuffs;
for (auto it : prj.m_aOnlineCountBuffs)
{
if (g_UserMng.GetCount() >= it.first)
nValidBuffs.push_back(it.second);
}
return nValidBuffs;
}
void CUser::RemoveOnlineBuffs()
{
vector<int> nValidBuffs = GetValidCounts();
for (auto it : prj.m_aOnlineCountBuffs)
{
if (__SYS_ONLINECOUNT_BUFFS_MODE == 1)
{
auto vec_it = std::find(nValidBuffs.begin(),nValidBuffs.end(),it.second);
if (HasBuff(BUFF_ITEM, it.second) && vec_it == nValidBuffs.end())
this->RemoveBuff(BUFF_ITEM, it.second);
}
else
{
if (this->HasBuff(BUFF_ITEM, it.second) && GetClosestCount() != it.first)
this->RemoveBuff(BUFF_ITEM, it.second);
}
}
}
void CUser::ApplyOnlineBuff()
{
this->RemoveOnlineBuffs();
if (__SYS_ONLINECOUNT_BUFFS_MODE == 1)
{
vector<int> nValidBuffs = GetValidCounts();
for (auto it : nValidBuffs)
{
ItemProp* pProp = prj.GetItemProp(it);
if (pProp && !HasBuff(BUFF_ITEM, it))
DoApplySkill(this, pProp, NULL);
}
}
else {
int nCount = GetClosestCount();
if (prj.m_aOnlineCountBuffs.find(nCount) == prj.m_aOnlineCountBuffs.end())
return;
ItemProp* pProp = prj.GetItemProp(prj.m_aOnlineCountBuffs.at(nCount));
if (pProp && !HasBuff(BUFF_ITEM, pProp->dwID))
DoApplySkill(this, pProp, NULL);
}
}
#endif // __SYS_ONLINECOUNT_BUFFS