mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 16:37:01 +00:00
[7802] Use more appropriate field types in character_achievement* tables. Better check data at loading.
This commit is contained in:
parent
f53d06ad70
commit
fffaec6d71
6 changed files with 54 additions and 12 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_7644_01_characters_character_pet` bit(1) default NULL
|
`required_7802_02_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';
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
@ -253,9 +253,9 @@ UNLOCK TABLES;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `character_achievement`;
|
DROP TABLE IF EXISTS `character_achievement`;
|
||||||
CREATE TABLE `character_achievement` (
|
CREATE TABLE `character_achievement` (
|
||||||
`guid` int(11) NOT NULL,
|
`guid` int(11) unsigned NOT NULL,
|
||||||
`achievement` int(11) NOT NULL,
|
`achievement` int(11) unsigned NOT NULL,
|
||||||
`date` int(11) NOT NULL,
|
`date` bigint(11) unsigned NOT NULL default '0',
|
||||||
PRIMARY KEY (`guid`,`achievement`)
|
PRIMARY KEY (`guid`,`achievement`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
|
@ -274,10 +274,10 @@ UNLOCK TABLES;
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `character_achievement_progress`;
|
DROP TABLE IF EXISTS `character_achievement_progress`;
|
||||||
CREATE TABLE `character_achievement_progress` (
|
CREATE TABLE `character_achievement_progress` (
|
||||||
`guid` int(11) NOT NULL,
|
`guid` int(11) unsigned NOT NULL,
|
||||||
`criteria` int(11) NOT NULL,
|
`criteria` int(11) unsigned NOT NULL,
|
||||||
`counter` int(11) NOT NULL,
|
`counter` int(11) unsigned NOT NULL,
|
||||||
`date` int(11) NOT NULL,
|
`date` bigint(11) unsigned NOT NULL default '0',
|
||||||
PRIMARY KEY (`guid`,`criteria`)
|
PRIMARY KEY (`guid`,`criteria`)
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
|
|
|
||||||
6
sql/updates/7802_01_characters_character_achievement.sql
Normal file
6
sql/updates/7802_01_characters_character_achievement.sql
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
ALTER TABLE character_db_version CHANGE COLUMN required_7644_01_characters_character_pet required_7802_01_characters_character_achievement bit;
|
||||||
|
|
||||||
|
ALTER TABLE character_achievement
|
||||||
|
CHANGE COLUMN guid guid int(11) unsigned NOT NULL,
|
||||||
|
CHANGE COLUMN achievement achievement int(11) unsigned NOT NULL,
|
||||||
|
CHANGE COLUMN date date bigint(11) unsigned NOT NULL default '0';
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
ALTER TABLE character_db_version CHANGE COLUMN required_7802_01_characters_character_achievement required_7802_02_characters_character_achievement_progress bit;
|
||||||
|
|
||||||
|
ALTER TABLE character_achievement_progress
|
||||||
|
CHANGE COLUMN guid guid int(11) unsigned NOT NULL,
|
||||||
|
CHANGE COLUMN criteria criteria int(11) unsigned NOT NULL,
|
||||||
|
CHANGE COLUMN counter counter int(11) unsigned NOT NULL,
|
||||||
|
CHANGE COLUMN date date bigint(11) unsigned NOT NULL default '0';
|
||||||
|
|
@ -182,6 +182,8 @@ pkgdata_DATA = \
|
||||||
7782_01_mangos_spell_proc_event.sql \
|
7782_01_mangos_spell_proc_event.sql \
|
||||||
7796_01_mangos_command.sql \
|
7796_01_mangos_command.sql \
|
||||||
7796_02_mangos_mangos_string.sql \
|
7796_02_mangos_mangos_string.sql \
|
||||||
|
7802_01_characters_character_achievement.sql \
|
||||||
|
7802_02_characters_character_achievement_progress.sql \
|
||||||
README
|
README
|
||||||
|
|
||||||
## Additional files to include when running 'make dist'
|
## Additional files to include when running 'make dist'
|
||||||
|
|
@ -344,4 +346,6 @@ EXTRA_DIST = \
|
||||||
7782_01_mangos_spell_proc_event.sql \
|
7782_01_mangos_spell_proc_event.sql \
|
||||||
7796_01_mangos_command.sql \
|
7796_01_mangos_command.sql \
|
||||||
7796_02_mangos_mangos_string.sql \
|
7796_02_mangos_mangos_string.sql \
|
||||||
|
7802_01_characters_character_achievement.sql \
|
||||||
|
7802_02_characters_character_achievement_progress.sql \
|
||||||
README
|
README
|
||||||
|
|
|
||||||
|
|
@ -407,7 +407,14 @@ void AchievementMgr::LoadFromDB(QueryResult *achievementResult, QueryResult *cri
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
Field *fields = achievementResult->Fetch();
|
Field *fields = achievementResult->Fetch();
|
||||||
CompletedAchievementData& ca = m_completedAchievements[fields[0].GetUInt32()];
|
|
||||||
|
uint32 achievement_id = fields[0].GetUInt32();
|
||||||
|
|
||||||
|
// don't must happen: cleanup at server startup in achievementmgr.LoadCompletedAchievements()
|
||||||
|
if(!sAchievementStore.LookupEntry(achievement_id))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
CompletedAchievementData& ca = m_completedAchievements[achievement_id];
|
||||||
ca.date = time_t(fields[1].GetUInt64());
|
ca.date = time_t(fields[1].GetUInt64());
|
||||||
ca.changed = false;
|
ca.changed = false;
|
||||||
} while(achievementResult->NextRow());
|
} while(achievementResult->NextRow());
|
||||||
|
|
@ -425,7 +432,15 @@ void AchievementMgr::LoadFromDB(QueryResult *achievementResult, QueryResult *cri
|
||||||
time_t date = time_t(fields[2].GetUInt64());
|
time_t date = time_t(fields[2].GetUInt64());
|
||||||
|
|
||||||
AchievementCriteriaEntry const* criteria = sAchievementCriteriaStore.LookupEntry(id);
|
AchievementCriteriaEntry const* criteria = sAchievementCriteriaStore.LookupEntry(id);
|
||||||
if (!criteria || (criteria->timeLimit && time_t(date + criteria->timeLimit) < time(NULL)))
|
if (!criteria)
|
||||||
|
{
|
||||||
|
// we will remove not existed criteria for all characters
|
||||||
|
sLog.outError("Not existed achievement creataria %u data removed from table `character_achievement_progress`.",id);
|
||||||
|
CharacterDatabase.PExecute("DELETE FROM character_achievement_progress WHERE criteria = %u",id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (criteria->timeLimit && time_t(date + criteria->timeLimit) < time(NULL))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
CriteriaProgress& progress = m_criteriaProgress[id];
|
CriteriaProgress& progress = m_criteriaProgress[id];
|
||||||
|
|
@ -1763,7 +1778,17 @@ void AchievementGlobalMgr::LoadCompletedAchievements()
|
||||||
{
|
{
|
||||||
bar.step();
|
bar.step();
|
||||||
Field *fields = result->Fetch();
|
Field *fields = result->Fetch();
|
||||||
m_allCompletedAchievements.insert(fields[0].GetUInt32());
|
|
||||||
|
uint32 achievement_id = fields[0].GetUInt32();
|
||||||
|
if(!sAchievementStore.LookupEntry(achievement_id))
|
||||||
|
{
|
||||||
|
// we will remove not existed achievement for all characters
|
||||||
|
sLog.outError("Not existed achievement %u data removed from table `character_achievement`.",achievement_id);
|
||||||
|
CharacterDatabase.PExecute("DELETE FROM character_achievement WHERE achievement = %u",achievement_id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_allCompletedAchievements.insert(achievement_id);
|
||||||
} while(result->NextRow());
|
} while(result->NextRow());
|
||||||
|
|
||||||
delete result;
|
delete result;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "7801"
|
#define REVISION_NR "7802"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue