His frunction has 3 parameters but only 2 are used, so I just removed the 3'th parameter.
In addition he is using c++14 that has std::unique_ptr and c++11 doesn't, so I googled it and found that template function.
Enjoy.
#ifdef ENABLE_SHOW_CHEST_DROP
#include "../../libgame/include/grid.h"
template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args) {
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
void ITEM_MANAGER::GetChestItemList(DWORD dwChestVnum, std::vector<TChestDropInfoTable>& vec_item)
{
const auto pGroup = GetSpecialItemGroup(dwChestVnum);
if (!pGroup)
return;
std::vector<std::unique_ptr<CGrid>> pGrids;
pGrids.emplace_back(make_unique<CGrid>(15, 5));
for (int i = 0; i < pGroup->GetGroupSize(); i++) {
const auto itemTable = GetTable(pGroup->GetVnum(i));
//pass if exp, yang or duplicate item
if (!itemTable || !itemTable->dwVnum || itemTable->dwVnum < 3 || std::find_if(vec_item.begin(), vec_item.end(), [&pGroup, &i](const TChestDropInfoTable& data) -> bool { return static_cast<DWORD>(pGroup->GetVnum(i)) == data.dwItemVnum; }) != vec_item.end())
continue;
bool PushNewGrid = true;
for (size_t iPage = 0; iPage < pGrids.size(); iPage++) {
const auto iPos = pGrids.at(iPage)->FindBlank(1, static_cast<int>(itemTable->bSize));
if (iPos >= 0) {
pGrids.at(iPage)->Put(iPos, 1, static_cast<int>(itemTable->bSize));
vec_item.push_back({ static_cast<BYTE>(iPage + 1), static_cast<BYTE>(iPos), static_cast<DWORD>(pGroup->GetVnum(i)), static_cast<BYTE>(pGroup->GetCount(i)) });
PushNewGrid = false;
break;
}
}
if (PushNewGrid) {
pGrids.emplace_back(make_unique<CGrid>(15, 5));
i--;//again
}
}
}
#endif