diff options
| author | megamage <none@none.none> | 2011-10-08 16:09:12 -0400 |
|---|---|---|
| committer | megamage <none@none.none> | 2011-10-08 16:09:12 -0400 |
| commit | 0bb86a3e97cf720512ae00c9bee209a30c5fb928 (patch) | |
| tree | 15cf743d86eb5cd70f9994bdd709c4c56942af19 /src/server/game/World | |
| parent | 72fc756bff32e68ee02043a7d635cdee357781b1 (diff) | |
Update code related to character name data.
Note: need to add/delete data when character is created/deleted.
Diffstat (limited to 'src/server/game/World')
| -rwxr-xr-x | src/server/game/World/World.cpp | 58 | ||||
| -rwxr-xr-x | src/server/game/World/World.h | 7 |
2 files changed, 20 insertions, 45 deletions
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 34b93c71fb4..359d278956b 100755 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -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; } diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 7430dd22420..d632a010b8b 100755 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -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(); |
