mirror of
https://github.com/mangosfour/server.git
synced 2025-12-17 07:37:03 +00:00
[7113] Not update/store achievement progress for counter == 0
This commit is contained in:
parent
be051a706c
commit
9fba64aeae
5 changed files with 52 additions and 22 deletions
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `character_db_version`;
|
DROP TABLE IF EXISTS `character_db_version`;
|
||||||
CREATE TABLE `character_db_version` (
|
CREATE TABLE `character_db_version` (
|
||||||
`required_7100_01_characters_character_spell` bit(1) default NULL
|
`required_7113_01_characters_character_achievement_progress` bit(1) default NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Last applied sql update to DB';
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Last applied sql update to DB';
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
ALTER TABLE character_db_version CHANGE COLUMN required_7100_01_characters_character_spell required_7113_01_characters_character_achievement_progress bit;
|
||||||
|
|
||||||
|
DELETE FROM character_achievement_progress WHERE counter=0;
|
||||||
|
|
@ -141,6 +141,7 @@ pkgdata_DATA = \
|
||||||
7097_01_mangos_spell_proc_event.sql \
|
7097_01_mangos_spell_proc_event.sql \
|
||||||
7100_01_characters_character_spell.sql \
|
7100_01_characters_character_spell.sql \
|
||||||
7107_01_mangos_string.sql \
|
7107_01_mangos_string.sql \
|
||||||
|
7113_01_characters_character_achievement_progress.sql \
|
||||||
README
|
README
|
||||||
|
|
||||||
## Additional files to include when running 'make dist'
|
## Additional files to include when running 'make dist'
|
||||||
|
|
@ -262,4 +263,5 @@ EXTRA_DIST = \
|
||||||
7097_01_mangos_spell_proc_event.sql \
|
7097_01_mangos_spell_proc_event.sql \
|
||||||
7100_01_characters_character_spell.sql \
|
7100_01_characters_character_spell.sql \
|
||||||
7107_01_mangos_string.sql \
|
7107_01_mangos_string.sql \
|
||||||
|
7113_01_characters_character_achievement_progress.sql \
|
||||||
README
|
README
|
||||||
|
|
|
||||||
|
|
@ -141,7 +141,8 @@ void AchievementMgr::SaveToDB()
|
||||||
if(!m_criteriaProgress.empty())
|
if(!m_criteriaProgress.empty())
|
||||||
{
|
{
|
||||||
/// prepare deleting and insert
|
/// prepare deleting and insert
|
||||||
bool need_execute = false;
|
bool need_execute_del = false;
|
||||||
|
bool need_execute_ins = false;
|
||||||
std::ostringstream ssdel;
|
std::ostringstream ssdel;
|
||||||
std::ostringstream ssins;
|
std::ostringstream ssins;
|
||||||
for(CriteriaProgressMap::iterator iter = m_criteriaProgress.begin(); iter!=m_criteriaProgress.end(); ++iter)
|
for(CriteriaProgressMap::iterator iter = m_criteriaProgress.begin(); iter!=m_criteriaProgress.end(); ++iter)
|
||||||
|
|
@ -149,36 +150,53 @@ void AchievementMgr::SaveToDB()
|
||||||
if(!iter->second.changed)
|
if(!iter->second.changed)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/// first new/changed record prefix
|
// deleted data (including 0 progress state)
|
||||||
if(!need_execute)
|
|
||||||
{
|
{
|
||||||
ssdel << "DELETE FROM character_achievement_progress WHERE guid = " << GetPlayer()->GetGUIDLow() << " AND criteria IN (";
|
/// first new/changed record prefix (for any counter value)
|
||||||
ssins << "INSERT INTO character_achievement_progress (guid, criteria, counter, date) VALUES ";
|
if(!need_execute_del)
|
||||||
need_execute = true;
|
{
|
||||||
}
|
ssdel << "DELETE FROM character_achievement_progress WHERE guid = " << GetPlayer()->GetGUIDLow() << " AND criteria IN (";
|
||||||
/// next new/changed record prefix
|
need_execute_del = true;
|
||||||
else
|
}
|
||||||
{
|
/// next new/changed record prefix
|
||||||
ssdel << ", ";
|
else
|
||||||
ssins << ", ";
|
ssdel << ", ";
|
||||||
|
|
||||||
|
// new/changed record data
|
||||||
|
ssdel << iter->first;
|
||||||
}
|
}
|
||||||
|
|
||||||
// new/changed record data
|
// store data only for real progress
|
||||||
ssdel << iter->first;
|
if(iter->second.counter != 0)
|
||||||
ssins << "(" << GetPlayer()->GetGUIDLow() << ", " << iter->first << ", " << iter->second.counter << ", " << iter->second.date << ")";
|
{
|
||||||
|
/// first new/changed record prefix
|
||||||
|
if(!need_execute_ins)
|
||||||
|
{
|
||||||
|
ssins << "INSERT INTO character_achievement_progress (guid, criteria, counter, date) VALUES ";
|
||||||
|
need_execute_ins = true;
|
||||||
|
}
|
||||||
|
/// next new/changed record prefix
|
||||||
|
else
|
||||||
|
ssins << ", ";
|
||||||
|
|
||||||
/// mark as saved in db
|
// new/changed record data
|
||||||
|
ssins << "(" << GetPlayer()->GetGUIDLow() << ", " << iter->first << ", " << iter->second.counter << ", " << iter->second.date << ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// mark as updated in db
|
||||||
iter->second.changed = false;
|
iter->second.changed = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(need_execute)
|
if(need_execute_del) // DELETE ... IN (.... _)_
|
||||||
ssdel << ")";
|
ssdel << ")";
|
||||||
|
|
||||||
if(need_execute)
|
if(need_execute_del || need_execute_ins)
|
||||||
{
|
{
|
||||||
CharacterDatabase.BeginTransaction ();
|
CharacterDatabase.BeginTransaction ();
|
||||||
CharacterDatabase.Execute( ssdel.str().c_str() );
|
if(need_execute_del)
|
||||||
CharacterDatabase.Execute( ssins.str().c_str() );
|
CharacterDatabase.Execute( ssdel.str().c_str() );
|
||||||
|
if(need_execute_ins)
|
||||||
|
CharacterDatabase.Execute( ssins.str().c_str() );
|
||||||
CharacterDatabase.CommitTransaction ();
|
CharacterDatabase.CommitTransaction ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -729,6 +747,10 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry,
|
||||||
|
|
||||||
if(iter == m_criteriaProgress.end())
|
if(iter == m_criteriaProgress.end())
|
||||||
{
|
{
|
||||||
|
// not create record for 0 counter
|
||||||
|
if(newValue == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
progress = &m_criteriaProgress[entry->ID];
|
progress = &m_criteriaProgress[entry->ID];
|
||||||
progress->counter = newValue;
|
progress->counter = newValue;
|
||||||
progress->date = time(NULL);
|
progress->date = time(NULL);
|
||||||
|
|
@ -738,8 +760,11 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry,
|
||||||
progress = &iter->second;
|
progress = &iter->second;
|
||||||
if(relative)
|
if(relative)
|
||||||
newValue += progress->counter;
|
newValue += progress->counter;
|
||||||
|
|
||||||
|
// not update (not mark as changed) if counter will have same value
|
||||||
if(progress->counter == newValue)
|
if(progress->counter == newValue)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
progress->counter = newValue;
|
progress->counter = newValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "7112"
|
#define REVISION_NR "7113"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue