forked from metin2/client
714 lines
22 KiB
Python
714 lines
22 KiB
Python
|
import ui
|
|||
|
import locale
|
|||
|
import chr
|
|||
|
import item
|
|||
|
import app
|
|||
|
import skill
|
|||
|
import player
|
|||
|
import uiToolTip
|
|||
|
import math
|
|||
|
|
|||
|
# 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" % (lovePoint, fileName))
|
|||
|
|
|||
|
self.SetScale(0.7, 0.7)
|
|||
|
|
|||
|
self.toolTip.ClearToolTip()
|
|||
|
self.toolTip.SetTitle(self.loverName)
|
|||
|
self.toolTip.AppendTextLine(locale.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(locale.LEVEL_LIST[grade])
|
|||
|
except IndexError:
|
|||
|
print "HorseImage.SetState(level=%d, health=%d, battery=%d) - Unknown Index" % (level, health, battery)
|
|||
|
return
|
|||
|
|
|||
|
try:
|
|||
|
healthName=locale.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(locale.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(locale.TOOLTIP_AUTO_POTION_HP)
|
|||
|
else:
|
|||
|
self.toolTip.SetTitle(locale.TOOLTIP_AUTO_POTION_SP)
|
|||
|
|
|||
|
self.toolTip.AppendTextLine(locale.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
|
|||
|
|
|||
|
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
|
|||
|
|
|||
|
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 = locale.SecondToDHM(self.endTime - app.GetGlobalTimeStamp())
|
|||
|
toolTip += " (%s : %s)" % (locale.LEFT_TIME, leftTime)
|
|||
|
self.SetToolTipText(toolTip, 0, 40)
|
|||
|
|
|||
|
#<23><><EFBFBD>Ϲ<EFBFBD><CFB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|||
|
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 OnMouseOverIn(self):
|
|||
|
if self.toolTipText:
|
|||
|
self.toolTipText.Show()
|
|||
|
|
|||
|
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
|
|||
|
|
|||
|
AFFECT_DATA_DICT = {
|
|||
|
chr.AFFECT_POISON : (locale.SKILL_TOXICDIE, "d:/ymir work/ui/skill/common/affect/poison.sub"),
|
|||
|
chr.AFFECT_SLOW : (locale.SKILL_SLOW, "d:/ymir work/ui/skill/common/affect/slow.sub"),
|
|||
|
chr.AFFECT_STUN : (locale.SKILL_STUN, "d:/ymir work/ui/skill/common/affect/stun.sub"),
|
|||
|
|
|||
|
chr.AFFECT_ATT_SPEED_POTION : (locale.SKILL_INC_ATKSPD, "d:/ymir work/ui/skill/common/affect/Increase_Attack_Speed.sub"),
|
|||
|
chr.AFFECT_MOV_SPEED_POTION : (locale.SKILL_INC_MOVSPD, "d:/ymir work/ui/skill/common/affect/Increase_Move_Speed.sub"),
|
|||
|
chr.AFFECT_FISH_MIND : (locale.SKILL_FISHMIND, "d:/ymir work/ui/skill/common/affect/fishmind.sub"),
|
|||
|
|
|||
|
chr.AFFECT_JEONGWI : (locale.SKILL_JEONGWI, "d:/ymir work/ui/skill/warrior/jeongwi_03.sub",),
|
|||
|
chr.AFFECT_GEOMGYEONG : (locale.SKILL_GEOMGYEONG, "d:/ymir work/ui/skill/warrior/geomgyeong_03.sub",),
|
|||
|
chr.AFFECT_CHEONGEUN : (locale.SKILL_CHEONGEUN, "d:/ymir work/ui/skill/warrior/cheongeun_03.sub",),
|
|||
|
chr.AFFECT_GYEONGGONG : (locale.SKILL_GYEONGGONG, "d:/ymir work/ui/skill/assassin/gyeonggong_03.sub",),
|
|||
|
chr.AFFECT_EUNHYEONG : (locale.SKILL_EUNHYEONG, "d:/ymir work/ui/skill/assassin/eunhyeong_03.sub",),
|
|||
|
chr.AFFECT_GWIGEOM : (locale.SKILL_GWIGEOM, "d:/ymir work/ui/skill/sura/gwigeom_03.sub",),
|
|||
|
chr.AFFECT_GONGPO : (locale.SKILL_GONGPO, "d:/ymir work/ui/skill/sura/gongpo_03.sub",),
|
|||
|
chr.AFFECT_JUMAGAP : (locale.SKILL_JUMAGAP, "d:/ymir work/ui/skill/sura/jumagap_03.sub"),
|
|||
|
chr.AFFECT_HOSIN : (locale.SKILL_HOSIN, "d:/ymir work/ui/skill/shaman/hosin_03.sub",),
|
|||
|
chr.AFFECT_BOHO : (locale.SKILL_BOHO, "d:/ymir work/ui/skill/shaman/boho_03.sub",),
|
|||
|
chr.AFFECT_KWAESOK : (locale.SKILL_KWAESOK, "d:/ymir work/ui/skill/shaman/kwaesok_03.sub",),
|
|||
|
chr.AFFECT_HEUKSIN : (locale.SKILL_HEUKSIN, "d:/ymir work/ui/skill/sura/heuksin_03.sub",),
|
|||
|
chr.AFFECT_MUYEONG : (locale.SKILL_MUYEONG, "d:/ymir work/ui/skill/sura/muyeong_03.sub",),
|
|||
|
chr.AFFECT_GICHEON : (locale.SKILL_GICHEON, "d:/ymir work/ui/skill/shaman/gicheon_03.sub",),
|
|||
|
chr.AFFECT_JEUNGRYEOK : (locale.SKILL_JEUNGRYEOK, "d:/ymir work/ui/skill/shaman/jeungryeok_03.sub",),
|
|||
|
chr.AFFECT_PABEOP : (locale.SKILL_PABEOP, "d:/ymir work/ui/skill/sura/pabeop_03.sub",),
|
|||
|
chr.AFFECT_FALLEN_CHEONGEUN : (locale.SKILL_CHEONGEUN, "d:/ymir work/ui/skill/warrior/cheongeun_03.sub",),
|
|||
|
28 : (locale.SKILL_FIRE, "d:/ymir work/ui/skill/sura/hwayeom_03.sub",),
|
|||
|
chr.AFFECT_CHINA_FIREWORK : (locale.SKILL_POWERFUL_STRIKE, "d:/ymir work/ui/skill/common/affect/powerfulstrike.sub",),
|
|||
|
|
|||
|
#64 - END
|
|||
|
chr.NEW_AFFECT_EXP_BONUS : (locale.TOOLTIP_MALL_EXPBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/exp_bonus.sub",),
|
|||
|
|
|||
|
chr.NEW_AFFECT_ITEM_BONUS : (locale.TOOLTIP_MALL_ITEMBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/item_bonus.sub",),
|
|||
|
chr.NEW_AFFECT_SAFEBOX : (locale.TOOLTIP_MALL_SAFEBOX, "d:/ymir work/ui/skill/common/affect/safebox.sub",),
|
|||
|
chr.NEW_AFFECT_AUTOLOOT : (locale.TOOLTIP_MALL_AUTOLOOT, "d:/ymir work/ui/skill/common/affect/autoloot.sub",),
|
|||
|
chr.NEW_AFFECT_FISH_MIND : (locale.TOOLTIP_MALL_FISH_MIND, "d:/ymir work/ui/skill/common/affect/fishmind.sub",),
|
|||
|
chr.NEW_AFFECT_MARRIAGE_FAST : (locale.TOOLTIP_MALL_MARRIAGE_FAST, "d:/ymir work/ui/skill/common/affect/marriage_fast.sub",),
|
|||
|
chr.NEW_AFFECT_GOLD_BONUS : (locale.TOOLTIP_MALL_GOLDBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/gold_bonus.sub",),
|
|||
|
|
|||
|
chr.NEW_AFFECT_NO_DEATH_PENALTY : (locale.TOOLTIP_APPLY_NO_DEATH_PENALTY, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
|||
|
chr.NEW_AFFECT_SKILL_BOOK_BONUS : (locale.TOOLTIP_APPLY_SKILL_BOOK_BONUS, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
|||
|
chr.NEW_AFFECT_SKILL_BOOK_NO_DELAY : (locale.TOOLTIP_APPLY_SKILL_BOOK_NO_DELAY, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
|||
|
|
|||
|
# <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> hp, sp
|
|||
|
chr.NEW_AFFECT_AUTO_HP_RECOVERY : (locale.TOOLTIP_AUTO_POTION_REST, "d:/ymir work/ui/pattern/auto_hpgauge/05.dds"),
|
|||
|
chr.NEW_AFFECT_AUTO_SP_RECOVERY : (locale.TOOLTIP_AUTO_POTION_REST, "d:/ymir work/ui/pattern/auto_spgauge/05.dds"),
|
|||
|
#chr.NEW_AFFECT_AUTO_HP_RECOVERY : (locale.TOOLTIP_AUTO_POTION_REST, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
|||
|
#chr.NEW_AFFECT_AUTO_SP_RECOVERY : (locale.TOOLTIP_AUTO_POTION_REST, "d:/ymir work/ui/skill/common/affect/gold_bonus.sub"),
|
|||
|
|
|||
|
MALL_DESC_IDX_START+player.POINT_MALL_ATTBONUS : (locale.TOOLTIP_MALL_ATTBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/att_bonus.sub",),
|
|||
|
MALL_DESC_IDX_START+player.POINT_MALL_DEFBONUS : (locale.TOOLTIP_MALL_DEFBONUS_STATIC, "d:/ymir work/ui/skill/common/affect/def_bonus.sub",),
|
|||
|
MALL_DESC_IDX_START+player.POINT_MALL_EXPBONUS : (locale.TOOLTIP_MALL_EXPBONUS, "d:/ymir work/ui/skill/common/affect/exp_bonus.sub",),
|
|||
|
MALL_DESC_IDX_START+player.POINT_MALL_ITEMBONUS : (locale.TOOLTIP_MALL_ITEMBONUS, "d:/ymir work/ui/skill/common/affect/item_bonus.sub",),
|
|||
|
MALL_DESC_IDX_START+player.POINT_MALL_GOLDBONUS : (locale.TOOLTIP_MALL_GOLDBONUS, "d:/ymir work/ui/skill/common/affect/gold_bonus.sub",),
|
|||
|
MALL_DESC_IDX_START+player.POINT_CRITICAL_PCT : (locale.TOOLTIP_APPLY_CRITICAL_PCT,"d:/ymir work/ui/skill/common/affect/critical.sub"),
|
|||
|
MALL_DESC_IDX_START+player.POINT_PENETRATE_PCT : (locale.TOOLTIP_APPLY_PENETRATE_PCT, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
|||
|
MALL_DESC_IDX_START+player.POINT_MAX_HP_PCT : (locale.TOOLTIP_MAX_HP_PCT, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
|||
|
MALL_DESC_IDX_START+player.POINT_MAX_SP_PCT : (locale.TOOLTIP_MAX_SP_PCT, "d:/ymir work/ui/skill/common/affect/gold_premium.sub"),
|
|||
|
|
|||
|
MALL_DESC_IDX_START+player.POINT_PC_BANG_EXP_BONUS : (locale.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: (locale.TOOLTIP_MALL_ITEMBONUS_P_STATIC, "d:/ymir work/ui/skill/common/affect/Item_Bonus_p_on.sub",),
|
|||
|
}
|
|||
|
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
|||
|
# <20><>ȥ<EFBFBD><C8A5> õ, <20><> <20><>.
|
|||
|
AFFECT_DATA_DICT[chr.NEW_AFFECT_DRAGON_SOUL_DECK1] = (locale.TOOLTIP_DRAGON_SOUL_DECK1, "d:/ymir work/ui/dragonsoul/buff_ds_sky1.tga")
|
|||
|
AFFECT_DATA_DICT[chr.NEW_AFFECT_DRAGON_SOUL_DECK2] = (locale.TOOLTIP_DRAGON_SOUL_DECK2, "d:/ymir work/ui/dragonsoul/buff_ds_land1.tga")
|
|||
|
|
|||
|
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): ## <20><>ų <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD>۴ϴ<DBB4>.
|
|||
|
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
|
|||
|
|
|||
|
## <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȣ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Duration <20><> 0 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
|||
|
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 affect != chr.NEW_AFFECT_AUTO_SP_RECOVERY and affect != chr.NEW_AFFECT_AUTO_HP_RECOVERY:
|
|||
|
description = description(float(value))
|
|||
|
|
|||
|
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()
|
|||
|
|
|||
|
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 locale.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)
|
|||
|
|
|||
|
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
|
|||
|
|