// PORT query entry points: enemy target, and a pinned touch inventory tooltip. static const char c_szWikiEntryScript[] = R"PY(# -*- coding: utf-8 -*- import sys import chr import player import uitarget import uiToolTip import uiInventory import weakref import wndMgr from mt_biolog import Action import mt_wiki _pinned=None def OpenMob(vid): race=chr.GetVirtualNumber(vid) wiki=mt_wiki.g_window if not wiki:return wiki.Open() row=wiki.catalogue.mobs.get(race) if wiki.catalogue else None if row: wiki.Select('mobs',row);wiki.QueryRemote('mob',race) _target=uitarget.TargetBoard.SetTargetVID _enemy=uitarget.TargetBoard.SetEnemyVID _hp=uitarget.TargetBoard.SetHP def Target(self,vid): _target(self,vid) if hasattr(self,'wikiDropButton'):self.wikiDropButton.Hide() def Enemy(self,vid): _enemy(self,vid) if not hasattr(self,'wikiDropButton'): owner=weakref.proxy(self) self.wikiDropButton=Action(self,0,0,72,'掉落',lambda:OpenMob(owner.GetTargetVID())) PositionTarget(self) self.wikiDropButton.Show() def PositionTarget(self): if getattr(self,'wikiDropButton',None): x,y=self.GetGlobalPosition() self.wikiDropButton.SetPosition(min(self.GetWidth()+4,max(0,wndMgr.GetScreenWidth()-x-76)),0) def HP(self,value): _hp(self,value);PositionTarget(self) _clear=uiToolTip.ItemToolTip.ClearToolTip _inventory=uiToolTip.ItemToolTip.SetInventoryItem _out=uiInventory.InventoryWindow.OverOutItem def Clear(self): if getattr(self,'wikiItemButton',None): self.wikiItemButton.event=None;self.wikiItemButton.Hide();self.wikiItemButton=None if getattr(self,'featurePinned',False):self.SetFollow(True) self.featurePinned=False _clear(self) def Inventory(self,slot,window_type=player.INVENTORY): global _pinned _inventory(self,slot,window_type) mobile=sys.modules.get('mt_mobile_inventory') if not mobile or not mobile.tap:return vnum=player.GetItemIndex(window_type,slot) if not vnum:return owner=weakref.proxy(self) def open_item(): if player.GetItemIndex(window_type,slot)!=vnum:return owner.HideToolTip();mt_wiki.OpenItem(vnum) wiki=mt_wiki.g_window if wiki and wiki.catalogue: row=wiki.catalogue.FindItem(vnum) if row and row['kind'] in ('ITEM_GIFTBOX','ITEM_TREASURE_BOX'):wiki.QueryRemote('chest',vnum) y=self.toolTipHeight self.wikiItemButton=Action(self,8,y,max(80,self.GetWidth()-16),'百科 / 宝箱预览',open_item) self.AppendSpace(52);self.SetFollow(False);self.featurePinned=True;_pinned=weakref.proxy(self) x,y=self.GetGlobalPosition() self.SetPosition(max(0,min(x,wndMgr.GetScreenWidth()-self.GetWidth())),max(0,min(y,wndMgr.GetScreenHeight()-self.GetHeight()))) def Out(self): if self.tooltipItem and getattr(self.tooltipItem,'featurePinned',False):return _out(self) _mobile=sys.modules.get('mt_mobile_inventory') if _mobile: _drag=_mobile.SetDrag def Drag(active): if active and _pinned is not None: try:_pinned.HideToolTip() except ReferenceError:pass _drag(active) _mobile.SetDrag=Drag uitarget.TargetBoard.SetTargetVID=Target uitarget.TargetBoard.SetEnemyVID=Enemy uitarget.TargetBoard.SetHP=HP uiToolTip.ItemToolTip.ClearToolTip=Clear uiToolTip.ItemToolTip.SetInventoryItem=Inventory uiInventory.InventoryWindow.OverOutItem=Out )PY";