Update newmenus.cpp (#884)

Fixes: #881

Co-authored-by: shel <2@shelru.ru>
This commit is contained in:
shel 2020-07-17 03:57:29 +04:00 committed by GitHub
parent f4fefd0bb4
commit ff2fc19b08
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -418,27 +418,27 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
{ {
flags &= ~Display_Back; flags &= ~Display_Back;
} }
menuitem *pItem = NULL; menuitem *pItem = NULL;
int option = 0; int option = 0;
keys = 0; keys = 0;
bool enabled = true; bool enabled = true;
int ret = 0; int ret = 0;
int slots = 0; int slots = 0;
int option_display = 0; int option_display = 0;
for (item_t i = start; i < end; i++) for (item_t i = start; i < end; i++)
{ {
// reset enabled // reset enabled
enabled = true; enabled = true;
pItem = m_Items[i]; pItem = m_Items[i];
if (pItem->access && !(pItem->access & g_players[player].flags[0])) if (pItem->access && !(pItem->access & g_players[player].flags[0]))
{ {
enabled = false; enabled = false;
} }
if (pItem->handler != -1) if (pItem->handler != -1)
{ {
ret = executeForwards(pItem->handler, static_cast<cell>(player), static_cast<cell>(thisId), static_cast<cell>(i)); ret = executeForwards(pItem->handler, static_cast<cell>(player), static_cast<cell>(thisId), static_cast<cell>(i));
@ -470,7 +470,7 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
{ {
keys |= (1<<option); keys |= (1<<option);
} }
option_display = ++option; option_display = ++option;
if (option_display == 10) if (option_display == 10)
{ {
@ -544,6 +544,20 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
/* Don't bother if there is only one page */ /* Don't bother if there is only one page */
if (pages > 1) if (pages > 1)
{ {
auto tempItemName = m_OptNames[abs(MENU_BACK)].chars();
if (this->useMultilingual)
{
const auto language = playerlang(player);
const auto definition = translate(this->amx, language, tempItemName);
if (definition)
{
tempItemName = definition;
}
}
if (flags & Display_Back) if (flags & Display_Back)
{ {
keys |= (1<<option++); keys |= (1<<option++);
@ -554,13 +568,13 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
"%s%d. \\w%s\n", "%s%d. \\w%s\n",
m_ItemColor.chars(), m_ItemColor.chars(),
option == 10 ? 0 : option, option == 10 ? 0 : option,
m_OptNames[abs(MENU_BACK)].chars()); tempItemName);
} else { } else {
ke::SafeSprintf(buffer, ke::SafeSprintf(buffer,
sizeof(buffer), sizeof(buffer),
"%d. %s\n", "%d. %s\n",
option == 10 ? 0 : option, option == 10 ? 0 : option,
m_OptNames[abs(MENU_BACK)].chars()); tempItemName);
} }
} else { } else {
option++; option++;
@ -570,13 +584,26 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
sizeof(buffer), sizeof(buffer),
"\\d%d. %s\n\\w", "\\d%d. %s\n\\w",
option == 10 ? 0 : option, option == 10 ? 0 : option,
m_OptNames[abs(MENU_BACK)].chars()); tempItemName);
} else { } else {
ke::SafeSprintf(buffer, sizeof(buffer), "#. %s\n", m_OptNames[abs(MENU_BACK)].chars()); ke::SafeSprintf(buffer, sizeof(buffer), "#. %s\n", tempItemName);
} }
} }
m_Text = m_Text + buffer; m_Text = m_Text + buffer;
tempItemName = m_OptNames[abs(MENU_MORE)].chars();
if (this->useMultilingual)
{
const auto language = playerlang(player);
const auto definition = translate(this->amx, language, tempItemName);
if (definition)
{
tempItemName = definition;
}
}
if (flags & Display_Next) if (flags & Display_Next)
{ {
keys |= (1<<option++); keys |= (1<<option++);
@ -587,13 +614,13 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
"%s%d. \\w%s\n", "%s%d. \\w%s\n",
m_ItemColor.chars(), m_ItemColor.chars(),
option == 10 ? 0 : option, option == 10 ? 0 : option,
m_OptNames[abs(MENU_MORE)].chars()); tempItemName);
} else { } else {
ke::SafeSprintf(buffer, ke::SafeSprintf(buffer,
sizeof(buffer), sizeof(buffer),
"%d. %s\n", "%d. %s\n",
option == 10 ? 0 : option, option == 10 ? 0 : option,
m_OptNames[abs(MENU_MORE)].chars()); tempItemName);
} }
} else { } else {
option++; option++;
@ -603,9 +630,9 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
sizeof(buffer), sizeof(buffer),
"\\d%d. %s\n\\w", "\\d%d. %s\n\\w",
option == 10 ? 0 : option, option == 10 ? 0 : option,
m_OptNames[abs(MENU_MORE)].chars()); tempItemName);
} else { } else {
ke::SafeSprintf(buffer, sizeof(buffer), "#. %s\n", m_OptNames[abs(MENU_MORE)].chars()); ke::SafeSprintf(buffer, sizeof(buffer), "#. %s\n", tempItemName);
} }
} }
m_Text = m_Text + buffer; m_Text = m_Text + buffer;
@ -614,13 +641,26 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
option += 2; option += 2;
} }
} }
if ((items_per_page && !m_NeverExit) || (m_ForceExit && numItems < 10)) if ((items_per_page && !m_NeverExit) || (m_ForceExit && numItems < 10))
{ {
auto exitName = m_OptNames[abs(MENU_EXIT)].chars();
if (this->useMultilingual)
{
const auto language = playerlang(player);
const auto definition = translate(this->amx, language, exitName);
if (definition)
{
exitName = definition;
}
}
/* Visual pad has not been added yet */ /* Visual pad has not been added yet */
if (!items_per_page) if (!items_per_page)
m_Text = m_Text + "\n"; m_Text = m_Text + "\n";
keys |= (1<<option++); keys |= (1<<option++);
if (m_AutoColors) if (m_AutoColors)
{ {
@ -629,17 +669,17 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
"%s%d. \\w%s\n", "%s%d. \\w%s\n",
m_ItemColor.chars(), m_ItemColor.chars(),
option == 10 ? 0 : option, option == 10 ? 0 : option,
m_OptNames[abs(MENU_EXIT)].chars()); exitName);
} else { } else {
ke::SafeSprintf(buffer, ke::SafeSprintf(buffer,
sizeof(buffer), sizeof(buffer),
"%d. %s\n", "%d. %s\n",
option == 10 ? 0 : option, option == 10 ? 0 : option,
m_OptNames[abs(MENU_EXIT)].chars()); exitName);
} }
m_Text = m_Text + buffer; m_Text = m_Text + buffer;
} }
return m_Text.ptr(); return m_Text.ptr();
} }