From 3a853c8e60a051d4bb59c931281e0afad35003ee Mon Sep 17 00:00:00 2001 From: LoafyLemon Date: Thu, 6 Jul 2023 00:23:00 +0100 Subject: [PATCH] Bug fixes and updater improvements * Added feedback hints when clicking 'check for updates' button in the main menu * Updated methods to reflect the new changes * Fixed updater crashing with `u` parameter due to explicit no-parameter screen definition, while renpy expects the (lax) implicit definition * Fixed server url --- game/scripts/gui/main_menu.rpy | 5 +++-- game/scripts/utility/updater.rpy | 36 ++++++++++++++++++++++++-------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/game/scripts/gui/main_menu.rpy b/game/scripts/gui/main_menu.rpy index 48459ef6..14190223 100644 --- a/game/scripts/gui/main_menu.rpy +++ b/game/scripts/gui/main_menu.rpy @@ -249,16 +249,17 @@ screen navigation(title=None): transclude - null height 14 # Half button height + null height 28 # Half button height if main_menu: if not title: if not renpy.mobile: - if UPDATE_VER: + if version_float(UPDATE_VER) < version_float(): textbutton "Install updates" action InstallUpdates() style_prefix "update_available" sensitive (not prerelease) else: textbutton "Check for updates" action CheckUpdates(300) sensitive (not prerelease) + text "[UPDATE_HINT]" size 8 color "#fff" xalign 0.5 if show_quick_start: textbutton _("Quick Start") action Start("start_quick") sensitive is_sensitive diff --git a/game/scripts/utility/updater.rpy b/game/scripts/utility/updater.rpy index 777525f3..95be649d 100644 --- a/game/scripts/utility/updater.rpy +++ b/game/scripts/utility/updater.rpy @@ -1,8 +1,9 @@ init python: import requests - UPDATE_URL = bytes.fromhex("687474703a2f2f757064617465732e73696c76657273747564696f67616d65732e6f72672f757064617465732e6a736f6e").decode() - UPDATE_VER = "" + UPDATE_URL = bytes.fromhex("687474703a2f2f757064617465732e73696c76657273747564696f67616d65732e6f72672f6173736574732f757064617465732e6a736f6e").decode() + UPDATE_VER = None + UPDATE_HINT = "" @renpy.pure class CheckUpdates(Action): @@ -19,12 +20,18 @@ init python: # we need to forbid updater from affecting # GIT-supplied versions of the game to avoid bugs. + global UPDATE_VER, UPDATE_HINT + if (not updater.can_update() or config.developer) and not self.simulate: return check = True url = self.url + if not self.onetime: + UPDATE_HINT = "Checking for updates..." + renpy.restart_interaction() + if self.onetime and url in updater.checked: check = False @@ -36,11 +43,19 @@ init python: persistent._update_last_checked[url] = time.time() updater.Updater(url, check_only=True, simulate=self.simulate, **self.kwargs) - global UPDATE_VER - UPDATE_VER = persistent._update_version.get(url, "") + UPDATE_VER = persistent._update_version.get(url, None) - if self.autostart: - renpy.invoke_in_new_context(updater.update, self.url, simulate=self.simulate, **self.kwargs) + if version_float(UPDATE_VER) < version_float(): + if not self.onetime: + UPDATE_HINT = "New game version available!" + renpy.restart_interaction() + + if self.autostart: + renpy.invoke_in_new_context(updater.update, self.url, simulate=self.simulate, **self.kwargs) + elif not UPDATE_VER: + ui.timer(2.0, SetVariable("UPDATE_HINT", "Server is not responding.")) + elif not self.onetime: + ui.timer(2.0, SetVariable("UPDATE_HINT", "You are already up-to-date.")) @renpy.pure class InstallUpdates(Action): @@ -62,8 +77,10 @@ init python: renpy.set_return_stack(("main_room",)) - def version_float(): - control, major, *minor = config.version.split(" ")[0].split(".") + def version_float(version=None): + version = version or config.version + + control, major, *minor = version.split(" ")[0].split(".") return float("{}.{}{}".format(control, major, "".join(minor))) def version_patch(): @@ -208,7 +225,8 @@ define update_message_list = [ "Insert disc 2", ] -screen updater(): +# Do not add parenthesis to the updater screen, otherwise it will break screen parameter interpolation. +screen updater: tag menu