示例#1
0
void CharacterDatabaseCleaner::CleanDatabase()
{
    // config to disable
    if (!sWorld.getConfig(CONFIG_BOOL_CLEAN_CHARACTER_DB))
        return;

    sLog.outString("Cleaning character database...");

    // check flags which clean ups are necessary
    QueryResult* result = CharacterDatabase.PQuery("SELECT cleaning_flags FROM saved_variables");
    if (!result)
        return;
    uint32 flags = (*result)[0].GetUInt32();
    delete result;

    // clean up
    if (flags & CLEANING_FLAG_ACHIEVEMENT_PROGRESS)
        CleanCharacterAchievementProgress();
    if (flags & CLEANING_FLAG_SKILLS)
        CleanCharacterSkills();
    if (flags & CLEANING_FLAG_SPELLS)
        CleanCharacterSpell();
    if (flags & CLEANING_FLAG_TALENTS)
        CleanCharacterTalent();
    CharacterDatabase.Execute("UPDATE saved_variables SET cleaning_flags = 0");
}
void CharacterDatabaseCleaner::CleanDatabase()
{
    // config to disable
    if(!sWorld.getBoolConfig(CONFIG_CLEAN_CHARACTER_DB))
        return;

    sLog.outString("Cleaning character database...");

    // check flags which clean ups are necessary
    QueryResult result = CharacterDatabase.Query("SELECT value FROM worldstates WHERE entry=20004");
    if(!result)
        return;
    uint32 flags = (*result)[0].GetUInt32();

    // clean up
    if(flags & CLEANING_FLAG_ACHIEVEMENT_PROGRESS)
        CleanCharacterAchievementProgress();
    if(flags & CLEANING_FLAG_SKILLS)
        CleanCharacterSkills();
    if(flags & CLEANING_FLAG_SPELLS)
        CleanCharacterSpell();
    if(flags & CLEANING_FLAG_TALENTS)
        CleanCharacterTalent();
    CharacterDatabase.Query("UPDATE worldstates SET value = 0 WHERE entry=20004");
}
void CharacterDatabaseCleaner::CleanDatabase() {
	// config to disable
	if (!sWorld->getBoolConfig(CONFIG_CLEAN_CHARACTER_DB))
		return;

	sLog->outString("Cleaning character database...");

	uint32 oldMSTime = getMSTime();
	// check flags which clean ups are necessary
	QueryResult result = CharacterDatabase.Query(
			"SELECT value FROM worldstates WHERE entry = 20004");
	if (!result)
		return;

	uint32 flags = (*result)[0].GetUInt32();

	// clean up
	if (flags & CLEANING_FLAG_ACHIEVEMENT_PROGRESS)
		CleanCharacterAchievementProgress();

	if (flags & CLEANING_FLAG_SKILLS)
		CleanCharacterSkills();

	if (flags & CLEANING_FLAG_SPELLS)
		CleanCharacterSpell();

	if (flags & CLEANING_FLAG_TALENTS)
		CleanCharacterTalent();

	if (flags & CLEANING_FLAG_QUESTSTATUS)
		CleanCharacterQuestStatus();

	// NOTE: In order to have persistentFlags be set in worldstates for the next cleanup,
	// you need to define them at least once in worldstates.
	flags &= sWorld->getIntConfig(CONFIG_PERSISTENT_CHARACTER_CLEAN_FLAGS);
	CharacterDatabase.DirectPExecute(
			"UPDATE worldstates SET value = %u WHERE entry = 20004", flags);

	sWorld->SetCleaningFlags(flags);

	sLog->outString(">> Cleaned character database in %u ms",
			GetMSTimeDiffToNow(oldMSTime));
	sLog->outString();
}