Files
metin2-client/src/platform/ScriptLib/WikiEntryScript.inc
T

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";