Files
shenandClaude Sonnet 5 2277b1dd60 Vendor Metin2 assets (assets/ + bgm/)
Committed to this self-hosted private repo so a clone builds on any machine
without a separate asset sync. Copyrighted Ymir art — do not publish or
redistribute. 54198 files, ~2.2 GB. asset_index.txt / assets.zip stay
gitignored (derived: bake_asset_index.gd / pack-assets.sh).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013EJxkHiNKS4kybHS3XKyAJ
2026-08-31 20:04:32 +09:00

140 lines
3.3 KiB
Python

import ui
import player
import item
import wndMgr
import net
class SelectItemWindow(ui.ScriptWindow):
def __init__(self):
ui.ScriptWindow.__init__(self)
self.tooltipItem = None
self.inventorySlotPosDict = {}
self.LoadWindow()
def __del__(self):
ui.ScriptWindow.__del__(self)
def LoadWindow(self):
try:
PythonScriptLoader = ui.PythonScriptLoader()
PythonScriptLoader.LoadScriptFile(self, "UIScript/selectitemwindow.py")
except:
import exception
exception.Abort("ItemSelectWindow.LoadDialog.LoadObject")
try:
GetObject = self.GetChild
self.board = GetObject("board")
self.titleBar = GetObject("TitleBar")
self.itemSlot = GetObject("ItemSlot")
self.btnExit = GetObject("ExitButton")
except:
import exception
exception.Abort("ItemSelectWindow.LoadDialog.BindObject")
self.titleBar.SetCloseEvent(ui.__mem_func__(self.Close))
self.btnExit.SetEvent(ui.__mem_func__(self.Close))
self.itemSlot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
self.itemSlot.SAFE_SetButtonEvent("LEFT", "EXIST", self.SelectItemSlot)
self.itemSlot.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
self.itemSlot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
def Open(self):
self.RefreshSlot()
self.Show()
def Close(self):
wndMgr.OnceIgnoreMouseLeftButtonUpEvent()
net.SendSelectItemPacket(0)
self.Hide()
def SetItemToolTip(self, tooltipItem):
self.tooltipItem = tooltipItem
def SelectItemSlot(self, slotPos):
wndMgr.OnceIgnoreMouseLeftButtonUpEvent()
inventorySlotPos = self.inventorySlotPosDict[slotPos]
net.SendSelectItemPacket(inventorySlotPos)
self.Hide()
def SetTableSize(self, size):
SLOT_X_COUNT = 5
self.itemSlot.ArrangeSlot(0, SLOT_X_COUNT, size, 32, 32, 0, 0)
self.itemSlot.RefreshSlot()
self.itemSlot.SetSlotBaseImage("d:/ymir work/ui/public/Slot_Base.sub", 1.0, 1.0, 1.0, 1.0)
self.board.SetSize(self.board.GetWidth(), 76 + 32*size)
self.SetSize(self.board.GetWidth(), 76 + 32*size)
self.UpdateRect()
def RefreshSlot(self):
slotPos = 0
self.inventorySlotPosDict = {}
getItemVNum=player.GetItemIndex
getItemCount=player.GetItemCount
setItemVNum=self.itemSlot.SetItemSlot
for i in range(player.INVENTORY_PAGE_SIZE*2):
slotNumber = i
itemVNum = getItemVNum(slotNumber)
if 0 == itemVNum:
continue
if not item.IsMetin(itemVNum):
continue
itemGrade = player.GetItemGrade(slotNumber)
if itemGrade > 2:
continue
self.inventorySlotPosDict[slotPos] = i
slotPos += 1
if slotPos > 54:
break
itemCount = len(self.inventorySlotPosDict)
if itemCount < 15:
self.SetTableSize(3)
else:
lineCount = 3
lineCount += (itemCount - 15) // 5
if itemCount % 5:
lineCount += 1
self.SetTableSize(lineCount)
for selectWndPos, inventoryPos in list(self.inventorySlotPosDict.items()):
itemVNum = getItemVNum(inventoryPos)
itemCount = getItemCount(inventoryPos)
if itemCount <= 1:
itemCount = 0
setItemVNum(selectWndPos, itemVNum, itemCount)
self.itemSlot.RefreshSlot()
def OverOutItem(self):
if None != self.tooltipItem:
self.tooltipItem.HideToolTip()
def OverInItem(self, slotIndex):
if None != self.tooltipItem:
inventorySlotPos = self.inventorySlotPosDict[slotIndex]
self.tooltipItem.SetInventoryItem(inventorySlotPos)