From be83fbbedccc665d5c025f3e488a9707f8f21431 Mon Sep 17 00:00:00 2001 From: Robert Alm Nilsson Date: Wed, 19 Aug 2020 13:45:55 +0200 Subject: [PATCH 1/8] Simplify server browser code --- config/menus/servers.cfg | 608 +++++++++++++++++++++------------------ 1 file changed, 336 insertions(+), 272 deletions(-) diff --git a/config/menus/servers.cfg b/config/menus/servers.cfg index 6b5211397..c68a092e7 100755 --- a/config/menus/servers.cfg +++ b/config/menus/servers.cfg @@ -15,8 +15,10 @@ serverinfo_servers = 0 serverinfo_server_count = 0 serverinfo_ui_time = 0 serverinfo_search_str = "" +serverinfo_default_spacing = 4 +serverinfo_show_background = 0 -number_of_servers_shown_at_once = 5 +entries_shown_at_once = 5 serverfavs = "" setpersist serverfavs 1 @@ -98,108 +100,13 @@ server_menu_iterator = [ server_menu = [ serverinfo_pause = 0 serverinfo_timer = (- (getmillis 1) $serverinfo_ui_time) - ui_big_macro serverinfo_ $number_of_servers_shown_at_once 99.5 4 [getserver] (getserver) 0 [ - serverinfo_status = (get_server_status $i) - serverinfo_name = (get_server_name $i) - serverinfo_port = (get_server_port $i) - serverinfo_name_port_id = [@[serverinfo_name]:[@@serverinfo_port]] // previous name was "sinfonpid" - serverinfo_title = (get_server_title $i) // this is the server name - serverinfo_map_name = (get_server_map_name $i) - serverinfo_player_count = (get_server_player_count $i) - serverinfo_ping = (get_server_ping $i) - serverinfo_last = (get_server_last $i) - serverinfo_handle = (get_server_handle $i) - serverinfo_flags = (get_server_flags $i) - serverinfo_branch = (get_server_version_branch $i) - serverinfo_priority = (get_server_priority $i) - serverinfo_status_flag = 0 - loop fi (stringlen $serverinfo_flags) [ - if (=s (substring $serverinfo_flags $fi 1) "s") [ serverinfo_status_flag = 1 ] - ] - // attributes - serverinfo_attribute = (get_server_attribute_count $i) - serverinfo_game_version = (get_server_game_version $i) - serverinfo_mode = (get_server_game_mode $i) - serverinfo_mutators = (get_server_game_mutators $i) - serverinfo_time = (get_server_game_time $i) - serverinfo_max_players = (get_server_max_players $i) - serverinfo_mstr = (get_server_mstr $i) - serverinfo_variables = (get_server_variables $i) - serverinfo_modifications = (get_server_modifications $i) - serverinfo_version_major = (get_server_version_major $i) - serverinfo_version_minor = (get_server_version_minor $i) - serverinfo_version_patch = (get_server_version_patch $i) - serverinfo_version_server = (get_server_version_server $i) - serverinfo_version_a = (get_server_version_a $i) - serverinfo_game_st = (get_server_game_st $i) - serverinfo_game_tl = (get_server_game_tl $i) - serverinfo_offline_time = (? (>= $serverinfo_last 0) (div (max (- (getmillis 1) (- $serverinfo_last (div $serverinfo_ping 2))) 0) 1000) 0) - serverinfo_active = (? (< $serverinfo_ping $serverwaiting) 1 0) - - search_buffer = (concat $serverinfo_title $serverinfo_name_port_id $serverinfo_map_name (gamename $serverinfo_mode $serverinfo_mutators 0) $serverinfo_handle) - if (> $serverinfo_player_count 0 ) [ - loop j $serverinfo_player_count [ - append search_buffer (getserver $i 2 $j) // the player name - append search_buffer (getserver $i 3 $j) // and handle - ] - ] - // To display a server, it must be included in the search filter (if applicable) and protocol compatible (if applicable) - serverinfo_filter_include = (|| (=s $serverinfo_search_str "") (> (stringcasestr $search_buffer $serverinfo_search_str) -1)) - serverinfo_filter_compatible = (|| (! $hideincompatibleservers) (= $serverinfo_game_version (getversion 1))) - serverinfo_display = (&& $serverinfo_filter_include $serverinfo_filter_compatible) - - // To count a server it must be displayable and active (returning pings) - serverinfo_include_in_count = (&& $serverinfo_display $serverinfo_active) - - // If this is the first server, reset the counts. - if (= $i 0) [ - // The number of players total. - serverinfo_players = 0 - // The number of servers with players. - serverinfo_servers = 0 - // The number of servers total. - serverinfo_server_count = 0 - ] - // Add this server to the counts if applicable. - if $serverinfo_include_in_count [ - serverinfo_players = (+ $serverinfo_players $serverinfo_player_count) - // Only add to the "servers with players" count if this server has players. - if (> $serverinfo_player_count 0) [ - serverinfo_servers = (+ $serverinfo_servers 1) - ] - serverinfo_server_count = (+ $serverinfo_server_count 1) - ] - if (=s $serverinfo_name_port_id $serverinfo_retry) [ - if (= $serverinfo_wait 1) [ - if (stringlen $serverinfo_password) [ - savewarnchk (format "connect %1 %2 %3" $serverinfo_name $serverinfo_port $serverinfo_password) - serverinfo_password = "" - serverinfo_retry = "" - serverinfo_wait = 0 - ] - ] [ - if (|| [hasauthkey 1] [!= $serverinfo_status 3]) [ - savewarnchk (format "connect %1 %2" $serverinfo_name $serverinfo_port) - serverinfo_password = "" - serverinfo_retry = "" - serverinfo_wait = 0 - ] - ] - ] - ] [ - // Only display servers that are allowed - $serverinfo_display - ] [ - if $update_server_ui [ - ui_button "^fwThere are no servers to display, maybe ^fgupdate ^fwthe list?" updatefrommaster [] "info" - ] [ - sleep 1 [ update_server_ui = 1; updatefrommaster; serverinfo_ui_time = (getmillis) ] - ] - ] [ - /// bar above the list + ui_list [ + + // BEGIN top bar + if (getserver) [ sleep 0.1 [ updateservers ] ] ui_list [ @@ -308,8 +215,6 @@ server_menu = [ ui_bar ] - - // if a new version is available, show a banner that holds a link where you can download it ui_small_spacer if (> (getversion 3) (getversion 1)) [ @@ -317,198 +222,354 @@ server_menu = [ ui_small_spacer ] - ] [ // the actual list + // END top bar + + + // BEGIN main list + ui_list [ - ui_background 0x222222 - - ui_list [ ui_merge 88 [ - ui_center [ - ui_strut 8 1 - if $serverinfo_active [ - ui_center [ - ui_font "huge" [ ui_button (format "^fw%1" $serverinfo_player_count) ] // players playing - ui_center [ ui_button (format "^fd/^fa%1" $serverinfo_max_players) ] // max players - ] - ui_strut 0.125 - ui_center [ - ui_button (format "^f%1%2" (? (< $serverinfo_ping 200) "g" (? (< $serverinfo_ping 400) "y" "r")) $serverinfo_ping) // ping info - ui_font "little" [ ui_button " ^fams" ] - ] - ui_strut 0.125 - ui_center [ - serverinfo_seconds = (? (>= $serverinfo_last 0) (div (- (getmillis 1) $serverinfo_last) 1000) -1) // ??last ping info?? - ui_font "little" [ ui_button (? (>= $serverinfo_seconds 0) (format "^fa%1 ^fds ago" $serverinfo_seconds) "^fdwaiting..") ] - ] - ] [ ui_center [ ui_font "huge" [ ui_button "?" ] ] ] - ] - // START OF SERVER INFORMATION LIST - serverinfo_image = "textures/emblem" - if (&& [< $serverinfo_ping $serverwaiting] [= $serverinfo_game_version (getversion 1)]) [ - serverinfo_path = (listfind curmap $map_list [|| [=s $curmap $serverinfo_map_name] [=s [base/@curmap] $serverinfo_map_name] [ - && [> $hasoctapaks 0] [=s [base/@curmap] $serverinfo_map_name] - ]]) - if (> $serverinfo_path -1) [ serverinfo_image = (at $map_path $serverinfo_path) ] + serverinfo_count = $entries_shown_at_once + serverinfo_disp = 0 + serverinfo_list = 0 + + ui_list [ + ui_strut (+ 99.5 2) 1 + + if $serverinfo_show_background [ + ui_background $ui_color_textfield_background $ui_blend_textfield_background $ui_color_textfield_border $ui_blend_textfield_border + ui_strut 0.25 ] - ui_image $serverinfo_image "" 2 1 "textures/emblem" // display the server emblem - ui_strut 1 - ui_list [ - // make sure the entry takes all the horizontal space available - ui_list2 [ ui_strut 80 1 ] - - ui_list [ - ui_list [ ui_strut 4 ] - ui_center [ - ui_list [ - // Server title - title = (format "^fw%1" $serverinfo_title) - - if (= $serverinfo_game_version (getversion 1)) [ - case $serverinfo_status 0 [ - title = (format "^fw%1" $serverinfo_title) - ] 1 [ - title = (format "^fy%1" $serverinfo_title) - ] 2 [ - title = (format "^fm%1" $serverinfo_title) - ] 3 [ // Server Incompatible - title = (format "^fo%1" $serverinfo_title) - ] () [ - title = (format "^fa%1" $serverinfo_title) - ] - ] [ - title = (format "^fo%1" $serverinfo_title) + if (getserver) [ + serverinfo_num = (getserver) + if (> $serverinfo_num 0) [ + serverinfo_index = (min (max 0 (- $serverinfo_num $serverinfo_count)) $serverinfo_index) + loop i $serverinfo_num [ + serverinfo_status = (get_server_status $i) + serverinfo_name = (get_server_name $i) + serverinfo_port = (get_server_port $i) + serverinfo_name_port_id = [@[serverinfo_name]:[@@serverinfo_port]] // previous name was "sinfonpid" + serverinfo_title = (get_server_title $i) // this is the server name + serverinfo_map_name = (get_server_map_name $i) + serverinfo_player_count = (get_server_player_count $i) + serverinfo_ping = (get_server_ping $i) + serverinfo_last = (get_server_last $i) + serverinfo_handle = (get_server_handle $i) + serverinfo_flags = (get_server_flags $i) + serverinfo_branch = (get_server_version_branch $i) + serverinfo_priority = (get_server_priority $i) + serverinfo_status_flag = 0 + loop fi (stringlen $serverinfo_flags) [ + if (=s (substring $serverinfo_flags $fi 1) "s") [ serverinfo_status_flag = 1 ] + ] + // attributes + serverinfo_attribute = (get_server_attribute_count $i) + serverinfo_game_version = (get_server_game_version $i) + serverinfo_mode = (get_server_game_mode $i) + serverinfo_mutators = (get_server_game_mutators $i) + serverinfo_time = (get_server_game_time $i) + serverinfo_max_players = (get_server_max_players $i) + serverinfo_mstr = (get_server_mstr $i) + serverinfo_variables = (get_server_variables $i) + serverinfo_modifications = (get_server_modifications $i) + serverinfo_version_major = (get_server_version_major $i) + serverinfo_version_minor = (get_server_version_minor $i) + serverinfo_version_patch = (get_server_version_patch $i) + serverinfo_version_server = (get_server_version_server $i) + serverinfo_version_a = (get_server_version_a $i) + serverinfo_game_st = (get_server_game_st $i) + serverinfo_game_tl = (get_server_game_tl $i) + serverinfo_offline_time = (? (>= $serverinfo_last 0) (div (max (- (getmillis 1) (- $serverinfo_last (div $serverinfo_ping 2))) 0) 1000) 0) + serverinfo_active = (? (< $serverinfo_ping $serverwaiting) 1 0) + + search_buffer = (concat $serverinfo_title $serverinfo_name_port_id $serverinfo_map_name (gamename $serverinfo_mode $serverinfo_mutators 0) $serverinfo_handle) + if (> $serverinfo_player_count 0 ) [ + loop j $serverinfo_player_count [ + append search_buffer (getserver $i 2 $j) // the player name + append search_buffer (getserver $i 3 $j) // and handle ] + ] - ui_font "emphasis" [ ui_button (limitstring $title 64) ] - - // show ip and port - ui_font "little" [ ui_center_z [ ui_button (format "^fd^fa %1^fd" $serverinfo_name_port_id) ] ] + // To display a server, it must be included in the search filter (if applicable) and protocol compatible (if applicable) + serverinfo_filter_include = (|| (=s $serverinfo_search_str "") (> (stringcasestr $search_buffer $serverinfo_search_str) -1)) + serverinfo_filter_compatible = (|| (! $hideincompatibleservers) (= $serverinfo_game_version (getversion 1))) + serverinfo_display = (&& $serverinfo_filter_include $serverinfo_filter_compatible) + + // To count a server it must be displayable and active (returning pings) + serverinfo_include_in_count = (&& $serverinfo_display $serverinfo_active) + + // If this is the first server, reset the counts. + if (= $i 0) [ + // The number of players total. + serverinfo_players = 0 + // The number of servers with players. + serverinfo_servers = 0 + // The number of servers total. + serverinfo_server_count = 0 + ] - if $serverinfo_handle [ - ui_font "little" [ ui_center [ ui_button (format "^fd[^fc%1^fd]" $serverinfo_handle) ] ] - ] - if $serverinfo_status_flag [ - ui_font "little" [ ui_center [ ui_button "^fd[^fcstatistics^fd]" ] ] + // Add this server to the counts if applicable. + if $serverinfo_include_in_count [ + serverinfo_players = (+ $serverinfo_players $serverinfo_player_count) + // Only add to the "servers with players" count if this server has players. + if (> $serverinfo_player_count 0) [ + serverinfo_servers = (+ $serverinfo_servers 1) ] + serverinfo_server_count = (+ $serverinfo_server_count 1) + ] - // if enabled, show priority - if $showserverpriority [ - ui_font "little" [ ui_center [ ui_button (format "^fd[^fcpriority %1^fd]" $serverinfo_priority) ] ] + if (=s $serverinfo_name_port_id $serverinfo_retry) [ + if (= $serverinfo_wait 1) [ + if (stringlen $serverinfo_password) [ + savewarnchk (format "connect %1 %2 %3" $serverinfo_name $serverinfo_port $serverinfo_password) + serverinfo_password = "" + serverinfo_retry = "" + serverinfo_wait = 0 + ] + ] [ + if (|| [hasauthkey 1] [!= $serverinfo_status 3]) [ + savewarnchk (format "connect %1 %2" $serverinfo_name $serverinfo_port) + serverinfo_password = "" + serverinfo_retry = "" + serverinfo_wait = 0 + ] ] ] - ui_spring 1 - - // information beneigh the server title - if $serverinfo_active [ - ui_list [ - ui_small_spacer - if (= $serverinfo_game_version (getversion 1)) [ - - if (!= $serverinfo_mode $modeidxediting) [ - ui_button (format "^fd[^fc%1^fd: ^fw%2^fd]" (at $gamestatename $serverinfo_game_st) (timestr (* (? $serverinfo_player_count (max (- $serverinfo_game_tl $serverinfo_offline_time) 0) $serverinfo_time) 1000) 3)) - ] - gname = (gamename $serverinfo_mode $serverinfo_mutators 0 32) - ui_font "little" [ ui_center [ ui_list [ - // show map name - ui_button (format " ^fy%1 ^faon ^fo%2" $gname $serverinfo_map_name) - - // show how modified the server is - ui_button (format " ^fa (%1modified^fa)" (? $serverinfo_modifications (format "^fc%1%% " (precf (*f (divf $serverinfo_modifications $serverinfo_variables) 100) 2)) "^faun")) - - // show server platform and branch - if (&& ($serverbrowser_show_server_platform_and_branch) (>= $serverinfo_attribute 13)) [ - ui_font "little" [ ui_center_z [ - ui_text (format " ^fa[^fa%1" $serverinfo_version_major) - ui_text (format "^fa.%1" $serverinfo_version_minor) - ui_text (format "^fa.%1" $serverinfo_version_patch) - ui_text (format "^fa-%1" (platname $serverinfo_version_server) ) - ui_text (format "^fa%1" $serverinfo_version_a) - if $serverinfo_branch [ - ui_text (format "^fa-%1^fa]" $serverinfo_branch) - ] [ - ui_text "^fa]" + + if ($serverinfo_display) [ + if (&& (>= $i $serverinfo_index) (< $serverinfo_list $serverinfo_count)) [ + ui_list [ + ui_background 0x222222 + + ui_list [ ui_merge 88 [ + ui_center [ + ui_strut 8 1 + if $serverinfo_active [ + ui_center [ + ui_font "huge" [ ui_button (format "^fw%1" $serverinfo_player_count) ] // players playing + ui_center [ ui_button (format "^fd/^fa%1" $serverinfo_max_players) ] // max players + ] + ui_strut 0.125 + ui_center [ + ui_button (format "^f%1%2" (? (< $serverinfo_ping 200) "g" (? (< $serverinfo_ping 400) "y" "r")) $serverinfo_ping) // ping info + ui_font "little" [ ui_button " ^fams" ] + ] + ui_strut 0.125 + ui_center [ + serverinfo_seconds = (? (>= $serverinfo_last 0) (div (- (getmillis 1) $serverinfo_last) 1000) -1) // ??last ping info?? + ui_font "little" [ ui_button (? (>= $serverinfo_seconds 0) (format "^fa%1 ^fds ago" $serverinfo_seconds) "^fdwaiting..") ] ] - ] ] + ] [ ui_center [ ui_font "huge" [ ui_button "?" ] ] ] ] - ] ] ] - ] [ - ui_no_hit_fx [ ui_font "default" [ ui_button "^foIncompatible" [] [] "textures/servers/failed" ] ] - ui_button (concat " ^faServer is using" (? (> $serverinfo_game_version (getversion 1)) "a ^fwnewer" "an ^fdolder") "protocol") - ] - ] - ui_spring 1 - // display password field - ui_list [ - if (=s $serverinfo_name_port_id $serverinfo_retry) [ - if (= $serverinfo_status 3) [ ui_button "^fd[ ^fwWaiting for slot ^fd] " ] - ui_button "^fwPassword ^fd= " - serverinfo_passwordval = $serverinfo_password - ui_textfield serverinfo_passwordval 20 [serverinfo_password = $serverinfo_passwordval] - ] [ - if (> $serverinfo_player_count 0) [ - ui_small_spacer - serverinfo_player_count = (getserver $i 2) - if (> $serverinfo_player_count 0) [ - ui_font "little" [ - pname = "" - plist = "" - pmore = 0 - loop j $serverinfo_player_count [ - if (|| $pmore (>= (ui_text_width $plist) 1400)) [ pmore = (+ $pmore 1) ] [ - append pname (format ["%1"] (getserver $i 2 $j)) - plist = (prettylist $pname) + // START OF SERVER INFORMATION LIST + serverinfo_image = "textures/emblem" + if (&& [< $serverinfo_ping $serverwaiting] [= $serverinfo_game_version (getversion 1)]) [ + serverinfo_path = (listfind curmap $map_list [|| [=s $curmap $serverinfo_map_name] [=s [base/@curmap] $serverinfo_map_name] [ + && [> $hasoctapaks 0] [=s [base/@curmap] $serverinfo_map_name] + ]]) + if (> $serverinfo_path -1) [ serverinfo_image = (at $map_path $serverinfo_path) ] + ] + ui_image $serverinfo_image "" 2 1 "textures/emblem" // display the server emblem + ui_strut 1 + + ui_list [ + // make sure the entry takes all the horizontal space available + ui_list2 [ ui_strut 80 1 ] + + ui_list [ + ui_list [ ui_strut 4 ] + ui_center [ + ui_list [ + // Server title + title = (format "^fw%1" $serverinfo_title) + + if (= $serverinfo_game_version (getversion 1)) [ + case $serverinfo_status 0 [ + title = (format "^fw%1" $serverinfo_title) + ] 1 [ + title = (format "^fy%1" $serverinfo_title) + ] 2 [ + title = (format "^fm%1" $serverinfo_title) + ] 3 [ // Server Incompatible + title = (format "^fo%1" $serverinfo_title) + ] () [ + title = (format "^fa%1" $serverinfo_title) + ] + ] [ + title = (format "^fo%1" $serverinfo_title) + ] + + ui_font "emphasis" [ ui_button (limitstring $title 64) ] + + // show ip and port + ui_font "little" [ ui_center_z [ ui_button (format "^fd^fa %1^fd" $serverinfo_name_port_id) ] ] + + if $serverinfo_handle [ + ui_font "little" [ ui_center [ ui_button (format "^fd[^fc%1^fd]" $serverinfo_handle) ] ] + ] + if $serverinfo_status_flag [ + ui_font "little" [ ui_center [ ui_button "^fd[^fcstatistics^fd]" ] ] + ] + + // if enabled, show priority + if $showserverpriority [ + ui_font "little" [ ui_center [ ui_button (format "^fd[^fcpriority %1^fd]" $serverinfo_priority) ] ] + ] + ] + ui_spring 1 + + // information beneigh the server title + if $serverinfo_active [ + ui_list [ + ui_small_spacer + if (= $serverinfo_game_version (getversion 1)) [ + + if (!= $serverinfo_mode $modeidxediting) [ + ui_button (format "^fd[^fc%1^fd: ^fw%2^fd]" (at $gamestatename $serverinfo_game_st) (timestr (* (? $serverinfo_player_count (max (- $serverinfo_game_tl $serverinfo_offline_time) 0) $serverinfo_time) 1000) 3)) + ] + gname = (gamename $serverinfo_mode $serverinfo_mutators 0 32) + ui_font "little" [ ui_center [ ui_list [ + // show map name + ui_button (format " ^fy%1 ^faon ^fo%2" $gname $serverinfo_map_name) + + // show how modified the server is + ui_button (format " ^fa (%1modified^fa)" (? $serverinfo_modifications (format "^fc%1%% " (precf (*f (divf $serverinfo_modifications $serverinfo_variables) 100) 2)) "^faun")) + + // show server platform and branch + if (&& ($serverbrowser_show_server_platform_and_branch) (>= $serverinfo_attribute 13)) [ + ui_font "little" [ ui_center_z [ + ui_text (format " ^fa[^fa%1" $serverinfo_version_major) + ui_text (format "^fa.%1" $serverinfo_version_minor) + ui_text (format "^fa.%1" $serverinfo_version_patch) + ui_text (format "^fa-%1" (platname $serverinfo_version_server) ) + ui_text (format "^fa%1" $serverinfo_version_a) + if $serverinfo_branch [ + ui_text (format "^fa-%1^fa]" $serverinfo_branch) + ] [ + ui_text "^fa]" + ] + ] ] + ] + ] ] ] + ] [ + ui_no_hit_fx [ ui_font "default" [ ui_button "^foIncompatible" [] [] "textures/servers/failed" ] ] + ui_button (concat " ^faServer is using" (? (> $serverinfo_game_version (getversion 1)) "a ^fwnewer" "an ^fdolder") "protocol") + ] + ] + ui_spring 1 + // display password field + ui_list [ + if (=s $serverinfo_name_port_id $serverinfo_retry) [ + if (= $serverinfo_status 3) [ ui_button "^fd[ ^fwWaiting for slot ^fd] " ] + ui_button "^fwPassword ^fd= " + serverinfo_passwordval = $serverinfo_password + ui_textfield serverinfo_passwordval 20 [serverinfo_password = $serverinfo_passwordval] + ] [ + if (> $serverinfo_player_count 0) [ + ui_small_spacer + serverinfo_player_count = (getserver $i 2) + if (> $serverinfo_player_count 0) [ + ui_font "little" [ + pname = "" + plist = "" + pmore = 0 + loop j $serverinfo_player_count [ + if (|| $pmore (>= (ui_text_width $plist) 1400)) [ pmore = (+ $pmore 1) ] [ + append pname (format ["%1"] (getserver $i 2 $j)) + plist = (prettylist $pname) + ] + ] + ui_button (concat $plist (? $pmore (concat "and^fy" $pmore "^fwmore"))) + //[] [] "" -1 -1 1900 + ] + ] [ ui_button "^faPlayer info not available" ] + ] [ ui_button "^faNo players online" ] + ] + ] + ] [ + ui_list [ + ui_small_spacer + ui_font "default" [ ui_button "^foUnresponsive" [] [] "textures/servers/failed" ] + ui_button " ^faServer is not replying to queries" + ] ] ] - ui_button (concat $plist (? $pmore (concat "and^fy" $pmore "^fwmore"))) - //[] [] "" -1 -1 1900 ] - ] [ ui_button "^faPlayer info not available" ] - ] [ ui_button "^faNo players online" ] + ] + ] [ + serverinfo_password = "" + serverinfo_retry = @(escape $serverinfo_name_port_id) + serverinfo_wait = (! (|| [hasauthkey 1] [!= @@serverinfo_mstr 4])) + ] [ + serverinfo_password = "" + serverinfo_retry = @(escape $serverinfo_name_port_id) + serverinfo_wait = (! (hasauthkey 1)) + ] [ + serverinfo_pause = 1 + if $serverinfo_active [ + serverinfo_player_count = (getserver $i 2) + if (> $serverinfo_player_count 0) [ + phover = "" + loop j $serverinfo_player_count [ + if $j [ append phover "^n" ] + phandle = (getserver $i 3 $j) + if (stringlen $phandle) [ + append phover (format "%1 (%2)" (getserver $i 2 $j) $phandle) + ] [ + append phover (format "%1" (getserver $i 2 $j)) + ] + ] + ui_tooltip $phover + ] [ ui_tooltip "^faNo players online" ] + ] [ ui_tooltip "^faNo information available" ] + ] ] + //ui_center_z [ + // ui_image "textures/icons/fontawesome/favourite_off" [ echo "Coming Soon!" ] 0.75 + //]; ui_strut 1 + ui_strut 5 ] + serverinfo_list = (+ $serverinfo_list 1) ] - ] [ - ui_list [ - ui_small_spacer - ui_font "default" [ ui_button "^foUnresponsive" [] [] "textures/servers/failed" ] - ui_button " ^faServer is not replying to queries" - ] + serverinfo_disp = (+ $serverinfo_disp 1) ] ] + ] [ + ui_strut (-f (*f $serverinfo_default_spacing $entries_shown_at_once) 1) + if $update_server_ui [ + ui_button "^fwThere are no servers to display, maybe ^fgupdate ^fwthe list?" updatefrommaster [] "info" + ] [ + sleep 1 [ update_server_ui = 1; updatefrommaster; serverinfo_ui_time = (getmillis) ] + ] + serverinfo_list = $entries_shown_at_once ] + ] [ + ui_strut (-f (*f $serverinfo_default_spacing $entries_shown_at_once) 1) + if $update_server_ui [ + ui_button "^fwThere are no servers to display, maybe ^fgupdate ^fwthe list?" updatefrommaster [] "info" + ] [ + sleep 1 [ update_server_ui = 1; updatefrommaster; serverinfo_ui_time = (getmillis) ] + ] + serverinfo_list = $entries_shown_at_once ] - ] [ - serverinfo_password = "" - serverinfo_retry = @(escape $serverinfo_name_port_id) - serverinfo_wait = (! (|| [hasauthkey 1] [!= @@serverinfo_mstr 4])) - ] [ - serverinfo_password = "" - serverinfo_retry = @(escape $serverinfo_name_port_id) - serverinfo_wait = (! (hasauthkey 1)) - ] [ - serverinfo_pause = 1 - if $serverinfo_active [ - serverinfo_player_count = (getserver $i 2) - if (> $serverinfo_player_count 0) [ - phover = "" - loop j $serverinfo_player_count [ - if $j [ append phover "^n" ] - phandle = (getserver $i 3 $j) - if (stringlen $phandle) [ - append phover (format "%1 (%2)" (getserver $i 2 $j) $phandle) - ] [ - append phover (format "%1" (getserver $i 2 $j)) - ] - ] - ui_tooltip $phover - ] [ ui_tooltip "^faNo players online" ] - ] [ ui_tooltip "^faNo information available" ] - ] ] - //ui_center_z [ - // ui_image "textures/icons/fontawesome/favourite_off" [ echo "Coming Soon!" ] 0.75 - //]; ui_strut 1 - ui_strut 5 + + serverinfo_alts = (- $serverinfo_count $serverinfo_list) + if (> $serverinfo_alts 0) [ + ui_strut (*f $serverinfo_alts $serverinfo_default_spacing) + + if $serverinfo_show_background [ + ui_strut 0.25 + ] + ] + ] + ui_slider serverinfo_index 0 (max (- $serverinfo_disp $serverinfo_list) 0) [] 1 1 ] - ] [ // bar beneigh the list + + // END main list + + + + // BEGIN bottom bar + ui_strut 0.5 ui_list [ @@ -524,7 +585,10 @@ server_menu = [ ] ] + // END bottom bar + ] + if (&& [! $guilayoutpass] [|| (> $serverinfo_timer 30000) (> $serverinfo_server_count (div (* $server_count 3) 4))]) [ if $serverinfo_pause [ if (! $pausesortservers) [ pausesortservers 1 ] ] [ if $pausesortservers [ pausesortservers 0 ] ] ] ui_tip (format "Press %1 to open this menu at any time" (dobindsearch "showservers")) From 279d64020bf80e585068e9f0127dd5d7f67e767b Mon Sep 17 00:00:00 2001 From: Robert Alm Nilsson Date: Thu, 20 Aug 2020 19:08:05 +0200 Subject: [PATCH 2/8] Call getserver more directly --- config/menus/glue.cfg | 30 --------------------- config/menus/servers.cfg | 56 ++++++++++++++++++++-------------------- 2 files changed, 28 insertions(+), 58 deletions(-) diff --git a/config/menus/glue.cfg b/config/menus/glue.cfg index 1a404f2a0..8551167bb 100644 --- a/config/menus/glue.cfg +++ b/config/menus/glue.cfg @@ -416,33 +416,3 @@ looplist i [ ui_box ui_box2 ui_merge ui_loop_list_split ui_loop_split ui_loop_scrollbar ui_checkbox2 ui_edit_button ui_edit_button2 ui_edit_checbox ui_edit_checbox2 ] [setcomplete $i 1] - -get_server_count = [ result (getserver) ] -get_server_status = [ result (getserver $arg1 0 0) ] -get_server_name = [ result (getserver $arg1 0 1) ] -get_server_port = [ result (getserver $arg1 0 2) ] -get_server_title = [ result (getserver $arg1 0 3) ] -get_server_map_name = [ result (getserver $arg1 0 4) ] -get_server_player_count = [ result (getserver $arg1 0 5) ] -get_server_ping = [ result (getserver $arg1 0 6) ] -get_server_last = [ result (getserver $arg1 0 7) ] -get_server_handle = [ result (getserver $arg1 0 8) ] -get_server_flags = [ result (getserver $arg1 0 9) ] -get_server_version_branch = [ result (getserver $arg1 0 10) ] -get_server_priority = [ result (getserver $arg1 0 11) ] -get_server_attribute_count = [ result (getserver $arg1 1 -1) ] -get_server_game_version = [ result (getserver $arg1 1 0) ] -get_server_game_mode = [ result (getserver $arg1 1 1) ] -get_server_game_mutators = [ result (getserver $arg1 1 2) ] -get_server_game_time = [ result (getserver $arg1 1 3) ] -get_server_max_players = [ result (getserver $arg1 1 4) ] -get_server_mstr = [ result (getserver $arg1 1 5) ] -get_server_variables = [ result (getserver $arg1 1 6) ] -get_server_modifications = [ result (getserver $arg1 1 7) ] -get_server_version_major = [ result (getserver $arg1 1 8) ] -get_server_version_minor = [ result (getserver $arg1 1 9) ] -get_server_version_patch = [ result (getserver $arg1 1 10) ] -get_server_version_server = [ result (getserver $arg1 1 11) ] -get_server_version_a = [ result (getserver $arg1 1 12) ] -get_server_game_st = [ result (getserver $arg1 1 13) ] -get_server_game_tl = [ result (getserver $arg1 1 14) ] diff --git a/config/menus/servers.cfg b/config/menus/servers.cfg index c68a092e7..f6c1375a3 100755 --- a/config/menus/servers.cfg +++ b/config/menus/servers.cfg @@ -245,40 +245,40 @@ server_menu = [ if (> $serverinfo_num 0) [ serverinfo_index = (min (max 0 (- $serverinfo_num $serverinfo_count)) $serverinfo_index) loop i $serverinfo_num [ - serverinfo_status = (get_server_status $i) - serverinfo_name = (get_server_name $i) - serverinfo_port = (get_server_port $i) + serverinfo_status = (getserver $i 0 0) + serverinfo_name = (getserver $i 0 1) + serverinfo_port = (getserver $i 0 2) serverinfo_name_port_id = [@[serverinfo_name]:[@@serverinfo_port]] // previous name was "sinfonpid" - serverinfo_title = (get_server_title $i) // this is the server name - serverinfo_map_name = (get_server_map_name $i) - serverinfo_player_count = (get_server_player_count $i) - serverinfo_ping = (get_server_ping $i) - serverinfo_last = (get_server_last $i) - serverinfo_handle = (get_server_handle $i) - serverinfo_flags = (get_server_flags $i) - serverinfo_branch = (get_server_version_branch $i) - serverinfo_priority = (get_server_priority $i) + serverinfo_title = (getserver $i 0 3) // this is the server name + serverinfo_map_name = (getserver $i 0 4) + serverinfo_player_count = (getserver $i 0 5) + serverinfo_ping = (getserver $i 0 6) + serverinfo_last = (getserver $i 0 7) + serverinfo_handle = (getserver $i 0 8) + serverinfo_flags = (getserver $i 0 9) + serverinfo_branch = (getserver $i 0 10) + serverinfo_priority = (getserver $i 0 11) serverinfo_status_flag = 0 loop fi (stringlen $serverinfo_flags) [ if (=s (substring $serverinfo_flags $fi 1) "s") [ serverinfo_status_flag = 1 ] ] // attributes - serverinfo_attribute = (get_server_attribute_count $i) - serverinfo_game_version = (get_server_game_version $i) - serverinfo_mode = (get_server_game_mode $i) - serverinfo_mutators = (get_server_game_mutators $i) - serverinfo_time = (get_server_game_time $i) - serverinfo_max_players = (get_server_max_players $i) - serverinfo_mstr = (get_server_mstr $i) - serverinfo_variables = (get_server_variables $i) - serverinfo_modifications = (get_server_modifications $i) - serverinfo_version_major = (get_server_version_major $i) - serverinfo_version_minor = (get_server_version_minor $i) - serverinfo_version_patch = (get_server_version_patch $i) - serverinfo_version_server = (get_server_version_server $i) - serverinfo_version_a = (get_server_version_a $i) - serverinfo_game_st = (get_server_game_st $i) - serverinfo_game_tl = (get_server_game_tl $i) + serverinfo_attribute = (getserver $i 1 -1) + serverinfo_game_version = (getserver $i 1 0) + serverinfo_mode = (getserver $i 1 1) + serverinfo_mutators = (getserver $i 1 2) + serverinfo_time = (getserver $i 1 3) + serverinfo_max_players = (getserver $i 1 4) + serverinfo_mstr = (getserver $i 1 5) + serverinfo_variables = (getserver $i 1 6) + serverinfo_modifications = (getserver $i 1 7) + serverinfo_version_major = (getserver $i 1 8) + serverinfo_version_minor = (getserver $i 1 9) + serverinfo_version_patch = (getserver $i 1 10) + serverinfo_version_server = (getserver $i 1 11) + serverinfo_version_a = (getserver $i 1 12) + serverinfo_game_st = (getserver $i 1 13) + serverinfo_game_tl = (getserver $i 1 14) serverinfo_offline_time = (? (>= $serverinfo_last 0) (div (max (- (getmillis 1) (- $serverinfo_last (div $serverinfo_ping 2))) 0) 1000) 0) serverinfo_active = (? (< $serverinfo_ping $serverwaiting) 1 0) From 65dffedc15bdc796710d6b3492edd76eb775eb49 Mon Sep 17 00:00:00 2001 From: Robert Alm Nilsson Date: Thu, 20 Aug 2020 20:02:57 +0200 Subject: [PATCH 3/8] Stay open --- config/menus/servers.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/menus/servers.cfg b/config/menus/servers.cfg index f6c1375a3..967c17a99 100755 --- a/config/menus/servers.cfg +++ b/config/menus/servers.cfg @@ -97,7 +97,7 @@ server_menu_iterator = [ shown_server_ui = 1 ] ] -server_menu = [ +server_menu = [ ui_stay_open [ serverinfo_pause = 0 serverinfo_timer = (- (getmillis 1) $serverinfo_ui_time) @@ -592,7 +592,7 @@ server_menu = [ if (&& [! $guilayoutpass] [|| (> $serverinfo_timer 30000) (> $serverinfo_server_count (div (* $server_count 3) 4))]) [ if $serverinfo_pause [ if (! $pausesortservers) [ pausesortservers 1 ] ] [ if $pausesortservers [ pausesortservers 0 ] ] ] ui_tip (format "Press %1 to open this menu at any time" (dobindsearch "showservers")) -] +] ] new_ui Servers [ ui_header "Serverbrowser" From f15c5566118160aa45d573f5d7b2ee7861fc512e Mon Sep 17 00:00:00 2001 From: Robert Alm Nilsson Date: Sat, 22 Aug 2020 17:55:10 +0200 Subject: [PATCH 4/8] {} --- config/menus/servers.cfg | 68 ++++++++++++++++++++-------------------- src/engine/command.cpp | 54 ++++++++++++++++++++----------- 2 files changed, 70 insertions(+), 52 deletions(-) diff --git a/config/menus/servers.cfg b/config/menus/servers.cfg index 967c17a99..1f91e5112 100755 --- a/config/menus/servers.cfg +++ b/config/menus/servers.cfg @@ -110,7 +110,7 @@ server_menu = [ ui_stay_open [ if (getserver) [ sleep 0.1 [ updateservers ] ] ui_list [ - ui_center_z [ + ui_center_z { ui_strut 0.5 /// Reset List Button in red @@ -119,19 +119,19 @@ server_menu = [ ui_stay_open [ /// Refresh List Button in green ui_button (format "^fg%1" "Refresh") updatefrommaster; ui_strut 15 - ] + } // Search bar ui_textfield serverinfo_search_str 40 [serverinfo_index = 0] -1 0 "" 0 "^fd Search" 1; ui_strut 0.5 - ui_center_z [ + ui_center_z { // Reset search button if (!=s $serverinfo_search_str "") [ ui_button "^frX" [ serverinfo_search_str = "" ] ] [ ui_strut 1 ] - ] + } ui_spring 1 /// show how many players are online on how many servers currently @@ -151,13 +151,13 @@ server_menu = [ ui_stay_open [ ui_bar ui_list [ - ui_center_z [ + ui_center_z { ui_button "Reset" [serversortreset] [serversortreset] "" 0xFF8888 - ] + } ui_strut 1.5 - ui_center_z [ + ui_center_z { loop i (listlen $serversort) [ serverinfo_sort_type = (at $serversort $i) if $serverinfo_sort_type [ @@ -180,9 +180,9 @@ server_menu = [ ui_stay_open [ ] ] ] - ] + } ui_spring 1 - ui_center_z [ + ui_center_z { ui_font "little" [ loop i (listlen $serverinfo_types) [ if (&& $i [< (listfind serverinfo_client_type $serversort [= $i (? (> $serverinfo_client_type 0) $serverinfo_client_type (- 0 $serverinfo_client_type))]) 0]) [ @@ -197,7 +197,7 @@ server_menu = [ ui_stay_open [ ] ] ] - ] + } ] ui_strut 0.25 @@ -342,25 +342,25 @@ server_menu = [ ui_stay_open [ ui_background 0x222222 ui_list [ ui_merge 88 [ - ui_center [ + ui_center { ui_strut 8 1 if $serverinfo_active [ - ui_center [ + ui_center { ui_font "huge" [ ui_button (format "^fw%1" $serverinfo_player_count) ] // players playing - ui_center [ ui_button (format "^fd/^fa%1" $serverinfo_max_players) ] // max players - ] + ui_center { ui_button (format "^fd/^fa%1" $serverinfo_max_players) } // max players + } ui_strut 0.125 - ui_center [ + ui_center { ui_button (format "^f%1%2" (? (< $serverinfo_ping 200) "g" (? (< $serverinfo_ping 400) "y" "r")) $serverinfo_ping) // ping info ui_font "little" [ ui_button " ^fams" ] - ] + } ui_strut 0.125 - ui_center [ + ui_center { serverinfo_seconds = (? (>= $serverinfo_last 0) (div (- (getmillis 1) $serverinfo_last) 1000) -1) // ??last ping info?? ui_font "little" [ ui_button (? (>= $serverinfo_seconds 0) (format "^fa%1 ^fds ago" $serverinfo_seconds) "^fdwaiting..") ] - ] - ] [ ui_center [ ui_font "huge" [ ui_button "?" ] ] ] - ] + } + ] [ ui_center { ui_font "huge" [ ui_button "?" ] } ] + } // START OF SERVER INFORMATION LIST serverinfo_image = "textures/emblem" if (&& [< $serverinfo_ping $serverwaiting] [= $serverinfo_game_version (getversion 1)]) [ @@ -378,7 +378,7 @@ server_menu = [ ui_stay_open [ ui_list [ ui_list [ ui_strut 4 ] - ui_center [ + ui_center { ui_list [ // Server title title = (format "^fw%1" $serverinfo_title) @@ -402,18 +402,18 @@ server_menu = [ ui_stay_open [ ui_font "emphasis" [ ui_button (limitstring $title 64) ] // show ip and port - ui_font "little" [ ui_center_z [ ui_button (format "^fd^fa %1^fd" $serverinfo_name_port_id) ] ] + ui_font "little" [ ui_center_z { ui_button (format "^fd^fa %1^fd" $serverinfo_name_port_id) } ] if $serverinfo_handle [ - ui_font "little" [ ui_center [ ui_button (format "^fd[^fc%1^fd]" $serverinfo_handle) ] ] + ui_font "little" [ ui_center { ui_button (format "^fd[^fc%1^fd]" $serverinfo_handle) } ] ] if $serverinfo_status_flag [ - ui_font "little" [ ui_center [ ui_button "^fd[^fcstatistics^fd]" ] ] + ui_font "little" [ ui_center { ui_button "^fd[^fcstatistics^fd]" } ] ] // if enabled, show priority if $showserverpriority [ - ui_font "little" [ ui_center [ ui_button (format "^fd[^fcpriority %1^fd]" $serverinfo_priority) ] ] + ui_font "little" [ ui_center { ui_button (format "^fd[^fcpriority %1^fd]" $serverinfo_priority) } ] ] ] ui_spring 1 @@ -428,7 +428,7 @@ server_menu = [ ui_stay_open [ ui_button (format "^fd[^fc%1^fd: ^fw%2^fd]" (at $gamestatename $serverinfo_game_st) (timestr (* (? $serverinfo_player_count (max (- $serverinfo_game_tl $serverinfo_offline_time) 0) $serverinfo_time) 1000) 3)) ] gname = (gamename $serverinfo_mode $serverinfo_mutators 0 32) - ui_font "little" [ ui_center [ ui_list [ + ui_font "little" [ ui_center { ui_list [ // show map name ui_button (format " ^fy%1 ^faon ^fo%2" $gname $serverinfo_map_name) @@ -437,7 +437,7 @@ server_menu = [ ui_stay_open [ // show server platform and branch if (&& ($serverbrowser_show_server_platform_and_branch) (>= $serverinfo_attribute 13)) [ - ui_font "little" [ ui_center_z [ + ui_font "little" [ ui_center_z { ui_text (format " ^fa[^fa%1" $serverinfo_version_major) ui_text (format "^fa.%1" $serverinfo_version_minor) ui_text (format "^fa.%1" $serverinfo_version_patch) @@ -448,9 +448,9 @@ server_menu = [ ui_stay_open [ ] [ ui_text "^fa]" ] - ] ] + } ] ] - ] ] ] + ] } ] ] [ ui_no_hit_fx [ ui_font "default" [ ui_button "^foIncompatible" [] [] "textures/servers/failed" ] ] ui_button (concat " ^faServer is using" (? (> $serverinfo_game_version (getversion 1)) "a ^fwnewer" "an ^fdolder") "protocol") @@ -493,7 +493,7 @@ server_menu = [ ui_stay_open [ ui_button " ^faServer is not replying to queries" ] ] - ] + } ] ] ] [ @@ -523,9 +523,9 @@ server_menu = [ ui_stay_open [ ] [ ui_tooltip "^faNo players online" ] ] [ ui_tooltip "^faNo information available" ] ] ] - //ui_center_z [ + //ui_center_z { // ui_image "textures/icons/fontawesome/favourite_off" [ echo "Coming Soon!" ] 0.75 - //]; ui_strut 1 + //}; ui_strut 1 ui_strut 5 ] serverinfo_list = (+ $serverinfo_list 1) @@ -579,9 +579,9 @@ server_menu = [ ui_stay_open [ if (hasauthkey) [ ui_checkbox (format "Identify as ^fs^fc%1^fS on connect" $accountname) authconnect; ui_strut 1.5 - ui_center_z [ ui_font "little" [ + ui_center_z { ui_font "little" [ ui_button "(^fs^frEdit Account^fS)" [show_ui profile 4] - ] ] + ] } ] ] diff --git a/src/engine/command.cpp b/src/engine/command.cpp index 705e9577c..3ee9b83d3 100644 --- a/src/engine/command.cpp +++ b/src/engine/command.cpp @@ -1068,13 +1068,14 @@ static inline const char *parseword(const char *p) int brakdepth = 0; for(;; p++) { - p += strcspn(p, "\"/;()[] \t\r\n\0"); + p += strcspn(p, "\"/;()[]{} \t\r\n\0"); switch(p[0]) { case '"': case ';': case ' ': case '\t': case '\r': case '\n': case '\0': return p; case '/': if(p[1] == '/') return p; break; - case '[': case '(': if(brakdepth >= maxbrak) return p; brakstack[brakdepth++] = p[0]; break; + case '[': case '{': case '(': if(brakdepth >= maxbrak) return p; brakstack[brakdepth++] = p[0]; break; case ']': if(brakdepth <= 0 || brakstack[--brakdepth] != '[') return p; break; + case '}': if(brakdepth <= 0 || brakstack[--brakdepth] != '{') return p; break; case ')': if(brakdepth <= 0 || brakstack[--brakdepth] != '(') return p; break; } } @@ -1214,6 +1215,7 @@ static void compilelookup(vector &code, const char *&p, int ltype) { case '(': case '[': + case '{': if(!compileword(code, p, VAL_STR, lookup, lookuplen)) goto invalid; break; case '$': @@ -1288,13 +1290,15 @@ static void compilelookup(vector &code, const char *&p, int ltype) static bool compileblockstr(vector &code, const char *str, const char *end, bool macro) { + const char block_start = *str++; + const char block_end = block_start == '{' ? '}' : ']'; int start = code.length(); code.add(macro ? CODE_MACRO : CODE_VAL|RET_STR); char *buf = (char *)code.reserve((end-str)/sizeof(uint)+1).buf; int len = 0; while(str < end) { - int n = strcspn(str, "\r/\"@]\0"); + int n = strcspn(str, "\r/\"@]}\0"); memcpy(&buf[len], str, n); len += n; str += n; @@ -1324,6 +1328,7 @@ static bool compileblockstr(vector &code, const char *str, const char *end else buf[len++] = *str++; break; case '@': + case '}': case ']': if(str < end) { buf[len++] = *str++; break; } case '\0': goto done; @@ -1342,6 +1347,7 @@ static bool compileblocksub(vector &code, const char *&p) int lookuplen = 0; switch(*p) { + case '{': case '(': if(!compilearg(code, p, VAL_STR)) return false; break; @@ -1382,11 +1388,13 @@ static bool compileblocksub(vector &code, const char *&p) static void compileblock(vector &code, const char *&p, int wordtype) { + const char block_start = *p++; + const char block_end = block_start == '{' ? '}' : ']'; const char *line = p, *start = p; int concs = 0; for(int brak = 1; brak;) { - p += strcspn(p, "@\"/[]\0"); + p += strcspn(p, "@\"/[]{}\0"); int c = *p++; switch(c) { @@ -1401,8 +1409,14 @@ static void compileblock(vector &code, const char *&p, int wordtype) case '/': if(*p=='/') p += strcspn(p, "\n\0"); break; - case '[': brak++; break; - case ']': brak--; break; + case '[': + case '{': + if(c == block_start) brak++; + break; + case ']': + case '}': + if(c == block_end) brak--; + break; case '@': { const char *esc = p; @@ -1416,7 +1430,7 @@ static void compileblock(vector &code, const char *&p, int wordtype) code.add(CODE_CONCW|RET_STR|(concs<<8)); concs = 1; } - if(compileblockstr(code, start, esc-1, true)) concs++; + if(compileblockstr(code, start-1, esc-1, true)) concs++; if(compileblocksub(code, p)) concs++; if(!concs) code.pop(); else start = p; @@ -1435,7 +1449,7 @@ static void compileblock(vector &code, const char *&p, int wordtype) int inst = code.length(); code.add(CODE_BLOCK); code.add(CODE_OFFSET|((inst+2)<<8)); - compilestatements(code, p, VAL_ANY, ']'); + compilestatements(code, p, VAL_ANY, block_end); code.add(CODE_EXIT); code[inst] |= uint(code.length() - (inst + 1))<<8; return; @@ -1448,7 +1462,7 @@ static void compileblock(vector &code, const char *&p, int wordtype) return; } } - compileblockstr(code, start, p-1, concs > 0); + compileblockstr(code, start-1, p-1, concs > 0); if(concs > 1) concs++; } if(concs) @@ -1491,8 +1505,8 @@ static bool compileword(vector &code, const char *&p, int wordtype, char * case VAL_IDENT: code.add(CODE_IDENTU); break; } return true; + case '{': case '[': - p++; compileblock(code, p, wordtype); return true; default: word = cutword(p, wordlen); break; @@ -1504,6 +1518,7 @@ static inline bool compilearg(vector &code, const char *&p, int wordtype) { char *word = NULL; int wordlen = 0; + if(wordtype == VAL_ANY && *p == '{') wordtype = VAL_CODE; bool more = compileword(code, p, wordtype, word, wordlen); if(!more) return false; if(word) @@ -1648,7 +1663,7 @@ static void compilestatements(vector &code, const char *&p, int rettype, i } endstatement: if(more) while(compilearg(code, p, VAL_ANY)) code.add(CODE_POP); - p += strcspn(p, ")];/\n\0"); + p += strcspn(p, ")}];/\n\0"); int c = *p++; switch(c) { @@ -1658,6 +1673,7 @@ static void compilestatements(vector &code, const char *&p, int rettype, i return; case ')': + case '}': case ']': if(c == brak) return; debugcodeline(line, "\frunexpected \"%c\"", c); @@ -2476,7 +2492,7 @@ ICOMMAND(0, unescape, "s", (char *s), const char *escapeid(const char *s) { - const char *end = s + strcspn(s, "\"/;()[]@ \f\t\r\n\0"); + const char *end = s + strcspn(s, "\"/;()[]{}@ \f\t\r\n\0"); return *end ? escapestring(s) : s; } @@ -2487,8 +2503,9 @@ bool validateblock(const char *s) int brakdepth = 0; for(; *s; s++) switch(*s) { - case '[': case '(': if(brakdepth >= maxbrak) return false; brakstack[brakdepth++] = *s; break; + case '{': case '[': case '(': if(brakdepth >= maxbrak) return false; brakstack[brakdepth++] = *s; break; case ']': if(brakdepth <= 0 || brakstack[--brakdepth] != '[') return false; break; + case '}': if(brakdepth <= 0 || brakstack[--brakdepth] != '{') return false; break; case ')': if(brakdepth <= 0 || brakstack[--brakdepth] != '(') return false; break; case '"': s = parsestring(s + 1); if(*s != '"') return false; break; case '/': if(s[1] == '/') return false; break; @@ -2727,28 +2744,29 @@ static bool parselist(const char *&s, const char *&start = liststart, const char switch(*s) { case '"': quotestart = s++; start = s; s = parsestring(s); end = s; if(*s == '"') s++; quoteend = s; break; - case '(': case '[': + case '{': case '(': case '[': quotestart = s; start = s+1; for(int braktype = *s++, brak = 1;;) { - s += strcspn(s, "\"/;()[]\0"); + s += strcspn(s, "\"/;()[]{}\0"); int c = *s++; switch(c) { case '\0': s--; quoteend = end = s; return true; case '"': s = parsestring(s); if(*s == '"') s++; break; case '/': if(*s == '/') s += strcspn(s, "\n\0"); break; - case '(': case '[': if(c == braktype) brak++; break; + case '{': case '(': case '[': if(c == braktype) brak++; break; case ')': if(braktype == '(' && --brak <= 0) goto endblock; break; case ']': if(braktype == '[' && --brak <= 0) goto endblock; break; + case '}': if(braktype == '{' && --brak <= 0) goto endblock; break; } } endblock: end = s-1; quoteend = s; break; - case '\0': case ')': case ']': return false; + case '\0': case '}': case ')': case ']': return false; default: quotestart = start = s; s = parseword(s); quoteend = end = s; break; } skiplist(s); @@ -3031,7 +3049,7 @@ void listsplice(const char *s, const char *vals, int *skip, int *count) skiplist(s); switch(*s) { - case '\0': case ')': case ']': break; + case '\0': case '}': case ')': case ']': break; default: if(!p.empty()) p.add(' '); p.put(s, strlen(s)); From 687455911c2c770ef10b258bc9a45c296b4fc88b Mon Sep 17 00:00:00 2001 From: Robert Alm Nilsson Date: Sat, 22 Aug 2020 13:20:35 +0200 Subject: [PATCH 5/8] Compile block args to aliases --- src/engine/command.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/engine/command.cpp b/src/engine/command.cpp index 3ee9b83d3..2ca09e1a1 100644 --- a/src/engine/command.cpp +++ b/src/engine/command.cpp @@ -2213,12 +2213,19 @@ static const uint *runcode(const uint *code, tagval &result) _numargs = newargs; \ identlink aliaslink = { id, aliasstack, (1<code) id->code = compilecode(id->getstr()); \ - uint *code = id->code; \ - code[0] += 0x100; \ - runcode(code+1, result); \ - code[0] -= 0x100; \ - if(int(code[0]) < 0x100) delete[] code; \ + if(id->valtype == VAL_CODE && id->val.code) \ + { \ + runcode(id->val.code, result); \ + } \ + else \ + { \ + if(!id->code) id->code = compilecode(id->getstr()); \ + uint *code = id->code; \ + code[0] += 0x100; \ + runcode(code+1, result); \ + code[0] -= 0x100; \ + if(int(code[0]) < 0x100) delete[] code; \ + } \ aliasstack = aliaslink.next; \ for(int i = 0; i < newargs; i++) \ poparg(*identmap[i]); \ From a2f0e862b57696c4b197ce3995794fc4e984f49b Mon Sep 17 00:00:00 2001 From: Robert Alm Nilsson Date: Sat, 22 Aug 2020 19:16:59 +0200 Subject: [PATCH 6/8] Fix with arguments --- src/engine/command.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/engine/command.cpp b/src/engine/command.cpp index 2ca09e1a1..41b2ea1b8 100644 --- a/src/engine/command.cpp +++ b/src/engine/command.cpp @@ -1518,7 +1518,6 @@ static inline bool compilearg(vector &code, const char *&p, int wordtype) { char *word = NULL; int wordlen = 0; - if(wordtype == VAL_ANY && *p == '{') wordtype = VAL_CODE; bool more = compileword(code, p, wordtype, word, wordlen); if(!more) return false; if(word) @@ -1581,7 +1580,12 @@ static void compilestatements(vector &code, const char *&p, int rettype, i else switch(id->type) { case ID_ALIAS: - while(numargs < MAXARGS && (more = compilearg(code, p, VAL_ANY))) numargs++; + while(numargs < MAXARGS) + { + skipcomments(p); + if(more = compilearg(code, p, *p == '{' ? VAL_CODE : VAL_ANY)) numargs++; + else break; + } code.add((id->index < MAXARGS ? CODE_CALLARG : CODE_CALL)|(id->index<<8)); break; case ID_COMMAND: From 276184bc4f5979208027ccb2125d795e9b22b3d4 Mon Sep 17 00:00:00 2001 From: Robert Alm Nilsson Date: Sat, 22 Aug 2020 19:34:07 +0200 Subject: [PATCH 7/8] More {} --- config/menus/.servers.cfg.swp | Bin 0 -> 49152 bytes config/menus/servers.cfg | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 config/menus/.servers.cfg.swp diff --git a/config/menus/.servers.cfg.swp b/config/menus/.servers.cfg.swp new file mode 100644 index 0000000000000000000000000000000000000000..72e8ddaaae7e1f3b71ca55b72973b2c1e5c57e3d GIT binary patch literal 49152 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 H3hVy@hMCxW literal 0 HcmV?d00001 diff --git a/config/menus/servers.cfg b/config/menus/servers.cfg index 1f91e5112..25bbdf7d8 100755 --- a/config/menus/servers.cfg +++ b/config/menus/servers.cfg @@ -107,7 +107,7 @@ server_menu = [ ui_stay_open [ // BEGIN top bar - if (getserver) [ sleep 0.1 [ updateservers ] ] + if (getserver) [ sleep 0.1 { updateservers } ] ui_list [ ui_center_z { @@ -374,7 +374,7 @@ server_menu = [ ui_stay_open [ ui_list [ // make sure the entry takes all the horizontal space available - ui_list2 [ ui_strut 80 1 ] + ui_list2 { ui_strut 80 1 } ui_list [ ui_list [ ui_strut 4 ] From bca4569be6e63e6602a4406027edb0a046ddf3cf Mon Sep 17 00:00:00 2001 From: Robert Alm Nilsson Date: Sun, 23 Aug 2020 16:59:54 +0200 Subject: [PATCH 8/8] Inline ui_merge --- config/menus/servers.cfg | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/config/menus/servers.cfg b/config/menus/servers.cfg index 25bbdf7d8..488f5c11a 100755 --- a/config/menus/servers.cfg +++ b/config/menus/servers.cfg @@ -341,7 +341,9 @@ server_menu = [ ui_stay_open [ ui_list [ ui_background 0x222222 - ui_list [ ui_merge 88 [ + ui_list [ + // This is ui_merge copied for performance reasons. + ui_no_skin_fx [ui_body [ui_list [ui_list [ui_strut 88]; ui_list [ ui_center { ui_strut 8 1 if $serverinfo_active [ @@ -496,7 +498,7 @@ server_menu = [ ui_stay_open [ } ] ] - ] [ + ] ] ] [ serverinfo_password = "" serverinfo_retry = @(escape $serverinfo_name_port_id) serverinfo_wait = (! (|| [hasauthkey 1] [!= @@serverinfo_mstr 4])) @@ -522,7 +524,7 @@ server_menu = [ ui_stay_open [ ui_tooltip $phover ] [ ui_tooltip "^faNo players online" ] ] [ ui_tooltip "^faNo information available" ] - ] ] + ] ] ] //ui_center_z { // ui_image "textures/icons/fontawesome/favourite_off" [ echo "Coming Soon!" ] 0.75 //}; ui_strut 1