void PoolMgr::ChangeDailyQuests() { for (PoolGroupQuestMap::iterator itr = mPoolQuestGroups.begin(); itr != mPoolQuestGroups.end(); ++itr) { if (sObjectMgr.GetQuestTemplate(itr->GetFirstEqualChancedObjectId())) { UpdatePool<Quest>(itr->GetPoolId(), 1); // anything non-zero means don't load from db } } SaveQuestsToDB(); }
void PoolMgr::ChangeWeeklyQuests() { for (PoolGroupQuestMap::iterator itr = mPoolQuestGroups.begin(); itr != mPoolQuestGroups.end(); ++itr) { if (Quest const* pQuest = sObjectMgr->GetQuestTemplate(itr->GetFirstEqualChancedObjectId())) { if (pQuest->IsDaily()) continue; UpdatePool<Quest>(itr->GetPoolId(), 1); } } SaveQuestsToDB(); }
void PoolMgr::ChangeDailyQuests() { for (PoolGroupQuestMap::iterator itr = mPoolQuestGroups.begin(); itr != mPoolQuestGroups.end(); ++itr) { if (Quest const* quest = sObjectMgr->GetQuestTemplate(itr->GetFirstEqualChancedObjectId())) { if (quest->IsWeekly()) continue; UpdatePool<Quest>(itr->GetPoolId(), 1); // anything non-zero means don't load from db } } SaveQuestsToDB(true, false, false); }
void PoolMgr::SaveQuestsToDB(bool daily, bool weekly, bool other) { SQLTransaction trans = CharacterDatabase.BeginTransaction(); // pussywizard: mysql thread races, change only what is meant to be changed std::set<uint32> deletedPools; for (PoolGroupQuestMap::iterator itr = mPoolQuestGroups.begin(); itr != mPoolQuestGroups.end(); ++itr) { if (itr->isEmpty()) continue; if (Quest const* quest = sObjectMgr->GetQuestTemplate(itr->GetFirstEqualChancedObjectId())) { if (!daily && quest->IsDaily()) continue; if (!weekly && quest->IsWeekly()) continue; if (!other && !quest->IsDaily() && !quest->IsWeekly()) continue; } PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_QUEST_POOL_SAVE); stmt->setUInt32(0, itr->GetPoolId()); trans->Append(stmt); deletedPools.insert(itr->GetPoolId()); } for (SearchMap::iterator itr = mQuestSearchMap.begin(); itr != mQuestSearchMap.end(); ++itr) if (deletedPools.find(itr->second) != deletedPools.end()) if (IsSpawnedObject<Quest>(itr->first)) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_QUEST_POOL_SAVE); stmt->setUInt32(0, itr->second); stmt->setUInt32(1, itr->first); trans->Append(stmt); } CharacterDatabase.CommitTransaction(trans); }