Update code related to character name data.
Note: need to add/delete data when character is created/deleted.
This commit is contained in:
@@ -132,10 +132,6 @@ World::~World()
|
||||
|
||||
VMAP::VMapFactory::clear();
|
||||
|
||||
// Clean up character name data
|
||||
for (std::map<uint32, CharacterNameData*>::iterator itr = m_CharacterNameDataMap.begin(); itr != m_CharacterNameDataMap.end(); ++itr)
|
||||
delete itr->second;
|
||||
|
||||
//TODO free addSessQueue
|
||||
}
|
||||
|
||||
@@ -2864,58 +2860,38 @@ void World::LoadCharacterNameData()
|
||||
return;
|
||||
}
|
||||
|
||||
ACE_Guard<ACE_Thread_Mutex> guard(m_CharacterNameDataMapMutex);
|
||||
|
||||
uint32 count = 0;
|
||||
|
||||
do
|
||||
{
|
||||
Field *fields = result->Fetch();
|
||||
CharacterNameData* data = new CharacterNameData;
|
||||
data->m_name = fields[1].GetString();
|
||||
data->m_race = fields[2].GetUInt8();
|
||||
data->m_gender = fields[3].GetUInt8();
|
||||
data->m_class = fields[4].GetUInt8();
|
||||
|
||||
m_CharacterNameDataMap[fields[0].GetUInt32()] = data;
|
||||
CharacterNameData& data = _characterNameDataMap[fields[0].GetUInt32()];
|
||||
data.m_name = fields[1].GetString();
|
||||
data.m_race = fields[2].GetUInt8();
|
||||
data.m_gender = fields[3].GetUInt8();
|
||||
data.m_class = fields[4].GetUInt8();
|
||||
++count;
|
||||
} while (result->NextRow());
|
||||
|
||||
sLog->outString("Loaded name data for %u characters", count);
|
||||
}
|
||||
|
||||
void World::ReloadSingleCharacterNameData(uint32 guid)
|
||||
void World::UpdateCharacterNameData(uint32 guid, const std::string& name, uint8 gender, uint8 race)
|
||||
{
|
||||
ACE_Guard<ACE_Thread_Mutex> guard(m_CharacterNameDataMapMutex);
|
||||
|
||||
std::map<uint32, CharacterNameData*>::iterator itr = m_CharacterNameDataMap.find(guid);
|
||||
|
||||
if (itr != m_CharacterNameDataMap.end())
|
||||
{
|
||||
delete itr->second;
|
||||
m_CharacterNameDataMap.erase(itr);
|
||||
}
|
||||
|
||||
QueryResult result = CharacterDatabase.PQuery("SELECT name, race, gender, class FROM characters WHERE guid = '%u'", guid);
|
||||
if (result)
|
||||
{
|
||||
Field *fields = result->Fetch();
|
||||
CharacterNameData* newdata = new CharacterNameData;
|
||||
newdata->m_name = fields[0].GetString();
|
||||
newdata->m_race = fields[1].GetUInt8();
|
||||
newdata->m_gender = fields[2].GetUInt8();
|
||||
newdata->m_class = fields[3].GetUInt8();
|
||||
m_CharacterNameDataMap[guid] = newdata;
|
||||
}
|
||||
std::map<uint32, CharacterNameData>::iterator itr = _characterNameDataMap.find(guid);
|
||||
if (itr == _characterNameDataMap.end())
|
||||
return;
|
||||
itr->second.m_name = name;
|
||||
itr->second.m_gender = gender;
|
||||
if(race != RACE_NONE)
|
||||
itr->second.m_race = race;
|
||||
}
|
||||
|
||||
CharacterNameData* World::GetCharacterNameData(uint32 guid)
|
||||
const CharacterNameData* World::GetCharacterNameData(uint32 guid) const
|
||||
{
|
||||
ACE_Guard<ACE_Thread_Mutex> guard(m_CharacterNameDataMapMutex);
|
||||
|
||||
std::map<uint32, CharacterNameData*>::iterator itr = m_CharacterNameDataMap.find(guid);
|
||||
if (itr != m_CharacterNameDataMap.end())
|
||||
return itr->second;
|
||||
std::map<uint32, CharacterNameData>::const_iterator itr = _characterNameDataMap.find(guid);
|
||||
if (itr != _characterNameDataMap.end())
|
||||
return &itr->second;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -739,8 +739,8 @@ class World
|
||||
|
||||
bool isEventKillStart;
|
||||
|
||||
CharacterNameData *GetCharacterNameData(uint32 guid);
|
||||
void ReloadSingleCharacterNameData(uint32 guid);
|
||||
const CharacterNameData* GetCharacterNameData(uint32 guid) const;
|
||||
void UpdateCharacterNameData(uint32 guid, const std::string& name, uint8 gender, uint8 race = RACE_NONE);
|
||||
|
||||
uint32 GetCleaningFlags() const { return m_CleaningFlags; }
|
||||
void SetCleaningFlags(uint32 flags) { m_CleaningFlags = flags; }
|
||||
@@ -829,8 +829,7 @@ class World
|
||||
|
||||
std::list<std::string> m_Autobroadcasts;
|
||||
|
||||
std::map<uint32, CharacterNameData*> m_CharacterNameDataMap;
|
||||
ACE_Thread_Mutex m_CharacterNameDataMapMutex;
|
||||
std::map<uint32, CharacterNameData> _characterNameDataMap;
|
||||
void LoadCharacterNameData();
|
||||
|
||||
void ProcessQueryCallbacks();
|
||||
|
||||
Reference in New Issue
Block a user