Fethi Polat 1
Fethi Polat
kralhakan2009 1
kralhakan2009
Vahsi Uzman 1
Vahsi Uzman
Best Studio 1
Best Studio
Agora Metin2 1
Agora Metin2
raderde 1
raderde
Cannn6161 1
Cannn6161
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Mt2Hizmet 1
Mt2Hizmet
melankolıa18 1
melankolıa18
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

Cevaplanmadı Autopickup DracaryS - Python help (Affectshower click does not work)

  • Konuyu başlatan Konuyu başlatan xAmnezia3143
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 2
  • Görüntüleme Görüntüleme 880

xAmnezia3143

Level 1
Üye
Katılım
23 Eki 2022
Konular
2
Mesajlar
2
Online süresi
1h 52s
Reaksiyon Skoru
0
Altın Konu
0
TM Yaşı
3 Yıl 7 Ay 15 Gün
Başarım Puanı
8
MmoLira
17
DevLira
0
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

Good day,
I have installed the autopickup system. This works so far and does what it should. However, a part of the system does not work,
in which I can deactivate the Autopickup.

I should be able to deactivate and reactivate it by clicking on the icon in the affect bar. Unfortunately this has absolutely no function for me.
However, a Syserr is also not output. Completely empty.

Heres a Gif in addition:
https://metin2.download/picture/BE2b40Vtggwu3xko02xGp3Naa28FqoID/.gif

Below I attach my uiaffectshower.py and the one of the HowTo. I would be happy if someone would have a look at it.
Greetings and thanks in advance.

The HowTo uiaffectshower.py:
Python:
#Search

    AFFECT_DATA_DICT =    {
    ...
    }

# Add after

    if app.RENEWAL_PICKUP_AFFECT:
        AFFECT_DATA_DICT[chr.NEW_AFFECT_PICKUP_ENABLE] =  (localeInfo.NEW_AFFECT_PICKUP_ENABLE, "icon/affectshower/pickup_active.tga")
        AFFECT_DATA_DICT[chr.NEW_AFFECT_PICKUP_DEACTIVE] =  (localeInfo.NEW_AFFECT_PICKUP_DEACTIVE, "icon/affectshower/pickup_deactive.tga")

# Search

    INFINITE_AFFECT_DURATION = 0x1FFFFFFF

#Add after

    if app.RENEWAL_PICKUP_AFFECT:
        pickupQuestionDialog = None

#Seach

        if affect != chr.NEW_AFFECT_AUTO_SP_RECOVERY and affect != chr.NEW_AFFECT_AUTO_HP_RECOVERY:
            description = description(float(value))

# Add after

        if app.RENEWAL_PICKUP_AFFECT:
            if affect == chr.NEW_AFFECT_PICKUP_ENABLE or affect == chr.NEW_AFFECT_PICKUP_DEACTIVE:
                image.SetEvent(ui.__mem_func__(self.__OnClickPickup),"mouse_click", affect)

# Search

    def BINARY_NEW_RemoveAffect(self, type, pointIdx):

# add before

    if app.RENEWAL_PICKUP_AFFECT:
        def OnChangePickup(self, answer):
            if not self.pickupQuestionDialog:
                return
            if answer:
                net.SendChatPacket("/pickup_affect")
            self.pickupQuestionDialog.Close()
            self.pickupQuestionDialog = None
        def __OnClickPickup(self, emptyArg, affect):
            if self.pickupQuestionDialog:
                self.pickupQuestionDialog.Close()
            pickupQuestionDialog = uiCommon.QuestionDialog()
            pickupQuestionDialog.SetText(localeInfo.PICKUP_DEACTIVE_DIALOG if chr.NEW_AFFECT_PICKUP_ENABLE else localeInfo.PICKUP_ACTIVE_DIALOG)
            pickupQuestionDialog.SetAcceptEvent(lambda arg = True: self.OnChangePickup(arg))
            pickupQuestionDialog.SetCancelEvent(lambda arg = False: self.OnChangePickup(arg))
            pickupQuestionDialog.Open()
            self.pickupQuestionDialog = pickupQuestionDialog

My uiaffectshower.py:
Python:
import ui
import localeInfo
import chr
import item
import app
import skill
import player
import uiToolTip
import math

AFFECT = {
    "index"  : {
        0 : chr.AFFECT_HOSIN,
        1 : chr.AFFECT_BOHO, 
        2 : chr.AFFECT_GICHEON,
        3 : chr.AFFECT_KWAESOK,
        4 : chr.AFFECT_JEUNGRYEOK,
    },
    "skillIndex"  : {
        0 : 94,
        1 : 95, 
        2 : 96,
        3 : 110,
        4 : 111,
    },
}

# WEDDING
class LovePointImage(ui.ExpandedImageBox):

    FILE_PATH = "d:/ymir work/ui/pattern/LovePoint/"
    FILE_DICT = {
        0 : FILE_PATH + "01.dds",
        1 : FILE_PATH + "02.dds",
        2 : FILE_PATH + "02.dds",
        3 : FILE_PATH + "03.dds",
        4 : FILE_PATH + "04.dds",
        5 : FILE_PATH + "05.dds",
    }

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

        self.loverName = ""
        self.lovePoint = 0

        self.toolTip = uiToolTip.ToolTip(100)
        self.toolTip.HideToolTip()

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

    def SetLoverInfo(self, name, lovePoint):
        self.loverName = name
        self.lovePoint = lovePoint
        self.__Refresh()

    def OnUpdateLovePoint(self, lovePoint):
        self.lovePoint = lovePoint
        self.__Refresh()

    def __Refresh(self):
        self.lovePoint = max(0, self.lovePoint)
        self.lovePoint = min(100, self.lovePoint)

        if 0 == self.lovePoint:
            loveGrade = 0
        else:
            loveGrade = self.lovePoint / 25 + 1
        fileName = self.FILE_DICT.get(loveGrade, self.FILE_PATH+"00.dds")

        try:
            self.LoadImage(fileName)
        except:
            import dbg
            dbg.TraceError("LovePointImage.SetLoverInfo(lovePoint=%d) - LoadError %s" % (self.lovePoint, fileName))

        self.SetScale(0.7, 0.7)

        self.toolTip.ClearToolTip()
        self.toolTip.SetTitle(self.loverName)
        self.toolTip.AppendTextLine(localeInfo.AFF_LOVE_POINT % (self.lovePoint))
        self.toolTip.ResizeToolTip()

    def OnMouseOverIn(self):
        self.toolTip.ShowToolTip()

    def OnMouseOverOut(self):
        self.toolTip.HideToolTip()
# END_OF_WEDDING


class HorseImage(ui.ExpandedImageBox):

    FILE_PATH = "d:/ymir work/ui/pattern/HorseState/"

    FILE_DICT = {
        00 : FILE_PATH+"00.dds",
        01 : FILE_PATH+"00.dds",
        02 : FILE_PATH+"00.dds",
        03 : FILE_PATH+"00.dds",
        10 : FILE_PATH+"10.dds",
        11 : FILE_PATH+"11.dds",
        12 : FILE_PATH+"12.dds",
        13 : FILE_PATH+"13.dds",
        20 : FILE_PATH+"20.dds",
        21 : FILE_PATH+"21.dds",
        22 : FILE_PATH+"22.dds",
        23 : FILE_PATH+"23.dds",
        30 : FILE_PATH+"30.dds",
        31 : FILE_PATH+"31.dds",
        32 : FILE_PATH+"32.dds",
        33 : FILE_PATH+"33.dds",
    }

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

        #self.textLineList = []
        self.toolTip = uiToolTip.ToolTip(100)
        self.toolTip.HideToolTip()

    def __GetHorseGrade(self, level):
        if 0 == level:
            return 0

        return (level-1)/10 + 1

    def SetState(self, level, health, battery):
        #self.textLineList=[]
        self.toolTip.ClearToolTip()

        if level>0:

            try:
                grade = self.__GetHorseGrade(level)
                self.__AppendText(localeInfo.LEVEL_LIST[grade])
            except IndexError:
                print "HorseImage.SetState(level=%d, health=%d, battery=%d) - Unknown Index" % (level, health, battery)
                return

            try:
                healthName=localeInfo.HEALTH_LIST[health]
                if len(healthName)>0:
                    self.__AppendText(healthName)
            except IndexError:
                print "HorseImage.SetState(level=%d, health=%d, battery=%d) - Unknown Index" % (level, health, battery)
                return

            if health>0:
                if battery==0:
                    self.__AppendText(localeInfo.NEEFD_REST)

            try:
                fileName=self.FILE_DICT[health*10+battery]
            except KeyError:
                print "HorseImage.SetState(level=%d, health=%d, battery=%d) - KeyError" % (level, health, battery)

            try:
                self.LoadImage(fileName)
            except:
                print "HorseImage.SetState(level=%d, health=%d, battery=%d) - LoadError %s" % (level, health, battery, fileName)

        self.SetScale(0.7, 0.7)

    def __AppendText(self, text):

        self.toolTip.AppendTextLine(text)
        self.toolTip.ResizeToolTip()

        #x=self.GetWidth()/2
        #textLine = ui.TextLine()
        #textLine.SetParent(self)
        #textLine.SetSize(0, 0)
        #textLine.SetOutline()
        #textLine.Hide()
        #textLine.SetPosition(x, 40+len(self.textLineList)*16)
        #textLine.SetText(text)
        #self.textLineList.append(textLine)

    def OnMouseOverIn(self):
        #for textLine in self.textLineList:
        #    textLine.Show()

        self.toolTip.ShowToolTip()

    def OnMouseOverOut(self):
        #for textLine in self.textLineList:
        #    textLine.Hide()

        self.toolTip.HideToolTip()


# AUTO_POTION
class AutoPotionImage(ui.ExpandedImageBox):

    FILE_PATH_HP = "d:/ymir work/ui/pattern/auto_hpgauge/"
    FILE_PATH_SP = "d:/ymir work/ui/pattern/auto_spgauge/"

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

        self.loverName = ""
        self.lovePoint = 0
        self.potionType = player.AUTO_POTION_TYPE_HP
        self.filePath = ""

        self.toolTip = uiToolTip.ToolTip(100)
        self.toolTip.HideToolTip()

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

    def SetPotionType(self, type):
        self.potionType = type
        
        if player.AUTO_POTION_TYPE_HP == type:
            self.filePath = self.FILE_PATH_HP
        elif player.AUTO_POTION_TYPE_SP == type:
            self.filePath = self.FILE_PATH_SP
            

    def OnUpdateAutoPotionImage(self):
        self.__Refresh()

    def __Refresh(self):
        print "__Refresh"
    
        isActivated, currentAmount, totalAmount, slotIndex = player.GetAutoPotionInfo(self.potionType)
        
        amountPercent = (float(currentAmount) / totalAmount) * 100.0
        grade = math.ceil(amountPercent / 20)
        
        if 5.0 > amountPercent:
            grade = 0
            
        if 80.0 < amountPercent:
            grade = 4
            if 90.0 < amountPercent:
                grade = 5           

        fmt = self.filePath + "%.2d.dds"
        fileName = fmt % grade
        
        print self.potionType, amountPercent, fileName

        try:
            self.LoadImage(fileName)
        except:
            import dbg
            dbg.TraceError("AutoPotionImage.__Refresh(potionType=%d) - LoadError %s" % (self.potionType, fileName))

        self.SetScale(0.7, 0.7)

        self.toolTip.ClearToolTip()
        
        if player.AUTO_POTION_TYPE_HP == type:
            self.toolTip.SetTitle(localeInfo.TOOLTIP_AUTO_POTION_HP)
        else:
            self.toolTip.SetTitle(localeInfo.TOOLTIP_AUTO_POTION_SP)
            
        self.toolTip.AppendTextLine(localeInfo.TOOLTIP_AUTO_POTION_REST    % (amountPercent))
        self.toolTip.ResizeToolTip()

    def OnMouseOverIn(self):
        self.toolTip.ShowToolTip()

    def OnMouseOverOut(self):
        self.toolTip.HideToolTip()
# END_OF_AUTO_POTION


class AffectImage(ui.ExpandedImageBox):

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

        self.toolTipText = None
        self.isSkillAffect = TRUE
        self.description = None
        self.endTime = 0
        self.affect = None
        self.isClocked = TRUE
        self.affectQuestionDialog = None

    def SetAffect(self, affect):
        self.affect = affect

    def GetAffect(self):
        return self.affect

    def SetToolTipText(self, text, x = 0, y = -19):

        if not self.toolTipText:
            textLine = ui.TextLine()
            textLine.SetParent(self)
            textLine.SetSize(0, 0)
            textLine.SetOutline()
            textLine.Hide()
            self.toolTipText = textLine

        if app.PREMIUM_SYSTEM:
            if self.affect == chr.NEW_AFFECT_PREMIUM_RANK:
                self.toolTipText.SetEnterToken(True)

        self.toolTipText.SetText(text)
        w, h = self.toolTipText.GetTextSize()
        self.toolTipText.SetPosition(max(0, x + self.GetWidth()/2 - w/2), y)

    def SetDescription(self, description):
        self.description = description

    def SetDuration(self, duration):
        self.endTime = 0
        if duration > 0:
            self.endTime = app.GetGlobalTimeStamp() + duration

    def UpdateAutoPotionDescription(self):       
        
        potionType = 0
        if self.affect == chr.NEW_AFFECT_AUTO_HP_RECOVERY:
            potionType = player.AUTO_POTION_TYPE_HP
        else:
            potionType = player.AUTO_POTION_TYPE_SP   
        
        isActivated, currentAmount, totalAmount, slotIndex = player.GetAutoPotionInfo(potionType)
        
        #print "UpdateAutoPotionDescription ", isActivated, currentAmount, totalAmount, slotIndex
        
        amountPercent = 0.0
        
        try:
            amountPercent = (float(currentAmount) / totalAmount) * 100.0       
        except:
            amountPercent = 100.0
        
        self.SetToolTipText(self.description % amountPercent, 0, 40)
        
    def SetClock(self, isClocked):
        self.isClocked = isClocked
        
    def UpdateDescription(self):
        if not self.isClocked:
            self.__UpdateDescription2()
            return
    
        if not self.description:
            return
            
        toolTip = self.description
        if self.endTime > 0:
            leftTime = localeInfo.SecondToDHM(self.endTime - app.GetGlobalTimeStamp())
            toolTip += " (%s : %s)" % (localeInfo.LEFT_TIME, leftTime)
        self.SetToolTipText(toolTip, 0, 40)
        
    #독일버전에서 시간을 제거하기 위해서 사용
    def __UpdateDescription2(self):
        if not self.description:
            return

        toolTip = self.description
        self.SetToolTipText(toolTip, 0, 40)

    def SetSkillAffectFlag(self, flag):
        self.isSkillAffect = flag

    def IsSkillAffect(self):
        return self.isSkillAffect

    def OnRemoveAffectQuestionDialog(self, affect):
        import uiCommon
        self.RemoveAffectQuestionDialog = uiCommon.QuestionDialog()
        self.RemoveAffectQuestionDialog.SetText(localeInfo.REMOVE_AFFECT_QUESTION % skill.GetSkillName(affect))
        self.RemoveAffectQuestionDialog.SetWidth(350)
        self.RemoveAffectQuestionDialog.SetAcceptEvent(lambda arg = TRUE: self.CloseAffectQuestionDialog(arg, affect))
        self.RemoveAffectQuestionDialog.SetCancelEvent(lambda arg = FALSE: self.CloseAffectQuestionDialog(arg, affect))
        self.RemoveAffectQuestionDialog.Open()
            
    def CloseAffectQuestionDialog(self, answer, affect):
        import net

        if not self.RemoveAffectQuestionDialog:
            return

        self.RemoveAffectQuestionDialog.Close()
        self.RemoveAffectQuestionDialog = None
        
        if not answer or not affect:
            return

        net.SendChatPacket("/remove_skill_affect %d" % affect)
        return TRUE

    def OnMouseOverIn(self):
        if self.toolTipText:
            self.toolTipText.Show()

    def OnMouseLeftButtonDown(self):
        for index in xrange(len(AFFECT["index"])):
            if self.affect == AFFECT["index"][index]:
                self.OnRemoveAffectQuestionDialog(AFFECT["skillIndex"][index])   

    def OnMouseOverOut(self):
        if self.toolTipText:
            self.toolTipText.Hide()

class AffectShower(ui.Window):

    MALL_DESC_IDX_START = 1000
    IMAGE_STEP = 25
    AFFECT_MAX_NUM = 32

    INFINITE_AFFECT_DURATION = 0x1FFFFFFF
    if app.RENEWAL_PICKUP_AFFECT:
        pickupQuestionDialog = None

    AFFECT_DATA_DICT =    {
            chr.AFFECT_POISON : (localeInfo.SKILL_TOXICDIE, "d:/ymir work/ui/skill/common/affect/poison.sub"),
            chr.AFFECT_SLOW : (localeInfo.SKILL_SLOW, "d:/ymir work/ui/skill/common/affect/slow.sub"),
            chr.AFFECT_STUN : (localeInfo.SKILL_STUN, "d:/ymir work/ui/skill/common/affect/stun.sub"),

            chr.AFFECT_ATT_SPEED_POTION : (localeInfo.SKILL_INC_ATKSPD, "d:/ymir work/ui/skill/common/affect/Increase_Attack_Speed.sub"),
            chr.AFFECT_MOV_SPEED_POTION : (localeInfo.SKILL_INC_MOVSPD, "d:/ymir work/ui/skill/common/affect/Increase_Move_Speed.sub"),
            chr.AFFECT_FISH_MIND : (localeInfo.SKILL_FISHMIND, "d:/ymir work/ui/skill/common/affect/fishmind.sub"),

            chr.AFFECT_JEONGWI : (localeInfo.SKILL_JEONGWI, "d:/ymir work/ui/skill/warrior/jeongwi_03.sub",),
            chr.AFFECT_GEOMGYEONG : (localeInfo.SKILL_GEOMGYEONG, "d:/ymir work/ui/skill/warrior/geomgyeong_03.sub",),
            chr.AFFECT_CHEONGEUN : (localeInfo.SKILL_CHEONGEUN, "d:/ymir work/ui/skill/warrior/cheongeun_03.sub",),
            chr.AFFECT_GYEONGGONG : (localeInfo.SKILL_GYEONGGONG, "d:/ymir work/ui/skill/assassin/gyeonggong_03.sub",),
            chr.AFFECT_EUNHYEONG : (localeInfo.SKILL_EUNHYEONG, "d:/ymir work/ui/skill/assassin/eunhyeong_03.sub",),
            chr.AFFECT_GWIGEOM : (localeInfo.SKILL_GWIGEOM, "d:/ymir work/ui/skill/sura/gwigeom_03.sub",),
            chr.AFFECT_GONGPO : (localeInfo.SKILL_GONGPO, "d:/ymir work/ui/skill/sura/gongpo_03.sub",),
            chr.AFFECT_JUMAGAP : (localeInfo.SKILL_JUMAGAP, "d:/ymir work/ui/skill/sura/jumagap_03.sub"),
            chr.AFFECT_HOSIN : (localeInfo.SKILL_HOSIN, "d:/ymir work/ui/skill/shaman/hosin_03.sub",),
            chr.AFFECT_BOHO : (localeInfo.SKILL_BOHO, "d:/ymir work/ui/skill/shaman/boho_03.sub",),
            chr.AFFECT_KWAESOK : (localeInfo.SKILL_KWAESOK, "d:/ymir work/ui/skill/shaman/kwaesok_03.sub",),
            chr.AFFECT_HEUKSIN : (localeInfo.SKILL_HEUKSIN, "d:/ymir work/ui/skill/sura/heuksin_03.sub",),
            chr.AFFECT_MUYEONG : (localeInfo.SKILL_MUYEONG, "d:/ymir work/ui/skill/sura/muyeong_03.sub",),
            chr.AFFECT_GICHEON : (localeInfo.SKILL_GICHEON, "d:/ymir work/ui/skill/shaman/gicheon_03.sub",),
            chr.AFFECT_JEUNGRYEOK : (localeInfo.SKILL_JEUNGRYEOK, "d:/ymir work/ui/skill/shaman/jeungryeok_03.sub",),
            chr.AFFECT_PABEOP : (localeInfo.SKILL_PABEOP, "d:/ymir work/ui/skill/sura/pabeop_03.sub",),
            chr.AFFECT_FALLEN_CHEONGEUN : (localeInfo.SKILL_CHEONGEUN, "d:/ymir work/ui/skill/warrior/cheongeun_03.sub",),
            28 : (localeInfo.SKILL_FIRE, "d:/ymir work/ui/skill/sura/hwayeom_03.sub",),
            chr.AFFECT_CHINA_FIREWORK : (localeInfo.SKILL_POWERFUL_STRIKE, "d:/ymir work/ui/skill/common/affect/powerfulstrike.sub",),
            # BUFF SYSTEM START
            chr.AFFECT_KWAESOK_ITEM : (localeInfo.SKILL_KWAESOK, "d:/ymir work/ui/skill/shaman/kwaesok_03.sub",),
            chr.AFFECT_BOHO_ITEM : (localeInfo.SKILL_BOHO, "d:/ymir work/ui/skill/shaman/boho_03.sub",),
            chr.AFFECT_GICHEON_ITEM : (localeInfo.SKILL_GICHEON, "d:/ymir work/ui/skill/shaman/gicheon_03.sub",),
            chr.AFFECT_HOSIN_ITEM : (localeInfo.SKILL_HOSIN, "d:/ymir work/ui/skill/shaman/hosin_03.sub",),
            chr.AFFECT_JEUNGRYEOK_ITEM : (localeInfo.SKILL_JEUNGRYEOK, "d:/ymir work/ui/skill/shaman/jeungryeok_03.sub",),
            # BUFF SYSTEM END

            #64 - END
            chr.NEW_AFFECT_EXP_BONUS : (localeInfo.TOOLTIP_MALL_EXPBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/exp_bonus.sub",),

            chr.NEW_AFFECT_ITEM_BONUS : (localeInfo.TOOLTIP_MALL_ITEMBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/item_bonus.sub",),
            chr.NEW_AFFECT_SAFEBOX : (localeInfo.TOOLTIP_MALL_SAFEBOX, "d:/ymir work/ui/skill/common/affect/safebox.sub",),
            chr.NEW_AFFECT_AUTOLOOT : (localeInfo.TOOLTIP_MALL_AUTOLOOT, "d:/ymir work/ui/skill/common/affect/autoloot.sub",),
            chr.NEW_AFFECT_FISH_MIND : (localeInfo.TOOLTIP_MALL_FISH_MIND, "d:/ymir work/ui/skill/common/affect/fishmind.sub",),
            chr.NEW_AFFECT_MARRIAGE_FAST : (localeInfo.TOOLTIP_MALL_MARRIAGE_FAST, "d:/ymir work/ui/skill/common/affect/marriage_fast.sub",),
            chr.NEW_AFFECT_GOLD_BONUS : (localeInfo.TOOLTIP_MALL_GOLDBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/gold_bonus.sub",),

            chr.NEW_AFFECT_NO_DEATH_PENALTY : (localeInfo.TOOLTIP_APPLY_NO_DEATH_PENALTY, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
            chr.NEW_AFFECT_SKILL_BOOK_BONUS : (localeInfo.TOOLTIP_APPLY_SKILL_BOOK_BONUS, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
            chr.NEW_AFFECT_SKILL_BOOK_NO_DELAY : (localeInfo.TOOLTIP_APPLY_SKILL_BOOK_NO_DELAY, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
            
            # 자동물약 hp, sp
            chr.NEW_AFFECT_AUTO_HP_RECOVERY : (localeInfo.TOOLTIP_AUTO_POTION_REST, "d:/ymir work/ui/pattern/auto_hpgauge/05.dds"),           
            chr.NEW_AFFECT_AUTO_SP_RECOVERY : (localeInfo.TOOLTIP_AUTO_POTION_REST, "d:/ymir work/ui/pattern/auto_spgauge/05.dds"),
            #chr.NEW_AFFECT_AUTO_HP_RECOVERY : (localeInfo.TOOLTIP_AUTO_POTION_REST, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),           
            #chr.NEW_AFFECT_AUTO_SP_RECOVERY : (localeInfo.TOOLTIP_AUTO_POTION_REST, "d:/ymir work/ui/skill/common/affect/gold_bonus.sub"),           

            MALL_DESC_IDX_START+player.POINT_MALL_ATTBONUS : (localeInfo.TOOLTIP_MALL_ATTBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/att_bonus.sub",),
            MALL_DESC_IDX_START+player.POINT_MALL_DEFBONUS : (localeInfo.TOOLTIP_MALL_DEFBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/def_bonus.sub",),
            MALL_DESC_IDX_START+player.POINT_MALL_EXPBONUS : (localeInfo.TOOLTIP_MALL_EXPBONUS, "d:/ymir work/ui/skill/common/affect/exp_bonus.sub",),
            MALL_DESC_IDX_START+player.POINT_MALL_ITEMBONUS : (localeInfo.TOOLTIP_MALL_ITEMBONUS, "d:/ymir work/ui/skill/common/affect/item_bonus.sub",),
            MALL_DESC_IDX_START+player.POINT_MALL_GOLDBONUS : (localeInfo.TOOLTIP_MALL_GOLDBONUS, "d:/ymir work/ui/skill/common/affect/gold_bonus.sub",),
            MALL_DESC_IDX_START+player.POINT_CRITICAL_PCT : (localeInfo.TOOLTIP_APPLY_CRITICAL_PCT,"d:/ymir work/ui/skill/common/affect/critical.sub"),
            MALL_DESC_IDX_START+player.POINT_PENETRATE_PCT : (localeInfo.TOOLTIP_APPLY_PENETRATE_PCT, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
            MALL_DESC_IDX_START+player.POINT_MAX_HP_PCT : (localeInfo.TOOLTIP_MAX_HP_PCT, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
            MALL_DESC_IDX_START+player.POINT_MAX_SP_PCT : (localeInfo.TOOLTIP_MAX_SP_PCT, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),   

            MALL_DESC_IDX_START+player.POINT_PC_BANG_EXP_BONUS : (localeInfo.TOOLTIP_MALL_EXPBONUS_P_STATIC, "d:/ymir work/ui/skill/common/affect/EXP_Bonus_p_on.sub",),
            MALL_DESC_IDX_START+player.POINT_PC_BANG_DROP_BONUS: (localeInfo.TOOLTIP_MALL_ITEMBONUS_P_STATIC, "d:/ymir work/ui/skill/common/affect/Item_Bonus_p_on.sub",),
    }
    if app.RENEWAL_PICKUP_AFFECT:
        AFFECT_DATA_DICT[chr.NEW_AFFECT_PICKUP_ENABLE] =  (localeInfo.NEW_AFFECT_PICKUP_ENABLE, "icon/affectshower/pickup_active.tga")
        AFFECT_DATA_DICT[chr.NEW_AFFECT_PICKUP_DEACTIVE] =  (localeInfo.NEW_AFFECT_PICKUP_DEACTIVE, "icon/affectshower/pickup_deactive.tga")

    if app.ENABLE_DRAGON_SOUL_SYSTEM:
        # 용혼석 천, 지 덱.
        AFFECT_DATA_DICT[chr.NEW_AFFECT_DRAGON_SOUL_DECK1] = (localeInfo.TOOLTIP_DRAGON_SOUL_DECK1, "d:/ymir work/ui/dragonsoul/buff_ds_sky1.tga")
        AFFECT_DATA_DICT[chr.NEW_AFFECT_DRAGON_SOUL_DECK2] = (localeInfo.TOOLTIP_DRAGON_SOUL_DECK2, "d:/ymir work/ui/dragonsoul/buff_ds_land1.tga")

    if app.PREMIUM_SYSTEM:
        AFFECT_DATA_DICT[chr.NEW_AFFECT_PREMIUM_RANK] = (localeInfo.TOOLTIP_PREMIUM_RANK, "d:/ymir work/ui/skill/common/affect/premium.sub",)

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

        self.serverPlayTime=0
        self.clientPlayTime=0
        
        self.lastUpdateTime=0
        self.affectImageDict={}
        self.horseImage=None
        self.lovePointImage=None
        self.autoPotionImageHP = AutoPotionImage()
        self.autoPotionImageSP = AutoPotionImage()
        self.SetPosition(10, 10)
        self.Show()

    def ClearAllAffects(self):
        self.horseImage=None
        self.lovePointImage=None
        self.affectImageDict={}
        self.__ArrangeImageList()

    def ClearAffects(self): ## 스킬 이펙트만 없앱니다.
        self.living_affectImageDict={}
        for key, image in self.affectImageDict.items():
            if not image.IsSkillAffect():
                self.living_affectImageDict[key] = image
        self.affectImageDict = self.living_affectImageDict
        self.__ArrangeImageList()

    def BINARY_NEW_AddAffect(self, type, pointIdx, value, duration):

        print "BINARY_NEW_AddAffect", type, pointIdx, value, duration

        if type < 500:
            return

        if type == chr.NEW_AFFECT_MALL:
            affect = self.MALL_DESC_IDX_START + pointIdx
        else:
            affect = type

        if self.affectImageDict.has_key(affect):
            return

        if not self.AFFECT_DATA_DICT.has_key(affect):
            return

        ## 용신의 가호, 선인의 교훈은 Duration 을 0 으로 설정한다.
        if affect == chr.NEW_AFFECT_NO_DEATH_PENALTY or\
           affect == chr.NEW_AFFECT_SKILL_BOOK_BONUS or\
           affect == chr.NEW_AFFECT_AUTO_SP_RECOVERY or\
           affect == chr.NEW_AFFECT_AUTO_HP_RECOVERY or\
           affect == chr.NEW_AFFECT_SKILL_BOOK_NO_DELAY:
            duration = 0

        affectData = self.AFFECT_DATA_DICT[affect]
        description = affectData[0]
        filename = affectData[1]

        if pointIdx == player.POINT_MALL_ITEMBONUS or\
           pointIdx == player.POINT_MALL_GOLDBONUS:
            value = 1 + float(value) / 100.0

        trashValue = 123
        #if affect == chr.NEW_AFFECT_AUTO_SP_RECOVERY or affect == chr.NEW_AFFECT_AUTO_HP_RECOVERY:
        if trashValue == 1:
            try:
                #image = AutoPotionImage()
                #image.SetParent(self)
                image = None
                
                if affect == chr.NEW_AFFECT_AUTO_SP_RECOVERY:
                    image.SetPotionType(player.AUTO_POTION_TYPE_SP)
                    image = self.autoPotionImageSP
                    #self.autoPotionImageSP = image;
                else:
                    image.SetPotionType(player.AUTO_POTION_TYPE_HP)
                    image = self.autoPotionImageHP
                    #self.autoPotionImageHP = image;
                
                image.SetParent(self)
                image.Show()
                image.OnUpdateAutoPotionImage()
                
                self.affectImageDict[affect] = image
                self.__ArrangeImageList()
                
            except Exception, e:
                print "except Aff auto potion affect ", e
                pass               
            
        else:
            if app.PREMIUM_SYSTEM:
                if affect != chr.NEW_AFFECT_AUTO_SP_RECOVERY and affect != chr.NEW_AFFECT_AUTO_HP_RECOVERY and affect != chr.NEW_AFFECT_PREMIUM_RANK:
                    description = description(float(value))
            else:
                if affect != chr.NEW_AFFECT_AUTO_SP_RECOVERY and affect != chr.NEW_AFFECT_AUTO_HP_RECOVERY:
                    description = description(float(value))
                if app.RENEWAL_PICKUP_AFFECT:
                    if affect == chr.NEW_AFFECT_PICKUP_ENABLE or affect == chr.NEW_AFFECT_PICKUP_DEACTIVE:
                        image.SetEvent(ui.__mem_func__(self.__OnClickPickup),"mouse_click", affect)

            try:
                print "Add affect %s" % affect
                image = AffectImage()
                image.SetParent(self)
                image.LoadImage(filename)
                image.SetDescription(description)
                image.SetDuration(duration)
                image.SetAffect(affect)
                if affect == chr.NEW_AFFECT_EXP_BONUS_EURO_FREE or\
                    affect == chr.NEW_AFFECT_EXP_BONUS_EURO_FREE_UNDER_15 or\
                    self.INFINITE_AFFECT_DURATION < duration:
                    image.SetClock(FALSE)
                    image.UpdateDescription()
                elif affect == chr.NEW_AFFECT_AUTO_SP_RECOVERY or affect == chr.NEW_AFFECT_AUTO_HP_RECOVERY:
                    image.UpdateAutoPotionDescription()
                else:
                    image.UpdateDescription()
                    
                if affect == chr.NEW_AFFECT_DRAGON_SOUL_DECK1 or affect == chr.NEW_AFFECT_DRAGON_SOUL_DECK2:
                    image.SetScale(1, 1)
                else:
                    image.SetScale(0.7, 0.7)
                image.SetSkillAffectFlag(FALSE)
                image.Show()
                self.affectImageDict[affect] = image
                self.__ArrangeImageList()
            except Exception, e:
                print "except Aff affect ", e
                pass

    def BINARY_NEW_RemoveAffect(self, type, pointIdx):
        if type == chr.NEW_AFFECT_MALL:
            affect = self.MALL_DESC_IDX_START + pointIdx
        else:
            affect = type
    
        print "Remove Affect %s %s" % ( type , pointIdx )
        self.__RemoveAffect(affect)
        self.__ArrangeImageList()

    if app.RENEWAL_PICKUP_AFFECT:
        def OnChangePickup(self, answer):
            if not self.pickupQuestionDialog:
                return
            if answer:
                net.SendChatPacket("/pickup_affect")
            self.pickupQuestionDialog.Close()
            self.pickupQuestionDialog = None

        def __OnClickPickup(self, emptyArg, affect):
            if self.pickupQuestionDialog:
                self.pickupQuestionDialog.Close()
            pickupQuestionDialog = uiCommon.QuestionDialog()
            pickupQuestionDialog.SetText(localeInfo.PICKUP_DEACTIVE_DIALOG if chr.NEW_AFFECT_PICKUP_ENABLE else localeInfo.PICKUP_ACTIVE_DIALOG)
            pickupQuestionDialog.SetAcceptEvent(lambda arg = True: self.OnChangePickup(arg))
            pickupQuestionDialog.SetCancelEvent(lambda arg = False: self.OnChangePickup(arg))
            pickupQuestionDialog.Open()
            self.pickupQuestionDialog = pickupQuestionDialog

    def SetAffect(self, affect):
        self.__AppendAffect(affect)
        self.__ArrangeImageList()

    def ResetAffect(self, affect):
        self.__RemoveAffect(affect)
        self.__ArrangeImageList()

    def SetLoverInfo(self, name, lovePoint):
        image = LovePointImage()
        image.SetParent(self)
        image.SetLoverInfo(name, lovePoint)
        self.lovePointImage = image
        self.__ArrangeImageList()

    def ShowLoverState(self):
        if self.lovePointImage:
            self.lovePointImage.Show()
            self.__ArrangeImageList()

    def HideLoverState(self):
        if self.lovePointImage:
            self.lovePointImage.Hide()
            self.__ArrangeImageList()

    def ClearLoverState(self):
        self.lovePointImage = None
        self.__ArrangeImageList()

    def OnUpdateLovePoint(self, lovePoint):
        if self.lovePointImage:
            self.lovePointImage.OnUpdateLovePoint(lovePoint)

    def SetHorseState(self, level, health, battery):
        if level==0:
            self.horseImage=None
        else:
            image = HorseImage()
            image.SetParent(self)
            image.SetState(level, health, battery)
            image.Show()

            self.horseImage=image
            self.__ArrangeImageList()

    def SetPlayTime(self, playTime):
        self.serverPlayTime = playTime
        self.clientPlayTime = app.GetTime()
        
        if localeInfo.IsVIETNAM():       
            image = PlayTimeImage()
            image.SetParent(self)
            image.SetPlayTime(playTime)
            image.Show()

            self.playTimeImage=image
            self.__ArrangeImageList()

    def __AppendAffect(self, affect):

        if self.affectImageDict.has_key(affect):
            return

        try:
            affectData = self.AFFECT_DATA_DICT[affect]
        except KeyError:
            return

        name = affectData[0]
        filename = affectData[1]

        skillIndex = player.AffectIndexToSkillIndex(affect)
        if 0 != skillIndex:
            name = skill.GetSkillName(skillIndex)

        image = AffectImage()
        image.SetParent(self)
        image.SetSkillAffectFlag(TRUE)
        image.SetAffect(affect)

        try:
            image.LoadImage(filename)
        except:
            pass

        image.SetToolTipText(name, 0, 40)
        image.SetScale(0.7, 0.7)
        image.Show()
        self.affectImageDict[affect] = image

    def __RemoveAffect(self, affect):
        """
        if affect == chr.NEW_AFFECT_AUTO_SP_RECOVERY:
            self.autoPotionImageSP.Hide()

        if affect == chr.NEW_AFFECT_AUTO_HP_RECOVERY:
            self.autoPotionImageHP.Hide()
        """
            
        if not self.affectImageDict.has_key(affect):
            print "__RemoveAffect %s ( No Affect )" % affect
            return

        print "__RemoveAffect %s ( Affect )" % affect
        del self.affectImageDict[affect]
        
        self.__ArrangeImageList()

    def __ArrangeImageList(self):

        width = len(self.affectImageDict) * self.IMAGE_STEP
        if self.lovePointImage:
            width+=self.IMAGE_STEP
        if self.horseImage:
            width+=self.IMAGE_STEP

        self.SetSize(width, 26)

        xPos = 0

        if self.lovePointImage:
            if self.lovePointImage.IsShow():
                self.lovePointImage.SetPosition(xPos, 0)
                xPos += self.IMAGE_STEP

        if self.horseImage:
            self.horseImage.SetPosition(xPos, 0)
            xPos += self.IMAGE_STEP

        for image in self.affectImageDict.values():
            image.SetPosition(xPos, 0)
            xPos += self.IMAGE_STEP

    def OnUpdate(self):       
        try:
            if app.GetGlobalTime() - self.lastUpdateTime > 500:
            #if 0 < app.GetGlobalTime():
                self.lastUpdateTime = app.GetGlobalTime()

                for image in self.affectImageDict.values():
                    if image.GetAffect() == chr.NEW_AFFECT_AUTO_HP_RECOVERY or image.GetAffect() == chr.NEW_AFFECT_AUTO_SP_RECOVERY:
                        image.UpdateAutoPotionDescription()
                        continue
                        
                    if not image.IsSkillAffect():
                        image.UpdateDescription()
        except Exception, e:
            print "AffectShower::OnUpdate error : ", e
 
You can compare the code on the topic in the link.
You adjust for yourself.
 
uiaffectshower.py

Search for:

Python:
image.SetEvent(ui.__mem_func__(self.__OnClickPickup),"mouse_click", affect)

Change for it:

Python:
image.SetEvent(ui.__mem_func__(self.__OnClickPickup),"MOUSE_LEFT_BUTTON_UP", affect)


ui.py

Python:
class ImageBox(Window):

Compare with my class:

Python:
class ImageBox(Window):
    def __init__(self, layer = "UI"):
        Window.__init__(self, layer)

        ##if app.ENABLE_EXPANDED_MONEY_TASKBAR:
        ##    self.eventFunc = {"mouse_click" : None, "mouse_over_in" : None, "mouse_over_out" : None}
        ##    self.eventArgs = {"mouse_click" : None, "mouse_over_in" : None, "mouse_over_out" : None}

        self.eventDict={}
        self.argDict={}

        self.eventFunc = {
            "MOUSE_LEFT_BUTTON_UP" : None,
            "MOUSE_LEFT_BUTTON_DOWN" : None,
            "MOUSE_RIGHT_BUTTON_UP" : None,
            "MOUSE_RIGHT_BUTTON_DOWN" : None,
            "MOUSE_OVER_IN" : None,
            "MOUSE_OVER_OUT" : None
        }
        self.eventArgs = {
            "MOUSE_LEFT_BUTTON_UP" : None,
            "MOUSE_LEFT_BUTTON_DOWN" : None,
            "MOUSE_RIGHT_BUTTON_UP" : None,
            "MOUSE_RIGHT_BUTTON_DOWN" : None,
            "MOUSE_OVER_IN" : None,
            "MOUSE_OVER_OUT" : None
        }


    def __del__(self):
        Window.__del__(self)
       
        self.eventFunc = None
        self.eventArgs = None

    def RegisterWindow(self, layer):
        self.hWnd = wndMgr.RegisterImageBox(self, layer)

    def LoadImage(self, imageName):
        self.name=imageName
        wndMgr.LoadImage(self.hWnd, imageName)

        if len(self.eventDict)!=0:
            print "LOAD IMAGE", self, self.eventDict

    if app.INGAME_WIKI:
        def UnloadImage(self):
            wndMgr.UnloadImage(self.hWnd)

    def SetAlpha(self, alpha):
        wndMgr.SetDiffuseColor(self.hWnd, 1.0, 1.0, 1.0, alpha)

    def GetWidth(self):
        return wndMgr.GetWidth(self.hWnd)

    def GetHeight(self):
        return wndMgr.GetHeight(self.hWnd)

    def SetEvent(self, func, *args) :
        result = self.eventFunc.has_key(args[0])
        if result :
            self.eventFunc[args[0]] = func
            self.eventArgs[args[0]] = args
        else :
            print "[ERROR] ui.py SetEvent, Can`t Find has_key : %s" % args[0]
           
    def SAFE_SetEvent(self, func, *args):
        result = self.eventFunc.has_key(args[0])      
        if result :
            self.eventFunc[args[0]] = __mem_func__(func)
            self.eventArgs[args[0]] = args
        else :
            print "[ERROR] ui.py SAFE_SetEvent, Can`t Find has_key : %s" % args[0]

    def OnMouseLeftButtonUp(self):
        if self.eventFunc["MOUSE_LEFT_BUTTON_UP"] :
            apply(self.eventFunc["MOUSE_LEFT_BUTTON_UP"], self.eventArgs["MOUSE_LEFT_BUTTON_UP"])
           
    def OnMouseLeftButtonDown(self):
        if self.eventFunc["MOUSE_LEFT_BUTTON_DOWN"] :
            apply(self.eventFunc["MOUSE_LEFT_BUTTON_DOWN"], self.eventArgs["MOUSE_LEFT_BUTTON_DOWN"])
   
    def OnMouseRightButtonUp(self):
        if self.eventFunc["MOUSE_RIGHT_BUTTON_UP"] :
            apply(self.eventFunc["MOUSE_RIGHT_BUTTON_UP"], self.eventArgs["MOUSE_RIGHT_BUTTON_UP"])
           
    def OnMouseRightButtonDown(self):
        if self.eventFunc["MOUSE_RIGHT_BUTTON_DOWN"] :
            apply(self.eventFunc["MOUSE_RIGHT_BUTTON_DOWN"], self.eventArgs["MOUSE_RIGHT_BUTTON_DOWN"])


    if app.INGAME_WIKI:
        def OnMouseOverIn(self):
            self.__OnMouseOverIn()
       
        def OnMouseOverOut(self):
            self.__OnMouseOverOut()
       
        def __OnMouseOverIn(self):
            try:
                apply(self.eventDict["MOUSE_OVER_IN"], self.argDict["MOUSE_OVER_IN"])
            except KeyError:
                pass
       
        def __OnMouseOverOut(self):
            try:
                apply(self.eventDict["MOUSE_OVER_OUT"], self.argDict["MOUSE_OVER_OUT"])
            except KeyError:
                pass
       
        def OnMouseLeftButtonDown(self):
            if self.eventDict.has_key("MOUSE_LEFT_DOWN"):
                apply(self.eventDict["MOUSE_LEFT_DOWN"], self.argDict["MOUSE_LEFT_DOWN"])
    else:
        def OnMouseOverIn(self):
            try:
                self.eventDict["MOUSE_OVER_IN"]()
            except KeyError:
                pass

        def OnMouseOverOut(self):
            try:
                self.eventDict["MOUSE_OVER_OUT"]()
            except KeyError:
                pass


    ##def SAFE_SetStringEvent(self, event, func, *args):
    ##    self.eventDict[event] =__mem_func__(func)
    ##    self.eventArgs[event] = args

    def SAFE_SetStringEvent(self, event, func, *args): #fix
        self.eventDict[event]=__mem_func__(func)
        self.argDict[event]=args

    def SetOnMouseLeftButtonUpEvent(self, event, *args):
        self.eventFunc["MOUSE_LEFT_BUTTON_UP"] = event
        self.eventArgs["MOUSE_LEFT_BUTTON_UP"] = args

    def LeftRightReverse(self):
        wndMgr.LeftRightReverseImageBox(self.hWnd)

    def SetCoolTime(self, time):
        wndMgr.SetCoolTimeImageBox(self.hWnd, time)

    def SetStartCoolTime(self, time):
        wndMgr.SetStartCoolTimeImageBox(self.hWnd, time)


Pisti95
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst