-#include "_all.qh"
+#include "quickmenu.qh"
-#include "hud_config.qh"
-
-#include "../dpdefs/keycodes.qh"
+#include "hud/all.qh"
+#include "mapvoting.qh"
// QUICKMENU_MAXLINES must be <= 10
const int QUICKMENU_MAXLINES = 10;
int QuickMenu_Buffer_Index;
string QuickMenu_CurrentSubMenu;
float QuickMenu_TimeOut;
+
+// QuickMenu_Buffer are labeled with these tags
+#define QM_TAG_TITLE "T"
+#define QM_TAG_SUBMENU "S"
+#define QM_TAG_COMMAND "C"
+#define QM_TAG_PLCOMMAND "P"
+
+#define QuickMenu_Buffer_Set(tag, string) bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat(tag, string))
+#define QuickMenu_Buffer_Get() bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index)
+
// if s1 is not empty s will be displayed as command otherwise as submenu
void QuickMenu_Page_LoadEntry(int i, string s, string s1)
{
mode = "file";
}
+ if(mode == "file")
+ {
+ if(autocvar_hud_panel_quickmenu_file == "" || autocvar_hud_panel_quickmenu_file == "0")
+ LOG_INFO("No file name is set in hud_panel_quickmenu_file, loading default quickmenu\n");
+ else
+ {
+ fh = fopen(autocvar_hud_panel_quickmenu_file, FILE_READ);
+ if(fh < 0)
+ LOG_INFOF("Couldn't open file \"%s\", loading default quickmenu\n", autocvar_hud_panel_quickmenu_file);
+ }
+ if(fh < 0)
+ mode = "default";
+ }
+
if(mode == "default")
{
QuickMenu_Buffer = buf_create();
}
else if(mode == "file")
{
- if(autocvar_hud_panel_quickmenu_file != "")
- if(autocvar_hud_panel_quickmenu_file != "0")
- fh = fopen(autocvar_hud_panel_quickmenu_file, FILE_READ);
- if(fh < 0)
- {
- printf("Couldn't open file \"%s\"\n", autocvar_hud_panel_quickmenu_file);
- return false;
- }
-
QuickMenu_Buffer = buf_create();
if(QuickMenu_Buffer < 0)
{
// first skip invalid entries, so we don't check them anymore
float argc;
argc = tokenize_console(s);
- if(argc == 0 || argv(0) == "" || substring(argv(0), 0, 2) == "////")
+ if(argc == 0 || argv(0) == "")
continue;
if(argc == 1)
- bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("S", argv(0))); // Submenu
+ QuickMenu_Buffer_Set(QM_TAG_SUBMENU, argv(0));
else if(argc == 2)
{
if(argv(1) == "")
continue;
- bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("T", argv(0))); // command Title
+ QuickMenu_Buffer_Set(QM_TAG_TITLE, argv(0));
++QuickMenu_Buffer_Size;
- bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("C", argv(1))); // command
+ QuickMenu_Buffer_Set(QM_TAG_COMMAND, argv(1));
}
else if(argc == 3)
{
float teamplayers = 0, without_me = 0;
switch(argv(2))
{
- case "ALLPLAYERS_BUT_ME": without_me = 1;
+ case "ALLPLAYERS_BUT_ME": without_me = 1; // fall through
case "ALLPLAYERS": teamplayers = 0; break;
- case "OWNTEAMPLAYERS_BUT_ME": without_me = 1;
+ case "OWNTEAMPLAYERS_BUT_ME": without_me = 1; // fall through
case "OWNTEAMPLAYERS": teamplayers = 1; break;
case "ENEMYTEAMPLAYERS": teamplayers = 2; break;
default: continue;
if(QuickMenu_Buffer_Size + 3 < QUICKMENU_BUFFER_MAXENTRIES)
{
- bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("S", argv(0))); // Submenu
+ QuickMenu_Buffer_Set(QM_TAG_SUBMENU, argv(0));
++QuickMenu_Buffer_Size;
- bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("T", ftos(teamplayers), ftos(without_me))); // command arguments
+ QuickMenu_Buffer_Set(QM_TAG_TITLE, strcat(ftos(teamplayers), ftos(without_me))); // put PLCOMMAND arguments in the title string
++QuickMenu_Buffer_Size;
- bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("P", argv(1))); // command for each player
+ QuickMenu_Buffer_Set(QM_TAG_PLCOMMAND, argv(1));
++QuickMenu_Buffer_Size;
- bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("S", argv(0))); // Submenu
+ QuickMenu_Buffer_Set(QM_TAG_SUBMENU, argv(0));
}
}
++QuickMenu_Buffer_Size;
}
else
{
- printf("Unrecognized mode %s\n", mode);
+ LOG_WARNINGF("Unrecognized mode %s\n", mode);
return false;
}
setcursormode(1);
hudShiftState = 0;
- QuickMenu_TimeOut = time + autocvar_hud_panel_quickmenu_time;
+ QuickMenu_TimeOut = ((autocvar_hud_panel_quickmenu_time > 0) ? time + autocvar_hud_panel_quickmenu_time : 0);
return true;
}
z_submenu = strzone(submenu);
for(++QuickMenu_Buffer_Index ; QuickMenu_Buffer_Index < QuickMenu_Buffer_Size; ++QuickMenu_Buffer_Index)
{
- s = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index);
- if(substring(s, 0, 1) != "S")
+ s = QuickMenu_Buffer_Get();
+ if(substring(s, 0, 1) != QM_TAG_SUBMENU)
continue;
if(substring(s, 1, -1) == z_submenu) // submenu end
break;
// skip everything until the submenu open tag is found
for( ; QuickMenu_Buffer_Index < QuickMenu_Buffer_Size; ++QuickMenu_Buffer_Index)
{
- s = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index);
- if(substring(s, 0, 1) == "S" && substring(s, 1, -1) == z_submenu)
+ s = QuickMenu_Buffer_Get();
+ if(substring(s, 0, 1) == QM_TAG_SUBMENU && substring(s, 1, -1) == z_submenu)
{
// printf("^3 beginning of %s\n", z_submenu);
++QuickMenu_Buffer_Index;
// printf("^1 skipping %s\n", s);
}
if(QuickMenu_Buffer_Index == QuickMenu_Buffer_Size)
- printf("Couldn't find submenu \"%s\"\n", z_submenu);
+ LOG_WARNINGF("Couldn't find submenu \"%s\"\n", z_submenu);
}
// only the last page can contain up to QUICKMENU_MAXLINES entries
int entry_num = 0; // counts entries in target_submenu
for( ; QuickMenu_Buffer_Index < QuickMenu_Buffer_Size; ++QuickMenu_Buffer_Index)
{
- s = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index);
+ s = QuickMenu_Buffer_Get();
if(z_submenu != "" && substring(s, 1, -1) == z_submenu)
{
}
// NOTE: entries are loaded starting from 1, not from 0
- if(substring(s, 0, 1) == "S") // submenu
+ if(substring(s, 0, 1) == QM_TAG_SUBMENU)
{
if(entry_num >= first_entry)
QuickMenu_Page_LoadEntry(QuickMenu_Page_Entries, substring(s, 1, -1), "");
QuickMenu_skip_submenu(substring(s, 1, -1));
}
- else if(entry_num >= first_entry && substring(s, 0, 1) == "T")
+ else if(entry_num >= first_entry && substring(s, 0, 1) == QM_TAG_TITLE)
{
++QuickMenu_Buffer_Index;
- cmd = bufstr_get(QuickMenu_Buffer, QuickMenu_Buffer_Index);
+ cmd = QuickMenu_Buffer_Get();
string command_code = substring(cmd, 0, 1);
- if(command_code == "C")
+ if(command_code == QM_TAG_COMMAND)
cmd = substring(cmd, 1, -1);
- else if(command_code == "P")
+ else if(command_code == QM_TAG_PLCOMMAND)
{
// throw away the current quickmenu buffer and load a new one
cmd = substring(cmd, 1, -1);
QuickMenu_Close();
return false;
}
- QuickMenu_TimeOut = time + autocvar_hud_panel_quickmenu_time;
+ QuickMenu_TimeOut = ((autocvar_hud_panel_quickmenu_time > 0) ? time + autocvar_hud_panel_quickmenu_time : 0);
return true;
}
if (QuickMenu_Page_Command[num] != "")
{
localcmd(strcat("\n", QuickMenu_Page_Command[num], "\n"));
- QuickMenu_TimeOut = time + autocvar_hud_panel_quickmenu_time;
+ QuickMenu_TimeOut = ((autocvar_hud_panel_quickmenu_time > 0) ? time + autocvar_hud_panel_quickmenu_time : 0);
return true;
}
if (QuickMenu_Page_Description[num] != "")
}
}
- vector cursorsize = '32 32 0';
- drawpic(mousepos, strcat("gfx/menu/", autocvar_menu_skin, "/cursor.tga"), cursorsize, '1 1 1', 0.8, DRAWFLAG_NORMAL);
+ draw_cursor_normal(mousepos, '1 1 1', 0.8);
prevMouseClicked = mouseClicked;
}
drawcolorcodedstring(pos, entry, fontsize, panel_fg_alpha, DRAWFLAG_ADDITIVE);
}
-void HUD_QuickMenu(void)
+void HUD_QuickMenu()
{
if(!autocvar__hud_configure)
{
//if(!autocvar_hud_panel_quickmenu) return;
if(!hud_panel_quickmenu) return;
+ if(QuickMenu_TimeOut)
if(time > QuickMenu_TimeOut)
{
QuickMenu_Close();
if(target_submenu == eng_submenu && target_submenu_found) \
return; /* target_submenu entries are now loaded, exit */ \
if(QuickMenu_Buffer_Size < QUICKMENU_BUFFER_MAXENTRIES) \
- bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("S", submenu)); \
+ QuickMenu_Buffer_Set(QM_TAG_SUBMENU, submenu); \
++QuickMenu_Buffer_Size; \
if(target_submenu == eng_submenu && !target_submenu_found) { \
QuickMenu_Buffer_Size = 0; /* enable load of next entries */ \
#define QUICKMENU_ENTRY(title,command) { \
if(QuickMenu_Buffer_Size + 1 < QUICKMENU_BUFFER_MAXENTRIES) \
{ \
- bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("T", title)); \
+ QuickMenu_Buffer_Set(QM_TAG_TITLE, title); \
++QuickMenu_Buffer_Size; \
- bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("C", command)); \
+ QuickMenu_Buffer_Set(QM_TAG_COMMAND, command); \
} \
++QuickMenu_Buffer_Size; \
}
#define QUICKMENU_SMENU_PL(submenu,eng_submenu,command,teamplayers,without_me) { \
if(QuickMenu_Buffer_Size + 3 < QUICKMENU_BUFFER_MAXENTRIES) {\
QUICKMENU_SMENU(submenu,eng_submenu) \
- bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("T", ftos(teamplayers), ftos(without_me))); \
+ QuickMenu_Buffer_Set(QM_TAG_TITLE, strcat(ftos(teamplayers), ftos(without_me))); \
++QuickMenu_Buffer_Size; \
- bufstr_set(QuickMenu_Buffer, QuickMenu_Buffer_Size, strcat("P", command)); \
+ QuickMenu_Buffer_Set(QM_TAG_PLCOMMAND, command); \
++QuickMenu_Buffer_Size; \
QUICKMENU_SMENU(submenu,eng_submenu) \
} \
continue;
if(without_me && pl.sv_entnum == player_localnum)
continue;
- QUICKMENU_ENTRY(GetPlayerName(pl.sv_entnum), sprintf(cmd, GetPlayerName(pl.sv_entnum)))
+ QUICKMENU_ENTRY(entcs_GetName(pl.sv_entnum), sprintf(cmd, entcs_GetName(pl.sv_entnum)))
}
return;
QUICKMENU_ENTRY_TC(CTX(_("QMCMD^killed flag, icon")), "say_team %s; g_waypointsprite_team_here_p", "killed flagcarrier (l:%y^7)", CTX(_("QMCMD^killed flagcarrier (l:%y^7)")))
QUICKMENU_ENTRY_TC(CTX(_("QMCMD^dropped flag, icon")), "say_team %s; g_waypointsprite_team_here_d", "dropped flag (l:%d^7)", CTX(_("QMCMD^dropped flag (l:%d^7)")))
QUICKMENU_ENTRY_TC(CTX(_("QMCMD^drop gun, icon")), "say_team %s; g_waypointsprite_team_here; wait; dropweapon", "dropped gun %w^7 (l:%l^7)", CTX(_("QMCMD^dropped gun %w^7 (l:%l^7)")))
- QUICKMENU_ENTRY_TC(CTX(_("QMCMD^drop flag/key, icon")), "say_team %s; g_waypointsprite_team_here; wait; +use", "dropped flag/key %w^7 (l:%l^7)", CTX(_("QMCMD^dropped flag/key %w^7 (l:%l^7)")))
+ QUICKMENU_ENTRY_TC(CTX(_("QMCMD^drop flag/key, icon")), "say_team %s; g_waypointsprite_team_here; wait; use", "dropped flag/key %w^7 (l:%l^7)", CTX(_("QMCMD^dropped flag/key %w^7 (l:%l^7)")))
QUICKMENU_SMENU(CTX(_("QMCMD^Team chat")), "Team chat")
}
- QUICKMENU_SMENU_PL(CTX(_("QMCMD^Send private message to")), "Send private message to", "commandmode tell \"%s\" ^7", 0, 1)
+ QUICKMENU_SMENU_PL(CTX(_("QMCMD^Send private message to")), "Send private message to", "commandmode tell \"%s^7\"", 0, 1)
QUICKMENU_SMENU(CTX(_("QMCMD^Settings")), "Settings")
QUICKMENU_SMENU(CTX(_("QMCMD^View/HUD settings")), "View/HUD settings")
QUICKMENU_SMENU(CTX(_("QMCMD^Sound settings")), "Sound settings")
QUICKMENU_ENTRY(CTX(_("QMCMD^Hit sound")), "toggle cl_hitsound")
- QUICKMENU_ENTRY(CTX(_("QMCMD^Chat sound")), "toggle cl_chatsound")
+ QUICKMENU_ENTRY(CTX(_("QMCMD^Chat sound")), "toggle con_chatsound")
QUICKMENU_SMENU(CTX(_("QMCMD^Sound settings")), "Sound settings")
if(spectatee_status > 0)
QUICKMENU_SMENU(CTX(_("QMCMD^Call a vote")), "Call a vote")
QUICKMENU_ENTRY(CTX(_("QMCMD^Restart the map")), "vcall restart")
QUICKMENU_ENTRY(CTX(_("QMCMD^End match")), "vcall endmatch")
- if(getstatf(STAT_TIMELIMIT) > 0)
+ if(STAT(TIMELIMIT) > 0)
{
QUICKMENU_ENTRY(CTX(_("QMCMD^Reduce match time")), "vcall reducematchtime")
QUICKMENU_ENTRY(CTX(_("QMCMD^Extend match time")), "vcall extendmatchtime")
if(target_submenu != "" && !target_submenu_found)
{
- printf("Couldn't find submenu \"%s\"\n", target_submenu);
+ LOG_WARNINGF("Couldn't find submenu \"%s\"\n", target_submenu);
if(prvm_language != "en")
- printf("^3Warning: submenu must be in English\n", target_submenu);
+ LOG_WARNINGF("^3Warning: submenu must be in English\n", target_submenu);
QuickMenu_Buffer_Size = 0;
}
}