Вопрос по части кода плагина Freak Fortress 1.19.9

Bruno_Ferrari

Участник
Сообщения
27
Реакции
0
Добрый день. У меня проблема.
Когда игрок хочет выключить/включить музыку боссов, он её выключает, но в чате при любом раскладе высвечивается "ON", хотя игрок её выключил и она заглохла.
Ну а когда включает, так же высвечивается "ON". Аналогично может происходить с "OFF". В чём тут недоработка ? Кто поможет? Фото пример прикрепил.
Вот часть кода:
public Action MusicTogglePanelCmd(int client, int args)
{
if(!IsValidClient(client))
{
ReplyToCommand(client, "[SM] %t", "Command is in-game only");
return Plugin_Handled;
}

if(args)
{
static char cmd[64];
GetCmdArgString(cmd, sizeof(cmd));
if(StrContains(cmd, "off", false)!=-1 || StrContains(cmd, "disable", false)!=-1 || StrContains(cmd, "0", false)!=-1)
{
ToggleBGM(client, false);
}
else if(StrContains(cmd, "on", false)!=-1 || StrContains(cmd, "enable", false)!=-1 || StrContains(cmd, "1", false)!=-1)
{
if(ToggleMusic[client])
{
FReplyToCommand(client, "You already have boss themes enabled...");
return Plugin_Handled;
}
ToggleBGM(client, true);
}
FPrintToChat(client, "%t", "ff2_music", ToggleMusic[client] ? "on" : "off"); // TODO: Make this more multi-language friendly
return Plugin_Handled;
}

MusicTogglePanel(client);
return Plugin_Handled;
}

public Action MusicTogglePanel(int client)
{
if(!cvarAdvancedMusic.BoolValue)
{
Menu menu = new Menu(MusicTogglePanelH);
menu.SetTitle("Turn the Freak Fortress 2 music...");
menu.AddItem("On", "On");
menu.AddItem("Off", "Off");
menu.ExitButton = false;
menu.Display(client, MENU_TIME_FOREVER);
}
else
{
char title[128];
Menu menu = new Menu(MusicTogglePanelH);
SetGlobalTransTarget(client);
FormatEx(title, sizeof(title), "%t", "theme_menu");
menu.SetTitle(title, title);
if(ToggleMusic[client])
{
FormatEx(title, sizeof(title), "%t", "themes_disable");
menu.AddItem(title, title);
FormatEx(title, sizeof(title), "%t", "theme_skip");
menu.AddItem(title, title);
FormatEx(title, sizeof(title), "%t", "theme_shuffle");
menu.AddItem(title, title);
if(cvarSongInfo.IntValue >= 0)
{
FormatEx(title, sizeof(title), "%t", "theme_select");
menu.AddItem(title, title);
}
}
else
{
FormatEx(title, sizeof(title), "%t", "themes_enable");
menu.AddItem(title, title);
}
menu.ExitButton = true;
menu.Display(client, MENU_TIME_FOREVER);
}
return Plugin_Continue;
}

public int MusicTogglePanelH(Menu menu, MenuAction action, int client, int selection)
{
switch(action)
{
case MenuAction_End:
{
delete menu;
}
case MenuAction_Select:
{
if(!cvarAdvancedMusic.BoolValue)
{
if(selection) //Off
{
ToggleMusic[client] = false;
StopMusic(client, true);
}
else //On
{
//If they already have music enabled don't do anything
if(!ToggleMusic[client])
{
ToggleMusic[client] = true;
StartMusic(client);
}
}
FPrintToChat(client, "%t", "ff2_music", selection==2 ? "off" : "on"); // TODO: Make this more multi-language friendly
}
else
{
switch(selection)
{
case 0:
{
ToggleBGM(client, ToggleMusic[client] ? false : true);
FPrintToChat(client, "%t", "ff2_music", ToggleVoice[client] ? "on" : "off"); // And here too
}
case 1:
{
Command_SkipSong(client, 0);
}
case 2:
{
Command_ShuffleSong(client, 0);
}
case 3:
{
Command_Tracklist(client, 0);
}
}
}
}
}
}

void ToggleBGM(int client, bool enable)
{
if(enable)
{
ToggleMusic[client] = true;
StartMusic(client);
}
else
{
ToggleMusic[client] = false;
StopMusic(client, true);
}
}
 

Вложения

  • Безымянн1ый.png
    Безымянн1ый.png
    29 КБ · Просмотры: 27

Grey83

не пишу плагины с весны 2022
Сообщения
8,606
Реакции
5,096
Который раз прошу на форуме: заключайте код в специальный тег для кода [CODE=clike][/CODE], а не под спойлер

Откуда взялось ToggleVoice[client] в FPrintToChat(client, "%t", "ff2_music", ToggleVoice[client] ? "on" : "off"); ?

Функцию ToggleBGM можно упростить до такого вида:
C-подобный:
void ToggleBGM(int client, bool enable)
{
    if((ToggleMusic[client] = enable))
        StartMusic(client);
    else
        StopMusic(client, true);
}
Сообщения автоматически склеены:

В чём тут недоработка ?
М/б надо было делать вывод статуса в чат в функции ToggleBGM?
 
Последнее редактирование:
Сверху Снизу