mirror of
https://github.com/bombsquad-community/plugin-manager.git
synced 2025-10-08 14:54:36 +00:00
[ci] auto-format
This commit is contained in:
parent
bba1a27837
commit
99611b9ae6
8 changed files with 1960 additions and 1387 deletions
|
|
@ -46,22 +46,25 @@ from bauiv1lib.ingamemenu import InGameMenuWindow as igm
|
|||
from babase import Plugin, InputType as IT
|
||||
from math import sqrt, dist
|
||||
|
||||
|
||||
class Camera:
|
||||
__doc__ = 'A simple camera.'
|
||||
__ins__ = None
|
||||
__lst__ = None
|
||||
__yes__ = False
|
||||
|
||||
def __init__(s) -> None:
|
||||
c = s.__class__
|
||||
if c.__yes__:
|
||||
note('Stopped camera!',True)
|
||||
note('Stopped camera!', True)
|
||||
c.__ins__.done(talk=False)
|
||||
return
|
||||
c.__ins__ = s
|
||||
c.__yes__ = True
|
||||
if c.__lst__: SCM(False)
|
||||
if c.__lst__:
|
||||
SCM(False)
|
||||
s.stage = 0
|
||||
p = (0,1,0)
|
||||
p = (0, 1, 0)
|
||||
s.tex = 'achievementCrossHair'
|
||||
s.kids = []
|
||||
s.okay = []
|
||||
|
|
@ -94,7 +97,7 @@ class Camera:
|
|||
'is_area_of_interest': True
|
||||
}
|
||||
)
|
||||
tick(0.15, animate(n,'mesh_scale',{0:2,0.1:0.5}).delete)
|
||||
tick(0.15, animate(n, 'mesh_scale', {0: 2, 0.1: 0.5}).delete)
|
||||
gbs('powerup01').play(position=p)
|
||||
s.step = 0.01
|
||||
s.node = n
|
||||
|
|
@ -104,7 +107,7 @@ class Camera:
|
|||
s.overlay = Overlay()
|
||||
LN({
|
||||
'UP_DOWN': lambda a: s.manage(a),
|
||||
'LEFT_RIGHT': lambda a: s.manage(a,1),
|
||||
'LEFT_RIGHT': lambda a: s.manage(a, 1),
|
||||
'PICK_UP_PRESS': lambda: s.start(2),
|
||||
'JUMP_PRESS': lambda: s.start(0),
|
||||
'PICK_UP_RELEASE': lambda: s.stop(2),
|
||||
|
|
@ -116,58 +119,61 @@ class Camera:
|
|||
})
|
||||
s.move()
|
||||
"""Write a tip"""
|
||||
def tip(s,t,p,h='left',b=True):
|
||||
def tip(s, t, p, h='left', b=True):
|
||||
n = newnode(
|
||||
'text',
|
||||
attrs={
|
||||
'in_world': True,
|
||||
'scale': 0.01,
|
||||
'flatness': 1,
|
||||
'color': (1,1,1),
|
||||
'color': (1, 1, 1),
|
||||
'shadow': 1.0,
|
||||
'position': p,
|
||||
'text': t,
|
||||
'h_align': h
|
||||
}
|
||||
)
|
||||
if b: s.kids.append(n)
|
||||
if b:
|
||||
s.kids.append(n)
|
||||
return n
|
||||
"""Create a dot"""
|
||||
def dot(s,p,b=True,tex='black'):
|
||||
def dot(s, p, b=True, tex='black'):
|
||||
n = newnode(
|
||||
'prop',
|
||||
delegate=s,
|
||||
attrs={
|
||||
'mesh': getmesh('tnt'),
|
||||
'color_texture': gbt(tex),
|
||||
'body': 'crate',
|
||||
'mesh_scale': 0.1,
|
||||
'position': p,
|
||||
'gravity_scale': 0,
|
||||
'materials': [s.M],
|
||||
}
|
||||
attrs={
|
||||
'mesh': getmesh('tnt'),
|
||||
'color_texture': gbt(tex),
|
||||
'body': 'crate',
|
||||
'mesh_scale': 0.1,
|
||||
'position': p,
|
||||
'gravity_scale': 0,
|
||||
'materials': [s.M],
|
||||
}
|
||||
)
|
||||
if b: s.kids.append(n)
|
||||
if b:
|
||||
s.kids.append(n)
|
||||
return n
|
||||
"""Draw a line"""
|
||||
def line(s,p1,p2,i=2,tex='black'):
|
||||
x1,y1,z1 = p1
|
||||
x2,y2,z2 = p2
|
||||
n = dist(p1,p2)*i
|
||||
for i in range(1,int(n+1)):
|
||||
def line(s, p1, p2, i=2, tex='black'):
|
||||
x1, y1, z1 = p1
|
||||
x2, y2, z2 = p2
|
||||
n = dist(p1, p2)*i
|
||||
for i in range(1, int(n+1)):
|
||||
t = i/n
|
||||
x = x1+t*(x2-x1)
|
||||
y = y1+t*(y2-y1)
|
||||
z = z1+t*(z2-z1)
|
||||
s.kids.append(s.dot((x,y,z),tex=tex))
|
||||
s.kids.append(s.dot((x, y, z), tex=tex))
|
||||
"""Mark"""
|
||||
def mark(s):
|
||||
if not s.stage:
|
||||
s.stage = 1
|
||||
p = s.getpos()
|
||||
s.p1 = (p[0]-0.01,p[1],p[2])
|
||||
s.okay.append(s.dot(s.p1,b=False))
|
||||
s.okay.append(s.tip(f'Camera position\n{tuple([round(i,2) for i in s.p1])}',s.p1,b=False))
|
||||
s.p1 = (p[0]-0.01, p[1], p[2])
|
||||
s.okay.append(s.dot(s.p1, b=False))
|
||||
s.okay.append(
|
||||
s.tip(f'Camera position\n{tuple([round(i, 2) for i in s.p1])}', s.p1, b=False))
|
||||
else:
|
||||
[i.delete() for i in s.kids]
|
||||
s.kids.clear()
|
||||
|
|
@ -201,16 +207,17 @@ class Camera:
|
|||
s.line(s.p1, bl)
|
||||
|
||||
m = 4
|
||||
j = {'tex':'crossOutMask'}
|
||||
j = {'tex': 'crossOutMask'}
|
||||
s.line(tr, tl, m, **j)
|
||||
s.line(tl, bl, m, **j)
|
||||
s.line(bl, br, m, **j)
|
||||
s.line(br, tr, m, **j)
|
||||
|
||||
s.tip(f'Your display\n{r[0]}x{r[1]} px\n{tuple([round(i,2) for i in p2])}',tr,'right')
|
||||
s.tip(
|
||||
f'Your display\n{r[0]}x{r[1]} px\n{tuple([round(i, 2) for i in p2])}', tr, 'right')
|
||||
s.stage = 2
|
||||
s.overlay.press(3)
|
||||
tick(0.25, animate(s.node,'mesh_scale',{0:0.5,0.1:0.2,0.2:0.5}).delete)
|
||||
tick(0.25, animate(s.node, 'mesh_scale', {0: 0.5, 0.1: 0.2, 0.2: 0.5}).delete)
|
||||
gbs('gunCocking').play(position=s.node.position)
|
||||
"""Handle events"""
|
||||
def handlemessage(s, m):
|
||||
|
|
@ -237,117 +244,132 @@ class Camera:
|
|||
def reset(s):
|
||||
s.__class__.__yes__ = False
|
||||
me = getme()
|
||||
if not me: return
|
||||
if not me:
|
||||
return
|
||||
me.resetinput()
|
||||
with ga().context: me.actor.connect_controls_to_player()
|
||||
with ga().context:
|
||||
me.actor.connect_controls_to_player()
|
||||
[i.delete() for i in (s.kids+s.okay)]
|
||||
"""Manage movement"""
|
||||
def manage(s,a,lr=0):
|
||||
if lr: s.llr = a; return
|
||||
def manage(s, a, lr=0):
|
||||
if lr:
|
||||
s.llr = a
|
||||
return
|
||||
s.lud = a
|
||||
"""Move"""
|
||||
def move(s):
|
||||
m = getme(1)
|
||||
if (not m) or m._dead: s.destroy()
|
||||
try: p = s.getpos()
|
||||
if (not m) or m._dead:
|
||||
s.destroy()
|
||||
try:
|
||||
p = s.getpos()
|
||||
except:
|
||||
s.overlay.destroy()
|
||||
return
|
||||
s.setpos((p[0]+s.llr*s.step,p[1],p[2]-s.lud*s.step))
|
||||
s.overlay.up(*p,s.llr,s.lud)
|
||||
s.setpos((p[0]+s.llr*s.step, p[1], p[2]-s.lud*s.step))
|
||||
s.overlay.up(*p, s.llr, s.lud)
|
||||
SCT(*p)
|
||||
teck(s.wait,s.move)
|
||||
teck(s.wait, s.move)
|
||||
"""Start elevating"""
|
||||
def start(s,i):
|
||||
def start(s, i):
|
||||
s.overlay.press(i)
|
||||
s.mode = i
|
||||
s.loop(i)
|
||||
"""Keep elevating"""
|
||||
def loop(s,i):
|
||||
if s.mode != i: return
|
||||
try: p = list(s.node.position)
|
||||
except: return
|
||||
def loop(s, i):
|
||||
if s.mode != i:
|
||||
return
|
||||
try:
|
||||
p = list(s.node.position)
|
||||
except:
|
||||
return
|
||||
p[1] += s.step if i else -s.step
|
||||
s.node.position = tuple(p)
|
||||
teck(s.wait, lambda: s.loop(i))
|
||||
"""Stop elevating"""
|
||||
def stop(s,i):
|
||||
def stop(s, i):
|
||||
s.overlay.release(i)
|
||||
s.mode = 4
|
||||
"""Get position"""
|
||||
def getpos(s):
|
||||
return s.node.position
|
||||
"""Set position"""
|
||||
def setpos(s,p):
|
||||
def setpos(s, p):
|
||||
s.node.position = p
|
||||
"""Done"""
|
||||
def done(s,talk=True):
|
||||
def done(s, talk=True):
|
||||
s.overlay.press(1)
|
||||
s.overlay.destroy()
|
||||
try: p = s.node.position
|
||||
except: return
|
||||
try:
|
||||
p = s.node.position
|
||||
except:
|
||||
return
|
||||
with ga().context:
|
||||
gbs('laser').play(position=p)
|
||||
tick(0.2,animate(s.node,'mesh_scale',{0:0.5,0.08:1,0.2:0}).delete)
|
||||
tick(0.2,s.node.delete)
|
||||
tick(0.2, animate(s.node, 'mesh_scale', {0: 0.5, 0.08: 1, 0.2: 0}).delete)
|
||||
tick(0.2, s.node.delete)
|
||||
s.reset()
|
||||
if s.stage > 1 and talk:
|
||||
SCM(True)
|
||||
SCP(*s.p1)
|
||||
SCT(*s.p2)
|
||||
var('lp1',s.p1)
|
||||
var('lp2',s.p2)
|
||||
var('lp1', s.p1)
|
||||
var('lp2', s.p2)
|
||||
nice('Applied!')
|
||||
elif talk:
|
||||
note('Incomplete camera setup\nNo changes applied.')
|
||||
if s.__class__.__ins__ == s: s.__class__.__ins__ = None
|
||||
if s.__class__.__ins__ == s:
|
||||
s.__class__.__ins__ = None
|
||||
|
||||
|
||||
"""Controls overlay"""
|
||||
|
||||
|
||||
class Overlay:
|
||||
__lst__ = None
|
||||
"""Place nodes"""
|
||||
def __init__(s):
|
||||
s.__class__.__lst__ = str(ga())
|
||||
s.colors = [
|
||||
[(0.2,0.6,0.2),(0.4,1,0.4)],
|
||||
[(0.6,0,0),(1,0,0)],
|
||||
[(0.2,0.6,0.6),(0.4,1,1)],
|
||||
[(0.6,0.6,0.2),(1,1,0.4)],
|
||||
[(0.3,0.23,0.5),(0.2,0.13,0.3)]
|
||||
[(0.2, 0.6, 0.2), (0.4, 1, 0.4)],
|
||||
[(0.6, 0, 0), (1, 0, 0)],
|
||||
[(0.2, 0.6, 0.6), (0.4, 1, 1)],
|
||||
[(0.6, 0.6, 0.2), (1, 1, 0.4)],
|
||||
[(0.3, 0.23, 0.5), (0.2, 0.13, 0.3)]
|
||||
]
|
||||
s.pics = []
|
||||
s.texts = []
|
||||
s.pos = []
|
||||
s.nub = []
|
||||
s.old = [0,0,0]
|
||||
s.old = [0, 0, 0]
|
||||
s.dead = False
|
||||
with ga().context:
|
||||
for i in range(4):
|
||||
j = ['Jump','Bomb','PickUp','Punch'][i]
|
||||
k = [600,650,600,550][i]
|
||||
l = [170,220,270,220][i]
|
||||
j = ['Jump', 'Bomb', 'PickUp', 'Punch'][i]
|
||||
k = [600, 650, 600, 550][i]
|
||||
l = [170, 220, 270, 220][i]
|
||||
c = s.colors[i][0]
|
||||
n = newnode(
|
||||
'image',
|
||||
attrs={
|
||||
'texture': gbt('button'+j),
|
||||
'absolute_scale': True,
|
||||
'position': (k,l),
|
||||
'scale': (60,60),
|
||||
'position': (k, l),
|
||||
'scale': (60, 60),
|
||||
'color': c
|
||||
}
|
||||
)
|
||||
s.pics.append(n)
|
||||
j = ['Down','Done','Up','Mark'][i]
|
||||
k = [600,680,600,515][i]
|
||||
l = [115,220,325,220][i]
|
||||
h = ['center','left','center','right'][i]
|
||||
v = ['bottom','center','top','center'][i]
|
||||
j = ['Down', 'Done', 'Up', 'Mark'][i]
|
||||
k = [600, 680, 600, 515][i]
|
||||
l = [115, 220, 325, 220][i]
|
||||
h = ['center', 'left', 'center', 'right'][i]
|
||||
v = ['bottom', 'center', 'top', 'center'][i]
|
||||
n = newnode(
|
||||
'text',
|
||||
attrs={
|
||||
'text': j,
|
||||
'position': (k,l),
|
||||
'position': (k, l),
|
||||
'color': c,
|
||||
'h_align': h,
|
||||
'v_align': v
|
||||
|
|
@ -355,92 +377,103 @@ class Overlay:
|
|||
)
|
||||
s.texts.append(n)
|
||||
for i in range(3):
|
||||
c = s.colors[[1,0,2][i]][0]
|
||||
c = s.colors[[1, 0, 2][i]][0]
|
||||
n = newnode(
|
||||
'text',
|
||||
attrs={
|
||||
'text': '0',
|
||||
'position': (640,155-30*i),
|
||||
'position': (640, 155-30*i),
|
||||
'color': c,
|
||||
'h_align': 'left'
|
||||
}
|
||||
)
|
||||
s.pos.append(n)
|
||||
s.np = (790,140)
|
||||
for i in [0,1]:
|
||||
j = [110,60][i]
|
||||
s.np = (790, 140)
|
||||
for i in [0, 1]:
|
||||
j = [110, 60][i]
|
||||
n = newnode(
|
||||
'image',
|
||||
attrs={
|
||||
'texture': gbt('nub'),
|
||||
'absolute_scale': True,
|
||||
'position': s.np,
|
||||
'scale': (j,j),
|
||||
'scale': (j, j),
|
||||
'color': s.colors[4][i]
|
||||
}
|
||||
)
|
||||
s.nub.append(n)
|
||||
s.fade()
|
||||
"""Color overlays"""
|
||||
def set(s,i,c):
|
||||
def set(s, i, c):
|
||||
s.pics[i].color = s.texts[i].color = c
|
||||
"""Color position"""
|
||||
def pset(s,i,c):
|
||||
def pset(s, i, c):
|
||||
s.pos[i].color = c
|
||||
"""Simulate pressed"""
|
||||
def press(s,i):
|
||||
s.set(i,s.colors[i][1])
|
||||
def press(s, i):
|
||||
s.set(i, s.colors[i][1])
|
||||
s.pics[i].opacity = 1.0
|
||||
"""Simulate released"""
|
||||
def release(s,i):
|
||||
s.set(i,s.colors[i][0])
|
||||
def release(s, i):
|
||||
s.set(i, s.colors[i][0])
|
||||
s.pics[i].opacity = 0.7
|
||||
"""Get all nodes"""
|
||||
def nodes(s):
|
||||
return s.pics+s.texts+s.pos+s.nub
|
||||
"""Update position"""
|
||||
def up(s,x,y,z,lr,ud):
|
||||
new = [x,y,z]
|
||||
def up(s, x, y, z, lr, ud):
|
||||
new = [x, y, z]
|
||||
for i in range(3):
|
||||
c = s.colors[[1,0,2][i]]
|
||||
if s.old[i] == new[i]: s.pset(i,c[0]); continue
|
||||
c = s.colors[[1, 0, 2][i]]
|
||||
if s.old[i] == new[i]:
|
||||
s.pset(i, c[0])
|
||||
continue
|
||||
t = s.pos[i]
|
||||
t.text = str(round(new[i],5))
|
||||
s.pset(i,c[1])
|
||||
t.text = str(round(new[i], 5))
|
||||
s.pset(i, c[1])
|
||||
s.old = new
|
||||
[setattr(s.nub[i],'opacity',[[0.5,0.2],[0.7,0.3]][bool(lr or ud)][i]) for i in [0,1]]
|
||||
[setattr(s.nub[i], 'opacity', [[0.5, 0.2], [0.7, 0.3]][bool(lr or ud)][i]) for i in [0, 1]]
|
||||
p = s.np
|
||||
m = sqrt(lr**2+ud**2) or 1
|
||||
d = 25*min(sqrt(lr**2+ud**2),1)
|
||||
d = 25*min(sqrt(lr**2+ud**2), 1)
|
||||
lr /= m
|
||||
ud /= m
|
||||
s.nub[1].position = (p[0]+lr*d,p[1]+ud*d)
|
||||
s.nub[1].position = (p[0]+lr*d, p[1]+ud*d)
|
||||
"""Fade"""
|
||||
def fade(s,i=0):
|
||||
if str(ga()) != s.__class__.__lst__: return
|
||||
def fade(s, i=0):
|
||||
if str(ga()) != s.__class__.__lst__:
|
||||
return
|
||||
mem = s.nodes()
|
||||
[tick(1, animate(n,'opacity',{0:i,0.5:abs(i-0.7)}).delete) for n in mem]
|
||||
[tick(1, animate(n, 'opacity', {0: i, 0.5: abs(i-0.7)}).delete) for n in mem]
|
||||
"""Destroy overlay"""
|
||||
def destroy(s):
|
||||
if s.dead: return
|
||||
if s.dead:
|
||||
return
|
||||
s.dead = True
|
||||
with ga().context:
|
||||
tick(0.2,lambda:s.fade(0.7))
|
||||
tick(2,lambda: [n.delete() for n in s.nodes()])
|
||||
tick(0.2, lambda: s.fade(0.7))
|
||||
tick(2, lambda: [n.delete() for n in s.nodes()])
|
||||
|
||||
|
||||
# Mini tools
|
||||
note = lambda t, b=False: (push(t,color=(1,1,0)),gs('block').play() if b else None)
|
||||
nice = lambda t: (push(t,color=(0,1,0)),gs('dingSmallHigh').play())
|
||||
SCM = lambda b: (setattr(Camera,'__lst__',b),SSCM(b))
|
||||
scale = lambda v,s: (v[0]*s,v[1]*s,v[2]*s)
|
||||
cross = lambda a,b: (a[1]*b[2]-a[2]*b[1],a[2]*b[0]-a[0]*b[2],a[0]*b[1]-a[1]*b[0])
|
||||
sub = lambda a,b: (a[0]-b[0],a[1]-b[1],a[2]-b[2])
|
||||
add = lambda a,b: (a[0]+b[0],a[1]+b[1],a[2]+b[2])
|
||||
def note(t, b=False): return (push(t, color=(1, 1, 0)), gs('block').play() if b else None)
|
||||
def nice(t): return (push(t, color=(0, 1, 0)), gs('dingSmallHigh').play())
|
||||
def SCM(b): return (setattr(Camera, '__lst__', b), SSCM(b))
|
||||
def scale(v, s): return (v[0]*s, v[1]*s, v[2]*s)
|
||||
def cross(a, b): return (a[1]*b[2]-a[2]*b[1], a[2]*b[0]-a[0]*b[2], a[0]*b[1]-a[1]*b[0])
|
||||
def sub(a, b): return (a[0]-b[0], a[1]-b[1], a[2]-b[2])
|
||||
def add(a, b): return (a[0]+b[0], a[1]+b[1], a[2]+b[2])
|
||||
|
||||
|
||||
def getme(actor=0):
|
||||
for p in ga().players:
|
||||
if p.sessionplayer.inputdevice.client_id == -1:
|
||||
return p.actor if actor else p
|
||||
def LN(d): me = getme(); [me.assigninput(getattr(IT,k), d[k]) for k in d]
|
||||
|
||||
|
||||
def LN(d): me = getme(); [me.assigninput(getattr(IT, k), d[k]) for k in d]
|
||||
|
||||
|
||||
def RESUME():
|
||||
u = APP.ui_v1
|
||||
c = APP.classic
|
||||
|
|
@ -448,70 +481,80 @@ def RESUME():
|
|||
u.clear_main_window()
|
||||
[z() for z in c.main_menu_resume_callbacks]
|
||||
c.main_menu_resume_callbacks.clear()
|
||||
|
||||
|
||||
def norm(v):
|
||||
a,b,c = v
|
||||
a, b, c = v
|
||||
l = sqrt(a**2+b**2+c**2)
|
||||
return (0, 0, 0) if l == 0 else (a/l,b/l,c/l)
|
||||
def var(s,v=None):
|
||||
return (0, 0, 0) if l == 0 else (a/l, b/l, c/l)
|
||||
|
||||
|
||||
def var(s, v=None):
|
||||
c = APP.config
|
||||
s = 'cam_'+s
|
||||
if v is None: return c.get(s,v)
|
||||
if v is None:
|
||||
return c.get(s, v)
|
||||
c[s] = v
|
||||
c.commit()
|
||||
|
||||
# brobord collide grass
|
||||
# ba_meta require api 9
|
||||
# ba_meta export babase.Plugin
|
||||
|
||||
|
||||
class byBordd(Plugin):
|
||||
has_settings_ui = lambda s: True
|
||||
show_settings_ui = lambda s, src: s.ui(source=src)
|
||||
col = (0.18,0.18,0.18)
|
||||
def has_settings_ui(s): return True
|
||||
def show_settings_ui(s, src): return s.ui(source=src)
|
||||
col = (0.18, 0.18, 0.18)
|
||||
|
||||
def __init__(s):
|
||||
o = igm._refresh_in_game
|
||||
def e(f,*a,**k):
|
||||
r = o(f,*a,**k)
|
||||
|
||||
def e(f, *a, **k):
|
||||
r = o(f, *a, **k)
|
||||
b = bw(
|
||||
label='',
|
||||
size=(90,40),
|
||||
size=(90, 40),
|
||||
button_type='square',
|
||||
parent=f._root_widget,
|
||||
color=(0.18,0.18,0.18),
|
||||
position=(f._width-20,0),
|
||||
color=(0.18, 0.18, 0.18),
|
||||
position=(f._width-20, 0),
|
||||
)
|
||||
bw(b,on_activate_call=lambda:s.ui(source=b,main=True))
|
||||
bw(b, on_activate_call=lambda: s.ui(source=b, main=True))
|
||||
iw(
|
||||
size=(40,40),
|
||||
size=(40, 40),
|
||||
texture=gt('tv'),
|
||||
parent=f._root_widget,
|
||||
position=(f._width-20,5)
|
||||
position=(f._width-20, 5)
|
||||
)
|
||||
tw(
|
||||
maxwidth=50,
|
||||
text='Camera',
|
||||
h_align='left',
|
||||
parent=f._root_widget,
|
||||
position=(f._width+15,0)
|
||||
position=(f._width+15, 0)
|
||||
)
|
||||
return r
|
||||
igm._refresh_in_game = e
|
||||
"""The UI"""
|
||||
def ui(s,source=None,main=False):
|
||||
def ui(s, source=None, main=False):
|
||||
s.main = main
|
||||
off = source.get_screen_space_center() if source else (0,0)
|
||||
off = source.get_screen_space_center() if source else (0, 0)
|
||||
w = cw(
|
||||
color=s.col,
|
||||
size=(350,305),
|
||||
size=(350, 305),
|
||||
stack_offset=off,
|
||||
transition='in_scale',
|
||||
parent=gsw('overlay_stack'),
|
||||
scale_origin_stack_offset=off
|
||||
)
|
||||
s.back = lambda b=True: (cw(w,transition=['out_right','out_scale'][bool(source) and b]),gs('swish').play() if b else None)
|
||||
cw(w,on_outside_click_call=s.back)
|
||||
s.back = lambda b=True: (
|
||||
cw(w, transition=['out_right', 'out_scale'][bool(source) and b]), gs('swish').play() if b else None)
|
||||
cw(w, on_outside_click_call=s.back)
|
||||
b = Camera.__yes__
|
||||
t = [
|
||||
('Camera is ready!',(0,1,1)),
|
||||
('Camera is running!',(0,1,0)),
|
||||
('Camera is ready!', (0, 1, 1)),
|
||||
('Camera is running!', (0, 1, 0)),
|
||||
][b]
|
||||
tw(
|
||||
parent=w,
|
||||
|
|
@ -519,59 +562,68 @@ class byBordd(Plugin):
|
|||
scale=1.5,
|
||||
color=t[1],
|
||||
h_align='center',
|
||||
position=(155,250)
|
||||
position=(155, 250)
|
||||
)
|
||||
for i in range(4):
|
||||
j = [
|
||||
('3D Camera mapper',s.start),
|
||||
('Last mapped config',s.load),
|
||||
('Last dev command',s.copy),
|
||||
('Reset all settings',s.reset)
|
||||
('3D Camera mapper', s.start),
|
||||
('Last mapped config', s.load),
|
||||
('Last dev command', s.copy),
|
||||
('Reset all settings', s.reset)
|
||||
][i]
|
||||
tw(
|
||||
parent=w,
|
||||
text=j[0],
|
||||
maxwidth=195,
|
||||
position=(20,30+55*i)
|
||||
position=(20, 30+55*i)
|
||||
)
|
||||
k = [
|
||||
(['Start','Stop'][b],'cursor'),
|
||||
('Load','achievementOutline'),
|
||||
('Copy','file'),
|
||||
('Reset','replayIcon')
|
||||
(['Start', 'Stop'][b], 'cursor'),
|
||||
('Load', 'achievementOutline'),
|
||||
('Copy', 'file'),
|
||||
('Reset', 'replayIcon')
|
||||
][i]
|
||||
bw(
|
||||
parent=w,
|
||||
label=k[0],
|
||||
color=s.col,
|
||||
size=(120,50),
|
||||
size=(120, 50),
|
||||
icon=gt(k[1]),
|
||||
enable_sound=not i,
|
||||
textcolor=(1,1,1),
|
||||
textcolor=(1, 1, 1),
|
||||
button_type='square',
|
||||
on_activate_call=j[1],
|
||||
position=(220,20+55*i)
|
||||
position=(220, 20+55*i)
|
||||
)
|
||||
"""Gather last"""
|
||||
def gather(s):
|
||||
return var('lp1'),var('lp2')
|
||||
return var('lp1'), var('lp2')
|
||||
"""Reset"""
|
||||
def reset(s):
|
||||
SCM(False)
|
||||
nice('Resetored original settings!')
|
||||
"""Copy last"""
|
||||
def copy(s):
|
||||
if not CIS(): note('Unsupported!',True); return
|
||||
if not CIS():
|
||||
note('Unsupported!', True)
|
||||
return
|
||||
g = s.gather()
|
||||
if not g[1]: note('Apply something first!',True); return
|
||||
g = [tuple([round(i,2) for i in j]) for j in g]
|
||||
COPY(f'from _babase import set_camera_manual as SCM, set_camera_target as SCT, set_camera_position as SCP; SCM(True); SCP(*{g[0]}); SCT(*{g[1]})')
|
||||
if not g[1]:
|
||||
note('Apply something first!', True)
|
||||
return
|
||||
g = [tuple([round(i, 2) for i in j]) for j in g]
|
||||
COPY(
|
||||
f'from _babase import set_camera_manual as SCM, set_camera_target as SCT, set_camera_position as SCP; SCM(True); SCP(*{g[0]}); SCT(*{g[1]})')
|
||||
nice('Copied command!\nPaste it in dev console anytime to load config!')
|
||||
"""Load last"""
|
||||
def load(s):
|
||||
g = s.gather()
|
||||
if not g[1]: note('Apply something first!',True); return
|
||||
if Camera.__yes__: note('Stop camera first!',True); return
|
||||
if not g[1]:
|
||||
note('Apply something first!', True)
|
||||
return
|
||||
if Camera.__yes__:
|
||||
note('Stop camera first!', True)
|
||||
return
|
||||
SCM(True)
|
||||
SCP(*g[0])
|
||||
SCT(*g[1])
|
||||
|
|
@ -579,8 +631,13 @@ class byBordd(Plugin):
|
|||
"""Start camera"""
|
||||
def start(s):
|
||||
a = ga()
|
||||
if not a: note('Only mapping requires you to be the host!\nYou still can load previous config though',True); return
|
||||
if not getme(): note('Join the game first!',True); return
|
||||
if not a:
|
||||
note('Only mapping requires you to be the host!\nYou still can load previous config though', True)
|
||||
return
|
||||
if not getme():
|
||||
note('Join the game first!', True)
|
||||
return
|
||||
s.back(False)
|
||||
RESUME() if s.main else None
|
||||
with a.context: Camera()
|
||||
with a.context:
|
||||
Camera()
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -44,26 +44,28 @@ from bascenev1 import (
|
|||
get_game_roster as GGR
|
||||
)
|
||||
|
||||
|
||||
class Finder:
|
||||
COL1 = (0,0.3,0.3)
|
||||
COL2 = (0,0.55,0.55)
|
||||
COL3 = (0,0.7,0.7)
|
||||
COL4 = (0,1,1)
|
||||
COL5 = (1,1,0)
|
||||
COL1 = (0, 0.3, 0.3)
|
||||
COL2 = (0, 0.55, 0.55)
|
||||
COL3 = (0, 0.7, 0.7)
|
||||
COL4 = (0, 1, 1)
|
||||
COL5 = (1, 1, 0)
|
||||
MAX = 0.3
|
||||
TOP = 15
|
||||
VER = '1.0'
|
||||
MEM = []
|
||||
BST = []
|
||||
SL = None
|
||||
def __init__(s,src):
|
||||
|
||||
def __init__(s, src):
|
||||
s.thr = []
|
||||
s.ikids = []
|
||||
s.busy = False
|
||||
s.s1 = s.snd('powerup01')
|
||||
c = s.__class__
|
||||
# parent
|
||||
z = (460,400)
|
||||
z = (460, 400)
|
||||
s.p = cw(
|
||||
scale_origin_stack_offset=src.get_screen_space_center(),
|
||||
size=z,
|
||||
|
|
@ -80,12 +82,12 @@ class Finder:
|
|||
parent=s.p,
|
||||
text='Fetch Servers',
|
||||
color=s.COL4,
|
||||
position=(19,359)
|
||||
position=(19, 359)
|
||||
)
|
||||
bw(
|
||||
parent=s.p,
|
||||
position=(360,343),
|
||||
size=(80,39),
|
||||
position=(360, 343),
|
||||
size=(80, 39),
|
||||
label='Fetch',
|
||||
color=s.COL2,
|
||||
textcolor=s.COL4,
|
||||
|
|
@ -96,14 +98,14 @@ class Finder:
|
|||
text='Fetches, pings, and sorts public servers.',
|
||||
color=s.COL3,
|
||||
scale=0.8,
|
||||
position=(15,330),
|
||||
position=(15, 330),
|
||||
maxwidth=320
|
||||
)
|
||||
# separator
|
||||
iw(
|
||||
parent=s.p,
|
||||
size=(429,1),
|
||||
position=(17,330),
|
||||
size=(429, 1),
|
||||
position=(17, 330),
|
||||
texture=gt('white'),
|
||||
color=s.COL2
|
||||
)
|
||||
|
|
@ -112,12 +114,12 @@ class Finder:
|
|||
parent=s.p,
|
||||
text='Cycle Servers',
|
||||
color=s.COL4,
|
||||
position=(19,294)
|
||||
position=(19, 294)
|
||||
)
|
||||
bw(
|
||||
parent=s.p,
|
||||
position=(360,278),
|
||||
size=(80,39),
|
||||
position=(360, 278),
|
||||
size=(80, 39),
|
||||
label='Cycle',
|
||||
color=s.COL2,
|
||||
textcolor=s.COL4,
|
||||
|
|
@ -128,15 +130,15 @@ class Finder:
|
|||
text='Cycles through best servers and saves their players.',
|
||||
color=s.COL3,
|
||||
scale=0.8,
|
||||
position=(15,265),
|
||||
position=(15, 265),
|
||||
maxwidth=320,
|
||||
v_align='center'
|
||||
)
|
||||
# separator
|
||||
iw(
|
||||
parent=s.p,
|
||||
size=(429,1),
|
||||
position=(17,265),
|
||||
size=(429, 1),
|
||||
position=(17, 265),
|
||||
texture=gt('white'),
|
||||
color=s.COL2
|
||||
)
|
||||
|
|
@ -145,12 +147,12 @@ class Finder:
|
|||
parent=s.p,
|
||||
text='Server Cycle Limit',
|
||||
color=s.COL4,
|
||||
position=(19,230)
|
||||
position=(19, 230)
|
||||
)
|
||||
s.top = tw(
|
||||
parent=s.p,
|
||||
position=(398,228),
|
||||
size=(80,50),
|
||||
position=(398, 228),
|
||||
size=(80, 50),
|
||||
text=str(c.TOP),
|
||||
color=s.COL4,
|
||||
editable=True,
|
||||
|
|
@ -167,76 +169,78 @@ class Finder:
|
|||
text='Maximum number of servers to cycle.',
|
||||
color=s.COL3,
|
||||
scale=0.8,
|
||||
position=(15,201),
|
||||
position=(15, 201),
|
||||
maxwidth=320
|
||||
)
|
||||
# separator
|
||||
iw(
|
||||
parent=s.p,
|
||||
size=(429,1),
|
||||
position=(17,200),
|
||||
size=(429, 1),
|
||||
position=(17, 200),
|
||||
texture=gt('white'),
|
||||
color=s.COL2
|
||||
)
|
||||
# players
|
||||
pl = s.plys()
|
||||
sy = max(len(pl)*30,140)
|
||||
sy = max(len(pl)*30, 140)
|
||||
p1 = sw(
|
||||
parent=s.p,
|
||||
position=(20,18),
|
||||
size=(205,172),
|
||||
position=(20, 18),
|
||||
size=(205, 172),
|
||||
border_opacity=0.4
|
||||
)
|
||||
p2 = ocw(
|
||||
parent=p1,
|
||||
size=(205,sy),
|
||||
size=(205, sy),
|
||||
background=False
|
||||
)
|
||||
0 if pl else tw(
|
||||
parent=s.p,
|
||||
position=(90,100),
|
||||
position=(90, 100),
|
||||
text='Cycle some servers\nto collect players',
|
||||
color=s.COL4,
|
||||
maxwidth=175,
|
||||
h_align='center'
|
||||
)
|
||||
s.kids = []
|
||||
for _,g in enumerate(pl):
|
||||
p,a = g
|
||||
for _, g in enumerate(pl):
|
||||
p, a = g
|
||||
s.kids.append(tw(
|
||||
parent=p2,
|
||||
size=(200,30),
|
||||
size=(200, 30),
|
||||
selectable=True,
|
||||
click_activate=True,
|
||||
color=s.COL3,
|
||||
text=p,
|
||||
position=(0,sy-30-30*_),
|
||||
position=(0, sy-30-30*_),
|
||||
maxwidth=175,
|
||||
on_activate_call=Call(s.hl,_,p),
|
||||
on_activate_call=Call(s.hl, _, p),
|
||||
v_align='center'
|
||||
))
|
||||
# info
|
||||
iw(
|
||||
parent=s.p,
|
||||
position=(235,18),
|
||||
size=(205,172),
|
||||
position=(235, 18),
|
||||
size=(205, 172),
|
||||
texture=gt('scrollWidget'),
|
||||
mesh_transparent=gm('softEdgeOutside'),
|
||||
opacity=0.4
|
||||
)
|
||||
s.tip = tw(
|
||||
parent=s.p,
|
||||
position=(310,98),
|
||||
position=(310, 98),
|
||||
text='Select something to\nview server info',
|
||||
color=s.COL4,
|
||||
maxwidth=170,
|
||||
h_align='center'
|
||||
) if c.SL is None else 0
|
||||
def hl(s,_,p):
|
||||
[tw(t,color=s.COL3) for t in s.kids]
|
||||
tw(s.kids[_],color=s.COL4)
|
||||
|
||||
def hl(s, _, p):
|
||||
[tw(t, color=s.COL3) for t in s.kids]
|
||||
tw(s.kids[_], color=s.COL4)
|
||||
s.info(p)
|
||||
def info(s,p):
|
||||
|
||||
def info(s, p):
|
||||
[_.delete() for _ in s.ikids]
|
||||
s.ikids.clear()
|
||||
s.tip and s.tip.delete()
|
||||
|
|
@ -250,61 +254,69 @@ class Finder:
|
|||
t = str(i['nap'[_]])
|
||||
s.ikids.append(tw(
|
||||
parent=s.p,
|
||||
position=(250,155-40*_),
|
||||
position=(250, 155-40*_),
|
||||
h_align='center',
|
||||
v_align='center',
|
||||
maxwidth=175,
|
||||
text=t,
|
||||
color=s.COL4,
|
||||
size=(175,30),
|
||||
size=(175, 30),
|
||||
selectable=True,
|
||||
click_activate=True,
|
||||
on_activate_call=Call(s.copy,t)
|
||||
on_activate_call=Call(s.copy, t)
|
||||
))
|
||||
s.ikids.append(bw(
|
||||
parent=s.p,
|
||||
position=(253,30),
|
||||
size=(166,30),
|
||||
position=(253, 30),
|
||||
size=(166, 30),
|
||||
label='Connect',
|
||||
color=s.COL2,
|
||||
textcolor=s.COL4,
|
||||
oac=Call(CON,i['a'],i['p'],False)
|
||||
oac=Call(CON, i['a'], i['p'], False)
|
||||
))
|
||||
def copy(s,t):
|
||||
s.ding(1,1)
|
||||
|
||||
def copy(s, t):
|
||||
s.ding(1, 1)
|
||||
TIP('Copied to clipboard!')
|
||||
COPY(t)
|
||||
|
||||
def plys(s):
|
||||
z = []
|
||||
me = app.plus.get_v1_account_name()
|
||||
me = [me,'\ue063'+me]
|
||||
me = [me, '\ue063'+me]
|
||||
for _ in s.__class__.BST:
|
||||
a = _['a']
|
||||
if (r:=_.get('roster',{})):
|
||||
if (r := _.get('roster', {})):
|
||||
for p in r:
|
||||
ds = p['display_string']
|
||||
0 if ds in me else z.append((ds,a))
|
||||
return sorted(z,key=lambda _: _[0].startswith('\ue030Server'))
|
||||
def snd(s,t):
|
||||
0 if ds in me else z.append((ds, a))
|
||||
return sorted(z, key=lambda _: _[0].startswith('\ue030Server'))
|
||||
|
||||
def snd(s, t):
|
||||
l = gs(t)
|
||||
l.play()
|
||||
teck(uf(0.14,0.18),l.stop)
|
||||
teck(uf(0.14, 0.18), l.stop)
|
||||
return l
|
||||
|
||||
def bye(s):
|
||||
s.s1.stop()
|
||||
ocw(s.p,transition='out_scale')
|
||||
ocw(s.p, transition='out_scale')
|
||||
l = s.snd('laser')
|
||||
f = lambda: teck(0.01,f) if s.p else l.stop()
|
||||
def f(): return teck(0.01, f) if s.p else l.stop()
|
||||
f()
|
||||
def ding(s,i,j):
|
||||
a = ['Small','']
|
||||
x,y = a[i],a[j]
|
||||
|
||||
def ding(s, i, j):
|
||||
a = ['Small', '']
|
||||
x, y = a[i], a[j]
|
||||
s.snd('ding'+x)
|
||||
teck(0.1,gs('ding'+y).play)
|
||||
teck(0.1, gs('ding'+y).play)
|
||||
|
||||
def fresh(s):
|
||||
if s.busy: BTW("Still busy!"); return
|
||||
if s.busy:
|
||||
BTW("Still busy!")
|
||||
return
|
||||
TIP('Fetching servers...')
|
||||
s.ding(1,0)
|
||||
s.ding(1, 0)
|
||||
s.busy = True
|
||||
p = app.plus
|
||||
p.add_v1_account_transaction(
|
||||
|
|
@ -316,15 +328,17 @@ class Finder:
|
|||
callback=s.kang,
|
||||
)
|
||||
p.run_v1_account_transactions()
|
||||
def kang(s,r):
|
||||
|
||||
def kang(s, r):
|
||||
c = s.__class__
|
||||
c.MEM = r['l']
|
||||
s.thr = []
|
||||
for _ in s.__class__.MEM:
|
||||
t = Thread(target=Call(s.ping,_))
|
||||
t = Thread(target=Call(s.ping, _))
|
||||
s.thr.append(t)
|
||||
t.start()
|
||||
teck(s.MAX*4,s.join)
|
||||
teck(s.MAX*4, s.join)
|
||||
|
||||
def join(s):
|
||||
c = s.__class__
|
||||
[t.join() for t in s.thr]
|
||||
|
|
@ -333,10 +347,13 @@ class Finder:
|
|||
c.MEM.sort(key=lambda _: _['ping'])
|
||||
s.thr.clear()
|
||||
TIP(f'Loaded {len(c.MEM)} servers!')
|
||||
s.ding(0,1)
|
||||
s.ding(0, 1)
|
||||
s.busy = False
|
||||
|
||||
def find(s):
|
||||
if s.busy: BTW("Still busy!"); return
|
||||
if s.busy:
|
||||
BTW("Still busy!")
|
||||
return
|
||||
c = s.__class__
|
||||
if not c.MEM:
|
||||
BTW('Fetch some servers first!')
|
||||
|
|
@ -347,44 +364,55 @@ class Finder:
|
|||
return
|
||||
top = int(t)
|
||||
if not (0 < top < len(c.MEM)):
|
||||
BTW('Cycle count is too '+['big','small'][top<=0]+'!')
|
||||
BTW('Cycle count is too '+['big', 'small'][top <= 0]+'!')
|
||||
return
|
||||
c.TOP = top
|
||||
s.ding(1,0)
|
||||
s.ding(1, 0)
|
||||
TIP('Starting cycle...')
|
||||
s.busy = True
|
||||
s.ci = s.lr = 0
|
||||
c.BST = c.MEM[:top]
|
||||
s.cycle()
|
||||
|
||||
def cycle(s):
|
||||
_ = s.__class__.BST[s.ci]
|
||||
s.ca = _['a']
|
||||
CON(s.ca,_['p'],False)
|
||||
CON(s.ca, _['p'], False)
|
||||
s.wait()
|
||||
def wait(s,i=5):
|
||||
|
||||
def wait(s, i=5):
|
||||
r = GGR()
|
||||
if (r != s.lr) and r: s.__class__.BST[s.ci]['roster'] = s.lr = r; return s.next()
|
||||
if not i: s.__class__.BST[s.ci]['roster'] = []; return s.next()
|
||||
teck(0.1,Call(s.wait,i-1))
|
||||
if (r != s.lr) and r:
|
||||
s.__class__.BST[s.ci]['roster'] = s.lr = r
|
||||
return s.next()
|
||||
if not i:
|
||||
s.__class__.BST[s.ci]['roster'] = []
|
||||
return s.next()
|
||||
teck(0.1, Call(s.wait, i-1))
|
||||
|
||||
def next(s):
|
||||
s.ci += 1
|
||||
if s.ci >= len(s.__class__.BST):
|
||||
BYE()
|
||||
teck(0.5,s.yay)
|
||||
teck(0.5, s.yay)
|
||||
return
|
||||
s.cycle()
|
||||
|
||||
def yay(s):
|
||||
TIP('Cycle finished!')
|
||||
s.ding(0,1)
|
||||
s.ding(0, 1)
|
||||
s.busy = False
|
||||
zw('squad_button').activate()
|
||||
teck(0.3,byBordd.up)
|
||||
def ping(s,_):
|
||||
teck(0.3, byBordd.up)
|
||||
|
||||
def ping(s, _):
|
||||
sock = ping = None
|
||||
a,p = _['a'],_['p']
|
||||
sock = socket(IPT(a),SOCK_DGRAM)
|
||||
try: sock.connect((a,p))
|
||||
except: ping = None
|
||||
a, p = _['a'], _['p']
|
||||
sock = socket(IPT(a), SOCK_DGRAM)
|
||||
try:
|
||||
sock.connect((a, p))
|
||||
except:
|
||||
ping = None
|
||||
else:
|
||||
st = time()
|
||||
sock.settimeout(s.MAX)
|
||||
|
|
@ -393,7 +421,8 @@ class Finder:
|
|||
try:
|
||||
sock.send(b'\x0b')
|
||||
r = sock.recv(10)
|
||||
except: r = None
|
||||
except:
|
||||
r = None
|
||||
if r == b'\x0c':
|
||||
yes = True
|
||||
break
|
||||
|
|
@ -403,28 +432,29 @@ class Finder:
|
|||
_['ping'] = ping
|
||||
sock.close()
|
||||
|
||||
|
||||
# Patches
|
||||
bw = lambda *,oac=None,**k: obw(
|
||||
bw = lambda *, oac=None, **k: obw(
|
||||
texture=gt('white'),
|
||||
on_activate_call=oac,
|
||||
enable_sound=False,
|
||||
**k
|
||||
)
|
||||
cw = lambda *,size=None,oac=None,**k: (p:=ocw(
|
||||
cw = lambda *, size=None, oac=None, **k: (p := ocw(
|
||||
parent=zw('overlay_stack'),
|
||||
background=False,
|
||||
transition='in_scale',
|
||||
size=size,
|
||||
on_outside_click_call=oac,
|
||||
**k
|
||||
)) and (p,iw(
|
||||
)) and (p, iw(
|
||||
parent=p,
|
||||
texture=gt('softRect'),
|
||||
size=(size[0]*1.2,size[1]*1.2),
|
||||
position=(-size[0]*0.1,-size[1]*0.1),
|
||||
size=(size[0]*1.2, size[1]*1.2),
|
||||
position=(-size[0]*0.1, -size[1]*0.1),
|
||||
opacity=0.55,
|
||||
color=(0,0,0)
|
||||
),iw(
|
||||
color=(0, 0, 0)
|
||||
), iw(
|
||||
parent=p,
|
||||
size=size,
|
||||
texture=gt('white'),
|
||||
|
|
@ -432,40 +462,47 @@ cw = lambda *,size=None,oac=None,**k: (p:=ocw(
|
|||
))
|
||||
|
||||
# Global
|
||||
BTW = lambda t: (push(t,color=(1,1,0)),gs('block').play())
|
||||
TIP = lambda t: push(t,Finder.COL3)
|
||||
|
||||
|
||||
def BTW(t): return (push(t, color=(1, 1, 0)), gs('block').play())
|
||||
def TIP(t): return push(t, Finder.COL3)
|
||||
|
||||
# ba_meta require api 9
|
||||
# ba_meta export babase.Plugin
|
||||
|
||||
|
||||
class byBordd(Plugin):
|
||||
BTN = None
|
||||
|
||||
@classmethod
|
||||
def up(c):
|
||||
c.BTN.activate() if c.BTN.exists() else None
|
||||
|
||||
def __init__(s):
|
||||
from bauiv1lib import party
|
||||
p = party.PartyWindow
|
||||
a = '__init__'
|
||||
o = getattr(p,a)
|
||||
setattr(p,a,lambda z,*a,**k:(o(z,*a,**k),s.make(z))[0])
|
||||
def make(s,z):
|
||||
sz = (80,30)
|
||||
o = getattr(p, a)
|
||||
setattr(p, a, lambda z, *a, **k: (o(z, *a, **k), s.make(z))[0])
|
||||
|
||||
def make(s, z):
|
||||
sz = (80, 30)
|
||||
p = z._root_widget
|
||||
x,y = (-60,z._height-45)
|
||||
x, y = (-60, z._height-45)
|
||||
iw(
|
||||
parent=p,
|
||||
size=(sz[0]*1.34,sz[1]*1.4),
|
||||
position=(x-sz[0]*0.14,y-sz[1]*0.20),
|
||||
size=(sz[0]*1.34, sz[1]*1.4),
|
||||
position=(x-sz[0]*0.14, y-sz[1]*0.20),
|
||||
texture=gt('softRect'),
|
||||
opacity=0.2,
|
||||
color=(0,0,0)
|
||||
color=(0, 0, 0)
|
||||
)
|
||||
s.b = s.__class__.BTN = bw(
|
||||
parent=p,
|
||||
position=(x,y),
|
||||
position=(x, y),
|
||||
label='Finder',
|
||||
color=Finder.COL1,
|
||||
textcolor=Finder.COL3,
|
||||
size=sz,
|
||||
oac=lambda:Finder(s.b)
|
||||
oac=lambda: Finder(s.b)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -16,12 +16,15 @@ from bascenev1 import (
|
|||
newnode
|
||||
)
|
||||
|
||||
|
||||
class Path:
|
||||
def __init__(s,node,holder=None):
|
||||
if node.body == 'crate': return
|
||||
s.node,s.kids = node,[]
|
||||
def __init__(s, node, holder=None):
|
||||
if node.body == 'crate':
|
||||
return
|
||||
s.node, s.kids = node, []
|
||||
s.me = holder
|
||||
s.spy()
|
||||
|
||||
def spy(s):
|
||||
n = s.node
|
||||
if not n.exists():
|
||||
|
|
@ -29,13 +32,14 @@ class Path:
|
|||
s.kids.clear()
|
||||
return
|
||||
|
||||
[_.delete() for _ in s.kids]; s.kids.clear()
|
||||
[_.delete() for _ in s.kids]
|
||||
s.kids.clear()
|
||||
|
||||
ip = n.position
|
||||
iv = n.velocity
|
||||
if s.me and s.me.hold_node == n:
|
||||
mv = s.me.velocity
|
||||
iv = (iv[0]+mv[0],iv[1]+mv[1],iv[2]+mv[2])
|
||||
iv = (iv[0]+mv[0], iv[1]+mv[1], iv[2]+mv[2])
|
||||
|
||||
dots = 200
|
||||
ti = 1.2
|
||||
|
|
@ -48,17 +52,17 @@ class Path:
|
|||
py = ip[1] + iv[1] * t + 0.5 * -24 * t**2
|
||||
pz = ip[2] + iv[2] * t
|
||||
|
||||
if py <=0:
|
||||
if py <= 0:
|
||||
l = newnode(
|
||||
'locator',
|
||||
owner=n,
|
||||
attrs={
|
||||
'shape': 'circleOutline',
|
||||
'size': [1],
|
||||
'color': (1,1,0),
|
||||
'color': (1, 1, 0),
|
||||
'draw_beauty': False,
|
||||
'additive': True,
|
||||
'position':(px,py,pz)
|
||||
'position': (px, py, pz)
|
||||
}
|
||||
)
|
||||
s.kids.append(l)
|
||||
|
|
@ -67,13 +71,13 @@ class Path:
|
|||
'text',
|
||||
owner=n,
|
||||
attrs={
|
||||
'text':'.',
|
||||
'scale':0.02,
|
||||
'position':(px, py, pz),
|
||||
'flatness':1,
|
||||
'in_world':True,
|
||||
'color':(1-i*4/dots,0,0),
|
||||
'shadow':0
|
||||
'text': '.',
|
||||
'scale': 0.02,
|
||||
'position': (px, py, pz),
|
||||
'flatness': 1,
|
||||
'in_world': True,
|
||||
'color': (1-i*4/dots, 0, 0),
|
||||
'shadow': 0
|
||||
}
|
||||
)
|
||||
s.kids.append(dot_node)
|
||||
|
|
@ -81,8 +85,10 @@ class Path:
|
|||
# brobord collide grass
|
||||
# ba_meta require api 9
|
||||
# ba_meta export babase.Plugin
|
||||
|
||||
|
||||
class byBordd(Plugin):
|
||||
def __init__(s):
|
||||
_ = __import__('bascenev1lib').actor.bomb.Bomb
|
||||
o = _.__init__
|
||||
_.__init__ = lambda z,*a,**k: (o(z,*a,**k),Path(z.node))[0]
|
||||
_.__init__ = lambda z, *a, **k: (o(z, *a, **k), Path(z.node))[0]
|
||||
|
|
|
|||
|
|
@ -69,47 +69,54 @@ from ast import (
|
|||
Name
|
||||
)
|
||||
|
||||
|
||||
class PlugTools(TAB):
|
||||
KEY = 'PT_BY'
|
||||
|
||||
def __init__(s):
|
||||
s.bys = META()
|
||||
s.bad = []
|
||||
s.logs = 'No errors'
|
||||
s.mem = {_:MT(_) for _ in s.bys}
|
||||
s.mem = {_: MT(_) for _ in s.bys}
|
||||
s.eye = look()
|
||||
s.e = False
|
||||
s.spy()
|
||||
|
||||
def spy(s):
|
||||
b = 0
|
||||
for _ in s.bys.copy():
|
||||
if not exists(PAT(_)):
|
||||
s.bys.remove(_)
|
||||
push(f'Plugin {_} suddenly disappeared!\nAnd so, was removed from list.',color=(1,1,0))
|
||||
push(f'Plugin {_} suddenly disappeared!\nAnd so, was removed from list.', color=(1, 1, 0))
|
||||
gs('block').play()
|
||||
s.eye = look()
|
||||
if s.hl() == _: s.hl(None)
|
||||
if s.hl() == _:
|
||||
s.hl(None)
|
||||
b = 1
|
||||
sp = app.plugins.plugin_specs.get(_,0)
|
||||
if not sp: continue
|
||||
sp = app.plugins.plugin_specs.get(_, 0)
|
||||
if not sp:
|
||||
continue
|
||||
p = app.plugins
|
||||
if getattr(sp,'enabled',False):
|
||||
if getattr(sp, 'enabled', False):
|
||||
o = s.sp.plugin
|
||||
if o in p.active_plugins:
|
||||
p.active_plugins.remove(o)
|
||||
if o in p.plugin_specs:
|
||||
p.plugin_specs.pop(o)
|
||||
del s.sp.plugin,o
|
||||
del s.sp.plugin, o
|
||||
collect()
|
||||
try: reload(modules[NAM(_,0)])
|
||||
except: pass
|
||||
try:
|
||||
reload(modules[NAM(_, 0)])
|
||||
except:
|
||||
pass
|
||||
continue
|
||||
if MT(_) != s.mem[_] and _ not in s.bad:
|
||||
s.bad.append(_)
|
||||
push(f'Plugin {_} was modified!\nSee if you want to take action.',color=(1,1,0))
|
||||
push(f'Plugin {_} was modified!\nSee if you want to take action.', color=(1, 1, 0))
|
||||
gs('dingSmall').play()
|
||||
b = 1
|
||||
if hasattr(s,'sp'):
|
||||
e = getattr(s.sp,'enabled',False)
|
||||
if hasattr(s, 'sp'):
|
||||
e = getattr(s.sp, 'enabled', False)
|
||||
if e != s.e:
|
||||
s.e = e
|
||||
b = 1
|
||||
|
|
@ -120,7 +127,8 @@ class PlugTools(TAB):
|
|||
nu = []
|
||||
if df:
|
||||
for dd in df:
|
||||
try: _ = kang(dd)
|
||||
try:
|
||||
_ = kang(dd)
|
||||
except:
|
||||
eye.remove(dd)
|
||||
continue
|
||||
|
|
@ -132,12 +140,16 @@ class PlugTools(TAB):
|
|||
b = 1
|
||||
if nu:
|
||||
l = len(nu)
|
||||
push(f"Found {l} new plugin{['s',''][l==1]}:\n{', '.join(nu)}\nSee what to do with {['it','them'][l!=1]}",color=(1,1,0))
|
||||
push(f"Found {l} new plugin{['s', ''][l == 1]}:\n{', '.join(nu)}\nSee what to do with {['it', 'them'][l != 1]}", color=(
|
||||
1, 1, 0))
|
||||
gs('dingSmallHigh').play()
|
||||
if b:
|
||||
try: s.request_refresh()
|
||||
except RuntimeError: pass
|
||||
teck(0.1,s.spy)
|
||||
try:
|
||||
s.request_refresh()
|
||||
except RuntimeError:
|
||||
pass
|
||||
teck(0.1, s.spy)
|
||||
|
||||
@override
|
||||
def refresh(s):
|
||||
# Preload
|
||||
|
|
@ -146,14 +158,14 @@ class PlugTools(TAB):
|
|||
by = None
|
||||
s.hl(None)
|
||||
s.by = by
|
||||
s.sp = app.plugins.plugin_specs.get(by,0) if by else 0
|
||||
s.i = getattr(s,'i',0 if by is None else s.bys.index(by)//10)
|
||||
s.sp = app.plugins.plugin_specs.get(by, 0) if by else 0
|
||||
s.i = getattr(s, 'i', 0 if by is None else s.bys.index(by)//10)
|
||||
# UI
|
||||
w = s.width
|
||||
x = -w/2
|
||||
z = x+w
|
||||
# Bools
|
||||
e = s.e = getattr(s.sp,'enabled',False)
|
||||
e = s.e = getattr(s.sp, 'enabled', False)
|
||||
m = by in s.bad
|
||||
d = by is None
|
||||
# Buttons
|
||||
|
|
@ -162,23 +174,23 @@ class PlugTools(TAB):
|
|||
z -= sx
|
||||
s.button(
|
||||
'Metadata',
|
||||
pos=(z,50),
|
||||
size=(mx,43),
|
||||
pos=(z, 50),
|
||||
size=(mx, 43),
|
||||
call=s.metadata,
|
||||
disabled=d
|
||||
)
|
||||
s.button(
|
||||
['Load','Reload'][e],
|
||||
pos=(z,5),
|
||||
size=(mx,43),
|
||||
['Load', 'Reload'][e],
|
||||
pos=(z, 5),
|
||||
size=(mx, 43),
|
||||
call=s._load,
|
||||
disabled=d
|
||||
)
|
||||
# Separator
|
||||
s.button(
|
||||
'',
|
||||
pos=(z-(w*0.006),5),
|
||||
size=(2,90)
|
||||
pos=(z-(w*0.006), 5),
|
||||
size=(2, 90)
|
||||
)
|
||||
# Plugin info
|
||||
sx = w*0.1
|
||||
|
|
@ -189,28 +201,28 @@ class PlugTools(TAB):
|
|||
mx = sx*0.9
|
||||
s.text(
|
||||
t,
|
||||
pos=(az,80),
|
||||
scale=1 if tw<mx else mx/tw,
|
||||
pos=(az, 80),
|
||||
scale=1 if tw < mx else mx/tw,
|
||||
)
|
||||
t = 'State' if d else ['Disabled','Enabled'][e]
|
||||
t = 'State' if d else ['Disabled', 'Enabled'][e]
|
||||
tw = GSW(t)
|
||||
s.text(
|
||||
t,
|
||||
pos=(az,50),
|
||||
scale=1 if tw<mx else mx/tw,
|
||||
pos=(az, 50),
|
||||
scale=1 if tw < mx else mx/tw,
|
||||
)
|
||||
t = 'Purity' if d else ['Original','Modified'][m]
|
||||
t = 'Purity' if d else ['Original', 'Modified'][m]
|
||||
tw = GSW(t)
|
||||
s.text(
|
||||
t,
|
||||
pos=(az,20),
|
||||
scale=1 if tw<mx else mx/tw,
|
||||
pos=(az, 20),
|
||||
scale=1 if tw < mx else mx/tw,
|
||||
)
|
||||
# Separator
|
||||
s.button(
|
||||
'',
|
||||
pos=(z-(w*0.0075),5),
|
||||
size=(2,90)
|
||||
pos=(z-(w*0.0075), 5),
|
||||
size=(2, 90)
|
||||
)
|
||||
# Next
|
||||
sx = w*0.03
|
||||
|
|
@ -218,8 +230,8 @@ class PlugTools(TAB):
|
|||
z -= sx
|
||||
s.button(
|
||||
cs(sc.RIGHT_ARROW),
|
||||
pos=(z,5),
|
||||
size=(mx,90),
|
||||
pos=(z, 5),
|
||||
size=(mx, 90),
|
||||
call=s.next,
|
||||
disabled=(s.i+1)*10 > len(s.bys)
|
||||
)
|
||||
|
|
@ -231,16 +243,17 @@ class PlugTools(TAB):
|
|||
for i in range(5):
|
||||
for j in range(2):
|
||||
k = j*5+i+s.i*10
|
||||
if k >= len(s.bys): break
|
||||
if k >= len(s.bys):
|
||||
break
|
||||
t = s.bys[k]
|
||||
tw = GSW(t)
|
||||
s.button(
|
||||
t,
|
||||
size=(mx,43),
|
||||
pos=(z+sx*i,50-45*j),
|
||||
label_scale=1 if tw<zx else zx/tw,
|
||||
call=Call(s.hl,t),
|
||||
style=[['blue','blue_bright'],['purple','purple_bright']][t in s.bad][t==by]
|
||||
size=(mx, 43),
|
||||
pos=(z+sx*i, 50-45*j),
|
||||
label_scale=1 if tw < zx else zx/tw,
|
||||
call=Call(s.hl, t),
|
||||
style=[['blue', 'blue_bright'], ['purple', 'purple_bright']][t in s.bad][t == by]
|
||||
)
|
||||
# Prev
|
||||
sx = w*0.03
|
||||
|
|
@ -248,32 +261,35 @@ class PlugTools(TAB):
|
|||
z -= sx*0.7
|
||||
s.button(
|
||||
cs(sc.LEFT_ARROW),
|
||||
pos=(z,5),
|
||||
size=(mx,90),
|
||||
pos=(z, 5),
|
||||
size=(mx, 90),
|
||||
call=s.prev,
|
||||
disabled=s.i==0
|
||||
disabled=s.i == 0
|
||||
)
|
||||
if s.height <= 100: return
|
||||
if s.height <= 100:
|
||||
return
|
||||
# Expanded logs
|
||||
t = s.logs
|
||||
h = 25
|
||||
pos = (x+10,s.height)
|
||||
pos = (x+10, s.height)
|
||||
z = len(t)
|
||||
p = list(pos)
|
||||
m = max(t.replace('\\n','') or [''],key=GSW)
|
||||
m = max(t.replace('\\n', '') or [''], key=GSW)
|
||||
l = GSW(str(m))/1.2
|
||||
ln = t.split('\\n')
|
||||
mm = max(ln,key=GSW)
|
||||
mm = max(ln, key=GSW)
|
||||
sk = 0.8
|
||||
ml = (s.height-100) * 0.04
|
||||
ww = (l*sk)*len(mm)
|
||||
sk = sk if ww<s.width else (s.width*0.98/ww)*sk
|
||||
sk = sk if ww < s.width else (s.width*0.98/ww)*sk
|
||||
zz = len(ln)
|
||||
sk = sk if zz<=ml else (ml/zz)*sk
|
||||
sk = sk if zz <= ml else (ml/zz)*sk
|
||||
xf = 0
|
||||
for i in range(z):
|
||||
p[0] += [l*sk,0][i==0]
|
||||
if xf: xf = 0; continue
|
||||
p[0] += [l*sk, 0][i == 0]
|
||||
if xf:
|
||||
xf = 0
|
||||
continue
|
||||
j = t[i]
|
||||
k = t[i+1] if (i+1) < z else j
|
||||
if j == '\\' and k == 'n':
|
||||
|
|
@ -288,31 +304,36 @@ class PlugTools(TAB):
|
|||
v_align='top',
|
||||
scale=sk
|
||||
)
|
||||
def hl(s,i=None):
|
||||
|
||||
def hl(s, i=None):
|
||||
i and deek()
|
||||
c = app.config
|
||||
if i is None: return c.get(s.KEY,None)
|
||||
if i is None:
|
||||
return c.get(s.KEY, None)
|
||||
c[s.KEY] = i
|
||||
c.commit()
|
||||
s.request_refresh()
|
||||
|
||||
def _load(s):
|
||||
h = ['load','reload'][s.e]
|
||||
ex,er = s.load()
|
||||
h = ['load', 'reload'][s.e]
|
||||
ex, er = s.load()
|
||||
if ex:
|
||||
k = f': {ex}' if str(ex).strip() else ''
|
||||
j = f'Error {h}ing {s.by}'
|
||||
push(f'{j}{k}\nExpand dev console to see more.\nTraceback dumped to terminal too.',color=(1,0,0))
|
||||
push(f'{j}{k}\nExpand dev console to see more.\nTraceback dumped to terminal too.', color=(1, 0, 0))
|
||||
gs('error').play()
|
||||
m = j+':\n'+er
|
||||
print('[PlugTools] '+m)
|
||||
s.logs = m.replace('\n','\\n')
|
||||
s.logs = m.replace('\n', '\\n')
|
||||
s.request_refresh()
|
||||
return
|
||||
s.logs = 'No errors'
|
||||
if ex is False: return
|
||||
push(h.title()+'ed '+s.by,color=(0,1,0))
|
||||
if ex is False:
|
||||
return
|
||||
push(h.title()+'ed '+s.by, color=(0, 1, 0))
|
||||
gs('gunCocking').play()
|
||||
s.request_refresh()
|
||||
|
||||
def load(s):
|
||||
_ = s.by
|
||||
if _ in s.bad:
|
||||
|
|
@ -320,31 +341,41 @@ class PlugTools(TAB):
|
|||
s.mem[_] = MT(_)
|
||||
p = app.plugins
|
||||
if s.e:
|
||||
if hasattr(s.sp,'plugin'):
|
||||
if hasattr(s.sp, 'plugin'):
|
||||
o = s.sp.plugin
|
||||
if o in p.active_plugins:
|
||||
p.active_plugins.remove(o)
|
||||
del s.sp.plugin
|
||||
collect()
|
||||
try: m = reload(modules[NAM(_,0)])
|
||||
try:
|
||||
m = reload(modules[NAM(_, 0)])
|
||||
except KeyError:
|
||||
gs('block').play()
|
||||
push(f"{s.by} is malformed!\nAre you sure there's no errors?",color=(1,1,0))
|
||||
return (False,0)
|
||||
except Exception as ex: return (ex,ERR())
|
||||
else: m = __import__(NAM(_,0))
|
||||
try: cls = getattr(m,_.split('.',1)[1])
|
||||
except Exception as ex: return (ex,ERR())
|
||||
try: ins = cls()
|
||||
except Exception as ex: return (ex,ERR())
|
||||
try: ins.on_app_running()
|
||||
except Exception as ex: return (ex,ERR())
|
||||
s.sp = PluginSpec(class_path=_,loadable=True)
|
||||
push(f"{s.by} is malformed!\nAre you sure there's no errors?", color=(1, 1, 0))
|
||||
return (False, 0)
|
||||
except Exception as ex:
|
||||
return (ex, ERR())
|
||||
else:
|
||||
m = __import__(NAM(_, 0))
|
||||
try:
|
||||
cls = getattr(m, _.split('.', 1)[1])
|
||||
except Exception as ex:
|
||||
return (ex, ERR())
|
||||
try:
|
||||
ins = cls()
|
||||
except Exception as ex:
|
||||
return (ex, ERR())
|
||||
try:
|
||||
ins.on_app_running()
|
||||
except Exception as ex:
|
||||
return (ex, ERR())
|
||||
s.sp = PluginSpec(class_path=_, loadable=True)
|
||||
s.sp.enabled = True
|
||||
s.sp.plugin = ins
|
||||
p.plugin_specs[_] = s.sp
|
||||
p.active_plugins.append(ins)
|
||||
return (0,0)
|
||||
return (0, 0)
|
||||
|
||||
def metadata(s):
|
||||
f = PAT(s.sp.class_path)
|
||||
info = []
|
||||
|
|
@ -355,7 +386,7 @@ class PlugTools(TAB):
|
|||
try:
|
||||
with open(f, 'r', encoding='utf-8', errors='ignore') as file:
|
||||
lines = file.readlines()
|
||||
content = "".join(lines) # Read entire content for AST parsing and char count
|
||||
content = "".join(lines) # Read entire content for AST parsing and char count
|
||||
line_count = len(lines)
|
||||
char_count = len(content)
|
||||
|
||||
|
|
@ -370,13 +401,13 @@ class PlugTools(TAB):
|
|||
blank_lines = 0
|
||||
|
||||
try:
|
||||
tree = parse(content) # Use parse directly
|
||||
for node in walk(tree): # Use walk directly
|
||||
if isinstance(node, FunctionDef): # Use FunctionDef directly
|
||||
tree = parse(content) # Use parse directly
|
||||
for node in walk(tree): # Use walk directly
|
||||
if isinstance(node, FunctionDef): # Use FunctionDef directly
|
||||
function_count += 1
|
||||
elif isinstance(node, ClassDef): # Use ClassDef directly
|
||||
elif isinstance(node, ClassDef): # Use ClassDef directly
|
||||
class_count += 1
|
||||
elif isinstance(node, (Import, ImportFrom)): # Use Import, ImportFrom directly
|
||||
elif isinstance(node, (Import, ImportFrom)): # Use Import, ImportFrom directly
|
||||
import_statement_count += 1
|
||||
# Iterate through physical lines for comments and blank lines
|
||||
for line in lines:
|
||||
|
|
@ -409,21 +440,30 @@ class PlugTools(TAB):
|
|||
info.append("File Exists: No")
|
||||
push('\n'.join(info))
|
||||
gs('powerup01').play()
|
||||
|
||||
def next(s):
|
||||
deek()
|
||||
s.i += 1
|
||||
s.request_refresh()
|
||||
|
||||
def prev(s):
|
||||
deek()
|
||||
s.i -= 1
|
||||
s.request_refresh()
|
||||
|
||||
MT = lambda _: stat(PAT(_))
|
||||
GSW = lambda s: sw(s,suppress_warning=True)
|
||||
NAM = lambda _,py=1: _.split('.',1)[0]+['','.py'][py]
|
||||
PAT = lambda _: join(ROOT,NAM(_))
|
||||
|
||||
def MT(_): return stat(PAT(_))
|
||||
def GSW(s): return sw(s, suppress_warning=True)
|
||||
|
||||
|
||||
def NAM(_, py=1): return _.split('.', 1)[0]+['', '.py'][py]
|
||||
def PAT(_): return join(ROOT, NAM(_))
|
||||
|
||||
|
||||
ROOT = env()['python_directory_user']
|
||||
META = lambda: app.meta.scanresults.exports_by_name('babase.Plugin')
|
||||
def META(): return app.meta.scanresults.exports_by_name('babase.Plugin')
|
||||
|
||||
|
||||
def look():
|
||||
python_files = []
|
||||
try:
|
||||
|
|
@ -437,6 +477,8 @@ def look():
|
|||
except PermissionError:
|
||||
pass
|
||||
return python_files
|
||||
|
||||
|
||||
def kang(file_path):
|
||||
with open(file_path, 'r', encoding='utf-8') as f:
|
||||
source_code = f.read()
|
||||
|
|
@ -460,16 +502,20 @@ def kang(file_path):
|
|||
(isinstance(base, Attribute) and base.attr == 'Plugin' and isinstance(base.value, Name) and base.value.id == 'babase'):
|
||||
return f"{filename_without_ext}.{node.name}"
|
||||
return None
|
||||
deek = lambda: gs('deek').play()
|
||||
|
||||
|
||||
def deek(): return gs('deek').play()
|
||||
|
||||
# brobord collide grass
|
||||
# ba_meta require api 9
|
||||
# ba_meta export babase.Plugin
|
||||
|
||||
|
||||
class byBordd(Plugin):
|
||||
def __init__(s):
|
||||
C = PlugTools
|
||||
N = C.__name__
|
||||
E = ENT(N,C)
|
||||
E = ENT(N, C)
|
||||
I = app.devconsole
|
||||
I.tabs = [_ for _ in I.tabs if _.name != N]+[E]
|
||||
I._tab_instances[N] = E.factory()
|
||||
|
|
|
|||
|
|
@ -41,22 +41,28 @@ from bauiv1 import (
|
|||
Call
|
||||
)
|
||||
|
||||
|
||||
class Power(TAB):
|
||||
def __init__(s):
|
||||
s.j = [None,None,None]; s.ji = 1
|
||||
[setattr(s,_,None) for _ in 'cpnh']
|
||||
[setattr(s,_,{}) for _ in ['rr','hi']]
|
||||
[setattr(s,_,[]) for _ in ['cm','og','r','ls']]
|
||||
[setattr(s,_,0) for _ in ['ii','eii','ci','re','ri','eri','li','lii']]
|
||||
teck(3,s.spy)
|
||||
s.j = [None, None, None]
|
||||
s.ji = 1
|
||||
[setattr(s, _, None) for _ in 'cpnh']
|
||||
[setattr(s, _, {}) for _ in ['rr', 'hi']]
|
||||
[setattr(s, _, []) for _ in ['cm', 'og', 'r', 'ls']]
|
||||
[setattr(s, _, 0) for _ in ['ii', 'eii', 'ci', 're', 'ri', 'eri', 'li', 'lii']]
|
||||
teck(3, s.spy)
|
||||
|
||||
def rf(s):
|
||||
try: s.request_refresh()
|
||||
except RuntimeError: pass
|
||||
try:
|
||||
s.request_refresh()
|
||||
except RuntimeError:
|
||||
pass
|
||||
|
||||
def spy(s):
|
||||
_ = 0
|
||||
r = ROST()
|
||||
if r != s.r:
|
||||
s.rr = {i['display_string']:(i['client_id'],i['players']) for i in r}
|
||||
s.rr = {i['display_string']: (i['client_id'], i['players']) for i in r}
|
||||
s.r = r
|
||||
_ = 1
|
||||
h = HOST()
|
||||
|
|
@ -79,37 +85,44 @@ class Power(TAB):
|
|||
s.og = ng
|
||||
ls = ng[-1]
|
||||
ch = s.cm[0][1] if len(s.cm) else 0
|
||||
if ch and ls == s.cm[0][0]: s.cm[0] = (ls,ch+1)
|
||||
else: s.cm.insert(0,(ls,1))
|
||||
if s.ci: s.ci += 1
|
||||
if ch and ls == s.cm[0][0]:
|
||||
s.cm[0] = (ls, ch+1)
|
||||
else:
|
||||
s.cm.insert(0, (ls, 1))
|
||||
if s.ci:
|
||||
s.ci += 1
|
||||
_ = 1
|
||||
_ and s.rf()
|
||||
teck(0.1,s.spy)
|
||||
teck(0.1, s.spy)
|
||||
|
||||
@override
|
||||
def refresh(s):
|
||||
sf = s.width / 1605.3
|
||||
zf = s.height / 648
|
||||
x = -s.width/2
|
||||
T,B = s.text,s.button
|
||||
if len(s.r) and s.ri >= len(s.r): s.ri = len(s.r) - 1
|
||||
if len(s.r) and s.eri >= len(s.r): s.eri = len(s.r) - 1
|
||||
T, B = s.text, s.button
|
||||
if len(s.r) and s.ri >= len(s.r):
|
||||
s.ri = len(s.r) - 1
|
||||
if len(s.r) and s.eri >= len(s.r):
|
||||
s.eri = len(s.r) - 1
|
||||
if s.j[0] == 'JRejoin' and s.ji <= s.re:
|
||||
s.ji = s.re + 1
|
||||
push('Job time cannot be less than rejoin time\nwhen job is JRejoin. Updated job time to '+str(s.ji),color=(1,1,0))
|
||||
push('Job time cannot be less than rejoin time\nwhen job is JRejoin. Updated job time to ' +
|
||||
str(s.ji), color=(1, 1, 0))
|
||||
if s.height > 100:
|
||||
B(
|
||||
cs(sc.UP_ARROW),
|
||||
pos=(x + 10 * sf, 606*zf),
|
||||
size=(280*sf,35*zf),
|
||||
size=(280*sf, 35*zf),
|
||||
disabled=s.eri <= 0,
|
||||
call=Call(s.mv,'eri',-1)
|
||||
call=Call(s.mv, 'eri', -1)
|
||||
)
|
||||
B(
|
||||
cs(sc.DOWN_ARROW),
|
||||
pos=(x + 10 * sf, 290*zf),
|
||||
size=(280*sf,35*zf),
|
||||
size=(280*sf, 35*zf),
|
||||
disabled=s.eri >= len(s.r)-7,
|
||||
call=Call(s.mv,'eri',1)
|
||||
call=Call(s.mv, 'eri', 1)
|
||||
)
|
||||
nt = "No roster detected\nJoin some public party"
|
||||
w = GSW(nt)
|
||||
|
|
@ -118,20 +131,22 @@ class Power(TAB):
|
|||
pos=(x + 150 * sf, 495*zf),
|
||||
h_align='center',
|
||||
v_align='top',
|
||||
scale=1 if w<(290*sf) else (290*sf)/w
|
||||
scale=1 if w < (290*sf) else (290*sf)/w
|
||||
)
|
||||
for i,z in enumerate(s.rr.items()):
|
||||
if i < s.eri: continue
|
||||
if i>=(s.eri+7): break
|
||||
n,g = z
|
||||
c,p = g
|
||||
for i, z in enumerate(s.rr.items()):
|
||||
if i < s.eri:
|
||||
continue
|
||||
if i >= (s.eri+7):
|
||||
break
|
||||
n, g = z
|
||||
c, p = g
|
||||
w = GSW(n)
|
||||
B(
|
||||
n,
|
||||
size=(280 * sf, 37*zf),
|
||||
pos=(x + 10 * sf, (564-39*(i-s.eri))*zf),
|
||||
style=[['blue','blue_bright'],['purple','purple_bright']][not p][s.c==c],
|
||||
call=Call(s.prv,c,p,n),
|
||||
style=[['blue', 'blue_bright'], ['purple', 'purple_bright']][not p][s.c == c],
|
||||
call=Call(s.prv, c, p, n),
|
||||
label_scale=1 if w < 280 * sf else (280 * sf)/w
|
||||
)
|
||||
B(
|
||||
|
|
@ -142,45 +157,46 @@ class Power(TAB):
|
|||
)
|
||||
bb = s.c is None
|
||||
B(
|
||||
'Bomb' if bb else (['Client','Host'][s.c==-1]+f' {s.c}'),
|
||||
'Bomb' if bb else (['Client', 'Host'][s.c == -1]+f' {s.c}'),
|
||||
pos=(x + 10 * sf, 230*zf),
|
||||
size=(280 * sf, 40*zf),
|
||||
disabled=bb,
|
||||
call=Call(push,str(s.n))
|
||||
call=Call(push, str(s.n))
|
||||
)
|
||||
B(
|
||||
'Mention',
|
||||
size=(280 * sf, 40*zf),
|
||||
pos=(x + 10 * sf, 185*zf),
|
||||
call=Call(chat,str(s.n)),
|
||||
call=Call(chat, str(s.n)),
|
||||
disabled=bb
|
||||
)
|
||||
B(
|
||||
'Players',
|
||||
size=(280 * sf, 40*zf),
|
||||
pos=(x + 10 * sf, 140*zf),
|
||||
call=Call(push,'\n'.join([' '.join([f'{i}={j}' for i,j in _.items()]) for _ in s.p]) if s.p else ''),
|
||||
call=Call(push, '\n'.join(
|
||||
[' '.join([f'{i}={j}' for i, j in _.items()]) for _ in s.p]) if s.p else ''),
|
||||
disabled=bb or (not s.p)
|
||||
)
|
||||
B(
|
||||
'Kick',
|
||||
size=(280 * sf, 40*zf),
|
||||
pos=(x + 10 * sf, 95*zf),
|
||||
call=Call(KICK,lambda:s.rr[s.n][0]),
|
||||
disabled=bb or (s.c==-1)
|
||||
call=Call(KICK, lambda: s.rr[s.n][0]),
|
||||
disabled=bb or (s.c == -1)
|
||||
)
|
||||
B(
|
||||
'JKick',
|
||||
size=(280 * sf, 40*zf),
|
||||
pos=(x + 10 * sf, 50*zf),
|
||||
call=Call(s.job,Call(KICK,lambda:s.rr[s.n][0]),['JKick',s.c,s.n]),
|
||||
disabled=bb or (s.c==-1)
|
||||
call=Call(s.job, Call(KICK, lambda: s.rr[s.n][0]), ['JKick', s.c, s.n]),
|
||||
disabled=bb or (s.c == -1)
|
||||
)
|
||||
B(
|
||||
'Vote',
|
||||
size=(280 * sf, 40*zf),
|
||||
pos=(x + 10 * sf, 5*zf),
|
||||
call=Call(chat,'1'),
|
||||
call=Call(chat, '1'),
|
||||
disabled=not s.r
|
||||
)
|
||||
B(
|
||||
|
|
@ -189,9 +205,9 @@ class Power(TAB):
|
|||
pos=(x + 300 * sf, 5*zf),
|
||||
style='bright'
|
||||
)
|
||||
t = getattr(s.h,'name','Not in a server')
|
||||
a = getattr(s.h,'address','127.0.0.1')
|
||||
p = getattr(s.h,'port','43210')
|
||||
t = getattr(s.h, 'name', 'Not in a server')
|
||||
a = getattr(s.h, 'address', '127.0.0.1')
|
||||
p = getattr(s.h, 'port', '43210')
|
||||
w = GSW(t)
|
||||
B(
|
||||
t if t.strip() else 'Loading...',
|
||||
|
|
@ -199,14 +215,15 @@ class Power(TAB):
|
|||
pos=(x + 311 * sf, 606*zf),
|
||||
disabled=not s.h,
|
||||
label_scale=1 if w < 390 * sf else (390 * sf)/w,
|
||||
call=Call(push,f"{t}\nHosted on build {getattr(s.h,'build_number','0')}" if t.strip() else 'Server is still loading...\nIf it remains stuck on this\nthen either party is full, or a network issue.'),
|
||||
call=Call(push, f"{t}\nHosted on build {getattr(s.h, 'build_number', '0')}" if t.strip(
|
||||
) else 'Server is still loading...\nIf it remains stuck on this\nthen either party is full, or a network issue.'),
|
||||
)
|
||||
w = GSW(a)
|
||||
B(
|
||||
a,
|
||||
size=(300 * sf, 35*zf),
|
||||
pos=(x + 311 * sf, 568*zf),
|
||||
call=Call(COPY,a),
|
||||
call=Call(COPY, a),
|
||||
disabled=not s.h,
|
||||
label_scale=1 if w < 290 * sf else (290 * sf)/w
|
||||
)
|
||||
|
|
@ -216,7 +233,7 @@ class Power(TAB):
|
|||
size=(97 * sf, 35*zf),
|
||||
pos=(x + 614 * sf, 568*zf),
|
||||
disabled=not s.h,
|
||||
call=Call(COPY,str(p)),
|
||||
call=Call(COPY, str(p)),
|
||||
label_scale=1 if w < 90 * sf else (90 * sf)/w
|
||||
)
|
||||
B(
|
||||
|
|
@ -230,34 +247,35 @@ class Power(TAB):
|
|||
'Rejoin',
|
||||
size=(200 * sf, 35*zf),
|
||||
pos=(x + 311 * sf, 492*zf),
|
||||
call=Call(REJOIN,a,p,lambda:s.re),
|
||||
call=Call(REJOIN, a, p, lambda: s.re),
|
||||
disabled=not s.h
|
||||
)
|
||||
B(
|
||||
'JRejoin',
|
||||
size=(197 * sf, 35*zf),
|
||||
pos=(x + 514 * sf, 492*zf),
|
||||
call=Call(s.job,Call(REJOIN,a,p,lambda:s.re),['JRejoin',a,str(p)]),
|
||||
call=Call(s.job, Call(REJOIN, a, p, lambda: s.re), ['JRejoin', a, str(p)]),
|
||||
disabled=not s.h
|
||||
)
|
||||
B(
|
||||
'+',
|
||||
size=(131 * sf, 35*zf),
|
||||
pos=(x + 579 * sf, 454*zf),
|
||||
call=Call(s.mv,'re',1)
|
||||
call=Call(s.mv, 're', 1)
|
||||
)
|
||||
B(
|
||||
str(s.re or 0.1),
|
||||
size=(131 * sf, 35*zf),
|
||||
pos=(x + 444 * sf, 454*zf),
|
||||
call=Call(push,f"Rejoins after {s.re or 0.1} second{['','s'][s.re!=1]}\nKeep this 0.1 unless server kicks fast rejoins\nLife in server = job time - rejoin time")
|
||||
call=Call(
|
||||
push, f"Rejoins after {s.re or 0.1} second{['', 's'][s.re != 1]}\nKeep this 0.1 unless server kicks fast rejoins\nLife in server = job time - rejoin time")
|
||||
)
|
||||
B(
|
||||
'-',
|
||||
size=(131 * sf, 35*zf),
|
||||
pos=(x + 311 * sf, 454*zf),
|
||||
disabled=s.re<=0.5,
|
||||
call=Call(s.mv,'re',-1)
|
||||
disabled=s.re <= 0.5,
|
||||
call=Call(s.mv, 're', -1)
|
||||
)
|
||||
B(
|
||||
'',
|
||||
|
|
@ -271,19 +289,21 @@ class Power(TAB):
|
|||
pos=(x + 311 * sf, 445*zf),
|
||||
style='bright'
|
||||
)
|
||||
for i,e in enumerate(s.hi.items()):
|
||||
if i < s.eii: continue
|
||||
if i >= (s.eii+9): break
|
||||
g,v = e
|
||||
_,a = g
|
||||
n,p = v
|
||||
for i, e in enumerate(s.hi.items()):
|
||||
if i < s.eii:
|
||||
continue
|
||||
if i >= (s.eii+9):
|
||||
break
|
||||
g, v = e
|
||||
_, a = g
|
||||
n, p = v
|
||||
w = GSW(n)
|
||||
B(
|
||||
n,
|
||||
size=(400 * sf, 37*zf),
|
||||
pos=(x + 311 * sf, (358-39*(i-s.eii))*zf),
|
||||
label_scale=1 if w < 290 * sf else (290 * sf)/w,
|
||||
call=Call(JOIN,a,p,False),
|
||||
call=Call(JOIN, a, p, False),
|
||||
disabled=n == '...'
|
||||
)
|
||||
nt = "Server join history\nServers you join are saved here"
|
||||
|
|
@ -292,28 +312,28 @@ class Power(TAB):
|
|||
nt,
|
||||
pos=(x + 510 * sf, 265*zf),
|
||||
v_align='top',
|
||||
scale=1 if w<(380*sf) else (380*sf)/w
|
||||
scale=1 if w < (380*sf) else (380*sf)/w
|
||||
)
|
||||
B(
|
||||
cs(sc.DOWN_ARROW),
|
||||
pos=(x + 311 * sf, 8*zf),
|
||||
size=(398*sf, 35*zf),
|
||||
disabled=s.eii >= len(s.hi)-9,
|
||||
call=Call(s.mv,'eii',1)
|
||||
call=Call(s.mv, 'eii', 1)
|
||||
)
|
||||
B(
|
||||
cs(sc.UP_ARROW),
|
||||
pos=(x + 311 * sf, 400*zf),
|
||||
size=(400*sf, 35*zf),
|
||||
disabled=s.eii <= 0,
|
||||
call=Call(s.mv,'eii',-1)
|
||||
call=Call(s.mv, 'eii', -1)
|
||||
)
|
||||
bb = s.j[0] is None
|
||||
B(
|
||||
'No job' if bb else 'Job',
|
||||
size=(300 * sf, 35*zf),
|
||||
pos=(x + 727 * sf, 606*zf),
|
||||
call=Call(push,s.j[0]),
|
||||
call=Call(push, s.j[0]),
|
||||
disabled=bb
|
||||
)
|
||||
w = 0 if bb else GSW(str(s.j[1]))
|
||||
|
|
@ -321,41 +341,41 @@ class Power(TAB):
|
|||
'Target' if bb else str(s.j[1]),
|
||||
size=(300 * sf, 35*zf),
|
||||
pos=(x + 727 * sf, 568*zf),
|
||||
call=Call(push,s.j[2]),
|
||||
call=Call(push, s.j[2]),
|
||||
disabled=bb,
|
||||
label_scale=1 if w<110 * sf else (110 * sf)/w
|
||||
label_scale=1 if w < 110 * sf else (110 * sf)/w
|
||||
)
|
||||
B(
|
||||
'Stop',
|
||||
size=(300 * sf, 35*zf),
|
||||
pos=(x + 727 * sf, 530*zf),
|
||||
call=Call(s.job,None,[None,None,None]),
|
||||
call=Call(s.job, None, [None, None, None]),
|
||||
disabled=bb
|
||||
)
|
||||
B(
|
||||
'+',
|
||||
size=(96 * sf, 35*zf),
|
||||
pos=(x + 931 * sf, 492*zf),
|
||||
call=Call(s.mv,'ji',1)
|
||||
call=Call(s.mv, 'ji', 1)
|
||||
)
|
||||
B(
|
||||
str(s.ji or 0.1),
|
||||
size=(100 * sf, 35*zf),
|
||||
pos=(x + 828 * sf, 492*zf),
|
||||
call=Call(push,f"Job runs every {s.ji or 0.1} second{['','s'][s.ji!=1]}")
|
||||
call=Call(push, f"Job runs every {s.ji or 0.1} second{['', 's'][s.ji != 1]}")
|
||||
)
|
||||
B(
|
||||
'-',
|
||||
size=(98 * sf, 35*zf),
|
||||
pos=(x + 727 * sf, 492*zf),
|
||||
disabled=s.ji<=0.5,
|
||||
call=Call(s.mv,'ji',-1)
|
||||
disabled=s.ji <= 0.5,
|
||||
call=Call(s.mv, 'ji', -1)
|
||||
)
|
||||
B(
|
||||
'Power',
|
||||
size=(300 * sf, 35*zf),
|
||||
pos=(x + 727 * sf, 454*zf),
|
||||
call=Call(push,'Power v2.5 FullUI\nCollapse dev console to switch to MinUI')
|
||||
call=Call(push, 'Power v2.5 FullUI\nCollapse dev console to switch to MinUI')
|
||||
)
|
||||
B(
|
||||
'',
|
||||
|
|
@ -373,27 +393,29 @@ class Power(TAB):
|
|||
'Chat is still empty.\nHurry up and fill it with nonesense',
|
||||
pos=(x+1320 * sf, 330 * zf)
|
||||
)
|
||||
for i,g in enumerate(s.cm):
|
||||
if i < s.ci: continue
|
||||
if i >= s.ci+15: break
|
||||
for i, g in enumerate(s.cm):
|
||||
if i < s.ci:
|
||||
continue
|
||||
if i >= s.ci+15:
|
||||
break
|
||||
i = i - s.ci
|
||||
m,_ = g
|
||||
sn,ms = m.split(': ',1)
|
||||
m, _ = g
|
||||
sn, ms = m.split(': ', 1)
|
||||
w = GSW(sn)
|
||||
w = [w,30*sf][w<30*sf]
|
||||
s1 = [w,200*sf][w>200*sf]
|
||||
w = [w, 30*sf][w < 30*sf]
|
||||
s1 = [w, 200*sf][w > 200*sf]
|
||||
B(
|
||||
sn,
|
||||
size=(s1,35*zf),
|
||||
size=(s1, 35*zf),
|
||||
pos=(x + 1040*sf, (48+37*i)*zf),
|
||||
style='purple',
|
||||
label_scale=1 if w<(s1-10*sf) else (s1-10*sf)/w,
|
||||
call=Call(s.chk,sn)
|
||||
label_scale=1 if w < (s1-10*sf) else (s1-10*sf)/w,
|
||||
call=Call(s.chk, sn)
|
||||
)
|
||||
s2 = 555*sf - s1 - 53*(_>1)
|
||||
s2 = 555*sf - s1 - 53*(_ > 1)
|
||||
B(
|
||||
'',
|
||||
size=(s2,35*zf),
|
||||
size=(s2, 35*zf),
|
||||
pos=(x + 1045*sf+s1, (48+37*i)*zf),
|
||||
style='black'
|
||||
)
|
||||
|
|
@ -401,67 +423,69 @@ class Power(TAB):
|
|||
T(
|
||||
ms,
|
||||
pos=(x + s1+(1050)*sf, (48+17+37*i)*zf),
|
||||
scale=1 if w<(s2-10*sf) else (s2-10*sf)/w,
|
||||
scale=1 if w < (s2-10*sf) else (s2-10*sf)/w,
|
||||
h_align='left'
|
||||
)
|
||||
z = f'x{_}'
|
||||
w = GSW(z)
|
||||
_>1 and B(
|
||||
_ > 1 and B(
|
||||
z,
|
||||
pos=(x+s1+s2+(1050)*sf,(48+37*i)*zf),
|
||||
size=(50*sf,35*zf),
|
||||
label_scale=1 if w<(40*sf) else (40*sf)/w,
|
||||
pos=(x+s1+s2+(1050)*sf, (48+37*i)*zf),
|
||||
size=(50*sf, 35*zf),
|
||||
label_scale=1 if w < (40*sf) else (40*sf)/w,
|
||||
style='yellow_bright'
|
||||
)
|
||||
B(
|
||||
cs(sc.DOWN_ARROW),
|
||||
pos=(x+1042*sf,8*zf),
|
||||
size=(555*sf,35*zf),
|
||||
call=Call(s.mv,'ci',-1),
|
||||
pos=(x+1042*sf, 8*zf),
|
||||
size=(555*sf, 35*zf),
|
||||
call=Call(s.mv, 'ci', -1),
|
||||
disabled=s.ci <= 0 or not s.cm
|
||||
)
|
||||
B(
|
||||
cs(sc.UP_ARROW),
|
||||
pos=(x+1042*sf,606*zf),
|
||||
size=(555*sf,35*zf),
|
||||
call=Call(s.mv,'ci',1),
|
||||
pos=(x+1042*sf, 606*zf),
|
||||
size=(555*sf, 35*zf),
|
||||
call=Call(s.mv, 'ci', 1),
|
||||
disabled=(s.ci >= len(s.cm)-15) or not s.cm
|
||||
)
|
||||
B(
|
||||
cs(sc.DOWN_ARROW),
|
||||
pos=(x+727*sf,8*zf),
|
||||
size=(300*sf,35*zf),
|
||||
pos=(x+727*sf, 8*zf),
|
||||
size=(300*sf, 35*zf),
|
||||
disabled=(s.li >= len(s.ls)-16) or not s.ls,
|
||||
call=Call(s.mv,'li',1)
|
||||
call=Call(s.mv, 'li', 1)
|
||||
)
|
||||
B(
|
||||
cs(sc.UP_ARROW),
|
||||
pos=(x+727*sf,400*zf),
|
||||
size=(300*sf,35*zf),
|
||||
disabled=s.li<=0,
|
||||
call=Call(s.mv,'li',-1)
|
||||
pos=(x+727*sf, 400*zf),
|
||||
size=(300*sf, 35*zf),
|
||||
disabled=s.li <= 0,
|
||||
call=Call(s.mv, 'li', -1)
|
||||
)
|
||||
0 if s.ls else T(
|
||||
'Job logs here\nLike you even care',
|
||||
pos=(x+875*sf,232*zf)
|
||||
pos=(x+875*sf, 232*zf)
|
||||
)
|
||||
for _,g in enumerate(s.ls):
|
||||
if _ < s.li: continue
|
||||
if _ >= s.li+16: break
|
||||
for _, g in enumerate(s.ls):
|
||||
if _ < s.li:
|
||||
continue
|
||||
if _ >= s.li+16:
|
||||
break
|
||||
_ = _ - s.li
|
||||
l,t = g
|
||||
l, t = g
|
||||
B(
|
||||
'',
|
||||
pos=(x+727*sf,(376-_*22)*zf),
|
||||
size=(300*sf,20*zf),
|
||||
pos=(x+727*sf, (376-_*22)*zf),
|
||||
size=(300*sf, 20*zf),
|
||||
label_scale=0.7,
|
||||
corner_radius=0,
|
||||
style='black',
|
||||
call=Call(push,t)
|
||||
call=Call(push, t)
|
||||
)
|
||||
T(
|
||||
l,
|
||||
pos=(x+732*sf,(386-_*22)*zf),
|
||||
pos=(x+732*sf, (386-_*22)*zf),
|
||||
scale=0.6,
|
||||
h_align='left'
|
||||
)
|
||||
|
|
@ -471,14 +495,14 @@ class Power(TAB):
|
|||
pos=(x + 10 * sf, 10),
|
||||
size=(30 * sf, s.height-17),
|
||||
disabled=(s.ri >= len(s.r)-3) or not s.r,
|
||||
call=Call(s.mv,'ri',1)
|
||||
call=Call(s.mv, 'ri', 1)
|
||||
)
|
||||
B(
|
||||
cs(sc.UP_ARROW),
|
||||
pos=(x + 250 * sf, 10),
|
||||
size=(30 * sf, s.height-17),
|
||||
disabled=(s.ri <= 0) or not s.r,
|
||||
call=Call(s.mv,'ri',-1)
|
||||
call=Call(s.mv, 'ri', -1)
|
||||
)
|
||||
nt = "No roster\nYou're alone"
|
||||
w = GSW(nt)
|
||||
|
|
@ -487,63 +511,66 @@ class Power(TAB):
|
|||
pos=(x + 147 * sf, s.height-17),
|
||||
h_align='center',
|
||||
v_align='top',
|
||||
scale=1 if w<(200*sf) else (200*sf)/w
|
||||
scale=1 if w < (200*sf) else (200*sf)/w
|
||||
)
|
||||
for i,z in enumerate(s.rr.items()):
|
||||
if i < s.ri: continue
|
||||
if i>=(s.ri+3): break
|
||||
n,g = z
|
||||
c,p = g
|
||||
for i, z in enumerate(s.rr.items()):
|
||||
if i < s.ri:
|
||||
continue
|
||||
if i >= (s.ri+3):
|
||||
break
|
||||
n, g = z
|
||||
c, p = g
|
||||
w = GSW(n)
|
||||
B(
|
||||
n,
|
||||
size=(210 * sf, 27),
|
||||
pos=(x + 40 * sf, s.height-35-27*(i-s.ri)),
|
||||
style=[['blue','blue_bright'],['purple','purple_bright']][not p][s.c==c],
|
||||
call=Call(s.prv,c,p,n),
|
||||
style=[['blue', 'blue_bright'], ['purple', 'purple_bright']][not p][s.c == c],
|
||||
call=Call(s.prv, c, p, n),
|
||||
label_scale=1 if w < 200 * sf else (200 * sf)/w
|
||||
)
|
||||
bb = s.c is None
|
||||
B(
|
||||
'Bomb' if bb else (['Client','Host'][s.c==-1]+f' {s.c}'),
|
||||
'Bomb' if bb else (['Client', 'Host'][s.c == -1]+f' {s.c}'),
|
||||
pos=(x + 287 * sf, s.height-34),
|
||||
size=(120 * sf, 27),
|
||||
disabled=bb,
|
||||
call=Call(push,str(s.n))
|
||||
call=Call(push, str(s.n))
|
||||
)
|
||||
B(
|
||||
'Mention',
|
||||
size=(120 * sf, 27),
|
||||
pos=(x + 287 * sf, s.height-90),
|
||||
call=Call(chat,str(s.n)),
|
||||
call=Call(chat, str(s.n)),
|
||||
disabled=bb
|
||||
)
|
||||
B(
|
||||
'Players',
|
||||
size=(120 * sf, 27),
|
||||
pos=(x + 287 * sf, s.height-62),
|
||||
call=Call(push,'\n'.join([' '.join([f'{i}={j}' for i,j in _.items()]) for _ in s.p]) if s.p else ''),
|
||||
call=Call(push, '\n'.join(
|
||||
[' '.join([f'{i}={j}' for i, j in _.items()]) for _ in s.p]) if s.p else ''),
|
||||
disabled=bb or (not s.p)
|
||||
)
|
||||
B(
|
||||
'Kick',
|
||||
size=(120 * sf, 27),
|
||||
pos=(x + 407 * sf, s.height-34),
|
||||
call=Call(KICK,lambda:s.rr[s.n][0]),
|
||||
disabled=bb or (s.c==-1)
|
||||
call=Call(KICK, lambda: s.rr[s.n][0]),
|
||||
disabled=bb or (s.c == -1)
|
||||
)
|
||||
B(
|
||||
'JKick',
|
||||
size=(120 * sf, 27),
|
||||
pos=(x + 407 * sf, s.height-62),
|
||||
call=Call(s.job,Call(KICK,lambda:s.rr[s.n][0]),['JKick',s.c,s.n]),
|
||||
disabled=bb or (s.c==-1)
|
||||
call=Call(s.job, Call(KICK, lambda: s.rr[s.n][0]), ['JKick', s.c, s.n]),
|
||||
disabled=bb or (s.c == -1)
|
||||
)
|
||||
B(
|
||||
'Vote',
|
||||
size=(120 * sf, 27),
|
||||
pos=(x + 407 * sf, s.height-90),
|
||||
call=Call(chat,'1'),
|
||||
call=Call(chat, '1'),
|
||||
disabled=not s.r
|
||||
)
|
||||
B(
|
||||
|
|
@ -557,7 +584,7 @@ class Power(TAB):
|
|||
'No job' if bb else 'Job',
|
||||
size=(120 * sf, 27),
|
||||
pos=(x + 544 * sf, s.height-34),
|
||||
call=Call(push,s.j[0]),
|
||||
call=Call(push, s.j[0]),
|
||||
disabled=bb
|
||||
)
|
||||
w = 0 if bb else GSW(str(s.j[1]))
|
||||
|
|
@ -565,35 +592,35 @@ class Power(TAB):
|
|||
'Target' if bb else str(s.j[1]),
|
||||
size=(120 * sf, 27),
|
||||
pos=(x + 544 * sf, s.height-62),
|
||||
call=Call(push,s.j[2]),
|
||||
call=Call(push, s.j[2]),
|
||||
disabled=bb,
|
||||
label_scale=1 if w<110 * sf else (110 * sf)/w
|
||||
label_scale=1 if w < 110 * sf else (110 * sf)/w
|
||||
)
|
||||
B(
|
||||
'Stop',
|
||||
size=(120 * sf, 27),
|
||||
pos=(x + 544 * sf, s.height-90),
|
||||
call=Call(s.job,None,[None,None,None]),
|
||||
call=Call(s.job, None, [None, None, None]),
|
||||
disabled=bb
|
||||
)
|
||||
B(
|
||||
'+',
|
||||
size=(50 * sf, 27),
|
||||
pos=(x + 664 * sf, s.height-34),
|
||||
call=Call(s.mv,'ji',1)
|
||||
call=Call(s.mv, 'ji', 1)
|
||||
)
|
||||
B(
|
||||
str(s.ji or 0.1),
|
||||
size=(50 * sf, 27),
|
||||
pos=(x + 664 * sf, s.height-62),
|
||||
call=Call(push,f"Job runs every {s.ji or 0.1} second{['','s'][s.ji!=1]}")
|
||||
call=Call(push, f"Job runs every {s.ji or 0.1} second{['', 's'][s.ji != 1]}")
|
||||
)
|
||||
B(
|
||||
'-',
|
||||
size=(50 * sf, 27),
|
||||
pos=(x + 664 * sf, s.height-90),
|
||||
disabled=s.ji<=0.5,
|
||||
call=Call(s.mv,'ji',-1)
|
||||
disabled=s.ji <= 0.5,
|
||||
call=Call(s.mv, 'ji', -1)
|
||||
)
|
||||
B(
|
||||
'',
|
||||
|
|
@ -601,9 +628,9 @@ class Power(TAB):
|
|||
pos=(x + 722 * sf, 10),
|
||||
style='bright'
|
||||
)
|
||||
t = getattr(s.h,'name','Not in a server')
|
||||
a = getattr(s.h,'address','127.0.0.1')
|
||||
p = getattr(s.h,'port','43210')
|
||||
t = getattr(s.h, 'name', 'Not in a server')
|
||||
a = getattr(s.h, 'address', '127.0.0.1')
|
||||
p = getattr(s.h, 'port', '43210')
|
||||
w = GSW(t)
|
||||
B(
|
||||
t if t.strip() else 'Loading...',
|
||||
|
|
@ -611,14 +638,15 @@ class Power(TAB):
|
|||
pos=(x + 732 * sf, s.height-34),
|
||||
disabled=not s.h,
|
||||
label_scale=1 if w < 290 * sf else (290 * sf)/w,
|
||||
call=Call(push,f"{t}\nHosted on build {getattr(s.h,'build_number','0')}" if t.strip() else 'Server is still loading...\nIf it remains stuck on this\nthen either party is full, or a network issue.'),
|
||||
call=Call(push, f"{t}\nHosted on build {getattr(s.h, 'build_number', '0')}" if t.strip(
|
||||
) else 'Server is still loading...\nIf it remains stuck on this\nthen either party is full, or a network issue.'),
|
||||
)
|
||||
w = GSW(a)
|
||||
B(
|
||||
a,
|
||||
size=(200 * sf, 27),
|
||||
pos=(x + 732 * sf, s.height-62),
|
||||
call=Call(COPY,a),
|
||||
call=Call(COPY, a),
|
||||
disabled=not s.h,
|
||||
label_scale=1 if w < 190 * sf else (190 * sf)/w
|
||||
)
|
||||
|
|
@ -628,7 +656,7 @@ class Power(TAB):
|
|||
size=(97 * sf, 27),
|
||||
pos=(x + 935 * sf, s.height-62),
|
||||
disabled=not s.h,
|
||||
call=Call(COPY,str(p)),
|
||||
call=Call(COPY, str(p)),
|
||||
label_scale=1 if w < 90 * sf else (90 * sf)/w
|
||||
)
|
||||
B(
|
||||
|
|
@ -642,34 +670,35 @@ class Power(TAB):
|
|||
'Rejoin',
|
||||
size=(97 * sf, 27),
|
||||
pos=(x + 835 * sf, s.height-90),
|
||||
call=Call(REJOIN,a,p,lambda:s.re),
|
||||
call=Call(REJOIN, a, p, lambda: s.re),
|
||||
disabled=not s.h
|
||||
)
|
||||
B(
|
||||
'JRejoin',
|
||||
size=(97 * sf, 27),
|
||||
pos=(x + 935 * sf, s.height-90),
|
||||
call=Call(s.job,Call(REJOIN,a,p,lambda:s.re),['JRejoin',a,str(p)]),
|
||||
call=Call(s.job, Call(REJOIN, a, p, lambda: s.re), ['JRejoin', a, str(p)]),
|
||||
disabled=not s.h
|
||||
)
|
||||
B(
|
||||
'+',
|
||||
size=(50 * sf, 27),
|
||||
pos=(x + 1035 * sf, s.height-34),
|
||||
call=Call(s.mv,'re',1)
|
||||
call=Call(s.mv, 're', 1)
|
||||
)
|
||||
B(
|
||||
str(s.re or 0.1),
|
||||
size=(50 * sf, 27),
|
||||
pos=(x + 1035 * sf, s.height-62),
|
||||
call=Call(push,f"Rejoins after {s.re or 0.1} second{['','s'][s.re!=1]}\nKeep this 0.1 unless server kicks fast rejoins\nLife in server = job time - rejoin time")
|
||||
call=Call(
|
||||
push, f"Rejoins after {s.re or 0.1} second{['', 's'][s.re != 1]}\nKeep this 0.1 unless server kicks fast rejoins\nLife in server = job time - rejoin time")
|
||||
)
|
||||
B(
|
||||
'-',
|
||||
size=(50 * sf, 27),
|
||||
pos=(x + 1035 * sf, s.height-90),
|
||||
disabled=s.re<=0.5,
|
||||
call=Call(s.mv,'re',-1)
|
||||
disabled=s.re <= 0.5,
|
||||
call=Call(s.mv, 're', -1)
|
||||
)
|
||||
B(
|
||||
'',
|
||||
|
|
@ -677,19 +706,21 @@ class Power(TAB):
|
|||
pos=(x + 1092 * sf, 10),
|
||||
style='bright'
|
||||
)
|
||||
for i,e in enumerate(s.hi.items()):
|
||||
if i < s.ii: continue
|
||||
if i >= (s.ii+3): break
|
||||
g,v = e
|
||||
_,a = g
|
||||
n,p = v
|
||||
for i, e in enumerate(s.hi.items()):
|
||||
if i < s.ii:
|
||||
continue
|
||||
if i >= (s.ii+3):
|
||||
break
|
||||
g, v = e
|
||||
_, a = g
|
||||
n, p = v
|
||||
w = GSW(n)
|
||||
B(
|
||||
n,
|
||||
size=(300 * sf, 27),
|
||||
pos=(x + 1134 * sf, s.height-34-28*(i-s.ii)),
|
||||
label_scale=1 if w < 290 * sf else (290 * sf)/w,
|
||||
call=Call(JOIN,a,p,False),
|
||||
call=Call(JOIN, a, p, False),
|
||||
disabled=n == '...'
|
||||
)
|
||||
nt = "Your server join history\nwill appear here. Hi."
|
||||
|
|
@ -699,21 +730,21 @@ class Power(TAB):
|
|||
pos=(x + 1285 * sf, s.height-17),
|
||||
h_align='center',
|
||||
v_align='top',
|
||||
scale=1 if w<(280*sf) else (280*sf)/w
|
||||
scale=1 if w < (280*sf) else (280*sf)/w
|
||||
)
|
||||
B(
|
||||
cs(sc.DOWN_ARROW),
|
||||
pos=(x + 1102 * sf, 10),
|
||||
size=(30 * sf, s.height-17),
|
||||
disabled=s.ii >= len(s.hi)-3,
|
||||
call=Call(s.mv,'ii',1)
|
||||
call=Call(s.mv, 'ii', 1)
|
||||
)
|
||||
B(
|
||||
cs(sc.UP_ARROW),
|
||||
pos=(x + 1436 * sf, 10),
|
||||
size=(30 * sf, s.height-17),
|
||||
disabled=s.ii <= 0,
|
||||
call=Call(s.mv,'ii',-1)
|
||||
call=Call(s.mv, 'ii', -1)
|
||||
)
|
||||
B(
|
||||
'Force leave',
|
||||
|
|
@ -724,70 +755,99 @@ class Power(TAB):
|
|||
)
|
||||
B(
|
||||
'Laugh',
|
||||
call=Call(chat,'hahaha'),
|
||||
call=Call(chat, 'hahaha'),
|
||||
pos=(x + 1469 * sf, s.height-62),
|
||||
size=(130 * sf, 27)
|
||||
)
|
||||
B(
|
||||
'Power',
|
||||
call=Call(push,'Power v2.5 MinUI\nExpand dev console to switch to FullUI. thanks.'),
|
||||
call=Call(push, 'Power v2.5 MinUI\nExpand dev console to switch to FullUI. thanks.'),
|
||||
pos=(x + 1469 * sf, s.height-90),
|
||||
size=(130 * sf, 27)
|
||||
)
|
||||
def log(s,t):
|
||||
s.ls.append((t,NOW()))
|
||||
|
||||
def log(s, t):
|
||||
s.ls.append((t, NOW()))
|
||||
if s.lii < 99:
|
||||
s.lii += 1
|
||||
if s.li == s.lii-17: s.li += 1
|
||||
else: s.ls.pop(0)
|
||||
if s.li == s.lii-17:
|
||||
s.li += 1
|
||||
else:
|
||||
s.ls.pop(0)
|
||||
s.rf()
|
||||
def mv(s,a,i):
|
||||
setattr(s,a,getattr(s,a)+i)
|
||||
|
||||
def mv(s, a, i):
|
||||
setattr(s, a, getattr(s, a)+i)
|
||||
s.rf()
|
||||
def job(s,f,j):
|
||||
|
||||
def job(s, f, j):
|
||||
s.j = j
|
||||
s.lf = f
|
||||
s.hd = j[1] if s.j[0] == 'JRejoin' else j[2]
|
||||
if f is not None:
|
||||
s._job(f)
|
||||
push('Job started',color=(1,1,0))
|
||||
else: push('Job stopped',color=(1,1,0))
|
||||
push('Job started', color=(1, 1, 0))
|
||||
else:
|
||||
push('Job stopped', color=(1, 1, 0))
|
||||
s.rf()
|
||||
def _job(s,f):
|
||||
if f != s.lf: return
|
||||
|
||||
def _job(s, f):
|
||||
if f != s.lf:
|
||||
return
|
||||
s.log(f'[{s.lii:02}] [{s.j[0]}] {s.hd}')
|
||||
f(); teck(s.ji or 0.1,Call(s._job,f))
|
||||
def prv(s,c,p,n):
|
||||
s.c,s.p,s.n = c,p,n
|
||||
f()
|
||||
teck(s.ji or 0.1, Call(s._job, f))
|
||||
|
||||
def prv(s, c, p, n):
|
||||
s.c, s.p, s.n = c, p, n
|
||||
s.rf()
|
||||
def chk(s,pn):
|
||||
|
||||
def chk(s, pn):
|
||||
y = 0
|
||||
for n,g in s.rr.items():
|
||||
c,p = g
|
||||
if n == pn: y = 1
|
||||
for n, g in s.rr.items():
|
||||
c, p = g
|
||||
if n == pn:
|
||||
y = 1
|
||||
else:
|
||||
for _ in p:
|
||||
if pn in [_['name'],_['name_full']]: y = 1
|
||||
if y: s.prv(c,p,n); break
|
||||
if pn in [_['name'], _['name_full']]:
|
||||
y = 1
|
||||
if y:
|
||||
s.prv(c, p, n)
|
||||
break
|
||||
|
||||
|
||||
HAS = app.ui_v1.has_main_window
|
||||
SAVE = app.classic.save_ui_state
|
||||
KICK = lambda f: DISC(f())
|
||||
FORCE = lambda: teck(0.7 if HAS() else 0.1,lambda: 0 if HAS() else app.classic.return_to_main_menu_session_gracefully())
|
||||
def KICK(f): return DISC(f())
|
||||
|
||||
|
||||
def FORCE(): return teck(0.7 if HAS() else 0.1, lambda: 0 if HAS()
|
||||
else app.classic.return_to_main_menu_session_gracefully())
|
||||
|
||||
|
||||
JOIN = lambda *a: (SAVE() or 1) and CON(*a)
|
||||
GSW = lambda s: sw(s,suppress_warning=True)
|
||||
REJOIN = lambda a,p,f: ((LEAVE() if getattr(HOST(),'name','') else 0) or 1) and teck(f() or 0.1,Call(JOIN,a,p,False))
|
||||
COPY = lambda s: ((CST(s) or 1) if CIS() else push('Clipboard not supported!')) and push('Copied!',color=(0,1,0))
|
||||
NOW = lambda: DT.now().strftime("%H:%M:%S")
|
||||
def GSW(s): return sw(s, suppress_warning=True)
|
||||
|
||||
|
||||
def REJOIN(a, p, f): return ((LEAVE() if getattr(HOST(), 'name', '') else 0)
|
||||
or 1) and teck(f() or 0.1, Call(JOIN, a, p, False))
|
||||
def COPY(s): return ((CST(s) or 1) if CIS() else push(
|
||||
'Clipboard not supported!')) and push('Copied!', color=(0, 1, 0))
|
||||
|
||||
|
||||
def NOW(): return DT.now().strftime("%H:%M:%S")
|
||||
|
||||
# brobord collide grass
|
||||
# ba_meta require api 9
|
||||
# ba_meta export babase.Plugin
|
||||
|
||||
|
||||
class byBordd(Plugin):
|
||||
def __init__(s):
|
||||
C = Power
|
||||
N = C.__name__
|
||||
E = ENT(N,C)
|
||||
E = ENT(N, C)
|
||||
I = app.devconsole
|
||||
I.tabs = [_ for _ in I.tabs if _.name != N]+[E]
|
||||
I._tab_instances[N] = E.factory()
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -19,13 +19,15 @@ from bascenev1 import (
|
|||
|
||||
# ba_meta require api 9
|
||||
# ba_meta export babase.Plugin
|
||||
|
||||
|
||||
class byBordd(Plugin):
|
||||
__init__ = lambda s: (setattr(s,'la',None),z(5,s.ear))[1]
|
||||
def __init__(s): return (setattr(s, 'la', None), z(5, s.ear))[1]
|
||||
|
||||
def ear(s):
|
||||
a = gcm()
|
||||
if a and s.la != a[-1]:
|
||||
if app.config.resolve('Chat Muted'):
|
||||
push(a[-1],(1,1,1),True)
|
||||
push(a[-1], (1, 1, 1), True)
|
||||
s.la = a[-1]
|
||||
z(0.1, s.ear)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue