From 3cf2058447bd9937203c292c5593d05c6e2ba4d4 Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Wed, 10 Jan 2024 20:16:29 -0600 Subject: [PATCH 01/11] contibor --- CONTRIBUTORS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 8fccc544..626648a1 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -50,3 +50,6 @@ ### Rikko - Created the original "reject_recently_left_players" plugin + +### Temp (3alTemp) +- Modder & Bug Fixer \ No newline at end of file From d0c7b4497b7117ec4f560fe5818d91bf5fe17b40 Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Wed, 10 Jan 2024 21:31:00 -0600 Subject: [PATCH 02/11] Respawn dots --- .../python/bascenev1lib/actor/respawnicon.py | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py index 72a14c93..f56f1c76 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py @@ -92,7 +92,7 @@ class RespawnIcon: assert self._name.node bs.animate(self._name.node, 'scale', {0: 0, 0.1: 0.5}) - tpos = (-60 - h_offs if on_right else 60 + h_offs, -192 + offs) + tpos = (-60 - h_offs if on_right else 60 + h_offs, -193 + offs) self._text: bs.NodeActor | None = bs.NodeActor( bs.newnode( 'text', @@ -109,9 +109,27 @@ class RespawnIcon: }, ) ) + dpos = [ipos[0] + (7 if on_right else -7), ipos[1] - 16] + self._dec_text: bs.NodeActor | None = bs.NodeActor( + bs.newnode( + 'text', + attrs={ + 'position': dpos, + 'h_attach': 'right' if on_right else 'left', + 'h_align': 'right' if on_right else 'left', + 'scale': 0.65, + 'shadow': 0.5, + 'flatness': 0.5, + 'v_attach': 'top', + 'color': bs.safecolor(icon['tint_color']), + 'text': '...', + }, + ) + ) assert self._text.node bs.animate(self._text.node, 'scale', {0: 0, 0.1: 0.9}) + bs.animate(self._dec_text.node, 'scale', {0: 0, 0.1: 0.65}) self._respawn_time = bs.time() + respawn_time self._update() @@ -155,10 +173,20 @@ class RespawnIcon: def _update(self) -> None: remaining = int(round(self._respawn_time - bs.time())) + + def dec_step(): + self._dec_text.node.text = self._dec_text.node.text[:-1] + if remaining > 0: assert self._text is not None if self._text.node: self._text.node.text = str(remaining) + self._dec_text.node.text = '...' + bs.timer(0.25, dec_step) + bs.timer(0.5, dec_step) + bs.timer(0.75, dec_step) else: self._visible = False - self._image = self._text = self._timer = self._name = None + self._image = ( + self._text + ) = self._dec_text = self._timer = self._name = None From 1043a38d9dcad8ee4e01400a6721990349c05dfb Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Thu, 11 Jan 2024 19:36:46 -0600 Subject: [PATCH 03/11] setting shenanigans --- .../python/bascenev1lib/actor/respawnicon.py | 51 +++++++++++-------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py index f56f1c76..08e8ddd5 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py @@ -23,6 +23,7 @@ class RespawnIcon: def __init__(self, player: bs.Player, respawn_time: float): """Instantiate with a Player and respawn_time (in seconds).""" self._visible = True + self._dots_epic_only = False on_right, offs_extra, respawn_icons = self._get_context(player) @@ -110,26 +111,33 @@ class RespawnIcon: ) ) dpos = [ipos[0] + (7 if on_right else -7), ipos[1] - 16] - self._dec_text: bs.NodeActor | None = bs.NodeActor( - bs.newnode( - 'text', - attrs={ - 'position': dpos, - 'h_attach': 'right' if on_right else 'left', - 'h_align': 'right' if on_right else 'left', - 'scale': 0.65, - 'shadow': 0.5, - 'flatness': 0.5, - 'v_attach': 'top', - 'color': bs.safecolor(icon['tint_color']), - 'text': '...', - }, + self._dec_text: bs.NodeActor | None = None + if ( + self._dots_epic_only + and bs.getactivity().globalsnode.slow_motion + or not self._dots_epic_only + ): + self._dec_text = bs.NodeActor( + bs.newnode( + 'text', + attrs={ + 'position': dpos, + 'h_attach': 'right' if on_right else 'left', + 'h_align': 'right' if on_right else 'left', + 'scale': 0.65, + 'shadow': 0.5, + 'flatness': 0.5, + 'v_attach': 'top', + 'color': bs.safecolor(icon['tint_color']), + 'text': '', + }, + ) ) - ) assert self._text.node bs.animate(self._text.node, 'scale', {0: 0, 0.1: 0.9}) - bs.animate(self._dec_text.node, 'scale', {0: 0, 0.1: 0.65}) + if self._dec_text: + bs.animate(self._dec_text.node, 'scale', {0: 0, 0.1: 0.65}) self._respawn_time = bs.time() + respawn_time self._update() @@ -146,7 +154,7 @@ class RespawnIcon: """Return info on where we should be shown and stored.""" activity = bs.getactivity() - if isinstance(bs.getsession(), bs.DualTeamSession): + if isinstance(activity.session, bs.DualTeamSession): on_right = player.team.id % 2 == 1 # Store a list of icons in the team. @@ -181,10 +189,11 @@ class RespawnIcon: assert self._text is not None if self._text.node: self._text.node.text = str(remaining) - self._dec_text.node.text = '...' - bs.timer(0.25, dec_step) - bs.timer(0.5, dec_step) - bs.timer(0.75, dec_step) + if self._dec_text: + self._dec_text.node.text = '...' + bs.timer(0.25, dec_step) + bs.timer(0.5, dec_step) + bs.timer(0.75, dec_step) else: self._visible = False self._image = ( From 4fba33985126ec7151bf4223f2c9f54e9ddbcc2b Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Thu, 11 Jan 2024 19:42:13 -0600 Subject: [PATCH 04/11] changed some logs --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1480580..457955da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ - Players now get points for killing bots with their own bombs by catching it and throwing it back at them. This is actually old logic but was disabled due to a logic flaw, but should be fixed now. (Thanks VinniTR!) +- Respawn icons now have dotted steps showing decimal progress to assist + players on calculating when they are gonna respawn. (Thanks Temp!) ### 1.7.32 (build 21741, api 8, 2023-12-20) - Fixed a screen message that no one will ever see (Thanks vishal332008?...) From d6cce8e3fb84cf40f2f1109031715b8f7a006832 Mon Sep 17 00:00:00 2001 From: TrialTemp Date: Thu, 25 Jan 2024 16:07:49 -0600 Subject: [PATCH 05/11] pylinted --- .../ba_data/python/bascenev1lib/actor/respawnicon.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py index 08e8ddd5..01ac91ca 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py @@ -19,11 +19,12 @@ class RespawnIcon: _MASKTEXSTORENAME = bs.storagename('masktex') _ICONSSTORENAME = bs.storagename('icons') + + steps_epic_only: bool = False def __init__(self, player: bs.Player, respawn_time: float): """Instantiate with a Player and respawn_time (in seconds).""" self._visible = True - self._dots_epic_only = False on_right, offs_extra, respawn_icons = self._get_context(player) @@ -113,9 +114,9 @@ class RespawnIcon: dpos = [ipos[0] + (7 if on_right else -7), ipos[1] - 16] self._dec_text: bs.NodeActor | None = None if ( - self._dots_epic_only + self.steps_epic_only and bs.getactivity().globalsnode.slow_motion - or not self._dots_epic_only + or not self.steps_epic_only ): self._dec_text = bs.NodeActor( bs.newnode( From 020aa8829a62702453cfdfbf34c14e2d23f0ccad Mon Sep 17 00:00:00 2001 From: 3alTemp Date: Fri, 1 Mar 2024 21:34:38 -0600 Subject: [PATCH 06/11] CI fix I think... --- .../python/bascenev1lib/actor/respawnicon.py | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py index 01ac91ca..21ed1afd 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py @@ -19,12 +19,12 @@ class RespawnIcon: _MASKTEXSTORENAME = bs.storagename('masktex') _ICONSSTORENAME = bs.storagename('icons') - - steps_epic_only: bool = False def __init__(self, player: bs.Player, respawn_time: float): """Instantiate with a Player and respawn_time (in seconds).""" + # pylint: disable=too-many-locals self._visible = True + self._dots_epic_only = False on_right, offs_extra, respawn_icons = self._get_context(player) @@ -114,9 +114,9 @@ class RespawnIcon: dpos = [ipos[0] + (7 if on_right else -7), ipos[1] - 16] self._dec_text: bs.NodeActor | None = None if ( - self.steps_epic_only + self._dots_epic_only and bs.getactivity().globalsnode.slow_motion - or not self.steps_epic_only + or not self._dots_epic_only ): self._dec_text = bs.NodeActor( bs.newnode( @@ -141,6 +141,7 @@ class RespawnIcon: bs.animate(self._dec_text.node, 'scale', {0: 0, 0.1: 0.65}) self._respawn_time = bs.time() + respawn_time + self._dec_timer: bs.Timer | None = None self._update() self._timer: bs.Timer | None = bs.Timer( 1.0, bs.WeakCall(self._update), repeat=True @@ -180,21 +181,25 @@ class RespawnIcon: offs_extra = -20 return on_right, offs_extra, icons + def _dec_step(self): + self._dec_text.node.text = self._dec_text.node.text[:-1] + # Kill our timer if the string is nothing. + if self._dec_text.node.text == '': + self._dec_timer = None + def _update(self) -> None: remaining = int(round(self._respawn_time - bs.time())) - def dec_step(): - self._dec_text.node.text = self._dec_text.node.text[:-1] - if remaining > 0: assert self._text is not None if self._text.node: self._text.node.text = str(remaining) if self._dec_text: self._dec_text.node.text = '...' - bs.timer(0.25, dec_step) - bs.timer(0.5, dec_step) - bs.timer(0.75, dec_step) + # Start our decimals timer + self._dec_timer = bs.Timer( + 0.25, bs.WeakCall(self._dec_step), repeat=True + ) else: self._visible = False self._image = ( From 3c4aaa7fc402d43d1cfff448ffbdd9fcca89e9e0 Mon Sep 17 00:00:00 2001 From: 3alTemp Date: Fri, 1 Mar 2024 21:42:47 -0600 Subject: [PATCH 07/11] https://media1.tenor.com/m/FcVrboOogkQAAAAC/my-bad --- src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py index 21ed1afd..6bf722af 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py @@ -181,7 +181,7 @@ class RespawnIcon: offs_extra = -20 return on_right, offs_extra, icons - def _dec_step(self): + def _dec_step(self) -> None: self._dec_text.node.text = self._dec_text.node.text[:-1] # Kill our timer if the string is nothing. if self._dec_text.node.text == '': From 460137bc3950fa7baef000997e550a10c9794ee7 Mon Sep 17 00:00:00 2001 From: 3alTemp Date: Tue, 5 Mar 2024 03:44:36 -0600 Subject: [PATCH 08/11] ough --- .../python/bascenev1lib/actor/respawnicon.py | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py index 6bf722af..13de4cc7 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py @@ -181,11 +181,24 @@ class RespawnIcon: offs_extra = -20 return on_right, offs_extra, icons - def _dec_step(self) -> None: - self._dec_text.node.text = self._dec_text.node.text[:-1] - # Kill our timer if the string is nothing. - if self._dec_text.node.text == '': + def _dec_step(self, display: list) -> None: + if not self._dec_text: self._dec_timer = None + return + old_text: str = self._dec_text.node.text + iter: int + # Get the following display text using our current one. + try: + iter = display.index(old_text) + 1 + # If we don't match any in the display list, we + # can assume we've just started iterating. + except ValueError: + iter = 0 + # Kill the timer if we're at the last iteration. + if iter >= len(display): + self._dec_timer = None + return + self._dec_text.node.text = display[iter] def _update(self) -> None: remaining = int(round(self._respawn_time - bs.time())) @@ -195,10 +208,16 @@ class RespawnIcon: if self._text.node: self._text.node.text = str(remaining) if self._dec_text: + # Display our decimal dots. self._dec_text.node.text = '...' - # Start our decimals timer + # Start the timer to tick down. self._dec_timer = bs.Timer( - 0.25, bs.WeakCall(self._dec_step), repeat=True + 0.25, + bs.WeakCall( + self._dec_step, + ['..','.',''] + ), + repeat=True ) else: self._visible = False From 6ac5959093753c58201c4449ca1c0ad86f9ad836 Mon Sep 17 00:00:00 2001 From: TrialTemp <79161340+3alTemp@users.noreply.github.com> Date: Tue, 5 Mar 2024 03:49:17 -0600 Subject: [PATCH 09/11] ough 2 --- .../ba_data/python/bascenev1lib/actor/respawnicon.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py index 13de4cc7..5b91d4b0 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py @@ -186,16 +186,16 @@ class RespawnIcon: self._dec_timer = None return old_text: str = self._dec_text.node.text - iter: int + iterate: int # Get the following display text using our current one. try: - iter = display.index(old_text) + 1 + iterate = display.index(old_text) + 1 # If we don't match any in the display list, we # can assume we've just started iterating. except ValueError: - iter = 0 + iterate = 0 # Kill the timer if we're at the last iteration. - if iter >= len(display): + if iterate >= len(display): self._dec_timer = None return self._dec_text.node.text = display[iter] From 80a2116ad8f323dc6c0ddcf83226142daabe17b3 Mon Sep 17 00:00:00 2001 From: 3alTemp Date: Tue, 5 Mar 2024 03:59:15 -0600 Subject: [PATCH 10/11] ough?? 3 --- src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py index 5b91d4b0..81383393 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py @@ -198,7 +198,7 @@ class RespawnIcon: if iterate >= len(display): self._dec_timer = None return - self._dec_text.node.text = display[iter] + self._dec_text.node.text = display[iterate] def _update(self) -> None: remaining = int(round(self._respawn_time - bs.time())) From e0505d651ca69be8526d518b4463045cd713c601 Mon Sep 17 00:00:00 2001 From: 3alTemp Date: Tue, 5 Mar 2024 04:05:24 -0600 Subject: [PATCH 11/11] _ --- src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py index 81383393..92d4cc8b 100644 --- a/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py +++ b/src/assets/ba_data/python/bascenev1lib/actor/respawnicon.py @@ -185,7 +185,7 @@ class RespawnIcon: if not self._dec_text: self._dec_timer = None return - old_text: str = self._dec_text.node.text + old_text: bs.Lstr | str = self._dec_text.node.text iterate: int # Get the following display text using our current one. try: