diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index c52bfc66d53..9a85ba171b2 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -90,6 +90,9 @@ // Last world.time that the player tried to request their resources. var/last_ui_resource_send = 0 + /// If true, client cannot ready up, late join, or observe. Used for players with EXTREMELY old byond versions. + var/version_blocked = FALSE + /// Date the client registered their BYOND account on var/byondacc_date /// Days since the client's BYOND account was created diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 5caf7eb3359..84f273b63fa 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -6,7 +6,7 @@ #define TOPIC_SPAM_DELAY 2 //2 ticks is about 2/10ths of a second; it was 4 ticks, but that caused too many clicks to be lost due to lag #define UPLOAD_LIMIT 10485760 //Restricts client uploads to the server to 10MB //Boosted this thing. What's the worst that can happen? -#define MIN_CLIENT_VERSION 0 //Just an ambiguously low version for now, I don't want to suddenly stop people playing. +#define MIN_CLIENT_VERSION 513 // Minimum byond major version required to play. //I would just like the code ready should it ever need to be used. #define SUGGESTED_CLIENT_VERSION 513 // only integers (e.g: 513, 514) are useful here. This is the part BEFORE the ".", IE 513 out of 513.1536 #define SUGGESTED_CLIENT_BUILD 1536 // only integers (e.g: 1536, 1539) are useful here. This is the part AFTER the ".", IE 1536 out of 513.1536 @@ -324,11 +324,9 @@ if(connection != "seeker") //Invalid connection type. return null if(byond_version < MIN_CLIENT_VERSION) // Too out of date to play at all. Unfortunately, we can't send them a message here. - return null + version_blocked = TRUE if(byond_build < config.minimum_client_build) - alert(src, "You are using a byond build which is not supported by this server. Please use a build version of atleast [config.minimum_client_build].", "Incorrect build", "OK") - qdel(src) - return + version_blocked = TRUE var/show_update_prompt = FALSE if(byond_version < SUGGESTED_CLIENT_VERSION) // Update is suggested, but not required. @@ -418,7 +416,7 @@ apply_clickcatcher() if(show_update_prompt) - to_chat(src, "Your BYOND client (v: [byond_version].[byond_build]) is out of date. This can cause glitches. We highly suggest you download the latest client from Byond.com before playing.") + show_update_notice() check_forum_link() @@ -1090,6 +1088,8 @@ if(notify && (byondacc_age < config.byond_account_age_threshold)) message_admins("[key] has just connected for the first time. BYOND account registered on [byondacc_date] ([byondacc_age] days old)") +/client/proc/show_update_notice() + to_chat(src, "Your BYOND client (v: [byond_version].[byond_build]) is out of date. This can cause glitches. We highly suggest you download the latest client from byond.com before playing. You can also update via the BYOND launcher application.") #undef LIMITER_SIZE #undef CURRENT_SECOND diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 71d3abd5e2c..344d97b58c8 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -172,6 +172,9 @@ if(!tos_consent) to_chat(usr, "You must consent to the terms of service before you can join!") return FALSE + if(client.version_blocked) + client.show_update_notice() + return FALSE ready = !ready new_player_panel_proc() @@ -187,7 +190,9 @@ if(!tos_consent) to_chat(usr, "You must consent to the terms of service before you can join!") return FALSE - + if(client.version_blocked) + client.show_update_notice() + return FALSE if(!SSticker || SSticker.current_state == GAME_STATE_STARTUP) to_chat(usr, "You must wait for the server to finish starting before you can join!") return FALSE @@ -230,6 +235,9 @@ if(!tos_consent) to_chat(usr, "You must consent to the terms of service before you can join!") return FALSE + if(client.version_blocked) + client.show_update_notice() + return FALSE if(!SSticker || SSticker.current_state != GAME_STATE_PLAYING) to_chat(usr, "The round is either not ready, or has already finished...") return