Skip to content

Instantly share code, notes, and snippets.

@mq1n
Last active September 5, 2025 20:51
Show Gist options
  • Select an option

  • Save mq1n/2825c9f2189e74ddcd8ab11dadfdb0ff to your computer and use it in GitHub Desktop.

Select an option

Save mq1n/2825c9f2189e74ddcd8ab11dadfdb0ff to your computer and use it in GitHub Desktop.
uiPersonalDropManager.py
import app
import player
import net
import chat
import grp
import dbg
import ui
import localeInfo
import uiToolTip
import uiCommon
from _weakref import proxy
WINDOW_WIDTH = 305
WINDOW_HEIGHT = 185
SLIDER_LIMITS = (0, 250)
DEFAULT_SLIDER_VALUE = 100
class PersonalDropWindow(ui.ScriptWindow):
def __init__(self):
ui.ScriptWindow.__init__(self)
self.__children = {}
self.__BuildWindow()
def __del__(self):
ui.ScriptWindow.__del__(self)
def __ValueToSliderPos(self, value):
minValue, maxValue = SLIDER_LIMITS
if maxValue <= minValue:
return 0.0
if value < minValue: value = minValue
elif value > maxValue: value = maxValue
return float(value - minValue) / float(maxValue - minValue)
def __SliderPosToValue(self, pos):
minValue, maxValue = SLIDER_LIMITS
if pos < 0.0: pos = 0.0
elif pos > 1.0: pos = 1.0
value = minValue + (maxValue - minValue) * pos
return int(round(value))
# -------------------------------------------------------------------------
def __BuildWindow(self):
# Root window
self.SetWindowName("PersonalDropWindow")
self.SetSize(WINDOW_WIDTH, WINDOW_HEIGHT)
self.SetCenterPosition()
self.AddFlag("movable")
self.AddFlag("float")
# Main board
board = ui.BoardWithTitleBar()
board.SetParent(self)
board.SetSize(WINDOW_WIDTH, WINDOW_HEIGHT)
board.SetPosition(0, 0)
board.SetTitleName("PersonalDrop")
board.SetCloseEvent(self.Close)
board.AddFlag("attach")
board.Show()
self.__children["board"] = board
SLIDER_TYPES = ("exp", "gold", "item")
for i, sliderType in enumerate(SLIDER_TYPES):
sliderTitle = ui.TextLine()
sliderTitle.SetParent(board)
sliderTitle.SetText(sliderType + ":")
sliderTitle.SetPosition(30, 40 + (30 * i + 10))
sliderTitle.Show()
self.__children["{}_title".format(sliderType)] = sliderTitle
sliderSlider = ui.SliderBar()
sliderSlider.SetParent(board)
sliderSlider.SetSize(WINDOW_WIDTH, 10)
sliderSlider.SetPosition(30 + 35, 40 + (30 * i + 10))
sliderSlider.SetSliderPos(self.__ValueToSliderPos(DEFAULT_SLIDER_VALUE))
sliderSlider.SetEvent(lambda sliderType=sliderType: self.OnSliderChange(sliderType))
sliderSlider.Show()
self.__children["{}_slider".format(sliderType)] = sliderSlider
sliderValue = ui.TextLine()
sliderValue.SetParent(board)
sliderValue.SetText(str(DEFAULT_SLIDER_VALUE))
sliderValue.SetPosition(190 + 70, 40 + (30 * i + 10) - 2)
sliderValue.Show()
self.__children["{}_value".format(sliderType)] = sliderValue
confirmButton = ui.Button()
confirmButton.SetParent(board)
confirmButton.SetUpVisual("d:/ymir work/ui/public/large_button_01.sub")
confirmButton.SetOverVisual("d:/ymir work/ui/public/large_button_02.sub")
confirmButton.SetDownVisual("d:/ymir work/ui/public/large_button_03.sub")
confirmButton.SetText("Confirm")
confirmButton.SetPosition(100, 150)
confirmButton.SetEvent(ui.__mem_func__(self.OnConfirmButtonClick))
confirmButton.Show()
self.__children["confirm_button"] = confirmButton
def OnConfirmButtonClick(self):
expValue = self.__children["exp_value"].GetText()
goldValue = self.__children["gold_value"].GetText()
itemValue = self.__children["item_value"].GetText()
# dbg.TraceError("Confirm button clicked {} {} {}".format(expValue, goldValue, itemValue))
net.SendChatPacket("/personal_drop_mgr {} {} {}".format(expValue, goldValue, itemValue))
def OnSliderChange(self, sliderType):
pos = self.__children["{}_slider".format(sliderType)].GetSliderPos()
self.__children["{}_value".format(sliderType)].SetText(str(self.__SliderPosToValue(pos)))
# dbg.TraceError("Slider({}) changed: {}".format(sliderType, self.__SliderPosToValue(pos)))
def Open(self):
if self.IsShow():
return
self.Show()
self.SetTop()
def Close(self):
self.Hide()
def ToggleWindow(self):
if self.IsShow():
self.Close()
else:
self.Open()
def Destroy(self):
self.Close()
self.ClearDictionary()
def OnPressEscapeKey(self):
self.Close()
return True
def OnKeyDown(self, key):
if key == app.DIK_ESC:
self.OnPressEscapeKey()
return True
return False
# window = PersonalDropWindow()
# window.Open()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment