aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp91
-rw-r--r--src/server/shared/Database/Implementation/CharacterDatabase.cpp9
-rw-r--r--src/server/shared/Database/Implementation/CharacterDatabase.h8
-rw-r--r--src/server/shared/Database/Implementation/WorldDatabase.cpp1
-rw-r--r--src/server/shared/Database/Implementation/WorldDatabase.h1
5 files changed, 42 insertions, 68 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 4bfb65b9989..7d03c397e60 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -1806,7 +1806,8 @@ void ObjectMgr::LoadCreatureRespawnTimes()
void ObjectMgr::LoadGameobjectRespawnTimes()
{
// remove outdated data
- WorldDatabase.DirectExecute("DELETE FROM gameobject_respawn WHERE respawntime <= UNIX_TIMESTAMP(NOW())");
+ PreparedStatement *stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_GAMEOBJECT_RESPAWN_TIMES);
+ WorldDatabase.Execute(stmt);
uint32 count = 0;
@@ -3547,8 +3548,13 @@ void ObjectMgr::LoadGuilds()
//delete unused LogGuid records in guild_eventlog and guild_bank_eventlog table
//you can comment these lines if you don't plan to change CONFIG_GUILD_EVENT_LOG_COUNT and CONFIG_GUILD_BANK_EVENT_LOG_COUNT
- CharacterDatabase.PQuery("DELETE FROM guild_eventlog WHERE LogGuid > '%u'", sWorld.getIntConfig(CONFIG_GUILD_EVENT_LOG_COUNT));
- CharacterDatabase.PQuery("DELETE FROM guild_bank_eventlog WHERE LogGuid > '%u'", sWorld.getIntConfig(CONFIG_GUILD_BANK_EVENT_LOG_COUNT));
+ PreparedStatement *guildEventLogStmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_OLD_GUILD_EVENT_LOGS);
+ guildEventLogStmt->setUInt32(0, sWorld.getIntConfig(CONFIG_GUILD_EVENT_LOG_COUNT));
+ CharacterDatabase.Execute(guildEventLogStmt);
+
+ PreparedStatement *guildBankEventLogStmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_OLD_GUILD_BANK_EVENT_LOGS);
+ guildBankEventLogStmt->setUInt32(0, sWorld.getIntConfig(CONFIG_GUILD_BANK_EVENT_LOG_COUNT));
+ CharacterDatabase.Execute(guildBankEventLogStmt);
sLog.outString();
sLog.outString(">> Loaded %u guild definitions", mGuildMap.size());
@@ -3707,7 +3713,12 @@ void ObjectMgr::LoadGuildBanks(std::vector<Guild*>& GuildVector, QueryResult& re
Item *pItem = NewItemOrBag(proto);
if (!pItem->LoadFromDB(ItemGuid, 0, itemResult, ItemEntry))
{
- CharacterDatabase.PExecute("DELETE FROM guild_bank_item WHERE guildid='%u' AND TabId='%u' AND SlotId='%u'", guildid, uint32(TabId), uint32(SlotId));
+ PreparedStatement *stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_NONEXISTENT_GUILD_BANK_ITEM);
+ stmt->setUInt32(0, guildid);
+ stmt->setUInt32(1, uint32(TabId));
+ stmt->setUInt32(2, uint32(SlotId));
+ CharacterDatabase.Execute(stmt);
+
sLog.outError("Item GUID %u not found in item_instance, deleting from Guild Bank!", ItemGuid);
delete pItem;
continue;
@@ -3780,14 +3791,14 @@ void ObjectMgr::LoadGroups()
// Consistency cleaning before load to avoid having to do some checks later
// Delete all members that does not exist
- CharacterDatabase.PExecute("DELETE FROM group_member WHERE NOT EXISTS (SELECT guid FROM characters WHERE guid=memberGuid)");
+ CharacterDatabase.Execute(CharacterDatabase.GetPreparedStatement(CHAR_DEL_NONEXISTENT_CHARACTER_GROUP_MEMBERS));
// Delete all groups whose leader does not exist
- CharacterDatabase.PExecute("DELETE FROM groups WHERE NOT EXISTS (SELECT guid FROM characters WHERE guid=leaderGuid)");
+ CharacterDatabase.Execute(CharacterDatabase.GetPreparedStatement(CHAR_DEL_LEADERLESS_GROUPS));
// Delete all groups with less than 2 members
- CharacterDatabase.PExecute("DELETE FROM groups WHERE guid NOT IN (SELECT guid FROM group_member GROUP BY guid HAVING COUNT(guid) > 1)");
+ CharacterDatabase.Execute(CharacterDatabase.GetPreparedStatement(CHAR_DEL_TINY_GROUPS));
// Delete all rows from group_member or group_instance with no group
- CharacterDatabase.PExecute("DELETE FROM group_member WHERE guid NOT IN (SELECT guid FROM groups)");
- CharacterDatabase.PExecute("DELETE FROM group_instance WHERE guid NOT IN (SELECT guid FROM groups)");
+ CharacterDatabase.Execute(CharacterDatabase.GetPreparedStatement(CHAR_DEL_NONEXISTENT_GROUP_MEMBERS));
+ CharacterDatabase.Execute(CharacterDatabase.GetPreparedStatement(CHAR_DEL_NONEXISTENT_GROUP_INSTANCES));
// ----------------------- Load Group definitions
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
@@ -5479,11 +5490,6 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
return; // any mails need to be returned or deleted
}
- //std::ostringstream delitems, delmails; //will be here for optimization
- //bool deletemail = false, deleteitem = false;
- //delitems << "DELETE FROM item_instance WHERE guid IN (";
- //delmails << "DELETE FROM mail WHERE id IN ("
-
barGoLink bar(result->GetRowCount());
uint32 count = 0;
Field *fields;
@@ -5505,15 +5511,17 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
m->checked = fields[7].GetUInt32();
m->mailTemplateId = fields[8].GetInt16();
- Player *pl = 0;
+ Player *pl = NULL;
if (serverUp)
pl = GetPlayer((uint64)m->receiver);
+
if (pl && pl->m_mailsLoaded)
{ //this code will run very improbably (the time is between 4 and 5 am, in game is online a player, who has old mail
//his in mailbox and he has already listed his mails)
delete m;
continue;
}
+
//delete or return mail:
if (has_items)
{
@@ -5547,8 +5555,6 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
}
}
- //deletemail = true;
- //delmails << m->messageID << ", ";
CharacterDatabase.PExecute("DELETE FROM mail WHERE id = '%u'", m->messageID);
delete m;
++count;
@@ -6548,11 +6554,6 @@ inline void CheckGOLinkedTrapId(GameObjectInfo const* goInfo,uint32 dataN,uint32
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data%d=%u but GO (Entry %u) have not GAMEOBJECT_TYPE_TRAP (%u) type.",
goInfo->id,goInfo->type,N,dataN,dataN,GAMEOBJECT_TYPE_TRAP);
}
- /* disable check for while (too many error reports baout not existed in trap templates
- else
- sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data%d=%u but trap GO (Entry %u) not exist in `gameobject_template`.",
- goInfo->id,goInfo->type,N,dataN,dataN);
- */
}
inline void CheckGOSpellId(GameObjectInfo const* goInfo,uint32 dataN,uint32 N)
@@ -6648,10 +6649,6 @@ void ObjectMgr::LoadGameobjectInfo()
{
if (goInfo->trap.lockId)
CheckGOLockId(goInfo,goInfo->trap.lockId,0);
- /* disable check for while, too many not existed spells
- if (goInfo->trap.spellId) // spell
- CheckGOSpellId(goInfo,goInfo->trap.spellId,3);
- */
break;
}
case GAMEOBJECT_TYPE_CHAIR: //7
@@ -6683,10 +6680,6 @@ void ObjectMgr::LoadGameobjectInfo()
sLog.outErrorDb("Gameobject (Entry: %u GoType: %u) have data7=%u but PageText (Entry %u) not exist.",
id,goInfo->type,goInfo->goober.pageId,goInfo->goober.pageId);
}
- /* disable check for while, too many not existed spells
- if (goInfo->goober.spellId) // spell
- CheckGOSpellId(goInfo,goInfo->goober.spellId,10);
- */
CheckGONoDamageImmuneId(goInfo,goInfo->goober.noDamageImmune,11);
if (goInfo->goober.linkedTrapId) // linked trap
CheckGOLinkedTrapId(goInfo,goInfo->goober.linkedTrapId,12);
@@ -6715,13 +6708,7 @@ void ObjectMgr::LoadGameobjectInfo()
break;
}
case GAMEOBJECT_TYPE_SUMMONING_RITUAL: //18
- {
- /* disable check for while, too many not existed spells
- // always must have spell
- CheckGOSpellId(goInfo,goInfo->summoningRitual.spellId,1);
- */
break;
- }
case GAMEOBJECT_TYPE_SPELLCASTER: //22
{
// always must have spell
@@ -9068,14 +9055,6 @@ void ObjectMgr::LoadCreatureClassLevelStats()
stats.BaseMana = fields[5].GetUInt32();
stats.BaseArmor = fields[6].GetUInt32();
-/* With uint8 Level can't be greater than STRONG_MAX_LEVEL
- if (Level > STRONG_MAX_LEVEL)
- {
- sLog.outErrorDb("Creature base stats for class %u has invalid level %u (max is %u) - set to %u",
- Class, Level, STRONG_MAX_LEVEL, STRONG_MAX_LEVEL);
- Level = STRONG_MAX_LEVEL;
- }
-*/
if (!Class || ((1 << (Class - 1)) & CLASSMASK_ALL_CREATURES) == 0)
sLog.outErrorDb("Creature base stats for level %u has invalid class %u",
Level, Class);
@@ -9138,17 +9117,11 @@ void ObjectMgr::LoadFactionChangeAchievements()
uint32 horde = fields[1].GetUInt32();
if (!sAchievementStore.LookupEntry(alliance))
- {
sLog.outErrorDb("Achievement %u referenced in `player_factionchange_achievement` does not exist, pair skipped!", alliance);
- }
else if (!sAchievementStore.LookupEntry(horde))
- {
sLog.outErrorDb("Achievement %u referenced in `player_factionchange_achievement` does not exist, pair skipped!", horde);
- }
else
- {
factionchange_achievements[alliance] = horde;
- }
bar.step();
++counter;
@@ -9183,17 +9156,11 @@ void ObjectMgr::LoadFactionChangeItems()
uint32 horde = fields[1].GetUInt32();
if (!GetItemPrototype(alliance))
- {
sLog.outErrorDb("Item %u referenced in `player_factionchange_items` does not exist, pair skipped!", alliance);
- }
else if (!GetItemPrototype(horde))
- {
sLog.outErrorDb("Item %u referenced in `player_factionchange_items` does not exist, pair skipped!", horde);
- }
else
- {
factionchange_items[alliance] = horde;
- }
bar.step();
++counter;
@@ -9228,17 +9195,11 @@ void ObjectMgr::LoadFactionChangeSpells()
uint32 horde = fields[1].GetUInt32();
if (!sSpellStore.LookupEntry(alliance))
- {
sLog.outErrorDb("Spell %u referenced in `player_factionchange_spells` does not exist, pair skipped!", alliance);
- }
else if (!sSpellStore.LookupEntry(horde))
- {
sLog.outErrorDb("Spell %u referenced in `player_factionchange_spells` does not exist, pair skipped!", horde);
- }
else
- {
factionchange_spells[alliance] = horde;
- }
bar.step();
++counter;
@@ -9273,17 +9234,11 @@ void ObjectMgr::LoadFactionChangeReputations()
uint32 horde = fields[1].GetUInt32();
if (!sFactionStore.LookupEntry(alliance))
- {
sLog.outErrorDb("Reputation %u referenced in `player_factionchange_reputations` does not exist, pair skipped!", alliance);
- }
else if (!sFactionStore.LookupEntry(horde))
- {
sLog.outErrorDb("Reputation %u referenced in `player_factionchange_reputations` does not exist, pair skipped!", horde);
- }
else
- {
factionchange_reputations[alliance] = horde;
- }
bar.step();
++counter;
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.cpp b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
index 176ac45ae1a..02825bfc6eb 100644
--- a/src/server/shared/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.cpp
@@ -31,6 +31,15 @@ bool CharacterDatabaseConnection::Open(const std::string& infoString)
*/
PrepareStatement(CHAR_DEL_QUEST_POOL_SAVE, "DELETE FROM pool_quest_save WHERE pool_id = ?");
PrepareStatement(CHAR_ADD_QUEST_POOL_SAVE, "INSERT INTO pool_quest_save (pool_id, quest_id) VALUES (?, ?)");
+ PrepareStatement(CHAR_DEL_OLD_GUILD_EVENT_LOGS, "DELETE FROM guild_eventlog WHERE LogGuid > '?'");
+ PrepareStatement(CHAR_DEL_OLD_GUILD_BANK_EVENT_LOGS, "DELETE FROM guild_bank_eventlog WHERE LogGuid > '?'");
+ PrepareStatement(CHAR_DEL_NONEXISTENT_GUILD_BANK_ITEM, "DELETE FROM guild_bank_item WHERE guildid='?' AND TabId='?' AND SlotId='?'");
+ PrepareStatement(CHAR_DEL_NONEXISTENT_CHARACTER_GROUP_MEMBERS, "DELETE FROM group_member WHERE NOT EXISTS (SELECT guid FROM characters WHERE guid=memberGuid)");
+ PrepareStatement(CHAR_DEL_LEADERLESS_GROUPS, "DELETE FROM groups WHERE NOT EXISTS (SELECT guid FROM characters WHERE guid=leaderGuid)");
+ PrepareStatement(CHAR_DEL_TINY_GROUPS, "DELETE FROM groups WHERE guid NOT IN (SELECT guid FROM group_member GROUP BY guid HAVING COUNT(guid) > 1)");
+ PrepareStatement(CHAR_DEL_NONEXISTENT_GROUP_MEMBERS, "DELETE FROM group_member WHERE guid NOT IN (SELECT guid FROM groups)");
+ PrepareStatement(CHAR_DEL_NONEXISTENT_GROUP_INSTANCES, "DELETE FROM group_instance WHERE guid NOT IN (SELECT guid FROM groups)");
+
return true;
}
diff --git a/src/server/shared/Database/Implementation/CharacterDatabase.h b/src/server/shared/Database/Implementation/CharacterDatabase.h
index cea2dfef416..0807e3ebc11 100644
--- a/src/server/shared/Database/Implementation/CharacterDatabase.h
+++ b/src/server/shared/Database/Implementation/CharacterDatabase.h
@@ -45,6 +45,14 @@ enum CharacterDatabaseStatements
CHAR_DEL_QUEST_POOL_SAVE,
CHAR_ADD_QUEST_POOL_SAVE,
+ CHAR_DEL_OLD_GUILD_EVENT_LOGS,
+ CHAR_DEL_OLD_GUILD_BANK_EVENT_LOGS,
+ CHAR_DEL_NONEXISTENT_GUILD_BANK_ITEM,
+ CHAR_DEL_NONEXISTENT_CHARACTER_GROUP_MEMBERS,
+ CHAR_DEL_LEADERLESS_GROUPS,
+ CHAR_DEL_TINY_GROUPS,
+ CHAR_DEL_NONEXISTENT_GROUP_MEMBERS,
+ CHAR_DEL_NONEXISTENT_GROUP_INSTANCES,
MAX_CHARACTERDATABASE_STATEMENTS,
};
diff --git a/src/server/shared/Database/Implementation/WorldDatabase.cpp b/src/server/shared/Database/Implementation/WorldDatabase.cpp
index b018f921b44..2db9e3d9dc4 100644
--- a/src/server/shared/Database/Implementation/WorldDatabase.cpp
+++ b/src/server/shared/Database/Implementation/WorldDatabase.cpp
@@ -35,6 +35,7 @@ bool WorldDatabaseConnection::Open(const std::string& infoString)
PrepareStatement(WORLD_LOAD_QUEST_POOLS, "SELECT entry, pool_entry FROM pool_quest");
PrepareStatement(WORLD_DEL_CRELINKED_RESPAWN, "DELETE FROM creature_linked_respawn WHERE guid = ?");
PrepareStatement(WORLD_REP_CRELINKED_RESPAWN, "REPLACE INTO creature_linked_respawn (guid,linkedGuid) VALUES (?, ?)");
+ PrepareStatement(WORLD_DEL_GAMEOBJECT_RESPAWN_TIMES, "DELETE FROM gameobject_respawn WHERE respawntime <= UNIX_TIMESTAMP(NOW())");
return true;
}
diff --git a/src/server/shared/Database/Implementation/WorldDatabase.h b/src/server/shared/Database/Implementation/WorldDatabase.h
index e810a6a07f9..379cca0b517 100644
--- a/src/server/shared/Database/Implementation/WorldDatabase.h
+++ b/src/server/shared/Database/Implementation/WorldDatabase.h
@@ -48,6 +48,7 @@ enum WorldDatabaseStatements
WORLD_LOAD_QUEST_POOLS,
WORLD_DEL_CRELINKED_RESPAWN,
WORLD_REP_CRELINKED_RESPAWN,
+ WORLD_DEL_GAMEOBJECT_RESPAWN_TIMES,
MAX_WORLDDATABASE_STATEMENTS,
};