aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/World
diff options
context:
space:
mode:
authormegamage <none@none.none>2011-10-08 16:09:12 -0400
committermegamage <none@none.none>2011-10-08 16:09:12 -0400
commit0bb86a3e97cf720512ae00c9bee209a30c5fb928 (patch)
tree15cf743d86eb5cd70f9994bdd709c4c56942af19 /src/server/game/World
parent72fc756bff32e68ee02043a7d635cdee357781b1 (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-xsrc/server/game/World/World.cpp58
-rwxr-xr-xsrc/server/game/World/World.h7
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();