53 TC_LOG_ERROR(
"misc",
"Group storage ID overflow!! Can't continue, shutting down server. ");
91 TC_LOG_ERROR(
"misc",
"Group guid overflow!! Can't continue, shutting down server. ");
115 group.second->
Update(diff);
134 CharacterDatabase.DirectExecute(
"DELETE FROM `groups` WHERE leaderGuid NOT IN (SELECT guid FROM characters)");
136 CharacterDatabase.DirectExecute(
"DELETE FROM `groups` WHERE guid NOT IN (SELECT guid FROM group_member GROUP BY guid HAVING COUNT(guid) > 1)");
139 QueryResult result =
CharacterDatabase.Query(
"SELECT g.leaderGuid, g.lootMethod, g.looterGuid, g.lootThreshold, g.icon1, g.icon2, g.icon3, g.icon4, g.icon5, g.icon6"
141 ", g.icon7, g.icon8, g.groupType, g.difficulty, g.raidDifficulty, g.masterLooterGuid, g.guid, lfg.dungeon, lfg.state FROM `groups` g LEFT JOIN lfg_data lfg ON lfg.guid = g.guid ORDER BY g.guid ASC");
144 TC_LOG_INFO(
"server.loading",
">> Loaded 0 group definitions. DB table `groups` is empty!");
151 Field* fields = result->Fetch();
167 while (result->NextRow());
172 TC_LOG_INFO(
"server.loading",
"Loading Group members...");
177 CharacterDatabase.DirectExecute(
"DELETE FROM group_member WHERE guid NOT IN (SELECT guid FROM `groups`)");
178 CharacterDatabase.DirectExecute(
"DELETE FROM group_instance WHERE guid NOT IN (SELECT guid FROM `groups`)");
180 CharacterDatabase.DirectExecute(
"DELETE FROM group_member WHERE memberGuid NOT IN (SELECT guid FROM characters)");
186 TC_LOG_INFO(
"server.loading",
">> Loaded 0 group members. DB table `group_member` is empty!");
194 Field* fields = result->Fetch();
198 group->
LoadMemberFromDB(fields[1].GetUInt32(), fields[2].GetUInt8(), fields[3].GetUInt8(), fields[4].GetUInt8());
200 TC_LOG_ERROR(
"misc",
"GroupMgr::LoadGroups: Consistency failed, can't find group (storage id: {})", fields[0].GetUInt32());
204 while (result->NextRow());
209 TC_LOG_INFO(
"server.loading",
"Loading Group instance saves...");
216 "(SELECT COUNT(1) FROM character_instance ci LEFT JOIN `groups` g ON ci.guid = g.leaderGuid WHERE ci.instance = gi.instance AND ci.permanent = 1 LIMIT 1) "
217 "FROM group_instance gi LEFT JOIN instance i ON gi.instance = i.id ORDER BY guid");
221 TC_LOG_INFO(
"server.loading",
">> Loaded 0 group-instance saves. DB table `group_instance` is empty!");
228 Field* fields = result->Fetch();
236 TC_LOG_ERROR(
"sql.sql",
"Incorrect entry in group_instance table : no dungeon map {}", fields[1].GetUInt16());
243 TC_LOG_ERROR(
"sql.sql",
"Wrong dungeon difficulty use in group_instance table: {}", diff + 1);
251 while (result->NextRow());
#define MAX_RAID_DIFFICULTY
#define MAX_DUNGEON_DIFFICULTY
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
std::shared_ptr< ResultSet > QueryResult
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
#define TC_LOG_ERROR(filterType__,...)
#define TC_LOG_INFO(filterType__,...)
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Class used to access individual fields of database query result.
static GroupMgr * instance()
void FreeGroupDbStoreId(Group *group)
Group * GetGroupByDbStoreId(uint32 storageId) const
uint32 GenerateNewGroupDbStoreId()
Group * GetGroupByGUID(ObjectGuid const &guid) const
void RemoveGroup(Group *group)
ObjectGuid::LowType NextGroupId
GroupDbContainer GroupDbStore
uint32 NextGroupDbStoreId
void AddGroup(Group *group)
ObjectGuid::LowType GenerateGroupId()
void RegisterGroupDbStoreId(uint32 storageId, Group *group)
GroupContainer GroupStore
InstanceGroupBind * BindToInstance(InstanceSave *save, bool permanent, bool load=false)
void LoadGroupFromDB(Field *field)
ObjectGuid GetGUID() const
void LoadMemberFromDB(ObjectGuid::LowType guidLow, uint8 memberFlags, uint8 subgroup, uint8 roles)
uint32 GetDbStoreId() const
LowType GetCounter() const
static void StopNow(uint8 exitcode)