aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoschiwald <joschiwald.trinity@gmail.com>2014-02-10 00:14:29 +0100
committerjoschiwald <joschiwald.trinity@gmail.com>2014-02-10 00:14:29 +0100
commitb72273014f2f290f9524a3f9b1596528773da9fb (patch)
tree8d83446e20f95378fa21788bedfc0062dc1c95b3
parenta5a6799b4e46456decbac09622f0bef0ac1976bb (diff)
Core/DB/Achievements:
- fixed arena season title achievements and rewards - added mailtemplate support for `achievement_reward` table - fixed typo in GetBattleMasterBG which causes achievement reward mail expire in 1 day Ref #8777
-rw-r--r--sql/updates/world/2014_02_09_06_world_achievements.sql68
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp70
-rw-r--r--src/server/game/Achievements/AchievementMgr.h1
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.cpp26
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.h3
-rw-r--r--src/server/game/DataStores/DBCStructure.h6
-rw-r--r--src/server/game/DataStores/DBCfmt.h2
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp1
-rw-r--r--src/server/game/Mails/Mail.cpp2
-rw-r--r--src/server/game/Maps/MapManager.cpp8
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h2
-rw-r--r--src/server/game/World/World.cpp2
-rw-r--r--src/server/scripts/Commands/cs_character.cpp2
-rw-r--r--src/server/scripts/Commands/cs_lookup.cpp5
-rw-r--r--src/server/scripts/Commands/cs_titles.cpp6
15 files changed, 162 insertions, 42 deletions
diff --git a/sql/updates/world/2014_02_09_06_world_achievements.sql b/sql/updates/world/2014_02_09_06_world_achievements.sql
new file mode 100644
index 00000000000..a64799b48df
--- /dev/null
+++ b/sql/updates/world/2014_02_09_06_world_achievements.sql
@@ -0,0 +1,68 @@
+ALTER TABLE `achievement_reward`
+ ADD COLUMN `mailTemplate` MEDIUMINT(8) UNSIGNED DEFAULT 0 NULL AFTER `text`;
+
+DELETE FROM `disables` WHERE `sourceType`=4 AND `entry`=11238;
+INSERT INTO `disables` (`sourceType`, `entry`, `comment`) VALUES
+(4,11238, 'Achievement: Jade Tiger');
+
+DELETE FROM `achievement_criteria_data` WHERE `criteria_id` IN (5597,5599,5600,6789,7408,7412,7415,7416,7418,7419,9058,9718,9719,9720,9721,10718,10878,10879,10881,10898,11238,11402,12562,12912,12999,13000,13001,13002,13003,13004,13005,13006,13007);
+INSERT INTO `achievement_criteria_data` (`criteria_id`, `type`, `value1`, `value2`, `ScriptName`) VALUES
+(5597, 23, 62, 0, ''), -- Merciless Gladiator Season 2
+(5599, 23, 71, 0, ''), -- Vengeful Gladiator Season 3
+(5600, 23, 80, 0, ''), -- Brutal Gladiator Season 4
+(6789, 23, 53, 0, ''), -- Champion of the Naaru
+(7408, 23, 45, 0, ''), -- Challenger
+(7412, 23, 42, 0, ''), -- Gladiator
+(7415, 23, 43, 0, ''), -- Duelist - Duelist
+(7416, 23, 42, 0, ''), -- Duelist - Gladiator
+(7418, 23, 44, 0, ''), -- Rival - Rival
+(7419, 23, 43, 0, ''), -- Rival - Duelist
+(9058, 22, 4, 0, ''), -- 4th Anniversary
+(9718, 23, 42, 0, ''), -- Rival - Gladiator
+(9719, 23, 44, 0, ''), -- Challenger - Rival
+(9720, 23, 43, 0, ''), -- Challenger - Duelist
+(9721, 23, 42, 0, ''), -- Challenger - Gladiator
+(10718, 23, 157, 0, ''), -- Deadly Gladiator Season 5
+(10878, 23, 157, 0, ''), -- Challenger - Deadly Gladiator
+(10879, 23, 157, 0, ''), -- Rival - Deadly Gladiator
+(10881, 23, 157, 0, ''), -- Gladiator - Deadly Gladiator
+(10898, 23, 167, 0, ''), -- Furious Gladiator Season 6
+-- (11238, 0, 0, 0, ''), -- Jade Tiger
+(11402, 23, 169, 0, ''), -- Relentless Gladiator Season 7
+(12562, 22, 5, 0, ''), -- 5th Anniversary
+(12912, 23, 177, 0, ''), -- Wrathful Gladiator Season 8
+(12999, 23, 167, 0, ''), -- Gladiator - Furious Gladiator
+(13000, 23, 169, 0, ''), -- Gladiator - Relentless Gladiator
+(13001, 23, 157, 0, ''), -- Duelist - Deadly Gladiator
+(13002, 23, 167, 0, ''), -- Duelist - Furious Gladiator
+(13003, 23, 169, 0, ''), -- Duelist - Relentless Gladiator
+(13004, 23, 167, 0, ''), -- Rival - Furious Gladiator
+(13005, 23, 169, 0, ''), -- Rival - Relentless Gladiator
+(13006, 23, 167, 0, ''), -- Challenger - Furious Gladiator
+(13007, 23, 169, 0, ''); -- Challenger - Relentless Gladiator
+
+DELETE FROM `achievement_reward` WHERE `entry` IN (432,2090,2091,2092,2093);
+INSERT INTO `achievement_reward` (`entry`, `title_A`, `title_H`) VALUES
+( 432,53,53), -- Champion of the Naaru
+(2090,45,45), -- Challenger
+(2091,42,42), -- Gladiator
+(2092,43,43), -- Duelist
+(2093,44,44); -- Rival
+
+DELETE FROM `achievement_reward` WHERE `entry` IN (419,420,3336,3436,3758,4599);
+INSERT INTO `achievement_reward` (`entry`, `sender`, `mailTemplate`) VALUES
+( 419,18897,211), -- Vengeful Gladiator
+( 420,18897,262), -- Brutal Gladiator
+(3336,18897,266), -- Deadly Gladiator
+(3436,18897,267), -- Furious Gladiator
+(3758,18897,286), -- Relentless Gladiator
+(4599,18897,287); -- Wrathful Gladiator
+
+DELETE FROM `mail_loot_template` WHERE `entry` IN (211,262,266,267,286,287);
+INSERT INTO `mail_loot_template` (`entry`,`item`,`ChanceOrQuestChance`,`lootmode`,`groupid`,`mincountOrRef`,`maxcount`) VALUES
+(211,37676,100,1,0,1,1), -- Vengeful Gladiator
+(262,43516,100,1,0,1,1), -- Brutal Gladiator
+(266,46708,100,1,0,1,1), -- Deadly Gladiator
+(267,46171,100,1,0,1,1), -- Furious Gladiator
+(286,47840,100,1,0,1,1), -- Relentless Gladiator
+(287,50435,100,1,0,1,1); -- Wrathful Gladiator
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index b98ff3e4f01..a99da4050f6 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -297,7 +297,7 @@ bool AchievementCriteriaData::IsValid(AchievementCriteriaEntry const* criteria)
case ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE:
if (!sCharTitlesStore.LookupEntry(known_title.title_id))
{
- TC_LOG_ERROR("sql.sql", "Table `achievement_criteria_requirement` (Entry: %u Type: %u) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE (%u) have unknown title_id in value1 (%u), ignore.",
+ TC_LOG_ERROR("sql.sql", "Table `achievement_criteria_data` (Entry: %u Type: %u) for data type ACHIEVEMENT_CRITERIA_DATA_TYPE_S_KNOWN_TITLE (%u) have unknown title_id in value1 (%u), ignore.",
criteria->ID, criteria->requiredType, dataType, known_title.title_id);
return false;
}
@@ -400,7 +400,7 @@ bool AchievementCriteriaData::Meets(uint32 criteria_id, Player const* source, Un
{
TC_LOG_ERROR("achievement", "Achievement system call ACHIEVEMENT_CRITERIA_DATA_TYPE_INSTANCE_SCRIPT (%u) for achievement criteria %u for non-dungeon/non-raid map %u",
dataType, criteria_id, map->GetId());
- return false;
+ return false;
}
InstanceScript* instance = map->ToInstanceMap()->GetInstanceScript();
if (!instance)
@@ -2082,25 +2082,30 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
// mail
if (reward->sender)
{
- Item* item = reward->itemId ? Item::CreateItem(reward->itemId, 1, GetPlayer()) : NULL;
+ MailDraft draft(reward->mailTemplate);
- int loc_idx = GetPlayer()->GetSession()->GetSessionDbLocaleIndex();
-
- // subject and text
- std::string subject = reward->subject;
- std::string text = reward->text;
- if (loc_idx >= 0)
+ if (!reward->mailTemplate)
{
- if (AchievementRewardLocale const* loc = sAchievementMgr->GetAchievementRewardLocale(achievement))
+ // subject and text
+ std::string subject = reward->subject;
+ std::string text = reward->text;
+
+ int locIdx = GetPlayer()->GetSession()->GetSessionDbLocaleIndex();
+ if (locIdx >= 0)
{
- ObjectMgr::GetLocaleString(loc->subject, loc_idx, subject);
- ObjectMgr::GetLocaleString(loc->text, loc_idx, text);
+ if (AchievementRewardLocale const* loc = sAchievementMgr->GetAchievementRewardLocale(achievement))
+ {
+ ObjectMgr::GetLocaleString(loc->subject, locIdx, subject);
+ ObjectMgr::GetLocaleString(loc->text, locIdx, text);
+ }
}
- }
- MailDraft draft(subject, text);
+ draft = MailDraft(subject, text);
+ }
SQLTransaction trans = CharacterDatabase.BeginTransaction();
+
+ Item* item = reward->itemId ? Item::CreateItem(reward->itemId, 1, GetPlayer()) : NULL;
if (item)
{
// save new item before send
@@ -2441,8 +2446,8 @@ void AchievementGlobalMgr::LoadRewards()
m_achievementRewards.clear(); // need for reload case
- // 0 1 2 3 4 5 6
- QueryResult result = WorldDatabase.Query("SELECT entry, title_A, title_H, item, sender, subject, text FROM achievement_reward");
+ // 0 1 2 3 4 5 6 7
+ QueryResult result = WorldDatabase.Query("SELECT entry, title_A, title_H, item, sender, subject, text, mailTemplate FROM achievement_reward");
if (!result)
{
@@ -2456,20 +2461,21 @@ void AchievementGlobalMgr::LoadRewards()
{
Field* fields = result->Fetch();
uint32 entry = fields[0].GetUInt32();
- const AchievementEntry* pAchievement = GetAchievement(entry);
- if (!pAchievement)
+ AchievementEntry const* achievement = GetAchievement(entry);
+ if (!achievement)
{
TC_LOG_ERROR("sql.sql", "Table `achievement_reward` has wrong achievement (Entry: %u), ignored.", entry);
continue;
}
AchievementReward reward;
- reward.titleId[0] = fields[1].GetUInt32();
- reward.titleId[1] = fields[2].GetUInt32();
- reward.itemId = fields[3].GetUInt32();
- reward.sender = fields[4].GetUInt32();
- reward.subject = fields[5].GetString();
- reward.text = fields[6].GetString();
+ reward.titleId[0] = fields[1].GetUInt32();
+ reward.titleId[1] = fields[2].GetUInt32();
+ reward.itemId = fields[3].GetUInt32();
+ reward.sender = fields[4].GetUInt32();
+ reward.subject = fields[5].GetString();
+ reward.text = fields[6].GetString();
+ reward.mailTemplate = fields[7].GetUInt32();
// must be title or mail at least
if (!reward.titleId[0] && !reward.titleId[1] && !reward.sender)
@@ -2478,7 +2484,7 @@ void AchievementGlobalMgr::LoadRewards()
continue;
}
- if (pAchievement->requiredFaction == ACHIEVEMENT_FACTION_ANY && ((reward.titleId[0] == 0) != (reward.titleId[1] == 0)))
+ if (achievement->requiredFaction == ACHIEVEMENT_FACTION_ANY && (!reward.titleId[0] ^ !reward.titleId[1]))
TC_LOG_ERROR("sql.sql", "Table `achievement_reward` (Entry: %u) has title (A: %u H: %u) for only one team.", entry, reward.titleId[0], reward.titleId[1]);
if (reward.titleId[0])
@@ -2520,6 +2526,20 @@ void AchievementGlobalMgr::LoadRewards()
if (!reward.text.empty())
TC_LOG_ERROR("sql.sql", "Table `achievement_reward` (Entry: %u) does not have sender data but has mail text.", entry);
+
+ if (reward.mailTemplate)
+ TC_LOG_ERROR("sql.sql", "Table `achievement_reward` (Entry: %u) does not have sender data but has mailTemplate.", entry);
+ }
+
+ if (reward.mailTemplate)
+ {
+ if (!sMailTemplateStore.LookupEntry(reward.mailTemplate))
+ {
+ TC_LOG_ERROR("sql.sql", "Table `achievement_reward` (Entry: %u) has invalid mailTemplate (%u).", entry, reward.mailTemplate);
+ reward.mailTemplate = 0;
+ }
+ else if (!reward.subject.empty() || !reward.text.empty())
+ TC_LOG_ERROR("sql.sql", "Table `achievement_reward` (Entry: %u) has mailTemplate (%u) and mail subject/text.", entry, reward.mailTemplate);
}
if (reward.itemId)
diff --git a/src/server/game/Achievements/AchievementMgr.h b/src/server/game/Achievements/AchievementMgr.h
index c4216b2ee74..0a3e711e2ef 100644
--- a/src/server/game/Achievements/AchievementMgr.h
+++ b/src/server/game/Achievements/AchievementMgr.h
@@ -233,6 +233,7 @@ struct AchievementReward
uint32 sender;
std::string subject;
std::string text;
+ uint32 mailTemplate;
};
typedef UNORDERED_MAP<uint32, AchievementReward> AchievementRewards;
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
index 9d7a67ee0dc..ab69c950ff4 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
@@ -1082,6 +1082,17 @@ void BattlegroundMgr::LoadBattleMastersEntry()
Field* fields = result->Fetch();
uint32 entry = fields[0].GetUInt32();
+ if (CreatureTemplate const* cInfo = sObjectMgr->GetCreatureTemplate(entry))
+ {
+ if ((cInfo->npcflag & UNIT_NPC_FLAG_BATTLEMASTER) == 0)
+ TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) listed in `battlemaster_entry` is not a battlemaster.", entry);
+ }
+ else
+ {
+ TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) listed in `battlemaster_entry` does not exist.", entry);
+ continue;
+ }
+
uint32 bgTypeId = fields[1].GetUInt32();
if (!sBattlemasterListStore.LookupEntry(bgTypeId))
{
@@ -1093,9 +1104,24 @@ void BattlegroundMgr::LoadBattleMastersEntry()
}
while (result->NextRow());
+ CheckBattleMasters();
+
TC_LOG_INFO("server.loading", ">> Loaded %u battlemaster entries in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
}
+void BattlegroundMgr::CheckBattleMasters()
+{
+ CreatureTemplateContainer const* ctc = sObjectMgr->GetCreatureTemplates();
+ for (CreatureTemplateContainer::const_iterator itr = ctc->begin(); itr != ctc->end(); ++itr)
+ {
+ if ((itr->second.npcflag & UNIT_NPC_FLAG_BATTLEMASTER) && mBattleMastersMap.find(itr->second.Entry) == mBattleMastersMap.end())
+ {
+ TC_LOG_ERROR("sql.sql", "CreatureTemplate (Entry: %u) has UNIT_NPC_FLAG_BATTLEMASTER but no data in `battlemaster_entry` table. Removing flag!", itr->second.Entry);
+ const_cast<CreatureTemplate*>(&itr->second)->npcflag &= ~UNIT_NPC_FLAG_BATTLEMASTER;
+ }
+ }
+}
+
HolidayIds BattlegroundMgr::BGTypeToWeekendHolidayId(BattlegroundTypeId bgTypeId)
{
switch (bgTypeId)
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.h b/src/server/game/Battlegrounds/BattlegroundMgr.h
index f10614baafc..42803620e27 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.h
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.h
@@ -126,12 +126,13 @@ class BattlegroundMgr
uint32 GetRatingDiscardTimer() const;
void InitAutomaticArenaPointDistribution();
void LoadBattleMastersEntry();
+ void CheckBattleMasters();
BattlegroundTypeId GetBattleMasterBG(uint32 entry) const
{
BattleMastersMap::const_iterator itr = mBattleMastersMap.find(entry);
if (itr != mBattleMastersMap.end())
return itr->second;
- return BATTLEGROUND_WS;
+ return BATTLEGROUND_TYPE_NONE;
}
private:
diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h
index 7fb82ac8e03..d1db4fb634d 100644
--- a/src/server/game/DataStores/DBCStructure.h
+++ b/src/server/game/DataStores/DBCStructure.h
@@ -651,9 +651,9 @@ struct CharTitlesEntry
{
uint32 ID; // 0, title ids, for example in Quest::GetCharTitleId()
//uint32 unk1; // 1 flags?
- char* name[16]; // 2-17
+ char* nameMale[16]; // 2-17
// 18 string flag, unused
- //char* name2[16]; // 19-34, unused
+ char* nameFemale[16]; // 19-34
// 35 string flag, unused
uint32 bit_index; // 36 used in PLAYER_CHOSEN_TITLE and 1<<index in PLAYER__FIELD_KNOWN_TITLES
};
@@ -1270,7 +1270,7 @@ struct MailTemplateEntry
uint32 ID; // 0
//char* subject[16]; // 1-16
// 17 name flags, unused
- char* content[16]; // 18-33
+ char* content[16]; // 18-33
};
struct MapEntry
diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h
index a1ebaa70018..be4369399d4 100644
--- a/src/server/game/DataStores/DBCfmt.h
+++ b/src/server/game/DataStores/DBCfmt.h
@@ -33,7 +33,7 @@ char const BannedAddOnsfmt[] = "nxxxxxxxxxx";
char const BarberShopStyleEntryfmt[] = "nixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiii";
char const BattlemasterListEntryfmt[] = "niiiiiiiiixssssssssssssssssxiixx";
char const CharStartOutfitEntryfmt[] = "dbbbXiiiiiiiiiiiiiiiiiiiiiiiixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
-char const CharTitlesEntryfmt[] = "nxssssssssssssssssxxxxxxxxxxxxxxxxxxi";
+char const CharTitlesEntryfmt[] = "nxssssssssssssssssxssssssssssssssssxi";
char const ChatChannelsEntryfmt[] = "nixssssssssssssssssxxxxxxxxxxxxxxxxxx";
char const ChrClassesEntryfmt[] = "nxixssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixii";
char const ChrRacesEntryfmt[] = "nxixiixixxxxixssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxi";
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index c5c97e74777..48e4411e035 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -20,6 +20,7 @@
#include "AchievementMgr.h"
#include "ArenaTeam.h"
#include "ArenaTeamMgr.h"
+#include "BattlegroundMgr.h"
#include "Chat.h"
#include "Common.h"
#include "DatabaseEnv.h"
diff --git a/src/server/game/Mails/Mail.cpp b/src/server/game/Mails/Mail.cpp
index 8c82ef8f45b..2c65e363dd5 100644
--- a/src/server/game/Mails/Mail.cpp
+++ b/src/server/game/Mails/Mail.cpp
@@ -193,10 +193,12 @@ void MailDraft::SendMailTo(SQLTransaction& trans, MailReceiver const& receiver,
expire_delay = DAY;
// default case: expire time if COD 3 days, if no COD 30 days (or 90 days if sender is a game master)
else
+ {
if (m_COD)
expire_delay = 3 * DAY;
else
expire_delay = pSender && pSender->IsGameMaster() ? 90 * DAY : 30 * DAY;
+ }
time_t expire_time = deliver_time + expire_delay;
diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp
index 2e10fdc374b..d8c8889da67 100644
--- a/src/server/game/Maps/MapManager.cpp
+++ b/src/server/game/Maps/MapManager.cpp
@@ -122,7 +122,7 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck)
{
MapEntry const* entry = sMapStore.LookupEntry(mapid);
if (!entry)
- return false;
+ return false;
if (!entry->IsDungeon())
return true;
@@ -220,12 +220,12 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck)
// players are only allowed to enter 5 instances per hour
if (entry->IsDungeon() && (!player->GetGroup() || (player->GetGroup() && !player->GetGroup()->isLFGGroup())))
{
- uint32 instaceIdToCheck = 0;
+ uint32 instanceIdToCheck = 0;
if (InstanceSave* save = player->GetInstanceSave(mapid, entry->IsRaid()))
- instaceIdToCheck = save->GetInstanceId();
+ instanceIdToCheck = save->GetInstanceId();
// instanceId can never be 0 - will not be found
- if (!player->CheckInstanceCount(instaceIdToCheck) && !player->isDead())
+ if (!player->CheckInstanceCount(instanceIdToCheck) && !player->isDead())
{
player->SendTransferAborted(mapid, TRANSFER_ABORT_TOO_MANY_INSTANCES);
return false;
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index e5d3a5312de..961a896a8f7 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -3324,7 +3324,7 @@ enum BattlegroundTypeId
BATTLEGROUND_DS = 10, // Dalaran Sewers
BATTLEGROUND_RV = 11, // Ring of Valor
BATTLEGROUND_IC = 30, // Isle of Conquest
- BATTLEGROUND_RB = 32 // Random Battleground
+ BATTLEGROUND_RB = 32 // Random Battleground
};
#define MAX_BATTLEGROUND_TYPE_ID 33
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index af2fb90ea1b..af84a16aa0b 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1633,7 +1633,7 @@ void World::SetInitialWorldSettings()
sObjectMgr->LoadGameObjectForQuests();
TC_LOG_INFO("server.loading", "Loading BattleMasters...");
- sBattlegroundMgr->LoadBattleMastersEntry();
+ sBattlegroundMgr->LoadBattleMastersEntry(); // must be after load CreatureTemplate
TC_LOG_INFO("server.loading", "Loading GameTeleports...");
sObjectMgr->LoadGameTele();
diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp
index f9ef827e8c3..87bb1fefdd2 100644
--- a/src/server/scripts/Commands/cs_character.cpp
+++ b/src/server/scripts/Commands/cs_character.cpp
@@ -277,7 +277,7 @@ public:
if (titleInfo && target->HasTitle(titleInfo))
{
- std::string name = titleInfo->name[loc];
+ std::string name = target->getGender() == GENDER_MALE ? titleInfo->nameMale[loc] : titleInfo->nameFemale[loc];
if (name.empty())
continue;
diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp
index f2b4f54363b..57cf2cba260 100644
--- a/src/server/scripts/Commands/cs_lookup.cpp
+++ b/src/server/scripts/Commands/cs_lookup.cpp
@@ -1183,8 +1183,9 @@ public:
CharTitlesEntry const* titleInfo = sCharTitlesStore.LookupEntry(id);
if (titleInfo)
{
+ /// @todo: implement female support
int locale = handler->GetSessionDbcLocale();
- std::string name = titleInfo->name[locale];
+ std::string name = titleInfo->nameMale[locale];
if (name.empty())
continue;
@@ -1196,7 +1197,7 @@ public:
if (locale == handler->GetSessionDbcLocale())
continue;
- name = titleInfo->name[locale];
+ name = titleInfo->nameMale[locale];
if (name.empty())
continue;
diff --git a/src/server/scripts/Commands/cs_titles.cpp b/src/server/scripts/Commands/cs_titles.cpp
index 20bffdbb792..3d429deb3ef 100644
--- a/src/server/scripts/Commands/cs_titles.cpp
+++ b/src/server/scripts/Commands/cs_titles.cpp
@@ -96,7 +96,7 @@ public:
target->SetTitle(titleInfo); // to be sure that title now known
target->SetUInt32Value(PLAYER_CHOSEN_TITLE, titleInfo->bit_index);
- handler->PSendSysMessage(LANG_TITLE_CURRENT_RES, id, titleInfo->name[handler->GetSessionDbcLocale()], tNameLink.c_str());
+ handler->PSendSysMessage(LANG_TITLE_CURRENT_RES, id, target->getGender() == GENDER_MALE ? titleInfo->nameMale[handler->GetSessionDbcLocale()] : titleInfo->nameFemale[handler->GetSessionDbcLocale()], tNameLink.c_str());
return true;
}
@@ -139,7 +139,7 @@ public:
std::string tNameLink = handler->GetNameLink(target);
char titleNameStr[80];
- snprintf(titleNameStr, 80, titleInfo->name[handler->GetSessionDbcLocale()], target->GetName().c_str());
+ snprintf(titleNameStr, 80, target->getGender() == GENDER_MALE ? titleInfo->nameMale[handler->GetSessionDbcLocale()] : titleInfo->nameFemale[handler->GetSessionDbcLocale()], target->GetName().c_str());
target->SetTitle(titleInfo);
handler->PSendSysMessage(LANG_TITLE_ADD_RES, id, titleNameStr, tNameLink.c_str());
@@ -187,7 +187,7 @@ public:
std::string tNameLink = handler->GetNameLink(target);
char titleNameStr[80];
- snprintf(titleNameStr, 80, titleInfo->name[handler->GetSessionDbcLocale()], target->GetName().c_str());
+ snprintf(titleNameStr, 80, target->getGender() == GENDER_MALE ? titleInfo->nameMale[handler->GetSessionDbcLocale()] : titleInfo->nameFemale[handler->GetSessionDbcLocale()], target->GetName().c_str());
handler->PSendSysMessage(LANG_TITLE_REMOVE_RES, id, titleNameStr, tNameLink.c_str());