1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-06 17:41:04 +00:00

Mainmenu: Still support favorites if send_pre_v25_init is disabled

@SmallJoker has noted a bug that servers from the (local) main menu
favorites list can't be opened.

This commit fixes the bug by disabling any main menu based protocol
checks for servers from the favorite list.

Also, it fixes a second bug that happens when a server from the
public serverlist doesn't send its supported protocol versions,
most likely because its running a minetest older than commit [1].
Then we have shown an error msg that the server has enforced
one specific protocol version. This was most likely not the case.

Of course, we can't do anything better than do an assumption on
the protocol versions if they are not known. That assumption
should however be closest to the most often occuring case as
possible.

Also, some little cleanups.

[1]: 5a0ed780f5 "Server: announce MIN/MAX protocol version supported to serverlist. Client: check serverlist"
This commit is contained in:
est31 2016-04-15 04:13:53 +02:00
parent d82c5da0dc
commit bc4dc80c01
3 changed files with 32 additions and 20 deletions

View file

@ -102,22 +102,22 @@ local function main_button_handler(tabview, fields, name, tabdata)
local event = core.explode_table_event(fields["favourites"])
if event.type == "DCL" then
if event.row <= #menudata.favorites then
if not is_server_protocol_compat_or_error(menudata.favorites[event.row].proto_min,
menudata.favorites[event.row].proto_max) then
local fav = menudata.favorites[event.row]
if menudata.favorites_is_public and
not is_server_protocol_compat_or_error(
fav.proto_min, fav.proto_max) then
return true
end
gamedata.address = menudata.favorites[event.row].address
gamedata.port = menudata.favorites[event.row].port
gamedata.address = fav.address
gamedata.port = fav.port
gamedata.playername = fields["te_name"]
if fields["te_pwd"] ~= nil then
gamedata.password = fields["te_pwd"]
end
gamedata.selected_world = 0
if menudata.favorites ~= nil then
gamedata.servername = menudata.favorites[event.row].name
gamedata.serverdescription = menudata.favorites[event.row].description
end
gamedata.servername = fav.name
gamedata.serverdescription = fav.description
if gamedata.address ~= nil and
gamedata.port ~= nil then
@ -188,6 +188,7 @@ local function main_button_handler(tabview, fields, name, tabdata)
asyncOnlineFavourites()
else
menudata.favorites = core.get_favorites("local")
menudata.favorites_is_public = false
end
tabdata.fav_selected = nil
return true
@ -197,7 +198,7 @@ local function main_button_handler(tabview, fields, name, tabdata)
local current_favourite = core.get_table_index("favourites")
if current_favourite == nil then return end
core.delete_favorite(current_favourite)
menudata.favorites = order_favorite_list(core.get_favorites())
menudata.favorites = core.get_favorites("local")
tabdata.fav_selected = nil
core.setting_set("address","")
@ -221,11 +222,13 @@ local function main_button_handler(tabview, fields, name, tabdata)
menudata.favorites[fav_idx].address == fields["te_address"] and
menudata.favorites[fav_idx].port == fields["te_port"] then
gamedata.servername = menudata.favorites[fav_idx].name
gamedata.serverdescription = menudata.favorites[fav_idx].description
local fav = menudata.favorites[fav_idx]
gamedata.servername = fav.name
gamedata.serverdescription = fav.description
if not is_server_protocol_compat_or_error(menudata.favorites[fav_idx].proto_min,
menudata.favorites[fav_idx].proto_max)then
if menudata.favorites_is_public and
not is_server_protocol_compat_or_error(
fav.proto_min, fav.proto_max) then
return true
end
else
@ -252,6 +255,7 @@ local function on_change(type,old_tab,new_tab)
asyncOnlineFavourites()
else
menudata.favorites = core.get_favorites("local")
menudata.favorites_is_public = false
end
end