mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/World
* Update character name cache after player rename * Add character name data for characters loaded with PlayerDump Closes #3653 Closes #3970
This commit is contained in:
@@ -1170,6 +1170,8 @@ void WorldSession::HandleChangePlayerNameOpcodeCallBack(QueryResult result, std:
|
||||
data << uint64(guid);
|
||||
data << newname;
|
||||
SendPacket(&data);
|
||||
|
||||
sWorld->UpdateCharacterNameData(guidLow, newname);
|
||||
}
|
||||
|
||||
void WorldSession::HandleSetPlayerDeclinedNames(WorldPacket& recv_data)
|
||||
@@ -1634,7 +1636,7 @@ void WorldSession::HandleCharFactionOrRaceChange(WorldPacket& recv_data)
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
trans->PAppend("UPDATE `characters` SET name='%s', race='%u', at_login=at_login & ~ %u WHERE guid='%u'", newname.c_str(), race, used_loginFlag, lowGuid);
|
||||
trans->PAppend("DELETE FROM character_declinedname WHERE guid ='%u'", lowGuid);
|
||||
sWorld->UpdateCharacterNameData(GUID_LOPART(guid), newname, gender, race);
|
||||
sWorld->UpdateCharacterNameData(GUID_LOPART(guid), newname, gender, race);
|
||||
|
||||
BattlegroundTeamId team = BG_TEAM_ALLIANCE;
|
||||
|
||||
|
||||
@@ -443,6 +443,9 @@ DumpReturn PlayerDumpReader::LoadDump(const std::string& file, uint32 account, s
|
||||
typedef PetIds::value_type PetIdsPair;
|
||||
PetIds petids;
|
||||
|
||||
uint8 gender;
|
||||
uint8 race;
|
||||
uint8 playerClass;
|
||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||
while (!feof(fin))
|
||||
{
|
||||
@@ -512,6 +515,9 @@ DumpReturn PlayerDumpReader::LoadDump(const std::string& file, uint32 account, s
|
||||
if (!changenth(line, 2, chraccount)) // characters.account update
|
||||
ROLLBACK(DUMP_FILE_BROKEN);
|
||||
|
||||
race = uint8(atol(getnth(line, 4).c_str()));
|
||||
playerClass = uint8(atol(getnth(line, 5).c_str()));
|
||||
gender = uint8(atol(getnth(line, 6).c_str()));
|
||||
if (name == "")
|
||||
{
|
||||
// check if the original name already exists
|
||||
@@ -520,10 +526,8 @@ DumpReturn PlayerDumpReader::LoadDump(const std::string& file, uint32 account, s
|
||||
|
||||
result = CharacterDatabase.PQuery("SELECT 1 FROM characters WHERE name = '%s'", name.c_str());
|
||||
if (result)
|
||||
{
|
||||
if (!changenth(line, 37, "1")) // characters.at_login set to "rename on login"
|
||||
ROLLBACK(DUMP_FILE_BROKEN);
|
||||
}
|
||||
}
|
||||
else if (!changenth(line, 3, name.c_str())) // characters.name
|
||||
ROLLBACK(DUMP_FILE_BROKEN);
|
||||
@@ -654,6 +658,9 @@ DumpReturn PlayerDumpReader::LoadDump(const std::string& file, uint32 account, s
|
||||
|
||||
CharacterDatabase.CommitTransaction(trans);
|
||||
|
||||
// in case of name conflict player has to rename at login anyway
|
||||
sWorld->AddCharacterNameData(guid, name, gender, race, playerClass);
|
||||
|
||||
sObjectMgr->m_hiItemGuid += items.size();
|
||||
sObjectMgr->m_mailid += mails.size();
|
||||
|
||||
@@ -664,4 +671,3 @@ DumpReturn PlayerDumpReader::LoadDump(const std::string& file, uint32 account, s
|
||||
|
||||
return DUMP_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@@ -2869,7 +2869,7 @@ void World::LoadCharacterNameData()
|
||||
sLog->outString("Loaded name data for %u characters", count);
|
||||
}
|
||||
|
||||
void World::AddCharacterNameData(uint32 guid, const std::string& name, uint8 gender, uint8 race, uint8 playerClass)
|
||||
void World::AddCharacterNameData(uint32 guid, std::string const& name, uint8 gender, uint8 race, uint8 playerClass)
|
||||
{
|
||||
CharacterNameData& data = _characterNameDataMap[guid];
|
||||
data.m_name = name;
|
||||
@@ -2878,18 +2878,22 @@ void World::AddCharacterNameData(uint32 guid, const std::string& name, uint8 gen
|
||||
data.m_class = playerClass;
|
||||
}
|
||||
|
||||
void World::UpdateCharacterNameData(uint32 guid, const std::string& name, uint8 gender, uint8 race)
|
||||
void World::UpdateCharacterNameData(uint32 guid, std::string const& name, uint8 gender /*= GENDER_NONE*/, uint8 race /*= RACE_NONE*/)
|
||||
{
|
||||
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)
|
||||
|
||||
if (gender != GENDER_NONE)
|
||||
itr->second.m_gender = gender;
|
||||
|
||||
if (race != RACE_NONE)
|
||||
itr->second.m_race = race;
|
||||
}
|
||||
|
||||
const CharacterNameData* World::GetCharacterNameData(uint32 guid) const
|
||||
CharacterNameData const* World::GetCharacterNameData(uint32 guid) const
|
||||
{
|
||||
std::map<uint32, CharacterNameData>::const_iterator itr = _characterNameDataMap.find(guid);
|
||||
if (itr != _characterNameDataMap.end())
|
||||
|
||||
@@ -738,9 +738,9 @@ class World
|
||||
|
||||
bool isEventKillStart;
|
||||
|
||||
const CharacterNameData* GetCharacterNameData(uint32 guid) const;
|
||||
void AddCharacterNameData(uint32 guid, const std::string& name, uint8 gender, uint8 race, uint8 playerClass);
|
||||
void UpdateCharacterNameData(uint32 guid, const std::string& name, uint8 gender, uint8 race = RACE_NONE);
|
||||
CharacterNameData const* GetCharacterNameData(uint32 guid) const;
|
||||
void AddCharacterNameData(uint32 guid, std::string const& name, uint8 gender, uint8 race, uint8 playerClass);
|
||||
void UpdateCharacterNameData(uint32 guid, std::string const& name, uint8 gender = GENDER_NONE, uint8 race = RACE_NONE);
|
||||
void DeleteCharaceterNameData(uint32 guid) { _characterNameDataMap.erase(guid); }
|
||||
|
||||
uint32 GetCleaningFlags() const { return m_CleaningFlags; }
|
||||
|
||||
Reference in New Issue
Block a user