diff options
| author | joschiwald <joschiwald.trinity@gmail.com> | 2014-02-10 00:14:29 +0100 | 
|---|---|---|
| committer | joschiwald <joschiwald.trinity@gmail.com> | 2014-02-10 00:14:29 +0100 | 
| commit | b72273014f2f290f9524a3f9b1596528773da9fb (patch) | |
| tree | 8d83446e20f95378fa21788bedfc0062dc1c95b3 | |
| parent | a5a6799b4e46456decbac09622f0bef0ac1976bb (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.sql | 68 | ||||
| -rw-r--r-- | src/server/game/Achievements/AchievementMgr.cpp | 70 | ||||
| -rw-r--r-- | src/server/game/Achievements/AchievementMgr.h | 1 | ||||
| -rw-r--r-- | src/server/game/Battlegrounds/BattlegroundMgr.cpp | 26 | ||||
| -rw-r--r-- | src/server/game/Battlegrounds/BattlegroundMgr.h | 3 | ||||
| -rw-r--r-- | src/server/game/DataStores/DBCStructure.h | 6 | ||||
| -rw-r--r-- | src/server/game/DataStores/DBCfmt.h | 2 | ||||
| -rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 1 | ||||
| -rw-r--r-- | src/server/game/Mails/Mail.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Maps/MapManager.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 2 | ||||
| -rw-r--r-- | src/server/game/World/World.cpp | 2 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_character.cpp | 2 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_lookup.cpp | 5 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_titles.cpp | 6 | 
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());  | 
