-
Posts
64 -
Joined
-
Last visited
-
Feedback
0%
Content Type
Forums
Store
Third Party - Providers Directory
Feature Plan
Release Notes
Docs
Events
Posts posted by Marcos17
-
-
15 hours ago, Ikarus_ said:
Can u paste your uiminimap.py in a pastebin?
I would like to read itThanks for trying to help
-
2 hours ago, Ikarus_ said:
There's a easy&fast way to check if i m correct.
Replace your def Destroy with mine posting here:
def Destroy(self): miniMap.UnregisterAtlasWindow() self.ClearDictionary() self.AtlasMainWindow = None self.tooltipAtlasClose = 0 self.tooltipInfo = None self.infoGuildMark = None self.board = None import dbg references = vars(self) dbg.TraceError("STARTING WITH DUMPING AtlasWindow") for name, value in references.items(): dgb.TraceError("AtlasWindowReference {}={}".format(name, value))
You need to login into game and warp your character, You will find dumping inside your syserr.txt
Let's hypothesize the possible scenarios:
1. The syserr looks empty : Your Destroy function is never called: You must call it
2. The syserr contains strings but all of them has value "None" or numbers/empty lists etc: My guess was wrong, the problem is something else.
3. The syserr contains strings and at least one of them is a reference to an object which makes your AtlasWindow not cleaned enough.
if you need help understanding what scenario you got you can post your syserr heremy syserr:
0318 18:02:31278 :: STARTING WITH DUMPING AtlasWindow
0318 18:02:31278 :: AtlasWindowReference mouseLeftButtonUpEvent=None
0318 18:02:31278 :: AtlasWindowReference mouseLeftButtonDownArgs=None
0318 18:02:31278 :: AtlasWindowReference hWnd=690919656
0318 18:02:31278 :: AtlasWindowReference tooltipInfo=None
0318 18:02:31278 :: AtlasWindowReference AtlasMainWindow=None
0318 18:02:31278 :: AtlasWindowReference baseX=0
0318 18:02:31278 :: AtlasWindowReference baseY=0
0318 18:02:31278 :: AtlasWindowReference moveWindowEvent=None
0318 18:02:31278 :: AtlasWindowReference overInArgs=None
0318 18:02:31278 :: AtlasWindowReference renderArgs=None
0318 18:02:31278 :: AtlasWindowReference mouseLeftButtonDoubleClickEvent=None
0318 18:02:31278 :: AtlasWindowReference mapName=
0318 18:02:31278 :: AtlasWindowReference mouseRightButtonDownArgs=None
0318 18:02:31278 :: AtlasWindowReference board=None
0318 18:02:31278 :: AtlasWindowReference infoGuildMark=None
0318 18:02:31278 :: AtlasWindowReference onMouseLeftButtonUpEvent=None
0318 18:02:31278 :: AtlasWindowReference overInEvent=None
0318 18:02:31278 :: AtlasWindowReference mouseLeftButtonDownEvent=None
0318 18:02:31278 :: AtlasWindowReference ElementDictionary={}
0318 18:02:31278 :: AtlasWindowReference parentWindow=0
0318 18:02:31278 :: AtlasWindowReference mouseLeftButtonUpArgs=None
0318 18:02:31278 :: AtlasWindowReference mouseRightButtonDownEvent=None
0318 18:02:31278 :: AtlasWindowReference overOutEvent=None
0318 18:02:31278 :: AtlasWindowReference renderEvent=None
0318 18:02:31278 :: AtlasWindowReference overOutArgs=None
0318 18:02:31278 :: AtlasWindowReference clickEvent=None
0318 18:02:31278 :: AtlasWindowReference tooltipAtlasClose=0
0318 18:02:31278 :: AtlasWindowReference Children=[] -
On 16/03/2022 at 11:43, Ikarus_ said:
Memory leak.
All references instantiated in the class must be set to None before deleting the object.
Check your class AtlasWindow inside uiminimap.py and search for def Destroy, inside this function you have to move to None all the reference.I looked at the class you referred to and everything seems to be correct, but the error persists =/
Spoilerclass AtlasWindow(ui.ScriptWindow): class AtlasRenderer(ui.Window): def __init__(self): ui.Window.__init__(self) self.AddFlag("not_pick") def OnUpdate(self): miniMap.UpdateAtlas() def OnRender(self): (x, y) = self.GetGlobalPosition() fx = float(x) fy = float(y) miniMap.RenderAtlas(fx, fy) def HideAtlas(self): miniMap.HideAtlas() def ShowAtlas(self): miniMap.ShowAtlas() def __init__(self): self.tooltipInfo = MapTextToolTip() self.tooltipInfo.Hide() self.infoGuildMark = ui.MarkBox() self.infoGuildMark.Hide() self.AtlasMainWindow = None self.mapName = "" self.board = 0 ui.ScriptWindow.__init__(self) def __del__(self): ui.ScriptWindow.__del__(self) def SetMapName(self, mapName): if 949==app.GetDefaultCodePage(): try: self.board.SetTitleName(localeInfo.MINIMAP_ZONE_NAME_DICT[mapName]) except: pass def LoadWindow(self): try: pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "UIScript/AtlasWindow.py") except: import exception exception.Abort("AtlasWindow.LoadWindow.LoadScript") try: self.board = self.GetChild("board") except: import exception exception.Abort("AtlasWindow.LoadWindow.BindObject") self.AtlasMainWindow = self.AtlasRenderer() self.board.SetCloseEvent(self.Hide) self.AtlasMainWindow.SetParent(self.board) self.AtlasMainWindow.SetPosition(7, 30) self.tooltipInfo.SetParent(self.board) self.infoGuildMark.SetParent(self.board) self.SetPosition(wndMgr.GetScreenWidth() - 136 - 256 - 10, 0) self.Hide() miniMap.RegisterAtlasWindow(self) def Destroy(self): miniMap.UnregisterAtlasWindow() self.ClearDictionary() self.AtlasMainWindow = None self.tooltipAtlasClose = 0 self.tooltipInfo = None self.infoGuildMark = None self.board = None def OnUpdate(self): if not self.tooltipInfo: return if not self.infoGuildMark: return self.infoGuildMark.Hide() self.tooltipInfo.Hide() if FALSE == self.board.IsIn(): return (mouseX, mouseY) = wndMgr.GetMousePosition() (bFind, sName, iPosX, iPosY, dwTextColor, dwGuildID) = miniMap.GetAtlasInfo(mouseX, mouseY) if FALSE == bFind: return if "empty_guild_area" == sName: sName = localeInfo.GUILD_EMPTY_AREA if localeInfo.IsARABIC() and sName[-1].isalnum(): self.tooltipInfo.SetText("(%s)%d, %d" % (sName, iPosX, iPosY)) else: self.tooltipInfo.SetText("%s(%d, %d)" % (sName, iPosX, iPosY)) (x, y) = self.GetGlobalPosition() self.tooltipInfo.SetTooltipPosition(mouseX - x, mouseY - y) self.tooltipInfo.SetTextColor(dwTextColor) self.tooltipInfo.Show() self.tooltipInfo.SetTop() if 0 != dwGuildID: textWidth, textHeight = self.tooltipInfo.GetTextSize() self.infoGuildMark.SetIndex(dwGuildID) self.infoGuildMark.SetPosition(mouseX - x - textWidth - 18 - 5, mouseY - y) self.infoGuildMark.Show() def Hide(self): if self.AtlasMainWindow: self.AtlasMainWindow.HideAtlas() self.AtlasMainWindow.Hide() ui.ScriptWindow.Hide(self) def Show(self): if self.AtlasMainWindow: (bGet, iSizeX, iSizeY) = miniMap.GetAtlasSize() if bGet: self.SetSize(iSizeX + 15, iSizeY + 38) if localeInfo.IsARABIC(): self.board.SetPosition(iSizeX+15, 0) self.board.SetSize(iSizeX + 15, iSizeY + 38) #self.AtlasMainWindow.SetSize(iSizeX, iSizeY) self.AtlasMainWindow.ShowAtlas() self.AtlasMainWindow.Show() ui.ScriptWindow.Show(self) def SetCenterPositionAdjust(self, x, y): self.SetPosition((wndMgr.GetScreenWidth() - self.GetWidth()) / 2 + x, (wndMgr.GetScreenHeight() - self.GetHeight()) / 2 + y) def OnPressEscapeKey(self): self.Hide() return TRUE
-
I'm also having the same problem, did anyone find a solution please?
-
On 4/6/2020 at 12:02 PM, duwen123 said:
Olá! Em primeiro lugar, desculpe pelo meu mau inglês
Eu tenho um problema com meu switchbot, bônus de 6/7 para ser mais específico. Os bônus de 1 a 5 são bons, todos funcionam bem com o Switchbot.
Quando eu seleciono um bônus de 6/7 no switchbot, ele funciona. Ele muda até que o bônus esteja no item. MAS quando eu seleciono 2 bônus, ele muda infinitamente. Tipo, não para quando atinge esses bônus.
Eu fiquei lá por 3 minutos seguidos e supervisionei, e chegou a 2 bônus por 3 vezes no mínimo. te dou um exemplo:
Eu seleciono esses dois bônus 6/7: Max HP e INT. E quando eu pressiono Start, ele muda os bônus, mas quando chega a esses 2 bônus, ele não para. Vai mais longe.
Este é o meu switchbot.py:Hope this helps
Spoilerimport shop import player import item import ui import game import net import locale import chat import grp import wndMgr import mouseModule from uitooltip import ItemToolTip # Project by Mijago # Bot Update by Metin2 WEAR_NAMES = ItemToolTip.WEAR_NAMES AFFECT_DICT = ItemToolTip.AFFECT_DICT #Bonus BONI_AVAIL = [1,2,3,4,5,6,7,9,10,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,41,43,44,45,48,53,59,60,61,62,63,71,72,78,79,80,81] #Bonus Jola BONI_RARE_AVAIL = [3,4,5,6,59,60,61,62,63,78,79,80,81,53] #ID dos itens Especiais SWITCH_VNUM = 71084 SWITCH_RARE_VNUM = 71052 #Delay Minimo e maximo MIN_SWITCH_DELAY = 35 MAX_SWITCH_DELAY_APPEND = 120 #Maximo de Itens a ser rodados MAX_NUM = 8 proposals = { 1: { # 1 = Weapon "PVP (Corp)":[ [9,10], [15,10], [17,10], [16,10], [5,8], [3,8], ], "PVP (Mental)":[ [9,10], [15,10], [17,10], [6,8], [5,10], [16,10], ], "PVM": [ [5,10], [19,20], ], }, 2: [ # Armor [ #BODY, ], [ #HEAD, ], [ #SHIELD, ], [ #WRIST, ], [ #FOOTS, ], [ #NECK, ], [ #EAR, ], ], } # Farben :) # COLOR_BG = grp.GenerateColor(0.0, 0.0, 0.0, 0.5) # COLOR_INACTIVE = grp.GenerateColor(0.0, 0.0, 1.0, 0.2) # COLOR_ACTIVE = grp.GenerateColor(0.1, 0.6, 1.0, 0.2) # COLOR_FINISHED = grp.GenerateColor(0.0, 0.8, 1.0, 0.3) # COLOR_INACTIVE_RARE = grp.GenerateColor(0.0, 0.2, 1.0, 0.2) # COLOR_ACTIVE_RARE = grp.GenerateColor(0.2, 0.7, 1.0, 0.2) # COLOR_HIGHLIGHT_RARE = grp.GenerateColor(0.2, 0.2, 1.0, 0.05) # COLOR_PIN_HINT = grp.GenerateColor(0.0, 0.5, 1.0, 0.3) # COLOR_CHECKBOX_NOT_SELECTED = grp.GenerateColor(0.0, 0.3, 1.0, 0.1) # COLOR_CHECKBOX_SELECTED = grp.GenerateColor(0.0, 0.3, 1.0, 0.3) # Standardfarben: COLOR_BG = grp.GenerateColor(0.0, 0.0, 0.0, 0.5) COLOR_INACTIVE = grp.GenerateColor(1.0, 0.0, 0.0, 0.2) COLOR_ACTIVE = grp.GenerateColor(1.0, 0.6, 0.1, 0.2) COLOR_FINISHED = grp.GenerateColor(0.0, 1.0, 0.0, 0.2) COLOR_INACTIVE_RARE = grp.GenerateColor(1.0, 0.2, 0.0, 0.2) COLOR_ACTIVE_RARE = grp.GenerateColor(1.0, 0.7, 0.2, 0.2) COLOR_HIGHLIGHT_RARE = grp.GenerateColor(1.0, 0.2, 0.2, 0.05) COLOR_PIN_HINT = grp.GenerateColor(0.0, 0.5, 1.0, 0.3) COLOR_CHECKBOX_NOT_SELECTED = grp.GenerateColor(1.0, 0.3, 0.0, 0.1) COLOR_CHECKBOX_SELECTED = grp.GenerateColor(0.3, 1.0, 1.0, 0.3) DISTANCE_BOTTOM = 36 class Bar(ui.Bar): def __init__(self,layer = "UI"): ui.Bar.__init__(self,layer) def SetColor(self,color): wndMgr.SetColor(self.hWnd, color) self.color = color class BonusSelector(ui.Bar): def Activate(self): self.sub_parent.resetSwitch() self.Status_new.SetColor(COLOR_ACTIVE) self.sub_parent.StatusBar.SetColor(COLOR_ACTIVE) self.sub_parent.StatusText.SetText("Ativo") self.Starter.SetText("Switch ("+str(self.index+1)+") parado.") self.sub_parent.boni_active = 1 #if self.parentWindow.parentWindow.gameWindow != None: # self.sub_parent.blockBar.swib_normal.SetColor(COLOR_ACTIVE) #pass def Deactivate(self): self.sub_parent.resetSwitch() self.Status_new.SetColor(COLOR_INACTIVE) self.sub_parent.StatusBar.SetColor(COLOR_INACTIVE) self.sub_parent.StatusText.SetText("Inativo") self.Starter.SetText("Switch ("+str(self.index+1)+") iniciado.") self.sub_parent.boni_active = 0 #if self.sub_parent.parentWindow.parentWindow.gameWindow != None: # self.sub_parent.blockBar.swib_normal.SetColor(COLOR_INACTIVE) #pass def Activate_rare(self): self.sub_parent.resetSwitch_rare() self.sub_parent.StatusBar_rare.SetColor(COLOR_ACTIVE_RARE) self.sub_parent.StatusText_rare.SetText("6/7 Ativo") self.Starter_rare_boni.SetText("6/7 parado") self.sub_parent.boni_rare_active = 1 #if self.parentWindow.parentWindow.gameWindow != None: # self.sub_parent.blockBar.swib_rare.SetColor(COLOR_ACTIVE_RARE) #pass def Deactivate_rare(self): self.sub_parent.resetSwitch_rare() # self.Status_new.SetColor(COLOR_INACTIVE) self.sub_parent.StatusBar_rare.SetColor(COLOR_INACTIVE_RARE) self.sub_parent.StatusText_rare.SetText("6/7 Inativo") self.Starter_rare_boni.SetText("6/7 iniciar") self.Starter_rare_boni.SetUp() self.sub_parent.boni_rare_active = 0 #if self.sub_parent.parentWindow.parentWindow.gameWindow != None: # self.sub_parent.blockBar.swib_rare.SetColor(COLOR_INACTIVE_RARE) #pass def Finish(self): self.Status_new.SetColor(COLOR_FINISHED) self.sub_parent.StatusBar.SetColor(COLOR_FINISHED) self.sub_parent.StatusText.SetText("Pronto") self.Starter.SetText("Switch ("+str(self.index+1)+") continuar") self.sub_parent.boni_active = 0 if self.sub_parent.parentWindow.parentWindow.gameWindow != None: self.sub_parent.blockBar.swib_normal.SetColor(COLOR_FINISHED) pass def Finish_rare(self): # self.Status_new.SetColor(COLOR_FINISHED) self.sub_parent.StatusBar_rare.SetColor(COLOR_FINISHED) self.sub_parent.StatusText_rare.SetText("6/7 Pronto") self.Starter_rare_boni.SetText("6/7 continuar") self.sub_parent.boni_rare_active = 0 if self.sub_parent.parentWindow.parentWindow.gameWindow != None: self.sub_parent.blockBar.swib_rare.SetColor(COLOR_FINISHED) pass def Block(self): self.BlockBar.Show() self.BlockBar.sub.Show() self.Starter.Hide() pass def Unblock(self): self.BlockBar.sub.Hide() self.BlockBar.Hide() self.Starter.Show() pass def enable_rare_boni(self): for i in range(0,4): self.boni[6][i].Show() self.boni[7][i].Show() self.Starter.SetPosition(0,140+45) self.bg_rare_boni.Show() self.bg_rare_boni_but.Show() self.Starter_rare_boni.Show() self.sub_parent.StatusBar_rare.Show() if self.sub_parent.parentWindow.parentWindow.gameWindow != None: self.sub_parent.blockBar.Enable_rare(1) def disable_rare_boni(self): for i in range(0,4): self.boni[6][i].Hide() self.boni[7][i].Hide() self.Starter.SetPosition(0,140) self.bg_rare_boni.Hide() self.bg_rare_boni_but.Hide() self.Starter_rare_boni.Hide() self.sub_parent.StatusBar_rare.Hide() self.Deactivate_rare() if self.sub_parent.parentWindow.parentWindow.gameWindow != None: self.sub_parent.blockBar.Enable_rare(0) def __init__(self,sub_parent): ui.Bar.__init__(self, "UI") self.sub_parent = sub_parent self.index = sub_parent.index self.SetColor(COLOR_BG) self.SetSize(500,315+10) self.boni = {} self.Status_new = ui.Bar() self.Status_new.SetParent(self) self.Status_new.SetColor(COLOR_INACTIVE) self.Status_new.SetSize(500,5) self.Status_new.Show() self.bg_rare_boni = ui.Bar() self.bg_rare_boni.SetColor(COLOR_HIGHLIGHT_RARE) self.bg_rare_boni.SetParent(self) self.bg_rare_boni.SetPosition(0,132) self.bg_rare_boni.SetSize(500,51) self.bg_rare_boni.Hide() self.bg_rare_boni_but = ui.Bar() self.bg_rare_boni_but.SetColor(COLOR_HIGHLIGHT_RARE) self.bg_rare_boni_but.SetParent(self) self.bg_rare_boni_but.SetPosition(400,133+50) self.bg_rare_boni_but.SetSize(100,25) self.bg_rare_boni_but.Hide() self.EnableRareBoni = CheckBox("6/7 Ativar") self.EnableRareBoni.SetParent(self) self.EnableRareBoni.SetPosition(10,270) self.EnableRareBoni.eventUp = self.disable_rare_boni self.EnableRareBoni.eventDown = self.enable_rare_boni self.EnableRareBoni.Show() self.Starter = ui.ToggleButton() self.Starter.SetWindowHorizontalAlignCenter() self.Starter.SetParent(self) self.Starter.SetUpVisual("d:/ymir work/ui/public/XLarge_Button_01.sub") self.Starter.SetOverVisual("d:/ymir work/ui/public/XLarge_button_02.sub") self.Starter.SetDownVisual("d:/ymir work/ui/public/XLarge_button_03.sub") self.Starter.SetPosition(0,140) self.Starter.SetText("Bot iniciado") self.Starter.SetToggleDownEvent(self.Activate) self.Starter.SetToggleUpEvent(self.Deactivate) self.Starter.Show() self.Starter_rare_boni = ui.ToggleButton() self.Starter_rare_boni.SetWindowHorizontalAlignCenter() self.Starter_rare_boni.SetParent(self) self.Starter_rare_boni.SetUpVisual("d:/ymir work/ui/public/Large_Button_01.sub") self.Starter_rare_boni.SetOverVisual("d:/ymir work/ui/public/Large_button_02.sub") self.Starter_rare_boni.SetDownVisual("d:/ymir work/ui/public/Large_button_03.sub") self.Starter_rare_boni.SetPosition(200,140+45) self.Starter_rare_boni.SetText("6/7 iniciar") self.Starter_rare_boni.SetToggleDownEvent(self.Activate_rare) self.Starter_rare_boni.SetToggleUpEvent(self.Deactivate_rare) self.Starter_rare_boni.Hide() for i in range(7,5,-1): vas = i self.boni[vas] = {} self.boni[vas][0] = ui.TextLine() self.boni[vas][0].SetParent(self) self.boni[vas][0].SetText("Bonus "+str(vas)) self.boni[vas][0].SetPosition(15,10+25*(vas-1)) self.boni[vas][0].Hide() self.boni[vas][1] = DropDown(self,"- Vazio -") self.boni[vas][1].SetPosition(70,10+25*(vas-1)) for x in AFFECT_DICT: if x in BONI_RARE_AVAIL: self.boni[vas][1].AppendItem(str(AFFECT_DICT[x](0)),x) self.boni[vas][1].SetSize(330,20) self.boni[vas][1].Hide() self.boni[vas][2] = ui.Bar("UI") self.boni[vas][2].SetParent(self) self.boni[vas][2].SetPosition(410,10+25*(vas-1)) self.boni[vas][2].SetColor(0xC0000000) self.boni[vas][2].SetSize(80,20) self.boni[vas][2].Hide() self.boni[vas][3] = Edit2("0",14) self.boni[vas][3].SetParent(self.boni[vas][2]) self.boni[vas][3].SetNumberMode() self.boni[vas][3].SetSize(80,20) self.boni[vas][3].SetPosition(4,3) self.boni[vas][3].Hide() for i in range(0,5): vas = 5-i self.boni[vas] = {} self.boni[vas][0] = ui.TextLine() self.boni[vas][0].SetParent(self) self.boni[vas][0].SetText("Bonus "+str(vas)) self.boni[vas][0].SetPosition(15,10+25*(vas-1)) self.boni[vas][0].Show() self.boni[vas][1] = DropDown(self,"- Vazio -") self.boni[vas][1].SetPosition(70,10+25*(vas-1)) for x in AFFECT_DICT: if x in BONI_AVAIL: self.boni[vas][1].AppendItem(str(AFFECT_DICT[x](0)),x) self.boni[vas][1].SetSize(330,20) self.boni[vas][1].Show() self.boni[vas][2] = ui.Bar("UI") self.boni[vas][2].SetParent(self) self.boni[vas][2].SetPosition(410,10+25*(vas-1)) self.boni[vas][2].SetColor(0xC0000000) self.boni[vas][2].SetSize(80,20) self.boni[vas][2].Show() self.boni[vas][3] = Edit2("0",14) self.boni[vas][3].SetParent(self.boni[vas][2]) self.boni[vas][3].SetNumberMode() self.boni[vas][3].SetSize(80,20) self.boni[vas][3].SetPosition(4,3) self.boni[vas][3].Show() self.but_propose = DropDown(self,'Adds Feitos',0) self.but_propose.SetParent(self) self.but_propose.SetPosition(380,295) self.but_propose.OnChange=self.change_boni self.but_propose.Show() self.BlockBar = ui.Bar() self.BlockBar.SetParent(self) self.BlockBar.SetColor(COLOR_INACTIVE) self.BlockBar.SetPosition(0,5) self.BlockBar.SetSize(500,170-5+35+2) self.BlockBar.Hide() self.BlockBar.sub = ui.Bar() self.BlockBar.sub.SetParent(self) self.BlockBar.sub.SetColor(COLOR_INACTIVE) self.BlockBar.sub.SetPosition(500-122,5+170-5+35+2) self.BlockBar.sub.SetSize(122,30) self.BlockBar.sub.Hide() self.BlockText = ui.TextLine() self.BlockText.SetParent(self.BlockBar) self.BlockText.SetWindowHorizontalAlignCenter() self.BlockText.SetHorizontalAlignCenter() self.BlockText.SetPosition(0,140) self.BlockText.SetText("Este item não pode ser rodado.") self.BlockText.Show() self.prepare_propose() def change_boni(self): use = self.but_propose.DropList.GetSelectedItem().value bon = 1 item.SelectItem(self.sub_parent.vnum) for x in use: # TODO: Check if bonus exists on item!! ok = 1 for i in xrange(item.ITEM_APPLY_MAX_NUM): (affectType, affectValue) = item.GetAffect(i) if affectType == x[0]: ok = 0 if ok == 0: continue y = self.boni[bon][1] y.SelectByAffectId(x[0]) self.boni[bon][1].act.SetText(y.DropList.GetSelectedItem().textBox.GetText()) self.boni[bon][3].SetText(str(x[1])) bon+=1 for x in range(bon,6): y = self.boni[x][1].DropList y.SelectIndex(0) self.boni[x][1].act.SetText(y.GetSelectedItem().textBox.GetText()) self.boni[x][3].SetText("0") def prepare_propose(self): self.but_propose.DropList.RemoveAllItems() self.but_propose.maxh = 95 self.but_propose.c = 0 self.but_propose.AppendItem("Nenhum",[]) item.SelectItem(self.sub_parent.vnum) type = item.GetItemType() use = proposals[type] if type == 2: use = use[item.GetItemSubType()] for prop in use: self.but_propose.AppendItem(prop,use[prop]) class ItemTabBar(ui.Window): class BlockBar(ui.Window): size_res = 32 multi = 1 def SetSize(self,i=1): self.multi = i ui.Window.SetSize(self,self.size_res,self.size_res*i) if self.rare_enabled == 1: self.swib_normal.SetSize(self.size_res,self.size_res*i/3*2) pos1 = int(1.0*self.size_res*i/3.0*2.0) self.swib_normal.SetSize(self.size_res,pos1) self.swib_rare.SetSize(self.size_res,self.size_res*i-pos1) self.swib_rare.SetPosition(0,pos1) self.swib_rare.Show() else: self.swib_normal.SetSize(self.size_res,self.size_res*i) self.swib_rare.Hide() def Enable_rare(self,o = 1): self.rare_enabled = o self.SetSize(self.multi) def __init__(self): ui.Window.__init__(self) self.rare_enabled = 0 self.swib_normal = ui.Bar() self.swib_normal.SetParent(self) self.swib_normal.SetSize(self.size_res,self.size_res*self.multi) self.swib_normal.SetColor(COLOR_INACTIVE) self.swib_normal.SetPosition(0,0) self.swib_normal.Show() self.swib_rare = ui.Bar() self.swib_rare.SetParent(self) self.swib_rare.SetSize(self.size_res,self.size_res) self.swib_rare.SetColor(COLOR_INACTIVE_RARE) self.swib_rare.SetPosition(0,0) self.swib_rare.Hide() self.SetSize(1) class ItemTab(ui.Bar): height_selected = 36*3+8 height_unselected = 36*3+5 def Destroy(self): self.parentWindow.parentWindow.enable_rebuy.SetParent(self.parentWindow.parentWindow) self.parentWindow.parentWindow.but_speed.SetParent(self.parentWindow.parentWindow) self.parentWindow.parentWindow.help_show_rare.SetParent(self.parentWindow.parentWindow) self.parentWindow.parentWindow.help_rebuy.SetParent(self.parentWindow.parentWindow) # self.parentWindow.parentWindow.help_stop_all.SetParent(self.parentWindow.parentWindow) self.parentWindow.parentWindow.help_duration.SetParent(self.parentWindow.parentWindow) # self.parentWindow.parentWindow.but_deactivate_all.SetParent(self.parentWindow.parentWindow) # self.parentWindow.parentWindow.but_deactivate_all.Hide() self.parentWindow.parentWindow.enable_rebuy.Hide() self.parentWindow.parentWindow.but_speed.Hide() self.bonusSelector.Hide() self.bonusSelector.__del__() self.Hide() self.__del__() def DeleteMe(self): self.parentWindow.DeleteTab(self.tabnum) def __init__(self,parent,tabnum,index = 0,vnum = 0): ## Init ItemTab ui.Bar.__init__(self) self.SetColor(COLOR_BG) self.SetSize(self.width,self.height_unselected) self.index = index self.tabnum = tabnum self.vnum = vnum self.count = 0 self.count_rare = 0 self.parentWindow = parent self.SetParent(parent) #if self.parentWindow.parentWindow.gameWindow != None: # self.blockBar = ItemTabBar.BlockBar() # self.blockBar.SetParent(self.parentWindow.parentWindow.gameWindow.interface.wndInventory.wndItem) # ipi = self.parentWindow.parentWindow.gameWindow.interface.wndInventory.inventoryPageIndex # self.blockBar.Show() # ip2 = self.index - ipi*45 # self.blockBar.SetPosition(((ip2-int(ip2/5)*5)*self.blockBar.size_res),int(ip2/5)*self.blockBar.size_res) self.ItemIcon = ui.ImageBox() self.ItemIcon.SetParent(self) self.ItemIcon.AddFlag("not_pick") self.ItemIcon.SetWindowHorizontalAlignCenter() self.ItemIcon.SetWindowVerticalAlignCenter() self.ItemIcon.Show() self.SlotName = ui.TextLine() self.SlotName.SetParent(self) self.SlotName.SetWindowHorizontalAlignCenter() self.SlotName.SetHorizontalAlignCenter() self.SlotName.SetPosition(0,5) self.SlotName.SetText("Slot %d" % (self.index+1)) self.SlotName.AddFlag("not_pick") self.SlotName.Show() self.StatusBar = Bar() # Special Bar self.StatusBar.SetParent(self) self.StatusBar.SetWindowVerticalAlignBottom() self.StatusBar.SetSize(self.width,20) self.StatusBar.SetPosition(0,20) self.StatusBar.SetColor(COLOR_INACTIVE) self.StatusBar.AddFlag("not_pick") self.StatusBar.Show() self.StatusText = ui.TextLine() self.StatusText.SetParent(self.StatusBar) # self.StatusText.SetParent(self) self.StatusText.SetWindowHorizontalAlignCenter() self.StatusText.SetWindowVerticalAlignCenter() self.StatusText.SetHorizontalAlignCenter() self.StatusText.SetVerticalAlignCenter() self.StatusText.SetPosition(0,0) self.StatusText.SetText("Inativo") self.StatusText.Show() self.StatusBar_rare = Bar() # Special Bar self.StatusBar_rare.SetParent(self) self.StatusBar_rare.SetWindowVerticalAlignBottom() self.StatusBar_rare.SetSize(self.width,20) self.StatusBar_rare.SetPosition(0,40) self.StatusBar_rare.SetColor(COLOR_INACTIVE_RARE) self.StatusBar_rare.AddFlag("not_pick") self.StatusBar_rare.Hide() self.StatusText_rare = ui.TextLine() self.StatusText_rare.SetParent(self.StatusBar_rare) self.StatusText_rare.SetWindowHorizontalAlignCenter() self.StatusText_rare.SetWindowVerticalAlignCenter() self.StatusText_rare.SetHorizontalAlignCenter() self.StatusText_rare.SetVerticalAlignCenter() self.StatusText_rare.SetPosition(0,0) self.StatusText_rare.SetText("6/7 Inativo") self.StatusText_rare.Show() self.CloseBut = ui.Button() self.CloseBut.SetParent(self) self.CloseBut.SetUpVisual("d:/ymir work/ui/public/close_button_01.sub") self.CloseBut.SetOverVisual("d:/ymir work/ui/public/close_button_02.sub") self.CloseBut.SetDownVisual("d:/ymir work/ui/public/close_button_03.sub") self.CloseBut.SetToolTipText("Fechar Aba", 0, -23) self.CloseBut.SetEvent(self.DeleteMe) self.CloseBut.SetPosition(0,0) self.CloseBut.Show() self.OnMouseLeftButtonDown = lambda: self.Select() self.boni_active = 0 self.boni_rare_active = 0 self.bonusSelector = BonusSelector(self) self.bonusSelector.SetParentProxy(self.parentWindow.parentWindow) self.bonusSelector.SetPosition(10,35+36*3+4*2) self.bonusSelector.Hide() self.vnum = 0 self.SetIndex(index) self.resetSwitch() self.resetSwitch_rare() def IsActive(self): return self.boni_active == 1 def IsActive_rare(self): return self.boni_rare_active == 1 def SetParentProxy(self,parent): ui.Bar.SetParentProxy(self,parent) def Select(self): for a in self.parentWindow.tabList: self.parentWindow.tabList[a].UnSelect() self.parentWindow.tabList[a].bonusSelector.Hide() self.bonusSelector.Show() self.SetSize(self.width,self.height_selected) self.Update() # self.parentWindow.parentWindow.but_deactivate_all.SetParent(self.bonusSelector) # self.parentWindow.parentWindow.but_deactivate_all.SetPosition(415-10,200+10) # self.parentWindow.parentWindow.but_deactivate_all.Show() self.parentWindow.parentWindow.enable_rebuy.SetParent(self.bonusSelector) self.parentWindow.parentWindow.enable_rebuy.SetPosition(10,285+10) self.parentWindow.parentWindow.enable_rebuy.Show() self.parentWindow.parentWindow.but_speed.SetParent(self.bonusSelector) self.parentWindow.parentWindow.but_speed.SetPosition(0,290+10) self.parentWindow.parentWindow.but_speed.Show() self.parentWindow.parentWindow.help_show_rare.SetParent(self.bonusSelector) self.parentWindow.parentWindow.help_rebuy.SetParent(self.bonusSelector) # self.parentWindow.parentWindow.help_stop_all.SetParent(self.bonusSelector) self.parentWindow.parentWindow.help_duration.SetParent(self.bonusSelector) def UnSelect(self): self.SetSize(self.width,self.height_unselected) self.Update() def Update(self): self.StatusBar.SetPosition(0,20) self.SetPosition((self.width+self.dist)*self.tabnum,0) self.SlotName.SetText("Slot %d" % (self.index+1)) def resetSwitch(self): self.values = [0,0,0,0,0] def resetSwitch_rare(self): self.values_rare = [0,0] # last_switch = -1 rebuyed = 0 def nachkauf(self): if self.parentWindow.parentWindow.buyed != 0: return else: self.parentWindow.parentWindow.buyed = 1 if self.parentWindow.parentWindow.enable_rebuy.checked == 1: for i in range(0,shop.SHOP_SLOT_COUNT): me = shop.GetItemID(i) if me == SWITCH_VNUM: if shop.GetItemPrice(i) > player.GetMoney(): # chat.AppendChat(1,"-- Switchitem gefunden! Aber wir haben kein Geld :(") self.bonusSelector.Deactivate() return else: net.SendShopBuyPacket(i) self.rebuyed = 1 # self.Switch() return rebuyed_rare = 0 def nachkauf_rare(self): if self.parentWindow.parentWindow.buyed_rare != 0: return else: self.parentWindow.parentWindow.buyed_rare = 1 if self.parentWindow.parentWindow.enable_rebuy.checked == 1: for i in range(0,shop.SHOP_SLOT_COUNT): me = shop.GetItemID(i) if me == SWITCH_RARE_VNUM: if shop.GetItemPrice(i) > player.GetMoney(): # chat.AppendChat(1,"-- Switchitem gefunden! Aber wir haben kein Geld :(") self.bonusSelector.Deactivate_rare() return else: net.SendShopBuyPacket(i) self.rebuyed_rare = 1 # self.Switch() return # self.bonusSelector.Deactivate() def Switch_rare(self): lc = 0 for i in range(0,90*2): if player.GetItemIndex(i) == SWITCH_RARE_VNUM: lc+=player.GetItemCount(i) if lc == 0 and self.parentWindow.parentWindow.enable_rebuy.checked == 0: chat.AppendChat(2,"Slot %d: 6/7 Switch bonus quebrados -> nenhum item foi bem sucedido." % (self.index+1)) self.bonusSelector.Deactivate_rare() return if lc < 15: self.nachkauf_rare() if lc == 0: self.bonusSelector.Deactivate_rare() chat.AppendChat(2,"Slot %d: 6/7 Switch cancelado -> Não há arumaka disponível." % (self.index+1)) return for i in range(0,90*2): if player.GetItemIndex(i) == SWITCH_RARE_VNUM: net.SendItemUseToItemPacket(i,self.index) return def Switch(self): lc = 0 for i in range(0,90*2): if player.GetItemIndex(i) == SWITCH_VNUM: lc+=player.GetItemCount(i) if lc == 0 and self.parentWindow.parentWindow.enable_rebuy.checked == 0: self.bonusSelector.Deactivate() return if lc < 15: self.nachkauf() if lc == 0: self.bonusSelector.Deactivate() return for i in range(0,90*2): if player.GetItemIndex(i) == SWITCH_VNUM: net.SendItemUseToItemPacket(i,self.index) return # self.nachkauf() def checkSwitch(self): ok = 0 for i in range(0,5): if player.GetItemAttribute(self.index, i) != self.values[i]: ok = 1 self.prob = self.GetProb() self.StatusText.SetText("Ativo (%d%%)" %self.prob) if ok == 1 or self.prob >= 90: if self.prob >= 90: chat.AppendChat(1,"Slot %d: pronto!" % (self.index+1)) self.bonusSelector.Finish() return self.values = [player.GetItemAttribute(self.index, i) for i in range(0,5)] self.Switch() elif self.rebuyed > 0: self.rebuyed = 0 self.Switch() elif ok == 0 and self.count < 5: self.count+=1 elif ok == 0 and self.count >= 5: self.count = 0 self.Switch() # elif self.last_switch > -1 and player.GetItemCount(self.last_switch) == 0: # chat.AppendChat(2,"%d"%player.GetItemCount(self.last_switch)) # self.last_switch = 0 # self.Switch() # else: # if self.GetProb() != 100: # self.Switch() pass def checkSwitch_rare(self): ok = 0 for i in range(0,2): if player.GetItemAttribute(self.index, i+6) != self.values_rare[i]: ok = 1 self.prob_rare = self.GetProb_rare() self.StatusText_rare.SetText("Ativo (%d%%)" %self.prob_rare) if ok == 1 or self.prob_rare >= 90: if self.prob_rare >= 90: self.bonusSelector.Finish_rare() chat.AppendChat(1,"Slot %d: 6/7 pronto!" % (self.index+1)) return self.values_rare = [player.GetItemAttribute(self.index, i) for i in range(5,7)] self.Switch_rare() elif self.rebuyed_rare > 0: self.rebuyed_rare = 0 self.Switch_rare() elif ok == 0 and self.count_rare < 5: self.count_rare+=1 elif ok == 0 and self.count_rare >= 5: self.count_rare = 0 self.Switch_rare() pass def UpdateItem(self): # try: vnum = player.GetItemIndex(self.index) if vnum == 0 and self.vnum != 0: self.resetSwitch() self.resetSwitch_rare() self.vnum = 0 self.bonusSelector.Deactivate() self.bonusSelector.Block() self.bonusSelector.prepare_propose() self.ItemIcon.Hide() #if self.parentWindow.parentWindow.gameWindow != None: # self.blockBar.SetSize(1) #return elif vnum != self.vnum: self.resetSwitch() self.resetSwitch_rare() self.vnum = vnum self.bonusSelector.Deactivate() self.bonusSelector.prepare_propose() item.SelectItem(self.vnum) #if self.parentWindow.parentWindow.gameWindow != None: # (w,h) = item.GetItemSize() # self.blockBar.SetSize(h) if item.GetItemType() != 1 and item.GetItemType() != 2: self.bonusSelector.Block() else: self.bonusSelector.Unblock() self.ItemIcon.Show() self.ItemIcon.LoadImage(item.GetIconImageFileName()) # self.values = [player.GetItemAttribute(self.index, i) for i in range(0,5)] return if self.IsActive(): self.checkSwitch() if self.IsActive_rare(): self.checkSwitch_rare() # except: # pass def SetIndex(self,index): self.index = index self.bonusSelector.index = index self.bonusSelector.Starter.SetText("Switch ("+str(index+1)+") iniciado") self.Update() self.UpdateItem() def GetProb_rare(self): values = [player.GetItemAttribute(self.index, i+5) for i in range(0,2)] val2 = {} for i in range(0,2): try: affectString = AFFECT_DICT[values[i][0]](values[i][1]) val2[values[i][0]] = values[i][1] self.bonusSelector.ibi[i+5].SetText(affectString) except: pass prob = 0 max = 0 yp = self.GenList_rare() for x in yp: if yp[x] in val2 and val2[yp[x]] >= int(self.bonusSelector.boni[x+5][3].GetText()) : prob = prob+1 max = max+1 if max > 0: prozent = 100/max*prob else: prozent = 100 return prozent pass def GetProb(self): values = [player.GetItemAttribute(self.index, i) for i in range(0,5)] val2 = {} # for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM): for i in range(0,5): try: affectString = AFFECT_DICT[values[i][0]](values[i][1]) val2[values[i][0]] = values[i][1] self.bonusSelector.ibi[i].SetText(affectString) except: pass prob = 0 max = 0 yp = self.GenList() for x in yp: if yp[x] in val2 and val2[yp[x]] >= int(self.bonusSelector.boni[x][3].GetText()): prob = prob+1 max = max+1 if max > 0: prozent = 100/max*prob else: prozent = 100 return prozent def GenList(self): ret = {} for i in range(0,5): if self.bonusSelector.boni[5-i][1].selected.value != 0: ret[5-i] = self.bonusSelector.boni[5-i][1].selected.value return ret def GenList_rare(self): ret = {} for i in range(0,2): if self.bonusSelector.boni[6+i][1].selected.value != 0: ret[i+1] = self.bonusSelector.boni[6+i][1].selected.value return ret def __init__(self,parent): ui.Window.__init__(self) self.SetSize(500,36*3+4*2) self.tabCount = 0 self.tabList = {} self.parentWindow = parent self.SetParent(parent) self.plusBar = ui.Bar() self.plusBar.SetParent(self) self.plusBar.SetSize(90,30) self.plusBar.SetWindowVerticalAlignCenter() self.plusBar.SetColor(COLOR_BG) # self.plusBar.OnMouseLeftButtonDown = lambda: self.AddTab_pre() self.plusBar.OnMouseLeftButtonUp = lambda: self.AddTab_pre() self.OnMouseLeftButtonUp = lambda: self.AddTab_pre() self.plusBar.SetPosition(30,0) self.plusBar.Show() self.AddText = ui.TextLine() self.AddText.SetParent(self.plusBar) self.AddText.SetText("Arraste o item aqui") self.AddText.SetWindowVerticalAlignCenter() self.AddText.SetWindowHorizontalAlignCenter() self.AddText.SetVerticalAlignCenter() self.AddText.SetHorizontalAlignCenter() self.AddText.SetPosition(0,0) self.AddText.Show() dist = [ [500, 0 ], #1 [240, 10 ], [160, 10 ], [117, 10.5], # [ 80, 25 ], #5 [ 92, 10 ], #5 [ 75, 10 ], #6 [ 64, 9 ], #7 [ 56, 7.5], #8 [ 50, 6.5], #9 [ 45, 5.5], #10 ][MAX_NUM-1] self.ItemTab.width = dist[0] self.ItemTab.dist = dist[1] #For 8 # dist = 9-1.5 # width = 56 # For 9 # dist = 9-2.5 # width = 50 # For 10 # dist = 9-3.5 # width = 45 def DeleteTab(self,id): if self.parentWindow.gameWindow != None: self.tabList[id].blockBar.Hide() self.tabList[id].blockBar.Destroy() self.tabList[id].Destroy() # del self.tabList[id] self.tabCount = self.tabCount -1 if self.tabCount > id and id < 5: for i in xrange(id,self.tabCount): self.tabList[i] = self.tabList[i+1] self.tabList[i].tabnum = i self.tabList[i].SetPosition((self.tabList[i].width+self.tabList[i].dist)*i,0) del self.tabList[self.tabCount] else: del self.tabList[id] if self.tabCount > 0: self.tabList[0].Select() if (self.ItemTab.width+self.ItemTab.dist)*self.tabCount < 20: self.parentWindow.SetSize(520,387-210) self.parentWindow.but_speed.Hide() self.plusBar.SetPosition(20,0) else: (x,y) = self.tabList[self.tabCount-1].GetLocalPosition() self.plusBar.SetPosition(x+self.ItemTab.width+self.ItemTab.dist,0) # self.plusBar.SetPosition((self.ItemTab.width+self.ItemTab.dist)*self.tabCount-10,0) self.plusBar.Show() def AddTab_pre(self): if mouseModule.mouseController.isAttached(): attachedSlotType = mouseModule.mouseController.GetAttachedType() attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber() attachedSlotVnum = mouseModule.mouseController.GetAttachedItemIndex() item.SelectItem(attachedSlotVnum) if item.GetItemType() != 1 and item.GetItemType() != 2: mouseModule.mouseController.DeattachObject() chat.AppendChat(2,"Este item não pode ser rodado.") return for a in self.tabList: if self.tabList[a].index == attachedSlotPos: mouseModule.mouseController.DeattachObject() chat.AppendChat(2,"Esse slot já foi inserido!") return if player.SLOT_TYPE_INVENTORY == attachedSlotType: self.AddTab(attachedSlotPos,attachedSlotVnum) chat.AppendChat(2,"Item adicionado!") mouseModule.mouseController.DeattachObject() def AddTab(self,id,vnum = 0): if self.tabCount < MAX_NUM: self.tabList[self.tabCount] = self.ItemTab(self,self.tabCount,id,vnum) self.tabList[self.tabCount].Select() self.tabList[self.tabCount].Show() self.tabCount+= 1 if (self.ItemTab.width+self.ItemTab.dist)*self.tabCount < 20: self.plusBar.SetPosition(20,0) else: (x,y) = self.tabList[self.tabCount-1].GetLocalPosition() self.plusBar.SetPosition(x+self.ItemTab.width+self.ItemTab.dist,0) if self.tabCount == MAX_NUM: self.plusBar.Hide() self.parentWindow.SetSize(520,487+10) self.parentWindow.but_speed.Show() # return 0 class Bot(ui.BoardWithTitleBar): class PinGroup(ui.Bar): def OnUpdate(self): ## Now check position. (x,y) = self.GetGlobalPosition() max_x = wndMgr.GetScreenWidth()-self.GetWidth() max_y = wndMgr.GetScreenHeight()-self.GetHeight()-DISTANCE_BOTTOM if not x == self.pos_x or not y == self.pos_y: old_dir = self.dir if self.pos_x == 0 and not self.pos_y == 0 and not self.pos_y == max_y and old_dir != 1: self.parse_dir(1) elif self.pos_x == max_x and not self.pos_y == 0 and not self.pos_y == max_y and old_dir != 2: self.parse_dir(2) elif self.pos_y == max_y and not self.pos_x == 0 and not self.pos_x == max_x and old_dir != 4: self.parse_dir(4) elif self.pos_y == 0 and not self.pos_x == 0 and not self.pos_x == max_x and old_dir != 3: self.parse_dir(3) max_x = wndMgr.GetScreenWidth()-self.GetWidth() max_y = wndMgr.GetScreenHeight()-self.GetHeight()-DISTANCE_BOTTOM if self.pos_x == 0 and not self.pos_y == 0 and not self.pos_y == max_y: x = 0 elif self.pos_x == max_x and not self.pos_y == 0 and not self.pos_y == max_y: x = max_x elif self.pos_y == 0 and not self.pos_x == 0 and not self.pos_x == max_x: y = 0 elif self.pos_y == max_y and not self.pos_x == 0 and not self.pos_x == max_x: y = max_y if x > 0 and x < max_x and y > 0 and y < max_y: if y < int(max_y/2): y = 0 else: y = max_y if x < int(max_x/2): x = 0 else: x = max_x x = min(max(0,x),wndMgr.GetScreenWidth()-self.GetWidth()) y = min(max(0,y),wndMgr.GetScreenHeight()-self.GetHeight()-DISTANCE_BOTTOM) self.SetPosition(x,y) self.pos_x = x self.pos_y = y # (self.pos_x,self.pos_y) = self.GetGlobalPosition() self.parent.OnUpdate() for c in self.txtlist: c.SetColor(c.item.StatusBar.color) c.txt2.SetText("Status: %s" % c.item.StatusText.GetText()) try: c.listWin2.SetColor(c.item.StatusBar_rare.color) c.txt3.SetText("Status: %s" % c.item.StatusText_rare.GetText()) except: pass def ShowMainWindow(self): (x,y) = self.parent.GetGlobalPosition() x = min(max(32,x),wndMgr.GetScreenWidth()-self.parent.GetWidth()-32) y = min(max(32,y),wndMgr.GetScreenHeight()-self.parent.GetHeight()-DISTANCE_BOTTOM-32) self.parent.SetPosition(x,y) self.parent.Show() self.__del__() def parse_dir(self,dir): self.dir = dir w,h = 100,50 for listWin in self.txtlist: itm = listWin.item listWin.AddFlag("not_pick") if dir >= 3: listWin.SetPosition(w,4) listWin.SetSize(90,h-8) w+=92 if itm.bonusSelector.EnableRareBoni.checked == 1: w+=15 listWin.SetSize(105,4+12+12) listWin.listWin2.SetSize(105,14) listWin.listWin2.Show() listWin.txt3.Show() else: listWin.SetPosition(0,h) listWin.SetSize(w,4+12+12+2) if itm.bonusSelector.EnableRareBoni.checked == 1: listWin.SetSize(w,4+12+12) listWin.listWin2.SetSize(w,14) listWin.listWin2.Show() listWin.txt3.Show() # itl.append(txt3) h+=12 pass h+=4+12+12+4 self.SetSize(w,h) def __init__(self,parent,dir = 1): self.parent = parent self.dir = dir ui.Bar.__init__(self) # Direction: 1 = left; 2 = right; 3 = top self.SetColor(COLOR_BG) w,h = 100,50 self.AddFlag("float") self.AddFlag("movable") self.maximise_but = ui.Button() self.maximise_but.SetParent(self) self.maximise_but.SetPosition(4,4) self.maximise_but.SetUpVisual("d:/ymir work/ui/public/large_button_01.sub") self.maximise_but.SetOverVisual("d:/ymir work/ui/public/large_button_02.sub") self.maximise_but.SetDownVisual("d:/ymir work/ui/public/large_button_03.sub") self.maximise_but.SetText("Ampliar") self.maximise_but.SetEvent(self.ShowMainWindow) self.maximise_but.Show() self.stop_but = ui.Button() self.stop_but.SetParent(self) self.stop_but.SetPosition(4,24) self.stop_but.SetUpVisual("d:/ymir work/ui/public/large_button_01.sub") self.stop_but.SetOverVisual("d:/ymir work/ui/public/large_button_02.sub") self.stop_but.SetDownVisual("d:/ymir work/ui/public/large_button_03.sub") self.stop_but.SetText("Desativar Todos") self.stop_but.SetEvent(self.parent.deactivate_all) self.stop_but.Show() self.txtlist = [] for a in self.parent.itemTabBar.tabList: itm = self.parent.itemTabBar.tabList[a] listWin = ui.Bar() listWin.item = itm self.txtlist.append(listWin) listWin.SetColor(itm.StatusBar.color) listWin.SetParent(self) listWin.AddFlag("not_pick") listWin.Show() listWin.txt1 = ui.TextLine() listWin.txt1.SetParent(listWin) listWin.txt1.SetText("Slot %d:" %(itm.index+1)) listWin.txt1.Show() listWin.txt1.SetPosition(4,2) listWin.txt2 = ui.TextLine() listWin.txt2.SetParent(listWin) listWin.txt2.SetText("Status: %s" % itm.StatusText.GetText()) listWin.txt2.SetPosition(4,2+12) listWin.txt2.Show() listWin.listWin2 = ui.Bar() listWin.listWin2.AddFlag("not_pick") listWin.listWin2.SetColor(itm.StatusBar_rare.color) listWin.listWin2.SetParent(listWin) listWin.listWin2.SetPosition(0,4+12+12) listWin.listWin2.SetSize(w,12+2) listWin.listWin2.Hide() listWin.txt3 = ui.TextLine() listWin.txt3.SetParent(listWin.listWin2) listWin.txt3.SetText("Status: %s" % itm.StatusText_rare.GetText()) listWin.txt3.SetPosition(4,0) listWin.txt3.Hide() if dir >= 3: listWin.SetPosition(w,4) listWin.SetSize(90,h-8) w+=92 if itm.bonusSelector.EnableRareBoni.checked == 1: w+=15 listWin.SetSize(105,4+12+12) listWin.listWin2.SetSize(105,14) listWin.listWin2.Show() listWin.txt3.Show() else: listWin.SetPosition(0,h) listWin.SetSize(w,4+12+12+2) if itm.bonusSelector.EnableRareBoni.checked == 1: listWin.SetSize(w,4+12+12) listWin.listWin2.Show() listWin.txt3.Show() # itl.append(txt3) h+=12 pass h+=4+12+12+4 # else: # self.txtlist.append(itl) self.SetSize(w,h) (x,y) = self.parent.GetGlobalPosition() x = min(max(0,x),wndMgr.GetScreenWidth()-self.GetWidth()) y = min(max(0,y),wndMgr.GetScreenHeight()-self.GetHeight()-DISTANCE_BOTTOM) if dir == 1: # self.SetWindowHorizontalAlignLeft() self.SetPosition(0,y) elif dir == 2: # self.SetWindowHorizontalAlignRight() self.SetPosition(wndMgr.GetScreenWidth()-self.GetWidth(),y) elif dir == 3: # self.SetWindowVerticalAlignTop() self.SetPosition(x,0) else: # self.SetWindowVerticalAlignBottom() self.SetPosition(x,wndMgr.GetScreenHeight()-(DISTANCE_BOTTOM+h)) (self.pos_x,self.pos_y) = self.GetGlobalPosition() self.parse_dir(dir) # if dir == 1: # self.SetWindowHorizontalAlignLeft() # self.SetPosition(0,0) # elif dir == 2: # self.SetWindowHorizontalAlignRight() # self.SetPosition(self.GetWidth(),0) # elif dir == 3: # self.SetWindowHorizontalAlignCenter() # self.SetPosition(0,0) # elif dir == 4: # self.SetWindowHorizontalAlignCenter() # self.SetPosition(0,36+h) # else: # return # ERR pinhint = 0 def ShowPinHint(self,type): self.pinhint = type if type == 0: self.PinHint.Hide() return # type=2 (x,y) = self.GetGlobalPosition() if type == 1: # Left self.PinHint.SetWindowHorizontalAlignLeft() self.PinHint.SetWindowVerticalAlignCenter() self.PinHint.SetSize(max(min(30,30-x),3),wndMgr.GetScreenHeight()) self.PinHint.SetPosition(0,0) elif type == 2: # Right self.PinHint.SetWindowHorizontalAlignRight() self.PinHint.SetWindowVerticalAlignCenter() self.PinHint.SetSize(30,wndMgr.GetScreenHeight()) self.PinHint.SetPosition(max(min(30,30-(wndMgr.GetScreenWidth()-(x+self.GetWidth()))),3),0) elif type == 3: # Top self.PinHint.SetWindowHorizontalAlignCenter() self.PinHint.SetWindowVerticalAlignTop() self.PinHint.SetSize(wndMgr.GetScreenWidth(),max(min(30,30-y),3)) self.PinHint.SetPosition(0,0) elif type == 4: # Top self.PinHint.SetWindowHorizontalAlignCenter() self.PinHint.SetWindowVerticalAlignBottom() self.PinHint.SetSize(wndMgr.GetScreenWidth(),30) self.PinHint.SetPosition(0,36+max(min(30,30-(wndMgr.GetScreenHeight()-36-(y+self.GetHeight()))),3)) self.PinHint.Show() # else: def __init__(self): ui.BoardWithTitleBar.__init__(self) self.gameWindow = None self.SetTitleName("Bot Metin2") self.AddFlag("float") self.AddFlag("movable") self.SetPosition(30,30) # self.SetSize(520,387) # self.SetSize(520,387-210) self.SetSize(520,387-200) self.PinHint = ui.Bar() self.PinHint.SetColor(COLOR_PIN_HINT) self.PinHint.Show() self.OnMouseLeftButtonDown = self.drag_start self.OnMouseLeftButtonUp = self.drag_end self.titleBar.MinimizeBut = ui.Button() self.titleBar.MinimizeBut.SetParent(self.titleBar) self.titleBar.MinimizeBut.SetUpVisual("d:/ymir work/interface/button/thinboard_minimize_01_normal.tga") self.titleBar.MinimizeBut.SetOverVisual("d:/ymir work/interface/button/thinboard_minimize_02_hover.tga") self.titleBar.MinimizeBut.SetDownVisual("d:/ymir work/interface/button/thinboard_minimize_03_active.tga") self.titleBar.MinimizeBut.SetToolTipText("Minimizar", 0, -23) self.titleBar.MinimizeBut.SetPosition(520 - self.titleBar.btnClose.GetWidth()-3- 32 - 3, 3) self.titleBar.MinimizeBut.SetEvent(lambda: self.PinShow(1)) self.titleBar.MinimizeBut.Show() self.titleBar.HelpBut = ui.ToggleButton() self.titleBar.HelpBut.SetParent(self.titleBar) self.titleBar.HelpBut.SetUpVisual("d:/ymir work/ui/public/small_button_01.sub") self.titleBar.HelpBut.SetOverVisual("d:/ymir work/ui/public/small_button_02.sub") self.titleBar.HelpBut.SetDownVisual("d:/ymir work/ui/public/small_button_03.sub") self.titleBar.HelpBut.SetToolTipText("Ajuda", 0, -23) self.titleBar.HelpBut.SetText("Ajuda") self.titleBar.HelpBut.SetPosition(3, 0) self.titleBar.HelpBut.SetToggleDownEvent(lambda: self.ToggleHelp(1)) self.titleBar.HelpBut.SetToggleUpEvent(lambda: self.ToggleHelp(0)) self.titleBar.HelpBut.Hide() self.but_deactivate_all = ui.Button() # self.but_deactivate_all.SetParent(self) self.but_deactivate_all.SetParent(self.titleBar) # self.but_deactivate_all.SetPosition(415,350) self.but_deactivate_all.SetPosition(3+5+self.titleBar.HelpBut.GetWidth(), 0) self.but_deactivate_all.SetUpVisual("d:/ymir work/ui/public/large_button_01.sub") self.but_deactivate_all.SetOverVisual("d:/ymir work/ui/public/large_button_02.sub") self.but_deactivate_all.SetDownVisual("d:/ymir work/ui/public/large_button_03.sub") self.but_deactivate_all.SetText("Parar Tudo") self.but_deactivate_all.SetEvent(self.deactivate_all) self.but_deactivate_all.Show() self.titleBar.but_deactivate_all = ui.Button() self.titleBar.but_deactivate_all.SetParent(self.titleBar) self.titleBar.but_deactivate_all.SetPosition(3+5+self.titleBar.HelpBut.GetWidth()+5+self.but_deactivate_all.GetWidth(), 0) self.titleBar.but_deactivate_all.SetUpVisual("d:/ymir work/ui/public/small_button_01.sub") self.titleBar.but_deactivate_all.SetOverVisual("d:/ymir work/ui/public/small_button_02.sub") self.titleBar.but_deactivate_all.SetDownVisual("d:/ymir work/ui/public/small_button_03.sub") self.titleBar.but_deactivate_all.SetText("Info") self.titleBar.but_deactivate_all.SetEvent(self.about) self.titleBar.but_deactivate_all.Show() self.titleName.SetPosition(60, 4) self.enable_rebuy = CheckBox("Comprar automaticamente") self.enable_rebuy.Toggle() self.enable_rebuy.Hide() self.but_speed = ui.SliderBar() self.but_speed.SetParent(self) self.but_speed.SetWindowHorizontalAlignCenter() self.but_speed.SetPosition(0,360) self.but_speed.SetSliderPos(0.0) # self.but_speed.SetToolTipText("Switch-Geschwindigkeit", 0, -23) # self.but_speed.Show() self.but_speed.Hide() self.itemTabBar = ItemTabBar(self) self.itemTabBar.SetPosition(10,35) self.itemTabBar.Show() self.buyed = 0 self.buyed_rare = 0 self.SetCloseEvent(self._Hide) self.Hide = self._Hide ### NOW initialize the HELP stuff! self.help_add_item = HelpBar(0.8,'Solte um item aqui para adiciona-lo.') self.help_add_item.SetParent(self) self.help_add_item.SetPosition(60,50) self.help_minimize = HelpBar(0.8,'Arraste para diminuir o bot para a beira',1) self.help_minimize.SetParent(self.titleBar) self.help_minimize.SetWindowHorizontalAlignCenter() self.help_minimize.SetPosition(100,-30) self.help_show_rare = HelpBar(0.85,'Com isso, voce pode alternar a exebição 6/7') self.help_show_rare.SetParent(self) # self.help_show_rare.SetPosition(35,312) self.help_rebuy = HelpBar(0.5,'Se o bot deve comprar mais?') self.help_rebuy.SetParent(self) # self.help_rebuy.SetPosition(25,297) self.help_stop_all = HelpBar(0.8,'Parar todos os processos!',1) self.help_stop_all.SetParent(self.titleBar) self.help_stop_all.SetPosition(3+5+self.titleBar.HelpBut.GetWidth()*1.2,-30) self.help_duration = HelpBar(0.8,'Retardar Bot',1) self.help_duration.SetParent(self) def ToggleHelp(self,val): self.help_on = val def Show(self): ui.BoardWithTitleBar.Show(self) self.BonusSelector_bot_shown = 1 def _Hide(self): ## ONLY FOR TESTING # for a in range(0,self.itemTabBar.tabCount): # self.itemTabBar.DeleteTab(0) ui.BoardWithTitleBar.Hide(self) self.BonusSelector_bot_shown = 0 def deactivate_all(self): for a in self.itemTabBar.tabList: self.itemTabBar.tabList[a].bonusSelector.Starter.SetUp() self.itemTabBar.tabList[a].bonusSelector.Starter.OnToggleUp() self.itemTabBar.tabList[a].bonusSelector.Starter_rare_boni.SetUp() self.itemTabBar.tabList[a].bonusSelector.Starter_rare_boni.OnToggleUp() pass drag = 0 def drag_start(self): self.drag = 1 def drag_end(self): self.drag = 0 if self.pinhint > 0: self.PinShow(self.pinhint) # self.PinGroupBox = self.PinGroup() pass self.ShowPinHint(0) def PinShow(self,dir): self.PinGroupBox = self.PinGroup(self,dir) self.Hide() self.PinGroupBox.Show() def EnableInventoryTweak(self,gameWindow): self.gameWindow=gameWindow self.gameWindow.interface.wndInventory.inventoryTab[0].SetEvent(lambda arg=0: self.__SetInventoryPage(arg)) self.gameWindow.interface.wndInventory.inventoryTab[1].SetEvent(lambda arg=1: self.__SetInventoryPage(arg)) def __SetInventoryPage(self,arg): self.gameWindow.interface.wndInventory.SetInventoryPage(arg) for a in self.itemTabBar.tabList: itm = self.itemTabBar.tabList[a] if itm.index >= arg*45 and itm.index < (arg+1)*45: itm.blockBar.Show() else: itm.blockBar.Hide() help_on = 0 counter = 0 AboutWindow = None def OnUpdate(self): if self.AboutWindow: if self.AboutWindow.x_counter > 1: self.AboutWindow.x_counter -=1 self.AboutWindow.text6.SetText("Tempo: %0.1f" % (self.AboutWindow.x_counter/45.0)) elif self.AboutWindow.x_counter == 1: self.AboutWindow.Hide() # self.AboutWindow.Delete() if self.help_on == 1: (x,y) = self.itemTabBar.plusBar.GetLocalPosition() self.help_add_item.SetPosition(x+20,50) self.help_add_item.Show() self.help_stop_all.Show() self.help_minimize.Show() if self.itemTabBar.tabCount > 0: self.help_show_rare.SetPosition(25,164) self.help_show_rare.Show() self.help_rebuy.SetPosition(15,147) self.help_rebuy.Show() # self.help_duration.SetPosition(300,180) self.help_duration.SetPosition(190-5.5+self.but_speed.GetSliderPos()*int(35.5+self.but_speed.GetWidth()/2),180) self.help_duration.Show() else: self.help_show_rare.Hide() self.help_rebuy.Hide() self.help_duration.Hide() else: self.help_add_item.Hide() self.help_minimize.Hide() self.help_show_rare.Hide() self.help_rebuy.Hide() self.help_stop_all.Hide() self.help_duration.Hide() if self.drag == 1: (x1, y1) = self.GetGlobalPosition() # if x1 < 0: # x1 = 0 # elif x1 > wndMgr.GetScreenWidth()-520: # x1 = wndMgr.GetScreenWidth()-520 # if y1 < 0: # y1 = 0 # elif y1 > wndMgr.GetScreenHeight()-36-self.GetHeight(): # y1 = wndMgr.GetScreenHeight()-36-self.GetHeight() x1 = max(min(wndMgr.GetScreenWidth()-520,x1),0) y1 = max(min(wndMgr.GetScreenHeight()-36-self.GetHeight(),y1),0) self.SetPosition(x1,y1) if x1 < 30: self.ShowPinHint(1) elif wndMgr.GetScreenWidth()-x1-520 < 30: self.ShowPinHint(2) elif y1 < 30: self.ShowPinHint(3) elif wndMgr.GetScreenHeight()-y1-self.GetHeight() < 60: self.ShowPinHint(4) else: self.ShowPinHint(0) # self.SetPosition(x1+(x-self.drag_pos[0]),y1) pass if self.gameWindow != None: for a in self.itemTabBar.tabList: itm = self.itemTabBar.tabList[a] self.counter+=1 if self.counter >= int(self.but_speed.GetSliderPos()*MAX_SWITCH_DELAY_APPEND+MIN_SWITCH_DELAY): self.buyed = 0 self.buyed_rare = 0 self.counter = 0 for a in self.itemTabBar.tabList: itm = self.itemTabBar.tabList[a] itm.UpdateItem() # if itm. def about(self): self.AboutWindow = ui.ThinBoard() self.AboutWindow.SetParent(self) self.AboutWindow.SetSize(250,100) self.AboutWindow.SetWindowHorizontalAlignCenter() self.AboutWindow.SetWindowVerticalAlignCenter() self.AboutWindow.SetPosition(0,0) self.AboutWindow.Show() self.AboutWindow.x_counter = 450 self.AboutWindow.text1 = ui.TextLine() self.AboutWindow.text1.SetParent(self.AboutWindow) self.AboutWindow.text1.SetWindowHorizontalAlignCenter() self.AboutWindow.text1.SetHorizontalAlignCenter() self.AboutWindow.text1.SetPosition(0,5) self.AboutWindow.text1.SetText("Bot revision - Mt2") self.AboutWindow.text1.SetPackedFontColor(ui.GenerateColor(58, 141, 221)) self.AboutWindow.text1.Show() self.AboutWindow.text2 = ui.TextLine() self.AboutWindow.text2.SetParent(self.AboutWindow) self.AboutWindow.text2.SetPosition(8,18) self.AboutWindow.text2.SetText("Criado por Ryong Mt2") self.AboutWindow.text2.Show() self.AboutWindow.text3 = ui.TextLine() self.AboutWindow.text3.SetParent(self.AboutWindow) self.AboutWindow.text3.SetPosition(8,18+13) self.AboutWindow.text3.SetText("Updated e Revision - Metin2") self.AboutWindow.text3.Show() self.AboutWindow.text4 = ui.TextLine() self.AboutWindow.text4.SetParent(self.AboutWindow) self.AboutWindow.text4.SetPosition(8,18+13*3) self.AboutWindow.text4.SetText("Todos os direitos reservados") self.AboutWindow.text4.Show() self.AboutWindow.text5 = ui.TextLine() self.AboutWindow.text5.SetParent(self.AboutWindow) self.AboutWindow.text5.SetPosition(8,18+13*4) self.AboutWindow.text5.SetText("") self.AboutWindow.text5.Show() self.AboutWindow.text6 = ui.TextLine() self.AboutWindow.text6.SetParent(self.AboutWindow) self.AboutWindow.text6.SetPosition(200,18+13*5) self.AboutWindow.text6.SetText("Tempo: %d" % self.AboutWindow.x_counter) self.AboutWindow.text6.Show() class HelpBar(ui.Window): def __init__(self,width,text,centered = 0): ui.Window.__init__(self) self.AddFlag("not_pick") self.AddFlag("attach") img = ui.ExpandedImageBox() img.SetParent(self) img.LoadImage("d:/ymir work/ui/pattern/help_stick.tga") img.SetRenderingRect(0.0, -width, 0.0, 0.0) img.Show() self.img = img txt = ui.TextLine() txt=ui.TextLine() txt.SetParent(self) txt.SetText(text) txt.Show() img.SetPosition(0,18-width*img.GetHeight()) txt.SetPosition(0,0) txt.SetWindowHorizontalAlignCenter() if centered != 0: txt.SetHorizontalAlignCenter() # txt.SetPosition(0,0) self.txt = txt class DropDown(ui.Window): dropped = 0 dropstat = 0 last = 0 lastS = 0 maxh = 95 OnChange = None class Item(ui.ListBoxEx.Item): def __init__(self,parent, text,value=0): ui.ListBoxEx.Item.__init__(self) self.textBox=ui.TextLine() self.textBox.SetParent(self) self.textBox.SetText(text) # self.textBox.SetLimitWidth(parent.GetWidth()-132) self.textBox.Show() self.value = value def GetValue(self): return self.value def __del__(self): ui.ListBoxEx.Item.__del__(self) def __init__(self,parent,tt = "",down=1): ui.Window.__init__(self,"TOP_MOST") self.down = down self.SetParentProxy(parent) self.bg = ui.Bar("TOP_MOST") self.bg.SetParent(self) self.bg.SetPosition(0,0) self.bg.SetColor(0xc0000000) self.bg.OnMouseOverIn = self.bgMouseIn self.bg.OnMouseOverOut = self.bgMouseOut self.bg.OnMouseLeftButtonDown = self.ExpandMe self.bg.Show() self.act = ui.TextLine() self.act.SetParent(self.bg) self.act.SetPosition(4,2) self.act.SetText(tt) self.act.Show() self.GetText = self.act.GetText self.Drop = ui.Bar("TOP_MOST") self.Drop.SetParent(self.GetParentProxy()) self.Drop.SetPosition(0,21) # self.Drop.SetSize(150,95) self.Drop.SetSize(150,0) # self.Drop.SetColor(0xc00a0a0a) self.Drop.SetColor(0xff0a0a0a) self.ScrollBar = ui.ThinScrollBar() self.ScrollBar.SetParent(self.Drop) self.ScrollBar.SetPosition(132,0) # self.ScrollBar.SetScrollBarSize(95) self.ScrollBar.SetScrollBarSize(0) # self.ScrollBar.Show() self.DropList = ui.ListBoxEx() self.DropList.SetParent(self.Drop) self.DropList.itemHeight = 12 self.DropList.itemStep = 13 self.DropList.SetPosition(0,0) # self.DropList.SetSize(132,self.maxh) self.DropList.SetSize(132,13) self.DropList.SetScrollBar(self.ScrollBar) self.DropList.SetSelectEvent(self.SetTitle) self.DropList.SetViewItemCount(0) self.DropList.Show() if tt != "": self.AppendItemAndSelect(tt) self.selected = self.DropList.GetSelectedItem() self.SetSize(120,20) def __del__(self): ui.Window.__del__(self) c = 1 def AppendItem(self,text,value=0): self.c+=1 self.DropList.AppendItem(self.Item(self,text,value)) self.maxh = min(95,13*self.c) if self.c > 7: self.ScrollBar.Show() def AppendItemAndSelect(self,text,value=0): self.DropList.AppendItem(self.Item(self,text,value)) self.DropList.SelectIndex(len(self.DropList.itemList)-1) def SelectByAffectId(self,id): for x in self.DropList.itemList: if x.value == id: self.DropList.SelectItem(x) break def SetTitle(self,item): self.act.SetText(str(item.textBox.GetText())) self.last = self.DropList.basePos self.lastS = self.ScrollBar.GetPos() self.dropped = 0 self.selected = item if self.OnChange: self.OnChange() # self.Drop.Hide() def SetPosition(self,w,h): ui.Window.SetPosition(self,w,h) if self.down == 1: self.Drop.SetPosition(w,h+21) else: self.Drop.SetPosition(w,h-self.Drop.GetHeight()) def SetSize(self,w,h): ui.Window.SetSize(self,w,h) self.bg.SetSize(w,h) self.Drop.SetSize(w,0) self.DropList.SetSize(w-18,self.maxh) for x in self.DropList.itemList: x.SetSize(w-18,12) self.ScrollBar.SetPosition(w-18,0) def ExpandMe(self): if self.dropped == 1: # self.Drop.Hide() self.dropped = 0 else: # self.Drop.Show() self.dropped = 1 def OnUpdate(self): iter = 6 if self.Drop.GetHeight() < 50: self.ScrollBar.Hide() else: self.ScrollBar.Show() if self.dropped == 0 and self.dropstat == 1: if self.Drop.GetHeight() <=0: self.dropstat = 0 self.Drop.SetSize(self.Drop.GetWidth(),0) self.ScrollBar.SetScrollBarSize(self.Drop.GetHeight()) self.Drop.Hide() else: if self.Drop.GetHeight()-iter < 0: self.Drop.SetSize(self.Drop.GetWidth(),0) else: self.Drop.SetSize(self.Drop.GetWidth(),self.Drop.GetHeight()-iter) (w,h) = self.GetLocalPosition() self.SetPosition(w,h) self.ScrollBar.SetScrollBarSize(self.Drop.GetHeight()) self.DropList.SetViewItemCount(int(self.Drop.GetHeight()/13)) self.DropList.SetBasePos(self.last+1) self.DropList.SetBasePos(self.last) elif self.dropped == 1 and self.dropstat == 0: self.Drop.Show() self.SetTop() if self.Drop.GetHeight() >=self.maxh: self.Drop.SetSize(self.Drop.GetWidth(),self.maxh) self.ScrollBar.SetScrollBarSize(self.maxh) self.dropstat = 1 self.DropList.SetViewItemCount(7) self.ScrollBar.SetPos(self.lastS) else: self.ScrollBar.SetScrollBarSize(self.Drop.GetHeight()+iter) self.Drop.SetSize(self.Drop.GetWidth(),self.Drop.GetHeight()+iter) (w,h) = self.GetLocalPosition() self.SetPosition(w,h) self.DropList.SetViewItemCount(int(self.Drop.GetHeight()/13)) self.DropList.SetBasePos(self.last+1) self.DropList.SetBasePos(self.last) ## BG Hover def bgMouseIn(self): self.bg.SetColor(0xc00a0a0a) def bgMouseOut(self): self.bg.SetColor(0xc0000000) class Edit2(ui.EditLine): def __init__(self,main = "",ml = 99): ui.EditLine.__init__(self) self.SetText(main) self.main = main self.SetMax(ml) self.SetUserMax(ml) def GetText(self): res = ui.EditLine.GetText(self) if res == "": return "0" else: return res def __del__(self): ui.EditLine.__del__(self) def OnSetFocus(self): ui.EditLine.OnSetFocus(self) if ui.EditLine.GetText(self) == self.main: self.SetText("") def OnKillFocus(self): ui.EditLine.OnKillFocus(self) if ui.EditLine.GetText(self) == "": self.SetText(self.main) class CheckBox(ui.Window): checked = 0 eventUp =None eventDown=None def __init__(self,cont = ""): ui.Window.__init__(self) self.BG = ui.Bar("UI") self.BG.SetParent(self) self.BG.SetPosition(0,0) self.BG.SetSize(20,20) # self.BG.SetColor(0xc00b0b0b) self.BG.SetColor(COLOR_CHECKBOX_NOT_SELECTED) self.BG.OnMouseLeftButtonUp = self.Toggle self.OnMouseLeftButtonUp = self.Toggle self.BG.Show() self.Title = ui.TextLine() self.Title.SetParent(self) self.Title.SetPosition(25,2) self.Title.SetText(cont) self.Title.Show() self.stat = ui.TextLine() self.stat.SetParent(self.BG) self.stat.SetPosition(0,0) self.stat.SetWindowHorizontalAlignCenter() self.stat.SetWindowVerticalAlignCenter() self.stat.SetHorizontalAlignCenter() self.stat.SetVerticalAlignCenter() self.stat.SetSize(0,0) self.stat.SetText("") self.SetSize(25+self.Title.GetTextSize()[0]+5,20) self.stat.Show() def __del__(self): ui.ToggleButton.__del__(self) def Toggle(self): if self.checked == 1: self.OnToggleUp() else: self.OnToggleDown() def OnToggleUp(self): self.stat.SetText("") # self.BG.SetColor(0xc00b0b0b) self.BG.SetColor(COLOR_CHECKBOX_NOT_SELECTED) self.checked = 0 if self.eventUp: self.eventUp() def OnToggleDown(self): # self.BG.SetColor(0xf00b0b0b) self.BG.SetColor(COLOR_CHECKBOX_SELECTED) self.stat.SetText("X") self.checked = 1 if self.eventDown: self.eventDown() # Zum Testen # a = Bot() # a.Show() # oder; # Bot().Show()
- 1
-
23 hours ago, Amun said:
You're getting that error because the size of avail is 0.
Something like this should suffice:
Before const TItemAttrTable& r = g_map_itemRare[avail[number(0, avail.size() - 1)]]; Add: if (!avail.size()) { // add some error here about the size, if you want to know when it happens. return false; }
Cheers!
Don't give the error anymore, but the 7 bonus just fails, it doesn't add at all
-
On 2/23/2022 at 3:10 PM, Amun said:
Dê-nos o código, cara .. O erro é bastante auto-explicativo, mas não sabemos o que você tem lá ..
item_attribute.cpp 485
Here is my file item_atribute.cpp
Thanks for listening
Spoiler#include "stdafx.h" #include "constants.h" #include "log.h" #include "item.h" #include "char.h" #include "desc.h" #include "item_manager.h" const int MAX_NORM_ATTR_NUM = ITEM_MANAGER::MAX_NORM_ATTR_NUM; const int MAX_RARE_ATTR_NUM = ITEM_MANAGER::MAX_RARE_ATTR_NUM; int CItem::GetAttributeSetIndex() { if (GetType() == ITEM_WEAPON) { if (GetSubType() == WEAPON_ARROW) return -1; #ifdef WJ_QUIVER_SYSTEM if (GetSubType() == WEAPON_UNLIMITED_ARROW) return -1; #endif return ATTRIBUTE_SET_WEAPON; } if (GetType() == ITEM_COSTUME && GetSubType() == COSTUME_WEAPON) return ATTRIBUTE_SET_SHIELD; else if (GetType() == ITEM_COSTUME && GetSubType() == COSTUME_BODY) return ATTRIBUTE_SET_BODY; if (GetType() == ITEM_ARMOR || GetType() == ITEM_COSTUME) { switch (GetSubType()) { case ARMOR_BODY: return ATTRIBUTE_SET_BODY; case ARMOR_WRIST: return ATTRIBUTE_SET_WRIST; case ARMOR_FOOTS: return ATTRIBUTE_SET_FOOTS; case ARMOR_NECK: return ATTRIBUTE_SET_NECK; case ARMOR_HEAD: return ATTRIBUTE_SET_HEAD; case ARMOR_SHIELD: return ATTRIBUTE_SET_SHIELD; case ARMOR_EAR: return ATTRIBUTE_SET_EAR; #ifdef ENABLE_PENDANT case ARMOR_PENDANT: return ATTRIBUTE_SET_PENDANT; #endif } } return -1; } bool CItem::HasAttr(BYTE bApply) { for (int i = 0; i < ITEM_APPLY_MAX_NUM; ++i) if (m_pProto->aApplies[i].bType == bApply) return true; for (int i = 0; i < MAX_NORM_ATTR_NUM; ++i) if (GetAttributeType(i) == bApply) return true; return false; } /* bool CItem::HasApply(BYTE bApply) { for (int i = 0; i < ITEM_APPLY_MAX_NUM; ++i) if (m_pProto->aApplies[i].bType == bApply) return true; return false; } bool CItem::HasOnlyAttr(BYTE bApply) { for (int i = 0; i < MAX_NORM_ATTR_NUM; ++i) if (GetAttributeType(i) == bApply) return true; return false; } */ bool CItem::HasRareAttr(BYTE bApply) { for (int i = 0; i < MAX_RARE_ATTR_NUM; ++i) if (GetAttributeType(i + 5) == bApply) return true; return false; } /* void CItem::AddNewAttr(BYTE index, BYTE bApply, BYTE bLevel) { if (HasApply(bApply)) return; if (bLevel <= 0) return; int iAttributeSet = GetAttributeSetIndex(); const TItemAttrTable & r = g_map_itemAttr[bApply]; if (!r.bMaxLevelBySet[iAttributeSet]) return; int i = GetAttributeCount(); if (i == 3) { RemoveAttributeAt(index); const TItemAttrTable & r = g_map_itemAttr[bApply]; long lVal = r.lValues[MIN(4, bLevel - 1)]; if (lVal) SetAttribute(index, bApply, lVal); } else { const TItemAttrTable & r = g_map_itemAttr[bApply]; long lVal = r.lValues[MIN(4, bLevel - 1)]; if (lVal) SetAttribute(index, bApply, lVal); } } */ void CItem::AddAttribute(BYTE bApply, short sValue) { if (HasAttr(bApply)) return; int i = GetAttributeCount(); if (i >= MAX_NORM_ATTR_NUM) sys_err("item attribute overflow!"); else { if (sValue) SetAttribute(i, bApply, sValue); } } void CItem::AddAttr(BYTE bApply, BYTE bLevel) { if (HasAttr(bApply)) return; if (bLevel <= 0) return; int i = GetAttributeCount(); if (i == MAX_NORM_ATTR_NUM) sys_err("item attribute overflow!"); else { const TItemAttrTable & r = g_map_itemAttr[bApply]; long lVal = r.lValues[MIN(4, bLevel - 1)]; if (lVal) SetAttribute(i, bApply, lVal); } } void CItem::PutAttributeWithLevel(BYTE bLevel) { int iAttributeSet = GetAttributeSetIndex(); if (iAttributeSet < 0) return; if (bLevel > ITEM_ATTRIBUTE_MAX_LEVEL) return; std::vector<int> avail; int total = 0; // 붙일 수 있는 속성 배열을 구축 for (int i = 0; i < MAX_APPLY_NUM; ++i) { const TItemAttrTable & r = g_map_itemAttr[i]; if (r.bMaxLevelBySet[iAttributeSet] && !HasAttr(i)) { avail.push_back(i); total += r.dwProb; } } // 구축된 배열로 확률 계산을 통해 붙일 속성 선정 unsigned int prob = number(1, total); int attr_idx = APPLY_NONE; for (DWORD i = 0; i < avail.size(); ++i) { const TItemAttrTable & r = g_map_itemAttr[avail[i]]; if (prob <= r.dwProb) { attr_idx = avail[i]; break; } prob -= r.dwProb; } if (!attr_idx) { sys_err("Cannot put item attribute %d %d", iAttributeSet, bLevel); return; } const TItemAttrTable & r = g_map_itemAttr[attr_idx]; // 종류별 속성 레벨 최대값 제한 if (bLevel > r.bMaxLevelBySet[iAttributeSet]) bLevel = r.bMaxLevelBySet[iAttributeSet]; AddAttr(attr_idx, bLevel); } void CItem::PutAttribute(const int * aiAttrPercentTable) { int iAttrLevelPercent = number(1, 100); int i; for (i = 0; i < ITEM_ATTRIBUTE_MAX_LEVEL; ++i) { if (iAttrLevelPercent <= aiAttrPercentTable[i]) break; iAttrLevelPercent -= aiAttrPercentTable[i]; } PutAttributeWithLevel(i + 1); } void CItem::ChangeAttribute(const int* aiChangeProb) { int iAttributeCount = GetAttributeCount(); ClearAttribute(); if (iAttributeCount == 0) return; TItemTable const * pProto = GetProto(); if (pProto && pProto->sAddonType) { ApplyAddon(pProto->sAddonType); } static const int tmpChangeProb[ITEM_ATTRIBUTE_MAX_LEVEL] = { 0, 10, 40, 35, 15, }; for (int i = GetAttributeCount(); i < iAttributeCount; ++i) { if (aiChangeProb == NULL) { PutAttribute(tmpChangeProb); } else { PutAttribute(aiChangeProb); } } } void CItem::AddAttribute() { static const int aiItemAddAttributePercent[ITEM_ATTRIBUTE_MAX_LEVEL] = { 40, 50, 10, 0, 0 }; if (GetAttributeCount() < MAX_NORM_ATTR_NUM) #ifdef __ENABLE_COSTUME_ENCHANT_SYSTEM__ PutAttribute(GetType() == ITEM_COSTUME ? aiCostumeAttributeLevelPercent : aiItemAddAttributePercent); #else PutAttribute(aiItemAddAttributePercent); #endif } void CItem::ClearAttribute() { for (int i = 0; i < MAX_NORM_ATTR_NUM; ++i) { m_aAttr[i].bType = 0; m_aAttr[i].sValue = 0; } } int CItem::GetAttributeCount() { int i; for (i = 0; i < MAX_NORM_ATTR_NUM; ++i) { if (GetAttributeType(i) == 0) break; } return i; } int CItem::FindAttribute(BYTE bType) { for (int i = 0; i < MAX_NORM_ATTR_NUM; ++i) { if (GetAttributeType(i) == bType) return i; } return -1; } bool CItem::RemoveAttributeAt(int index) { if (GetAttributeCount() <= index) return false; for (int i = index; i < MAX_NORM_ATTR_NUM - 1; ++i) { SetAttribute(i, GetAttributeType(i + 1), GetAttributeValue(i + 1)); } SetAttribute(MAX_NORM_ATTR_NUM - 1, APPLY_NONE, 0); return true; } bool CItem::RemoveAttributeType(BYTE bType) { int index = FindAttribute(bType); return index != -1 && RemoveAttributeType(index); } void CItem::SetAttributes(const TPlayerItemAttribute* c_pAttribute) { thecore_memcpy(m_aAttr, c_pAttribute, sizeof(m_aAttr)); Save(); } void CItem::SetAttribute(int i, BYTE bType, short sValue) { assert(i < MAX_NORM_ATTR_NUM); m_aAttr[i].bType = bType; m_aAttr[i].sValue = sValue; UpdatePacket(); Save(); if (bType) { const char * pszIP = NULL; if (GetOwner() && GetOwner()->GetDesc()) pszIP = GetOwner()->GetDesc()->GetHostName(); LogManager::instance().ItemLog(i, bType, sValue, GetID(), "SET_ATTR", "", pszIP ? pszIP : "", GetOriginalVnum()); } } void CItem::SetAttribute2(int i, BYTE bType, short sValue) { if (i == 15) i = 6; else if (i == 14) i = 5; else { assert(i < MAX_NORM_ATTR_NUM); } m_aAttr[i].bType = bType; m_aAttr[i].sValue = sValue; UpdatePacket(); Save(); } void CItem::SetForceAttribute(int i, BYTE bType, short sValue) { assert(i < ITEM_ATTRIBUTE_MAX_NUM); m_aAttr[i].bType = bType; m_aAttr[i].sValue = sValue; UpdatePacket(); Save(); if (bType) { const char * pszIP = NULL; if (GetOwner() && GetOwner()->GetDesc()) pszIP = GetOwner()->GetDesc()->GetHostName(); LogManager::instance().ItemLog(i, bType, sValue, GetID(), "SET_FORCE_ATTR", "", pszIP ? pszIP : "", GetOriginalVnum()); } } void CItem::CopyAttributeTo(LPITEM pItem) { pItem->SetAttributes(m_aAttr); } int CItem::GetRareAttrCount() { int ret = 0; if (m_aAttr[5].bType != 0) ret++; if (m_aAttr[6].bType != 0) ret++; return ret; } bool CItem::ChangeRareAttribute() { if (GetRareAttrCount() == 0) return false; int cnt = GetRareAttrCount(); for (int i = 0; i < cnt; ++i) { m_aAttr[i + 5].bType = 0; m_aAttr[i + 5].sValue = 0; } if (GetOwner() && GetOwner()->GetDesc()) LogManager::instance().ItemLog(GetOwner(), this, "SET_RARE_CHANGE", ""); else LogManager::instance().ItemLog(0, 0, 0, GetID(), "SET_RARE_CHANGE", "", "", GetOriginalVnum()); for (int i = 0; i < cnt; ++i) { AddRareAttribute(); } return true; } bool CItem::AddRareAttribute() { int count = GetRareAttrCount(); if (count >= 2) return false; int pos = count + 5; TPlayerItemAttribute & attr = m_aAttr[pos]; int nAttrSet = GetAttributeSetIndex(); std::vector<int> avail; for (int i = 0; i < MAX_APPLY_NUM; ++i) { const TItemAttrTable & r = g_map_itemRare[i]; if (r.dwApplyIndex != 0 && r.bMaxLevelBySet[nAttrSet] > 0 && HasRareAttr(i) != true) { avail.push_back(i); } } const TItemAttrTable& r = g_map_itemRare[avail[number(0, avail.size() - 1)]]; int nAttrLevel = 5; if (nAttrLevel > r.bMaxLevelBySet[nAttrSet]) nAttrLevel = r.bMaxLevelBySet[nAttrSet]; attr.bType = r.dwApplyIndex; attr.sValue = r.lValues[nAttrLevel - 1]; UpdatePacket(); Save(); const char * pszIP = NULL; if (GetOwner() && GetOwner()->GetDesc()) pszIP = GetOwner()->GetDesc()->GetHostName(); LogManager::instance().ItemLog(pos, attr.bType, attr.sValue, GetID(), "SET_RARE", "", pszIP ? pszIP : "", GetOriginalVnum()); return true; }
-
Good afternoon...
I added the system, it adds the 6 bonus correctly, when I add the 7 bonus the following core crash:
SYSERR: Feb 21 18:24:44 :: number_ex: number(): first argument is bigger than second argument 0 -> -1, item_attribute.cpp 485
Would anyone know the reason for this error?
Thanks in advance for your help and good afternoon to all
-
Good afternoon...
I added the system, it adds the 6 bonus correctly, when I add the 8 bonus the following core crash:
SYSERR: Feb 21 18:24:44 :: number_ex: number(): first argument is bigger than second argument 0 -> -1, item_attribute.cpp 485
Would anyone know the reason for this error?
Thanks in advance for your help and good afternoon to all
-
46 minutes ago, Ace said:
você pode formular seu problema de uma maneira um pouco diferente?
Eu não fico esperto com este texto .. Me desculpe.
talvez eu possa te ajudar melhor.
I will add a gif so you can understand it better, thanks for your attention
link:
-
3 hours ago, Crystal™ said:
sysser?
Clean server and client
-
It's giving me this error when compiling
cmd_gm.cpp: In function 'void reload_regen(LPCHARACTER, const char*, int, int)':
cmd_gm.cpp:1284:33: error: 'class SECTREE_MANAGER' has no member named 'BuildMap'
SECTREE_MANAGER::instance().BuildMap(mapIndex, LocaleService_GetMapPath().c_str());Any solutions please?
-
Good evening
When I teleport from one map to another with the mini map open, when right on the map, the mini map is completely black open...
Someone by chance who has had a problem like this, could help me solve it, I thank you in advance, thank you all.
Double Map after Teleport
in Community Support - Questions & Answers
Posted
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: AtlasWindow.board.{} = {}
0320 15:56:38838 :: STARTING AtlasWindow.board.titleBar DUMP
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}
0320 15:56:38838 :: AtlasWindow.board.titleBar.{} = {}