Çözüldü Ölünce Mob Target Çalışmıyor YARDIM!!!

  • Konuyu açan Konuyu açan ilanamso45
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 6
  • Gösterim Gösterim 2K
Bu konu çözüme ulaştırılmıştır. Çözüm için konuya yazılan tüm yorumları okumayı unutmayın. Eğer konudaki yorumlar sorununuzu çözmediyse yeni bir konu açabilirsiniz.
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.

ilanamso45

Üye
Üye
Mesaj
12
Beğeni
1
Puan
405
Ticaret Puanı
0
Merhabalar, Ölmeden önce ? iconuna tıklayınca çalışıyor fakat öldükten sonra basınca ? bassan bile açılmıyor.
Resim :
Linkleri görebilmek için giriş yap veya kayıt ol.

Syserr :
Kod:
Genişlet Daralt Kopyala
0606 22:14:26080 :: Traceback (most recent call last):

0606 22:14:26080 :: File "interfaceModule.py", line 2125, in RecvQuest

0606 22:14:26080 :: File "interfaceModule.py", line 2130, in BINARY_RecvQuest

0606 22:14:26081 :: File "interfaceModule.py", line 2227, in __FindQuestButton

0606 22:14:26081 :: AttributeError
0606 22:14:26081 :: :
0606 22:14:26081 :: 'Interface' object has no attribute 'questButtonList'
0606 22:14:26081 ::

0606 22:14:26095 :: Traceback (most recent call last):

0606 22:14:26095 :: File "interfaceModule.py", line 2130, in BINARY_RecvQuest

0606 22:14:26096 :: File "interfaceModule.py", line 2227, in __FindQuestButton

0606 22:14:26096 :: AttributeError
0606 22:14:26096 :: :
0606 22:14:26096 :: 'Interface' object has no attribute 'questButtonList'
0606 22:14:26096 ::

0606 22:14:26096 :: Traceback (most recent call last):

0606 22:14:26096 :: File "interfaceModule.py", line 2125, in RecvQuest

0606 22:14:26096 :: File "interfaceModule.py", line 2130, in BINARY_RecvQuest

0606 22:14:26096 :: File "interfaceModule.py", line 2227, in __FindQuestButton

0606 22:14:26097 :: AttributeError
0606 22:14:26097 :: :
0606 22:14:26097 :: 'Interface' object has no attribute 'questButtonList'
0606 22:14:26097 ::

0606 22:14:26128 :: uiTaskBar:1047: RuntimeWarning: tp_compare didn't return -1 or -2 for exception

0606 22:14:26128 :: Traceback (most recent call last):

0606 22:14:26128 :: File "uiTaskBar.py", line 1047, in OnUpdate

0606 22:14:26128 :: TypeError
0606 22:14:26128 :: :
0606 22:14:26128 :: an integer is required
0606 22:14:26128 ::

0606 22:14:26210 :: Traceback (most recent call last):

0606 22:14:26210 :: File "game.py", line 1086, in BINARY_NEW_AddAffect

0606 22:14:26211 :: File "uiAffectShower.py", line 621, in BINARY_NEW_AddAffect

0606 22:14:26211 :: TypeError
0606 22:14:26211 :: :
0606 22:14:26211 :: 'str' object is not callable
0606 22:14:26211 ::

0606 22:14:26211 :: Traceback (most recent call last):

0606 22:14:26211 :: File "game.py", line 1086, in BINARY_NEW_AddAffect

0606 22:14:26212 :: File "uiAffectShower.py", line 621, in BINARY_NEW_AddAffect

0606 22:14:26212 :: TypeError
0606 22:14:26212 :: :
0606 22:14:26212 :: 'str' object is not callable
0606 22:14:26212 ::

0606 22:14:59783 :: Traceback (most recent call last):

0606 22:14:59783 :: File "game.py", line 1086, in BINARY_NEW_AddAffect

0606 22:14:59784 :: File "uiAffectShower.py", line 621, in BINARY_NEW_AddAffect

0606 22:14:59784 :: TypeError
0606 22:14:59784 :: :
0606 22:14:59784 :: 'str' object is not callable
0606 22:14:59784 ::

0606 22:14:59784 :: Traceback (most recent call last):

0606 22:14:59784 :: File "game.py", line 1086, in BINARY_NEW_AddAffect

0606 22:14:59784 :: File "uiAffectShower.py", line 621, in BINARY_NEW_AddAffect

0606 22:14:59785 :: TypeError
0606 22:14:59785 :: :
0606 22:14:59785 :: 'str' object is not callable
0606 22:14:59785 ::

0606 22:14:04575 :: Traceback (most recent call last):

0606 22:14:04575 :: File "ui.py", line 2006, in CallEvent

0606 22:14:04575 :: File "ui.py", line 90, in __call__

0606 22:14:04576 :: File "ui.py", line 72, in __call__

0606 22:14:04576 :: File "uiTarget.py", line 669, in OnPressedInfoButton

0606 22:14:04576 :: File "uiTarget.py", line 153, in Open

0606 22:14:04576 :: File "uiTarget.py", line 182, in __LoadInformation

0606 22:14:04577 :: File "uiTarget.py", line 304, in __LoadInformation_Drops

0606 22:14:04577 :: AttributeError
0606 22:14:04577 :: :
0606 22:14:04577 :: 'InfoBoard' object has no attribute 'slotSize'
0606 22:14:04577 ::

0606 22:14:04870 :: Traceback (most recent call last):

0606 22:14:04870 :: File "ui.py", line 2006, in CallEvent

0606 22:14:04870 :: File "ui.py", line 90, in __call__

0606 22:14:04871 :: File "ui.py", line 72, in __call__

0606 22:14:04871 :: File "uiTarget.py", line 669, in OnPressedInfoButton

0606 22:14:04871 :: File "uiTarget.py", line 153, in Open

0606 22:14:04872 :: File "uiTarget.py", line 182, in __LoadInformation

0606 22:14:04872 :: File "uiTarget.py", line 304, in __LoadInformation_Drops

0606 22:14:04872 :: AttributeError
0606 22:14:04872 :: :
0606 22:14:04872 :: 'InfoBoard' object has no attribute 'slotSize'
0606 22:14:04872 ::

0606 22:14:05085 :: Traceback (most recent call last):

0606 22:14:05085 :: File "ui.py", line 2006, in CallEvent

0606 22:14:05085 :: File "ui.py", line 90, in __call__

0606 22:14:05086 :: File "ui.py", line 72, in __call__

0606 22:14:05086 :: File "uiTarget.py", line 669, in OnPressedInfoButton

0606 22:14:05086 :: File "uiTarget.py", line 153, in Open

0606 22:14:05086 :: File "uiTarget.py", line 182, in __LoadInformation

0606 22:14:05087 :: File "uiTarget.py", line 304, in __LoadInformation_Drops

0606 22:14:05087 :: AttributeError
0606 22:14:05087 :: :
0606 22:14:05087 :: 'InfoBoard' object has no attribute 'slotSize'
0606 22:14:05087 ::

0606 22:14:05266 :: Traceback (most recent call last):

0606 22:14:05266 :: File "ui.py", line 2006, in CallEvent

0606 22:14:05266 :: File "ui.py", line 90, in __call__

0606 22:14:05266 :: File "ui.py", line 72, in __call__

0606 22:14:05267 :: File "uiTarget.py", line 669, in OnPressedInfoButton

0606 22:14:05267 :: File "uiTarget.py", line 153, in Open

0606 22:14:05267 :: File "uiTarget.py", line 182, in __LoadInformation

0606 22:14:05267 :: File "uiTarget.py", line 304, in __LoadInformation_Drops

0606 22:14:05268 :: AttributeError
0606 22:14:05268 :: :
0606 22:14:05268 :: 'InfoBoard' object has no attribute 'slotSize'
0606 22:14:05268 ::

0606 22:14:05448 :: Traceback (most recent call last):

0606 22:14:05448 :: File "ui.py", line 2006, in CallEvent

0606 22:14:05448 :: File "ui.py", line 90, in __call__

0606 22:14:05449 :: File "ui.py", line 72, in __call__

0606 22:14:05449 :: File "uiTarget.py", line 669, in OnPressedInfoButton

0606 22:14:05449 :: File "uiTarget.py", line 153, in Open

0606 22:14:05449 :: File "uiTarget.py", line 182, in __LoadInformation

0606 22:14:05450 :: File "uiTarget.py", line 304, in __LoadInformation_Drops

0606 22:14:05450 :: AttributeError
0606 22:14:05450 :: :
0606 22:14:05450 :: 'InfoBoard' object has no attribute 'slotSize'
0606 22:14:05450 ::

0606 22:14:05645 :: Traceback (most recent call last):

0606 22:14:05645 :: File "ui.py", line 2006, in CallEvent

0606 22:14:05646 :: File "ui.py", line 90, in __call__

0606 22:14:05646 :: File "ui.py", line 72, in __call__

0606 22:14:05646 :: File "uiTarget.py", line 669, in OnPressedInfoButton

0606 22:14:05646 :: File "uiTarget.py", line 153, in Open

0606 22:14:05647 :: File "uiTarget.py", line 182, in __LoadInformation

0606 22:14:05647 :: File "uiTarget.py", line 304, in __LoadInformation_Drops

0606 22:14:05647 :: AttributeError
0606 22:14:05647 :: :
0606 22:14:05647 :: 'InfoBoard' object has no attribute 'slotSize'
0606 22:14:05647 ::

0606 22:15:05844 :: Traceback (most recent call last):

0606 22:15:05844 :: File "ui.py", line 2006, in CallEvent

0606 22:15:05844 :: File "ui.py", line 90, in __call__

0606 22:15:05845 :: File "ui.py", line 72, in __call__

0606 22:15:05845 :: File "uiTarget.py", line 669, in OnPressedInfoButton

0606 22:15:05845 :: File "uiTarget.py", line 153, in Open

0606 22:15:05845 :: File "uiTarget.py", line 182, in __LoadInformation

0606 22:15:05846 :: File "uiTarget.py", line 304, in __LoadInformation_Drops

0606 22:15:05846 :: AttributeError
0606 22:15:05846 :: :
0606 22:15:05846 :: 'InfoBoard' object has no attribute 'slotSize'
0606 22:15:05846 ::

0606 22:15:06009 :: Traceback (most recent call last):

0606 22:15:06009 :: File "ui.py", line 2006, in CallEvent

0606 22:15:06009 :: File "ui.py", line 90, in __call__

0606 22:15:06009 :: File "ui.py", line 72, in __call__

0606 22:15:06010 :: File "uiTarget.py", line 669, in OnPressedInfoButton

0606 22:15:06010 :: File "uiTarget.py", line 153, in Open

0606 22:15:06010 :: File "uiTarget.py", line 182, in __LoadInformation

0606 22:15:06010 :: File "uiTarget.py", line 304, in __LoadInformation_Drops

0606 22:15:06011 :: AttributeError
0606 22:15:06011 :: :
0606 22:15:06011 :: 'InfoBoard' object has no attribute 'slotSize'
0606 22:15:06011 ::
uitarget.py :
Python:
Genişlet Daralt Kopyala
import app
import ui
import player
import net
import wndMgr
import messenger
import guild
import chr
import nonplayer
import localeInfo
import constInfo
import uiToolTip
import snd
import chrmgr
if app.ENABLE_TARGET_INFORMATION_SYSTEM:
    import item
    import uiToolTip
    def HAS_FLAG(value, flag):
        return (value & flag) == flag

if app.ENABLE_PENDANT_SYSTEM:
    ELEMENT_IMAGE_DIC = {1: "elect", 2: "fire", 3: "ice", 4: "wind", 5: "earth", 6 : "dark"}

class TargetBoard(ui.ThinBoard):
    if app.ENABLE_TARGET_INFORMATION_SYSTEM:
        class InfoBoard(ui.ThinBoard):
            class ItemListBoxItem(ui.ListBoxExNew.Item):
                def __init__(self, width):
                    ui.ListBoxExNew.Item.__init__(self)

                    image = ui.ExpandedImageBox()
                    image.SetParent(self)
                    image.Show()
                    self.image = image

                    nameLine = ui.TextLine()
                    nameLine.SetParent(self)
                    nameLine.SetPosition(32 + 5, 0)
                    nameLine.Show()
                    self.nameLine = nameLine

                    self.SetSize(width, 32 + 5)

                def LoadImage(self, image, name = None):
                    self.image.LoadImage(image)
                    self.SetSize(self.GetWidth(), self.image.GetHeight() + 5 * (self.image.GetHeight() / 32))
                    if name != None:
                        self.SetText(name)

                def SetText(self, text):
                    self.nameLine.SetText(text)

                def RefreshHeight(self):
                    ui.ListBoxExNew.Item.RefreshHeight(self)
                    self.image.SetRenderingRect(0.0, 0.0 - float(self.removeTop) / float(self.GetHeight()), 0.0, 0.0 - float(self.removeBottom) / float(self.GetHeight()))
                    self.image.SetPosition(0, - self.removeTop)

            EXP_BASE_LVDELTA = [
                1,  #  -15 0
                5,  #  -14 1
                10, #  -13 2
                20, #  -12 3
                30, #  -11 4
                50, #  -10 5
                70, #  -9  6
                80, #  -8  7
                85, #  -7  8
                90, #  -6  9
                92, #  -5  10
                94, #  -4  11
                96, #  -3  12
                98, #  -2  13
                100,    #  -1  14
                100,    #  0   15
                105,    #  1   16
                110,    #  2   17
                115,    #  3   18
                120,    #  4   19
                125,    #  5   20
                130,    #  6   21
                135,    #  7   22
                140,    #  8   23
                145,    #  9   24
                150,    #  10  25
                155,    #  11  26
                160,    #  12  27
                165,    #  13  28
                170,    #  14  29
                180,    #  15  30
            ]

            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,
            }

            STONE_START_VNUM = 28030
            STONE_LAST_VNUM = 28042

            BOARD_WIDTH = 250

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

                self.HideCorners(self.LT)
                self.HideCorners(self.RT)
                self.HideLine(self.T)

                self.race = 0
                self.hasItems = False

                self.itemTooltip = uiToolTip.ItemToolTip()
                self.itemTooltip.HideToolTip()

                self.stoneImg = None
                self.stoneVnum = None
                self.lastStoneVnum = 0
                self.nextStoneIconChange = 0
                wndItem = ui.GridSlotWindow()
                wndItem.SetParent(self)
                wndItem.ArrangeSlot(0, 7, 5, 32, 32, 0, 0)
                wndItem.RefreshSlot()
                wndItem.SetSlotBaseImage("d:/ymir work/ui/public/Slot_Base.sub", 1.0, 1.0, 1.0, 1.0)
                wndItem.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
                wndItem.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
                wndItem.Hide()
                self.wndItem = wndItem
                self.itemArray = [0 for i in xrange(35)]
                self.itemVnums = [0 for i in xrange(35)]

                self.SetSize(self.BOARD_WIDTH, 0)

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

            def __UpdatePosition(self, targetBoard):
                self.SetPosition(targetBoard.GetLeft() + (targetBoard.GetWidth() - self.GetWidth()) / 2, targetBoard.GetBottom() - 17)

            def Open(self, targetBoard, race):
                self.__LoadInformation(race)

                self.SetSize(self.BOARD_WIDTH, self.yPos + 10)
                self.__UpdatePosition(targetBoard)

                self.Show()

            def Refresh(self):
                self.__LoadInformation(self.race)
                self.SetSize(self.BOARD_WIDTH, self.yPos + 10)

            def Close(self):
                self.itemTooltip.HideToolTip()
                self.Hide()

            def __LoadInformation(self, race):
                self.yPos = 7
                self.children = []
                self.race = race
                self.stoneImg = None
                self.stoneVnum = None
                self.nextStoneIconChange = 0

                for i in xrange(35):
                    self.wndItem.ClearSlot(i)
                self.itemArray = [0 for i in xrange(35)]
                self.itemVnums = [0 for i in xrange(35)]
                self.__LoadInformation_Default(race)
                self.__LoadInformation_Resists(race)
                self.__LoadInformation_Drops(race)

            def __LoadInformation_Default_GetHitRate(self, race):
                attacker_dx = nonplayer.GetMonsterDX(race)
                attacker_level = nonplayer.GetMonsterLevel(race)

                self_dx = player.GetStatus(player.DX)
                self_level = player.GetStatus(player.LEVEL)

                iARSrc = min(90, (attacker_dx * 4 + attacker_level * 2) / 6)
                iERSrc = min(90, (self_dx * 4 + self_level * 2) / 6)

                fAR = (float(iARSrc) + 210.0) / 300.0
                fER = (float(iERSrc) * 2 + 5) / (float(iERSrc) + 95) * 3.0 / 10.0

                return fAR - fER

            def __LoadInformation_Default(self, race):
                self.AppendSeperator()
                self.AppendTextLine(localeInfo.TARGET_INFO_MAX_HP % localeInfo.NumberToString(nonplayer.GetMonsterMaxHP(race)))

                # calc att damage
                monsterLevel = nonplayer.GetMonsterLevel(race)
                fHitRate = self.__LoadInformation_Default_GetHitRate(race)
                iDamMin, iDamMax = nonplayer.GetMonsterDamage(race)
                iDamMin = int((iDamMin + nonplayer.GetMonsterST(race)) * 2 * fHitRate) + monsterLevel * 2
                iDamMax = int((iDamMax + nonplayer.GetMonsterST(race)) * 2 * fHitRate) + monsterLevel * 2
                iDef = player.GetStatus(player.DEF_GRADE) * (100 + player.GetStatus(player.DEF_BONUS)) / 100
                fDamMulti = nonplayer.GetMonsterDamageMultiply(race)
                iDamMin = int(max(0, iDamMin - iDef) * fDamMulti)
                iDamMax = int(max(0, iDamMax - iDef) * fDamMulti)
                if iDamMax != 0:
                    self.AppendTextLine(localeInfo.TARGET_INFO_DAMAGE % (str(iDamMin), str(iDamMax)))
                idx = min(len(self.EXP_BASE_LVDELTA) - 1, max(0, (monsterLevel + 15) - player.GetStatus(player.LEVEL)))
                iExp = nonplayer.GetMonsterExp(race) * self.EXP_BASE_LVDELTA[idx] / 100
                self.AppendTextLine(localeInfo.TARGET_INFO_EXP % localeInfo.NumberToString(iExp))

                self.AppendTextLine(localeInfo.TARGET_INFO_REGEN_INFO % (nonplayer.GetMobRegenPercent(race), nonplayer.GetMobRegenCycle(race)))

            def __LoadInformation_Resists(self, race):
                self.AppendSeperator()
                self.AppendTextLine(localeInfo.TARGET_INFO_RESISTS)
                self.AppendTextLine(localeInfo.TARGET_INFO_RESISTS_LINE0 % (nonplayer.GetResist(race, nonplayer.MOB_RESIST_SWORD), nonplayer.GetResist(race, nonplayer.MOB_RESIST_TWOHAND), nonplayer.GetResist(race, nonplayer.MOB_RESIST_BELL)))
                self.AppendTextLine(localeInfo.TARGET_INFO_RESISTS_LINE1 % (nonplayer.GetResist(race, nonplayer.MOB_RESIST_DAGGER), nonplayer.GetResist(race, nonplayer.MOB_RESIST_FAN), nonplayer.GetResist(race, nonplayer.MOB_RESIST_BOW)))

            def SerachEmptySlot(self, size):

                for value in xrange(35):

                    if 0 == self.itemArray[value]:    # ?????

                        if 1 == size:
                            return value

                        emptySlotIndex    = value
                        searchSucceed    = True

                        for i in range(size - 1):
                            emptySlotIndex = emptySlotIndex + 7

                            if emptySlotIndex >= 35:
                                searchSucceed = False
                                continue

                            if 1 == self.itemArray[emptySlotIndex]:
                                searchSucceed = False

                        if True == searchSucceed:
                            return value

                return -1

            def __LoadInformation_Drops(self, race):
                self.AppendSeperator()

                if race in constInfo.MONSTER_INFO_DATA:
                    if len(constInfo.MONSTER_INFO_DATA[race]["items"]) == 0:
                        self.wndItem.Hide()
                    else:
                        self.wndItem.SetPosition(10, self.yPos - 7)
                        self.yPos += 32*5
                        self.SetSize(self.BOARD_WIDTH, self.yPos + 5)
                        self.UpdateRect()
                        self.wndItem.Show()

                        for curItem in constInfo.MONSTER_INFO_DATA[race]["items"]:
                            getItemID = 0
                            if curItem.has_key("vnum_list"):
                                getItemID = curItem["vnum_list"][0]
                                vnum = curItem["vnum_list"][0]
                            else:
                                getItemID = curItem["vnum"]
                                vnum=curItem["vnum"]
                          
                            getItemCount=curItem["count"]
                          
                            item.SelectItem(getItemID)
                            itemSize = item.GetItemSize()
                            if item.GetItemType() == item.ITEM_TYPE_METIN:
                                self.stoneVnum = getItemID
                                self.lastStoneVnum = 28430

                            #self.wndItem.SAFE_SetOverInEvent(self.OnShowItemTooltip, vnum)
                            #self.wndItem.SAFE_SetOverOutEvent(self.OnHideItemTooltip)

                            emptySlotPos = self.SerachEmptySlot(itemSize[1])

                            if -1 != emptySlotPos:
                                self.itemArray[emptySlotPos] = 1

                                if itemSize[1] == 2:
                                    self.itemArray[emptySlotPos + 7] = 1
                                elif itemSize[1] == 3:
                                    self.itemArray[emptySlotPos + 7] = 1
                                    self.itemArray[emptySlotPos + 14] = 1

                                if item.GetItemType() == item.ITEM_TYPE_METIN:
                                    self.stoneImg = emptySlotPos

                                self.wndItem.SetItemSlot(emptySlotPos, getItemID, getItemCount)
                                self.itemVnums[emptySlotPos] = getItemID
                            else:
                                if self.slotSize > 70:
                                    return
                                self.slotSize += 7
                                self.Refresh()
                                return

                        self.wndItem.RefreshSlot()
                else:
                    self.wndItem.Hide()
            def OverInItem(self, slotIndex):
                vnum = self.itemVnums[slotIndex]
                if vnum == 0 or vnum == 50300 or vnum == 70037:
                    self.itemTooltip.HideToolTip()
                elif vnum > 27999 and vnum < 28960:
                    self.itemTooltip.HideToolTip()
                else:
                    self.OnShowItemTooltip(vnum)

            def OverOutItem(self):
                self.OnHideItemTooltip()
            def AppendTextLine(self, text):
                textLine = ui.TextLine()
                textLine.SetParent(self)
                textLine.SetWindowHorizontalAlignCenter()
                textLine.SetHorizontalAlignCenter()
                textLine.SetText(text)
                textLine.SetPosition(0, self.yPos)
                textLine.Show()

                self.children.append(textLine)
                self.yPos += 17

            def AppendSeperator(self):
                img = ui.ImageBox()
                img.LoadImage("d:/ymir work/ui/seperator.tga")
                self.AppendWindow(img)
                img.SetPosition(img.GetLeft(), img.GetTop() - 15)
                self.yPos -= 15

            def AppendItem(self, listBox, vnums, count):
                if type(vnums) == int:
                    vnum = vnums
                else:
                    vnum = vnums[0]

                item.SelectItem(vnum)
                itemName = item.GetItemName()
                if type(vnums) != int and len(vnums) > 1:
                    vnums = sorted(vnums)
                    realName = itemName[:itemName.find("+")]
                    if item.GetItemType() == item.ITEM_TYPE_METIN:
                        realName = localeInfo.TARGET_INFO_STONE_NAME
                        itemName = realName + "+0 - +4"
                    else:
                        itemName = realName + "+" + str(vnums[0] % 10) + " - +" + str(vnums[len(vnums) - 1] % 10)
                    vnum = vnums[len(vnums) - 1]

                myItem = self.ItemListBoxItem(listBox.GetWidth())
                myItem.LoadImage(item.GetIconImageFileName())
                if count <= 1:
                    myItem.SetText(itemName)
                else:
                    myItem.SetText("%dx %s" % (count, itemName))
                myItem.SAFE_SetOverInEvent(self.OnShowItemTooltip, vnum)
                myItem.SAFE_SetOverOutEvent(self.OnHideItemTooltip)
                listBox.AppendItem(myItem)

                if item.GetItemType() == item.ITEM_TYPE_METIN:
                    self.stoneImg = myItem
                    self.stoneVnum = vnums
                    self.lastStoneVnum = self.STONE_LAST_VNUM + vnums[len(vnums) - 1] % 1000 / 100 * 100

                return myItem.GetHeight()

            def OnShowItemTooltip(self, vnum):
                item.SelectItem(vnum)
                if item.GetItemType() == item.ITEM_TYPE_METIN:
                    self.itemTooltip.isStone = True
                    self.itemTooltip.isBook = False
                    self.itemTooltip.isBook2 = False
                    self.itemTooltip.SetItemToolTip(self.lastStoneVnum)
                else:
                    self.itemTooltip.isStone = False
                    self.itemTooltip.isBook = True
                    self.itemTooltip.isBook2 = True
                    self.itemTooltip.SetItemToolTip(vnum)

            def OnHideItemTooltip(self):
                self.itemTooltip.HideToolTip()

            def AppendWindow(self, wnd, x = 0, width = 0, height = 0):
                if width == 0:
                    width = wnd.GetWidth()
                if height == 0:
                    height = wnd.GetHeight()

                wnd.SetParent(self)
                if x == 0:
                    wnd.SetPosition((self.GetWidth() - width) / 2, self.yPos)
                else:
                    wnd.SetPosition(x, self.yPos)
                wnd.Show()

                self.children.append(wnd)
                self.yPos += height + 5

            def OnUpdate(self):
                if self.stoneImg != None and self.stoneVnum != None and app.GetTime() >= self.nextStoneIconChange:
                    nextImg = self.lastStoneVnum + 1
                    if nextImg % 100 > self.STONE_LAST_VNUM % 100:
                        nextImg -= (self.STONE_LAST_VNUM - self.STONE_START_VNUM) + 1
                    self.lastStoneVnum = nextImg
                    self.nextStoneIconChange = app.GetTime() + 2.5

                    item.SelectItem(nextImg)
                    itemName = item.GetItemName()
                    realName = itemName[:itemName.find("+")]
                    realName = realName + "+0 - +4"
                    self.wndItem.SetItemSlot(self.stoneImg, nextImg, 1)

                    if self.itemTooltip.IsShow() and self.itemTooltip.isStone:
                        self.itemTooltip.SetItemToolTip(nextImg)

    BUTTON_NAME_LIST = (
        localeInfo.TARGET_BUTTON_WHISPER,
        localeInfo.TARGET_BUTTON_EXCHANGE,
        localeInfo.TARGET_BUTTON_FIGHT,
        localeInfo.TARGET_BUTTON_ACCEPT_FIGHT,
        localeInfo.TARGET_BUTTON_AVENGE,
        localeInfo.TARGET_BUTTON_FRIEND,
        localeInfo.TARGET_BUTTON_INVITE_PARTY,
        localeInfo.TARGET_BUTTON_LEAVE_PARTY,
        localeInfo.TARGET_BUTTON_EXCLUDE,
        localeInfo.TARGET_BUTTON_INVITE_GUILD,
        localeInfo.TARGET_BUTTON_DISMOUNT,
        localeInfo.TARGET_BUTTON_EXIT_OBSERVER,
        localeInfo.TARGET_BUTTON_VIEW_EQUIPMENT,
        localeInfo.TARGET_BUTTON_REQUEST_ENTER_PARTY,
        localeInfo.TARGET_BUTTON_BUILDING_DESTROY,
        localeInfo.TARGET_BUTTON_EMOTION_ALLOW,
        localeInfo.TARGET_BUTTON_BLOCK,
        localeInfo.TARGET_BUTTON_BLOCK_REMOVE,
        "Ajan"  #ENABLE_GUILD_SPY_SYSTEM
    )

    GRADE_NAME =    {
                        nonplayer.PAWN : localeInfo.TARGET_LEVEL_PAWN,
                        nonplayer.S_PAWN : localeInfo.TARGET_LEVEL_S_PAWN,
                        nonplayer.KNIGHT : localeInfo.TARGET_LEVEL_KNIGHT,
                        nonplayer.S_KNIGHT : localeInfo.TARGET_LEVEL_S_KNIGHT,
                        nonplayer.BOSS : localeInfo.TARGET_LEVEL_BOSS,
                        nonplayer.KING : localeInfo.TARGET_LEVEL_KING,
                    }
    EXCHANGE_LIMIT_RANGE = 3000

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

        name = ui.TextLine()
        name.SetParent(self)
        name.SetDefaultFontName()
        name.SetOutline()
        name.Show()

        if app.ENABLE_DAMAGE_BAR:
            hpGaugeDMG = ui.Gauge()
            hpGaugeDMG.SetParent(self)
            hpGaugeDMG.MakeGauge(130, "yellow")
            hpGaugeDMG.Hide()
            hpGauge = ui.GaugeWithoutBorder()
        else:
            hpGauge = ui.Gauge()
        hpGauge.SetParent(self)
        hpGauge.MakeGauge(130, "red")
        hpGauge.Hide()
        if app.ENABLE_POISON_GAUGE_SYSTEM:
            hpGaugePoison = ui.GaugeWithoutBorder()
            hpGaugePoison.SetParent(self)
            hpGaugePoison.MakeGauge(130, "lime")
            hpGaugePoison.Hide()
        if app.ENABLE_VIEW_TARGET_MONSTER_HP:
            hpDecimal = ui.TextLine()
            hpDecimal.SetParent(hpGauge)
            hpDecimal.SetDefaultFontName()
            hpDecimal.SetPosition(5, 5)
            hpDecimal.SetOutline()
            hpDecimal.Hide()
            if app.ENABLE_POISON_GAUGE_SYSTEM:
                hpDecimalPoison = ui.TextLine()
                hpDecimalPoison.SetParent(hpGaugePoison)
                hpDecimalPoison.SetDefaultFontName()
                hpDecimalPoison.SetPosition(5, 5)
                hpDecimalPoison.SetOutline()
                hpDecimalPoison.Hide()

        if app.ENABLE_HEALTH_PERCENT_SYSTEM:
            hpPercenttxt = ui.TextLine()
            hpPercenttxt.SetParent(self)
            hpPercenttxt.SetPosition(160, 13)
            hpPercenttxt.SetText("")
            hpPercenttxt.Hide()
        if app.ENABLE_TARGET_INFORMATION_SYSTEM:
            infoButton = ui.Button()
            infoButton.SetParent(self)
            infoButton.SetUpVisual("d:/ymir work/ui/game/mark/question_mark_1.tga")
            infoButton.SetOverVisual("d:/ymir work/ui/game/mark/question_mark_2.tga")
            infoButton.SetDownVisual("d:/ymir work/ui/game/mark/question_mark_3.tga")
            infoButton.SetEvent(ui.__mem_func__(self.OnPressedInfoButton))
            infoButton.Hide()

            infoBoard = self.InfoBoard()
            infoBoard.Hide()
            infoButton.showWnd = infoBoard

        closeButton = ui.Button()
        closeButton.SetParent(self)
        closeButton.SetUpVisual("d:/ymir work/ui/public/close_button_01.sub")
        closeButton.SetOverVisual("d:/ymir work/ui/public/close_button_02.sub")
        closeButton.SetDownVisual("d:/ymir work/ui/public/close_button_03.sub")
        closeButton.SetPosition(30, 13)

        if localeInfo.IsARABIC():
            hpGauge.SetPosition(55, 17)
            hpGauge.SetWindowHorizontalAlignLeft()
            closeButton.SetWindowHorizontalAlignLeft()
        else:
            hpGauge.SetPosition(175, 17)
            hpGauge.SetWindowHorizontalAlignRight()
            closeButton.SetWindowHorizontalAlignRight()
        if app.ENABLE_DAMAGE_BAR:
            hpGaugeDMG.SetPosition(175, 17)
            hpGaugeDMG.SetWindowHorizontalAlignRight()
        if app.ENABLE_POISON_GAUGE_SYSTEM:
            hpGaugePoison.SetPosition(175, 17)
            hpGaugePoison.SetWindowHorizontalAlignRight()
        closeButton.SetEvent(ui.__mem_func__(self.OnPressedCloseButton))
        closeButton.Show()

        self.buttonDict = {}
        self.showingButtonList = []
        for buttonName in self.BUTTON_NAME_LIST:
            button = ui.Button()
            button.SetParent(self)

            if localeInfo.IsARABIC():
                button.SetUpVisual("d:/ymir work/ui/public/Small_Button_01.sub")
                button.SetOverVisual("d:/ymir work/ui/public/Small_Button_02.sub")
                button.SetDownVisual("d:/ymir work/ui/public/Small_Button_03.sub")
            else:
                button.SetUpVisual("d:/ymir work/ui/public/small_thin_button_01.sub")
                button.SetOverVisual("d:/ymir work/ui/public/small_thin_button_02.sub")
                button.SetDownVisual("d:/ymir work/ui/public/small_thin_button_03.sub")

            button.SetWindowHorizontalAlignCenter()
            button.SetText(buttonName)
            button.Hide()
            self.buttonDict[buttonName] = button
            self.showingButtonList.append(button)

        self.buttonDict[localeInfo.TARGET_BUTTON_WHISPER].SetEvent(ui.__mem_func__(self.OnWhisper))
        if app.ENABLE_MESSENGER_BLOCK_SYSTEM:
            self.buttonDict[localeInfo.TARGET_BUTTON_BLOCK].SetEvent(ui.__mem_func__(self.OnAppendToBlockMessenger))
            self.buttonDict[localeInfo.TARGET_BUTTON_BLOCK_REMOVE].SetEvent(ui.__mem_func__(self.OnRemoveToBlockMessenger))
        self.buttonDict[localeInfo.TARGET_BUTTON_EXCHANGE].SetEvent(ui.__mem_func__(self.OnExchange))
        self.buttonDict[localeInfo.TARGET_BUTTON_FIGHT].SetEvent(ui.__mem_func__(self.OnPVP))
        self.buttonDict[localeInfo.TARGET_BUTTON_ACCEPT_FIGHT].SetEvent(ui.__mem_func__(self.OnPVP))
        self.buttonDict[localeInfo.TARGET_BUTTON_AVENGE].SetEvent(ui.__mem_func__(self.OnPVP))
        self.buttonDict[localeInfo.TARGET_BUTTON_FRIEND].SetEvent(ui.__mem_func__(self.OnAppendToMessenger))
        self.buttonDict[localeInfo.TARGET_BUTTON_FRIEND].SetEvent(ui.__mem_func__(self.OnAppendToMessenger))
        self.buttonDict[localeInfo.TARGET_BUTTON_INVITE_PARTY].SetEvent(ui.__mem_func__(self.OnPartyInvite))
        self.buttonDict[localeInfo.TARGET_BUTTON_LEAVE_PARTY].SetEvent(ui.__mem_func__(self.OnPartyExit))
        self.buttonDict[localeInfo.TARGET_BUTTON_EXCLUDE].SetEvent(ui.__mem_func__(self.OnPartyRemove))
        if app.ENABLE_GUILD_SPY_SYSTEM:
            self.buttonDict["Ajan"].SetEvent(ui.__mem_func__(self.OnAgent))
        self.buttonDict[localeInfo.TARGET_BUTTON_INVITE_GUILD].SAFE_SetEvent(self.__OnGuildAddMember)
        self.buttonDict[localeInfo.TARGET_BUTTON_DISMOUNT].SAFE_SetEvent(self.__OnDismount)
        self.buttonDict[localeInfo.TARGET_BUTTON_EXIT_OBSERVER].SAFE_SetEvent(self.__OnExitObserver)
        self.buttonDict[localeInfo.TARGET_BUTTON_VIEW_EQUIPMENT].SAFE_SetEvent(self.__OnViewEquipment)
        self.buttonDict[localeInfo.TARGET_BUTTON_REQUEST_ENTER_PARTY].SAFE_SetEvent(self.__OnRequestParty)
        self.buttonDict[localeInfo.TARGET_BUTTON_BUILDING_DESTROY].SAFE_SetEvent(self.__OnDestroyBuilding)
        self.buttonDict[localeInfo.TARGET_BUTTON_EMOTION_ALLOW].SAFE_SetEvent(self.__OnEmotionAllow)


        self.name = name
        self.hpGauge = hpGauge
        if app.ENABLE_TARGET_INFORMATION_SYSTEM:
            self.infoButton = infoButton
            self.vnum = 0
        if app.ENABLE_HEALTH_PERCENT_SYSTEM:
            self.hpPercenttxt = hpPercenttxt
        if app.ENABLE_VIEW_TARGET_MONSTER_HP:
            self.hpDecimal = hpDecimal
            if app.ENABLE_POISON_GAUGE_SYSTEM:
                self.hpDecimalPoison = hpDecimalPoison
        if app.ENABLE_DAMAGE_BAR:
            self.hpGaugeDMG = hpGaugeDMG
        if app.ENABLE_POISON_GAUGE_SYSTEM:
            self.hpGaugePoison = hpGaugePoison
        self.closeButton = closeButton
        self.nameString = 0
        self.nameLength = 0
        self.vid = 0
        self.eventWhisper = None
        self.isShowButton = False
        if app.ENABLE_DAMAGE_BAR:
            self.actual_hp = 0
            self.max_hp = 100
            self.time = 0
            self.max_hp_dmg = 100
            self.timedmg = 0
        if app.ENABLE_PENDANT_SYSTEM:
            self.elementImage = None
        self.__Initialize()
        self.ResetTargetBoard()

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

        print "===================================================== DESTROYED TARGET BOARD"

    def __Initialize(self):
        self.nameString = ""
        self.nameLength = 0
        self.vid = 0
        if app.ENABLE_TARGET_INFORMATION_SYSTEM:
            self.vnum = 0
        if app.ENABLE_DAMAGE_BAR:
            self.lastHPPercentage=-1
        if app.ENABLE_PENDANT_SYSTEM:
            self.elementImage = None
        self.isShowButton = False

    def Destroy(self):
        self.eventWhisper = None
        self.closeButton = None
        self.showingButtonList = None
        self.buttonDict = None
        self.name = None
        self.hpGauge = None
        if app.ENABLE_VIEW_TARGET_MONSTER_HP:
            self.hpDecimal = None
            if app.ENABLE_POISON_GAUGE_SYSTEM:
                self.hpDecimalPoison = None
        if app.ENABLE_HEALTH_PERCENT_SYSTEM:
            self.hpPercenttxt = None
        if app.ENABLE_TARGET_INFORMATION_SYSTEM:
            self.infoButton = None
        if app.ENABLE_DAMAGE_BAR:
            self.hpGaugeDMG = None
        if app.ENABLE_POISON_GAUGE_SYSTEM:
            self.hpGaugePoison = None
        self.__Initialize()

    if app.ENABLE_TARGET_INFORMATION_SYSTEM:
        def RefreshMonsterInfoBoard(self):
            if not self.infoButton.showWnd.IsShow():
                return

            self.infoButton.showWnd.Refresh()

        def OnPressedInfoButton(self):
            net.SendTargetInfoLoad(player.GetTargetVID())
            if self.infoButton.showWnd.IsShow():
                self.infoButton.showWnd.Close()
            elif self.vnum != 0:
                self.infoButton.showWnd.Open(self, self.vnum)

    def OnPressedCloseButton(self):
        player.ClearTarget()
        self.Close()

    def Close(self):
        self.__Initialize()
        if app.ENABLE_TARGET_INFORMATION_SYSTEM:
            self.infoButton.showWnd.Close()
        self.Hide()

    def Open(self, vid, name):
        if vid:
            if not constInfo.GET_VIEW_OTHER_EMPIRE_PLAYER_TARGET_BOARD():
                if not player.IsSameEmpire(vid):
                    self.Hide()
                    return

            if vid != self.GetTargetVID():
                self.ResetTargetBoard()
                self.SetTargetVID(vid)
                self.SetTargetName(name)

            if player.IsMainCharacterIndex(vid):
                self.__ShowMainCharacterMenu()
            elif chr.INSTANCE_TYPE_BUILDING == chr.GetInstanceType(self.vid):
                self.Hide()
            else:
                self.RefreshButton()
                self.Show()
        else:
            self.HideAllButton()
            self.__ShowButton(localeInfo.TARGET_BUTTON_WHISPER)
            self.__ShowButton("VOTE_BLOCK_CHAT")
            self.__ArrangeButtonPosition()
            self.SetTargetName(name)
            self.Show()

    def Refresh(self):
        if self.IsShow():
            if self.IsShowButton():
                self.RefreshButton()

    def RefreshByVID(self, vid):
        if vid == self.GetTargetVID():
            self.Refresh()

    def RefreshByName(self, name):
        if name == self.GetTargetName():
            self.Refresh()

    def __ShowMainCharacterMenu(self):
        canShow=0

        self.HideAllButton()

        if player.IsMountingHorse():
            self.__ShowButton(localeInfo.TARGET_BUTTON_DISMOUNT)
            canShow=1

        if player.IsObserverMode():
            self.__ShowButton(localeInfo.TARGET_BUTTON_EXIT_OBSERVER)
            canShow=1

        if canShow:
            self.__ArrangeButtonPosition()
            self.Show()
        else:
            self.Hide()

    def __ShowNameOnlyMenu(self):
        self.HideAllButton()

    def SetWhisperEvent(self, event):
        self.eventWhisper = event

    def UpdatePosition(self):
        self.SetPosition(wndMgr.GetScreenWidth()/2 - self.GetWidth()/2, 10)

    def ResetTargetBoard(self):

        for btn in self.buttonDict.values():
            btn.Hide()

        self.__Initialize()

        self.name.SetPosition(0, 13)
        self.name.SetHorizontalAlignCenter()
        self.name.SetWindowHorizontalAlignCenter()
        self.hpGauge.Hide()
        if app.ENABLE_VIEW_TARGET_MONSTER_HP:
            self.hpDecimal.Hide()
            if app.ENABLE_POISON_GAUGE_SYSTEM:
                self.hpDecimalPoison.Hide()
        if app.ENABLE_HEALTH_PERCENT_SYSTEM:
            self.hpPercenttxt.Hide()
        if app.ENABLE_TARGET_INFORMATION_SYSTEM:
            self.infoButton.Hide()
            self.infoButton.showWnd.Close()
        if app.ENABLE_DAMAGE_BAR:
            self.hpGaugeDMG.Hide()
        if app.ENABLE_PENDANT_SYSTEM and self.elementImage:
            self.elementImage = None
        self.SetSize(250, 40)

    if app.ENABLE_PENDANT_SYSTEM:
        def SetElementImage(self,elementId):
            try:
                if elementId > 0 and elementId in ELEMENT_IMAGE_DIC.keys():
                    self.elementImage = ui.ImageBox()
                    self.elementImage.SetParent(self.name)
                    self.elementImage.SetPosition(-60,-12)
                    self.elementImage.LoadImage("d:/ymir work/ui/game/12zi/element/%s.sub" % (ELEMENT_IMAGE_DIC[elementId]))
                    self.elementImage.Show()
            except:
                pass

    def SetTargetVID(self, vid):
        self.vid = vid
        if app.ENABLE_TARGET_INFORMATION_SYSTEM:
            self.vnum = 0

    def SetEnemyVID(self, vid):
        self.SetTargetVID(vid)

        name = chr.GetNameByVID(vid)
        if app.ENABLE_TARGET_INFORMATION_SYSTEM:
            vnum = nonplayer.GetRaceNumByVID(vid)
        level = nonplayer.GetLevelByVID(vid)
        grade = nonplayer.GetGradeByVID(vid)

        nameFront = ""
        if -1 != level:
            nameFront += "Lv." + str(level) + " "
        if self.GRADE_NAME.has_key(grade):
            nameFront += "(" + self.GRADE_NAME[grade] + ") "

        self.SetTargetName(nameFront + name)
        if app.ENABLE_TARGET_INFORMATION_SYSTEM:
            (textWidth, textHeight) = self.name.GetTextSize()

            self.infoButton.SetPosition(textWidth + 25, 12)
            self.infoButton.SetWindowHorizontalAlignLeft()

            self.vnum = vnum
            self.infoButton.Show()


    def GetTargetVID(self):
        return self.vid

    def GetTargetName(self):
        return self.nameString

    def SetTargetName(self, name):
        self.nameString = name
        self.nameLength = len(name)
        self.name.SetText(name)

    if app.ENABLE_VIEW_TARGET_MONSTER_HP:
        def SetHP(self, hpPercentage, iMinHP, iMaxHP):
            if not self.hpGauge.IsShow():
                if app.ENABLE_VIEW_TARGET_MONSTER_HP:
                    showingButtonCount = len(self.showingButtonList)
                    if showingButtonCount > 0:
                        if chr.GetInstanceType(self.vid) == chr.INSTANCE_TYPE_PLAYER:
                            self.SetSize(max(150 + 75 * 3, showingButtonCount * 75), self.GetHeight())
                        else:
                            self.SetSize(200 + 7*self.nameLength, self.GetHeight())
                    else:
                        self.SetSize(200 + 7*self.nameLength, self.GetHeight())
                else:
                    self.SetSize(200 + 7*self.nameLength, self.GetHeight())

                self.name.SetPosition(23, 13)

                self.name.SetWindowHorizontalAlignLeft()
                self.name.SetHorizontalAlignLeft()
                self.hpGauge.Show()
                if app.ENABLE_HEALTH_PERCENT_SYSTEM:
                    self.hpPercenttxt.SetPosition(200 + 7*self.nameLength-205, 13)
                    self.hpPercenttxt.Show()
                if app.ENABLE_DAMAGE_BAR:
                    self.hpGaugeDMG.Show()
                self.UpdatePosition()

            if app.ENABLE_DAMAGE_BAR:
                self.actual_hp = hpPercentage
                if self.lastHPPercentage == -1:
                    self.lastHPPercentage=hpPercentage
                self.hpGaugeDMG.SetPercentage(self.lastHPPercentage, 100)
                self.lastHPPercentage=hpPercentage
            self.hpGauge.SetPercentage(hpPercentage, 100)
            if app.ENABLE_POISON_GAUGE_SYSTEM:
                self.hpGaugePoison.SetPercentage(hpPercentage, 100)
            if app.ENABLE_HEALTH_PERCENT_SYSTEM:
                self.hpPercenttxt.SetText("%d%%" % (hpPercentage))
            if app.ENABLE_VIEW_TARGET_MONSTER_HP:
                iMinHPText = '.'.join([i - 3 < 0 and str(iMinHP)[:i] or str(iMinHP)[i-3:i] for i in range(len(str(iMinHP)) % 3, len(str(iMinHP))+1, 3) if i])
                iMaxHPText = '.'.join([i - 3 < 0 and str(iMaxHP)[:i] or str(iMaxHP)[i-3:i] for i in range(len(str(iMaxHP)) % 3, len(str(iMaxHP))+1, 3) if i])
                self.hpDecimal.SetText(str(iMinHPText) + "/" + str(iMaxHPText))
                if app.ENABLE_POISON_GAUGE_SYSTEM:
                    self.hpDecimalPoison.SetText(str(iMinHPText) + "/" + str(iMaxHPText))
                (textWidth, textHeight)=self.hpDecimal.GetTextSize()
                self.hpDecimal.SetPosition(130 / 2 - textWidth / 2, -13)
                if app.ENABLE_POISON_GAUGE_SYSTEM:
                    self.hpDecimalPoison.SetPosition(130 / 2 - textWidth / 2, -13)

                self.hpDecimal.Show()
    else:
        def SetHP(self, hpPercentage):
            if not self.hpGauge.IsShow():

                self.SetSize(200 + 7*self.nameLength, self.GetHeight())
                self.name.SetPosition(23, 13)

                self.name.SetWindowHorizontalAlignLeft()
                self.name.SetHorizontalAlignLeft()
                self.hpGauge.Show()
                if app.ENABLE_HEALTH_PERCENT_SYSTEM:
                    self.hpPercenttxt.SetPosition(200 + 7*self.nameLength-205, 13)
                    self.hpPercenttxt.Show()
                if app.ENABLE_DAMAGE_BAR:
                    self.hpGaugeDMG.Show()
                self.UpdatePosition()

            self.hpGauge.SetPercentage(hpPercentage, 100)

    if app.ENABLE_GUILD_SPY_SYSTEM:
        def __GuildMaps(self):
            import background
            guild_map_dict = ['metin2_map_t2', 'metin2_map_t3', 'metin2_map_t4']
            if str(background.GetCurrentMapName()) in guild_map_dict:
                return True
            return False

    def ShowDefaultButton(self):

        self.isShowButton = True
        self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_WHISPER])
        self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_EXCHANGE])
        self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_FIGHT])
        self.showingButtonList.append(self.buttonDict[localeInfo.TARGET_BUTTON_EMOTION_ALLOW])

        if app.ENABLE_GUILD_SPY_SYSTEM:
            if player.GetMainCharacterName() == guild.GetGuildMasterName():
                if guild.IsMemberByName(self.nameString) and player.GetGuildID() == chr.GetGuildID(self.vid):
                    if self.__GuildMaps():
                        self.showingButtonList.append(self.buttonDict["Ajan"])

        for button in self.showingButtonList:
            button.Show()

    def HideAllButton(self):
        self.isShowButton = False
        for button in self.showingButtonList:
            button.Hide()
        self.showingButtonList = []

    def __ShowButton(self, name):

        if not self.buttonDict.has_key(name):
            return

        self.buttonDict[name].Show()
        self.showingButtonList.append(self.buttonDict[name])

    def __HideButton(self, name):

        if not self.buttonDict.has_key(name):
            return

        button = self.buttonDict[name]
        button.Hide()

        for btnInList in self.showingButtonList:
            if btnInList == button:
                self.showingButtonList.remove(button)
                break

    def OnWhisper(self):
        if None != self.eventWhisper:
            self.eventWhisper(self.nameString)

    def OnExchange(self):
        net.SendExchangeStartPacket(self.vid)

    def OnPVP(self):
        net.SendChatPacket("/pvp %d" % (self.vid))

    def OnAppendToMessenger(self):
        net.SendMessengerAddByVIDPacket(self.vid)

    if app.ENABLE_MESSENGER_BLOCK_SYSTEM:
        def OnAppendToBlockMessenger(self):
            net.SendMessengerAddBlockByVIDPacket(self.vid)
        def OnRemoveToBlockMessenger(self):
            messenger.RemoveBlock(constInfo.ME_KEY)
            net.SendMessengerRemoveBlockPacket(constInfo.ME_KEY, chr.GetNameByVID(self.vid))

    def OnPartyInvite(self):
        net.SendPartyInvitePacket(self.vid)

    def OnPartyExit(self):
        net.SendPartyExitPacket()

    def OnPartyRemove(self):
        net.SendPartyRemovePacketVID(self.vid)

    def __OnGuildAddMember(self):
        net.SendGuildAddMemberPacket(self.vid)

    def __OnDismount(self):
        net.SendChatPacket("/unmount")

    def __OnExitObserver(self):
        net.SendChatPacket("/observer_exit")

    def __OnViewEquipment(self):
        net.SendChatPacket("/view_equip " + str(self.vid))

    def __OnRequestParty(self):
        net.SendChatPacket("/party_request " + str(self.vid))

    def __OnDestroyBuilding(self):
        net.SendChatPacket("/build d %d" % (self.vid))

    def __OnEmotionAllow(self):
        net.SendChatPacket("/emotion_allow %d" % (self.vid))

    def __OnVoteBlockChat(self):
        cmd = "/vote_block_chat %s" % (self.nameString)
        net.SendChatPacket(cmd)

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

    def IsShowButton(self):
        return self.isShowButton

    def RefreshButton(self):

        self.HideAllButton()

        if chr.INSTANCE_TYPE_BUILDING == chr.GetInstanceType(self.vid):
            #self.__ShowButton(localeInfo.TARGET_BUTTON_BUILDING_DESTROY)
            #self.__ArrangeButtonPosition()
            return

        if player.IsPVPInstance(self.vid) or player.IsObserverMode():
            # PVP_INFO_SIZE_BUG_FIX
            self.SetSize(200 + 7*self.nameLength, 40)
            self.UpdatePosition()
            # END_OF_PVP_INFO_SIZE_BUG_FIX
            return

        self.ShowDefaultButton()

        if guild.MainPlayerHasAuthority(guild.AUTH_ADD_MEMBER):
            if not guild.IsMemberByName(self.nameString):
                if 0 == chr.GetGuildID(self.vid):
                    self.__ShowButton(localeInfo.TARGET_BUTTON_INVITE_GUILD)

        if not messenger.IsFriendByName(self.nameString):
            self.__ShowButton(localeInfo.TARGET_BUTTON_FRIEND)

        if app.ENABLE_MESSENGER_BLOCK_SYSTEM and not str(self.nameString)[0] == "[":
            if not messenger.IsBlockByName(self.nameString):
                self.__ShowButton(localeInfo.TARGET_BUTTON_BLOCK)
                self.__HideButton(localeInfo.TARGET_BUTTON_BLOCK_REMOVE)
            else:
                self.__ShowButton(localeInfo.TARGET_BUTTON_BLOCK_REMOVE)
                self.__HideButton(localeInfo.TARGET_BUTTON_BLOCK)

        if player.IsPartyMember(self.vid):

            self.__HideButton(localeInfo.TARGET_BUTTON_FIGHT)

            if player.IsPartyLeader(self.vid):
                self.__ShowButton(localeInfo.TARGET_BUTTON_LEAVE_PARTY)
            elif player.IsPartyLeader(player.GetMainCharacterIndex()):
                self.__ShowButton(localeInfo.TARGET_BUTTON_EXCLUDE)

        else:
            if player.IsPartyMember(player.GetMainCharacterIndex()):
                if player.IsPartyLeader(player.GetMainCharacterIndex()):
                    self.__ShowButton(localeInfo.TARGET_BUTTON_INVITE_PARTY)
            else:
                if chr.IsPartyMember(self.vid):
                    self.__ShowButton(localeInfo.TARGET_BUTTON_REQUEST_ENTER_PARTY)
                else:
                    self.__ShowButton(localeInfo.TARGET_BUTTON_INVITE_PARTY)

            if player.IsRevengeInstance(self.vid):
                self.__HideButton(localeInfo.TARGET_BUTTON_FIGHT)
                self.__ShowButton(localeInfo.TARGET_BUTTON_AVENGE)
            elif player.IsChallengeInstance(self.vid):
                self.__HideButton(localeInfo.TARGET_BUTTON_FIGHT)
                self.__ShowButton(localeInfo.TARGET_BUTTON_ACCEPT_FIGHT)
            elif player.IsCantFightInstance(self.vid):
                self.__HideButton(localeInfo.TARGET_BUTTON_FIGHT)

            if not player.IsSameEmpire(self.vid):
                self.__HideButton(localeInfo.TARGET_BUTTON_INVITE_PARTY)
                self.__HideButton(localeInfo.TARGET_BUTTON_FRIEND)
                self.__HideButton(localeInfo.TARGET_BUTTON_FIGHT)

        distance = player.GetCharacterDistance(self.vid)
        if distance > self.EXCHANGE_LIMIT_RANGE:
            self.__HideButton(localeInfo.TARGET_BUTTON_EXCHANGE)
            self.__ArrangeButtonPosition()

        self.__ArrangeButtonPosition()

    def __ArrangeButtonPosition(self):
        showingButtonCount = len(self.showingButtonList)

        pos = -(showingButtonCount / 2) * 68
        if 0 == showingButtonCount % 2:
            pos += 34

        for button in self.showingButtonList:
            button.SetPosition(pos, 33)
            pos += 68

        if app.ENABLE_VIEW_TARGET_MONSTER_HP:
            if showingButtonCount <= 2:
                self.SetSize(max(150 + 125, showingButtonCount * 75), 65)
            else:
                self.SetSize(max(150, showingButtonCount * 75), 65)
        else:
            self.SetSize(max(150, showingButtonCount * 75), 65)
        self.UpdatePosition()

    def OnUpdate(self):
        if app.ENABLE_DAMAGE_BAR:
            if self.max_hp > self.actual_hp:
                if app.GetTime() > self.time:
                    self.max_hp -= 1
                    self.hpGauge.SetPercentage(self.max_hp, 100)
                    if app.ENABLE_POISON_GAUGE_SYSTEM:
                        self.hpGaugePoison.SetPercentage(self.max_hp, 100)
                    self.time = app.GetTime() + 0.005
            if self.max_hp_dmg > self.actual_hp:
                if app.GetTime() > self.timedmg:
                    self.max_hp_dmg = -1
                    self.hpGaugeDMG.SetPercentage(self.max_hp_dmg, 100)
                    self.timedmg = app.GetTime() + 0.005
        if app.ENABLE_POISON_GAUGE_SYSTEM:
            if chr.GetInstanceType(self.vid) != chr.INSTANCE_TYPE_PLAYER and chr.GetInstanceType(self.vid) != chr.INSTANCE_TYPE_NPC:
                if chr.IsPoisoned(self.vid):
                    self.hpGauge.Hide()
                    self.hpGaugePoison.Show()
                    self.hpDecimal.Hide()
                    self.hpDecimalPoison.Show()
                else:
                    self.hpGaugePoison.Hide()
                    self.hpGauge.Show()
                    self.hpDecimalPoison.Hide()
                    self.hpDecimal.Show()
        if self.isShowButton:

            exchangeButton = self.buttonDict[localeInfo.TARGET_BUTTON_EXCHANGE]
            distance = player.GetCharacterDistance(self.vid)

            if distance < 0:
                return

            if exchangeButton.IsShow():
                if distance > self.EXCHANGE_LIMIT_RANGE:
                    self.RefreshButton()

            else:
                if distance < self.EXCHANGE_LIMIT_RANGE:
                    self.RefreshButton()

    if app.ENABLE_GUILD_SPY_SYSTEM:
        def AjanMap(self):
            import background
            Map = ("metin2_map_t1",
                    "metin2_map_t2",
                    "metin2_map_t3",)
          
            if background.GetCurrentMapName() in Map:
                return TRUE
          
            return FALSE
  
        def OnAgent(self):
            import uiCommon
            agentQuestionDialog = uiCommon.QuestionDialog()
            agentQuestionDialog.SetText("%s adlı oyuncunun ajan olduğuna emin misin?" % (self.GetTargetName()))
            agentQuestionDialog.SetAcceptText(localeInfo.UI_ACCEPT)
            agentQuestionDialog.SetCancelText(localeInfo.UI_DENY)
            agentQuestionDialog.SetAcceptEvent(lambda arg = True: self.AnswerAgentQuestion(arg))
            agentQuestionDialog.SetCancelEvent(lambda arg = False: self.AnswerAgentQuestion(arg))
            agentQuestionDialog.Open()
            self.agentQuestionDialog = agentQuestionDialog
      
        def AnswerAgentQuestion(self, answer):
            if not self.agentQuestionDialog:
                return
            else:
                if answer:
                    net.SendGuildRemoveMemberPacket(self.GetTargetName())
                    net.SendChatPacket("/savasat %s" % self.GetTargetName())
                    chat.AppendChat(chat.CHAT_TYPE_INFO, "%s loncadan çıkartıldı." % self.GetTargetName())
                self.agentQuestionDialog.Close()
                self.agentQuestionDialog = None
                return
 
Çözüm
hataya göre InfoBoard sınıfında slotSize adında değeri bulamıyor.

Aratın;
Python:
Genişlet Daralt Kopyala
                self.itemVnums = [0 for i in xrange(35)]

Altına ekleyin;
Python:
Genişlet Daralt Kopyala
                self.slotSize = 0

Bakalım bu düzeltme sorunu çözebilecek mi
hataya göre InfoBoard sınıfında slotSize adında değeri bulamıyor.

Aratın;
Python:
Genişlet Daralt Kopyala
                self.itemVnums = [0 for i in xrange(35)]

Altına ekleyin;
Python:
Genişlet Daralt Kopyala
                self.slotSize = 0

Bakalım bu düzeltme sorunu çözebilecek mi
 
Çözüm
Bu çözüldüğüne konunuz çözüldü işaretlenip kilitlenmiştir. Başka sorunlarınız için ayrı konu açabilirsiniz. :)
 
Durum
İçerik kilitlendiği için mesaj gönderimine kapatıldı.
Üst