mirror of
https://github.com/bombsquad-community/plugin-manager.git
synced 2026-08-15 13:03:08 +00:00
142 lines
3.3 KiB
Python
142 lines
3.3 KiB
Python
# ba_meta require api 9
|
|
|
|
import os
|
|
import json
|
|
import babase
|
|
import bascenev1 as bs
|
|
|
|
plugman = dict(
|
|
plugin_name="rank_system",
|
|
description="ranks system for servers or for local players",
|
|
external_url="",
|
|
authors=[
|
|
{"name": "ATD", "email": "anasdhaoidi001@gmail.com", "discord": ""},
|
|
],
|
|
version="1.0.0",
|
|
)
|
|
|
|
MODS_DIR = os.path.dirname(__file__)
|
|
STATS_DIR = os.path.join(MODS_DIR, "stats")
|
|
STATS_FILE = os.path.join(STATS_DIR, "ranks.json")
|
|
|
|
|
|
class RankSystem:
|
|
|
|
def __init__(self):
|
|
self.data = {}
|
|
self.load()
|
|
|
|
def load(self):
|
|
if not os.path.exists(STATS_DIR):
|
|
os.makedirs(STATS_DIR)
|
|
|
|
if os.path.exists(STATS_FILE):
|
|
try:
|
|
with open(STATS_FILE, "r") as f:
|
|
self.data = json.load(f)
|
|
except:
|
|
self.data = {}
|
|
|
|
def save(self):
|
|
with open(STATS_FILE, "w") as f:
|
|
json.dump(self.data, f, indent=4)
|
|
|
|
def add_score(self, account_id, score=1):
|
|
if account_id not in self.data:
|
|
self.data[account_id] = {
|
|
"score": 0,
|
|
"rank": 0
|
|
}
|
|
|
|
self.data[account_id]["score"] += score
|
|
self.update_ranks()
|
|
self.save()
|
|
|
|
def update_ranks(self):
|
|
sorted_players = sorted(
|
|
self.data.items(),
|
|
key=lambda x: x[1]["score"],
|
|
reverse=True
|
|
)
|
|
|
|
for i, (aid, p) in enumerate(sorted_players):
|
|
p["rank"] = i + 1
|
|
|
|
def get_rank(self, account_id):
|
|
return self.data.get(account_id, {}).get("rank")
|
|
|
|
|
|
rank_sys = RankSystem()
|
|
|
|
|
|
class RankTag:
|
|
def __init__(self, node, rank):
|
|
|
|
m = bs.newnode(
|
|
"math",
|
|
owner=node,
|
|
attrs={
|
|
"input1": (0, 1.2, 0),
|
|
"operation": "add"
|
|
}
|
|
)
|
|
|
|
node.connectattr("torso_position", m, "input2")
|
|
|
|
if rank == 1:
|
|
text = "1"
|
|
color = (1, 1, 1)
|
|
elif rank == 2:
|
|
text = "2"
|
|
color = (1, 1, 1)
|
|
elif rank == 3:
|
|
text = "3"
|
|
color = (1, 1, 1)
|
|
else:
|
|
text = f"#{rank}"
|
|
color = (1, 1, 1)
|
|
|
|
t = bs.newnode(
|
|
"text",
|
|
owner=node,
|
|
attrs={
|
|
"text": text,
|
|
"in_world": True,
|
|
"color": color,
|
|
"scale": 0.01,
|
|
"h_align": "center"
|
|
}
|
|
)
|
|
|
|
m.connectattr("output", t, "position")
|
|
|
|
|
|
# 🔌 plugin
|
|
# ba_meta export babase.Plugin
|
|
class byATD(babase.Plugin):
|
|
|
|
def on_app_running(self):
|
|
print("Rank System Loaded ")
|
|
|
|
import bascenev1._gameactivity as ga
|
|
|
|
old_spawn = ga.GameActivity.spawn_player_spaz
|
|
|
|
def new_spawn(self, player, *args, **kwargs):
|
|
spaz = old_spawn(self, player, *args, **kwargs)
|
|
|
|
try:
|
|
aid = player.sessionplayer.get_account_id()
|
|
|
|
rank_sys.add_score(aid, 1)
|
|
|
|
rank = rank_sys.get_rank(aid)
|
|
if rank:
|
|
RankTag(spaz.node, rank)
|
|
|
|
except Exception as e:
|
|
print("Rank error:", e)
|
|
|
|
return spaz
|
|
|
|
ga.GameActivity.spawn_player_spaz = new_spawn
|