Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions plugins/utilities.json
Original file line number Diff line number Diff line change
Expand Up @@ -2569,6 +2569,44 @@
"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": {
"api_version": 9,
"commit_sha": "66ccfec",
"released_on": "09-05-2026",
"md5sum": "faa0c022fb4f73938022e27832100567"
}
}
},
"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": {
"api_version": 9,
"commit_sha": "66ccfec",
"released_on": "09-05-2026",
"md5sum": "4119c3097882cf2470b23f0cdcbef77c"
}
}
}
}
}
143 changes: 143 additions & 0 deletions plugins/utilities/glowing_profiles.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
# ba_meta require api 9
import babase
import _babase
from pathlib import Path
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.1",
)

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_dependence.exists():
pass
else:
babase.screenmessage(f"File {file_dependence} not installed. Please, install!")
105 changes: 105 additions & 0 deletions plugins/utilities/simpleredefiner.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
# 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
Loading