Not answered 'NoneType' object has no attribute 'GetGlobalPosition'



Thread Author
Member
Aug
Threads
1
201
27
28
Rating - 0%
0   0   0
Can anyone help me with this error message?
this error always comes up when i move the scrollbar.



0505 17:14:27212 :: Traceback (most recent call last):

0505 17:14:27212 :: File "ui.py", line 3154, in OnMove

0505 17:14:27213 :: File "ui.py", line 58, in __call__

0505 17:14:27213 :: File "ui.py", line 40, in __call__

0505 17:14:27213 :: File "uiWiki.py", line 1191, in OnMove

0505 17:14:27213 :: File "ui.py", line 58, in __call__

0505 17:14:27214 :: File "ui.py", line 40, in __call__

0505 17:14:27214 :: File "uiWiki.py", line 1297, in __OnScroll

0505 17:14:27214 :: File "uiWiki.py", line 1321, in SetBasePos

0505 17:14:27214 :: File "uiWiki.py", line 2377, in OnRender

0505 17:14:27215 :: AttributeError
0505 17:14:27215 :: :
0505 17:14:27215 :: 'NoneType' object has no attribute 'GetGlobalPosition'
0505 17:14:27215 ::



Python:
import localeInfo

import dbg, ui, grp, app, wiki, item, nonplayer, renderTarget

def calculateRect(curValue, maxValue):
    return -1.0 + float(curValue) / float(maxValue)

def HAS_FLAG(value, flag):
    return (value & flag) == flag

def calculatePos(pos, maxWidth):
    yincrease = 0
    x , y = 0,0
    for j in xrange(30):
        if pos <= maxWidth:
            if yincrease > 0:
                pos = pos-1
                if pos < 0:
                    pos = 0
            x = 32*pos
            break
        else:
            pos-= maxWidth
            yincrease+=1
    if yincrease > 0:
        y = yincrease * 32
    return (x,y)

IMG_DIR = "d:/ymir work/ui/game/wiki/"

class EncyclopediaofGame(ui.BoardWithTitleBar):
    def __init__(self):
        ui.BoardWithTitleBar.__init__(self)
        self.AddFlag("movable")

        # Search
        self.selectedMob = 0
        self.selectedItem = 0
        self.searchSlot = None
        self.searchButton = None
        self.searchText = None
        self.searchItemNameText = None
        self.searchItemName = None
        self.searchClearBtn = None
        self.mobSlot = None
        self.searchButtonMob = None
        self.searchMobNameText = None
        self.searchMobName = None
        self.searchClearBtnMob = None
       

        # Category
        self.categoryText = None
        self.listBoxCube = None
        self.scrollBarListBoxCube = None

        self.tooltipItem = None

        # Block
        self.blockImage = None

        # Result Page
        self.resultpageImage=None
        self.resultpagebtn=None
        self.characterList = []
        self.characterIndex = 0

        self.resultpageListbox = None
        self.resultpageListboxScrollbar = None

        self.blocImage = None

        self.selectArg=""

        self.Initialize()

    def __del__(self):
        ui.BoardWithTitleBar.__del__(self)

    def Initialize(self):
        self.SetSize(720,480)
        self.SetTitleName(localeInfo.WIKI_TITLE)
        self.SetCenterPosition()
        self.LoadSearchInfos()
        self.LoadCategoryInfos()
        self.LoadBlock()
        self.LoadResultPage()

    def SetTooltip(self, tooltip):
        self.tooltipItem = tooltip

    def LoadResultPage(self):
        self.resultpagebtn = ui.Button()
        self.resultpagebtn.SetParent(self)
        self.resultpagebtn.SetUpVisual(IMG_DIR+"guide_wall.tga")
        self.resultpagebtn.SetOverVisual(IMG_DIR+"guide_wall.tga")
        self.resultpagebtn.SetDownVisual(IMG_DIR+"guide_wall.tga")
        self.resultpagebtn.SetPosition(140+10,32)
        self.resultpagebtn.SAFE_SetEvent(self.LoadGuidePage)
        self.resultpagebtn.Show()

        self.resultPageImage = ui.ImageBox()
        self.resultPageImage.SetParent(self)
        self.resultPageImage.LoadImage(IMG_DIR+"result_wall.tga")
        self.resultPageImage.SetPosition(140+10,104)
        self.resultPageImage.Show()

        for j in xrange(4):
            ch =  ui.RadioButton()
            ch.SetParent(self.resultPageImage)
            ch.SetEvent(ui.__mem_func__(self.__SelectCharacters),self.characterList,j)
            ch.SetUpVisual(IMG_DIR+"character/%d_0.tga"%j)
            ch.SetOverVisual(IMG_DIR+"character/%d_1.tga"%j)
            ch.SetDownVisual(IMG_DIR+"character/%d_2.tga"%j)
            ch.SetPosition(16+(132*j),11)
            ch.Hide()
            self.characterList.append(ch)

        self.resultpageListbox = ListBoxWiki()
        self.resultpageListbox.SetParent(self)
        self.resultpageListbox.SetPosition(140+18,104+34+5+11)
        self.resultpageListbox.SetSize(570, 326)
        self.resultpageListbox.SetViewItemCount(10)

        self.resultpageListboxScrollbar = ScrollBarNew()
        self.resultpageListboxScrollbar.SetParent(self)
        self.resultpageListboxScrollbar.SetPosition(140+18+541,104+34+5+11)
        self.resultpageListboxScrollbar.SetScrollBarSize(310)

        self.resultpageListbox.SetScrollBar(self.resultpageListboxScrollbar)


    def LoadGuidePage(self):
        self.resultpagebtn.SetUpVisual(IMG_DIR+"guide_wall.tga")
        self.resultpagebtn.SetOverVisual(IMG_DIR+"guide_wall.tga")
        self.resultpagebtn.SetDownVisual(IMG_DIR+"guide_wall.tga")

    def LoadBlock(self):
        self.blocImage = ui.ImageBox()
        self.blocImage.SetParent(self) # <board>
        self.blocImage.LoadImage(IMG_DIR+"block.tga")
        self.blocImage.SetPosition(140,32)
        self.blocImage.Show()

    def LoadSearchInfos(self):
        self.selectedMob = 0
        self.selectedItem = 0

        self.searchSlot = ui.ImageBox()
        self.searchSlot.SetParent(self) # <board>
        self.searchSlot.LoadImage(IMG_DIR+"search_slot.tga")
        self.searchSlot.SetPosition(13,32)
        self.searchSlot.Show()

        self.searchButton = ui.Button()
        self.searchButton.SetParent(self.searchSlot) # <self.searchSlot>
        self.searchButton.SetUpVisual(IMG_DIR+"button_0.tga")
        self.searchButton.SetOverVisual(IMG_DIR+"button_1.tga")
        self.searchButton.SetDownVisual(IMG_DIR+"button_2.tga")
        self.searchButton.SAFE_SetEvent(self.StartSearchItem)
        self.searchButton.SetPosition(91,3)
        self.searchButton.Show()

        self.searchItemNameText = ui.TextLine()
        self.searchItemNameText.SetParent(self.searchSlot)
        self.searchItemNameText.SetPosition(2,5)
        self.searchItemNameText.SetFontName("Tahoma:11")
        self.searchItemNameText.SetText("")
        self.searchItemNameText.Show()

        self.searchItemName = ui.EditLine()
        self.searchItemName.SetParent(self.searchSlot)
        self.searchItemName.SetPosition(2,5)
        self.searchItemName.SetSize(91,26)
        self.searchItemName.SetFontName("Tahoma:11")
        self.searchItemName.SetText(localeInfo.WIKI_ITEM_NAME)
        self.searchItemName.SetMax(30)
        self.searchItemName.Show()

        self.searchItemName.OnIMEUpdate = ui.__mem_func__(self.__OnValueUpdateItem)
        self.searchItemName.SetReturnEvent(ui.__mem_func__(self.StartSearchItem))

        self.searchClearBtn = ui.Button()
        self.searchClearBtn.SetParent(self.searchSlot)
        self.searchClearBtn.SetUpVisual(IMG_DIR+"clear_button_1.tga")
        self.searchClearBtn.SetOverVisual(IMG_DIR+"clear_button_2.tga")
        self.searchClearBtn.SetDownVisual(IMG_DIR+"clear_button_1.tga")
        self.searchClearBtn.SetPosition(75,5)
        self.searchClearBtn.SAFE_SetEvent(self.ClearEditlineItem)
        self.searchClearBtn.Hide()

        self.mobSlot = ui.ImageBox()
        self.mobSlot.SetParent(self) # <board>
        self.mobSlot.LoadImage(IMG_DIR+"search_slot.tga")
        self.mobSlot.SetPosition(13,32+29)
        self.mobSlot.Show()

        self.searchButtonMob = ui.Button()
        self.searchButtonMob.SetParent(self.mobSlot) # <self.searchSlot>
        self.searchButtonMob.SetUpVisual(IMG_DIR+"button_0.tga")
        self.searchButtonMob.SetOverVisual(IMG_DIR+"button_1.tga")
        self.searchButtonMob.SetDownVisual(IMG_DIR+"button_2.tga")
        self.searchButtonMob.SAFE_SetEvent(self.StartSearchMob)
        self.searchButtonMob.SetPosition(91,2)
        self.searchButtonMob.Show()

        self.searchMobNameText = ui.TextLine()
        self.searchMobNameText.SetParent(self.mobSlot)
        self.searchMobNameText.SetPosition(2,5)
        self.searchMobNameText.SetFontName("Tahoma:11")
        self.searchMobNameText.SetText("")
        self.searchMobNameText.Show()

        self.searchMobName = ui.EditLine()
        self.searchMobName.SetParent(self.mobSlot)
        self.searchMobName.SetPosition(2,5)
        self.searchMobName.SetSize(91,26)
        self.searchMobName.SetFontName("Tahoma:11")
        self.searchMobName.SetText(localeInfo.WIKI_MOB_NAME)
        self.searchMobName.SetMax(30)
        self.searchMobName.Show()

        self.searchMobName.OnIMEUpdate = ui.__mem_func__(self.__OnValueUpdateMob)
        self.searchMobName.SetReturnEvent(ui.__mem_func__(self.StartSearchMob))

        self.searchClearBtnMob = ui.Button()
        self.searchClearBtnMob.SetParent(self.mobSlot)
        self.searchClearBtnMob.SetUpVisual(IMG_DIR+"clear_button_1.tga")
        self.searchClearBtnMob.SetOverVisual(IMG_DIR+"clear_button_2.tga")
        self.searchClearBtnMob.SetDownVisual(IMG_DIR+"clear_button_1.tga")
        self.searchClearBtnMob.SetPosition(75,5)
        self.searchClearBtnMob.SAFE_SetEvent(self.ClearEditlineMob)
        self.searchClearBtnMob.Hide()


    def UpdateItemsList(self):
        if len(self.searchItemName.GetText()) > 0:
            self.searchClearBtn.Show()
            items_list = item.GetItemsByName(str(self.searchItemName.GetText()))
            for i, items in enumerate(items_list, start=1):
                item.SelectItem(items)
                if len(self.searchItemName.GetText()) > len(item.GetItemName()):
                    self.searchItemNameText.SetText("")
                    continue

                if item.GetItemName().find("+") != -1:
                    if item.GetItemName()[:-2] == self.searchItemName.GetText():
                        self.selectedItem=items
                        self.selectedType=0
                    self.searchItemNameText.SetText("|cff00ff00%s"%item.GetItemName()[:-2])
                else:
                    if item.GetItemName() == self.searchItemName.GetText():
                        self.selectedType=0
                        self.selectedItem=items
                    self.searchItemNameText.SetText("|cff00ff00%s"%item.GetItemName())
            if len(self.searchItemNameText.GetText()) == len(self.searchItemName.GetText()):
                self.searchItemNameText.SetText("")
        else:
            self.selectedItem=0
            self.searchItemName.SetText("")
            self.searchItemNameText.SetText("")
            self.searchClearBtn.Hide()

    def __OnValueUpdateItem(self):
        ui.EditLine.OnIMEUpdate(self.searchItemName)
        self.UpdateItemsList()
        if len(self.searchItemName.GetText()) > 0:
            self.searchClearBtn.Show()

        def OnKeyDown(self, key):
            if app.DIK_RETURN == key:
                if self.selectedItem > 1:
                    self.StartSearchItem()
                else:
                    self.StartSearchItem()
                    return True
            return True

    def ClearEditlineItem(self):
        self.selectedItem=0
        self.searchItemName.SetText("")
        self.searchItemNameText.SetText("")
        self.searchClearBtn.Hide()

    def StartSearchItem(self):
        if self.selectedItem != 0:
            self.ShowItemInfo(self.selectedItem,0)

    #########################################

    def UpdateMobsList(self):
        if len(self.searchMobName.GetText()) > 0:
            self.searchClearBtnMob.Show()
            mobs_list = nonplayer.GetMobsByNameWiki(str(self.searchMobName.GetText()))
            for i, mobs in enumerate(mobs_list, start=1):
                mob_name = nonplayer.GetMonsterName(mobs)
                if len(self.searchMobName.GetText()) > len(mob_name):
                    self.searchMobNameText.SetText("")
                    continue
                if mob_name.find("+") != -1:
                    if mob_name[:-2] == self.searchMobName.GetText():
                        self.selectedMob=mobs
                    self.searchMobNameText.SetText("|cff00ff00%s"%mob_name[:-2])
                else:
                    if mob_name == self.searchMobName.GetText():
                        self.selectedMob=mobs
                    self.searchMobNameText.SetText("|cff00ff00%s"%mob_name)

            if len(self.searchMobNameText.GetText()) == len(self.searchMobName.GetText()):
                self.searchMobNameText.SetText("")
        else:
            self.selectedMob=0
            self.searchMobName.SetText("")
            self.searchMobNameText.SetText("")
            self.searchClearBtnMob.Hide()

    def __OnValueUpdateMob(self):
        ui.EditLine.OnIMEUpdate(self.searchMobName)
        self.UpdateMobsList()
        if len(self.searchMobName.GetText()) > 0:
            self.searchClearBtnMob.Show()

        def OnKeyDown(self, key):
            if app.DIK_RETURN == key:
                if self.selectedMob > 1:
                    self.StartSearchMob()
                else:
                    self.StartSearchMob()
                    return True
            return True

    def ClearEditlineMob(self):
        self.selectedMob=0
        self.searchMobName.SetText("")
        self.searchMobNameText.SetText("")
        self.searchClearBtnMob.Hide()

    def StartSearchMob(self):
        if self.selectedMob != 0:
            self.ShowItemInfo(self.selectedMob,1)

    def LoadCategoryInfos(self):
        self.categoryText = ui.TextLine()
        self.categoryText.SetParent(self) # <board>
        self.categoryText.SetPosition(13,89)
        self.categoryText.SetText(localeInfo.WIKI_CATEGORY)
        self.categoryText.Show()

        self.listBoxCube = DropdownTree()
        self.listBoxCube.SetParent(self)
        self.listBoxCube.SetPosition(13,105)
        self.listBoxCube.SetSize(109, 295)
        self.listBoxCube.SetItemSize(109, 18)
        self.listBoxCube.SetViewItemCount(18)
        self.listBoxCube.Show()

        self.scrollBarListBoxCube = ScrollBarNew()
        self.scrollBarListBoxCube.SetParent(self)
        self.scrollBarListBoxCube.SetPosition(109+15,105)
        self.scrollBarListBoxCube.SetScrollBarSize(365)
        self.scrollBarListBoxCube.Show()

        self.listBoxCube.SetScrollBar(self.scrollBarListBoxCube)

        listBoxCubeItems = [
        {
            'item' : self.CreateCubeMenuTab1Item(localeInfo.WIKI_EQUIPMENT, lambda arg = ("Equipment#"): self.__EmptyFunction(arg)),
            'children' : (
                {'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_WEAPONS, lambda arg = ("Equipment#0"): self.__SelectType(arg)),},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_ARMOR, lambda arg = ("Equipment#1"): self.__SelectType(arg)),},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_HELMET, lambda arg = ("Equipment#2"): self.__SelectType(arg)),},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_SHIELD, lambda arg = ("Equipment#3"): self.__SelectType(arg)),},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_EARRING, lambda arg = ("Equipment#4"): self.__SelectType(arg)),},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_BRACELET, lambda arg = ("Equipment#5"): self.__SelectType(arg)),},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_NECKLACE, lambda arg = ("Equipment#6"): self.__SelectType(arg)),},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_SHOES, lambda arg = ("Equipment#7"): self.__SelectType(arg)),},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_BELT, lambda arg = ("Equipment#8"): self.__SelectType(arg)),},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_TALISMAN, lambda arg = ("Equipment#9"): self.__SelectType(arg)),},
            )
        },
        {
            'item' : self.CreateCubeMenuTab1Item(localeInfo.WIKI_CHESTS, lambda arg = ("Chests#"): self.__EmptyFunction(arg)),
            'children' : (
                {'item' : self.CreateLastListItem(localeInfo.WIKI_CHESTS_BOSS, lambda arg = ("Chests#0"): self.__SelectType(arg))},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_CHESTS_EVENT, lambda arg = ("Chests#1"): self.__SelectType(arg))},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_CHESTS_ALTERNATIVE, lambda arg = ("Chests#2"): self.__SelectType(arg))},
            )
        },
        {
            'item' : self.CreateCubeMenuTab1Item(localeInfo.WIKI_BOSSES, lambda arg = ("Bosses#"): self.__EmptyFunction(arg)),
            'children' : (
                {'item' : self.CreateLastListItem(localeInfo.WIKI_1_75, lambda arg = ("Bosses#0"): self.__SelectType(arg)),},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_76_100, lambda arg = ("Bosses#1"): self.__SelectType(arg)),},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_100, lambda arg = ("Bosses#2"): self.__SelectType(arg)),},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_BOSSES_EVENT, lambda arg = ("Bosses#3"): self.__SelectType(arg)),},
            )
        },
        {
            'item' : self.CreateCubeMenuTab1Item(localeInfo.WIKI_MONSTER, lambda arg = ("Monster#"): self.__EmptyFunction(arg)),
            'children' : (
                {'item' : self.CreateLastListItem(localeInfo.WIKI_1_75, lambda arg = ("Monster#0"): self.__SelectType(arg)),},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_76_100, lambda arg = ("Monster#1"): self.__SelectType(arg)),},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_100, lambda arg = ("Monster#2"): self.__SelectType(arg)),},
            )
        },
        {
            'item' : self.CreateCubeMenuTab1Item(localeInfo.WIKI_METINSTONE, lambda arg = ("Metinstone#"): self.__EmptyFunction(arg)),
            'children' : (
                {'item' : self.CreateLastListItem(localeInfo.WIKI_1_75, lambda arg = ("Metinstone#0"): self.__SelectType(arg)),},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_76_100, lambda arg = ("Metinstone#1"): self.__SelectType(arg)),},
                {'item' : self.CreateLastListItem(localeInfo.WIKI_100, lambda arg = ("Metinstone#2"): self.__SelectType(arg)),},
            )
        }
       
       
        ]

        self.listBoxCube.AppendItemList(listBoxCubeItems)

    def __EmptyFunction(self, arg):
        pass

    def __SelectCharacters(self, buttonList, buttonIndex):
        self.__ClickRadioButton(buttonList,buttonIndex)
        self.__SelectType(self.selectArg,True)

    def __ClickRadioButton(self, buttonList, buttonIndex):
        try:
            characterIndex=buttonList[buttonIndex]
        except IndexError:
            return
        for eachButton in buttonList:
            eachButton.SetUp()
        characterIndex.Down()
        self.characterIndex=buttonIndex

    def SetCharacterImagesStatus(self, flag):
        if flag:
            for j in xrange(4):
                self.characterList[j].Show()
            self.__ClickRadioButton(self.characterList,self.characterIndex)
        else:
            for j in xrange(4):
                self.characterList[j].Hide()

    def ClearResultListbox(self, argList):
        try:
            self.resultpageListbox.RemoveAllItems()
            self.resultpageListboxScrollbar.Hide()
            self.resultpageListbox.Show()
            renderTarget.Destroy()

            isEquipment = argList[0] == "Equipment"

            if argList[0].lower() != self.resultpagebtn.GetUpVisualFileName():
                if argList[0].lower() == "equipment" or argList[0].lower() == "chests":
                    self.resultpagebtn.SetUpVisual(IMG_DIR+"category/%s_%d.tga"%(argList[0].lower(),int(argList[1])))
                    self.resultpagebtn.SetOverVisual(IMG_DIR+"category/%s_%d.tga"%(argList[0].lower(),int(argList[1])))
                    self.resultpagebtn.SetDownVisual(IMG_DIR+"category/%s_%d.tga"%(argList[0].lower(),int(argList[1])))
                else:
                    self.resultpagebtn.SetUpVisual(IMG_DIR+"category/%s_wall.tga"%(argList[0].lower()))
                    self.resultpagebtn.SetOverVisual(IMG_DIR+"category/%s_wall.tga"%(argList[0].lower()))
                    self.resultpagebtn.SetDownVisual(IMG_DIR+"category/%s_wall.tga"%(argList[0].lower()))


            if isEquipment:
                self.SetCharacterImagesStatus(True)
                self.resultpageListbox.SetPosition(140+18,104+34+5+11)
                self.resultpageListboxScrollbar.SetPosition(140+18+541,104+34+5+11)
                self.resultpageListboxScrollbar.SetScrollBarSize(310)
                self.resultpageListbox.SetSize(570, 326)
            else:
                self.SetCharacterImagesStatus(False)
                self.resultpageListbox.SetPosition(140+18,104+5)
                self.resultpageListboxScrollbar.SetPosition(140+18+541,104+5)
                self.resultpageListboxScrollbar.SetScrollBarSize(350)
                self.resultpageListbox.SetSize(570, 360)
        except:
            pass


    def __SelectType(self, arg, isCharacterBtn = False):
        try:
            if isCharacterBtn == False and self.selectArg == arg:
                return
            self.selectArg = arg
            argList = arg.split("#")

            self.ClearResultListbox(argList)

            if argList[0] == "Equipment":
                for j in xrange(wiki.GetCategorySize(self.characterIndex,int(argList[1]))):
                    itemVnum = wiki.GetCategoryData(self.characterIndex,int(argList[1]),j)
                    if j==0:
                        item = EquipmentItem(j,self,self.resultpageListbox,itemVnum,False)
                    else:
                        item = EquipmentItem(j,self,self.resultpageListbox,itemVnum,True)

                    (igx,igy) = item.GetGlobalPosition()
                    (lgx,lgy) = self.resultpageListbox.GetGlobalPosition()
                    if igy+item.GetHeight() > lgy+self.resultpageListbox.GetHeight():
                        self.resultpageListboxScrollbar.Show()

                    self.resultpageListbox.AppendItem(item)
            elif argList[0] == "Chests":
                for j in xrange(wiki.GetChestSize(int(argList[1]))):
                    (itemVnum, bossVnum)= wiki.GetChestData(int(argList[1]),j)
                    if itemVnum == 0:
                        continue
                    item = ListBoxItemSpecial(j,self,self.resultpageListbox,itemVnum,bossVnum,0)

                    (igx,igy) = item.GetGlobalPosition()
                    (lgx,lgy) = self.resultpageListbox.GetGlobalPosition()
                    if igy+item.GetHeight() > lgy+self.resultpageListbox.GetHeight():
                        self.resultpageListboxScrollbar.Show()

                    self.resultpageListbox.AppendItem(item)
            elif argList[0] == "Bosses":
                for j in xrange(wiki.GetBossSize(int(argList[1]))):
                    mobVnum = wiki.GetBossData(int(argList[1]),j)
                    if mobVnum == 0:
                        continue
                    item = ListBoxItemSpecial(j,self,self.resultpageListbox,mobVnum,0,1)
                    (igx,igy) = item.GetGlobalPosition()
                    (lgx,lgy) = self.resultpageListbox.GetGlobalPosition()
                    if igy+item.GetHeight() > lgy+self.resultpageListbox.GetHeight():
                        self.resultpageListboxScrollbar.Show()

                    self.resultpageListbox.AppendItem(item)
            elif argList[0] == "Monster":
                for j in xrange(wiki.GetMonsterSize(int(argList[1]))):
                    mobVnum = wiki.GetMonsterData(int(argList[1]),j)
                    if mobVnum == 0:
                        continue
                    item = ListBoxItemSpecial(j,self,self.resultpageListbox,mobVnum,0,1)
                    (igx,igy) = item.GetGlobalPosition()
                    (lgx,lgy) = self.resultpageListbox.GetGlobalPosition()
                    if igy+item.GetHeight() > lgy+self.resultpageListbox.GetHeight():
                        self.resultpageListboxScrollbar.Show()
                    self.resultpageListbox.AppendItem(item)
            elif argList[0] == "Metinstone":
                for j in xrange(wiki.GetStoneSize(int(argList[1]))):
                    mobVnum = wiki.GetStoneData(int(argList[1]),j)
                    if mobVnum == 0:
                        continue
                    item = ListBoxItemSpecial(j,self,self.resultpageListbox,mobVnum,0,1)
                    (igx,igy) = item.GetGlobalPosition()
                    (lgx,lgy) = self.resultpageListbox.GetGlobalPosition()
                    if igy+item.GetHeight() > lgy+self.resultpageListbox.GetHeight():
                        self.resultpageListboxScrollbar.Show()

                    self.resultpageListbox.AppendItem(item)
        except:
            pass

    def ShowItemInfo(self, vnum, arg):
        try:
            self.resultpageListboxScrollbar.Show()
            if arg == 0: # item info
                self.ClearResultListbox(self.selectArg.split("#"))
                self.resultpageListboxScrollbar.Show()
                item.SelectItem(vnum)
                item_table = EquipmentItemSpecial(self,self.resultpageListbox,vnum)
                self.resultpageListbox.AppendItem(item_table)
                if item.GetItemName().find("+") != -1:
                    new_refine_table = EquipmentItem(99,self,self.resultpageListbox,vnum,False)
                    self.resultpageListbox.AppendItem(new_refine_table)
            elif arg == 1:
                self.ClearResultListbox("Chests#0".split("#"))
                self.resultpageListboxScrollbar.Show()
                monster_table = MonsterItemSpecial(self,self.resultpageListbox,vnum)
                self.resultpageListbox.AppendItem(monster_table)
                monster_statics = MonsterStatics(self,self.resultpageListbox,vnum)
                self.resultpageListbox.AppendItem(monster_statics)
        except:
            pass

    def OnUpdate(self):
        if len( self.resultpageListbox.GetItems())==0:
            return
        for j in xrange(len(self.resultpageListbox.itemList)):
            list_item = self.resultpageListbox.itemList[j]
            (pgx,pgy) = self.resultpageListbox.GetGlobalPosition()
            (sgx,sgy) = list_item.GetGlobalPosition()
            height = 100
            isMonsterPage = list_item.isType == 0
            if not isMonsterPage:
                height=500
            if sgx+list_item.GetHeight() < pgy:
                # list_item.Hide()
                list_item.ClearData()
            elif (sgy+list_item.GetHeight()-height) > pgy+self.resultpageListbox.GetHeight():
                # list_item.Hide()
                list_item.ClearData()
            else:
                list_item.LoadItemInfos()

    def CreateCubeMenuTab1Item(self, text, event, offset = 0):
        listboxItem = CubeMenuTab1(text)
        listboxItem.SetVisible(True)
        listboxItem.SetEvent(event)
        listboxItem.SetOffset(offset)
        return listboxItem

    def CreateLastListItem(self, text, event, offset = 0):
        listboxItem = LastListItem(text)
        listboxItem.SetEvent(event)
        listboxItem.SetOffset(offset)
        return listboxItem

    def Open(self):
        self.Show()

    def Destroy(self):
        self.listBoxCube.ClearItem()
        self.listBoxCube = 0
        self.resultpageListbox.RemoveAllItems()
        self.resultpageListbox = 0
        self.tooltipItem = None
        self.selectedMob = 0
        self.selectedItem = 0
        self.searchSlot = None
        self.searchButton = None
        self.searchText = None
        self.searchItemNameText = None
        self.searchItemName = None
        self.searchClearBtn = None
        self.mobSlot = None
        self.searchButtonMob = None
        self.searchMobNameText = None
        self.searchMobName = None
        self.searchClearBtnMob = None
        self.categoryText = None
        self.scrollBarListBoxCube = 0
        self.blockImage = 0
        self.resultpageImage=0
        self.resultpagebtn=0
        self.characterList = 0
        self.characterIndex = 0
        self.resultpageListboxScrollbar = 0
        self.blocImage = 0
        self.selectArg=0
        del self

    def Close(self):
        self.Hide()

    def OnPressExitKey(self):
        self.Close()
        return True

    def OnPressEscapeKey(self):
        self.Close()
        return True

class DropdownTree(ui.Window):
    class Item(ui.Window):
        def __init__(self):
            ui.Window.__init__(self)
            self.id = -1
            self.parentId = -1
            self.offset = 0
            self.visible = False
            self.expanded = False
            self.event = None
            self.onCollapseEvent = None
            self.onExpandEvent = None
           
        def __del__(self):
            ui.Window.__del__(self)

        def SetParent(self, parent):
            ui.Window.SetParent(self, parent)
            self.parent=ui.proxy(parent)

        def SetSize(self, width, height):
            ui.Window.SetSize(self, width, height)

        def GetId(self):
            return self.id

        def SetId(self, id):
            self.id = id

        def GetParentId(self):
            return self.parentId

        def SetParentId(self, parentId):
            self.parentId = parentId
           
        def IsParent(self):
            return self.parentId == -1

        def SetVisible(self, visible):
            self.visible = visible
           
        def IsVisible(self):
            return self.visible
           
        def IsExpanded(self):
            return self.expanded
           
        def Expand(self):
            self.expanded = True
            if self.onExpandEvent:
                self.onExpandEvent()
           
        def Collapse(self):
            self.expanded = False
            if self.onCollapseEvent:
                self.onCollapseEvent()

        def SetOnExpandEvent(self, event):
            self.onExpandEvent = event

        def SetOnCollapseEvent(self, event):
            self.onCollapseEvent = event

        def SetOffset(self, offset):
            self.offset = offset

        def GetOffset(self):
            return self.offset

        def SetEvent(self, event):
            self.event = event

        def OnSelect(self):
            if self.event:
                self.event()
            self.parent.SelectItem(self)

        def OnMouseLeftButtonDown(self):
            self.OnSelect()

    def __init__(self):
        ui.Window.__init__(self)

        self.__curItemId=0
        self.viewItemCount=10
        self.basePos=0
        self.itemHeight=16
        self.itemStep=20
        self.selItem=0
        self.itemList=[]
        self.onSelectItemEvent = lambda *arg: None
        self.itemWidth=100

        self.scrollBar=None
        self.__UpdateSize()
   
    def __del__(self):
        ui.Window.__del__(self)

    def __UpdateSize(self):
        height=self.itemStep*self.__GetViewItemCount()

        #self.SetSize(self.itemWidth, height)
        self.SetSize(self.itemWidth, 375)

    def IsEmpty(self):
        if len(self.itemList)==0:
            return 1
        return 0

    def OnMouseWheel(self, nLen):
        if self.scrollBar:
            self.scrollBar.OnMouseWheel(nLen)

    def SetItemStep(self, itemStep):
        self.itemStep=itemStep
        self.__UpdateSize()

    def SetItemSize(self, itemWidth, itemHeight):
        self.itemWidth=itemWidth
        self.itemHeight=itemHeight
        self.__UpdateSize()
   
    def SetViewItemCount(self, viewItemCount):
        self.viewItemCount=viewItemCount
   
    def SetSelectEvent(self, event):
        self.onSelectItemEvent = event

    def SetBasePos(self, basePos):
        for oldItem in self.itemList:
            oldItem.Hide()

        self.basePos=basePos

        skipCount = basePos
        pos = basePos
        for lItem in self.itemList:
            if not lItem.IsVisible():
                continue
           
            if skipCount > 0:
                skipCount -= 1
                continue

            if pos >= (self.basePos+self.viewItemCount):
                break

            (x, y) = self.GetItemViewCoord(pos, lItem.GetWidth())
            lItem.SetPosition(x+lItem.GetOffset(), y)
            lItem.Show()
            pos+=1
        self.UpdateScrollbar()

    def GetItemIndex(self, argItem):
        return self.itemList.index(argItem)

    def GetSelectedItem(self):
        return self.selItem

    def SelectIndex(self, index):
        if index >= len(self.itemList) or index < 0:
            self.selItem = None
            return
        try:
            self.selItem=self.itemList[index]
        except:
            pass

    def ClearItem(self):
        self.selItem=None
        for lItem in self.itemList:
            lItem.Hide()

        self.itemList=[]
        self.__curItemId = 0

        if self.scrollBar:
            self.scrollBar.SetPos(0)
        self.SetBasePos(0)

    def SelectItem(self, selItem):
        self.selItem = selItem
        if selItem.IsExpanded():
            self.CloseTree(selItem, self.itemList)
        else:
            self.OpenTree(selItem, self.itemList)
        self.SetBasePos(self.basePos)

    def __AppendItem(self, newItem, parentId):
        curItemId = self.__curItemId
        self.__curItemId += 1
       
        newItem.SetParent(self)
        newItem.SetParentId(parentId)
        newItem.SetSize(self.itemWidth, self.itemHeight)
        newItem.SetId(curItemId)

        pos = self.__GetItemCount()
        self.itemList.append(newItem)

        if newItem.IsVisible() and self.__IsInViewRange(pos):
            (x, y)=self.GetItemViewCoord(pos, newItem.GetWidth())
            newItem.SetPosition(x, y)
            newItem.Show()
        else:
            newItem.Hide()

        self.UpdateScrollbar()

        return curItemId

    def AppendItemList(self, dict):
        self.__AppendItemList(-1, dict)
   
    def __AppendItemList(self, parentId, dict):
        for lItem in dict:
            if 'item' in lItem:
                id = self.__AppendItem(lItem['item'], parentId)
                if 'children' in lItem:
                    self.__AppendItemList(id, lItem['children'])
               
    def SetScrollBar(self, scrollBar):
        scrollBar.SetScrollEvent(ui.__mem_func__(self.__OnScroll))
        self.scrollBar=scrollBar

    def __OnScroll(self):
        self.SetBasePos(int(self.scrollBar.GetPos()*self.__GetScrollLen()))

    def __GetScrollLen(self):
        scrollLen=self.__GetItemCount()-self.__GetViewItemCount()
        if scrollLen<0:
            return 0

        return scrollLen

    def __GetViewItemCount(self):
        return self.viewItemCount

    def __GetItemCount(self):
        return sum(1 for lItem in self.itemList if lItem.IsVisible())

    def GetItemViewCoord(self, pos, itemWidth):
        return (0, (pos-self.basePos)*self.itemStep)

    def __IsInViewRange(self, pos):
        if pos<self.basePos:
            return 0
        if pos>=self.basePos+self.viewItemCount:
            return 0
        return 1
   
    def UpdateScrollbar(self):
        if self.__GetViewItemCount() < self.__GetItemCount():
            self.scrollBar.SetMiddleBarSize(float(self.__GetViewItemCount())/self.__GetItemCount())
            self.scrollBar.Show()
        else:
            self.scrollBar.Hide()

    def CloseTree(self, curItem, list):
        curItem.Collapse()
        for listboxItem in list:
            if listboxItem.GetParentId() == curItem.GetId():
                listboxItem.SetVisible(False)
                self.CloseTree(listboxItem, list)
       
    def OpenTree(self, curItem, list):
        curItem.Expand()
        for listboxItem in list:
            if listboxItem.GetParentId() == curItem.GetId():
                listboxItem.SetVisible(True)

class CubeMenuTab1(DropdownTree.Item):
    def __init__(self, text):
        DropdownTree.Item.__init__(self)
        self.overLine = False

        self.iconBackgroundImage = ui.ImageBox()
        self.iconBackgroundImage.SetParent(self)
        self.iconBackgroundImage.AddFlag("not_pick")
        self.iconBackgroundImage.SetPosition(0,0)
        self.iconBackgroundImage.LoadImage(IMG_DIR +"plus.tga")
        self.iconBackgroundImage.Show()

        self.textLine=ui.TextLine()
        self.textLine.SetParent(self.iconBackgroundImage)
        self.textLine.SetPosition(0,1)
        self.textLine.SetWindowHorizontalAlignLeft()
        #self.textLine.SetHorizontalAlignCenter()
        self.textLine.SetText("  "+text)
        self.textLine.Show()

        self.SetOnExpandEvent(self.ExpandEvent)
        self.SetOnCollapseEvent(self.CollapseEvent)

    def SetSize(self, width, height):
        DropdownTree.Item.SetSize(self, width-self.GetOffset(), height)

    def CollapseEvent(self):   
        self.iconBackgroundImage.LoadImage(IMG_DIR +"plus.tga")
        self.iconBackgroundImage.Show()

    def ExpandEvent(self):
        self.iconBackgroundImage.LoadImage(IMG_DIR +"minus.tga")
        self.iconBackgroundImage.Show()

    def GetText(self):
        return self.textLine.GetText()

    def __del__(self):
        DropdownTree.Item.__del__(self)

class LastListItem(DropdownTree.Item):
    def __init__(self, text):
        DropdownTree.Item.__init__(self)
        self.overLine = False

        textLine=ui.TextLine()
        textLine.SetParent(self)
        textLine.SetFontName(localeInfo.UI_DEF_FONT)
        textLine.SetWindowHorizontalAlignLeft()
        #textLine.SetHorizontalAlignCenter()
        textLine.SetText("  "+text)
        textLine.Show()

        self.textLine = textLine
        self.text = text

    def __del__(self):
        DropdownTree.Item.__del__(self)

    def GetText(self):
        return self.text

    def SetSize(self, width, height):
        DropdownTree.Item.SetSize(self, width-self.GetOffset(), height)

    def OnMouseOverIn(self):
        self.overLine = True

    def OnMouseOverOut(self):
        self.overLine = False

    def OnRender(self):
        if self.overLine and self.parent.GetSelectedItem()!=self:
            x, y = self.GetGlobalPosition()
            grp.SetColor(grp.GenerateColor(1.0, 1.0, 1.0, 0.2))
            grp.RenderBar(x, y, self.GetWidth(), self.GetHeight())
        elif self.parent.GetSelectedItem()==self:
            x, y = self.GetGlobalPosition()
            grp.SetColor(grp.GenerateColor(0.0, 0.0, 1.0, 1.0))
            grp.RenderBar(x, y, self.GetWidth(), self.GetHeight())
        else:
            x, y = self.GetGlobalPosition()
            grp.SetColor(grp.GenerateColor(0.0, 0.0, 0.0, 1.0))
            grp.RenderBar(x, y, self.GetWidth(), self.GetHeight())


class ScrollBarNew(ui.Window):
    SCROLLBAR_WIDTH = 13
    SCROLLBAR_MIDDLE_HEIGHT = 1
    SCROLLBAR_BUTTON_WIDTH = 17
    SCROLLBAR_BUTTON_HEIGHT = 17
    SCROLL_BTN_XDIST = 2
    SCROLL_BTN_YDIST = 2


    class MiddleBar(ui.DragButton):
        def __init__(self):
            ui.DragButton.__init__(self)
            self.AddFlag("movable")

            self.SetWindowName("scrollbar_middlebar")

        def MakeImage(self):
            top = ui.ExpandedImageBox()
            top.SetParent(self)
            top.LoadImage(IMG_DIR+"scrollbar/scrollbar_middle_top.tga")
            top.AddFlag("not_pick")
            top.Show()
            topScale = ui.ExpandedImageBox()
            topScale.SetParent(self)
            topScale.SetPosition(0, top.GetHeight())
            topScale.LoadImage(IMG_DIR+"scrollbar/scrollbar_middle_topscale.tga")
            topScale.AddFlag("not_pick")
            topScale.Show()

            bottom = ui.ExpandedImageBox()
            bottom.SetParent(self)
            bottom.LoadImage(IMG_DIR+"scrollbar/scrollbar_middle_bottom.tga")
            bottom.AddFlag("not_pick")
            bottom.Show()
            bottomScale = ui.ExpandedImageBox()
            bottomScale.SetParent(self)
            bottomScale.LoadImage(IMG_DIR+"scrollbar/scrollbar_middle_bottomscale.tga")
            bottomScale.AddFlag("not_pick")
            bottomScale.Show()

            middle = ui.ExpandedImageBox()
            middle.SetParent(self)
            middle.LoadImage(IMG_DIR+"scrollbar/scrollbar_middle_middle.tga")
            middle.AddFlag("not_pick")
            middle.Show()

            self.top = top
            self.topScale = topScale
            self.bottom = bottom
            self.bottomScale = bottomScale
            self.middle = middle

        def SetSize(self, height):
            minHeight = self.top.GetHeight() + self.bottom.GetHeight() + self.middle.GetHeight()
            height = max(minHeight, height)
            ui.DragButton.SetSize(self, 10, height)

            scale = (height - minHeight) / 2
            extraScale = 0
            if (height - minHeight) % 2 == 1:
                extraScale = 1

            self.topScale.SetRenderingRect(0, 0, 0, scale - 1)
            self.middle.SetPosition(0, self.top.GetHeight() + scale)
            self.bottomScale.SetPosition(0, self.middle.GetBottom())
            self.bottomScale.SetRenderingRect(0, 0, 0, scale - 1 + extraScale)
            self.bottom.SetPosition(0, height - self.bottom.GetHeight())

    def __init__(self):
        ui.Window.__init__(self)

        self.pageSize = 1
        self.curPos = 0.0
        self.eventScroll = None
        self.eventArgs = None
        self.lockFlag = False

        self.CreateScrollBar()
        self.SetScrollBarSize(0)

        self.scrollStep = 0.20
        self.SetWindowName("NONAME_ScrollBar")

    def __del__(self):
        ui.Window.__del__(self)

    def CreateScrollBar(self):
        topImage = ui.ExpandedImageBox()
        topImage.SetParent(self)
        topImage.AddFlag("not_pick")
        topImage.LoadImage(IMG_DIR+"scrollbar/scrollbar_top.tga")
        topImage.Show()
        bottomImage = ui.ExpandedImageBox()
        bottomImage.SetParent(self)
        bottomImage.AddFlag("not_pick")
        bottomImage.LoadImage(IMG_DIR+"scrollbar/scrollbar_bottom.tga")
        bottomImage.Show()
        middleImage = ui.ExpandedImageBox()
        middleImage.SetParent(self)
        middleImage.AddFlag("not_pick")
        middleImage.SetPosition(0, topImage.GetHeight())
        middleImage.LoadImage(IMG_DIR+"scrollbar/scrollbar_middle.tga")
        middleImage.Show()
        self.topImage = topImage
        self.bottomImage = bottomImage
        self.middleImage = middleImage

        middleBar = self.MiddleBar()
        middleBar.SetParent(self)
        middleBar.SetMoveEvent(ui.__mem_func__(self.OnMove))
        middleBar.Show()
        middleBar.MakeImage()
        middleBar.SetSize(0) # set min height
        self.middleBar = middleBar

    def Destroy(self):
        self.eventScroll = None
        self.eventArgs = None

    def SetScrollEvent(self, event, *args):
        self.eventScroll = event
        self.eventArgs = args

    def SetMiddleBarSize(self, pageScale):
        self.middleBar.SetSize(int(pageScale * float(self.GetHeight() - self.SCROLL_BTN_YDIST*2)))
        realHeight = self.GetHeight() - self.SCROLL_BTN_YDIST*2 - self.middleBar.GetHeight()
        self.pageSize = realHeight

    def SetScrollBarSize(self, height):
        self.SetSize(self.SCROLLBAR_WIDTH, height)

        self.pageSize = height - self.SCROLL_BTN_YDIST*2 - self.middleBar.GetHeight()

        middleImageScale = float((height - self.SCROLL_BTN_YDIST*2) - self.middleImage.GetHeight()) / float(self.middleImage.GetHeight())
        self.middleImage.SetRenderingRect(0, 0, 0, middleImageScale)
        self.bottomImage.SetPosition(0, height - self.bottomImage.GetHeight())

        self.middleBar.SetRestrictMovementArea(self.SCROLL_BTN_XDIST, self.SCROLL_BTN_YDIST, \
            self.middleBar.GetWidth(), height - self.SCROLL_BTN_YDIST * 2)
        self.middleBar.SetPosition(self.SCROLL_BTN_XDIST, self.SCROLL_BTN_YDIST)
       
    def SetScrollStep(self, step):
        self.scrollStep = step
   
    def GetScrollStep(self):
        return self.scrollStep
       
    def GetPos(self):
        return self.curPos

    def OnUp(self):
        self.SetPos(self.curPos-self.scrollStep)

    def OnDown(self):
        self.SetPos(self.curPos+self.scrollStep)

    def SetPos(self, pos, moveEvent = True):
        pos = max(0.0, pos)
        pos = min(1.0, pos)

        newPos = float(self.pageSize) * pos
        self.middleBar.SetPosition(self.SCROLL_BTN_XDIST, int(newPos) + self.SCROLL_BTN_YDIST)
        if moveEvent == True:
            self.OnMove()

    def OnMove(self):

        if self.lockFlag:
            return

        if 0 == self.pageSize:
            return

        (xLocal, yLocal) = self.middleBar.GetLocalPosition()
        self.curPos = float(yLocal - self.SCROLL_BTN_YDIST) / float(self.pageSize)

        if self.eventScroll:
            apply(self.eventScroll, self.eventArgs)

    def OnMouseLeftButtonDown(self):
        (xMouseLocalPosition, yMouseLocalPosition) = self.GetMouseLocalPosition()
        newPos = float(yMouseLocalPosition) / float(self.GetHeight())
        self.SetPos(newPos)

    def LockScroll(self):
        self.lockFlag = True

    def UnlockScroll(self):
        self.lockFlag = False

class ListBoxWiki(ui.Window):
    def __init__(self):
        ui.Window.__init__(self)
        self.viewItemCount=10
        self.basePos=0
        self.itemHeight=16
        self.itemStep=20
        self.selItem=0
        self.itemList=[]
        self.onSelectItemEvent = lambda *arg: None
        self.itemWidth=100
        self.scrollBar=None

    def __del__(self):
        ui.Window.__del__(self)

    def __UpdateSize(self):
        height=self.itemStep*self.__GetViewItemCount()
        pass
        #self.SetSize(self.itemWidth, height)

    def GetItemIndex(self, argItem):
        return self.itemList.index(argItem)

    def GetSelectedItem(self):
        return self.selItem

    def IsEmpty(self):
        if self.__GetItemCount()==0:
            return 1
        return 0

    def __GetViewItemCount(self):
        return self.viewItemCount

    def __GetItemCount(self):
        return len(self.itemList)

    def SetItemStep(self, itemStep):
        self.itemStep=itemStep

    def SetItemSize(self, itemWidth, itemHeight):
        self.itemWidth=itemWidth
        self.itemHeight=itemHeight

    def SetViewItemCount(self, viewItemCount):
        self.viewItemCount=viewItemCount

    def SetSelectEvent(self, event):
        self.onSelectItemEvent = event

    def SelectIndex(self, index):
        if index >= len(self.itemList) or index < 0:
            self.selItem = None
            return
        try:
            self.selItem=self.itemList[index]
        except:
            pass

    def SelectItem(self, selItem):
        self.selItem=selItem
        self.onSelectItemEvent(selItem)

    def RemoveAllItems(self):
        self.selItem=None
        for j in xrange(len(self.itemList)):
            self.itemList[j].Destroy()
        self.itemList=[]
        if self.scrollBar:
            self.scrollBar.SetPos(0)

    if app.ENABLE_SWITCHBOT:
        def GetItems(self):
            return self.itemList

    def RemoveItem(self, delItem):
        if delItem==self.selItem:
            self.selItem=None
        self.itemList.remove(delItem)

    def AppendItem(self, newItem):
        self.itemList.append(newItem)

    def OnMouseWheel(self, nLen):
        if self.scrollBar:
            self.scrollBar.OnMouseWheel(nLen)

    def SetScrollBar(self, scrollBar):
        scrollBar.SetScrollEvent(ui.__mem_func__(self.__OnScroll))
        self.scrollBar=scrollBar

    def __OnScroll(self):
        self.SetBasePos(int(self.scrollBar.GetPos()*self.__GetScrollLen()))

    def __GetScrollLen(self):
        if self.__GetItemCount() == 0:
            return 0
        (lx,ly) = self.itemList[len(self.itemList)-1].exPos
        return ly

    def GetItemViewCoord(self, pos, itemWidth):
        return (0, (pos-self.basePos)*self.itemStep)

    def __IsInViewRange(self, pos):
        if pos<self.basePos:
            return 0
        if pos>=self.basePos+self.viewItemCount:
            return 0
        return 1

    def SetBasePos(self, basePos):
        if self.basePos == basePos:
            return
        for j in xrange(len(self.itemList)):
            (ex,ey) = self.itemList[j].exPos
            self.itemList[j].SetPosition(0,ey-(basePos))
            self.itemList[j].OnRender()
        self.basePos=basePos

class EquipmentItem(ui.ExpandedImageBox):
    def __del__(self):
        ui.ExpandedImageBox.__del__(self)

    def __init__(self, index, parent, listbox, itemVnum, isFirst):

        ui.ExpandedImageBox.__init__(self)
        self.childrenTextLine = []
        self.childrenImages = []
        self.refineItems = []
        self.refineStepText = []
        self.priceStepText = []
        self.refineInfos = []
        self.refinenNumberline = []
        self.parent = parent
        self.listbox = listbox
        self.listIndex = index
        self.itemVnum = itemVnum
        self.isFirst = isFirst
        self.overLine =False
        self.IsLoaded = False
        self.refineCount = 2
        self.isType=0

        item.SelectItem(self.itemVnum)
        for j in xrange(wiki.GetRefineMaxLevel(self.itemVnum,item.GetItemType(),item.GetItemSubType())+1):
            if item.SelectItemWiki(self.itemVnum+j) == 1:
                argv = wiki.GetRefineItems(item.GetRefineSet())
                if argv != 0:
                    (id, item_vnum_0, item_count_0, item_vnum_1, item_count_1, item_vnum_2, item_count_2, item_vnum_3, item_count_3, item_vnum_4, item_count_4, cost, prob, refine_count) =  argv
                    self.InsertRefine(id,item_vnum_0,item_count_0,item_vnum_1,item_count_1,item_vnum_2,item_count_2,item_vnum_3,item_count_3,item_vnum_4,item_count_4,cost,prob,refine_count)
                    if refine_count > self.refineCount:
                        self.refineCount = refine_count
                else:
                    self.InsertRefine(0,0,0,0,0,0,0,0,0,0,0,0,0,0)
            else:
                self.InsertRefine(0,0,0,0,0,0,0,0,0,0,0,0,0,0)

        x,y= 0,5
        if self.isFirst:
            getList = self.listbox.GetItems()
            j = len(getList)
            (xT,realY) = getList[j-1].GetLocalPosition()
            if getList[j-1].refineCount == 2:
                y= realY+(156+5)
            elif getList[j-1].refineCount == 3:
                y= realY+(200+5)
            elif getList[j-1].refineCount == 4:
                y= realY+(255+5)
            elif getList[j-1].refineCount == 5:
                y= realY+(296+5)
        self.SetParent(listbox)
        self.LoadImage(IMG_DIR+"slot/slot_%d.tga"%self.refineCount)
        if index == 99:
            x,y= 0,200
        self.SetPosition(x,y, True)
        self.childrenImages.append(self)

    def ClearData(self):
        if self.IsLoaded == True:
            self.IsLoaded=False
            self.childrenTextLine = []
            self.childrenImages = []
            self.childrenTextLine = []
            self.refineStepText = []
            self.priceStepText = []
            self.refineInfos = []
            self.refinenNumberline = []
            self.childrenImages.append(self)
            self.itemName= None
            self.itemLevel= None
            self.upgradeCost= None
            self.itemIcon= None
            self.yangCost= None

    def LoadItemInfos(self):
        if self.IsLoaded == False:
           
            self.IsLoaded=True
            item.SelectItem(self.itemVnum)

            self.itemName = ui.TextLine()
            self.itemName.SetParent(self)
            self.itemName.SetText("%s"%item.GetItemName()[:-2])
            self.itemName.SetPosition(5,5)
            self.itemName.Show()


            self.itemLevel = ui.TextLine()
            self.itemLevel.SetParent(self)

            for i in xrange(item.LIMIT_MAX_NUM):
                (limitType, limitValue) = item.GetLimit(i)
                if item.LIMIT_LEVEL == limitType:
                    if limitValue == 0:
                        self.itemLevel.SetText(localeInfo.WIKI_LEVEL_TEXT%1)
                    else:
                        self.itemLevel.SetText(localeInfo.WIKI_LEVEL_TEXT%limitValue)
            self.itemLevel.SetPosition(480,5)
            self.itemLevel.Show()

            self.itemIcon = ui.ExpandedImageBox()
            self.itemIcon.SetParent(self)
            if item.GetIconImageFileName().find("gr2") == -1:
                self.itemIcon.LoadImage(item.GetIconImageFileName())
            else:
                self.itemIcon.LoadImage("icon/item/27995.tga")
            itemLevelCoordinates = [ [0,0],[0,0],[10,55],[10,85],[10,100],[10,115]]
            self.itemIcon.SetPosition(itemLevelCoordinates[self.refineCount][0],itemLevelCoordinates[self.refineCount][1])
            self.itemIcon.SAFE_SetStringEvent("MOUSE_OVER_IN", self.OverInItem,self.itemVnum+wiki.GetRefineMaxLevel(self.itemVnum,item.GetItemType(),item.GetItemSubType()))
            self.itemIcon.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.OverOutItem)
            self.itemIcon.SetEvent(ui.__mem_func__(self.OnClickItem),"mouse_click")
            self.itemIcon.Show()

            self.upgradeCost = ui.TextLine()
            self.upgradeCost.SetParent(self)
            self.upgradeCost.SetText(localeInfo.WIKI_UPGRADE_COSTS)
            self.upgradeCost.SetPosition(58,24)
            self.upgradeCost.Show()

            self.yangCost = ui.TextLine()
            self.yangCost.SetParent(self)
            self.yangCost.SetText(localeInfo.WIKI_YANG_COSTS)
            list = [140,140,140,180,230,275]
            self.yangCost.SetPosition(58,list[self.refineCount])
            self.yangCost.Show()

            for j in xrange(10):
                step_refine = ui.TextLine()
                step_refine.SetParent(self)
                step_refine.SetText("+%d"%j)
                step_refine.SetPosition(145+(j*41),24)
                step_refine.Show()

                self.refineStepText.append(step_refine)
                self.childrenTextLine.append(step_refine)

                step_price = ui.TextLine()
                step_price.SetParent(self)
                if len(str(self.refineItems[j]["cost"])) >= 7:
                    step_price.SetText(str(self.refineItems[j]["cost"]).replace("000","k"))
                else:
                    step_price.SetText(localeInfo.MoneyFormat(self.refineItems[j]["cost"]))
                step_price.SetPosition(135+(j*42),list[self.refineCount])
                step_price.Show()

                self.priceStepText.append(step_price)
                self.childrenTextLine.append(step_price)

                step_slot0,step_slot1,step_slot2,step_slot3,step_slot4 = None,None,None,None,None
                step_numberline0,step_numberline1,step_numberline2,step_numberline3,step_numberline4 = None,None,None,None,None
                l = [step_slot0,step_slot1,step_slot2,step_slot3,step_slot4]
                x = [step_numberline0,step_numberline1,step_numberline2,step_numberline3,step_numberline4]
                for i in xrange(self.refineCount):
                    l[i] = ui.ExpandedImageBox()
                    l[i].SetParent(self)
                    refineItem = self.refineItems[j]["item_vnum_%d"%i]
                    if refineItem != 0:
                        item.SelectItem(refineItem)
                        l[i].LoadImage(item.GetIconImageFileName())
                        l[i].SAFE_SetStringEvent("MOUSE_OVER_IN", self.OverInItem,refineItem)
                        l[i].SAFE_SetStringEvent("MOUSE_OVER_OUT", self.OverOutItem)
                    else:
                        l[i].LoadImage(IMG_DIR+"slot/empty_slot.tga")
                    l[i].SetPosition(135+(j*41),45+(i*47))
                    l[i].Show()

                    if refineItem != 0:
                        x[i] = ui.NumberLine()
                        x[i].SetParent(self)
                        x[i].SetNumber(str(self.refineItems[j]["item_count_%d"%i]))
                        x[i].SetPosition(165+(j*41),70+(i*47))
                        x[i].Show()

                        self.childrenTextLine.append(x[i])

                    self.childrenImages.append(l[i])

                ptr = (step_slot0,step_slot1,step_slot2,step_slot3,step_slot4)
                ptrex = (step_numberline0,step_numberline1,step_numberline2,step_numberline3,step_numberline4)
                self.refineInfos.extend(ptr)
                self.refinenNumberline.extend(ptrex)

            self.childrenTextLine.append(self.yangCost)
            self.childrenTextLine.append(self.itemName)
            self.childrenTextLine.append(self.itemLevel)
            self.childrenTextLine.append(self.upgradeCost)
            self.childrenImages.append(self.itemIcon)
            self.Show()
            self.OnRender()

    def OnClickItem(self):
        try:
            self.parent.tooltipItem.HideToolTip()
        except:
            pass
        self.parent.ShowItemInfo(self.itemVnum,0)


    def OverOutItem(self):
        try:
            self.parent.tooltipItem.HideToolTip()
        except:
            pass

    def OverInItem(self, index):
        try:
            self.parent.tooltipItem.SetItemToolTip(index)
            self.parent.tooltipItem.ShowToolTip()
        except:
            pass

    def InsertRefine(self, id,item_vnum_0,item_count_0,item_vnum_1,item_count_1,item_vnum_2,item_count_2,item_vnum_3,item_count_3,item_vnum_4,item_count_4,cost,prob,refine_count):
        self.refineItems.append(\
            {
                "id" : int(id),\
                "item_vnum_0" : int(item_vnum_0),\
                "item_count_0" : int(item_count_0),\
                "item_vnum_1" : int(item_vnum_1),\
                "item_count_1" : int(item_count_1),\
                "item_vnum_2" : int(item_vnum_2),\
                "item_count_2" : int(item_count_2),\
                "item_vnum_3" : int(item_vnum_3),\
                "item_count_3" : int(item_count_3),\
                "item_vnum_4" : int(item_vnum_4),\
                "item_count_4" : int(item_count_4),\
                "cost" : long(cost),\
                "prob" : long(prob),\
                "refine_count" : int(refine_count),\
            },
        )

    def OnMouseOverIn(self):
        self.overLine = True

    def OnMouseOverOut(self):
        self.overLine = False

    def OnRender(self):
        if not self.IsShow():
            return
        (pgx,pgy) = self.listbox.GetGlobalPosition()
        for j in xrange(len(self.childrenTextLine)):
            item = self.childrenTextLine[j]
            (igx,igy) = item.GetGlobalPosition()
            if igy < pgy:
                item.Hide()
            elif igy > (pgy+self.listbox.GetHeight()-15):
                item.Hide()
            else:
                item.Show()
        for j in xrange(len(self.childrenImages)):
            item = self.childrenImages[j]
            (igx,igy) = item.GetGlobalPosition()
            item.SetRenderingRect(0,0,0,0)
            if igy < pgy:
                item.SetRenderingRect(0,calculateRect(item.GetHeight()-abs(igy-pgy),item.GetHeight()),0,0)
            elif igy+item.GetHeight() > (pgy+self.listbox.GetHeight()-15):
                calculate = (pgy+self.listbox.GetHeight()-15) - (igy+item.GetHeight())
                if calculate == 0:
                    return
                item.SetRenderingRect(0.0,0.0,0.0,calculateRect(item.GetHeight()-abs(calculate),item.GetHeight()))

    def Destroy(self):
        self.childrenTextLine = []
        self.childrenImages = []
        self.refineItems = []
        self.refineStepText = []
        self.priceStepText = []
        self.refineInfos = []
        self.refinenNumberline = []
        self.parent = 0
        self.listbox = 0
        self.listIndex = 0
        self.itemVnum = 0
        self.isFirst = 0
        self.overLine =0
        self.refineCount = 0
        del self

class EquipmentItemSpecial(ui.ExpandedImageBox):
    def __del__(self):
        ui.ExpandedImageBox.__del__(self)
    def __init__(self, parent, listbox, itemVnum):
        ui.ExpandedImageBox.__init__(self)
        self.childrenTextLine = []
        self.childrenImages = []
        self.parent = parent
        self.listbox = listbox
        self.itemVnum = itemVnum

        self.overLine =False
        self.IsLoaded =False
        self.SetParent(listbox)
        self.LoadImage(IMG_DIR+"slot/special_slot.tga")
        self.SetPosition(0,0, True)
        self.isType=0

    def LoadItemInfos(self):
        if self.IsLoaded == False:
            self.IsLoaded=True
   
            item.SelectItem(self.itemVnum)

            self.itemIcon = ui.ExpandedImageBox()
            self.itemIcon.SetParent(self)
            if item.GetIconImageFileName().find("gr2") == -1:
                self.itemIcon.LoadImage(item.GetIconImageFileName())
            else:
                self.itemIcon.LoadImage("icon/item/27995.tga")
            self.itemIcon.SetPosition(70,45)
            self.itemIcon.SAFE_SetStringEvent("MOUSE_OVER_IN", self.OverInItem,self.itemVnum+wiki.GetRefineMaxLevel(self.itemVnum,item.GetItemType(),item.GetItemSubType()))
            self.itemIcon.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.OverOutItem)
            self.itemIcon.Show()

            self.avaible = ui.TextLine()
            self.avaible.SetParent(self)
            self.avaible.SetText(localeInfo.WIKI_AVAIBLE_AT)
            self.avaible.SetPosition(350,6)
            self.avaible.Show()

            self.refine = ui.TextLine()
            self.refine.SetParent(self)
            self.refine.SetText(localeInfo.WIKI_IMPROVEMENT_INFO%item.GetItemName()[:-2])
            self.refine.SetPosition(180,170)
            self.refine.Show()

            self.childrenTextLine.append(self.refine)
            self.childrenTextLine.append(self.avaible)
            self.childrenImages.append(self)
            self.childrenImages.append(self.itemIcon)
            self.Show()
            self.OnRender()

    def OverOutItem(self):
        if self.parent:
            if self.parent.tooltipItem:
                self.parent.tooltipItem.HideToolTip()

    def OverInItem(self, index):
        if self.parent:
            if self.parent.tooltipItem:
                self.parent.tooltipItem.SetItemToolTip(index)
                self.parent.tooltipItem.ShowToolTip()

    def OnMouseOverIn(self):
        self.overLine = True

    def OnMouseOverOut(self):
        self.overLine = False

    def OnRender(self):
        if not self.IsShow():
            return
        (pgx,pgy) = self.listbox.GetGlobalPosition()
        for j in xrange(len(self.childrenTextLine)):
            item = self.childrenTextLine[j]
            (igx,igy) = item.GetGlobalPosition()
            if igy < pgy:
                item.Hide()
            elif igy > (pgy+self.listbox.GetHeight()-15):
                item.Hide()
            else:
                item.Show()
        for j in xrange(len(self.childrenImages)):
            item = self.childrenImages[j]
            (igx,igy) = item.GetGlobalPosition()
            item.SetRenderingRect(0,0,0,0)
            if igy < pgy:
                item.SetRenderingRect(0,calculateRect(item.GetHeight()-abs(igy-pgy),item.GetHeight()),0,0)
            elif igy+item.GetHeight() > (pgy+self.listbox.GetHeight()-15):
                calculate = (pgy+self.listbox.GetHeight()-15) - (igy+item.GetHeight())
                if calculate == 0:
                    return
                item.SetRenderingRect(0.0,0.0,0.0,calculateRect(item.GetHeight()-abs(calculate),item.GetHeight()))

    def Destroy(self):
        self.childrenTextLine = []
        self.childrenImages = []
        self.parent = 0
        self.listbox = 0
        self.itemVnum = 0
        self.overLine =0
        self.IsLoaded =0
        del self

class MonsterItemSpecial(ui.ExpandedImageBox):
    def __del__(self):
        ui.ExpandedImageBox.__del__(self)
    def __init__(self, parent, listbox, itemVnum):
        ui.ExpandedImageBox.__init__(self)
        self.childrenTextLine = []
        self.childrenImages = []
        self.childrenItems = []
        self.childrenNumberline = []
        self.parent = parent
        self.listbox = listbox
        self.itemVnum = itemVnum
        self.overLine =False
        self.IsLoaded =False

        self.SetParent(listbox)
        self.LoadImage(IMG_DIR+"slot/special_slot.tga")
        self.SetPosition(0,0, True)
        self.childrenImages.append(self)

        self.grid = Grid(width = 10, height = 50)

        self.renterTarget=None
        self.GridListbox=None
        self.GridScrollbar=None
        self.isType=0

    def LoadItemInfos(self):
        if self.IsLoaded == False:
            self.IsLoaded=True

            self.renterTarget = ui.RenderTarget()
            self.renterTarget.SetParent(self)
            self.renterTarget.SetPosition(1,1)
            self.renterTarget.SetSize(187,163)
            self.renterTarget.SetRenderTarget(21)
            self.renterTarget.Show()
            self.childrenImages.append(self.renterTarget)

            renderTarget.SelectModel(21, self.itemVnum)
            renderTarget.SetVisibility(21, True)

            self.GridListbox = ListBoxGrid(self.listbox, self)
            self.GridListbox.SetParent(self)
            self.GridListbox.SetPosition(190,25)
            self.GridListbox.SetSize(351, 142)
            self.GridListbox.Show()

            dropList = ui.TextLine()
            dropList.SetParent(self)
            dropList.SetText(localeInfo.WIKI_DROPLIST_INFO%nonplayer.GetMonsterName(self.itemVnum))
            dropList.SetPosition(300,6)
            dropList.Show()
            self.childrenTextLine.append(dropList)

            monsterInfo = ui.TextLine()
            monsterInfo.SetParent(self)
            monsterInfo.SetText(localeInfo.WIKI_STATICS_INFO%nonplayer.GetMonsterName(self.itemVnum))
            monsterInfo.SetPosition(180,170)
            monsterInfo.Show()
            self.childrenTextLine.append(monsterInfo)

            for j in xrange(wiki.GetMobInfoSize(self.itemVnum)):
                vnum, count = 0,0
                (vnum,count) = wiki.GetMobInfoData(self.itemVnum,j)
                if vnum == 0:
                    continue

                item.SelectItem(vnum)

                item_new = ui.ExpandedImageBox()
                item_new.SetParent(self.GridListbox)
                if item.GetIconImageFileName().find("gr2") == -1:
                    item_new.LoadImage(item.GetIconImageFileName())
                else:
                    item_new.LoadImage("icon/item/27995.tga")
                item_new.SAFE_SetStringEvent("MOUSE_OVER_IN", self.OverInItem,vnum)
                item_new.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.OverOutItem)

                (width,height) = item.GetItemSize()
                pos = self.grid.find_blank(width, height)
                self.grid.put(pos,width,height)
                (x,y) = calculatePos(pos,10)
                item_new.SetPosition(x,y,True)
                item_new.Show()

                if count>1:
                    itemNumberline = ui.NumberLine()
                    itemNumberline.SetParent(self.GridListbox)
                    itemNumberline.SetNumber(str(count))
                    itemNumberline.SetPosition(x+15,y+item_new.GetHeight()-10,True)
                    itemNumberline.Show()
                    self.GridListbox.AppendItem(itemNumberline)
                    self.childrenNumberline.append(itemNumberline)

                self.GridListbox.AppendItem(item_new)
                self.childrenItems.append(item_new)

                # Scrollbar
                if self.GridScrollbar == None:
                    (gx,gy)=item_new.GetGlobalPosition()
                    (sx,sy)=self.GridListbox.GetGlobalPosition()
                    if gy+item_new.GetHeight() > sy+self.GridListbox.GetHeight():
                        self.GridScrollbar= ScrollBarNew()
                        self.GridScrollbar.SetParent(self)
                        self.GridScrollbar.SetPosition(525,23)
                        self.GridScrollbar.SetScrollBarSize(140)
                        self.GridListbox.SetScrollBar(self.GridScrollbar)
                        self.GridScrollbar.Show()

                        self.childrenImages.append(self.GridScrollbar.topImage)
                        self.childrenImages.append(self.GridScrollbar.bottomImage)
                        self.childrenImages.append(self.GridScrollbar.middleBar.top)
                        self.childrenImages.append(self.GridScrollbar.middleBar.topScale)
                        self.childrenImages.append(self.GridScrollbar.middleBar.bottom)
                        self.childrenImages.append(self.GridScrollbar.middleBar.bottomScale)
                        self.childrenImages.append(self.GridScrollbar.middleBar.middle)
            self.Show()
            self.OnRender()

    def OverOutItem(self):
        if self.parent:
            if self.parent.tooltipItem:
                self.parent.tooltipItem.HideToolTip()

    def OverInItem(self, index):
        if self.parent:
            if self.parent.tooltipItem:
                self.parent.tooltipItem.SetItemToolTip(index)
                self.parent.tooltipItem.ShowToolTip()

    def OnMouseOverIn(self):
        self.overLine = True

    def OnMouseOverOut(self):
        self.overLine = False

    def OnRender(self):
        if not self.IsShow():
            return
        (pgx,pgy) = self.listbox.GetGlobalPosition()
        (lgx,lgy) = self.GridListbox.GetGlobalPosition()
        for j in xrange(len(self.childrenTextLine)):
            item = self.childrenTextLine[j]
            (igx,igy) = item.GetGlobalPosition()
            if igy < pgy:
                item.Hide()
            elif igy > (pgy+self.listbox.GetHeight()-15):
                item.Hide()
            else:
                item.Show()

        for j in xrange(len(self.childrenImages)):
            item = self.childrenImages[j]
            (igx,igy) = item.GetGlobalPosition()
            item.SetRenderingRect(0,0,0,0)
            if igy < pgy:
                item.SetRenderingRect(0,calculateRect(item.GetHeight()-abs(igy-pgy),item.GetHeight()),0,0)
            elif igy+item.GetHeight() > (pgy+self.listbox.GetHeight()-15):
                calculate = (pgy+self.listbox.GetHeight()-15) - (igy+item.GetHeight())
                if calculate == 0:
                    return
                item.SetRenderingRect(0.0,0.0,0.0,calculateRect(item.GetHeight()-abs(calculate),item.GetHeight()))

        for j in xrange(len(self.childrenNumberline)):
            item = self.childrenNumberline[j]
            (igx,igy) = item.GetGlobalPosition()
            if igy < pgy:
                item.Hide()
            elif igy < lgy:
                item.Hide()
            elif igy > lgy+self.GridListbox.GetHeight():
                item.Hide()
            elif igy > (pgy+self.listbox.GetHeight()-15):
                item.Hide()
            else:
                item.Show()

        if self.GridScrollbar !=None:
            scroll = self.GridScrollbar.middleImage
            (igx,igy) = scroll.GetGlobalPosition()
            if igy < pgy:
                scroll.Hide()
            elif igy > (pgy+self.listbox.GetHeight()-60):
                scroll.Hide()
            else:
                scroll.Show()

        if self.GridListbox != None:
            for j in xrange(len(self.childrenItems)):
                item = self.childrenItems[j]
                (igx,igy) = item.GetGlobalPosition()
                item.SetRenderingRect(0,0,0,0)
                calculate = 0
                calculatefirst = 0
                if igy < lgy:
                    calculatefirst +=abs(igy-lgy)
                if igy < pgy:
                    calculatefirst += abs(igy-pgy)
                if igy+item.GetHeight() > (pgy+self.listbox.GetHeight()-15):
                    calculate = (pgy+self.listbox.GetHeight()-15) - (igy+item.GetHeight())
                    if igy+item.GetHeight() > (lgy+self.GridListbox.GetHeight()+100):
                        calculate += (lgy+self.GridListbox.GetHeight()) - (igy+item.GetHeight())
                elif igy+item.GetHeight() > (lgy+self.GridListbox.GetHeight()):
                    calculate += (lgy+self.GridListbox.GetHeight()) - (igy+item.GetHeight())
                item.SetRenderingRect(0,calculateRect(item.GetHeight()-calculatefirst,item.GetHeight()),0,calculateRect(item.GetHeight()-abs(calculate),item.GetHeight()))

    def Destroy(self):
        self.grid.reset()
        self.grid=0
        self.GridListbox.RemoveAllItems()
        self.GridListbox=0
        self.childrenTextLine = []
        self.childrenImages = []
        self.childrenItems = []
        self.childrenNumberline = []
        self.parent = 0
        self.listbox = 0
        self.itemVnum = 0
        self.overLine =0
        self.IsLoaded =0
        self.renterTarget=0
        self.GridScrollbar=0
        self.isType=0
        del self


class MonsterStatics(ui.ExpandedImageBox):
    def __del__(self):
        ui.ExpandedImageBox.__del__(self)
    def __init__(self, parent, listbox, itemVnum):
        ui.ExpandedImageBox.__init__(self)
        self.childrenTextLine = []
        self.childrenImages = []
        self.parent = parent
        self.listbox = listbox
        self.itemVnum = itemVnum
        self.overLine =False
        self.IsLoaded =False

        self.SetParent(listbox)
        self.LoadImage(IMG_DIR+"slot/big_empty.tga")
        self.SetPosition(0,188, True)
        self.childrenImages.append(self)

        self.GridListbox=None
        self.GridScrollbar=None
        self.isType=0

    def LoadItemInfos(self):
        if self.IsLoaded == False:
            self.IsLoaded=True

            self.GridListbox = ListBoxGrid(self.listbox, self)
            self.GridListbox.SetParent(self)
            self.GridListbox.SetPosition(0,0)
            self.GridListbox.SetSize(541, 159)
            self.GridListbox.Show()

            self.GridScrollbar= ScrollBarNew()
            self.GridScrollbar.SetParent(self)
            self.GridScrollbar.SetPosition(525,5)
            self.GridScrollbar.SetScrollBarSize(150)
            self.GridListbox.SetScrollBar(self.GridScrollbar)
            self.GridScrollbar.Show()

            monsterLevel = ui.TextLine()
            monsterLevel.SetParent(self.GridListbox)
            monsterLevel.SetText("|Eemoji/e_wiki|e "+localeInfo.WIKI_LEVEL_TEXT%nonplayer.GetMonsterLevel(self.itemVnum))
            monsterLevel.SetPosition(5,3,True)
            monsterLevel.Show()
            self.GridListbox.AppendItem(monsterLevel)
            self.childrenTextLine.append(monsterLevel)


           
            RACE_FLAG_TO_NAME = {
                    1 << 0  : localeInfo.TARGET_INFO_RACE_ANIMAL,
                    1 << 1     : localeInfo.TARGET_INFO_RACE_UNDEAD,
                    1 << 2  : localeInfo.TARGET_INFO_RACE_DEVIL,
                    1 << 3  : localeInfo.TARGET_INFO_RACE_HUMAN,
                    1 << 4  : localeInfo.TARGET_INFO_RACE_ORC,
                    1 << 5  : localeInfo.TARGET_INFO_RACE_MILGYO,
            }

            SUB_RACE_FLAG_TO_NAME = {
                    1 << 11 : localeInfo.TARGET_INFO_RACE_ELEC,
                    1 << 12 : localeInfo.TARGET_INFO_RACE_FIRE,
                    1 << 13 : localeInfo.TARGET_INFO_RACE_ICE,
                    1 << 14 : localeInfo.TARGET_INFO_RACE_WIND,
                    1 << 15 : localeInfo.TARGET_INFO_RACE_EARTH,
                    1 << 16 : localeInfo.TARGET_INFO_RACE_DARK,
                    1 << 17 : localeInfo.TARGET_INFO_RACE_ZODIAC,
            }

            mainrace = ""
            subrace = ""
            dwRaceFlag = nonplayer.GetMonsterRaceFlag(self.itemVnum)
            for i in xrange(18):
                curFlag = 1 << i
                if HAS_FLAG(dwRaceFlag, curFlag):
                    if RACE_FLAG_TO_NAME.has_key(curFlag):
                        mainrace += RACE_FLAG_TO_NAME[curFlag] + ", "
                    elif SUB_RACE_FLAG_TO_NAME.has_key(curFlag):
                        subrace += SUB_RACE_FLAG_TO_NAME[curFlag] + ", "
            if nonplayer.IsMonsterStone(self.itemVnum):
                mainrace += localeInfo.TARGET_INFO_RACE_METIN + ", "
            if mainrace == "":
                mainrace = localeInfo.TARGET_INFO_NO_RACE
            else:
                mainrace = mainrace[:-2]

            if subrace == "":
                subrace = localeInfo.TARGET_INFO_NO_RACE
            else:
                subrace = subrace[:-2]

            monsterType = ui.TextLine()
            monsterType.SetParent(self.GridListbox)
            monsterType.SetText("|Eemoji/e_wiki|e "+localeInfo.WIKI_STATICS_INFO_TYPE%(mainrace,subrace))
            monsterType.SetPosition(5,3*(7*1),True)
            monsterType.Show()
            self.GridListbox.AppendItem(monsterType)
            self.childrenTextLine.append(monsterType)

            (mindmg,maxdmg) = nonplayer.GetMonsterDamage(self.itemVnum)
            hp = nonplayer.GetMonsterMaxHP(self.itemVnum)
            monsterDmgandHp = ui.TextLine()
            monsterDmgandHp.SetParent(self.GridListbox)
            monsterDmgandHp.SetText("|Eemoji/e_wiki|e "+localeInfo.WIKI_STATICS_INFO_DMG%(mindmg,maxdmg,hp))
            monsterDmgandHp.SetPosition(5,3*(7*2),True)
            monsterDmgandHp.Show()
            self.GridListbox.AppendItem(monsterDmgandHp)
            self.childrenTextLine.append(monsterDmgandHp)

            (minyang,maxyang) = nonplayer.GetMonsterPrice(self.itemVnum)
            exp = nonplayer.GetMonsterExp(self.itemVnum)
            monsterYangandExp = ui.TextLine()
            monsterYangandExp.SetParent(self.GridListbox)
            monsterYangandExp.SetText("|Eemoji/e_wiki|e "+localeInfo.WIKI_STATICS_INFO_YNG%(minyang,maxyang,exp))
            monsterYangandExp.SetPosition(5,3*(7*3),True)
            monsterYangandExp.Show()
            self.GridListbox.AppendItem(monsterYangandExp)
            self.childrenTextLine.append(monsterYangandExp)

            monsterDefencesText = ui.TextLine()
            monsterDefencesText.SetParent(self.GridListbox)
            monsterDefencesText.SetText("|Eemoji/e_wiki|e "+localeInfo.WIKI_STATICS_INFO_DEFENSES)
            monsterDefencesText.SetPosition(5,3*(7*4),True)
            monsterDefencesText.Show()
            self.GridListbox.AppendItem(monsterDefencesText)
            self.childrenTextLine.append(monsterDefencesText)

            resists = {
                    nonplayer.MOB_RESIST_SWORD : localeInfo.TARGET_INFO_RESIST_SWORD,
                    nonplayer.MOB_RESIST_TWOHAND : localeInfo.TARGET_INFO_RESIST_TWOHAND,
                    nonplayer.MOB_RESIST_DAGGER : localeInfo.TARGET_INFO_RESIST_DAGGER,
                    nonplayer.MOB_RESIST_BELL : localeInfo.TARGET_INFO_RESIST_BELL,
                    nonplayer.MOB_RESIST_FAN : localeInfo.TARGET_INFO_RESIST_FAN,
                    nonplayer.MOB_RESIST_BOW : localeInfo.TARGET_INFO_RESIST_BOW,
                    # nonplayer.MOB_RESIST_FIRE : localeInfo.TARGET_INFO_RESIST_FIRE,
                    # nonplayer.MOB_RESIST_ELECT : localeInfo.TARGET_INFO_RESIST_ELECT,
                    nonplayer.MOB_RESIST_MAGIC : localeInfo.TARGET_INFO_RESIST_MAGIC,
                    # nonplayer.MOB_RESIST_WIND : localeInfo.TARGET_INFO_RESIST_WIND,
                    # nonplayer.MOB_RESIST_POISON : localeInfo.TARGET_INFO_RESIST_POISON,
                }

            c = 0
            for resist, label in resists.items():
                value = nonplayer.GetMonsterResist(self.itemVnum, resist)
                item = ui.TextLine()
                item.SetParent(self.GridListbox)
                text = label % value
                item.SetText("|Eemoji/e_wiki|e %s"%text)
                resistStrings = []
                item.SetPosition(5+8,3*(7*(5+c)),True)
                item.Show()
                self.GridListbox.AppendItem(item)
                self.childrenTextLine.append(item)
                c+=1

            self.Show()
            self.OnRender()

    def OnMouseOverIn(self):
        self.overLine = True

    def OnMouseOverOut(self):
        self.overLine = False

    def OnRender(self):
        if not self.IsShow():
            return

        (pgx,pgy) = self.listbox.GetGlobalPosition()
        (ggx,ggy) = self.GridListbox.GetGlobalPosition()
        for j in xrange(len(self.childrenTextLine)):
            item = self.childrenTextLine[j]
            (igx,igy) = item.GetGlobalPosition()
            if igy < pgy:
                item.Hide()
            elif igy < ggy:
                item.Hide()
            elif igy > (ggy+self.GridListbox.GetHeight()-10):
                item.Hide()
            elif igy > (pgy+self.listbox.GetHeight()-15):
                item.Hide()
            else:
                item.Show()

        for j in xrange(len(self.childrenImages)):
            item = self.childrenImages[j]
            (igx,igy) = item.GetGlobalPosition()
            item.SetRenderingRect(0,0,0,0)
            if igy < pgy:
                item.SetRenderingRect(0,calculateRect(item.GetHeight()-abs(igy-pgy),item.GetHeight()),0,0)
            elif igy+item.GetHeight() > (pgy+self.listbox.GetHeight()-15):
                calculate = (pgy+self.listbox.GetHeight()-15) - (igy+item.GetHeight())
                if calculate == 0:
                    return
                item.SetRenderingRect(0.0,0.0,0.0,calculateRect(item.GetHeight()-abs(calculate),item.GetHeight()))

    def Destroy(self):
        self.GridListbox.RemoveAllItems()
        self.GridListbox=None
        self.GridScrollbar=None
        self.childrenTextLine = []
        self.childrenImages = []
        self.parent = 0
        self.listbox = 0
        self.itemVnum = 0
        self.overLine =0
        self.IsLoaded =0
        self.isType=0
        del self

class ListBoxItemSpecial(ui.ExpandedImageBox):
    def __del__(self):
        ui.ExpandedImageBox.__del__(self)
    def __init__(self, index, parent, listbox, itemVnum, mobVnum, type):
        ui.ExpandedImageBox.__init__(self)
        self.childrenTextLine = []
        self.childrenNumberline = []
        self.childrenItems = []
        self.childrenImages = []
        self.parent = parent
        self.listbox = listbox
        self.listIndex = index
        self.itemVnum = itemVnum
        self.mobVnum = mobVnum
        self.isType = type

        self.overLine =False
        self.IsLoaded = False
        self.SetParent(listbox)
        self.LoadImage(IMG_DIR+"slot/slot.tga")
        self.SetPosition(0,len(self.listbox.GetItems())*(89+5), True)

        self.grid = Grid(width = 12, height = 50)
       

        self.GridListbox = None
        self.GridScrollbar= None
        self.itemName= None
        self.origin= None
        self.bossVnum= None
        self.itemIcon= None

        self.childrenImages.append(self)

    def ClearData(self):
        if self.IsLoaded == True:
            self.IsLoaded=False
            self.childrenTextLine = []
            self.childrenNumberline = []
            self.childrenItems = []

            self.childrenImages = []
            self.childrenImages.append(self)

            self.grid.reset()

            self.GridListbox.RemoveAllItems()
            self.GridListbox = None
            self.GridScrollbar= None
            self.itemName= None
            self.origin= None
            self.bossVnum= None
            self.itemIcon= None

            if self.isType != 0:
                renderTarget.SetVisibility(20+self.listIndex, False)
                renderTarget.ResetModel(20+self.listIndex)
                self.renterTarget=None

    def LoadItemInfos(self):
        if self.IsLoaded == False:
            self.IsLoaded=True

            self.GridListbox = ListBoxGrid(self.listbox, self)
            self.GridListbox.SetParent(self)
            self.GridListbox.SetPosition(52,25)
            self.GridListbox.SetSize(541, 65)
            self.GridListbox.Show()

            name = "-"
            if self.isType == 0:
                item.SelectItem(self.itemVnum)
                name = nonplayer.GetMonsterName(self.mobVnum)
            else:
                name = nonplayer.GetMonsterName(self.itemVnum)

            self.itemName = ui.TextLine()
            self.itemName.SetParent(self)
            if self.isType == 0:
                self.itemName.SetText(localeInfo.WIKI_CONTENT_INFO%item.GetItemName())
            else:
                self.itemName.SetText(localeInfo.WIKI_DROPLIST_INFO%name)
            self.itemName.SetPosition(180,5)
            self.itemName.Show()
            self.childrenTextLine.append(self.itemName)

            self.origin = ui.TextLine()
            self.origin.SetParent(self)
            self.origin.SetText(localeInfo.WIKI_ORIGIN)
            self.origin.SetPosition(480,5)
            self.origin.Show()
            self.childrenTextLine.append(self.origin)

            self.bossVnum = ui.TextLine()
            self.bossVnum.SetParent(self)
            if self.isType == 0:
                self.bossVnum.SetText(name)
                self.bossVnum.SetPosition(465,45)
            else:
                self.bossVnum.SetPosition(495,45)
                self.bossVnum.SetText("-")

            self.bossVnum.Show()
            self.childrenTextLine.append(self.bossVnum)

            if self.isType == 0:
                self.itemIcon = ui.ExpandedImageBox()
                self.itemIcon.SetParent(self)
                if item.GetIconImageFileName().find("gr2") == -1:
                    self.itemIcon.LoadImage(item.GetIconImageFileName())
                else:
                    self.itemIcon.LoadImage("icon/item/27995.tga")
                self.itemIcon.SetPosition(10,25)
                self.itemIcon.SAFE_SetStringEvent("MOUSE_OVER_IN", self.OverInItem,self.itemVnum)
                self.itemIcon.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.OverOutItem)
                self.itemIcon.Show()
                self.childrenImages.append(self.itemIcon)
            else:

                self.renterTarget = ui.RenderTarget()
                self.renterTarget.SetParent(self)
                self.renterTarget.SetPosition(1,1)
                self.renterTarget.SetSize(47,87)
                self.renterTarget.SetRenderTarget(20+self.listIndex)
                self.renterTarget.Show()
                self.renterTarget.SetOnMouseLeftButtonUpEvent(ui.__mem_func__(self.OnClickItem))

                renderTarget.SelectModel(20+self.listIndex, self.itemVnum)
                renderTarget.SetVisibility(20+self.listIndex, True)

            whileSize = 0
            if self.isType == 0:
                whileSize = wiki.GetSpecialInfoSize(self.itemVnum)
            else:
                whileSize = wiki.GetMobInfoSize(self.itemVnum)

            if whileSize == 0:
                self.GridListbox.Hide()

            for j in xrange(whileSize):
                vnum, count = 0,0
                if self.isType == 0:
                    (vnum,count) = wiki.GetSpecialInfoData(self.itemVnum,j)
                else:
                    (vnum,count) = wiki.GetMobInfoData(self.itemVnum,j)

                if vnum == 0:
                    continue

                item.SelectItem(vnum)

                (width,height) = item.GetItemSize()
                pos = self.grid.find_blank(width, height)
                self.grid.put(pos,width,height)
                (x,y) = calculatePos(pos,12)


                item_new = ui.ExpandedImageBox()
                item_new.SetParent(self.GridListbox)
                if item.GetIconImageFileName().find("gr2") == -1:
                    item_new.LoadImage(item.GetIconImageFileName())
                else:
                    item_new.LoadImage("icon/item/27995.tga")
                item_new.SAFE_SetStringEvent("MOUSE_OVER_IN", self.OverInItem,vnum)
                item_new.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.OverOutItem)
                item_new.SetPosition(x,y,True)
                item_new.Show()

                if count>1:
                    itemNumberline = ui.NumberLine()
                    itemNumberline.SetParent(self.GridListbox)
                    itemNumberline.SetNumber(str(count))
                    itemNumberline.SetPosition(x+15,y+item_new.GetHeight()-10,True)
                    itemNumberline.Show()
                    self.GridListbox.AppendItem(itemNumberline)
                    self.childrenNumberline.append(itemNumberline)

                self.GridListbox.AppendItem(item_new)
                self.childrenItems.append(item_new)

                # Scrollbar
                if self.GridScrollbar ==None:
                    (gx,gy)=item_new.GetGlobalPosition()
                    (sx,sy)=self.GridListbox.GetGlobalPosition()
                    if gy+item_new.GetHeight() > sy+self.GridListbox.GetHeight():
                        self.GridScrollbar= ScrollBarNew()
                        self.GridScrollbar.SetParent(self)
                        self.GridScrollbar.SetPosition(435,23)
                        self.GridScrollbar.SetScrollBarSize(65)
                        self.GridListbox.SetScrollBar(self.GridScrollbar)
                        self.GridScrollbar.Show()

                        self.childrenImages.append(self.GridScrollbar.topImage)
                        self.childrenImages.append(self.GridScrollbar.bottomImage)
                        self.childrenImages.append(self.GridScrollbar.middleBar.top)
                        self.childrenImages.append(self.GridScrollbar.middleBar.topScale)
                        self.childrenImages.append(self.GridScrollbar.middleBar.bottom)
                        self.childrenImages.append(self.GridScrollbar.middleBar.bottomScale)
                        self.childrenImages.append(self.GridScrollbar.middleBar.middle)

            self.Show()
            self.OnRender()

    def OnClickItem(self):
        self.parent.ShowItemInfo(self.itemVnum,1)

    def OverOutItem(self):
        try:
            self.parent.tooltipItem.HideToolTip()
        except:
            pass

    def OverInItem(self, index):
        try:
            self.parent.tooltipItem.SetItemToolTip(index)
            self.parent.tooltipItem.ShowToolTip()
        except:
            pass

    def OnMouseOverIn(self):
        self.overLine = True

    def OnMouseOverOut(self):
        self.overLine = False

    def OnRender(self):
        if not self.IsShow():
            return
        (pgx,pgy) = self.listbox.GetGlobalPosition()
        (sgx,sgy) = self.GetGlobalPosition()
        (lgx,lgy) = self.GridListbox.GetGlobalPosition()

        for j in xrange(len(self.childrenImages)):
            item = self.childrenImages[j]
            (igx,igy) = item.GetGlobalPosition()
            item.SetRenderingRect(0,0,0,0)
            if igy < pgy:
                item.SetRenderingRect(0,calculateRect(item.GetHeight()-abs(igy-pgy),item.GetHeight()),0,0)
            elif igy+item.GetHeight() > (pgy+self.listbox.GetHeight()-15):
                calculate = (pgy+self.listbox.GetHeight()-15) - (igy+item.GetHeight())
                if calculate == 0:
                    return
                item.SetRenderingRect(0.0,0.0,0.0,calculateRect(item.GetHeight()-abs(calculate),item.GetHeight()))

        if self.GridListbox != None:
           
            for j in xrange(len(self.childrenItems)):
                item = self.childrenItems[j]
                (igx,igy) = item.GetGlobalPosition()
                item.SetRenderingRect(0,0,0,0)
                calculate = 0
                calculatefirst = 0
                if igy < lgy:
                    calculatefirst +=abs(igy-lgy)
                if igy < pgy:
                    calculatefirst += abs(igy-pgy)
                if igy+item.GetHeight() > (pgy+self.listbox.GetHeight()-15):
                    calculate = (pgy+self.listbox.GetHeight()-15) - (igy+item.GetHeight())
                    if igy+item.GetHeight() > (lgy+self.GridListbox.GetHeight()+100):
                        calculate += (lgy+self.GridListbox.GetHeight()) - (igy+item.GetHeight())
                elif igy+item.GetHeight() > (lgy+self.GridListbox.GetHeight()):
                    calculate += (lgy+self.GridListbox.GetHeight()) - (igy+item.GetHeight())
                item.SetRenderingRect(0,calculateRect(item.GetHeight()-calculatefirst,item.GetHeight()),0,calculateRect(item.GetHeight()-abs(calculate),item.GetHeight()))

        if self.GridScrollbar !=None:
            scroll = self.GridScrollbar.middleImage
            (igx,igy) = scroll.GetGlobalPosition()
            if igy < pgy:
                scroll.Hide()
            elif igy > (pgy+self.listbox.GetHeight()-60):
                scroll.Hide()
            else:
                scroll.Show()

        for j in xrange(len(self.childrenTextLine)):
            item = self.childrenTextLine[j]
            (igx,igy) = item.GetGlobalPosition()
            if igy < pgy:
                item.Hide()
            elif igy > (pgy+self.listbox.GetHeight()-15):
                item.Hide()
            else:
                item.Show()

        for j in xrange(len(self.childrenNumberline)):
            item = self.childrenNumberline[j]
            (igx,igy) = item.GetGlobalPosition()
            if igy < pgy:
                item.Hide()
            elif igy < lgy:
                item.Hide()
            elif igy > (pgy+self.listbox.GetHeight()-15):
                item.Hide()
            elif igy > (lgy+self.GridListbox.GetHeight()-10):
                item.Hide()
            else:
                item.Show()

        if self.isType != 0:
            (rgx,rgy) = self.renterTarget.GetGlobalPosition()
            self.renterTarget.SetRenderingRect(0.0,0.0,0.0,0.0)
            if rgy < pgy:
                self.renterTarget.SetRenderingRect(0,calculateRect(self.renterTarget.GetHeight()-abs(rgy-pgy),self.renterTarget.GetHeight()),0,0)
            elif rgy+self.renterTarget.GetHeight() > (pgy+self.listbox.GetHeight()-15):
                calculate = (pgy+self.listbox.GetHeight()-15) - (rgy+self.renterTarget.GetHeight())
                if calculate == 0:
                    return
                self.renterTarget.SetRenderingRect(0.0,0.0,0.0,calculateRect(self.renterTarget.GetHeight()-abs(calculate),self.renterTarget.GetHeight()))

    def Destroy(self):
        self.GridScrollbar=None
        if self.GridListbox:
            self.GridListbox.RemoveAllItems()
            self.GridListbox=None
        self.childrenNumberline = []
        self.childrenTextLine = []
        self.childrenItems = []
        self.childrenImages = []
        self.renterTarget=0
        self.parent = 0
        self.listbox = 0
        self.listIndex = 0
        self.itemVnum = 0
        self.isType = 0
        self.overLine =0
        self.IsLoaded = 0
        self.grid.reset()
        self.grid=None
        del self

class Grid: # from KeN
    def __init__(self, width, height):
        self.width = width
        self.height = height
        self.reset()

    def find_blank(self, width, height):
        if width > self.width or height > self.height:
            return -1

        for row in range(self.height):
            for col in range(self.width):
                index = row * self.width + col
                if self.is_empty(index, width, height):
                    return index
        return -1

    def put(self, pos, width, height):
        if not self.is_empty(pos, width, height):
            return False
        for row in range(height):
            start = pos + (row * self.width)
            self.grid[start] = True
            col = 1
            while col < width:
                self.grid[start + col] = True
                col += 1
        return True

    def clear(self, pos, width, height):
        if pos < 0 or pos >= (self.width * self.height):
            return
        for row in range(height):
            start = pos + (row * self.width)
            self.grid[start] = True
            col = 1
            while col < width:
                self.grid[start + col] = False
                col += 1

    def is_empty(self, pos, width, height):
        if pos < 0:
            return False
        row = pos // self.width
        if (row + height) > self.height:
            return False
        if (pos + width) > ((row * self.width) + self.width):
            return False
        for row in range(height):
            start = pos + (row * self.width)
            if self.grid[start]:
                return False
            col = 1
            while col < width:
                if self.grid[start + col]:
                    return False
                col += 1
        return True

    def get_size(self):
        return self.width * self.height

    def reset(self):
        self.grid = [False] * (self.width * self.height)
        self.put(self.width,1,1)

class ListBoxGrid(ui.Window):
    def __init__(self, listbox,mainParent):
        ui.Window.__init__(self)
        self.basePos=0
        self.listbox=listbox
        self.mainParent=mainParent
        self.itemList=[]
        self.scrollBar=None

    def __del__(self):
        ui.Window.__del__(self)

    def IsEmpty(self):
        if self.__GetItemCount()==0:
            return 1
        return 0

    def __GetItemCount(self):
        return len(self.itemList)

    def RemoveAllItems(self):
        for j in xrange(len(self.itemList)):
            self.itemList[j].Destroy()
        self.itemList=[]
        if self.scrollBar:
            self.scrollBar.SetPos(0)

    def GetItems(self):
        return self.itemList

    def RemoveItem(self, delItem):
        self.itemList.remove(delItem)

    def AppendItem(self, newItem):
        self.itemList.append(newItem)

    def OnMouseWheel(self, nLen):
        if self.scrollBar:
            self.scrollBar.OnMouseWheel(nLen)

    def SetScrollBar(self, scrollBar):
        scrollBar.SetScrollEvent(ui.__mem_func__(self.__OnScroll))
        self.scrollBar=scrollBar

    def __OnScroll(self):
        self.SetBasePos(int(self.scrollBar.GetPos()*self.__GetScrollLen()))

    def __GetScrollLen(self):
        if self.__GetItemCount() == 0:
            return 0
        (lx,ly) = self.itemList[len(self.itemList)-1].exPos
        return ly

    def SetBasePos(self, basePos):
        if self.basePos == basePos:
            return
        for j in xrange(len(self.itemList)):
            (ex,ey) = self.itemList[j].exPos
            self.itemList[j].SetPosition(ex,ey-(basePos))
            self.mainParent.OnRender()
        self.basePos=basePos
 
Metin2Hub Bot
M2Hub Bot
Feb
Threads
66
2,435
2
1,340
113
Rating - 0%
0   0   0
Can anyone help me with this error message?
this error always occurs when i move the scrollbar



0505 17:14:27212 :: Traceback (most recent call last):

0505 17:14:27212 :: File "ui.py", line 3154, in OnMove

0505 17:14:27213 :: File "ui.py", line 58, in __call__

0505 17:14:27213 :: File "ui.py", line 40, in __call__

0505 17:14:27213 :: File "uiWiki.py", line 1191, in OnMove

0505 17:14:27213 :: File "ui.py", line 58, in __call__

0505 17:14:27214 :: File "ui.py", line 40, in __call__

0505 17:14:27214 :: File "uiWiki.py", line 1297, in __OnScroll

0505 17:14:27214 :: File "uiWiki.py", line 1321, in SetBasePos

0505 17:14:27214 :: File "uiWiki.py", line 2377, in OnRender

0505 17:14:27215 :: AttributeError
0505 17:14:27215 :: :
0505 17:14:27215 :: 'NoneType' object has no attribute 'GetGlobalPosition'
0505 17:14:27215 ::



import localeInfo

import dbg, ui, grp, app, wiki, item, nonplayer, renderTarget

def calculateRect(curValue, maxValue):
return -1.0 + float(curValue) / float(maxValue)

def HAS_FLAG(value, flag):
return (value & flag) == flag

def calculatePos(pos, maxWidth):
yincrease = 0
x , y = 0,0
for j in xrange(30):
if pos <= maxWidth:
if yincrease > 0:
pos = pos-1
if pos < 0:
pos = 0
x = 32*pos
break
else:
pos-= maxWidth
yincrease+=1
if yincrease > 0:
y = yincrease * 32
return (x,y)

IMG_DIR = "d:/ymir work/ui/game/wiki/"

class EncyclopediaofGame(ui.BoardWithTitleBar):
def __init__(self):
ui.BoardWithTitleBar.__init__(self)
self.AddFlag("movable")

# Search
self.selectedMob = 0
self.selectedItem = 0
self.searchSlot = None
self.searchButton = None
self.searchText = None
self.searchItemNameText = None
self.searchItemName = None
self.searchClearBtn = None
self.mobSlot = None
self.searchButtonMob = None
self.searchMobNameText = None
self.searchMobName = None
self.searchClearBtnMob = None


# Category
self.categoryText = None
self.listBoxCube = None
self.scrollBarListBoxCube = None

self.tooltipItem = None

# Block
self.blockImage = None

# Result Page
self.resultpageImage=None
self.resultpagebtn=None
self.characterList = []
self.characterIndex = 0

self.resultpageListbox = None
self.resultpageListboxScrollbar = None

self.blocImage = None

self.selectArg=""

self.Initialize()

def __del__(self):
ui.BoardWithTitleBar.__del__(self)

def Initialize(self):
self.SetSize(720,480)
self.SetTitleName(localeInfo.WIKI_TITLE)
self.SetCenterPosition()
self.LoadSearchInfos()
self.LoadCategoryInfos()
self.LoadBlock()
self.LoadResultPage()

def SetTooltip(self, tooltip):
self.tooltipItem = tooltip

def LoadResultPage(self):
self.resultpagebtn = ui.Button()
self.resultpagebtn.SetParent(self)
self.resultpagebtn.SetUpVisual(IMG_DIR+"guide_wall.tga")
self.resultpagebtn.SetOverVisual(IMG_DIR+"guide_wall.tga")
self.resultpagebtn.SetDownVisual(IMG_DIR+"guide_wall.tga")
self.resultpagebtn.SetPosition(140+10,32)
self.resultpagebtn.SAFE_SetEvent(self.LoadGuidePage)
self.resultpagebtn.Show()

self.resultPageImage = ui.ImageBox()
self.resultPageImage.SetParent(self)
self.resultPageImage.LoadImage(IMG_DIR+"result_wall.tga")
self.resultPageImage.SetPosition(140+10,104)
self.resultPageImage.Show()

for j in xrange(4):
ch = ui.RadioButton()
ch.SetParent(self.resultPageImage)
ch.SetEvent(ui.__mem_func__(self.__SelectCharacters),self.characterList,j)
ch.SetUpVisual(IMG_DIR+"character/%d_0.tga"%j)
ch.SetOverVisual(IMG_DIR+"character/%d_1.tga"%j)
ch.SetDownVisual(IMG_DIR+"character/%d_2.tga"%j)
ch.SetPosition(16+(132*j),11)
ch.Hide()
self.characterList.append(ch)

self.resultpageListbox = ListBoxWiki()
self.resultpageListbox.SetParent(self)
self.resultpageListbox.SetPosition(140+18,104+34+5+11)
self.resultpageListbox.SetSize(570, 326)
self.resultpageListbox.SetViewItemCount(10)

self.resultpageListboxScrollbar = ScrollBarNew()
self.resultpageListboxScrollbar.SetParent(self)
self.resultpageListboxScrollbar.SetPosition(140+18+541,104+34+5+11)
self.resultpageListboxScrollbar.SetScrollBarSize(310)

self.resultpageListbox.SetScrollBar(self.resultpageListboxScrollbar)


def LoadGuidePage(self):
self.resultpagebtn.SetUpVisual(IMG_DIR+"guide_wall.tga")
self.resultpagebtn.SetOverVisual(IMG_DIR+"guide_wall.tga")
self.resultpagebtn.SetDownVisual(IMG_DIR+"guide_wall.tga")

def LoadBlock(self):
self.blocImage = ui.ImageBox()
self.blocImage.SetParent(self) # <board>
self.blocImage.LoadImage(IMG_DIR+"block.tga")
self.blocImage.SetPosition(140,32)
self.blocImage.Show()

def LoadSearchInfos(self):
self.selectedMob = 0
self.selectedItem = 0

self.searchSlot = ui.ImageBox()
self.searchSlot.SetParent(self) # <board>
self.searchSlot.LoadImage(IMG_DIR+"search_slot.tga")
self.searchSlot.SetPosition(13,32)
self.searchSlot.Show()

self.searchButton = ui.Button()
self.searchButton.SetParent(self.searchSlot) # <self.searchSlot>
self.searchButton.SetUpVisual(IMG_DIR+"button_0.tga")
self.searchButton.SetOverVisual(IMG_DIR+"button_1.tga")
self.searchButton.SetDownVisual(IMG_DIR+"button_2.tga")
self.searchButton.SAFE_SetEvent(self.StartSearchItem)
self.searchButton.SetPosition(91,3)
self.searchButton.Show()

self.searchItemNameText = ui.TextLine()
self.searchItemNameText.SetParent(self.searchSlot)
self.searchItemNameText.SetPosition(2,5)
self.searchItemNameText.SetFontName("Tahoma:11")
self.searchItemNameText.SetText("")
self.searchItemNameText.Show()

self.searchItemName = ui.EditLine()
self.searchItemName.SetParent(self.searchSlot)
self.searchItemName.SetPosition(2,5)
self.searchItemName.SetSize(91,26)
self.searchItemName.SetFontName("Tahoma:11")
self.searchItemName.SetText(localeInfo.WIKI_ITEM_NAME)
self.searchItemName.SetMax(30)
self.searchItemName.Show()

self.searchItemName.OnIMEUpdate = ui.__mem_func__(self.__OnValueUpdateItem)
self.searchItemName.SetReturnEvent(ui.__mem_func__(self.StartSearchItem))

self.searchClearBtn = ui.Button()
self.searchClearBtn.SetParent(self.searchSlot)
self.searchClearBtn.SetUpVisual(IMG_DIR+"clear_button_1.tga")
self.searchClearBtn.SetOverVisual(IMG_DIR+"clear_button_2.tga")
self.searchClearBtn.SetDownVisual(IMG_DIR+"clear_button_1.tga")
self.searchClearBtn.SetPosition(75,5)
self.searchClearBtn.SAFE_SetEvent(self.ClearEditlineItem)
self.searchClearBtn.Hide()

self.mobSlot = ui.ImageBox()
self.mobSlot.SetParent(self) # <board>
self.mobSlot.LoadImage(IMG_DIR+"search_slot.tga")
self.mobSlot.SetPosition(13,32+29)
self.mobSlot.Show()

self.searchButtonMob = ui.Button()
self.searchButtonMob.SetParent(self.mobSlot) # <self.searchSlot>
self.searchButtonMob.SetUpVisual(IMG_DIR+"button_0.tga")
self.searchButtonMob.SetOverVisual(IMG_DIR+"button_1.tga")
self.searchButtonMob.SetDownVisual(IMG_DIR+"button_2.tga")
self.searchButtonMob.SAFE_SetEvent(self.StartSearchMob)
self.searchButtonMob.SetPosition(91,2)
self.searchButtonMob.Show()

self.searchMobNameText = ui.TextLine()
self.searchMobNameText.SetParent(self.mobSlot)
self.searchMobNameText.SetPosition(2,5)
self.searchMobNameText.SetFontName("Tahoma:11")
self.searchMobNameText.SetText("")
self.searchMobNameText.Show()

self.searchMobName = ui.EditLine()
self.searchMobName.SetParent(self.mobSlot)
self.searchMobName.SetPosition(2,5)
self.searchMobName.SetSize(91,26)
self.searchMobName.SetFontName("Tahoma:11")
self.searchMobName.SetText(localeInfo.WIKI_MOB_NAME)
self.searchMobName.SetMax(30)
self.searchMobName.Show()

self.searchMobName.OnIMEUpdate = ui.__mem_func__(self.__OnValueUpdateMob)
self.searchMobName.SetReturnEvent(ui.__mem_func__(self.StartSearchMob))

self.searchClearBtnMob = ui.Button()
self.searchClearBtnMob.SetParent(self.mobSlot)
self.searchClearBtnMob.SetUpVisual(IMG_DIR+"clear_button_1.tga")
self.searchClearBtnMob.SetOverVisual(IMG_DIR+"clear_button_2.tga")
self.searchClearBtnMob.SetDownVisual(IMG_DIR+"clear_button_1.tga")
self.searchClearBtnMob.SetPosition(75,5)
self.searchClearBtnMob.SAFE_SetEvent(self.ClearEditlineMob)
self.searchClearBtnMob.Hide()


def UpdateItemsList(self):
if len(self.searchItemName.GetText()) > 0:
self.searchClearBtn.Show()
items_list = item.GetItemsByName(str(self.searchItemName.GetText()))
for i, items in enumerate(items_list, start=1):
item.SelectItem(items)
if len(self.searchItemName.GetText()) > len(item.GetItemName()):
self.searchItemNameText.SetText("")
continue

if item.GetItemName().find("+") != -1:
if item.GetItemName()[:-2] == self.searchItemName.GetText():
self.selectedItem=items
self.selectedType=0
self.searchItemNameText.SetText("|cff00ff00%s"%item.GetItemName()[:-2])
else:
if item.GetItemName() == self.searchItemName.GetText():
self.selectedType=0
self.selectedItem=items
self.searchItemNameText.SetText("|cff00ff00%s"%item.GetItemName())
if len(self.searchItemNameText.GetText()) == len(self.searchItemName.GetText()):
self.searchItemNameText.SetText("")
else:
self.selectedItem=0
self.searchItemName.SetText("")
self.searchItemNameText.SetText("")
self.searchClearBtn.Hide()

def __OnValueUpdateItem(self):
ui.EditLine.OnIMEUpdate(self.searchItemName)
self.UpdateItemsList()
if len(self.searchItemName.GetText()) > 0:
self.searchClearBtn.Show()

def OnKeyDown(self, key):
if app.DIK_RETURN == key:
if self.selectedItem > 1:
self.StartSearchItem()
else:
self.StartSearchItem()
return True
return True

def ClearEditlineItem(self):
self.selectedItem=0
self.searchItemName.SetText("")
self.searchItemNameText.SetText("")
self.searchClearBtn.Hide()

def StartSearchItem(self):
if self.selectedItem != 0:
self.ShowItemInfo(self.selectedItem,0)

#########################################

def UpdateMobsList(self):
if len(self.searchMobName.GetText()) > 0:
self.searchClearBtnMob.Show()
mobs_list = nonplayer.GetMobsByNameWiki(str(self.searchMobName.GetText()))
for i, mobs in enumerate(mobs_list, start=1):
mob_name = nonplayer.GetMonsterName(mobs)
if len(self.searchMobName.GetText()) > len(mob_name):
self.searchMobNameText.SetText("")
continue
if mob_name.find("+") != -1:
if mob_name[:-2] == self.searchMobName.GetText():
self.selectedMob=mobs
self.searchMobNameText.SetText("|cff00ff00%s"%mob_name[:-2])
else:
if mob_name == self.searchMobName.GetText():
self.selectedMob=mobs
self.searchMobNameText.SetText("|cff00ff00%s"%mob_name)

if len(self.searchMobNameText.GetText()) == len(self.searchMobName.GetText()):
self.searchMobNameText.SetText("")
else:
self.selectedMob=0
self.searchMobName.SetText("")
self.searchMobNameText.SetText("")
self.searchClearBtnMob.Hide()

def __OnValueUpdateMob(self):
ui.EditLine.OnIMEUpdate(self.searchMobName)
self.UpdateMobsList()
if len(self.searchMobName.GetText()) > 0:
self.searchClearBtnMob.Show()

def OnKeyDown(self, key):
if app.DIK_RETURN == key:
if self.selectedMob > 1:
self.StartSearchMob()
else:
self.StartSearchMob()
return True
return True

def ClearEditlineMob(self):
self.selectedMob=0
self.searchMobName.SetText("")
self.searchMobNameText.SetText("")
self.searchClearBtnMob.Hide()

def StartSearchMob(self):
if self.selectedMob != 0:
self.ShowItemInfo(self.selectedMob,1)

def LoadCategoryInfos(self):
self.categoryText = ui.TextLine()
self.categoryText.SetParent(self) # <board>
self.categoryText.SetPosition(13,89)
self.categoryText.SetText(localeInfo.WIKI_CATEGORY)
self.categoryText.Show()

self.listBoxCube = DropdownTree()
self.listBoxCube.SetParent(self)
self.listBoxCube.SetPosition(13,105)
self.listBoxCube.SetSize(109, 295)
self.listBoxCube.SetItemSize(109, 18)
self.listBoxCube.SetViewItemCount(18)
self.listBoxCube.Show()

self.scrollBarListBoxCube = ScrollBarNew()
self.scrollBarListBoxCube.SetParent(self)
self.scrollBarListBoxCube.SetPosition(109+15,105)
self.scrollBarListBoxCube.SetScrollBarSize(365)
self.scrollBarListBoxCube.Show()

self.listBoxCube.SetScrollBar(self.scrollBarListBoxCube)

listBoxCubeItems = [
{
'item' : self.CreateCubeMenuTab1Item(localeInfo.WIKI_EQUIPMENT, lambda arg = ("Equipment#"): self.__EmptyFunction(arg)),
'children' : (
{'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_WEAPONS, lambda arg = ("Equipment#0"): self.__SelectType(arg)),},
{'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_ARMOR, lambda arg = ("Equipment#1"): self.__SelectType(arg)),},
{'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_HELMET, lambda arg = ("Equipment#2"): self.__SelectType(arg)),},
{'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_SHIELD, lambda arg = ("Equipment#3"): self.__SelectType(arg)),},
{'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_EARRING, lambda arg = ("Equipment#4"): self.__SelectType(arg)),},
{'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_BRACELET, lambda arg = ("Equipment#5"): self.__SelectType(arg)),},
{'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_NECKLACE, lambda arg = ("Equipment#6"): self.__SelectType(arg)),},
{'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_SHOES, lambda arg = ("Equipment#7"): self.__SelectType(arg)),},
{'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_BELT, lambda arg = ("Equipment#8"): self.__SelectType(arg)),},
{'item' : self.CreateLastListItem(localeInfo.WIKI_EQUIPMENT_TALISMAN, lambda arg = ("Equipment#9"): self.__SelectType(arg)),},
)
},
{
'item' : self.CreateCubeMenuTab1Item(localeInfo.WIKI_CHESTS, lambda arg = ("Chests#"): self.__EmptyFunction(arg)),
'children' : (
{'item' : self.CreateLastListItem(localeInfo.WIKI_CHESTS_BOSS, lambda arg = ("Chests#0"): self.__SelectType(arg))},
{'item' : self.CreateLastListItem(localeInfo.WIKI_CHESTS_EVENT, lambda arg = ("Chests#1"): self.__SelectType(arg))},
{'item' : self.CreateLastListItem(localeInfo.WIKI_CHESTS_ALTERNATIVE, lambda arg = ("Chests#2"): self.__SelectType(arg))},
)
},
{
'item' : self.CreateCubeMenuTab1Item(localeInfo.WIKI_BOSSES, lambda arg = ("Bosses#"): self.__EmptyFunction(arg)),
'children' : (
{'item' : self.CreateLastListItem(localeInfo.WIKI_1_75, lambda arg = ("Bosses#0"): self.__SelectType(arg)),},
{'item' : self.CreateLastListItem(localeInfo.WIKI_76_100, lambda arg = ("Bosses#1"): self.__SelectType(arg)),},
{'item' : self.CreateLastListItem(localeInfo.WIKI_100, lambda arg = ("Bosses#2"): self.__SelectType(arg)),},
{'item' : self.CreateLastListItem(localeInfo.WIKI_BOSSES_EVENT, lambda arg = ("Bosses#3"): self.__SelectType(arg)),},
)
},
{
'item' : self.CreateCubeMenuTab1Item(localeInfo.WIKI_MONSTER, lambda arg = ("Monster#"): self.__EmptyFunction(arg)),
'children' : (
{'item' : self.CreateLastListItem(localeInfo.WIKI_1_75, lambda arg = ("Monster#0"): self.__SelectType(arg)),},
{'item' : self.CreateLastListItem(localeInfo.WIKI_76_100, lambda arg = ("Monster#1"): self.__SelectType(arg)),},
{'item' : self.CreateLastListItem(localeInfo.WIKI_100, lambda arg = ("Monster#2"): self.__SelectType(arg)),},
)
},
{
'item' : self.CreateCubeMenuTab1Item(localeInfo.WIKI_METINSTONE, lambda arg = ("Metinstone#"): self.__EmptyFunction(arg)),
'children' : (
{'item' : self.CreateLastListItem(localeInfo.WIKI_1_75, lambda arg = ("Metinstone#0"): self.__SelectType(arg)),},
{'item' : self.CreateLastListItem(localeInfo.WIKI_76_100, lambda arg = ("Metinstone#1"): self.__SelectType(arg)),},
{'item' : self.CreateLastListItem(localeInfo.WIKI_100, lambda arg = ("Metinstone#2"): self.__SelectType(arg)),},
)
}


]

self.listBoxCube.AppendItemList(listBoxCubeItems)

def __EmptyFunction(self, arg):
pass

def __SelectCharacters(self, buttonList, buttonIndex):
self.__ClickRadioButton(buttonList,buttonIndex)
self.__SelectType(self.selectArg,True)

def __ClickRadioButton(self, buttonList, buttonIndex):
try:
characterIndex=buttonList[buttonIndex]
except IndexError:
return
for eachButton in buttonList:
eachButton.SetUp()
characterIndex.Down()
self.characterIndex=buttonIndex

def SetCharacterImagesStatus(self, flag):
if flag:
for j in xrange(4):
self.characterList[j].Show()
self.__ClickRadioButton(self.characterList,self.characterIndex)
else:
for j in xrange(4):
self.characterList[j].Hide()

def ClearResultListbox(self, argList):
try:
self.resultpageListbox.RemoveAllItems()
self.resultpageListboxScrollbar.Hide()
self.resultpageListbox.Show()
renderTarget.Destroy()

isEquipment = argList[0] == "Equipment"

if argList[0].lower() != self.resultpagebtn.GetUpVisualFileName():
if argList[0].lower() == "equipment" or argList[0].lower() == "chests":
self.resultpagebtn.SetUpVisual(IMG_DIR+"category/%s_%d.tga"%(argList[0].lower(),int(argList[1])))
self.resultpagebtn.SetOverVisual(IMG_DIR+"category/%s_%d.tga"%(argList[0].lower(),int(argList[1])))
self.resultpagebtn.SetDownVisual(IMG_DIR+"category/%s_%d.tga"%(argList[0].lower(),int(argList[1])))
else:
self.resultpagebtn.SetUpVisual(IMG_DIR+"category/%s_wall.tga"%(argList[0].lower()))
self.resultpagebtn.SetOverVisual(IMG_DIR+"category/%s_wall.tga"%(argList[0].lower()))
self.resultpagebtn.SetDownVisual(IMG_DIR+"category/%s_wall.tga"%(argList[0].lower()))


if isEquipment:
self.SetCharacterImagesStatus(True)
self.resultpageListbox.SetPosition(140+18,104+34+5+11)
self.resultpageListboxScrollbar.SetPosition(140+18+541,104+34+5+11)
self.resultpageListboxScrollbar.SetScrollBarSize(310)
self.resultpageListbox.SetSize(570, 326)
else:
self.SetCharacterImagesStatus(False)
self.resultpageListbox.SetPosition(140+18,104+5)
self.resultpageListboxScrollbar.SetPosition(140+18+541,104+5)
self.resultpageListboxScrollbar.SetScrollBarSize(350)
self.resultpageListbox.SetSize(570, 360)
except:
pass


def __SelectType(self, arg, isCharacterBtn = False):
try:
if isCharacterBtn == False and self.selectArg == arg:
return
self.selectArg = arg
argList = arg.split("#")

self.ClearResultListbox(argList)

if argList[0] == "Equipment":
for j in xrange(wiki.GetCategorySize(self.characterIndex,int(argList[1]))):
itemVnum = wiki.GetCategoryData(self.characterIndex,int(argList[1]),j)
if j==0:
item = EquipmentItem(j,self,self.resultpageListbox,itemVnum,False)
else:
item = EquipmentItem(j,self,self.resultpageListbox,itemVnum,True)

(igx,igy) = item.GetGlobalPosition()
(lgx,lgy) = self.resultpageListbox.GetGlobalPosition()
if igy+item.GetHeight() > lgy+self.resultpageListbox.GetHeight():
self.resultpageListboxScrollbar.Show()

self.resultpageListbox.AppendItem(item)
elif argList[0] == "Chests":
for j in xrange(wiki.GetChestSize(int(argList[1]))):
(itemVnum, bossVnum)= wiki.GetChestData(int(argList[1]),j)
if itemVnum == 0:
continue
item = ListBoxItemSpecial(j,self,self.resultpageListbox,itemVnum,bossVnum,0)

(igx,igy) = item.GetGlobalPosition()
(lgx,lgy) = self.resultpageListbox.GetGlobalPosition()
if igy+item.GetHeight() > lgy+self.resultpageListbox.GetHeight():
self.resultpageListboxScrollbar.Show()

self.resultpageListbox.AppendItem(item)
elif argList[0] == "Bosses":
for j in xrange(wiki.GetBossSize(int(argList[1]))):
mobVnum = wiki.GetBossData(int(argList[1]),j)
if mobVnum == 0:
continue
item = ListBoxItemSpecial(j,self,self.resultpageListbox,mobVnum,0,1)
(igx,igy) = item.GetGlobalPosition()
(lgx,lgy) = self.resultpageListbox.GetGlobalPosition()
if igy+item.GetHeight() > lgy+self.resultpageListbox.GetHeight():
self.resultpageListboxScrollbar.Show()

self.resultpageListbox.AppendItem(item)
elif argList[0] == "Monster":
for j in xrange(wiki.GetMonsterSize(int(argList[1]))):
mobVnum = wiki.GetMonsterData(int(argList[1]),j)
if mobVnum == 0:
continue
item = ListBoxItemSpecial(j,self,self.resultpageListbox,mobVnum,0,1)
(igx,igy) = item.GetGlobalPosition()
(lgx,lgy) = self.resultpageListbox.GetGlobalPosition()
if igy+item.GetHeight() > lgy+self.resultpageListbox.GetHeight():
self.resultpageListboxScrollbar.Show()
self.resultpageListbox.AppendItem(item)
elif argList[0] == "Metinstone":
for j in xrange(wiki.GetStoneSize(int(argList[1]))):
mobVnum = wiki.GetStoneData(int(argList[1]),j)
if mobVnum == 0:
continue
item = ListBoxItemSpecial(j,self,self.resultpageListbox,mobVnum,0,1)
(igx,igy) = item.GetGlobalPosition()
(lgx,lgy) = self.resultpageListbox.GetGlobalPosition()
if igy+item.GetHeight() > lgy+self.resultpageListbox.GetHeight():
self.resultpageListboxScrollbar.Show()

self.resultpageListbox.AppendItem(item)
except:
pass

def ShowItemInfo(self, vnum, arg):
try:
self.resultpageListboxScrollbar.Show()
if arg == 0: # item info
self.ClearResultListbox(self.selectArg.split("#"))
self.resultpageListboxScrollbar.Show()
item.SelectItem(vnum)
item_table = EquipmentItemSpecial(self,self.resultpageListbox,vnum)
self.resultpageListbox.AppendItem(item_table)
if item.GetItemName().find("+") != -1:
new_refine_table = EquipmentItem(99,self,self.resultpageListbox,vnum,False)
self.resultpageListbox.AppendItem(new_refine_table)
elif arg == 1:
self.ClearResultListbox("Chests#0".split("#"))
self.resultpageListboxScrollbar.Show()
monster_table = MonsterItemSpecial(self,self.resultpageListbox,vnum)
self.resultpageListbox.AppendItem(monster_table)
monster_statics = MonsterStatics(self,self.resultpageListbox,vnum)
self.resultpageListbox.AppendItem(monster_statics)
except:
pass

def OnUpdate(self):
if len( self.resultpageListbox.GetItems())==0:
return
for j in xrange(len(self.resultpageListbox.itemList)):
list_item = self.resultpageListbox.itemList[j]
(pgx,pgy) = self.resultpageListbox.GetGlobalPosition()
(sgx,sgy) = list_item.GetGlobalPosition()
height = 100
isMonsterPage = list_item.isType == 0
if not isMonsterPage:
height=500
if sgx+list_item.GetHeight() < pgy:
# list_item.Hide()
list_item.ClearData()
elif (sgy+list_item.GetHeight()-height) > pgy+self.resultpageListbox.GetHeight():
# list_item.Hide()
list_item.ClearData()
else:
list_item.LoadItemInfos()

def CreateCubeMenuTab1Item(self, text, event, offset = 0):
listboxItem = CubeMenuTab1(text)
listboxItem.SetVisible(True)
listboxItem.SetEvent(event)
listboxItem.SetOffset(offset)
return listboxItem

def CreateLastListItem(self, text, event, offset = 0):
listboxItem = LastListItem(text)
listboxItem.SetEvent(event)
listboxItem.SetOffset(offset)
return listboxItem

def Open(self):
self.Show()

def Destroy(self):
self.listBoxCube.ClearItem()
self.listBoxCube = 0
self.resultpageListbox.RemoveAllItems()
self.resultpageListbox = 0
self.tooltipItem = None
self.selectedMob = 0
self.selectedItem = 0
self.searchSlot = None
self.searchButton = None
self.searchText = None
self.searchItemNameText = None
self.searchItemName = None
self.searchClearBtn = None
self.mobSlot = None
self.searchButtonMob = None
self.searchMobNameText = None
self.searchMobName = None
self.searchClearBtnMob = None
self.categoryText = None
self.scrollBarListBoxCube = 0
self.blockImage = 0
self.resultpageImage=0
self.resultpagebtn=0
self.characterList = 0
self.characterIndex = 0
self.resultpageListboxScrollbar = 0
self.blocImage = 0
self.selectArg=0
del self

def Close(self):
self.Hide()

def OnPressExitKey(self):
self.Close()
return True

def OnPressEscapeKey(self):
self.Close()
return True

class DropdownTree(ui.Window):
class Item(ui.Window):
def __init__(self):
ui.Window.__init__(self)
self.id = -1
self.parentId = -1
self.offset = 0
self.visible = False
self.expanded = False
self.event = None
self.onCollapseEvent = None
self.onExpandEvent = None

def __del__(self):
ui.Window.__del__(self)

def SetParent(self, parent):
ui.Window.SetParent(self, parent)
self.parent=ui.proxy(parent)

def SetSize(self, width, height):
ui.Window.SetSize(self, width, height)

def GetId(self):
return self.id

def SetId(self, id):
self.id = id

def GetParentId(self):
return self.parentId

def SetParentId(self, parentId):
self.parentId = parentId

def IsParent(self):
return self.parentId == -1

def SetVisible(self, visible):
self.visible = visible

def IsVisible(self):
return self.visible

def IsExpanded(self):
return self.expanded

def Expand(self):
self.expanded = True
if self.onExpandEvent:
self.onExpandEvent()

def Collapse(self):
self.expanded = False
if self.onCollapseEvent:
self.onCollapseEvent()

def SetOnExpandEvent(self, event):
self.onExpandEvent = event

def SetOnCollapseEvent(self, event):
self.onCollapseEvent = event

def SetOffset(self, offset):
self.offset = offset

def GetOffset(self):
return self.offset

def SetEvent(self, event):
self.event = event

def OnSelect(self):
if self.event:
self.event()
self.parent.SelectItem(self)

def OnMouseLeftButtonDown(self):
self.OnSelect()

def __init__(self):
ui.Window.__init__(self)

self.__curItemId=0
self.viewItemCount=10
self.basePos=0
self.itemHeight=16
self.itemStep=20
self.selItem=0
self.itemList=[]
self.onSelectItemEvent = lambda *arg: None
self.itemWidth=100

self.scrollBar=None
self.__UpdateSize()

def __del__(self):
ui.Window.__del__(self)

def __UpdateSize(self):
height=self.itemStep*self.__GetViewItemCount()

#self.SetSize(self.itemWidth, height)
self.SetSize(self.itemWidth, 375)

def IsEmpty(self):
if len(self.itemList)==0:
return 1
return 0

def OnMouseWheel(self, nLen):
if self.scrollBar:
self.scrollBar.OnMouseWheel(nLen)

def SetItemStep(self, itemStep):
self.itemStep=itemStep
self.__UpdateSize()

def SetItemSize(self, itemWidth, itemHeight):
self.itemWidth=itemWidth
self.itemHeight=itemHeight
self.__UpdateSize()

def SetViewItemCount(self, viewItemCount):
self.viewItemCount=viewItemCount

def SetSelectEvent(self, event):
self.onSelectItemEvent = event

def SetBasePos(self, basePos):
for oldItem in self.itemList:
oldItem.Hide()

self.basePos=basePos

skipCount = basePos
pos = basePos
for lItem in self.itemList:
if not lItem.IsVisible():
continue

if skipCount > 0:
skipCount -= 1
continue

if pos >= (self.basePos+self.viewItemCount):
break

(x, y) = self.GetItemViewCoord(pos, lItem.GetWidth())
lItem.SetPosition(x+lItem.GetOffset(), y)
lItem.Show()
pos+=1
self.UpdateScrollbar()

def GetItemIndex(self, argItem):
return self.itemList.index(argItem)

def GetSelectedItem(self):
return self.selItem

def SelectIndex(self, index):
if index >= len(self.itemList) or index < 0:
self.selItem = None
return
try:
self.selItem=self.itemList[index]
except:
pass

def ClearItem(self):
self.selItem=None
for lItem in self.itemList:
lItem.Hide()

self.itemList=[]
self.__curItemId = 0

if self.scrollBar:
self.scrollBar.SetPos(0)
self.SetBasePos(0)

def SelectItem(self, selItem):
self.selItem = selItem
if selItem.IsExpanded():
self.CloseTree(selItem, self.itemList)
else:
self.OpenTree(selItem, self.itemList)
self.SetBasePos(self.basePos)

def __AppendItem(self, newItem, parentId):
curItemId = self.__curItemId
self.__curItemId += 1

newItem.SetParent(self)
newItem.SetParentId(parentId)
newItem.SetSize(self.itemWidth, self.itemHeight)
newItem.SetId(curItemId)

pos = self.__GetItemCount()
self.itemList.append(newItem)

if newItem.IsVisible() and self.__IsInViewRange(pos):
(x, y)=self.GetItemViewCoord(pos, newItem.GetWidth())
newItem.SetPosition(x, y)
newItem.Show()
else:
newItem.Hide()

self.UpdateScrollbar()

return curItemId

def AppendItemList(self, dict):
self.__AppendItemList(-1, dict)

def __AppendItemList(self, parentId, dict):
for lItem in dict:
if 'item' in lItem:
id = self.__AppendItem(lItem['item'], parentId)
if 'children' in lItem:
self.__AppendItemList(id, lItem['children'])

def SetScrollBar(self, scrollBar):
scrollBar.SetScrollEvent(ui.__mem_func__(self.__OnScroll))
self.scrollBar=scrollBar

def __OnScroll(self):
self.SetBasePos(int(self.scrollBar.GetPos()*self.__GetScrollLen()))

def __GetScrollLen(self):
scrollLen=self.__GetItemCount()-self.__GetViewItemCount()
if scrollLen<0:
return 0

return scrollLen

def __GetViewItemCount(self):
return self.viewItemCount

def __GetItemCount(self):
return sum(1 for lItem in self.itemList if lItem.IsVisible())

def GetItemViewCoord(self, pos, itemWidth):
return (0, (pos-self.basePos)*self.itemStep)

def __IsInViewRange(self, pos):
if pos<self.basePos:
return 0
if pos>=self.basePos+self.viewItemCount:
return 0
return 1

def UpdateScrollbar(self):
if self.__GetViewItemCount() < self.__GetItemCount():
self.scrollBar.SetMiddleBarSize(float(self.__GetViewItemCount())/self.__GetItemCount())
self.scrollBar.Show()
else:
self.scrollBar.Hide()

def CloseTree(self, curItem, list):
curItem.Collapse()
for listboxItem in list:
if listboxItem.GetParentId() == curItem.GetId():
listboxItem.SetVisible(False)
self.CloseTree(listboxItem, list)

def OpenTree(self, curItem, list):
curItem.Expand()
for listboxItem in list:
if listboxItem.GetParentId() == curItem.GetId():
listboxItem.SetVisible(True)

class CubeMenuTab1(DropdownTree.Item):
def __init__(self, text):
DropdownTree.Item.__init__(self)
self.overLine = False

self.iconBackgroundImage = ui.ImageBox()
self.iconBackgroundImage.SetParent(self)
self.iconBackgroundImage.AddFlag("not_pick")
self.iconBackgroundImage.SetPosition(0,0)
self.iconBackgroundImage.LoadImage(IMG_DIR +"plus.tga")
self.iconBackgroundImage.Show()

self.textLine=ui.TextLine()
self.textLine.SetParent(self.iconBackgroundImage)
self.textLine.SetPosition(0,1)
self.textLine.SetWindowHorizontalAlignLeft()
#self.textLine.SetHorizontalAlignCenter()
self.textLine.SetText(" "+text)
self.textLine.Show()

self.SetOnExpandEvent(self.ExpandEvent)
self.SetOnCollapseEvent(self.CollapseEvent)

def SetSize(self, width, height):
DropdownTree.Item.SetSize(self, width-self.GetOffset(), height)

def CollapseEvent(self):
self.iconBackgroundImage.LoadImage(IMG_DIR +"plus.tga")
self.iconBackgroundImage.Show()

def ExpandEvent(self):
self.iconBackgroundImage.LoadImage(IMG_DIR +"minus.tga")
self.iconBackgroundImage.Show()

def GetText(self):
return self.textLine.GetText()

def __del__(self):
DropdownTree.Item.__del__(self)

class LastListItem(DropdownTree.Item):
def __init__(self, text):
DropdownTree.Item.__init__(self)
self.overLine = False

textLine=ui.TextLine()
textLine.SetParent(self)
textLine.SetFontName(localeInfo.UI_DEF_FONT)
textLine.SetWindowHorizontalAlignLeft()
#textLine.SetHorizontalAlignCenter()
textLine.SetText(" "+text)
textLine.Show()

self.textLine = textLine
self.text = text

def __del__(self):
DropdownTree.Item.__del__(self)

def GetText(self):
return self.text

def SetSize(self, width, height):
DropdownTree.Item.SetSize(self, width-self.GetOffset(), height)

def OnMouseOverIn(self):
self.overLine = True

def OnMouseOverOut(self):
self.overLine = False

def OnRender(self):
if self.overLine and self.parent.GetSelectedItem()!=self:
x, y = self.GetGlobalPosition()
grp.SetColor(grp.GenerateColor(1.0, 1.0, 1.0, 0.2))
grp.RenderBar(x, y, self.GetWidth(), self.GetHeight())
elif self.parent.GetSelectedItem()==self:
x, y = self.GetGlobalPosition()
grp.SetColor(grp.GenerateColor(0.0, 0.0, 1.0, 1.0))
grp.RenderBar(x, y, self.GetWidth(), self.GetHeight())
else:
x, y = self.GetGlobalPosition()
grp.SetColor(grp.GenerateColor(0.0, 0.0, 0.0, 1.0))
grp.RenderBar(x, y, self.GetWidth(), self.GetHeight())


class ScrollBarNew(ui.Window):
SCROLLBAR_WIDTH = 13
SCROLLBAR_MIDDLE_HEIGHT = 1
SCROLLBAR_BUTTON_WIDTH = 17
SCROLLBAR_BUTTON_HEIGHT = 17
SCROLL_BTN_XDIST = 2
SCROLL_BTN_YDIST = 2


class MiddleBar(ui.DragButton):
def __init__(self):
ui.DragButton.__init__(self)
self.AddFlag("movable")

self.SetWindowName("scrollbar_middlebar")

def MakeImage(self):
top = ui.ExpandedImageBox()
top.SetParent(self)
top.LoadImage(IMG_DIR+"scrollbar/scrollbar_middle_top.tga")
top.AddFlag("not_pick")
top.Show()
topScale = ui.ExpandedImageBox()
topScale.SetParent(self)
topScale.SetPosition(0, top.GetHeight())
topScale.LoadImage(IMG_DIR+"scrollbar/scrollbar_middle_topscale.tga")
topScale.AddFlag("not_pick")
topScale.Show()

bottom = ui.ExpandedImageBox()
bottom.SetParent(self)
bottom.LoadImage(IMG_DIR+"scrollbar/scrollbar_middle_bottom.tga")
bottom.AddFlag("not_pick")
bottom.Show()
bottomScale = ui.ExpandedImageBox()
bottomScale.SetParent(self)
bottomScale.LoadImage(IMG_DIR+"scrollbar/scrollbar_middle_bottomscale.tga")
bottomScale.AddFlag("not_pick")
bottomScale.Show()

middle = ui.ExpandedImageBox()
middle.SetParent(self)
middle.LoadImage(IMG_DIR+"scrollbar/scrollbar_middle_middle.tga")
middle.AddFlag("not_pick")
middle.Show()

self.top = top
self.topScale = topScale
self.bottom = bottom
self.bottomScale = bottomScale
self.middle = middle

def SetSize(self, height):
minHeight = self.top.GetHeight() + self.bottom.GetHeight() + self.middle.GetHeight()
height = max(minHeight, height)
ui.DragButton.SetSize(self, 10, height)

scale = (height - minHeight) / 2
extraScale = 0
if (height - minHeight) % 2 == 1:
extraScale = 1

self.topScale.SetRenderingRect(0, 0, 0, scale - 1)
self.middle.SetPosition(0, self.top.GetHeight() + scale)
self.bottomScale.SetPosition(0, self.middle.GetBottom())
self.bottomScale.SetRenderingRect(0, 0, 0, scale - 1 + extraScale)
self.bottom.SetPosition(0, height - self.bottom.GetHeight())

def __init__(self):
ui.Window.__init__(self)

self.pageSize = 1
self.curPos = 0.0
self.eventScroll = None
self.eventArgs = None
self.lockFlag = False

self.CreateScrollBar()
self.SetScrollBarSize(0)

self.scrollStep = 0.20
self.SetWindowName("NONAME_ScrollBar")

def __del__(self):
ui.Window.__del__(self)

def CreateScrollBar(self):
topImage = ui.ExpandedImageBox()
topImage.SetParent(self)
topImage.AddFlag("not_pick")
topImage.LoadImage(IMG_DIR+"scrollbar/scrollbar_top.tga")
topImage.Show()
bottomImage = ui.ExpandedImageBox()
bottomImage.SetParent(self)
bottomImage.AddFlag("not_pick")
bottomImage.LoadImage(IMG_DIR+"scrollbar/scrollbar_bottom.tga")
bottomImage.Show()
middleImage = ui.ExpandedImageBox()
middleImage.SetParent(self)
middleImage.AddFlag("not_pick")
middleImage.SetPosition(0, topImage.GetHeight())
middleImage.LoadImage(IMG_DIR+"scrollbar/scrollbar_middle.tga")
middleImage.Show()
self.topImage = topImage
self.bottomImage = bottomImage
self.middleImage = middleImage

middleBar = self.MiddleBar()
middleBar.SetParent(self)
middleBar.SetMoveEvent(ui.__mem_func__(self.OnMove))
middleBar.Show()
middleBar.MakeImage()
middleBar.SetSize(0) # set min height
self.middleBar = middleBar

def Destroy(self):
self.eventScroll = None
self.eventArgs = None

def SetScrollEvent(self, event, *args):
self.eventScroll = event
self.eventArgs = args

def SetMiddleBarSize(self, pageScale):
self.middleBar.SetSize(int(pageScale * float(self.GetHeight() - self.SCROLL_BTN_YDIST*2)))
realHeight = self.GetHeight() - self.SCROLL_BTN_YDIST*2 - self.middleBar.GetHeight()
self.pageSize = realHeight

def SetScrollBarSize(self, height):
self.SetSize(self.SCROLLBAR_WIDTH, height)

self.pageSize = height - self.SCROLL_BTN_YDIST*2 - self.middleBar.GetHeight()

middleImageScale = float((height - self.SCROLL_BTN_YDIST*2) - self.middleImage.GetHeight()) / float(self.middleImage.GetHeight())
self.middleImage.SetRenderingRect(0, 0, 0, middleImageScale)
self.bottomImage.SetPosition(0, height - self.bottomImage.GetHeight())

self.middleBar.SetRestrictMovementArea(self.SCROLL_BTN_XDIST, self.SCROLL_BTN_YDIST, \
self.middleBar.GetWidth(), height - self.SCROLL_BTN_YDIST * 2)
self.middleBar.SetPosition(self.SCROLL_BTN_XDIST, self.SCROLL_BTN_YDIST)

def SetScrollStep(self, step):
self.scrollStep = step

def GetScrollStep(self):
return self.scrollStep

def GetPos(self):
return self.curPos

def OnUp(self):
self.SetPos(self.curPos-self.scrollStep)

def OnDown(self):
self.SetPos(self.curPos+self.scrollStep)

def SetPos(self, pos, moveEvent = True):
pos = max(0.0, pos)
pos = min(1.0, pos)

newPos = float(self.pageSize) * pos
self.middleBar.SetPosition(self.SCROLL_BTN_XDIST, int(newPos) + self.SCROLL_BTN_YDIST)
if moveEvent == True:
self.OnMove()

def OnMove(self):

if self.lockFlag:
return

if 0 == self.pageSize:
return

(xLocal, yLocal) = self.middleBar.GetLocalPosition()
self.curPos = float(yLocal - self.SCROLL_BTN_YDIST) / float(self.pageSize)

if self.eventScroll:
apply(self.eventScroll, self.eventArgs)

def OnMouseLeftButtonDown(self):
(xMouseLocalPosition, yMouseLocalPosition) = self.GetMouseLocalPosition()
newPos = float(yMouseLocalPosition) / float(self.GetHeight())
self.SetPos(newPos)

def LockScroll(self):
self.lockFlag = True

def UnlockScroll(self):
self.lockFlag = False

class ListBoxWiki(ui.Window):
def __init__(self):
ui.Window.__init__(self)
self.viewItemCount=10
self.basePos=0
self.itemHeight=16
self.itemStep=20
self.selItem=0
self.itemList=[]
self.onSelectItemEvent = lambda *arg: None
self.itemWidth=100
self.scrollBar=None

def __del__(self):
ui.Window.__del__(self)

def __UpdateSize(self):
height=self.itemStep*self.__GetViewItemCount()
pass
#self.SetSize(self.itemWidth, height)

def GetItemIndex(self, argItem):
return self.itemList.index(argItem)

def GetSelectedItem(self):
return self.selItem

def IsEmpty(self):
if self.__GetItemCount()==0:
return 1
return 0

def __GetViewItemCount(self):
return self.viewItemCount

def __GetItemCount(self):
return len(self.itemList)

def SetItemStep(self, itemStep):
self.itemStep=itemStep

def SetItemSize(self, itemWidth, itemHeight):
self.itemWidth=itemWidth
self.itemHeight=itemHeight

def SetViewItemCount(self, viewItemCount):
self.viewItemCount=viewItemCount

def SetSelectEvent(self, event):
self.onSelectItemEvent = event

def SelectIndex(self, index):
if index >= len(self.itemList) or index < 0:
self.selItem = None
return
try:
self.selItem=self.itemList[index]
except:
pass

def SelectItem(self, selItem):
self.selItem=selItem
self.onSelectItemEvent(selItem)

def RemoveAllItems(self):
self.selItem=None
for j in xrange(len(self.itemList)):
self.itemList[j].Destroy()
self.itemList=[]
if self.scrollBar:
self.scrollBar.SetPos(0)

if app.ENABLE_SWITCHBOT:
def GetItems(self):
return self.itemList

def RemoveItem(self, delItem):
if delItem==self.selItem:
self.selItem=None
self.itemList.remove(delItem)

def AppendItem(self, newItem):
self.itemList.append(newItem)

def OnMouseWheel(self, nLen):
if self.scrollBar:
self.scrollBar.OnMouseWheel(nLen)

def SetScrollBar(self, scrollBar):
scrollBar.SetScrollEvent(ui.__mem_func__(self.__OnScroll))
self.scrollBar=scrollBar

def __OnScroll(self):
self.SetBasePos(int(self.scrollBar.GetPos()*self.__GetScrollLen()))

def __GetScrollLen(self):
if self.__GetItemCount() == 0:
return 0
(lx,ly) = self.itemList[len(self.itemList)-1].exPos
return ly

def GetItemViewCoord(self, pos, itemWidth):
return (0, (pos-self.basePos)*self.itemStep)

def __IsInViewRange(self, pos):
if pos<self.basePos:
return 0
if pos>=self.basePos+self.viewItemCount:
return 0
return 1

def SetBasePos(self, basePos):
if self.basePos == basePos:
return
for j in xrange(len(self.itemList)):
(ex,ey) = self.itemList[j].exPos
self.itemList[j].SetPosition(0,ey-(basePos))
self.itemList[j].OnRender()
self.basePos=basePos

class EquipmentItem(ui.ExpandedImageBox):
def __del__(self):
ui.ExpandedImageBox.__del__(self)

def __init__(self, index, parent, listbox, itemVnum, isFirst):

ui.ExpandedImageBox.__init__(self)
self.childrenTextLine = []
self.childrenImages = []
self.refineItems = []
self.refineStepText = []
self.priceStepText = []
self.refineInfos = []
self.refinenNumberline = []
self.parent = parent
self.listbox = listbox
self.listIndex = index
self.itemVnum = itemVnum
self.isFirst = isFirst
self.overLine =False
self.IsLoaded = False
self.refineCount = 2
self.isType=0

item.SelectItem(self.itemVnum)
for j in xrange(wiki.GetRefineMaxLevel(self.itemVnum,item.GetItemType(),item.GetItemSubType())+1):
if item.SelectItemWiki(self.itemVnum+j) == 1:
argv = wiki.GetRefineItems(item.GetRefineSet())
if argv != 0:
(id, item_vnum_0, item_count_0, item_vnum_1, item_count_1, item_vnum_2, item_count_2, item_vnum_3, item_count_3, item_vnum_4, item_count_4, cost, prob, refine_count) = argv
self.InsertRefine(id,item_vnum_0,item_count_0,item_vnum_1,item_count_1,item_vnum_2,item_count_2,item_vnum_3,item_count_3,item_vnum_4,item_count_4,cost,prob,refine_count)
if refine_count > self.refineCount:
self.refineCount = refine_count
else:
self.InsertRefine(0,0,0,0,0,0,0,0,0,0,0,0,0,0)
else:
self.InsertRefine(0,0,0,0,0,0,0,0,0,0,0,0,0,0)

x,y= 0,5
if self.isFirst:
getList = self.listbox.GetItems()
j = len(getList)
(xT,realY) = getList[j-1].GetLocalPosition()
if getList[j-1].refineCount == 2:
y= realY+(156+5)
elif getList[j-1].refineCount == 3:
y= realY+(200+5)
elif getList[j-1].refineCount == 4:
y= realY+(255+5)
elif getList[j-1].refineCount == 5:
y= realY+(296+5)
self.SetParent(listbox)
self.LoadImage(IMG_DIR+"slot/slot_%d.tga"%self.refineCount)
if index == 99:
x,y= 0,200
self.SetPosition(x,y, True)
self.childrenImages.append(self)

def ClearData(self):
if self.IsLoaded == True:
self.IsLoaded=False
self.childrenTextLine = []
self.childrenImages = []
self.childrenTextLine = []
self.refineStepText = []
self.priceStepText = []
self.refineInfos = []
self.refinenNumberline = []
self.childrenImages.append(self)
self.itemName= None
self.itemLevel= None
self.upgradeCost= None
self.itemIcon= None
self.yangCost= None

def LoadItemInfos(self):
if self.IsLoaded == False:

self.IsLoaded=True
item.SelectItem(self.itemVnum)

self.itemName = ui.TextLine()
self.itemName.SetParent(self)
self.itemName.SetText("%s"%item.GetItemName()[:-2])
self.itemName.SetPosition(5,5)
self.itemName.Show()


self.itemLevel = ui.TextLine()
self.itemLevel.SetParent(self)

for i in xrange(item.LIMIT_MAX_NUM):
(limitType, limitValue) = item.GetLimit(i)
if item.LIMIT_LEVEL == limitType:
if limitValue == 0:
self.itemLevel.SetText(localeInfo.WIKI_LEVEL_TEXT%1)
else:
self.itemLevel.SetText(localeInfo.WIKI_LEVEL_TEXT%limitValue)
self.itemLevel.SetPosition(480,5)
self.itemLevel.Show()

self.itemIcon = ui.ExpandedImageBox()
self.itemIcon.SetParent(self)
if item.GetIconImageFileName().find("gr2") == -1:
self.itemIcon.LoadImage(item.GetIconImageFileName())
else:
self.itemIcon.LoadImage("icon/item/27995.tga")
itemLevelCoordinates = [ [0,0],[0,0],[10,55],[10,85],[10,100],[10,115]]
self.itemIcon.SetPosition(itemLevelCoordinates[self.refineCount][0],itemLevelCoordinates[self.refineCount][1])
self.itemIcon.SAFE_SetStringEvent("MOUSE_OVER_IN", self.OverInItem,self.itemVnum+wiki.GetRefineMaxLevel(self.itemVnum,item.GetItemType(),item.GetItemSubType()))
self.itemIcon.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.OverOutItem)
self.itemIcon.SetEvent(ui.__mem_func__(self.OnClickItem),"mouse_click")
self.itemIcon.Show()

self.upgradeCost = ui.TextLine()
self.upgradeCost.SetParent(self)
self.upgradeCost.SetText(localeInfo.WIKI_UPGRADE_COSTS)
self.upgradeCost.SetPosition(58,24)
self.upgradeCost.Show()

self.yangCost = ui.TextLine()
self.yangCost.SetParent(self)
self.yangCost.SetText(localeInfo.WIKI_YANG_COSTS)
list = [140,140,140,180,230,275]
self.yangCost.SetPosition(58,list[self.refineCount])
self.yangCost.Show()

for j in xrange(10):
step_refine = ui.TextLine()
step_refine.SetParent(self)
step_refine.SetText("+%d"%j)
step_refine.SetPosition(145+(j*41),24)
step_refine.Show()

self.refineStepText.append(step_refine)
self.childrenTextLine.append(step_refine)

step_price = ui.TextLine()
step_price.SetParent(self)
if len(str(self.refineItems[j]["cost"])) >= 7:
step_price.SetText(str(self.refineItems[j]["cost"]).replace("000","k"))
else:
step_price.SetText(localeInfo.MoneyFormat(self.refineItems[j]["cost"]))
step_price.SetPosition(135+(j*42),list[self.refineCount])
step_price.Show()

self.priceStepText.append(step_price)
self.childrenTextLine.append(step_price)

step_slot0,step_slot1,step_slot2,step_slot3,step_slot4 = None,None,None,None,None
step_numberline0,step_numberline1,step_numberline2,step_numberline3,step_numberline4 = None,None,None,None,None
l = [step_slot0,step_slot1,step_slot2,step_slot3,step_slot4]
x = [step_numberline0,step_numberline1,step_numberline2,step_numberline3,step_numberline4]
for i in xrange(self.refineCount):
l = ui.ExpandedImageBox()
l.SetParent(self)
refineItem = self.refineItems[j]["item_vnum_%d"%i]
if refineItem != 0:
item.SelectItem(refineItem)
l.LoadImage(item.GetIconImageFileName())
l.SAFE_SetStringEvent("MOUSE_OVER_IN", self.OverInItem,refineItem)
l.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.OverOutItem)
else:
l.LoadImage(IMG_DIR+"slot/empty_slot.tga")
l.SetPosition(135+(j*41),45+(i*47))
l.Show()

if refineItem != 0:
x = ui.NumberLine()
x.SetParent(self)
x.SetNumber(str(self.refineItems[j]["item_count_%d"%i]))
x.SetPosition(165+(j*41),70+(i*47))
x.Show()

self.childrenTextLine.append(x)

self.childrenImages.append(l)

ptr = (step_slot0,step_slot1,step_slot2,step_slot3,step_slot4)
ptrex = (step_numberline0,step_numberline1,step_numberline2,step_numberline3,step_numberline4)
self.refineInfos.extend(ptr)
self.refinenNumberline.extend(ptrex)

self.childrenTextLine.append(self.yangCost)
self.childrenTextLine.append(self.itemName)
self.childrenTextLine.append(self.itemLevel)
self.childrenTextLine.append(self.upgradeCost)
self.childrenImages.append(self.itemIcon)
self.Show()
self.OnRender()

def OnClickItem(self):
try:
self.parent.tooltipItem.HideToolTip()
except:
pass
self.parent.ShowItemInfo(self.itemVnum,0)


def OverOutItem(self):
try:
self.parent.tooltipItem.HideToolTip()
except:
pass

def OverInItem(self, index):
try:
self.parent.tooltipItem.SetItemToolTip(index)
self.parent.tooltipItem.ShowToolTip()
except:
pass

def InsertRefine(self, id,item_vnum_0,item_count_0,item_vnum_1,item_count_1,item_vnum_2,item_count_2,item_vnum_3,item_count_3,item_vnum_4,item_count_4,cost,prob,refine_count):
self.refineItems.append(\
{
"id" : int(id),\
"item_vnum_0" : int(item_vnum_0),\
"item_count_0" : int(item_count_0),\
"item_vnum_1" : int(item_vnum_1),\
"item_count_1" : int(item_count_1),\
"item_vnum_2" : int(item_vnum_2),\
"item_count_2" : int(item_count_2),\
"item_vnum_3" : int(item_vnum_3),\
"item_count_3" : int(item_count_3),\
"item_vnum_4" : int(item_vnum_4),\
"item_count_4" : int(item_count_4),\
"cost" : long(cost),\
"prob" : long(prob),\
"refine_count" : int(refine_count),\
},
)

def OnMouseOverIn(self):
self.overLine = True

def OnMouseOverOut(self):
self.overLine = False

def OnRender(self):
if not self.IsShow():
return
(pgx,pgy) = self.listbox.GetGlobalPosition()
for j in xrange(len(self.childrenTextLine)):
item = self.childrenTextLine[j]
(igx,igy) = item.GetGlobalPosition()
if igy < pgy:
item.Hide()
elif igy > (pgy+self.listbox.GetHeight()-15):
item.Hide()
else:
item.Show()
for j in xrange(len(self.childrenImages)):
item = self.childrenImages[j]
(igx,igy) = item.GetGlobalPosition()
item.SetRenderingRect(0,0,0,0)
if igy < pgy:
item.SetRenderingRect(0,calculateRect(item.GetHeight()-abs(igy-pgy),item.GetHeight()),0,0)
elif igy+item.GetHeight() > (pgy+self.listbox.GetHeight()-15):
calculate = (pgy+self.listbox.GetHeight()-15) - (igy+item.GetHeight())
if calculate == 0:
return
item.SetRenderingRect(0.0,0.0,0.0,calculateRect(item.GetHeight()-abs(calculate),item.GetHeight()))

def Destroy(self):
self.childrenTextLine = []
self.childrenImages = []
self.refineItems = []
self.refineStepText = []
self.priceStepText = []
self.refineInfos = []
self.refinenNumberline = []
self.parent = 0
self.listbox = 0
self.listIndex = 0
self.itemVnum = 0
self.isFirst = 0
self.overLine =0
self.refineCount = 0
del self

class EquipmentItemSpecial(ui.ExpandedImageBox):
def __del__(self):
ui.ExpandedImageBox.__del__(self)
def __init__(self, parent, listbox, itemVnum):
ui.ExpandedImageBox.__init__(self)
self.childrenTextLine = []
self.childrenImages = []
self.parent = parent
self.listbox = listbox
self.itemVnum = itemVnum

self.overLine =False
self.IsLoaded =False
self.SetParent(listbox)
self.LoadImage(IMG_DIR+"slot/special_slot.tga")
self.SetPosition(0,0, True)
self.isType=0

def LoadItemInfos(self):
if self.IsLoaded == False:
self.IsLoaded=True

item.SelectItem(self.itemVnum)

self.itemIcon = ui.ExpandedImageBox()
self.itemIcon.SetParent(self)
if item.GetIconImageFileName().find("gr2") == -1:
self.itemIcon.LoadImage(item.GetIconImageFileName())
else:
self.itemIcon.LoadImage("icon/item/27995.tga")
self.itemIcon.SetPosition(70,45)
self.itemIcon.SAFE_SetStringEvent("MOUSE_OVER_IN", self.OverInItem,self.itemVnum+wiki.GetRefineMaxLevel(self.itemVnum,item.GetItemType(),item.GetItemSubType()))
self.itemIcon.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.OverOutItem)
self.itemIcon.Show()

self.avaible = ui.TextLine()
self.avaible.SetParent(self)
self.avaible.SetText(localeInfo.WIKI_AVAIBLE_AT)
self.avaible.SetPosition(350,6)
self.avaible.Show()

self.refine = ui.TextLine()
self.refine.SetParent(self)
self.refine.SetText(localeInfo.WIKI_IMPROVEMENT_INFO%item.GetItemName()[:-2])
self.refine.SetPosition(180,170)
self.refine.Show()

self.childrenTextLine.append(self.refine)
self.childrenTextLine.append(self.avaible)
self.childrenImages.append(self)
self.childrenImages.append(self.itemIcon)
self.Show()
self.OnRender()

def OverOutItem(self):
if self.parent:
if self.parent.tooltipItem:
self.parent.tooltipItem.HideToolTip()

def OverInItem(self, index):
if self.parent:
if self.parent.tooltipItem:
self.parent.tooltipItem.SetItemToolTip(index)
self.parent.tooltipItem.ShowToolTip()

def OnMouseOverIn(self):
self.overLine = True

def OnMouseOverOut(self):
self.overLine = False

def OnRender(self):
if not self.IsShow():
return
(pgx,pgy) = self.listbox.GetGlobalPosition()
for j in xrange(len(self.childrenTextLine)):
item = self.childrenTextLine[j]
(igx,igy) = item.GetGlobalPosition()
if igy < pgy:
item.Hide()
elif igy > (pgy+self.listbox.GetHeight()-15):
item.Hide()
else:
item.Show()
for j in xrange(len(self.childrenImages)):
item = self.childrenImages[j]
(igx,igy) = item.GetGlobalPosition()
item.SetRenderingRect(0,0,0,0)
if igy < pgy:
item.SetRenderingRect(0,calculateRect(item.GetHeight()-abs(igy-pgy),item.GetHeight()),0,0)
elif igy+item.GetHeight() > (pgy+self.listbox.GetHeight()-15):
calculate = (pgy+self.listbox.GetHeight()-15) - (igy+item.GetHeight())
if calculate == 0:
return
item.SetRenderingRect(0.0,0.0,0.0,calculateRect(item.GetHeight()-abs(calculate),item.GetHeight()))

def Destroy(self):
self.childrenTextLine = []
self.childrenImages = []
self.parent = 0
self.listbox = 0
self.itemVnum = 0
self.overLine =0
self.IsLoaded =0
del self

class MonsterItemSpecial(ui.ExpandedImageBox):
def __del__(self):
ui.ExpandedImageBox.__del__(self)
def __init__(self, parent, listbox, itemVnum):
ui.ExpandedImageBox.__init__(self)
self.childrenTextLine = []
self.childrenImages = []
self.childrenItems = []
self.childrenNumberline = []
self.parent = parent
self.listbox = listbox
self.itemVnum = itemVnum
self.overLine =False
self.IsLoaded =False

self.SetParent(listbox)
self.LoadImage(IMG_DIR+"slot/special_slot.tga")
self.SetPosition(0,0, True)
self.childrenImages.append(self)

self.grid = Grid(width = 10, height = 50)

self.renterTarget=None
self.GridListbox=None
self.GridScrollbar=None
self.isType=0

def LoadItemInfos(self):
if self.IsLoaded == False:
self.IsLoaded=True

self.renterTarget = ui.RenderTarget()
self.renterTarget.SetParent(self)
self.renterTarget.SetPosition(1,1)
self.renterTarget.SetSize(187,163)
self.renterTarget.SetRenderTarget(21)
self.renterTarget.Show()
self.childrenImages.append(self.renterTarget)

renderTarget.SelectModel(21, self.itemVnum)
renderTarget.SetVisibility(21, True)

self.GridListbox = ListBoxGrid(self.listbox, self)
self.GridListbox.SetParent(self)
self.GridListbox.SetPosition(190,25)
self.GridListbox.SetSize(351, 142)
self.GridListbox.Show()

dropList = ui.TextLine()
dropList.SetParent(self)
dropList.SetText(localeInfo.WIKI_DROPLIST_INFO%nonplayer.GetMonsterName(self.itemVnum))
dropList.SetPosition(300,6)
dropList.Show()
self.childrenTextLine.append(dropList)

monsterInfo = ui.TextLine()
monsterInfo.SetParent(self)
monsterInfo.SetText(localeInfo.WIKI_STATICS_INFO%nonplayer.GetMonsterName(self.itemVnum))
monsterInfo.SetPosition(180,170)
monsterInfo.Show()
self.childrenTextLine.append(monsterInfo)

for j in xrange(wiki.GetMobInfoSize(self.itemVnum)):
vnum, count = 0,0
(vnum,count) = wiki.GetMobInfoData(self.itemVnum,j)
if vnum == 0:
continue

item.SelectItem(vnum)

item_new = ui.ExpandedImageBox()
item_new.SetParent(self.GridListbox)
if item.GetIconImageFileName().find("gr2") == -1:
item_new.LoadImage(item.GetIconImageFileName())
else:
item_new.LoadImage("icon/item/27995.tga")
item_new.SAFE_SetStringEvent("MOUSE_OVER_IN", self.OverInItem,vnum)
item_new.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.OverOutItem)

(width,height) = item.GetItemSize()
pos = self.grid.find_blank(width, height)
self.grid.put(pos,width,height)
(x,y) = calculatePos(pos,10)
item_new.SetPosition(x,y,True)
item_new.Show()

if count>1:
itemNumberline = ui.NumberLine()
itemNumberline.SetParent(self.GridListbox)
itemNumberline.SetNumber(str(count))
itemNumberline.SetPosition(x+15,y+item_new.GetHeight()-10,True)
itemNumberline.Show()
self.GridListbox.AppendItem(itemNumberline)
self.childrenNumberline.append(itemNumberline)

self.GridListbox.AppendItem(item_new)
self.childrenItems.append(item_new)

# Scrollbar
if self.GridScrollbar == None:
(gx,gy)=item_new.GetGlobalPosition()
(sx,sy)=self.GridListbox.GetGlobalPosition()
if gy+item_new.GetHeight() > sy+self.GridListbox.GetHeight():
self.GridScrollbar= ScrollBarNew()
self.GridScrollbar.SetParent(self)
self.GridScrollbar.SetPosition(525,23)
self.GridScrollbar.SetScrollBarSize(140)
self.GridListbox.SetScrollBar(self.GridScrollbar)
self.GridScrollbar.Show()

self.childrenImages.append(self.GridScrollbar.topImage)
self.childrenImages.append(self.GridScrollbar.bottomImage)
self.childrenImages.append(self.GridScrollbar.middleBar.top)
self.childrenImages.append(self.GridScrollbar.middleBar.topScale)
self.childrenImages.append(self.GridScrollbar.middleBar.bottom)
self.childrenImages.append(self.GridScrollbar.middleBar.bottomScale)
self.childrenImages.append(self.GridScrollbar.middleBar.middle)
self.Show()
self.OnRender()

def OverOutItem(self):
if self.parent:
if self.parent.tooltipItem:
self.parent.tooltipItem.HideToolTip()

def OverInItem(self, index):
if self.parent:
if self.parent.tooltipItem:
self.parent.tooltipItem.SetItemToolTip(index)
self.parent.tooltipItem.ShowToolTip()

def OnMouseOverIn(self):
self.overLine = True

def OnMouseOverOut(self):
self.overLine = False

def OnRender(self):
if not self.IsShow():
return
(pgx,pgy) = self.listbox.GetGlobalPosition()
(lgx,lgy) = self.GridListbox.GetGlobalPosition()
for j in xrange(len(self.childrenTextLine)):
item = self.childrenTextLine[j]
(igx,igy) = item.GetGlobalPosition()
if igy < pgy:
item.Hide()
elif igy > (pgy+self.listbox.GetHeight()-15):
item.Hide()
else:
item.Show()

for j in xrange(len(self.childrenImages)):
item = self.childrenImages[j]
(igx,igy) = item.GetGlobalPosition()
item.SetRenderingRect(0,0,0,0)
if igy < pgy:
item.SetRenderingRect(0,calculateRect(item.GetHeight()-abs(igy-pgy),item.GetHeight()),0,0)
elif igy+item.GetHeight() > (pgy+self.listbox.GetHeight()-15):
calculate = (pgy+self.listbox.GetHeight()-15) - (igy+item.GetHeight())
if calculate == 0:
return
item.SetRenderingRect(0.0,0.0,0.0,calculateRect(item.GetHeight()-abs(calculate),item.GetHeight()))

for j in xrange(len(self.childrenNumberline)):
item = self.childrenNumberline[j]
(igx,igy) = item.GetGlobalPosition()
if igy < pgy:
item.Hide()
elif igy < lgy:
item.Hide()
elif igy > lgy+self.GridListbox.GetHeight():
item.Hide()
elif igy > (pgy+self.listbox.GetHeight()-15):
item.Hide()
else:
item.Show()

if self.GridScrollbar !=None:
scroll = self.GridScrollbar.middleImage
(igx,igy) = scroll.GetGlobalPosition()
if igy < pgy:
scroll.Hide()
elif igy > (pgy+self.listbox.GetHeight()-60):
scroll.Hide()
else:
scroll.Show()

if self.GridListbox != None:
for j in xrange(len(self.childrenItems)):
item = self.childrenItems[j]
(igx,igy) = item.GetGlobalPosition()
item.SetRenderingRect(0,0,0,0)
calculate = 0
calculatefirst = 0
if igy < lgy:
calculatefirst +=abs(igy-lgy)
if igy < pgy:
calculatefirst += abs(igy-pgy)
if igy+item.GetHeight() > (pgy+self.listbox.GetHeight()-15):
calculate = (pgy+self.listbox.GetHeight()-15) - (igy+item.GetHeight())
if igy+item.GetHeight() > (lgy+self.GridListbox.GetHeight()+100):
calculate += (lgy+self.GridListbox.GetHeight()) - (igy+item.GetHeight())
elif igy+item.GetHeight() > (lgy+self.GridListbox.GetHeight()):
calculate += (lgy+self.GridListbox.GetHeight()) - (igy+item.GetHeight())
item.SetRenderingRect(0,calculateRect(item.GetHeight()-calculatefirst,item.GetHeight()),0,calculateRect(item.GetHeight()-abs(calculate),item.GetHeight()))

def Destroy(self):
self.grid.reset()
self.grid=0
self.GridListbox.RemoveAllItems()
self.GridListbox=0
self.childrenTextLine = []
self.childrenImages = []
self.childrenItems = []
self.childrenNumberline = []
self.parent = 0
self.listbox = 0
self.itemVnum = 0
self.overLine =0
self.IsLoaded =0
self.renterTarget=0
self.GridScrollbar=0
self.isType=0
del self


class MonsterStatics(ui.ExpandedImageBox):
def __del__(self):
ui.ExpandedImageBox.__del__(self)
def __init__(self, parent, listbox, itemVnum):
ui.ExpandedImageBox.__init__(self)
self.childrenTextLine = []
self.childrenImages = []
self.parent = parent
self.listbox = listbox
self.itemVnum = itemVnum
self.overLine =False
self.IsLoaded =False

self.SetParent(listbox)
self.LoadImage(IMG_DIR+"slot/big_empty.tga")
self.SetPosition(0,188, True)
self.childrenImages.append(self)

self.GridListbox=None
self.GridScrollbar=None
self.isType=0

def LoadItemInfos(self):
if self.IsLoaded == False:
self.IsLoaded=True

self.GridListbox = ListBoxGrid(self.listbox, self)
self.GridListbox.SetParent(self)
self.GridListbox.SetPosition(0,0)
self.GridListbox.SetSize(541, 159)
self.GridListbox.Show()

self.GridScrollbar= ScrollBarNew()
self.GridScrollbar.SetParent(self)
self.GridScrollbar.SetPosition(525,5)
self.GridScrollbar.SetScrollBarSize(150)
self.GridListbox.SetScrollBar(self.GridScrollbar)
self.GridScrollbar.Show()

monsterLevel = ui.TextLine()
monsterLevel.SetParent(self.GridListbox)
monsterLevel.SetText("|Eemoji/e_wiki|e "+localeInfo.WIKI_LEVEL_TEXT%nonplayer.GetMonsterLevel(self.itemVnum))
monsterLevel.SetPosition(5,3,True)
monsterLevel.Show()
self.GridListbox.AppendItem(monsterLevel)
self.childrenTextLine.append(monsterLevel)



RACE_FLAG_TO_NAME = {
1 << 0 : localeInfo.TARGET_INFO_RACE_ANIMAL,
1 << 1 : localeInfo.TARGET_INFO_RACE_UNDEAD,
1 << 2 : localeInfo.TARGET_INFO_RACE_DEVIL,
1 << 3 : localeInfo.TARGET_INFO_RACE_HUMAN,
1 << 4 : localeInfo.TARGET_INFO_RACE_ORC,
1 << 5 : localeInfo.TARGET_INFO_RACE_MILGYO,
}

SUB_RACE_FLAG_TO_NAME = {
1 << 11 : localeInfo.TARGET_INFO_RACE_ELEC,
1 << 12 : localeInfo.TARGET_INFO_RACE_FIRE,
1 << 13 : localeInfo.TARGET_INFO_RACE_ICE,
1 << 14 : localeInfo.TARGET_INFO_RACE_WIND,
1 << 15 : localeInfo.TARGET_INFO_RACE_EARTH,
1 << 16 : localeInfo.TARGET_INFO_RACE_DARK,
1 << 17 : localeInfo.TARGET_INFO_RACE_ZODIAC,
}

mainrace = ""
subrace = ""
dwRaceFlag = nonplayer.GetMonsterRaceFlag(self.itemVnum)
for i in xrange(18):
curFlag = 1 << i
if HAS_FLAG(dwRaceFlag, curFlag):
if RACE_FLAG_TO_NAME.has_key(curFlag):
mainrace += RACE_FLAG_TO_NAME[curFlag] + ", "
elif SUB_RACE_FLAG_TO_NAME.has_key(curFlag):
subrace += SUB_RACE_FLAG_TO_NAME[curFlag] + ", "
if nonplayer.IsMonsterStone(self.itemVnum):
mainrace += localeInfo.TARGET_INFO_RACE_METIN + ", "
if mainrace == "":
mainrace = localeInfo.TARGET_INFO_NO_RACE
else:
mainrace = mainrace[:-2]

if subrace == "":
subrace = localeInfo.TARGET_INFO_NO_RACE
else:
subrace = subrace[:-2]

monsterType = ui.TextLine()
monsterType.SetParent(self.GridListbox)
monsterType.SetText("|Eemoji/e_wiki|e "+localeInfo.WIKI_STATICS_INFO_TYPE%(mainrace,subrace))
monsterType.SetPosition(5,3*(7*1),True)
monsterType.Show()
self.GridListbox.AppendItem(monsterType)
self.childrenTextLine.append(monsterType)

(mindmg,maxdmg) = nonplayer.GetMonsterDamage(self.itemVnum)
hp = nonplayer.GetMonsterMaxHP(self.itemVnum)
monsterDmgandHp = ui.TextLine()
monsterDmgandHp.SetParent(self.GridListbox)
monsterDmgandHp.SetText("|Eemoji/e_wiki|e "+localeInfo.WIKI_STATICS_INFO_DMG%(mindmg,maxdmg,hp))
monsterDmgandHp.SetPosition(5,3*(7*2),True)
monsterDmgandHp.Show()
self.GridListbox.AppendItem(monsterDmgandHp)
self.childrenTextLine.append(monsterDmgandHp)

(minyang,maxyang) = nonplayer.GetMonsterPrice(self.itemVnum)
exp = nonplayer.GetMonsterExp(self.itemVnum)
monsterYangandExp = ui.TextLine()
monsterYangandExp.SetParent(self.GridListbox)
monsterYangandExp.SetText("|Eemoji/e_wiki|e "+localeInfo.WIKI_STATICS_INFO_YNG%(minyang,maxyang,exp))
monsterYangandExp.SetPosition(5,3*(7*3),True)
monsterYangandExp.Show()
self.GridListbox.AppendItem(monsterYangandExp)
self.childrenTextLine.append(monsterYangandExp)

monsterDefencesText = ui.TextLine()
monsterDefencesText.SetParent(self.GridListbox)
monsterDefencesText.SetText("|Eemoji/e_wiki|e "+localeInfo.WIKI_STATICS_INFO_DEFENSES)
monsterDefencesText.SetPosition(5,3*(7*4),True)
monsterDefencesText.Show()
self.GridListbox.AppendItem(monsterDefencesText)
self.childrenTextLine.append(monsterDefencesText)

resists = {
nonplayer.MOB_RESIST_SWORD : localeInfo.TARGET_INFO_RESIST_SWORD,
nonplayer.MOB_RESIST_TWOHAND : localeInfo.TARGET_INFO_RESIST_TWOHAND,
nonplayer.MOB_RESIST_DAGGER : localeInfo.TARGET_INFO_RESIST_DAGGER,
nonplayer.MOB_RESIST_BELL : localeInfo.TARGET_INFO_RESIST_BELL,
nonplayer.MOB_RESIST_FAN : localeInfo.TARGET_INFO_RESIST_FAN,
nonplayer.MOB_RESIST_BOW : localeInfo.TARGET_INFO_RESIST_BOW,
# nonplayer.MOB_RESIST_FIRE : localeInfo.TARGET_INFO_RESIST_FIRE,
# nonplayer.MOB_RESIST_ELECT : localeInfo.TARGET_INFO_RESIST_ELECT,
nonplayer.MOB_RESIST_MAGIC : localeInfo.TARGET_INFO_RESIST_MAGIC,
# nonplayer.MOB_RESIST_WIND : localeInfo.TARGET_INFO_RESIST_WIND,
# nonplayer.MOB_RESIST_POISON : localeInfo.TARGET_INFO_RESIST_POISON,
}

c = 0
for resist, label in resists.items():
value = nonplayer.GetMonsterResist(self.itemVnum, resist)
item = ui.TextLine()
item.SetParent(self.GridListbox)
text = label % value
item.SetText("|Eemoji/e_wiki|e %s"%text)
resistStrings = []
item.SetPosition(5+8,3*(7*(5+c)),True)
item.Show()
self.GridListbox.AppendItem(item)
self.childrenTextLine.append(item)
c+=1

self.Show()
self.OnRender()

def OnMouseOverIn(self):
self.overLine = True

def OnMouseOverOut(self):
self.overLine = False

def OnRender(self):
if not self.IsShow():
return

(pgx,pgy) = self.listbox.GetGlobalPosition()
(ggx,ggy) = self.GridListbox.GetGlobalPosition()
for j in xrange(len(self.childrenTextLine)):
item = self.childrenTextLine[j]
(igx,igy) = item.GetGlobalPosition()
if igy < pgy:
item.Hide()
elif igy < ggy:
item.Hide()
elif igy > (ggy+self.GridListbox.GetHeight()-10):
item.Hide()
elif igy > (pgy+self.listbox.GetHeight()-15):
item.Hide()
else:
item.Show()

for j in xrange(len(self.childrenImages)):
item = self.childrenImages[j]
(igx,igy) = item.GetGlobalPosition()
item.SetRenderingRect(0,0,0,0)
if igy < pgy:
item.SetRenderingRect(0,calculateRect(item.GetHeight()-abs(igy-pgy),item.GetHeight()),0,0)
elif igy+item.GetHeight() > (pgy+self.listbox.GetHeight()-15):
calculate = (pgy+self.listbox.GetHeight()-15) - (igy+item.GetHeight())
if calculate == 0:
return
item.SetRenderingRect(0.0,0.0,0.0,calculateRect(item.GetHeight()-abs(calculate),item.GetHeight()))

def Destroy(self):
self.GridListbox.RemoveAllItems()
self.GridListbox=None
self.GridScrollbar=None
self.childrenTextLine = []
self.childrenImages = []
self.parent = 0
self.listbox = 0
self.itemVnum = 0
self.overLine =0
self.IsLoaded =0
self.isType=0
del self

class ListBoxItemSpecial(ui.ExpandedImageBox):
def __del__(self):
ui.ExpandedImageBox.__del__(self)
def __init__(self, index, parent, listbox, itemVnum, mobVnum, type):
ui.ExpandedImageBox.__init__(self)
self.childrenTextLine = []
self.childrenNumberline = []
self.childrenItems = []
self.childrenImages = []
self.parent = parent
self.listbox = listbox
self.listIndex = index
self.itemVnum = itemVnum
self.mobVnum = mobVnum
self.isType = type

self.overLine =False
self.IsLoaded = False
self.SetParent(listbox)
self.LoadImage(IMG_DIR+"slot/slot.tga")
self.SetPosition(0,len(self.listbox.GetItems())*(89+5), True)

self.grid = Grid(width = 12, height = 50)


self.GridListbox = None
self.GridScrollbar= None
self.itemName= None
self.origin= None
self.bossVnum= None
self.itemIcon= None

self.childrenImages.append(self)

def ClearData(self):
if self.IsLoaded == True:
self.IsLoaded=False
self.childrenTextLine = []
self.childrenNumberline = []
self.childrenItems = []

self.childrenImages = []
self.childrenImages.append(self)

self.grid.reset()

self.GridListbox.RemoveAllItems()
self.GridListbox = None
self.GridScrollbar= None
self.itemName= None
self.origin= None
self.bossVnum= None
self.itemIcon= None

if self.isType != 0:
renderTarget.SetVisibility(20+self.listIndex, False)
renderTarget.ResetModel(20+self.listIndex)
self.renterTarget=None

def LoadItemInfos(self):
if self.IsLoaded == False:
self.IsLoaded=True

self.GridListbox = ListBoxGrid(self.listbox, self)
self.GridListbox.SetParent(self)
self.GridListbox.SetPosition(52,25)
self.GridListbox.SetSize(541, 65)
self.GridListbox.Show()

name = "-"
if self.isType == 0:
item.SelectItem(self.itemVnum)
name = nonplayer.GetMonsterName(self.mobVnum)
else:
name = nonplayer.GetMonsterName(self.itemVnum)

self.itemName = ui.TextLine()
self.itemName.SetParent(self)
if self.isType == 0:
self.itemName.SetText(localeInfo.WIKI_CONTENT_INFO%item.GetItemName())
else:
self.itemName.SetText(localeInfo.WIKI_DROPLIST_INFO%name)
self.itemName.SetPosition(180,5)
self.itemName.Show()
self.childrenTextLine.append(self.itemName)

self.origin = ui.TextLine()
self.origin.SetParent(self)
self.origin.SetText(localeInfo.WIKI_ORIGIN)
self.origin.SetPosition(480,5)
self.origin.Show()
self.childrenTextLine.append(self.origin)

self.bossVnum = ui.TextLine()
self.bossVnum.SetParent(self)
if self.isType == 0:
self.bossVnum.SetText(name)
self.bossVnum.SetPosition(465,45)
else:
self.bossVnum.SetPosition(495,45)
self.bossVnum.SetText("-")

self.bossVnum.Show()
self.childrenTextLine.append(self.bossVnum)

if self.isType == 0:
self.itemIcon = ui.ExpandedImageBox()
self.itemIcon.SetParent(self)
if item.GetIconImageFileName().find("gr2") == -1:
self.itemIcon.LoadImage(item.GetIconImageFileName())
else:
self.itemIcon.LoadImage("icon/item/27995.tga")
self.itemIcon.SetPosition(10,25)
self.itemIcon.SAFE_SetStringEvent("MOUSE_OVER_IN", self.OverInItem,self.itemVnum)
self.itemIcon.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.OverOutItem)
self.itemIcon.Show()
self.childrenImages.append(self.itemIcon)
else:

self.renterTarget = ui.RenderTarget()
self.renterTarget.SetParent(self)
self.renterTarget.SetPosition(1,1)
self.renterTarget.SetSize(47,87)
self.renterTarget.SetRenderTarget(20+self.listIndex)
self.renterTarget.Show()
self.renterTarget.SetOnMouseLeftButtonUpEvent(ui.__mem_func__(self.OnClickItem))

renderTarget.SelectModel(20+self.listIndex, self.itemVnum)
renderTarget.SetVisibility(20+self.listIndex, True)

whileSize = 0
if self.isType == 0:
whileSize = wiki.GetSpecialInfoSize(self.itemVnum)
else:
whileSize = wiki.GetMobInfoSize(self.itemVnum)

if whileSize == 0:
self.GridListbox.Hide()

for j in xrange(whileSize):
vnum, count = 0,0
if self.isType == 0:
(vnum,count) = wiki.GetSpecialInfoData(self.itemVnum,j)
else:
(vnum,count) = wiki.GetMobInfoData(self.itemVnum,j)

if vnum == 0:
continue

item.SelectItem(vnum)

(width,height) = item.GetItemSize()
pos = self.grid.find_blank(width, height)
self.grid.put(pos,width,height)
(x,y) = calculatePos(pos,12)


item_new = ui.ExpandedImageBox()
item_new.SetParent(self.GridListbox)
if item.GetIconImageFileName().find("gr2") == -1:
item_new.LoadImage(item.GetIconImageFileName())
else:
item_new.LoadImage("icon/item/27995.tga")
item_new.SAFE_SetStringEvent("MOUSE_OVER_IN", self.OverInItem,vnum)
item_new.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.OverOutItem)
item_new.SetPosition(x,y,True)
item_new.Show()

if count>1:
itemNumberline = ui.NumberLine()
itemNumberline.SetParent(self.GridListbox)
itemNumberline.SetNumber(str(count))
itemNumberline.SetPosition(x+15,y+item_new.GetHeight()-10,True)
itemNumberline.Show()
self.GridListbox.AppendItem(itemNumberline)
self.childrenNumberline.append(itemNumberline)

self.GridListbox.AppendItem(item_new)
self.childrenItems.append(item_new)

# Scrollbar
if self.GridScrollbar ==None:
(gx,gy)=item_new.GetGlobalPosition()
(sx,sy)=self.GridListbox.GetGlobalPosition()
if gy+item_new.GetHeight() > sy+self.GridListbox.GetHeight():
self.GridScrollbar= ScrollBarNew()
self.GridScrollbar.SetParent(self)
self.GridScrollbar.SetPosition(435,23)
self.GridScrollbar.SetScrollBarSize(65)
self.GridListbox.SetScrollBar(self.GridScrollbar)
self.GridScrollbar.Show()

self.childrenImages.append(self.GridScrollbar.topImage)
self.childrenImages.append(self.GridScrollbar.bottomImage)
self.childrenImages.append(self.GridScrollbar.middleBar.top)
self.childrenImages.append(self.GridScrollbar.middleBar.topScale)
self.childrenImages.append(self.GridScrollbar.middleBar.bottom)
self.childrenImages.append(self.GridScrollbar.middleBar.bottomScale)
self.childrenImages.append(self.GridScrollbar.middleBar.middle)

self.Show()
self.OnRender()

def OnClickItem(self):
self.parent.ShowItemInfo(self.itemVnum,1)

def OverOutItem(self):
try:
self.parent.tooltipItem.HideToolTip()
except:
pass

def OverInItem(self, index):
try:
self.parent.tooltipItem.SetItemToolTip(index)
self.parent.tooltipItem.ShowToolTip()
except:
pass

def OnMouseOverIn(self):
self.overLine = True

def OnMouseOverOut(self):
self.overLine = False

def OnRender(self):
if not self.IsShow():
return
(pgx,pgy) = self.listbox.GetGlobalPosition()
(sgx,sgy) = self.GetGlobalPosition()
(lgx,lgy) = self.GridListbox.GetGlobalPosition()

for j in xrange(len(self.childrenImages)):
item = self.childrenImages[j]
(igx,igy) = item.GetGlobalPosition()
item.SetRenderingRect(0,0,0,0)
if igy < pgy:
item.SetRenderingRect(0,calculateRect(item.GetHeight()-abs(igy-pgy),item.GetHeight()),0,0)
elif igy+item.GetHeight() > (pgy+self.listbox.GetHeight()-15):
calculate = (pgy+self.listbox.GetHeight()-15) - (igy+item.GetHeight())
if calculate == 0:
return
item.SetRenderingRect(0.0,0.0,0.0,calculateRect(item.GetHeight()-abs(calculate),item.GetHeight()))

if self.GridListbox != None:

for j in xrange(len(self.childrenItems)):
item = self.childrenItems[j]
(igx,igy) = item.GetGlobalPosition()
item.SetRenderingRect(0,0,0,0)
calculate = 0
calculatefirst = 0
if igy < lgy:
calculatefirst +=abs(igy-lgy)
if igy < pgy:
calculatefirst += abs(igy-pgy)
if igy+item.GetHeight() > (pgy+self.listbox.GetHeight()-15):
calculate = (pgy+self.listbox.GetHeight()-15) - (igy+item.GetHeight())
if igy+item.GetHeight() > (lgy+self.GridListbox.GetHeight()+100):
calculate += (lgy+self.GridListbox.GetHeight()) - (igy+item.GetHeight())
elif igy+item.GetHeight() > (lgy+self.GridListbox.GetHeight()):
calculate += (lgy+self.GridListbox.GetHeight()) - (igy+item.GetHeight())
item.SetRenderingRect(0,calculateRect(item.GetHeight()-calculatefirst,item.GetHeight()),0,calculateRect(item.GetHeight()-abs(calculate),item.GetHeight()))

if self.GridScrollbar !=None:
scroll = self.GridScrollbar.middleImage
(igx,igy) = scroll.GetGlobalPosition()
if igy < pgy:
scroll.Hide()
elif igy > (pgy+self.listbox.GetHeight()-60):
scroll.Hide()
else:
scroll.Show()

for j in xrange(len(self.childrenTextLine)):
item = self.childrenTextLine[j]
(igx,igy) = item.GetGlobalPosition()
if igy < pgy:
item.Hide()
elif igy > (pgy+self.listbox.GetHeight()-15):
item.Hide()
else:
item.Show()

for j in xrange(len(self.childrenNumberline)):
item = self.childrenNumberline[j]
(igx,igy) = item.GetGlobalPosition()
if igy < pgy:
item.Hide()
elif igy < lgy:
item.Hide()
elif igy > (pgy+self.listbox.GetHeight()-15):
item.Hide()
elif igy > (lgy+self.GridListbox.GetHeight()-10):
item.Hide()
else:
item.Show()

if self.isType != 0:
(rgx,rgy) = self.renterTarget.GetGlobalPosition()
self.renterTarget.SetRenderingRect(0.0,0.0,0.0,0.0)
if rgy < pgy:
self.renterTarget.SetRenderingRect(0,calculateRect(self.renterTarget.GetHeight()-abs(rgy-pgy),self.renterTarget.GetHeight()),0,0)
elif rgy+self.renterTarget.GetHeight() > (pgy+self.listbox.GetHeight()-15):
calculate = (pgy+self.listbox.GetHeight()-15) - (rgy+self.renterTarget.GetHeight())
if calculate == 0:
return
self.renterTarget.SetRenderingRect(0.0,0.0,0.0,calculateRect(self.renterTarget.GetHeight()-abs(calculate),self.renterTarget.GetHeight()))

def Destroy(self):
self.GridScrollbar=None
if self.GridListbox:
self.GridListbox.RemoveAllItems()
self.GridListbox=None
self.childrenNumberline = []
self.childrenTextLine = []
self.childrenItems = []
self.childrenImages = []
self.renterTarget=0
self.parent = 0
self.listbox = 0
self.listIndex = 0
self.itemVnum = 0
self.isType = 0
self.overLine =0
self.IsLoaded = 0
self.grid.reset()
self.grid=None
del self

class Grid: # from KeN
def __init__(self, width, height):
self.width = width
self.height = height
self.reset()

def find_blank(self, width, height):
if width > self.width or height > self.height:
return -1

for row in range(self.height):
for col in range(self.width):
index = row * self.width + col
if self.is_empty(index, width, height):
return index
return -1

def put(self, pos, width, height):
if not self.is_empty(pos, width, height):
return False
for row in range(height):
start = pos + (row * self.width)
self.grid[start] = True
col = 1
while col < width:
self.grid[start + col] = True
col += 1
return True

def clear(self, pos, width, height):
if pos < 0 or pos >= (self.width * self.height):
return
for row in range(height):
start = pos + (row * self.width)
self.grid[start] = True
col = 1
while col < width:
self.grid[start + col] = False
col += 1

def is_empty(self, pos, width, height):
if pos < 0:
return False
row = pos // self.width
if (row + height) > self.height:
return False
if (pos + width) > ((row * self.width) + self.width):
return False
for row in range(height):
start = pos + (row * self.width)
if self.grid[start]:
return False
col = 1
while col < width:
if self.grid[start + col]:
return False
col += 1
return True

def get_size(self):
return self.width * self.height

def reset(self):
self.grid = [False] * (self.width * self.height)
self.put(self.width,1,1)

class ListBoxGrid(ui.Window):
def __init__(self, listbox,mainParent):
ui.Window.__init__(self)
self.basePos=0
self.listbox=listbox
self.mainParent=mainParent
self.itemList=[]
self.scrollBar=None

def __del__(self):
ui.Window.__del__(self)

def IsEmpty(self):
if self.__GetItemCount()==0:
return 1
return 0

def __GetItemCount(self):
return len(self.itemList)

def RemoveAllItems(self):
for j in xrange(len(self.itemList)):
self.itemList[j].Destroy()
self.itemList=[]
if self.scrollBar:
self.scrollBar.SetPos(0)

def GetItems(self):
return self.itemList

def RemoveItem(self, delItem):
self.itemList.remove(delItem)

def AppendItem(self, newItem):
self.itemList.append(newItem)

def OnMouseWheel(self, nLen):
if self.scrollBar:
self.scrollBar.OnMouseWheel(nLen)

def SetScrollBar(self, scrollBar):
scrollBar.SetScrollEvent(ui.__mem_func__(self.__OnScroll))
self.scrollBar=scrollBar

def __OnScroll(self):
self.SetBasePos(int(self.scrollBar.GetPos()*self.__GetScrollLen()))

def __GetScrollLen(self):
if self.__GetItemCount() == 0:
return 0
(lx,ly) = self.itemList[len(self.itemList)-1].exPos
return ly

def SetBasePos(self, basePos):
if self.basePos == basePos:
return
for j in xrange(len(self.itemList)):
(ex,ey) = self.itemList[j].exPos
self.itemList[j].SetPosition(ex,ey-(basePos))
self.mainParent.OnRender()
self.basePos=basePos


Hello dear user,

Your post will be under surveillance by bots for the next few hours.

Forum description : Metin2 private server, Metin2 download, Metin2 support, Metin2 Forum, Metin2 Pvp Servers, Errors, Bugs, Requests, Metin2 Pvp Forum, Everything About Metin2.
 
AdBlock Detected

We get it, advertisements are annoying!

Sure, ad-blocking software does a great job at blocking ads, but it also blocks useful features of our website. For the best site experience please disable your AdBlocker.

I've Disabled AdBlock