Skip to content

Commit

Permalink
Core/Texts:
Browse files Browse the repository at this point in the history
* Enable some BroadcastTexts stuff (is not finish)
* Added reload command for broadcast_text table
ToDo:
- Enable: Sound/Emote stuff, etc.
- Auth base need refresh
  • Loading branch information
Vincent-Michael committed Apr 25, 2014
1 parent f27057b commit c81d6e9
Show file tree
Hide file tree
Showing 10 changed files with 234 additions and 159 deletions.
1 change: 1 addition & 0 deletions merge_updates_windows.bat
@@ -0,0 +1 @@
copy /a sql\updates\world\*world*.sql /b world_updates.sql
4 changes: 2 additions & 2 deletions sql/base/auth_database.sql

Large diffs are not rendered by default.

10 changes: 10 additions & 0 deletions sql/updates/auth/2014_04_26_00_rbac_permissions.sql
@@ -0,0 +1,10 @@
SET @id = 614;

-- Add new permissions
DELETE FROM `rbac_permissions` WHERE `id`=@id;
INSERT INTO `rbac_permissions` (`id`, `name`) VALUES
(@id, 'Command: broadcast_text');

DELETE FROM `rbac_linked_permissions` WHERE `linkedId`=@id;
INSERT INTO `rbac_linked_permissions` (`id`, `linkedId`) VALUES
(196, @id);
5 changes: 5 additions & 0 deletions sql/updates/world/2014_04_26_00_world_command.sql
@@ -0,0 +1,5 @@
SET @id = 614;

DELETE FROM `command` WHERE `name` = 'broadcast_text';
INSERT INTO `command` (`name`, `permission`, `help`) VALUES
('broadcast_text', @id, 'Syntax: .broadcast_text\r\n\r\nReload broadcast_text table.');
2 changes: 1 addition & 1 deletion src/server/game/Accounts/RBAC.h
Expand Up @@ -517,7 +517,7 @@ enum RBACPermissions
RBAC_PERM_COMMAND_RELOAD_ALL = 611,
RBAC_PERM_COMMAND_RELOAD_ALL_ACHIEVEMENT = 612,
RBAC_PERM_COMMAND_RELOAD_ALL_AREA = 613,
RBAC_PERM_UNUSED_614 = 614, // unused
RBAC_PERM_COMMAND_RELOAD_BROADCAST_TEXT = 614,
RBAC_PERM_COMMAND_RELOAD_ALL_GOSSIP = 615,
RBAC_PERM_COMMAND_RELOAD_ALL_ITEM = 616,
RBAC_PERM_COMMAND_RELOAD_ALL_LOCALES = 617,
Expand Down
37 changes: 29 additions & 8 deletions src/server/game/Entities/Creature/GossipDef.cpp
Expand Up @@ -91,19 +91,40 @@ void GossipMenu::AddMenuItem(uint32 menuId, uint32 menuItemId, uint32 sender, ui
continue;

/// Store texts for localization.
std::string strOptionText = itr->second.OptionText;
std::string strBoxText = itr->second.BoxText;
std::string strOptionText, strBoxText;
BroadcastText const* optionBroadcastText = sObjectMgr->GetBroadcastText(itr->second.OptionBroadcastTextId);
BroadcastText const* boxBroadcastText = sObjectMgr->GetBroadcastText(itr->second.BoxBroadcastTextId);

/// OptionText
if (optionBroadcastText)
ObjectMgr::GetLocaleString(optionBroadcastText->MaleText, GetLocale(), strOptionText);
else
strOptionText = itr->second.OptionText;

/// BoxText
if (boxBroadcastText)
ObjectMgr::GetLocaleString(boxBroadcastText->MaleText, GetLocale(), strBoxText);
else
strBoxText = itr->second.BoxText;

/// Check need of localization.
if (GetLocale() > LOCALE_enUS)
/// Find localizations from database.
if (GossipMenuItemsLocale const* no = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuItemId)))
if (GetLocale() != DEFAULT_LOCALE)
{
if (!optionBroadcastText)
{
/// Translate texts if there are any.
ObjectMgr::GetLocaleString(no->OptionText, GetLocale(), strOptionText);
ObjectMgr::GetLocaleString(no->BoxText, GetLocale(), strBoxText);
/// Find localizations from database.
if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuItemId)))
ObjectMgr::GetLocaleString(gossipMenuLocale->OptionText, GetLocale(), strOptionText);
}

if (!boxBroadcastText)
{
/// Find localizations from database.
if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuItemId)))
ObjectMgr::GetLocaleString(gossipMenuLocale->BoxText, GetLocale(), strBoxText);
}
}

/// Add menu item with existing method. Menu item id -1 is also used in ADD_GOSSIP_ITEM macro.
AddMenuItem(-1, itr->second.OptionIcon, strOptionText, sender, action, strBoxText, itr->second.BoxMoney, itr->second.BoxCoded);
}
Expand Down
34 changes: 26 additions & 8 deletions src/server/game/Entities/Player/Player.cpp
Expand Up @@ -14441,17 +14441,35 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool

if (canTalk)
{
std::string strOptionText = itr->second.OptionText;
std::string strBoxText = itr->second.BoxText;
std::string strOptionText, strBoxText;
BroadcastText const* optionBroadcastText = sObjectMgr->GetBroadcastText(itr->second.OptionBroadcastTextId);
BroadcastText const* boxBroadcastText = sObjectMgr->GetBroadcastText(itr->second.BoxBroadcastTextId);
LocaleConstant locale = GetSession()->GetSessionDbLocaleIndex();

int32 locale = GetSession()->GetSessionDbLocaleIndex();
if (locale >= 0)
if (optionBroadcastText)
ObjectMgr::GetLocaleString(getGender() == GENDER_MALE ? optionBroadcastText->MaleText : optionBroadcastText->FemaleText, locale, strOptionText);
else
strOptionText = itr->second.OptionText;

if (boxBroadcastText)
ObjectMgr::GetLocaleString(getGender() == GENDER_MALE ? boxBroadcastText->MaleText : boxBroadcastText->FemaleText, locale, strBoxText);
else
strBoxText = itr->second.BoxText;

if (locale != DEFAULT_LOCALE)
{
uint32 idxEntry = MAKE_PAIR32(menuId, itr->second.OptionIndex);
if (GossipMenuItemsLocale const* no = sObjectMgr->GetGossipMenuItemsLocale(idxEntry))
if (!optionBroadcastText)
{
/// Find localizations from database.
if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuId)))
ObjectMgr::GetLocaleString(gossipMenuLocale->OptionText, locale, strOptionText);
}

if (!boxBroadcastText)
{
ObjectMgr::GetLocaleString(no->OptionText, locale, strOptionText);
ObjectMgr::GetLocaleString(no->BoxText, locale, strBoxText);
/// Find localizations from database.
if (GossipMenuItemsLocale const* gossipMenuLocale = sObjectMgr->GetGossipMenuItemsLocale(MAKE_PAIR32(menuId, menuId)))
ObjectMgr::GetLocaleString(gossipMenuLocale->BoxText, locale, strBoxText);
}
}

Expand Down
64 changes: 34 additions & 30 deletions src/server/game/Handlers/QueryHandler.cpp
Expand Up @@ -264,18 +264,18 @@ void WorldSession::HandleNpcTextQueryOpcode(WorldPacket& recvData)
uint64 guid;

recvData >> textID;
TC_LOG_DEBUG("network", "WORLD: CMSG_NPC_TEXT_QUERY ID '%u'", textID);
TC_LOG_DEBUG("network", "WORLD: CMSG_NPC_TEXT_QUERY TextId: %u", textID);

recvData >> guid;

GossipText const* pGossip = sObjectMgr->GetGossipText(textID);
GossipText const* gossip = sObjectMgr->GetGossipText(textID);

WorldPacket data(SMSG_NPC_TEXT_UPDATE, 100); // guess size
data << textID;

if (!pGossip)
if (!gossip)
{
for (uint32 i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i)
for (uint8 i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i)
{
data << float(0);
data << "Greetings $N";
Expand All @@ -291,46 +291,50 @@ void WorldSession::HandleNpcTextQueryOpcode(WorldPacket& recvData)
}
else
{
std::string Text_0[MAX_LOCALES], Text_1[MAX_LOCALES];
for (int i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i)
{
Text_0[i]=pGossip->Options[i].Text_0;
Text_1[i]=pGossip->Options[i].Text_1;
}
std::string text0[MAX_GOSSIP_TEXT_OPTIONS], text1[MAX_GOSSIP_TEXT_OPTIONS];
LocaleConstant locale = GetSessionDbLocaleIndex();

int loc_idx = GetSessionDbLocaleIndex();
if (loc_idx >= 0)
for (uint8 i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i)
{
if (NpcTextLocale const* nl = sObjectMgr->GetNpcTextLocale(textID))
BroadcastText const* bct = sObjectMgr->GetBroadcastText(gossip->Options[i].BroadcastTextID);
if (bct)
{
ObjectMgr::GetLocaleString(bct->MaleText, locale, text0[i]);
ObjectMgr::GetLocaleString(bct->FemaleText, locale, text1[i]);
}
else
{
text0[i] = gossip->Options[i].Text_0;
text1[i] = gossip->Options[i].Text_1;
}

if (locale != DEFAULT_LOCALE && !bct)
{
for (int i = 0; i < MAX_LOCALES; ++i)
if (NpcTextLocale const* npcTextLocale = sObjectMgr->GetNpcTextLocale(textID))
{
ObjectMgr::GetLocaleString(nl->Text_0[i], loc_idx, Text_0[i]);
ObjectMgr::GetLocaleString(nl->Text_1[i], loc_idx, Text_1[i]);
ObjectMgr::GetLocaleString(npcTextLocale->Text_0[i], locale, text0[i]);
ObjectMgr::GetLocaleString(npcTextLocale->Text_1[i], locale, text1[i]);
}
}
}

for (int i = 0; i < MAX_GOSSIP_TEXT_OPTIONS; ++i)
{
data << pGossip->Options[i].Probability;
data << gossip->Options[i].Probability;

if (Text_0[i].empty())
data << Text_1[i];
if (text0[i].empty())
data << text1[i];
else
data << Text_0[i];
data << text0[i];

if (Text_1[i].empty())
data << Text_0[i];
if (text1[i].empty())
data << text0[i];
else
data << Text_1[i];
data << text1[i];

data << pGossip->Options[i].Language;
data << gossip->Options[i].Language;

for (int j = 0; j < MAX_GOSSIP_TEXT_EMOTES; ++j)
for (uint8 j = 0; j < MAX_GOSSIP_TEXT_EMOTES; ++j)
{
data << pGossip->Options[i].Emotes[j]._Delay;
data << pGossip->Options[i].Emotes[j]._Emote;
data << gossip->Options[i].Emotes[j]._Delay;
data << gossip->Options[i].Emotes[j]._Emote;
}
}
}
Expand Down
16 changes: 11 additions & 5 deletions src/server/game/Texts/CreatureTextMgr.cpp
Expand Up @@ -472,13 +472,19 @@ std::string CreatureTextMgr::GetLocalizedChatString(uint32 entry, uint8 textGrou
if (locale > MAX_LOCALES)
locale = DEFAULT_LOCALE;

std::string baseText = groupItr->text;
std::string baseText = "";
BroadcastText const* bct = sObjectMgr->GetBroadcastText(groupItr->BroadcastTextId);

if (locale != DEFAULT_LOCALE)
if (bct)
ObjectMgr::GetLocaleString(bct->MaleText, locale, baseText);
else
baseText = groupItr->text;

if (locale != DEFAULT_LOCALE && !bct)
{
LocaleCreatureTextMap::const_iterator locItr = mLocaleTextMap.find(CreatureTextId(entry, uint32(textGroup), id));
if (locItr != mLocaleTextMap.end())
ObjectMgr::GetLocaleString(locItr->second.Text, locale, baseText);
LocaleCreatureTextMap::const_iterator locItr = mLocaleTextMap.find(CreatureTextId(entry, uint32(textGroup), id));
if (locItr != mLocaleTextMap.end())
ObjectMgr::GetLocaleString(locItr->second.Text, locale, baseText);
}

return baseText;
Expand Down

0 comments on commit c81d6e9

Please sign in to comment.