feat: add MeshPort overlay networking, item actions window, and AVA2 client enhancements

- add MeshPort peer-to-peer overlay networking SDK, C++ integration, and Python bindings
- add item actions quick use/split/delete/lock overlay window (mt_item_actions)
- add shop name range and NPC name visibility settings to system display options
- support battlepass ticket activation and month validation in mt_battlepass
- support boss tracking teleport destination button in mt_bosses
- support asynchronous account registration cancellation and pending login cancellation
- update AVA2 item conversion for attr lock scrolls and battlepass tickets
- update .gitignore for local build outputs and caches
This commit is contained in:
shen
2026-10-16 01:29:57 -07:00
parent f266072f67
commit 507e687867
556 changed files with 213111 additions and 43 deletions
+20 -8
View File
@@ -21,18 +21,22 @@ LEVEL_HINTS=('显示所有角色的特效','隐藏其他玩家和NPC的特效,
class Options(object):
def __init__(self):self.effect=0;self.tree=True;self.cloud=True
def __init__(self):self.effect=0;self.tree=True;self.cloud=True;self.shopRange=0;self.npcNames=True
def Load(self,text):
words=text.split()
if len(words)!=3 or not all(w.isdigit() and len(w)==1 for w in words):return
effect,tree,cloud=[int(w) for w in words]
if effect<len(LEVELS) and tree in (0,1) and cloud in (0,1):self.effect=effect;self.tree=tree==1;self.cloud=cloud==1
if len(words) not in (3,5) or not all(w.isdigit() and len(w)==1 for w in words):return
effect,tree,cloud=[int(w) for w in words[:3]]
shop,names=[int(w) for w in words[3:]] if len(words)==5 else (0,1)
if effect<len(LEVELS) and tree in (0,1) and cloud in (0,1) and shop<5 and names in (0,1):
self.effect=effect;self.tree=tree==1;self.cloud=cloud==1;self.shopRange=shop;self.npcNames=names==1
def Dump(self):return '%d %d %d'%(self.effect,int(self.tree),int(self.cloud))
def Dump(self):return '%d %d %d %d %d'%(self.effect,int(self.tree),int(self.cloud),self.shopRange,int(self.npcNames))
def Apply(self):
systemSetting.SetEffectLevel(self.effect)
systemSetting.SetShopNamesRange(self.shopRange)
systemSetting.SetShopNameStatus(self.npcNames)
background.SetVisiblePart(background.PART_TREE,int(self.tree))
background.SetVisiblePart(background.PART_CLOUD,int(self.cloud))
@@ -55,7 +59,7 @@ def Mark(text,on):return L(B(u'【%s】'%text if on else text))
class DisplayWindow(ui.Window):
def __init__(self,options):
ui.Window.__init__(self);self.SetWindowName('DisplayWindow');self.AddFlag('float');self.AddFlag('movable')
self.options=options;self.SetSize(332,404)
self.options=options;self.SetSize(332,456)
self.heading=Text(self,18,18,'显示设置',0xffffd68b)
self.closeButton=Action(self,256,6,60,'关闭',self.Hide)
self.effectText=Text(self,18,54,'特效',0xffc3b7a1)
@@ -65,10 +69,12 @@ class DisplayWindow(ui.Window):
self.cloudButton=Action(self,170,260,144,'',self.ToggleCloud)
self.nameButton=Action(self,18,312,144,'',self.ToggleName)
self.damageButton=Action(self,170,312,144,'',self.ToggleDamage)
self.status=Text(self,18,376,'',0xffc3b7a1)
self.rangeButton=Action(self,18,364,144,'',self.NextRange)
self.npcButton=Action(self,170,364,144,'',self.ToggleNPC)
self.status=Text(self,18,428,'',0xffc3b7a1)
self.Refresh();self.Hide()
def Buttons(self):return [self.closeButton,self.treeButton,self.cloudButton,self.nameButton,self.damageButton]+self.levelButtons
def Buttons(self):return [self.closeButton,self.treeButton,self.cloudButton,self.nameButton,self.damageButton,self.rangeButton,self.npcButton]+self.levelButtons
def Open(self):self.Refresh();self.SetCenterPosition();self.Show();self.SetTop()
@@ -80,6 +86,10 @@ class DisplayWindow(ui.Window):
def ToggleCloud(self):self.options.cloud=not self.options.cloud;self.Changed()
def NextRange(self):self.options.shopRange=(self.options.shopRange+1)%5;self.Changed()
def ToggleNPC(self):self.options.npcNames=not self.options.npcNames;self.Changed()
# Names and damage numbers are the original game options (saved by the client config on exit).
def ToggleName(self):systemSetting.SetAlwaysShowNameFlag(not systemSetting.IsAlwaysShowName());self.Refresh()
@@ -91,6 +101,8 @@ class DisplayWindow(ui.Window):
self.treeButton.SetText(Mark(u'显示树木',o.tree));self.cloudButton.SetText(Mark(u'显示云',o.cloud))
self.nameButton.SetText(Mark(u'总是显示名字',systemSetting.IsAlwaysShowName()))
self.damageButton.SetText(Mark(u'显示伤害数字',systemSetting.IsShowDamage()))
self.rangeButton.SetText(L(B(u'摊位范围 %d 米'%((100,60,40,20,10)[o.shopRange]))))
self.npcButton.SetText(Mark(u'显示NPC名称',o.npcNames))
self.status.SetText(L(LEVEL_HINTS[o.effect]))
def OnRender(self):