Last active
September 5, 2025 20:51
-
-
Save mq1n/2825c9f2189e74ddcd8ab11dadfdb0ff to your computer and use it in GitHub Desktop.
uiPersonalDropManager.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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