bool ITEM_MANAGER::CreateDropItemVector(LPCHARACTER pkChr, LPCHARACTER pkKiller, std::vector<std::pair<int,int> > & vec_item)
{
if (pkChr->IsPolymorphed() || pkChr->IsPC())
return false;
int iLevel = pkKiller->GetLevel();
BYTE bRank = pkChr->GetMobRank();
std::vector<CItemDropInfo>::iterator it = g_vec_pkCommonDropItem[bRank].begin();
while (it != g_vec_pkCommonDropItem[bRank].end())
{
const CItemDropInfo & c_rInfo = *(it++);
if (iLevel < c_rInfo.m_iLevelStart || iLevel > c_rInfo.m_iLevelEnd)
continue;
TItemTable * table = GetTable(c_rInfo.m_dwVnum);
if (!table)
continue;
if(c_rInfo.m_dwVnum > 70103 && c_rInfo.m_dwVnum < 70108)
{
if (c_rInfo.m_dwVnum != pkChr->GetPolymorphItemVnum())
{
continue;
}
}
vec_item.emplace_back(std::make_pair(c_rInfo.m_dwVnum, 1));
}
// Drop Item Group
{
itertype(m_map_pkDropItemGroup) it;
it = m_map_pkDropItemGroup.find(pkChr->GetRaceNum());
if (it != m_map_pkDropItemGroup.end())
{
__typeof(it->second->GetVector()) v = it->second->GetVector();
for (DWORD i = 0; i < v.size(); ++i)
{
vec_item.emplace_back(std::make_pair(v[i].dwVnum, v[i].iCount));
}
}
}
// MobDropItem Group
{
itertype(m_map_pkMobItemGroup) it;
it = m_map_pkMobItemGroup.find(pkChr->GetRaceNum());
if ( it != m_map_pkMobItemGroup.end() )
{
CMobItemGroup* pGroup = it->second;
if (pGroup && !pGroup->IsEmpty())
{
const CMobItemGroup::SMobItemGroupInfo& info = pGroup->GetOne();
vec_item.emplace_back(std::make_pair(info.dwItemVnum, info.iCount));
}
}
}
// Level Item Group
{
itertype(m_map_pkLevelItemGroup) it;
it = m_map_pkLevelItemGroup.find(pkChr->GetRaceNum());
if ( it != m_map_pkLevelItemGroup.end() )
{
if ( it->second->GetLevelLimit() <= (DWORD)iLevel )
{
__typeof(it->second->GetVector()) v = it->second->GetVector();
for ( DWORD i=0; i < v.size(); i++ )
{
DWORD dwVnum = v[i].dwVNum;
vec_item.emplace_back(std::make_pair(dwVnum, v[i].iCount));
}
}
}
}
// ETC DropItem
if (pkChr->GetMobDropItemVnum())
{
itertype(m_map_dwEtcItemDropProb) it = m_map_dwEtcItemDropProb.find(pkChr->GetMobDropItemVnum());
if (it != m_map_dwEtcItemDropProb.end())
{
vec_item.emplace_back(std::make_pair(pkChr->GetMobDropItemVnum(), 1));
}
}
//Metin
if (pkChr->IsStone())
{
if (pkChr->GetDropMetinStoneVnum())
{
vec_item.emplace_back(std::make_pair(pkChr->GetDropMetinStoneVnum(), 1));
}
}
// BuyerTheitGloves Item Group
{
itertype(m_map_pkGloveItemGroup) it;
it = m_map_pkGloveItemGroup.find(pkChr->GetRaceNum());
if (it != m_map_pkGloveItemGroup.end())
{
__typeof(it->second->GetVector()) v = it->second->GetVector();
for (DWORD i = 0; i < v.size(); ++i)
{
vec_item.emplace_back(std::make_pair(v[i].dwVnum, v[i].iCount));
}
}
}
return vec_item.size();
}