From b459ec7c8a2d9c32d1818dc8c89549c5c6373b34 Mon Sep 17 00:00:00 2001 From: andrejkuroglo8 Date: Sat, 9 May 2026 10:28:37 +0300 Subject: [PATCH 1/5] Added glowing_profiles, Simpleredefiner --- plugins/utilities/glowing_profiles.py | 142 ++++++++++++++++++++++++++ plugins/utilities/simpleredefiner.py | 102 ++++++++++++++++++ 2 files changed, 244 insertions(+) create mode 100644 plugins/utilities/glowing_profiles.py create mode 100644 plugins/utilities/simpleredefiner.py diff --git a/plugins/utilities/glowing_profiles.py b/plugins/utilities/glowing_profiles.py new file mode 100644 index 00000000..bf39f048 --- /dev/null +++ b/plugins/utilities/glowing_profiles.py @@ -0,0 +1,142 @@ +# ba_meta require api 9 +import babase +import _babase +from pathlib import Path +import bauiv1 as bui + +import bascenev1 as bs + +from simpleredefiner import redefine_flag, redefine_class_methods, RedefineFlag + +plugman = dict( + plugin_name="glowing_profiles", + description="This plugin gives your profile glowlight, just like on some servers, but only offline. Dependences: simpleredefiner", + external_url="https://m.youtube.com/watch?v=Jb_dKz99rhY", + authors=[ + {"name": "andrejkuroglo8", "email": "andrejkuroglo8@gmail.com", "discord": "andrewku"}, + ], + version="1.0.0", +) + +file_dependence=Path("simpleredefiner.py") + +def get_locale(*args): + return "Error" + + +@redefine_class_methods(bs.Chooser) +class Chooser: + _redefine_methods = ('_gcinit', '_get_glowing_colors', 'update_from_profile', + '_getname') + + def _gcinit(self): + if hasattr(self, '_gcinit_done'): + return + self.glow_dict = {} + self._markers = ('"', "'", '^', '%', ';', '`') + self._get_glowing_colors() + self._gcinit_done = True + + @redefine_flag(RedefineFlag.REDEFINE) + def _get_glowing_colors(self): + """Search glowing code among profiles.""" + try: + should_del = [] + for i in self._profilenames: + for m in self._markers: + if i.startswith(m + ','): + code = i.split(',') + self.glow_dict[code[0]] = ( + float(code[1]), + float(code[2]), + int(code[3]), + int(code[4])) + # should_del.append(i) + for i in should_del: + self._profilenames.remove(i) + except Exception as err: + print(err) + ba.screenmessage( + get_locale('init_glowing_code_error'), + color=(1, 0, 0), + clients=[self._player.get_input_device().client_id], + transient=True) + + @redefine_flag(RedefineFlag.DECORATE_ADVANCED) + def _getname(self, full=True, old_function=None): + name = old_function(self, full) + for m in self._markers: + name = name.replace(m, '') + return name + + @redefine_flag(RedefineFlag.DECORATE_ADVANCED) + def update_from_profile(self, old_function): + self._gcinit() + from bascenev1 import _profile + try: + self._profilename = self._profilenames[self._profileindex] + character = self._profiles[self._profilename]['character'] + + if self._profilename[0] in self.glow_dict: + if (character not in self._character_names + and character in _ba.app.spaz_appearances): + self._character_names.append(character) + self._character_index = self._character_names.index(character) + + player_glowing_dict = self.glow_dict[self._profilename[0]] + color_marker = player_glowing_dict[0] + color_marker = max(-999.0, min(color_marker, 50.0)) + + highlight_marker = float(player_glowing_dict[1]) + highlight_marker = max(-999.0, min(highlight_marker, 50.0)) + + stabilize_color = int(player_glowing_dict[2]) > 0 + stabilize_highlight = int(player_glowing_dict[3]) > 0 + self._color, self._highlight = \ + _profile.get_player_profile_colors( + self._profilename, + profiles=self._profiles) + + if stabilize_color: + m = max(self._color) + self._color = list(self._color) + for i in (0, 1, 2): + if self._color[i] == m: + self._color[i] = self._color[i] * color_marker + self._color = tuple(self._color) + else: + self._color = ( + self._color[0] * color_marker, + self._color[1] * color_marker, + self._color[2] * color_marker) + + if not stabilize_highlight: + self._highlight = ( + self._highlight[0] * highlight_marker, + self._highlight[1] * highlight_marker, + self._highlight[2] * highlight_marker) + else: + m = max(self._highlight) + self._highlight = list(self._highlight) + for i in (0, 1, 2): + if self._highlight[i] == m: + self._highlight[i] = \ + self._highlight[i] * highlight_marker + self._highlight = tuple(self._highlight) + else: + old_function(self) + except KeyError: + self.character_index = self._random_character_index + self._color = self._random_color + self._highlight = self._random_highlight + + self._update_icon() + self._update_text() + +# ba_meta export babase.Plugin +class Glowing(babase.Plugin): + def __init__(self): + if file_path.exists(): + pass + else: + babase.screenmessage(f"File {file_dependence} not installed. Please, install!") \ No newline at end of file diff --git a/plugins/utilities/simpleredefiner.py b/plugins/utilities/simpleredefiner.py new file mode 100644 index 00000000..3da2982f --- /dev/null +++ b/plugins/utilities/simpleredefiner.py @@ -0,0 +1,102 @@ +# ba_meta require api 9 +from __future__ import annotations + +from typing import TYPE_CHECKING + +from types import FunctionType +import enum +import babase + +if TYPE_CHECKING: + from typing import Type, Callable, Any, Tuple + +plugman = dict( + plugin_name="simpleredefiner", + description="Plugin redefine classes and methods, when it is addressed", + external_url="", + authors=[ + {"name": "andrejkuroglo8", "email": "andrejkuroglo8@gmail.com", "discord": "andrewku"}, + ], + version="1.0.0", +) + +def redefine_method(dst: Tuple[Any, str], src: Tuple[Any, str]) -> None: + if hasattr(getattr(*src), '__redefine_type') and getattr(*src).__redefine_type in ( + RedefineFlag.DECORATE_PRE, RedefineFlag.DECORATE_AFTER, RedefineFlag.DECORATE_ADVANCED): + new = getattr(*src) + old = getattr(*dst) + func: Callable + if getattr(*src).__redefine_type == RedefineFlag.DECORATE_AFTER: + def func(*args, **kwargs): + returned = old(*args, **kwargs) + return new(*args, **kwargs, returned=returned) + elif getattr(*src).__redefine_type == RedefineFlag.DECORATE_PRE: + def func(*args, **kwargs): + new(*args, **kwargs) + return old(*args, **kwargs) + else: + def func(*args, **kwargs): + return new(*args, **kwargs, old_function=old) + + setattr(*dst, func) + else: + setattr(*dst, getattr(*src)) + + # Fucking super()! + # dst.__code__ = CodeType( + # src.__code__.co_argcount, + # src.__code__.co_posonlyargcount, + # src.__code__.co_kwonlyargcount, + # src.__code__.co_nlocals, + # src.__code__.co_stacksize, + # src.__code__.co_flags, + # src.__code__.co_code, + # src.__code__.co_consts, + # src.__code__.co_names, + # src.__code__.co_varnames, + # src.__code__.co_filename, + # dst.__code__.co_name, + # src.__code__.co_firstlineno, + # src.__code__.co_lnotab, + # dst.__code__.co_freevars, + # dst.__code__.co_cellvars) + + +def redefine_class_methods(orig_cls: Type[object]) -> Callable[[Any], None]: + """Returns decorator that redefines all class methods + + Parameters: + orig_cls (Type[object]): class that will redefined""" + + def decorator(cls) -> None: + # for method in filter(lambda x: isinstance(getattr(cls, x), FunctionType), dir(cls)): + for method in cls._redefine_methods: + if hasattr(orig_cls, method): + redefine_method((orig_cls, method), (cls, method)) + else: + setattr(orig_cls, method, getattr(cls, method)) + # setattr(getattr(orig_cls, 'self'), '__class__', getattr(cls, method)) # Fucking super()!!!! + + return decorator + + +class RedefineFlag(enum.Enum): + REDEFINE = 0 + DECORATE_AFTER = 1 + DECORATE_PRE = 2 + DECORATE_ADVANCED = 3 + DECORATE = DECORATE_AFTER + + +def redefine_flag(*flags: RedefineFlag) -> Callable[[Callable], Callable]: + def decorator(func: Callable) -> Callable: + for flag in flags: + if flag in (RedefineFlag.DECORATE_AFTER, RedefineFlag.REDEFINE, RedefineFlag.DECORATE_PRE, + RedefineFlag.DECORATE_ADVANCED): + func.__redefine_type = flag + return func + + return decorator +# ba_meta export babase.Plugin +class Simpleredefiner(babase.Plugin): + pass From 66ccfec2e8182d08f8ff7a2b68ce66c171e3c32e Mon Sep 17 00:00:00 2001 From: andrejkuroglo8 <176418899+andrejkuroglo8@users.noreply.github.com> Date: Sat, 9 May 2026 08:05:19 +0000 Subject: [PATCH 2/5] [ci] apply-plugin-metadata-and-formatting --- plugins/utilities.json | 28 +++++++++++++++++++++++++++ plugins/utilities/glowing_profiles.py | 15 ++++++++------ plugins/utilities/simpleredefiner.py | 5 ++++- 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/plugins/utilities.json b/plugins/utilities.json index 036bc89b..5cc1ca73 100644 --- a/plugins/utilities.json +++ b/plugins/utilities.json @@ -2569,6 +2569,34 @@ "md5sum": "487c0520dc833f15942941e0dbc82f1e" } } + }, + "glowing_profiles": { + "description": "This plugin gives your profile glowlight, just like on some servers, but only offline. Dependences: simpleredefiner", + "external_url": "https://m.youtube.com/watch?v=Jb_dKz99rhY", + "authors": [ + { + "name": "andrejkuroglo8", + "email": "andrejkuroglo8@gmail.com", + "discord": "andrewku" + } + ], + "versions": { + "1.0.0": null + } + }, + "simpleredefiner": { + "description": "Plugin redefine classes and methods, when it is addressed", + "external_url": "", + "authors": [ + { + "name": "andrejkuroglo8", + "email": "andrejkuroglo8@gmail.com", + "discord": "andrewku" + } + ], + "versions": { + "1.0.0": null + } } } } \ No newline at end of file diff --git a/plugins/utilities/glowing_profiles.py b/plugins/utilities/glowing_profiles.py index bf39f048..19038ee9 100644 --- a/plugins/utilities/glowing_profiles.py +++ b/plugins/utilities/glowing_profiles.py @@ -18,7 +18,8 @@ version="1.0.0", ) -file_dependence=Path("simpleredefiner.py") +file_dependence = Path("simpleredefiner.py") + def get_locale(*args): return "Error" @@ -134,9 +135,11 @@ def update_from_profile(self, old_function): self._update_text() # ba_meta export babase.Plugin + + class Glowing(babase.Plugin): - def __init__(self): - if file_path.exists(): - pass - else: - babase.screenmessage(f"File {file_dependence} not installed. Please, install!") \ No newline at end of file + def __init__(self): + if file_path.exists(): + pass + else: + babase.screenmessage(f"File {file_dependence} not installed. Please, install!") diff --git a/plugins/utilities/simpleredefiner.py b/plugins/utilities/simpleredefiner.py index 3da2982f..a5af958d 100644 --- a/plugins/utilities/simpleredefiner.py +++ b/plugins/utilities/simpleredefiner.py @@ -20,6 +20,7 @@ version="1.0.0", ) + def redefine_method(dst: Tuple[Any, str], src: Tuple[Any, str]) -> None: if hasattr(getattr(*src), '__redefine_type') and getattr(*src).__redefine_type in ( RedefineFlag.DECORATE_PRE, RedefineFlag.DECORATE_AFTER, RedefineFlag.DECORATE_ADVANCED): @@ -98,5 +99,7 @@ def decorator(func: Callable) -> Callable: return decorator # ba_meta export babase.Plugin + + class Simpleredefiner(babase.Plugin): - pass + pass From 94682ad41a3328177decfcdaa98b48e20a621c66 Mon Sep 17 00:00:00 2001 From: andrejkuroglo8 <176418899+andrejkuroglo8@users.noreply.github.com> Date: Sat, 9 May 2026 08:05:20 +0000 Subject: [PATCH 3/5] [ci] apply-version-metadata --- plugins/utilities.json | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/plugins/utilities.json b/plugins/utilities.json index 5cc1ca73..08f15bde 100644 --- a/plugins/utilities.json +++ b/plugins/utilities.json @@ -2581,7 +2581,12 @@ } ], "versions": { - "1.0.0": null + "1.0.0": { + "api_version": 9, + "commit_sha": "66ccfec", + "released_on": "09-05-2026", + "md5sum": "faa0c022fb4f73938022e27832100567" + } } }, "simpleredefiner": { @@ -2595,7 +2600,12 @@ } ], "versions": { - "1.0.0": null + "1.0.0": { + "api_version": 9, + "commit_sha": "66ccfec", + "released_on": "09-05-2026", + "md5sum": "4119c3097882cf2470b23f0cdcbef77c" + } } } } From 18123ab8f7567203673043b58837c6abc369284a Mon Sep 17 00:00:00 2001 From: andrejkuroglo8 Date: Sat, 9 May 2026 11:22:08 +0300 Subject: [PATCH 4/5] Update glowing_profiles.py Fixing minor bugs and removing unnecessary modules --- plugins/utilities/glowing_profiles.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/plugins/utilities/glowing_profiles.py b/plugins/utilities/glowing_profiles.py index 19038ee9..34b94f0f 100644 --- a/plugins/utilities/glowing_profiles.py +++ b/plugins/utilities/glowing_profiles.py @@ -2,8 +2,6 @@ import babase import _babase from pathlib import Path -import bauiv1 as bui - import bascenev1 as bs from simpleredefiner import redefine_flag, redefine_class_methods, RedefineFlag @@ -139,7 +137,7 @@ def update_from_profile(self, old_function): class Glowing(babase.Plugin): def __init__(self): - if file_path.exists(): + if file_dependence.exists(): pass else: babase.screenmessage(f"File {file_dependence} not installed. Please, install!") From b6c9c755e5ec477a02d70fb431669918f129f7c8 Mon Sep 17 00:00:00 2001 From: andrejkuroglo8 Date: Sat, 9 May 2026 11:26:00 +0300 Subject: [PATCH 5/5] Update glowing_profiles.py --- plugins/utilities/glowing_profiles.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/utilities/glowing_profiles.py b/plugins/utilities/glowing_profiles.py index 34b94f0f..91502da6 100644 --- a/plugins/utilities/glowing_profiles.py +++ b/plugins/utilities/glowing_profiles.py @@ -13,7 +13,7 @@ authors=[ {"name": "andrejkuroglo8", "email": "andrejkuroglo8@gmail.com", "discord": "andrewku"}, ], - version="1.0.0", + version="1.0.1", ) file_dependence = Path("simpleredefiner.py")