本文整理汇总了C++中ActivePoolObjects::begin方法的典型用法代码示例。如果您正苦于以下问题:C++ ActivePoolObjects::begin方法的具体用法?C++ ActivePoolObjects::begin怎么用?C++ ActivePoolObjects::begin使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ActivePoolObjects
的用法示例。
在下文中一共展示了ActivePoolObjects::begin方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: tempObj
void PoolGroup<Quest>::SpawnObject (ActivePoolData& spawns, uint32 limit, uint32 triggerFrom)
{
sLog->outDebug(LOG_FILTER_POOLSYS, "PoolGroup<Quest>: Spawning pool %u", poolId);
// load state from db
if (!triggerFrom)
{
QueryResult result = CharacterDatabase.PQuery("SELECT quest_id FROM pool_quest_save WHERE pool_id = %u", poolId);
if (result)
{
do
{
uint32 questId = result->Fetch()[0].GetUInt32();
spawns.ActivateObject<Quest>(questId, poolId);
PoolObject tempObj(questId, 0.0f);
Spawn1Object(&tempObj);
--limit;
}
while (result->NextRow() && limit);
return;
}
}
ActivePoolObjects currentQuests = spawns.GetActiveQuests();
ActivePoolObjects newQuests;
// always try to select different quests
for (PoolObjectList::iterator itr = EqualChanced.begin(); itr != EqualChanced.end(); ++itr)
{
if (spawns.IsActiveObject<Quest>(itr->guid))
continue;
newQuests.insert(itr->guid);
}
// clear the pool
DespawnObject(spawns);
// recycle minimal amount of quests if possible count is lower than limit
if (limit > newQuests.size() && !currentQuests.empty())
{
do
{
ActivePoolObjects::iterator itr = currentQuests.begin();
std::advance(itr, urand(0, currentQuests.size() - 1));
newQuests.insert(*itr);
currentQuests.erase(*itr);
}
while (newQuests.size() < limit && !currentQuests.empty()); // failsafe
}
if (newQuests.empty())
return;
// activate <limit> random quests
do
{
ActivePoolObjects::iterator itr = newQuests.begin();
std::advance(itr, urand(0, newQuests.size() - 1));
spawns.ActivateObject<Quest>(*itr, poolId);
PoolObject tempObj(*itr, 0.0f);
Spawn1Object(&tempObj);
newQuests.erase(itr);
--limit;
}
while (limit && newQuests.size());
// if we are here it means the pool is initialized at startup and did not have previous saved state
if (!triggerFrom)
sPoolMgr->SaveQuestsToDB();
}