diff options
author | Carbenium <carbenium@outlook.com> | 2015-04-19 23:37:29 +0200 |
---|---|---|
committer | Carbenium <carbenium@outlook.com> | 2015-04-21 00:52:21 +0200 |
commit | bba6eb8d3dfe73a02063a7cefe6f465dae69334b (patch) | |
tree | 16dbbcaab1bca43b281828fd20b12f2ce6441540 /src/server/game/Handlers/CharacterHandler.cpp | |
parent | 4208c0d8396e10dc806939e1d17885d16ff7b84e (diff) |
Core/Player: Added character templates
* Characters with predefined levels can be created
* Avaiable factions and classes can be configured
* Valid values for `factionGroup` in table `character_template_class` are 3 (Alliance) or 5 (Horde)
* Added new permission RBAC_PERM_USE_CHARACTER_TEMPLATES - has to be set, to allow the usage of the templates
Closes #13952
Diffstat (limited to 'src/server/game/Handlers/CharacterHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 6b6bd1a1f7d..c7960772507 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -705,6 +705,25 @@ void WorldSession::HandleCharCreateCallback(PreparedQueryResult result, WorldPac LoginDatabase.CommitTransaction(trans); + if (createInfo->TemplateSet.HasValue) + { + if (HasPermission(rbac::RBAC_PERM_USE_CHARACTER_TEMPLATES)) + { + if (CharacterTemplate const* charTemplate = sObjectMgr->GetCharacterTemplate(createInfo->TemplateSet.Value)) + { + if (charTemplate->Level != 1) + { + PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_LEVEL); + stmt->setUInt8(0, uint8(charTemplate->Level)); + stmt->setUInt64(1, newChar.GetGUID().GetCounter()); + CharacterDatabase.Execute(stmt); + } + } + } + else + TC_LOG_WARN("cheat", "Account: %u (IP: %s) tried to use a character template without given permission. Possible cheating attempt.", GetAccountId(), GetRemoteAddress().c_str()); + } + SendCharCreate(CHAR_CREATE_SUCCESS); TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Create Character: %s %s", GetAccountId(), GetRemoteAddress().c_str(), createInfo->Name.c_str(), newChar.GetGUID().ToString().c_str()); |