From dbcb040eeb53da283ab3ac451a082a847f2ec982 Mon Sep 17 00:00:00 2001 From: ac-stef Date: Tue, 6 Jun 2017 13:09:23 +0200 Subject: [PATCH] menu code cleanup * fix some memory leaks * rename stuff * fix crash Removed commands and variables: chmenumdl (replaced by menumdl) scorefont (replaced by "menufont score mono") menuitemvar (better handled with fully dynamic menus) Changed commands: menufont menu font Sets the font for a specific menu. If menu is "", the currently initialised menu is used. Example: menufont score mono menumdl menu mdl anim rotspeed scale Assumes the function of the previous chmenumdl. If menu is "", the currently initialised menu is used. Specifies, which model to render and how. If only menu is specified, no model is rendered. DOCREF chmenumdl scorefont menufont menumdl menuitemvar --- config/menus_edit.cfg | 6 +- config/menus_multiplayer.cfg | 168 ++++++++++++++++++++--------------- config/menus_settings.cfg | 48 +++++----- config/scripts.cfg | 1 + source/src/clientgame.cpp | 2 +- source/src/clients2c.cpp | 4 +- source/src/docs.cpp | 4 +- source/src/main.cpp | 3 +- source/src/menus.cpp | 148 +++++++++--------------------- source/src/protos.h | 12 +-- source/src/scoreboard.cpp | 2 +- source/src/serverbrowser.cpp | 17 ++-- 12 files changed, 185 insertions(+), 230 deletions(-) diff --git a/config/menus_edit.cfg b/config/menus_edit.cfg index d8b42c0c..58787d79 100644 --- a/config/menus_edit.cfg +++ b/config/menus_edit.cfg @@ -51,8 +51,8 @@ tempalias __mapmodelcategories [ looplist $__mapmodelcategories [key menu] [tempalias (concatword __mm_key_ $key) $menu] -tempalias __mm_showmodel [concat alias __lastwatchedmapmodel $arg2 ";" chmenumdl (escape $arg1) (concatword mapmodels/ $arg2) all 40 3] -tempalias __mm_showmodel2 [concat chmenumdl (escape $arg1) (concatword mapmodels/ $arg2) all 40 3] +tempalias __mm_showmodel [concat alias __lastwatchedmapmodel $arg2 ";" menumdl (escape $arg1) (concatword mapmodels/ $arg2) all 40 3] +tempalias __mm_showmodel2 [concat menumdl (escape $arg1) (concatword mapmodels/ $arg2) all 40 3] tempalias __mm_tempmenus "" tempalias __rebuildmapmodelmenus [ @@ -168,7 +168,7 @@ tempalias __rebuildmapmodelmenus [ menuitem (concatword "edit slot #" $i ": " (editmapmodelslot $i) $origin) (concat alias __mmslot $i ";" showmenu (escape "Edit mapmodel slot")) (__mm_showmodel2 [Edit mapmodel slots] $mpath) ] [ if (strlen (mapmodelslotusage $i)) [ - menuitem (concatword "unassigned slot #" $i) (concat alias __mmslot $i ";" showmenu (escape "Edit mapmodel slot")) [chmenumdl [Edit mapmodel slots] ""] + menuitem (concatword "unassigned slot #" $i) (concat alias __mmslot $i ";" showmenu (escape "Edit mapmodel slot")) [menumdl [Edit mapmodel slots] ""] ] ] ] diff --git a/config/menus_multiplayer.cfg b/config/menus_multiplayer.cfg index d6a78ffb..8832d191 100644 --- a/config/menus_multiplayer.cfg +++ b/config/menus_multiplayer.cfg @@ -35,9 +35,9 @@ tempalias __ingamemenu_2 [ const __ingamemenu_showmodel [ if (&& (< (player1 team) 4) $arg1) [ - chmenumdl (curmenu) (concatword "playermodels/" (at [CLA RVSF CLA RVSF] (player1 team)) "/0" (+ 1 (player1 skin))) idle 15 3 + menumdl (curmenu) (concatword "playermodels/" (at [CLA RVSF CLA RVSF] (player1 team)) "/0" (+ 1 (player1 skin))) idle 15 3 ] [ - chmenumdl (curmenu) + menumdl (curmenu) ] ] @@ -180,62 +180,38 @@ menuitem "\f2\t\t [ Admin connect ]\t\t" [ connectadmin $acc1 $acc2 $acc3 ] //// Main > Multiplayer > server > serverbrowser help //// +const __getfavattr [ push n (concatword sbfavourite_ $arg1 _ $arg2) ; n = $$n ; result (pop n) ] newmenu [serverbrowser help] -menuitem "F1: Display this help menu" -1 -menuitem "F3: Search for players by nickname\i\3" [ showmenu [search player] ] -menuitem "Search for servers\i\3" [ showmenu [search server] ] -menuitem "F4: Edit favourites\i\3" [ showmenu [edit favourites] ] -menuitem "F5: Update the serverlist from the masterserver" [ updatefrommaster 1; closecurmenu ] -menuitem "F9: Get additional server information\i\3" [ showmenu serverinfo ] -menuitem "Edit alternative views in serverbrowser\i\3" [ showmenu [serverbrowser alternative views] ] -menuitem "" -1 -menuitem "Options:" -1 -menuitemcheckbox "F6: Reverse the sort order:" "$serversortdir" [ serversortdir $arg1 ] -menuitemcheckbox "F7: Only show good servers:" "$showonlygoodservers" [ showonlygoodservers $arg1 ] -menuitemcheckbox "F8: Show minutes remaining:" "$showminremain" [ showminremain $arg1 ] -menuitemcheckbox "Sort official maps ontop:" "$serversortpreferofficial" [ serversortpreferofficial $arg1 ] -menuitemcheckbox "Use gamemode acronyms:" "$modeacronyms" [ modeacronyms $arg1 ] -menuitemcheckbox "Show number of all players on the servers:" "$showallplayersnumber" [ showallplayersnumber $arg1 ] -menuitemslider "Favourites tag column:\t" 0 2 "$serverbrowserhidefavtag" ["Show always" "Show when used" "Hide always"] [ serverbrowserhidefavtag $arg1 ] 1 -menuitemslider "Server IP & port:\t\t" 0 2 "$serverbrowserhideip" [Show "Show in grey" Hide] [ serverbrowserhideip $arg1 ] 1 -menuitemslider "Sort servers by:\t\t" 0 7 "$serversort" [Ping "Number of players" "Max players" "Minutes remaining" "Map name" Gamemode "IP address" "Server description"] [ serversort $arg1 ] 1 menuinitselection 1 - -tempalias addallfavcatmenus [ - newmenu [serverbrowser help] - menuitem "" -1 - menuitem "Keys to add/remove servers from categories:" -1 - loop ii (listlen (listfavcats)) [ addfavcatmenu (at (listfavcats) $ii) ] - addallfavcatmenus = [] -] -const addfavcatmenu [ - tempalias i (+ 1 (findlist (listfavcats) $arg1)) - newmenu [edit favourites] - if (< $i 11) [ - menuitemvar (concatword "concat " (mod $i 10) ": $" sbfavourite_ $arg1 _desc " (concatword <\fs $" sbfavourite_ $arg1 _tag " \fr>)") (concatword "showmenu [favourites " $i "]") - newmenu [serverbrowser help] - menuitemvar (concatword "concat " (mod $i 10) ": Toggle category $" sbfavourite_ $arg1 _desc " (concatword <\fs $" sbfavourite_ $arg1 _tag " \fr>)") -1 - ] [ - menuitemvar (concatword "result $" sbfavourite_ $arg1 _desc " (concatword <\fs $" sbfavourite_ $arg1 _tag " \fr>)") (concatword "showmenu [favourites " $i "]") - ] - newmenu (concat favourites $i) - menuitemvar ( concatword "concat " "Category name: \f2" (at (listfavcats) (- $i 1)) ) - menuitem "" -1 - menuitemtextinput "Tag: " (concatword "result $" sbfavourite_ $arg1 _tag) (concatword sbfavourite_ $arg1 _tag " = $arg1") [] 15 - menuitemtextinput "Description: " (concatword "result $" sbfavourite_ $arg1 _desc) (concatword sbfavourite_ $arg1 _desc " = $arg1") [] 45 - menuitem "" -1 - menuitemslider "Background red:\t" 0 100 (concatword "$" sbfavourite_ $arg1 _red) 10 (concatword sbfavourite_ $arg1 _red " = $arg1") 1 - menuitemslider "Background green:\t" 0 100 (concatword "$" sbfavourite_ $arg1 _green) 10 (concatword sbfavourite_ $arg1 _green " = $arg1") 1 - menuitemslider "Background blue:\t" 0 100 (concatword "$" sbfavourite_ $arg1 _blue) 10 (concatword sbfavourite_ $arg1 _blue " = $arg1") 1 - menuitemslider "Background alpha:\t" 0 100 (concatword "$" sbfavourite_ $arg1 _alpha) 10 (concatword sbfavourite_ $arg1 _alpha " = $arg1") 1 - menuitem "" -1 - menuitemtextinput "Keyword list: " (concatword "result $" sbfavourite_ $arg1 _keys) (concatword sbfavourite_ $arg1 _keys " = $arg1") [] 255 - menuitem "" -1 - menuitemtextinput "Weight: " (concatword "result $" sbfavourite_ $arg1 _weight) (concatword sbfavourite_ $arg1 _weight " = $arg1") [] 10 - menuitem "" -1 - menuitemslider "" 0 1 (concatword "result $" sbfavourite_ $arg1 _ignore) ["Enable this category" "Ignore this category"] (concatword sbfavourite_ $arg1 _ignore " = $arg1") 1 - menuitem "" -1 - menuitem "Show servers of this category\i\3" (concat showonlyfavourites $i ";showmenu server") [ showonlyfavourites 0 ] +menuinit [ + resetcurmenu + menuitem "F1: Display this help menu" -1 + menuitem "F3: Search for players by nickname\i\3" [ showmenu [search player] ] + menuitem "Search for servers\i\3" [ showmenu [search server] ] + menuitem "F4: Edit favourites\i\3" [ showmenu [edit favourites] ] + menuitem "F5: Update the serverlist from the masterserver" [ updatefrommaster 1; closecurmenu ] + menuitem "F9: Get additional server information\i\3" [ showmenu serverinfo ] + menuitem "Edit alternative views in serverbrowser\i\3" [ showmenu [serverbrowser alternative views] ] + menuitem "" -1 + menuitem "Options:" -1 + menuitemcheckbox "F6: Reverse the sort order:" "$serversortdir" [ serversortdir $arg1 ] + menuitemcheckbox "F7: Only show good servers:" "$showonlygoodservers" [ showonlygoodservers $arg1 ] + menuitemcheckbox "F8: Show minutes remaining:" "$showminremain" [ showminremain $arg1 ] + menuitemcheckbox "Sort official maps ontop:" "$serversortpreferofficial" [ serversortpreferofficial $arg1 ] + menuitemcheckbox "Use gamemode acronyms:" "$modeacronyms" [ modeacronyms $arg1 ] + menuitemcheckbox "Show number of all players on the servers:" "$showallplayersnumber" [ showallplayersnumber $arg1 ] + menuitemslider "Favourites tag column:\t" 0 2 "$serverbrowserhidefavtag" ["Show always" "Show when used" "Hide always"] [ serverbrowserhidefavtag $arg1 ] 1 + menuitemslider "Server IP & port:\t\t" 0 2 "$serverbrowserhideip" [Show "Show in grey" Hide] [ serverbrowserhideip $arg1 ] 1 + menuitemslider "Sort servers by:\t\t" 0 7 "$serversort" [Ping "Number of players" "Max players" "Minutes remaining" "Map name" Gamemode "IP address" "Server description"] [ serversort $arg1 ] 1 + if (strlen (listfavcats)) [ + menuitem "" -1 + menuitem "Keys to add/remove servers from categories:" -1 + looplisti (listfavcats) fav [ + if (< $i 10) [ + menuitem (concatword (+ $i 1) ": Toggle category " (__getfavattr $fav desc) " <\fs" (__getfavattr $fav tag) "\fr>") -1 + ] + ] + ] ] //// Main > Multiplayer > server > serverbrowser help > search player //// @@ -254,6 +230,47 @@ menuitem "\f2\t\t[ Search ]" [ showonlyfavourites (addfavcategory SEARCH); showm menuinitselection 1 //// Main > Multiplayer > server > serverbrowser help > edit favourites //// + +tempalias __curfav 1 +newmenu [edit favourites] +menuinit [ + resetcurmenu + looplisti (listfavcats) fav [ + if (< $i 10) [ + menuitem (concatword (+ 1 (mod $i 10)) ": " (__getfavattr $fav desc) " <\fs" (__getfavattr $fav tag) "\fr>") (concatword "__curfav = " $i " ; showmenu [edit favourites category]") + ] [ + menuitem (concatword (__getfavattr $fav desc) " <\fs" (__getfavattr $fav tag) "\fr>") (concatword "__curfav = " $i " ; showmenu [edit favourites category]") + ] + ] +] + +//// Main > Multiplayer > server > serverbrowser help > edit favourites > edit favourites category //// + +newmenu [edit favourites category] +menuinit [ + resetcurmenu + push fav (at (listfavcats) $__curfav) + push n (+ 1 $__curfav) + menuitem (concatword "Category #" $n ", name: \f2" $fav) -1 + menuitem "" -1 + menuitemtextinput "Tag: " (concatword "escapenoquotes $" sbfavourite_ $fav _tag) (concatword sbfavourite_ $fav _tag " = (at (addpunct $arg1) 0)") [] 15 + menuitemtextinput "Description: " (concatword "escapenoquotes $" sbfavourite_ $fav _desc) (concatword sbfavourite_ $fav _desc " = (at (addpunct $arg1) 0)") [] 45 + menuitem "" -1 + menuitemslider "Background red: \t" 0 100 (__getfavattr $fav red) 10 (concatword sbfavourite_ $fav _red " = $arg1") 1 + menuitemslider "Background green:\t" 0 100 (__getfavattr $fav green) 10 (concatword sbfavourite_ $fav _green " = $arg1") 1 + menuitemslider "Background blue: \t" 0 100 (__getfavattr $fav blue) 10 (concatword sbfavourite_ $fav _blue " = $arg1") 1 + menuitemslider "Background alpha:\t" 0 100 (__getfavattr $fav alpha) 10 (concatword sbfavourite_ $fav _alpha " = $arg1") 1 + menuitem "" -1 + menuitemtextinput "Keyword list:" (concatword "result $" sbfavourite_ $fav _keys) (concatword sbfavourite_ $fav _keys " = $arg1") [] 255 + menuitem "" -1 + menuitemtextinput "Weight:" (concatword "result $" sbfavourite_ $fav _weight) (concatword sbfavourite_ $fav _weight " = $arg1") [] 10 + menuitem "" -1 + menuitemradio "" 0 1 (__getfavattr $fav ignore) ["Enable this category " "Ignore this category"] (concatword sbfavourite_ $fav _ignore " = $arg1") + menuitem "" -1 + menuitem "Show servers of this category\i\3" (concat showonlyfavourites $n ";showmenu server") [ showonlyfavourites 0 ] + pop fav n +] + //// Main > Multiplayer > server > serverbrowser help > serverinfo //// // hardcoded @@ -271,22 +288,27 @@ menuinitselection 2 // called by sbconnect newmenu [password required] -menuinit [ sbpwd = [] ] // Resets the aliases -menuitemvar [result $sbmsg] -menuitem [You need a password to join it.] -1 -menuitem [] -1 -menuitemtextinput "Password: \t" [] [ sbpwd = $arg1 ] [] 128 1 -menuitem [] -1 -menuitem "\f2\t\t [ Connect ]\t\t" [ echo connecting to $sbdesc ; connect $sbdns $sbport $sbpwd ] -menuitem "\f2\t\t [ Connect without password ]\t\t" [ echo connecting to $sbdesc ; connect $sbdns $sbport ] -menuinitselection 3 +menuinit [ + resetcurmenu + sbpwd = "" + menuitem $sbmsg + menuitem "You need a password to join it." -1 + menuitem "" -1 + menuitemtextinput "Password: \t" [] [ sbpwd = $arg1 ] [] 128 1 + menuitem "" -1 + menuitem "\f2\t\t [ Connect ]\t\t" [ echo connecting to $sbdesc ; connect $sbdns $sbport $sbpwd ] + menuitem "\f2\t\t [ Connect without password ]\t\t" [ echo connecting to $sbdesc ; connect $sbdns $sbport ] + menuinitselection 3 +] newmenu getmap -menuitem [ This server is using a different version of this map...] -1 -menuitem [] -1 -menuitemvar "result $__getmaprevisions" -menuitem [] -1 -menuitem "\f2 [ Download the servers map version and join the game ]" [ getmap ] -menuitem "\f3 [ Keep the local map version and disconnect from the server ]" [ showmenu ""; disconnect ] -menuinitselection 4 - +menuinit [ + resetcurmenu + menuitem " This server is using a different version of this map..." -1 + menuitem "" -1 + menuitem $__getmaprevisions" + menuitem " -1 + menuitem "\f2 [ Download the servers map version and join the game ]" [ getmap ] + menuitem "\f3 [ Keep the local map version and disconnect from the server ]" [ showmenu ""; disconnect ] + menuinitselection 4 +] diff --git a/config/menus_settings.cfg b/config/menus_settings.cfg index 57ce1c91..d45ec5a4 100644 --- a/config/menus_settings.cfg +++ b/config/menus_settings.cfg @@ -199,36 +199,33 @@ menuitemcheckbox "Use high-res player skins" "(>= (findlist (zipmodlist active) newmenu Weapons menuinit [ menuselection (curmenu) (findlist "assault subgun sniper shotgun carbine" $nextprimary) ] -menumdl weapons/assault/menu mapmodel 75 12 looplist [ assault "MTP-57 Assault Rifle" subgun "A-ARD/10 Submachine Gun" sniper "Precision Tech AD-81 Sniper Rifle" shotgun "V-19 Combat Shotgun" carbine "TMP-M&A Carbine" -] [ w desc ] [execute (format [menuitem [%2] [nextprimary %1 ; echo %2 selected] [chmenumdl Weapons weapons/%1/menu mapmodel 75 12] ] $w $desc) ] +] [ w desc ] [execute (format [menuitem [%2] [nextprimary %1 ; echo %2 selected] [menumdl Weapons weapons/%1/menu mapmodel 75 12] ] $w $desc) ] //// Main > Settings > Gameplay > CLA //// newmenu CLA menuinit [ menuselection CLA (player1 skin_cla) ] -menumdl playermodels/CLA/01 all 50 4 -menuitem [Comandante] [ skin_cla 0 ] [ chmenumdl CLA playermodels/CLA/01 all 50 4 ] -menuitem [Psycho] [ skin_cla 1 ] [ chmenumdl CLA playermodels/CLA/02 all 50 4 ] -menuitem [Bomber] [ skin_cla 2 ] [ chmenumdl CLA playermodels/CLA/03 all 50 4 ] -menuitem [Ripper] [ skin_cla 3 ] [ chmenumdl CLA playermodels/CLA/04 all 50 4 ] +menuitem [Comandante] [ skin_cla 0 ] [ menumdl CLA playermodels/CLA/01 all 50 4 ] +menuitem [Psycho] [ skin_cla 1 ] [ menumdl CLA playermodels/CLA/02 all 50 4 ] +menuitem [Bomber] [ skin_cla 2 ] [ menumdl CLA playermodels/CLA/03 all 50 4 ] +menuitem [Ripper] [ skin_cla 3 ] [ menumdl CLA playermodels/CLA/04 all 50 4 ] //// Main > Settings > Gameplay > RVSF //// newmenu RVSF menuinit [menuselection RVSF (player1 skin_rvsf)] -menumdl playermodels/RVSF/01 all 50 4 -menuitem [Alpha] [ skin_rvsf 0 ] [ chmenumdl RVSF playermodels/RVSF/01 all 50 4 ] -menuitem [Tango] [ skin_rvsf 1 ] [ chmenumdl RVSF playermodels/RVSF/02 all 50 4 ] -menuitem [Cobra] [ skin_rvsf 2 ] [ chmenumdl RVSF playermodels/RVSF/03 all 50 4 ] -menuitem [Viper] [ skin_rvsf 3 ] [ chmenumdl RVSF playermodels/RVSF/04 all 50 4 ] -menuitem [Swat] [ skin_rvsf 4 ] [ chmenumdl RVSF playermodels/RVSF/05 all 50 4 ] -menuitem [Police] [ skin_rvsf 5 ] [ chmenumdl RVSF playermodels/RVSF/06 all 50 4 ] +menuitem [Alpha] [ skin_rvsf 0 ] [ menumdl RVSF playermodels/RVSF/01 all 50 4 ] +menuitem [Tango] [ skin_rvsf 1 ] [ menumdl RVSF playermodels/RVSF/02 all 50 4 ] +menuitem [Cobra] [ skin_rvsf 2 ] [ menumdl RVSF playermodels/RVSF/03 all 50 4 ] +menuitem [Viper] [ skin_rvsf 3 ] [ menumdl RVSF playermodels/RVSF/04 all 50 4 ] +menuitem [Swat] [ skin_rvsf 4 ] [ menumdl RVSF playermodels/RVSF/05 all 50 4 ] +menuitem [Police] [ skin_rvsf 5 ] [ menumdl RVSF playermodels/RVSF/06 all 50 4 ] //// Main > Settings > Gameplay > Weapon Settings //// @@ -419,16 +416,19 @@ menuitem "Customize crosshairs\i\3" [ showmenu [Customize c newmenu [Customize crosshairs] tempalias __crosshairset teammate -menuitemslider "Crosshair size: " 0 50 "$crosshairsize" 5 [ crosshairsize $arg1 ] -menuitem "Change default crosshair\i\3" [ tempalias __crosshairset default ; showmenu Crosshairs ] -menuitem "Change scope crosshair\i\3" [ tempalias __crosshairset scope ; showmenu Crosshairs ] -menuitem "" -1 -menuitemslider "Choose crosshair: " 0 -1 [findlist (listoptions crosshairnames) $__crosshairset] (listoptions crosshairnames) [ tempalias __crosshairset (at (listoptions crosshairnames) $arg1) ; refreshcurmenu ] -menuitemvar [ concat "Change" $__crosshairset "crosshair\i\3" ] [ showmenu Crosshairs ] -menuitem "" -1 -menuitemcheckbox "Crosshair effect: change color for low health" [ (at "0 1 1 0" $crosshairfx) ] [ crosshairfx (at (if $arg1 ["2 1 2 1"] ["0 3 0 3"]) $crosshairfx) ] -menuitemcheckbox "Crosshair effect: show assault rifle spread increase" [ (at "0 1 0 1" $crosshairfx) ] [ crosshairfx (at (if $arg1 ["3 1 1 3"] ["0 2 2 0"]) $crosshairfx) ] -menuitemcheckbox "Crosshair effect: show team-sign when aiming at teammates " "$crosshairteamsign" [ crosshairteamsign $arg1 ] +menuinit [ + resetcurmenu + menuitemslider "Crosshair size: " 0 50 "$crosshairsize" 5 [ crosshairsize $arg1 ] + menuitem "Change default crosshair\i\3" [ tempalias __crosshairset default ; showmenu Crosshairs ] + menuitem "Change scope crosshair\i\3" [ tempalias __crosshairset scope ; showmenu Crosshairs ] + menuitem "" -1 + menuitemslider "Choose crosshair: " 0 -1 [findlist (listoptions crosshairnames) $__crosshairset] (listoptions crosshairnames) [ tempalias __crosshairset (at (listoptions crosshairnames) $arg1) ; refreshcurmenu ] + menuitem (concat "Change" $__crosshairset "crosshair\i\3") [ showmenu Crosshairs ] + menuitem "" -1 + menuitemcheckbox "Crosshair effect: change color for low health" [ (at "0 1 1 0" $crosshairfx) ] [ crosshairfx (at (if $arg1 ["2 1 2 1"] ["0 3 0 3"]) $crosshairfx) ] + menuitemcheckbox "Crosshair effect: show assault rifle spread increase" [ (at "0 1 0 1" $crosshairfx) ] [ crosshairfx (at (if $arg1 ["3 1 1 3"] ["0 2 2 0"]) $crosshairfx) ] + menuitemcheckbox "Crosshair effect: show team-sign when aiming at teammates " "$crosshairteamsign" [ crosshairteamsign $arg1 ] +] //// Main > Settings > Mouse > Customize crosshairs > Crosshairs //// diff --git a/config/scripts.cfg b/config/scripts.cfg index c3665977..087f8e47 100644 --- a/config/scripts.cfg +++ b/config/scripts.cfg @@ -60,6 +60,7 @@ const fullscreentoggle [ fullscreen (! $fullscreen) ] const editsvar [ inputcommand $$arg1 (concatword "push q (addpunct $cmdbuf) ; " $arg1 " (at $q 0) ; pop q") (concatword "edit " $arg1 :) ] const editmapmsg [ editsvar mapmsg ] const editalias [ if (checkalias $arg1) 0 [ alias $arg1 "" ] ; inputcommand $$arg1 (concatword "push q (addpunct $cmdbuf) ; " $arg1 " = (at $q 0) ; pop q") (concatword "edit " $arg1 :) ] +const escapenoquotes [ substr (escape $arg1) 1 (- (strlen (escape $arg1)) 2) ] const run [ push n (concatword "exec config/" $arg1 ".cfg ") ; loop i (- $numargs 1) [ n = (concat $n (getalias (concatword "arg" (+ $i 2)))) ] ; n ; pop n] const closecurmenu [ closemenu (curmenu) ] const resetcurmenu [ delmenu (curmenu) ; newmenu (curmenu) ] diff --git a/source/src/clientgame.cpp b/source/src/clientgame.cpp index 0daa289a..3ee90222 100644 --- a/source/src/clientgame.cpp +++ b/source/src/clientgame.cpp @@ -1628,7 +1628,7 @@ void refreshsopmenu(void *menu, bool init) string kbr; if(getalias("_kickbanreason")!=NULL) formatstring(kbr)(" [ %s ]", getalias("_kickbanreason")); // leading space! formatstring(m.cmd)("%s %d%s", menu==kickmenu ? "kick" : (menu==banmenu ? "ban" : (menu==forceteammenu ? "forceteam" : "giveadmin")), i, (menu==kickmenu||menu==banmenu)?(strlen(kbr)>8?kbr:" NONE"):""); // 8==3 + "format-extra-chars" - menumanual(menu, m.name, m.cmd); + menuitemmanual(menu, m.name, m.cmd); } } diff --git a/source/src/clients2c.cpp b/source/src/clients2c.cpp index e375a8f0..e671e1a4 100644 --- a/source/src/clients2c.cpp +++ b/source/src/clients2c.cpp @@ -1363,7 +1363,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p, bool demo = false) conoutf("no demos available"); mline &m = demo_mlines.add(); copystring(m.name, "no demos available"); - menumanual(downloaddemomenu,m.name); + menuitemmanual(downloaddemomenu,m.name); } else { @@ -1375,7 +1375,7 @@ void parsemessages(int cn, playerent *d, ucharbuf &p, bool demo = false) mline &m = demo_mlines.add(); formatstring(m.name)("%d. %s", i+1, text); formatstring(m.cmd)("getdemo %d", i+1); - menumanual(downloaddemomenu, m.name, m.cmd); + menuitemmanual(downloaddemomenu, m.name, m.cmd); } } break; diff --git a/source/src/docs.cpp b/source/src/docs.cpp index 805a44a8..e7f91103 100644 --- a/source/src/docs.cpp +++ b/source/src/docs.cpp @@ -682,7 +682,7 @@ void renderdocsection(void *menu, bool init) } msections.sort(msectionsort); menureset(menu); - loopv(msections) { menumanual(menu, msections[i].name, msections[i].cmd, NULL, msections[i].desc); } + loopv(msections) { menuitemmanual(menu, msections[i].name, msections[i].cmd, NULL, msections[i].desc); } return; } } @@ -698,6 +698,6 @@ void renderdocmenu(void *menu, bool init) { maction &a = actions.add(); formatstring(a.cmd)("showmenu [%s]", sections[i].name); - menumanual(menu, sections[i].name, a.cmd); + menuitemmanual(menu, sections[i].name, a.cmd); } } diff --git a/source/src/main.cpp b/source/src/main.cpp index 65c38805..b870919b 100644 --- a/source/src/main.cpp +++ b/source/src/main.cpp @@ -1174,7 +1174,7 @@ int main(int argc, char **argv) scoremenu = addmenu("score", "columns", false, renderscores, NULL, false, true); servmenu = addmenu("server", NULL, true, refreshservers, serverskey); searchmenu = addmenu("search", NULL, true, refreshservers, serverskey); - serverinfomenu = addmenu("serverinfo", NULL, true, refreshservers, serverinfokey); + serverinfomenu = addmenu("serverinfo", "extended server information (F5: refresh)", true, refreshservers, serverinfokey); kickmenu = addmenu("kick player", NULL, true, refreshsopmenu); banmenu = addmenu("ban player", NULL, true, refreshsopmenu); forceteammenu = addmenu("force team", NULL, true, refreshsopmenu); @@ -1231,7 +1231,6 @@ int main(int argc, char **argv) autostartscripts(""); // all remaining scripts execfile("config/autoexec.cfg"); exechook(HOOK_SP_MP, "autoexec", ""); - execute("addallfavcatmenus"); // exec here, to add all categories (including those defined in autoexec.cfg) initing = NOT_INITING; uniformtexres = !hirestextures; diff --git a/source/src/menus.cpp b/source/src/menus.cpp index 95f8a280..b57cb1a0 100644 --- a/source/src/menus.cpp +++ b/source/src/menus.cpp @@ -298,29 +298,6 @@ struct mitemtext : mitemmanual } }; -struct mitemtextvar : mitemmanual -{ - string dtext; - const char *textexp; - mitemtextvar(gmenu *parent, const char *evalp, char *action, char *hoveraction) : mitemmanual(parent, dtext, action, hoveraction, NULL, NULL) - { - dtext[0] = '\0'; - textexp = evalp; - } - virtual ~mitemtextvar() - { - DELETEA(textexp); - DELETEA(action); - DELETEA(hoveraction); - } - virtual void init() - { - char *r = executeret(textexp); - copystring(dtext, r ? r : ""); - if(r) delete[] r; - } -}; - VARP(hidebigmenuimages, 0, 0, 1); struct mitemimagemanual : mitemmanual @@ -912,7 +889,7 @@ void delmenu(const char *name) } COMMAND(delmenu, "s"); -void menumanual(void *menu, char *text, char *action, color *bgcolor, const char *desc) +void menuitemmanual(void *menu, char *text, char *action, color *bgcolor, const char *desc) { gmenu &m = *(gmenu *)menu; m.items.add(new mitemmanual(&m, text, action, NULL, bgcolor, desc)); @@ -924,45 +901,33 @@ void menuimagemanual(void *menu, const char *filename, const char *altfontname, m.items.add(new mitemimagemanual(&m, filename, altfontname, text, action, NULL, bgcolor, desc)); } -void menutitle(void *menu, const char *title) +void menutitlemanual(void *menu, const char *title) { gmenu &m = *(gmenu *)menu; m.title = title; } -void menuheader(void *menu, char *header, char *footer) +void menuheader(void *menu, char *header, char *footer, bool heap) { gmenu &m = *(gmenu *)menu; - m.header = header && header[0] ? header : NULL; - m.footer = footer && footer[0] ? footer : NULL; + if(m.headfootheap) { DELSTRING(m.header); DELSTRING(m.footer); } + m.header = header; + m.footer = footer; + m.headfootheap = heap; // false: "manual" } -void lastmenu_header(char *header, char *footer) +COMMANDF(menuheader, "ss", (char *header, char *footer) { if(lastmenu) menuheader(lastmenu, *header ? newstring(header) : NULL, *footer ? newstring(footer) : NULL, true); }); + +void menufont(char *menu, const char *usefont) { - if(lastmenu) + gmenu *m = *menu ? menus.access(menu) : lastmenu; + if(m) { - menuheader(lastmenu, newstring(header), newstring(footer)); + DELSTRING(m->usefont); + m->usefont = usefont && *usefont ? newstring(usefont) : NULL; } - else conoutf("no last menu to apply to"); } -COMMANDN(menuheader, lastmenu_header, "ss"); - -void menufont(void *menu, const char *usefont) -{ - gmenu &m = *(gmenu *)menu; - if(usefont==NULL) - { - DELETEA(m.usefont); - m.usefont = NULL; - } else m.usefont = newstring(usefont); -} - -void setmenufont(char *usefont) -{ - if(!lastmenu) return; - menufont(lastmenu, usefont); -} -COMMANDN(menufont, setmenufont, "s"); +COMMAND(menufont, "ss"); void setmenublink(int *truth) { @@ -975,6 +940,7 @@ COMMANDN(menucanblink, setmenublink, "i"); void menuinit(char *initaction) { if(!lastmenu) return; + DELSTRING(lastmenu->initaction); lastmenu->initaction = newstring(initaction); } COMMAND(menuinit, "s"); @@ -1021,19 +987,10 @@ COMMAND(menuselection, "si"); void menuitem(char *text, char *action, char *hoveraction, char *desc) { if(!lastmenu) return; - char *t = newstring(text); - lastmenu->items.add(new mitemtext(lastmenu, t, newstring(action[0] ? action : text), hoveraction[0] ? newstring(hoveraction) : NULL, NULL, *desc ? newstring(desc) : NULL)); + lastmenu->items.add(new mitemtext(lastmenu, newstring(text), newstring(action[0] ? action : text), hoveraction[0] ? newstring(hoveraction) : NULL, NULL, *desc ? newstring(desc) : NULL)); } COMMAND(menuitem, "ssss"); -void menuitemvar(char *eval, char *action, char *hoveraction) -{ - if(!lastmenu) return; - char *t = newstring(eval); - lastmenu->items.add(new mitemtextvar(lastmenu, t, action[0] ? newstring(action) : NULL, hoveraction[0] ? newstring(hoveraction) : NULL)); -} -COMMAND(menuitemvar, "sss"); - void menuitemimage(char *name, char *text, char *action, char *hoveraction) { if(!lastmenu) return; @@ -1082,6 +1039,13 @@ void menuitemradio(char *text, int *min_, int *max_, char *value, char *display, } COMMAND(menuitemradio, "siisss"); +void menuitemcheckbox(char *text, char *value, char *action, int *pos) +{ + if(!lastmenu) return; + lastmenu->items.add(new mitemcheckbox(lastmenu, newstring(text), newstring(value), action[0] ? newstring(action) : NULL, clamp(*pos, 0, 100), NULL)); +} +COMMAND(menuitemcheckbox, "sssi"); + void menuitemkeyinput(char *text, char *bindcmd) { if(!lastmenu) return; @@ -1103,23 +1067,18 @@ void menuitemspectkeyinput(char *text, char *bindcmd) } COMMAND(menuitemspectkeyinput, "ss"); -void menuitemcheckbox(char *text, char *value, char *action, int *pos) +void menumdl(char *menu, char *mdl, char *anim, int *rotspeed, int *scale) { - if(!lastmenu) return; - lastmenu->items.add(new mitemcheckbox(lastmenu, newstring(text), newstring(value), action[0] ? newstring(action) : NULL, clamp(*pos, 0, 100), NULL)); + gmenu *m = *menu ? menus.access(menu) : lastmenu; + if(!m) return; + DELETEA(m->mdl); + if(!*mdl) return; + m->mdl = newstring(mdl); + m->anim = findanim(anim)|ANIM_LOOP; + m->rotspeed = clamp(*rotspeed, 0, 100); + m->scale = clamp(*scale, 0, 100); } -COMMAND(menuitemcheckbox, "sssi"); - -void menumdl(char *mdl, char *anim, int *rotspeed, int *scale) -{ - if(!lastmenu || !mdl || !anim) return; - gmenu &menu = *lastmenu; - menu.mdl = newstring(mdl); - menu.anim = findanim(anim)|ANIM_LOOP; - menu.rotspeed = clamp(*rotspeed, 0, 100); - menu.scale = clamp(*scale, 0, 100); -} -COMMAND(menumdl, "ssii"); +COMMAND(menumdl, "sssii"); void menudirlist(char *dir, char *ext, char *action, int *image, char *searchfile) { @@ -1136,28 +1095,14 @@ void menudirlist(char *dir, char *ext, char *action, int *image, char *searchfil } COMMAND(menudirlist, "sssis"); -void chmenumdl(char *menu, char *mdl, char *anim, int *rotspeed, int *scale) -{ - if(!menu || !menus.access(menu)) return; - gmenu &m = menus[menu]; - DELETEA(m.mdl); - if(!mdl ||!*mdl) return; - m.mdl = newstring(mdl); - m.anim = findanim(anim)|ANIM_LOOP; - m.rotspeed = clamp(*rotspeed, 0, 100); - m.scale = clamp(*scale, 0, 100); -} -COMMAND(chmenumdl, "sssii"); - void chmenutexture(char *menu, char *texname, char *title) { - if(!*menu || !menus.access(menu)) return; - gmenu &m = menus[menu]; - char *newtex = *texname ? newstring(texname) : NULL; - DELETEA(m.previewtexture); - m.previewtexture = newtex; - DELETEA(m.previewtexturetitle); - m.previewtexturetitle = *title ? newstring(title) : NULL; + gmenu *m = *menu ? menus.access(menu) : NULL; + if(!m) return; + DELETEA(m->previewtexture); + if(*texname) m->previewtexture = newstring(texname); + DELETEA(m->previewtexturetitle); + if(*title) m->previewtexturetitle = newstring(title); } COMMAND(chmenutexture, "sss"); @@ -1634,16 +1579,3 @@ void refreshapplymenu(void *menu, bool init) m->items.add(new mitemtext(m, newstring("No"), newstring("echo [..restart AssaultCube to apply the new settings]"), NULL, NULL)); if(init) m->menusel = m->items.length()-2; // select OK } - -void setscorefont(); -VARFP(scorefont, 0, 0, 1, setscorefont()); -void setscorefont() -{ - switch(scorefont) - { - case 1: menufont(scoremenu, "mono"); break; - - case 0: - default: menufont(scoremenu, NULL); break; - } -} diff --git a/source/src/protos.h b/source/src/protos.h index 593605af..4af0e4ee 100644 --- a/source/src/protos.h +++ b/source/src/protos.h @@ -165,11 +165,11 @@ extern keym *findbindc(int code); extern void rendermenu(); extern bool menuvisible(); extern void menureset(void *menu); -extern void menumanual(void *menu, char *text, char *action = NULL, color *bgcolor = NULL, const char *desc = NULL); +extern void menuitemmanual(void *menu, char *text, char *action = NULL, color *bgcolor = NULL, const char *desc = NULL); extern void menuimagemanual(void *menu, const char *filename1, const char *filename2, char *text, char *action = NULL, color *bgcolor = NULL, const char *desc = NULL); -extern void menutitle(void *menu, const char *title = NULL); +extern void menutitlemanual(void *menu, const char *title); extern bool needscoresreorder; -extern void menuheader(void *menu, char *header = NULL, char *footer = NULL); +extern void menuheader(void *menu, char *header, char *footer, bool heap = false); extern bool menukey(int code, bool isdown, int unicode, SDLMod mod = KMOD_NONE); extern void *addmenu(const char *name, const char *title = NULL, bool allowinput = true, void (__cdecl *refreshfunc)(void *, bool) = NULL, bool (__cdecl *keyfunc)(void *, int, bool, int) = NULL, bool hotkeys = false, bool forwardkeys = false); extern bool rendermenumdl(); @@ -224,7 +224,6 @@ struct gmenu { const char *name, *title, *header, *footer; vector items; - int mwidth; int menusel, menuselinit; bool allowinput, inited, hotkeys, forwardkeys; void (__cdecl *refreshfunc)(void *, bool); @@ -235,6 +234,7 @@ struct gmenu bool persistentselection; bool synctabstops; bool hasdesc; + bool headfootheap; const char *mdl; int anim, rotspeed, scale; int footlen; @@ -242,7 +242,9 @@ struct gmenu char *previewtexture, *previewtexturetitle; mdirlist *dirlist; - gmenu() : name(0), title(0), header(0), footer(0), menuselinit(-1), initaction(0), usefont(0), allowblink(false), persistentselection(false), synctabstops(false), hasdesc(false), mdl(0), footlen(0), xoffs(0), yoffs(0), previewtexture(NULL), previewtexturetitle(NULL), dirlist(0) {} + gmenu() : name(NULL), title(NULL), header(NULL), footer(NULL), menuselinit(-1), initaction(NULL), usefont(NULL), + allowblink(false), persistentselection(false), synctabstops(false), hasdesc(false), headfootheap(false), + mdl(NULL), footlen(0), xoffs(0), yoffs(0), previewtexture(NULL), previewtexturetitle(NULL), dirlist(NULL) {} virtual ~gmenu() { DELETEA(name); diff --git a/source/src/scoreboard.cpp b/source/src/scoreboard.cpp index 013f4800..7a571f4d 100644 --- a/source/src/scoreboard.cpp +++ b/source/src/scoreboard.cpp @@ -294,7 +294,7 @@ void reorderscorecolumns() sscore.addcol(sc_clientnum, "cn"); sscore.addcol(sc_name, "name"); copystring(scoreboardtitle, sscore.getcols()); - menutitle(scoremenu, scoreboardtitle); + menutitlemanual(scoremenu, scoreboardtitle); } void renderscores(void *menu, bool init) diff --git a/source/src/serverbrowser.cpp b/source/src/serverbrowser.cpp index 432a2ea6..798cd3b4 100644 --- a/source/src/serverbrowser.cpp +++ b/source/src/serverbrowser.cpp @@ -803,7 +803,7 @@ void addfavcategory(const char *refdes) void listfavcats() { - const char *str = conc((const char **)&favcats[0], favcats.length(), true); + const char *str = conc((const char **)favcats.getbuf(), favcats.length(), true); result(str); delete [] str; } @@ -986,7 +986,6 @@ void refreshservers(void *menu, bool init) loopv(servers) if(lastselectedserver == servers[i]) { found = true; break; } if(!found) lastselectedserver = NULL; } - menutitle(menu, "extended server information (F5: refresh)"); menureset(menu); static string infotext; static char dummy = '\0'; @@ -994,8 +993,8 @@ void refreshservers(void *menu, bool init) { serverinfo &si = *lastselectedserver; formatstring(si.full)("%s:%d %s", si.name, si.port, si.sdesc); - menumanual(menu, si.full); - menumanual(menu, &dummy); + menuitemmanual(menu, si.full); + menuitemmanual(menu, &dummy); if(si.infotexts.length() && !pinglastselected) { infotext[0] = '\0'; @@ -1011,7 +1010,7 @@ void refreshservers(void *menu, bool init) } else copystring(infotext, " -- no server selected --"); - if(*infotext) menumanual(menu, infotext); + if(*infotext) menuitemmanual(menu, infotext); return; } if((init && issearch) || totalmillis - lastinfo >= (servpingrate * (issearch ? 2 : 1))/(maxservpings ? max(1, (servers.length() + maxservpings - 1) / maxservpings) : 1)) @@ -1126,11 +1125,11 @@ void refreshservers(void *menu, bool init) cur++; if(cur == 4) { - menumanual(menu, t, NULL, NULL, NULL); + menuitemmanual(menu, t, NULL, NULL, NULL); cur = 0; } } - if(cur) menumanual(menu, t, NULL, NULL, NULL); + if(cur) menuitemmanual(menu, t, NULL, NULL, NULL); } } si.menuline_to = ((gmenu *)menu)->items.length(); @@ -1150,7 +1149,7 @@ void refreshservers(void *menu, bool init) }; defformatstring(allplrs)("%d", allplayers); formatstring(title)(titles[serversort], showfavtag ? "fav\t" : "", !issearch && showallplayersnumber ? allplrs : "", issearch ? " search results for \f3" : " (F1: Help/Settings)", issearch ? cursearch : ""); - menutitle(menu, title); + menutitlemanual(menu, title); static string notfoundmsg, headermsg; notfoundmsg[0] = '\0'; @@ -1165,7 +1164,7 @@ void refreshservers(void *menu, bool init) menuheader(menu, headermsg, NULL); if(!((gmenu *)menu)->items.length() && !issearch) formatstring(notfoundmsg)("\t(no servers in this category)"); } - if(*notfoundmsg) menumanual(menu, notfoundmsg, NULL, NULL, NULL); + if(*notfoundmsg) menuitemmanual(menu, notfoundmsg, NULL, NULL, NULL); } }