112 lines
3.4 KiB
C++
112 lines
3.4 KiB
C++
// 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";
|