forked from metin2/client
1237 lines
36 KiB
Python
1237 lines
36 KiB
Python
import ui
|
||
import uiScriptLocale
|
||
import app
|
||
import net
|
||
import dbg
|
||
import snd
|
||
import player
|
||
import mouseModule
|
||
import wndMgr
|
||
import skill
|
||
import playerSettingModule
|
||
import quest
|
||
import locale
|
||
import uiToolTip
|
||
import constInfo
|
||
import emotion
|
||
import chr
|
||
|
||
SHOW_ONLY_ACTIVE_SKILL = FALSE
|
||
SHOW_LIMIT_SUPPORT_SKILL_LIST = []
|
||
HIDE_SUPPORT_SKILL_POINT = FALSE
|
||
|
||
if locale.IsYMIR():
|
||
SHOW_LIMIT_SUPPORT_SKILL_LIST = [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140,141,142]
|
||
if not locale.IsCHEONMA():
|
||
HIDE_SUPPORT_SKILL_POINT = TRUE
|
||
SHOW_LIMIT_SUPPORT_SKILL_LIST = [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140,141,142]
|
||
elif locale.IsJAPAN() or (locale.IsEUROPE() and app.GetLocalePath() != "locale/ca") and (locale.IsEUROPE() and app.GetLocalePath() != "locale/br"):
|
||
HIDE_SUPPORT_SKILL_POINT = TRUE
|
||
SHOW_LIMIT_SUPPORT_SKILL_LIST = [121, 122, 123, 124, 126, 127, 129, 128, 131, 137, 138, 139, 140]
|
||
else:
|
||
HIDE_SUPPORT_SKILL_POINT = TRUE
|
||
|
||
FACE_IMAGE_DICT = {
|
||
playerSettingModule.RACE_WARRIOR_M : "icon/face/warrior_m.tga",
|
||
playerSettingModule.RACE_WARRIOR_W : "icon/face/warrior_w.tga",
|
||
playerSettingModule.RACE_ASSASSIN_M : "icon/face/assassin_m.tga",
|
||
playerSettingModule.RACE_ASSASSIN_W : "icon/face/assassin_w.tga",
|
||
playerSettingModule.RACE_SURA_M : "icon/face/sura_m.tga",
|
||
playerSettingModule.RACE_SURA_W : "icon/face/sura_w.tga",
|
||
playerSettingModule.RACE_SHAMAN_M : "icon/face/shaman_m.tga",
|
||
playerSettingModule.RACE_SHAMAN_W : "icon/face/shaman_w.tga",
|
||
}
|
||
def unsigned32(n):
|
||
return n & 0xFFFFFFFFL
|
||
|
||
class CharacterWindow(ui.ScriptWindow):
|
||
|
||
ACTIVE_PAGE_SLOT_COUNT = 8
|
||
SUPPORT_PAGE_SLOT_COUNT = 12
|
||
|
||
PAGE_SLOT_COUNT = 12
|
||
PAGE_HORSE = 2
|
||
|
||
SKILL_GROUP_NAME_DICT = {
|
||
playerSettingModule.JOB_WARRIOR : { 1 : locale.SKILL_GROUP_WARRIOR_1, 2 : locale.SKILL_GROUP_WARRIOR_2, },
|
||
playerSettingModule.JOB_ASSASSIN : { 1 : locale.SKILL_GROUP_ASSASSIN_1, 2 : locale.SKILL_GROUP_ASSASSIN_2, },
|
||
playerSettingModule.JOB_SURA : { 1 : locale.SKILL_GROUP_SURA_1, 2 : locale.SKILL_GROUP_SURA_2, },
|
||
playerSettingModule.JOB_SHAMAN : { 1 : locale.SKILL_GROUP_SHAMAN_1, 2 : locale.SKILL_GROUP_SHAMAN_2, },
|
||
}
|
||
|
||
STAT_DESCRIPTION = {
|
||
"HTH" : locale.STAT_TOOLTIP_CON,
|
||
"INT" : locale.STAT_TOOLTIP_INT,
|
||
"STR" : locale.STAT_TOOLTIP_STR,
|
||
"DEX" : locale.STAT_TOOLTIP_DEX,
|
||
}
|
||
|
||
|
||
STAT_MINUS_DESCRIPTION = locale.STAT_MINUS_DESCRIPTION
|
||
|
||
def __init__(self):
|
||
ui.ScriptWindow.__init__(self)
|
||
self.state = "STATUS"
|
||
self.isLoaded = 0
|
||
|
||
self.toolTipSkill = 0
|
||
|
||
self.__Initialize()
|
||
self.__LoadWindow()
|
||
|
||
self.statusPlusCommandDict={
|
||
"HTH" : "/stat ht",
|
||
"INT" : "/stat iq",
|
||
"STR" : "/stat st",
|
||
"DEX" : "/stat dx",
|
||
}
|
||
|
||
self.statusMinusCommandDict={
|
||
"HTH-" : "/stat- ht",
|
||
"INT-" : "/stat- iq",
|
||
"STR-" : "/stat- st",
|
||
"DEX-" : "/stat- dx",
|
||
}
|
||
|
||
def __del__(self):
|
||
ui.ScriptWindow.__del__(self)
|
||
|
||
def __Initialize(self):
|
||
self.refreshToolTip = 0
|
||
self.curSelectedSkillGroup = 0
|
||
self.canUseHorseSkill = -1
|
||
|
||
self.toolTip = None
|
||
self.toolTipJob = None
|
||
self.toolTipAlignment = None
|
||
self.toolTipSkill = None
|
||
|
||
self.faceImage = None
|
||
self.statusPlusLabel = None
|
||
self.statusPlusValue = None
|
||
self.activeSlot = None
|
||
self.tabDict = None
|
||
self.tabButtonDict = None
|
||
self.pageDict = None
|
||
self.titleBarDict = None
|
||
self.statusPlusButtonDict = None
|
||
self.statusMinusButtonDict = None
|
||
|
||
self.skillPageDict = None
|
||
self.questShowingStartIndex = 0
|
||
self.questScrollBar = None
|
||
self.questSlot = None
|
||
self.questNameList = None
|
||
self.questLastTimeList = None
|
||
self.questLastCountList = None
|
||
self.skillGroupButton = ()
|
||
|
||
self.activeSlot = None
|
||
self.activeSkillPointValue = None
|
||
self.supportSkillPointValue = None
|
||
self.skillGroupButton1 = None
|
||
self.skillGroupButton2 = None
|
||
self.activeSkillGroupName = None
|
||
|
||
self.guildNameSlot = None
|
||
self.guildNameValue = None
|
||
self.characterNameSlot = None
|
||
self.characterNameValue = None
|
||
|
||
self.emotionToolTip = None
|
||
self.soloEmotionSlot = None
|
||
self.dualEmotionSlot = None
|
||
|
||
def Show(self):
|
||
self.__LoadWindow()
|
||
|
||
ui.ScriptWindow.Show(self)
|
||
|
||
def __LoadScript(self, fileName):
|
||
pyScrLoader = ui.PythonScriptLoader()
|
||
pyScrLoader.LoadScriptFile(self, fileName)
|
||
|
||
def __BindObject(self):
|
||
self.toolTip = uiToolTip.ToolTip()
|
||
self.toolTipJob = uiToolTip.ToolTip()
|
||
self.toolTipAlignment = uiToolTip.ToolTip(130)
|
||
|
||
self.faceImage = self.GetChild("Face_Image")
|
||
|
||
faceSlot=self.GetChild("Face_Slot")
|
||
if 949 == app.GetDefaultCodePage():
|
||
faceSlot.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowJobToolTip)
|
||
faceSlot.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideJobToolTip)
|
||
|
||
self.statusPlusLabel = self.GetChild("Status_Plus_Label")
|
||
self.statusPlusValue = self.GetChild("Status_Plus_Value")
|
||
|
||
self.characterNameSlot = self.GetChild("Character_Name_Slot")
|
||
self.characterNameValue = self.GetChild("Character_Name")
|
||
self.guildNameSlot = self.GetChild("Guild_Name_Slot")
|
||
self.guildNameValue = self.GetChild("Guild_Name")
|
||
self.characterNameSlot.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowAlignmentToolTip)
|
||
self.characterNameSlot.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideAlignmentToolTip)
|
||
|
||
self.activeSlot = self.GetChild("Skill_Active_Slot")
|
||
self.activeSkillPointValue = self.GetChild("Active_Skill_Point_Value")
|
||
self.supportSkillPointValue = self.GetChild("Support_Skill_Point_Value")
|
||
self.skillGroupButton1 = self.GetChild("Skill_Group_Button_1")
|
||
self.skillGroupButton2 = self.GetChild("Skill_Group_Button_2")
|
||
self.activeSkillGroupName = self.GetChild("Active_Skill_Group_Name")
|
||
|
||
self.tabDict = {
|
||
"STATUS" : self.GetChild("Tab_01"),
|
||
"SKILL" : self.GetChild("Tab_02"),
|
||
"EMOTICON" : self.GetChild("Tab_03"),
|
||
"QUEST" : self.GetChild("Tab_04"),
|
||
}
|
||
|
||
self.tabButtonDict = {
|
||
"STATUS" : self.GetChild("Tab_Button_01"),
|
||
"SKILL" : self.GetChild("Tab_Button_02"),
|
||
"EMOTICON" : self.GetChild("Tab_Button_03"),
|
||
"QUEST" : self.GetChild("Tab_Button_04")
|
||
}
|
||
|
||
self.pageDict = {
|
||
"STATUS" : self.GetChild("Character_Page"),
|
||
"SKILL" : self.GetChild("Skill_Page"),
|
||
"EMOTICON" : self.GetChild("Emoticon_Page"),
|
||
"QUEST" : self.GetChild("Quest_Page")
|
||
}
|
||
|
||
self.titleBarDict = {
|
||
"STATUS" : self.GetChild("Character_TitleBar"),
|
||
"SKILL" : self.GetChild("Skill_TitleBar"),
|
||
"EMOTICON" : self.GetChild("Emoticon_TitleBar"),
|
||
"QUEST" : self.GetChild("Quest_TitleBar")
|
||
}
|
||
|
||
self.statusPlusButtonDict = {
|
||
"HTH" : self.GetChild("HTH_Plus"),
|
||
"INT" : self.GetChild("INT_Plus"),
|
||
"STR" : self.GetChild("STR_Plus"),
|
||
"DEX" : self.GetChild("DEX_Plus"),
|
||
}
|
||
|
||
self.statusMinusButtonDict = {
|
||
"HTH-" : self.GetChild("HTH_Minus"),
|
||
"INT-" : self.GetChild("INT_Minus"),
|
||
"STR-" : self.GetChild("STR_Minus"),
|
||
"DEX-" : self.GetChild("DEX_Minus"),
|
||
}
|
||
|
||
self.skillPageDict = {
|
||
"ACTIVE" : self.GetChild("Skill_Active_Slot"),
|
||
"SUPPORT" : self.GetChild("Skill_ETC_Slot"),
|
||
"HORSE" : self.GetChild("Skill_Active_Slot"),
|
||
}
|
||
|
||
self.skillPageStatDict = {
|
||
"SUPPORT" : player.SKILL_SUPPORT,
|
||
"ACTIVE" : player.SKILL_ACTIVE,
|
||
"HORSE" : player.SKILL_HORSE,
|
||
}
|
||
|
||
self.skillGroupButton = (
|
||
self.GetChild("Skill_Group_Button_1"),
|
||
self.GetChild("Skill_Group_Button_2"),
|
||
)
|
||
|
||
|
||
global SHOW_ONLY_ACTIVE_SKILL
|
||
global HIDE_SUPPORT_SKILL_POINT
|
||
if SHOW_ONLY_ACTIVE_SKILL or HIDE_SUPPORT_SKILL_POINT:
|
||
self.GetChild("Support_Skill_Point_Label").Hide()
|
||
|
||
self.soloEmotionSlot = self.GetChild("SoloEmotionSlot")
|
||
self.dualEmotionSlot = self.GetChild("DualEmotionSlot")
|
||
self.__SetEmotionSlot()
|
||
|
||
self.questShowingStartIndex = 0
|
||
self.questScrollBar = self.GetChild("Quest_ScrollBar")
|
||
self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.OnQuestScroll))
|
||
self.questSlot = self.GetChild("Quest_Slot")
|
||
for i in xrange(quest.QUEST_MAX_NUM):
|
||
self.questSlot.HideSlotBaseImage(i)
|
||
self.questSlot.SetCoverButton(i,\
|
||
"d:/ymir work/ui/game/quest/slot_button_01.sub",\
|
||
"d:/ymir work/ui/game/quest/slot_button_02.sub",\
|
||
"d:/ymir work/ui/game/quest/slot_button_03.sub",\
|
||
"d:/ymir work/ui/game/quest/slot_button_03.sub", TRUE)
|
||
|
||
self.questNameList = []
|
||
self.questLastTimeList = []
|
||
self.questLastCountList = []
|
||
for i in xrange(quest.QUEST_MAX_NUM):
|
||
self.questNameList.append(self.GetChild("Quest_Name_0" + str(i)))
|
||
self.questLastTimeList.append(self.GetChild("Quest_LastTime_0" + str(i)))
|
||
self.questLastCountList.append(self.GetChild("Quest_LastCount_0" + str(i)))
|
||
|
||
def __SetSkillSlotEvent(self):
|
||
for skillPageValue in self.skillPageDict.itervalues():
|
||
skillPageValue.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
|
||
skillPageValue.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectSkill))
|
||
skillPageValue.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptySlot))
|
||
skillPageValue.SetUnselectItemSlotEvent(ui.__mem_func__(self.ClickSkillSlot))
|
||
skillPageValue.SetUseSlotEvent(ui.__mem_func__(self.ClickSkillSlot))
|
||
skillPageValue.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
|
||
skillPageValue.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
|
||
skillPageValue.SetPressedSlotButtonEvent(ui.__mem_func__(self.OnPressedSlotButton))
|
||
skillPageValue.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\
|
||
"d:/ymir work/ui/game/windows/btn_plus_over.sub",\
|
||
"d:/ymir work/ui/game/windows/btn_plus_down.sub")
|
||
|
||
def __SetEmotionSlot(self):
|
||
|
||
self.emotionToolTip = uiToolTip.ToolTip()
|
||
|
||
for slot in (self.soloEmotionSlot, self.dualEmotionSlot):
|
||
slot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
|
||
slot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectEmotion))
|
||
slot.SetUnselectItemSlotEvent(ui.__mem_func__(self.__ClickEmotionSlot))
|
||
slot.SetUseSlotEvent(ui.__mem_func__(self.__ClickEmotionSlot))
|
||
slot.SetOverInItemEvent(ui.__mem_func__(self.__OverInEmotion))
|
||
slot.SetOverOutItemEvent(ui.__mem_func__(self.__OverOutEmotion))
|
||
slot.AppendSlotButton("d:/ymir work/ui/game/windows/btn_plus_up.sub",\
|
||
"d:/ymir work/ui/game/windows/btn_plus_over.sub",\
|
||
"d:/ymir work/ui/game/windows/btn_plus_down.sub")
|
||
|
||
for slotIdx, datadict in emotion.EMOTION_DICT.items():
|
||
emotionIdx = slotIdx
|
||
|
||
slot = self.soloEmotionSlot
|
||
if slotIdx > 50:
|
||
slot = self.dualEmotionSlot
|
||
|
||
slot.SetEmotionSlot(slotIdx, emotionIdx)
|
||
slot.SetCoverButton(slotIdx)
|
||
|
||
def __SelectEmotion(self, slotIndex):
|
||
if not slotIndex in emotion.EMOTION_DICT:
|
||
return
|
||
|
||
if app.IsPressed(app.DIK_LCONTROL):
|
||
player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_EMOTION, slotIndex)
|
||
return
|
||
|
||
mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_EMOTION, slotIndex, slotIndex)
|
||
|
||
def __ClickEmotionSlot(self, slotIndex):
|
||
print "click emotion"
|
||
if not slotIndex in emotion.EMOTION_DICT:
|
||
return
|
||
|
||
print "check acting"
|
||
if player.IsActingEmotion():
|
||
return
|
||
|
||
command = emotion.EMOTION_DICT[slotIndex]["command"]
|
||
print "command", command
|
||
|
||
if slotIndex > 50:
|
||
vid = player.GetTargetVID()
|
||
|
||
if 0 == vid or vid == player.GetMainCharacterIndex() or chr.IsNPC(vid) or chr.IsEnemy(vid):
|
||
import chat
|
||
chat.AppendChat(chat.CHAT_TYPE_INFO, locale.EMOTION_CHOOSE_ONE)
|
||
return
|
||
|
||
command += " " + chr.GetNameByVID(vid)
|
||
|
||
print "send_command", command
|
||
net.SendChatPacket(command)
|
||
|
||
def ActEmotion(self, emotionIndex):
|
||
self.__ClickEmotionSlot(emotionIndex)
|
||
|
||
def __OverInEmotion(self, slotIndex):
|
||
if self.emotionToolTip:
|
||
|
||
if not slotIndex in emotion.EMOTION_DICT:
|
||
return
|
||
|
||
self.emotionToolTip.ClearToolTip()
|
||
self.emotionToolTip.SetTitle(emotion.EMOTION_DICT[slotIndex]["name"])
|
||
self.emotionToolTip.AlignHorizonalCenter()
|
||
self.emotionToolTip.ShowToolTip()
|
||
|
||
def __OverOutEmotion(self):
|
||
if self.emotionToolTip:
|
||
self.emotionToolTip.HideToolTip()
|
||
|
||
def __BindEvent(self):
|
||
for i in xrange(len(self.skillGroupButton)):
|
||
self.skillGroupButton[i].SetEvent(lambda arg=i: self.__SelectSkillGroup(arg))
|
||
|
||
self.RefreshQuest()
|
||
self.__HideJobToolTip()
|
||
|
||
for (tabKey, tabButton) in self.tabButtonDict.items():
|
||
tabButton.SetEvent(ui.__mem_func__(self.__OnClickTabButton), tabKey)
|
||
|
||
for (statusPlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
|
||
statusPlusButton.SAFE_SetEvent(self.__OnClickStatusPlusButton, statusPlusKey)
|
||
statusPlusButton.ShowToolTip = lambda arg=statusPlusKey: self.__OverInStatButton(arg)
|
||
statusPlusButton.HideToolTip = lambda arg=statusPlusKey: self.__OverOutStatButton()
|
||
|
||
for (statusMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
|
||
statusMinusButton.SAFE_SetEvent(self.__OnClickStatusMinusButton, statusMinusKey)
|
||
statusMinusButton.ShowToolTip = lambda arg=statusMinusKey: self.__OverInStatMinusButton(arg)
|
||
statusMinusButton.HideToolTip = lambda arg=statusMinusKey: self.__OverOutStatMinusButton()
|
||
|
||
for titleBarValue in self.titleBarDict.itervalues():
|
||
titleBarValue.SetCloseEvent(ui.__mem_func__(self.Hide))
|
||
|
||
self.questSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectQuest))
|
||
|
||
def __LoadWindow(self):
|
||
if self.isLoaded == 1:
|
||
return
|
||
|
||
self.isLoaded = 1
|
||
|
||
try:
|
||
if locale.IsARABIC() or locale.IsVIETNAM() or locale.IsJAPAN():
|
||
self.__LoadScript(uiScriptLocale.LOCALE_UISCRIPT_PATH + "CharacterWindow.py")
|
||
else:
|
||
self.__LoadScript("UIScript/CharacterWindow.py")
|
||
|
||
self.__BindObject()
|
||
self.__BindEvent()
|
||
except:
|
||
import exception
|
||
exception.Abort("CharacterWindow.__LoadWindow")
|
||
|
||
#self.tabButtonDict["EMOTICON"].Disable()
|
||
self.SetState("STATUS")
|
||
|
||
def Destroy(self):
|
||
self.ClearDictionary()
|
||
|
||
self.__Initialize()
|
||
|
||
def Close(self):
|
||
if 0 != self.toolTipSkill:
|
||
self.toolTipSkill.Hide()
|
||
|
||
self.Hide()
|
||
|
||
def SetSkillToolTip(self, toolTipSkill):
|
||
self.toolTipSkill = toolTipSkill
|
||
|
||
def __OnClickStatusPlusButton(self, statusKey):
|
||
try:
|
||
statusPlusCommand=self.statusPlusCommandDict[statusKey]
|
||
net.SendChatPacket(statusPlusCommand)
|
||
except KeyError, msg:
|
||
dbg.TraceError("CharacterWindow.__OnClickStatusPlusButton KeyError: %s", msg)
|
||
|
||
def __OnClickStatusMinusButton(self, statusKey):
|
||
try:
|
||
statusMinusCommand=self.statusMinusCommandDict[statusKey]
|
||
net.SendChatPacket(statusMinusCommand)
|
||
except KeyError, msg:
|
||
dbg.TraceError("CharacterWindow.__OnClickStatusMinusButton KeyError: %s", msg)
|
||
|
||
|
||
def __OnClickTabButton(self, stateKey):
|
||
self.SetState(stateKey)
|
||
|
||
def SetState(self, stateKey):
|
||
|
||
self.state = stateKey
|
||
|
||
for (tabKey, tabButton) in self.tabButtonDict.items():
|
||
if stateKey!=tabKey:
|
||
tabButton.SetUp()
|
||
|
||
for tabValue in self.tabDict.itervalues():
|
||
tabValue.Hide()
|
||
|
||
for pageValue in self.pageDict.itervalues():
|
||
pageValue.Hide()
|
||
|
||
for titleBarValue in self.titleBarDict.itervalues():
|
||
titleBarValue.Hide()
|
||
|
||
self.titleBarDict[stateKey].Show()
|
||
self.tabDict[stateKey].Show()
|
||
self.pageDict[stateKey].Show()
|
||
|
||
|
||
def GetState(self):
|
||
return self.state
|
||
|
||
def __GetTotalAtkText(self):
|
||
minAtk=player.GetStatus(player.ATT_MIN)
|
||
maxAtk=player.GetStatus(player.ATT_MAX)
|
||
atkBonus=player.GetStatus(player.ATT_BONUS)
|
||
attackerBonus=player.GetStatus(player.ATTACKER_BONUS)
|
||
|
||
if minAtk==maxAtk:
|
||
return "%d" % (minAtk+atkBonus+attackerBonus)
|
||
else:
|
||
return "%d-%d" % (minAtk+atkBonus+attackerBonus, maxAtk+atkBonus+attackerBonus)
|
||
|
||
def __GetTotalMagAtkText(self):
|
||
minMagAtk=player.GetStatus(player.MAG_ATT)+player.GetStatus(player.MIN_MAGIC_WEP)
|
||
maxMagAtk=player.GetStatus(player.MAG_ATT)+player.GetStatus(player.MAX_MAGIC_WEP)
|
||
|
||
if minMagAtk==maxMagAtk:
|
||
return "%d" % (minMagAtk)
|
||
else:
|
||
return "%d-%d" % (minMagAtk, maxMagAtk)
|
||
|
||
def __GetTotalDefText(self):
|
||
defValue=player.GetStatus(player.DEF_GRADE)
|
||
if constInfo.ADD_DEF_BONUS_ENABLE:
|
||
defValue+=player.GetStatus(player.DEF_BONUS)
|
||
return "%d" % (defValue)
|
||
|
||
def RefreshStatus(self):
|
||
if self.isLoaded==0:
|
||
return
|
||
|
||
try:
|
||
self.GetChild("Level_Value").SetText(str(player.GetStatus(player.LEVEL)))
|
||
self.GetChild("Exp_Value").SetText(str(unsigned32(player.GetEXP())))
|
||
self.GetChild("RestExp_Value").SetText(str(unsigned32(player.GetStatus(player.NEXT_EXP)) - unsigned32(player.GetStatus(player.EXP))))
|
||
self.GetChild("HP_Value").SetText(str(player.GetStatus(player.HP)) + '/' + str(player.GetStatus(player.MAX_HP)))
|
||
self.GetChild("SP_Value").SetText(str(player.GetStatus(player.SP)) + '/' + str(player.GetStatus(player.MAX_SP)))
|
||
|
||
self.GetChild("STR_Value").SetText(str(player.GetStatus(player.ST)))
|
||
self.GetChild("DEX_Value").SetText(str(player.GetStatus(player.DX)))
|
||
self.GetChild("HTH_Value").SetText(str(player.GetStatus(player.HT)))
|
||
self.GetChild("INT_Value").SetText(str(player.GetStatus(player.IQ)))
|
||
|
||
self.GetChild("ATT_Value").SetText(self.__GetTotalAtkText())
|
||
self.GetChild("DEF_Value").SetText(self.__GetTotalDefText())
|
||
|
||
self.GetChild("MATT_Value").SetText(self.__GetTotalMagAtkText())
|
||
#self.GetChild("MATT_Value").SetText(str(player.GetStatus(player.MAG_ATT)))
|
||
|
||
self.GetChild("MDEF_Value").SetText(str(player.GetStatus(player.MAG_DEF)))
|
||
self.GetChild("ASPD_Value").SetText(str(player.GetStatus(player.ATT_SPEED)))
|
||
self.GetChild("MSPD_Value").SetText(str(player.GetStatus(player.MOVING_SPEED)))
|
||
self.GetChild("CSPD_Value").SetText(str(player.GetStatus(player.CASTING_SPEED)))
|
||
self.GetChild("ER_Value").SetText(str(player.GetStatus(player.EVADE_RATE)))
|
||
|
||
except:
|
||
#import exception
|
||
#exception.Abort("CharacterWindow.RefreshStatus.BindObject")
|
||
## <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ƨ<><C6A8> <20><><EFBFBD><EFBFBD>
|
||
pass
|
||
|
||
self.__RefreshStatusPlusButtonList()
|
||
self.__RefreshStatusMinusButtonList()
|
||
self.RefreshAlignment()
|
||
|
||
if self.refreshToolTip:
|
||
self.refreshToolTip()
|
||
|
||
def __RefreshStatusPlusButtonList(self):
|
||
if self.isLoaded==0:
|
||
return
|
||
|
||
statusPlusPoint=player.GetStatus(player.STAT)
|
||
|
||
if statusPlusPoint>0:
|
||
self.statusPlusValue.SetText(str(statusPlusPoint))
|
||
self.statusPlusLabel.Show()
|
||
self.ShowStatusPlusButtonList()
|
||
else:
|
||
self.statusPlusValue.SetText(str(0))
|
||
self.statusPlusLabel.Hide()
|
||
self.HideStatusPlusButtonList()
|
||
|
||
def __RefreshStatusMinusButtonList(self):
|
||
if self.isLoaded==0:
|
||
return
|
||
|
||
statusMinusPoint=self.__GetStatMinusPoint()
|
||
|
||
if statusMinusPoint>0:
|
||
self.__ShowStatusMinusButtonList()
|
||
else:
|
||
self.__HideStatusMinusButtonList()
|
||
|
||
def RefreshAlignment(self):
|
||
point, grade = player.GetAlignmentData()
|
||
|
||
import colorInfo
|
||
COLOR_DICT = { 0 : colorInfo.TITLE_RGB_GOOD_4,
|
||
1 : colorInfo.TITLE_RGB_GOOD_3,
|
||
2 : colorInfo.TITLE_RGB_GOOD_2,
|
||
3 : colorInfo.TITLE_RGB_GOOD_1,
|
||
4 : colorInfo.TITLE_RGB_NORMAL,
|
||
5 : colorInfo.TITLE_RGB_EVIL_1,
|
||
6 : colorInfo.TITLE_RGB_EVIL_2,
|
||
7 : colorInfo.TITLE_RGB_EVIL_3,
|
||
8 : colorInfo.TITLE_RGB_EVIL_4, }
|
||
colorList = COLOR_DICT.get(grade, colorInfo.TITLE_RGB_NORMAL)
|
||
gradeColor = ui.GenerateColor(colorList[0], colorList[1], colorList[2])
|
||
|
||
self.toolTipAlignment.ClearToolTip()
|
||
self.toolTipAlignment.AutoAppendTextLine(locale.TITLE_NAME_LIST[grade], gradeColor)
|
||
self.toolTipAlignment.AutoAppendTextLine(locale.ALIGNMENT_NAME + str(point))
|
||
self.toolTipAlignment.AlignHorizonalCenter()
|
||
|
||
def __ShowStatusMinusButtonList(self):
|
||
for (stateMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
|
||
statusMinusButton.Show()
|
||
|
||
def __HideStatusMinusButtonList(self):
|
||
for (stateMinusKey, statusMinusButton) in self.statusMinusButtonDict.items():
|
||
statusMinusButton.Hide()
|
||
|
||
def ShowStatusPlusButtonList(self):
|
||
for (statePlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
|
||
statusPlusButton.Show()
|
||
|
||
def HideStatusPlusButtonList(self):
|
||
for (statePlusKey, statusPlusButton) in self.statusPlusButtonDict.items():
|
||
statusPlusButton.Hide()
|
||
|
||
def SelectSkill(self, skillSlotIndex):
|
||
|
||
mouseController = mouseModule.mouseController
|
||
|
||
if FALSE == mouseController.isAttached():
|
||
|
||
srcSlotIndex = self.__RealSkillSlotToSourceSlot(skillSlotIndex)
|
||
selectedSkillIndex = player.GetSkillIndex(srcSlotIndex)
|
||
|
||
if skill.CanUseSkill(selectedSkillIndex):
|
||
|
||
if app.IsPressed(app.DIK_LCONTROL):
|
||
|
||
player.RequestAddToEmptyLocalQuickSlot(player.SLOT_TYPE_SKILL, srcSlotIndex)
|
||
return
|
||
|
||
mouseController.AttachObject(self, player.SLOT_TYPE_SKILL, srcSlotIndex, selectedSkillIndex)
|
||
|
||
else:
|
||
|
||
mouseController.DeattachObject()
|
||
|
||
def SelectEmptySlot(self, SlotIndex):
|
||
mouseModule.mouseController.DeattachObject()
|
||
|
||
## ToolTip
|
||
def OverInItem(self, slotNumber):
|
||
|
||
if mouseModule.mouseController.isAttached():
|
||
return
|
||
|
||
if 0 == self.toolTipSkill:
|
||
return
|
||
|
||
srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotNumber)
|
||
skillIndex = player.GetSkillIndex(srcSlotIndex)
|
||
skillLevel = player.GetSkillLevel(srcSlotIndex)
|
||
skillGrade = player.GetSkillGrade(srcSlotIndex)
|
||
skillType = skill.GetSkillType(skillIndex)
|
||
|
||
## ACTIVE
|
||
if skill.SKILL_TYPE_ACTIVE == skillType:
|
||
overInSkillGrade = self.__GetSkillGradeFromSlot(slotNumber)
|
||
|
||
if overInSkillGrade == skill.SKILL_GRADE_COUNT-1 and skillGrade == skill.SKILL_GRADE_COUNT:
|
||
self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
|
||
elif overInSkillGrade == skillGrade:
|
||
self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, overInSkillGrade, skillLevel)
|
||
else:
|
||
self.toolTipSkill.SetSkillOnlyName(srcSlotIndex, skillIndex, overInSkillGrade)
|
||
|
||
else:
|
||
self.toolTipSkill.SetSkillNew(srcSlotIndex, skillIndex, skillGrade, skillLevel)
|
||
|
||
def OverOutItem(self):
|
||
if 0 != self.toolTipSkill:
|
||
self.toolTipSkill.HideToolTip()
|
||
|
||
## Quest
|
||
def __SelectQuest(self, slotIndex):
|
||
questIndex = quest.GetQuestIndex(self.questShowingStartIndex+slotIndex)
|
||
|
||
import event
|
||
event.QuestButtonClick(-2147483648 + questIndex)
|
||
|
||
def RefreshQuest(self):
|
||
|
||
if self.isLoaded==0:
|
||
return
|
||
|
||
questCount = quest.GetQuestCount()
|
||
questRange = range(quest.QUEST_MAX_NUM)
|
||
|
||
if questCount > quest.QUEST_MAX_NUM:
|
||
self.questScrollBar.Show()
|
||
else:
|
||
self.questScrollBar.Hide()
|
||
|
||
for i in questRange[:questCount]:
|
||
(questName, questIcon, questCounterName, questCounterValue) = quest.GetQuestData(self.questShowingStartIndex+i)
|
||
|
||
self.questNameList[i].SetText(questName)
|
||
self.questNameList[i].Show()
|
||
self.questLastCountList[i].Show()
|
||
self.questLastTimeList[i].Show()
|
||
|
||
if len(questCounterName) > 0:
|
||
self.questLastCountList[i].SetText("%s : %d" % (questCounterName, questCounterValue))
|
||
else:
|
||
self.questLastCountList[i].SetText("")
|
||
|
||
## Icon
|
||
self.questSlot.SetSlot(i, i, 1, 1, questIcon)
|
||
|
||
for i in questRange[questCount:]:
|
||
self.questNameList[i].Hide()
|
||
self.questLastTimeList[i].Hide()
|
||
self.questLastCountList[i].Hide()
|
||
self.questSlot.ClearSlot(i)
|
||
self.questSlot.HideSlotBaseImage(i)
|
||
|
||
self.__UpdateQuestClock()
|
||
|
||
def __UpdateQuestClock(self):
|
||
if "QUEST" == self.state:
|
||
# QUEST_LIMIT_COUNT_BUG_FIX
|
||
for i in xrange(min(quest.GetQuestCount(), quest.QUEST_MAX_NUM)):
|
||
# END_OF_QUEST_LIMIT_COUNT_BUG_FIX
|
||
(lastName, lastTime) = quest.GetQuestLastTime(i)
|
||
|
||
clockText = locale.QUEST_UNLIMITED_TIME
|
||
if len(lastName) > 0:
|
||
|
||
if lastTime <= 0:
|
||
clockText = locale.QUEST_TIMEOVER
|
||
|
||
else:
|
||
questLastMinute = lastTime / 60
|
||
questLastSecond = lastTime % 60
|
||
|
||
clockText = lastName + " : "
|
||
|
||
if questLastMinute > 0:
|
||
clockText += str(questLastMinute) + locale.QUEST_MIN
|
||
if questLastSecond > 0:
|
||
clockText += " "
|
||
|
||
if questLastSecond > 0:
|
||
clockText += str(questLastSecond) + locale.QUEST_SEC
|
||
|
||
self.questLastTimeList[i].SetText(clockText)
|
||
|
||
def __GetStatMinusPoint(self):
|
||
POINT_STAT_RESET_COUNT = 112
|
||
return player.GetStatus(POINT_STAT_RESET_COUNT)
|
||
|
||
def __OverInStatMinusButton(self, stat):
|
||
try:
|
||
self.__ShowStatToolTip(self.STAT_MINUS_DESCRIPTION[stat] % self.__GetStatMinusPoint())
|
||
except KeyError:
|
||
pass
|
||
|
||
self.refreshToolTip = lambda arg=stat: self.__OverInStatMinusButton(arg)
|
||
|
||
def __OverOutStatMinusButton(self):
|
||
self.__HideStatToolTip()
|
||
self.refreshToolTip = 0
|
||
|
||
def __OverInStatButton(self, stat):
|
||
try:
|
||
self.__ShowStatToolTip(self.STAT_DESCRIPTION[stat])
|
||
except KeyError:
|
||
pass
|
||
|
||
def __OverOutStatButton(self):
|
||
self.__HideStatToolTip()
|
||
|
||
def __ShowStatToolTip(self, statDesc):
|
||
self.toolTip.ClearToolTip()
|
||
self.toolTip.AppendTextLine(statDesc)
|
||
self.toolTip.Show()
|
||
|
||
def __HideStatToolTip(self):
|
||
self.toolTip.Hide()
|
||
|
||
def OnPressEscapeKey(self):
|
||
self.Close()
|
||
return TRUE
|
||
|
||
def OnUpdate(self):
|
||
self.__UpdateQuestClock()
|
||
|
||
## Skill Process
|
||
def __RefreshSkillPage(self, name, slotCount):
|
||
global SHOW_LIMIT_SUPPORT_SKILL_LIST
|
||
|
||
skillPage = self.skillPageDict[name]
|
||
|
||
startSlotIndex = skillPage.GetStartIndex()
|
||
if "ACTIVE" == name:
|
||
if self.PAGE_HORSE == self.curSelectedSkillGroup:
|
||
startSlotIndex += slotCount
|
||
|
||
getSkillType=skill.GetSkillType
|
||
getSkillIndex=player.GetSkillIndex
|
||
getSkillGrade=player.GetSkillGrade
|
||
getSkillLevel=player.GetSkillLevel
|
||
getSkillLevelUpPoint=skill.GetSkillLevelUpPoint
|
||
getSkillMaxLevel=skill.GetSkillMaxLevel
|
||
for i in xrange(slotCount+1):
|
||
|
||
slotIndex = i + startSlotIndex
|
||
skillIndex = getSkillIndex(slotIndex)
|
||
|
||
for j in xrange(skill.SKILL_GRADE_COUNT):
|
||
skillPage.ClearSlot(self.__GetRealSkillSlot(j, i))
|
||
|
||
if 0 == skillIndex:
|
||
continue
|
||
|
||
skillGrade = getSkillGrade(slotIndex)
|
||
skillLevel = getSkillLevel(slotIndex)
|
||
skillType = getSkillType(skillIndex)
|
||
|
||
## <20>¸<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> ó<><C3B3>
|
||
if player.SKILL_INDEX_RIDING == skillIndex:
|
||
if 1 == skillGrade:
|
||
skillLevel += 19
|
||
elif 2 == skillGrade:
|
||
skillLevel += 29
|
||
elif 3 == skillGrade:
|
||
skillLevel = 40
|
||
|
||
skillPage.SetSkillSlotNew(slotIndex, skillIndex, max(skillLevel-1, 0), skillLevel)
|
||
skillPage.SetSlotCount(slotIndex, skillLevel)
|
||
|
||
## ACTIVE
|
||
elif skill.SKILL_TYPE_ACTIVE == skillType:
|
||
for j in xrange(skill.SKILL_GRADE_COUNT):
|
||
realSlotIndex = self.__GetRealSkillSlot(j, slotIndex)
|
||
skillPage.SetSkillSlotNew(realSlotIndex, skillIndex, j, skillLevel)
|
||
skillPage.SetCoverButton(realSlotIndex)
|
||
|
||
if (skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT-1):
|
||
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
|
||
elif (not self.__CanUseSkillNow()) or (skillGrade != j):
|
||
skillPage.SetSlotCount(realSlotIndex, 0)
|
||
skillPage.DisableCoverButton(realSlotIndex)
|
||
else:
|
||
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
|
||
|
||
## <20><EFBFBD>
|
||
else:
|
||
if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
|
||
realSlotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
|
||
skillPage.SetSkillSlot(realSlotIndex, skillIndex, skillLevel)
|
||
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
|
||
|
||
if skill.CanUseSkill(skillIndex):
|
||
skillPage.SetCoverButton(realSlotIndex)
|
||
|
||
skillPage.RefreshSlot()
|
||
|
||
|
||
def RefreshSkill(self):
|
||
|
||
if self.isLoaded==0:
|
||
return
|
||
|
||
if self.__IsChangedHorseRidingSkillLevel():
|
||
self.RefreshCharacter()
|
||
return
|
||
|
||
|
||
global SHOW_ONLY_ACTIVE_SKILL
|
||
if SHOW_ONLY_ACTIVE_SKILL:
|
||
self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
|
||
else:
|
||
self.__RefreshSkillPage("ACTIVE", self.ACTIVE_PAGE_SLOT_COUNT)
|
||
self.__RefreshSkillPage("SUPPORT", self.SUPPORT_PAGE_SLOT_COUNT)
|
||
|
||
self.RefreshSkillPlusButtonList()
|
||
|
||
def CanShowPlusButton(self, skillIndex, skillLevel, curStatPoint):
|
||
|
||
## <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
if 0 == skillIndex:
|
||
return FALSE
|
||
|
||
## <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵٸ<D1B4>
|
||
if not skill.CanLevelUpSkill(skillIndex, skillLevel):
|
||
return FALSE
|
||
|
||
return TRUE
|
||
|
||
def __RefreshSkillPlusButton(self, name):
|
||
global HIDE_SUPPORT_SKILL_POINT
|
||
if HIDE_SUPPORT_SKILL_POINT and "SUPPORT" == name:
|
||
return
|
||
|
||
slotWindow = self.skillPageDict[name]
|
||
slotWindow.HideAllSlotButton()
|
||
|
||
slotStatType = self.skillPageStatDict[name]
|
||
if 0 == slotStatType:
|
||
return
|
||
|
||
statPoint = player.GetStatus(slotStatType)
|
||
startSlotIndex = slotWindow.GetStartIndex()
|
||
if "HORSE" == name:
|
||
startSlotIndex += self.ACTIVE_PAGE_SLOT_COUNT
|
||
|
||
if statPoint > 0:
|
||
for i in xrange(self.PAGE_SLOT_COUNT):
|
||
slotIndex = i + startSlotIndex
|
||
skillIndex = player.GetSkillIndex(slotIndex)
|
||
skillGrade = player.GetSkillGrade(slotIndex)
|
||
skillLevel = player.GetSkillLevel(slotIndex)
|
||
|
||
if skillIndex == 0:
|
||
continue
|
||
if skillGrade != 0:
|
||
continue
|
||
|
||
if name == "HORSE":
|
||
if player.GetStatus(player.LEVEL) >= skill.GetSkillLevelLimit(skillIndex):
|
||
if skillLevel < 20:
|
||
slotWindow.ShowSlotButton(self.__GetETCSkillRealSlotIndex(slotIndex))
|
||
|
||
else:
|
||
if "SUPPORT" == name:
|
||
if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
|
||
if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
|
||
slotWindow.ShowSlotButton(slotIndex)
|
||
else:
|
||
if self.CanShowPlusButton(skillIndex, skillLevel, statPoint):
|
||
slotWindow.ShowSlotButton(slotIndex)
|
||
|
||
|
||
def RefreshSkillPlusButtonList(self):
|
||
|
||
if self.isLoaded==0:
|
||
return
|
||
|
||
self.RefreshSkillPlusPointLabel()
|
||
|
||
if not self.__CanUseSkillNow():
|
||
return
|
||
|
||
try:
|
||
if self.PAGE_HORSE == self.curSelectedSkillGroup:
|
||
self.__RefreshSkillPlusButton("HORSE")
|
||
else:
|
||
self.__RefreshSkillPlusButton("ACTIVE")
|
||
|
||
self.__RefreshSkillPlusButton("SUPPORT")
|
||
|
||
except:
|
||
import exception
|
||
exception.Abort("CharacterWindow.RefreshSkillPlusButtonList.BindObject")
|
||
|
||
def RefreshSkillPlusPointLabel(self):
|
||
if self.isLoaded==0:
|
||
return
|
||
|
||
if self.PAGE_HORSE == self.curSelectedSkillGroup:
|
||
activeStatPoint = player.GetStatus(player.SKILL_HORSE)
|
||
self.activeSkillPointValue.SetText(str(activeStatPoint))
|
||
|
||
else:
|
||
activeStatPoint = player.GetStatus(player.SKILL_ACTIVE)
|
||
self.activeSkillPointValue.SetText(str(activeStatPoint))
|
||
|
||
supportStatPoint = max(0, player.GetStatus(player.SKILL_SUPPORT))
|
||
self.supportSkillPointValue.SetText(str(supportStatPoint))
|
||
|
||
## Skill Level Up Button
|
||
def OnPressedSlotButton(self, slotNumber):
|
||
srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotNumber)
|
||
|
||
skillIndex = player.GetSkillIndex(srcSlotIndex)
|
||
curLevel = player.GetSkillLevel(srcSlotIndex)
|
||
maxLevel = skill.GetSkillMaxLevel(skillIndex)
|
||
|
||
net.SendChatPacket("/skillup " + str(skillIndex))
|
||
|
||
## Use Skill
|
||
def ClickSkillSlot(self, slotIndex):
|
||
|
||
srcSlotIndex = self.__RealSkillSlotToSourceSlot(slotIndex)
|
||
skillIndex = player.GetSkillIndex(srcSlotIndex)
|
||
skillType = skill.GetSkillType(skillIndex)
|
||
|
||
if not self.__CanUseSkillNow():
|
||
if skill.SKILL_TYPE_ACTIVE == skillType:
|
||
return
|
||
|
||
for slotWindow in self.skillPageDict.values():
|
||
if slotWindow.HasSlot(slotIndex):
|
||
if skill.CanUseSkill(skillIndex):
|
||
player.ClickSkillSlot(srcSlotIndex)
|
||
return
|
||
|
||
mouseModule.mouseController.DeattachObject()
|
||
|
||
## FIXME : <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<>Ƽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>Ѵ<EFBFBD>.
|
||
## <20>ſ<EFBFBD> <20><><EFBFBD>ո<EFBFBD>. <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>ҵ<EFBFBD>.
|
||
def OnUseSkill(self, slotIndex, coolTime):
|
||
|
||
skillIndex = player.GetSkillIndex(slotIndex)
|
||
skillType = skill.GetSkillType(skillIndex)
|
||
|
||
## ACTIVE
|
||
if skill.SKILL_TYPE_ACTIVE == skillType:
|
||
skillGrade = player.GetSkillGrade(slotIndex)
|
||
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
|
||
## ETC
|
||
else:
|
||
slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
|
||
|
||
for slotWindow in self.skillPageDict.values():
|
||
if slotWindow.HasSlot(slotIndex):
|
||
slotWindow.SetSlotCoolTime(slotIndex, coolTime)
|
||
return
|
||
|
||
def OnActivateSkill(self, slotIndex):
|
||
|
||
skillGrade = player.GetSkillGrade(slotIndex)
|
||
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
|
||
|
||
for slotWindow in self.skillPageDict.values():
|
||
if slotWindow.HasSlot(slotIndex):
|
||
slotWindow.ActivateSlot(slotIndex)
|
||
return
|
||
|
||
def OnDeactivateSkill(self, slotIndex):
|
||
|
||
skillGrade = player.GetSkillGrade(slotIndex)
|
||
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
|
||
|
||
for slotWindow in self.skillPageDict.values():
|
||
if slotWindow.HasSlot(slotIndex):
|
||
slotWindow.DeactivateSlot(slotIndex)
|
||
return
|
||
|
||
def __ShowJobToolTip(self):
|
||
self.toolTipJob.ShowToolTip()
|
||
|
||
def __HideJobToolTip(self):
|
||
self.toolTipJob.HideToolTip()
|
||
|
||
def __SetJobText(self, mainJob, subJob):
|
||
if player.GetStatus(player.LEVEL)<5:
|
||
subJob=0
|
||
|
||
if 949 == app.GetDefaultCodePage():
|
||
self.toolTipJob.ClearToolTip()
|
||
|
||
try:
|
||
jobInfoTitle=locale.JOBINFO_TITLE[mainJob][subJob]
|
||
jobInfoData=locale.JOBINFO_DATA_LIST[mainJob][subJob]
|
||
except IndexError:
|
||
print "uiCharacter.CharacterWindow.__SetJobText(mainJob=%d, subJob=%d)" % (mainJob, subJob)
|
||
return
|
||
|
||
self.toolTipJob.AutoAppendTextLine(jobInfoTitle)
|
||
self.toolTipJob.AppendSpace(5)
|
||
|
||
for jobInfoDataLine in jobInfoData:
|
||
self.toolTipJob.AutoAppendTextLine(jobInfoDataLine)
|
||
|
||
self.toolTipJob.AlignHorizonalCenter()
|
||
|
||
def __ShowAlignmentToolTip(self):
|
||
self.toolTipAlignment.ShowToolTip()
|
||
|
||
def __HideAlignmentToolTip(self):
|
||
self.toolTipAlignment.HideToolTip()
|
||
|
||
def RefreshCharacter(self):
|
||
|
||
if self.isLoaded==0:
|
||
return
|
||
|
||
## Name
|
||
try:
|
||
characterName = player.GetName()
|
||
guildName = player.GetGuildName()
|
||
self.characterNameValue.SetText(characterName)
|
||
self.guildNameValue.SetText(guildName)
|
||
if not guildName:
|
||
if locale.IsARABIC():
|
||
self.characterNameSlot.SetPosition(190, 34)
|
||
else:
|
||
self.characterNameSlot.SetPosition(109, 34)
|
||
|
||
self.guildNameSlot.Hide()
|
||
else:
|
||
if locale.IsJAPAN():
|
||
self.characterNameSlot.SetPosition(143, 34)
|
||
else:
|
||
self.characterNameSlot.SetPosition(153, 34)
|
||
self.guildNameSlot.Show()
|
||
except:
|
||
import exception
|
||
exception.Abort("CharacterWindow.RefreshCharacter.BindObject")
|
||
|
||
race = net.GetMainActorRace()
|
||
group = net.GetMainActorSkillGroup()
|
||
empire = net.GetMainActorEmpire()
|
||
|
||
## Job Text
|
||
job = chr.RaceToJob(race)
|
||
self.__SetJobText(job, group)
|
||
|
||
## FaceImage
|
||
try:
|
||
faceImageName = FACE_IMAGE_DICT[race]
|
||
|
||
try:
|
||
self.faceImage.LoadImage(faceImageName)
|
||
except:
|
||
print "CharacterWindow.RefreshCharacter(race=%d, faceImageName=%s)" % (race, faceImageName)
|
||
self.faceImage.Hide()
|
||
|
||
except KeyError:
|
||
self.faceImage.Hide()
|
||
|
||
## GroupName
|
||
self.__SetSkillGroupName(race, group)
|
||
|
||
## Skill
|
||
if 0 == group:
|
||
self.__SelectSkillGroup(0)
|
||
|
||
else:
|
||
self.__SetSkillSlotData(race, group, empire)
|
||
|
||
if self.__CanUseHorseSkill():
|
||
self.__SelectSkillGroup(0)
|
||
|
||
def __SetSkillGroupName(self, race, group):
|
||
|
||
job = chr.RaceToJob(race)
|
||
|
||
if not self.SKILL_GROUP_NAME_DICT.has_key(job):
|
||
return
|
||
|
||
nameList = self.SKILL_GROUP_NAME_DICT[job]
|
||
|
||
if 0 == group:
|
||
self.skillGroupButton1.SetText(nameList[1])
|
||
self.skillGroupButton2.SetText(nameList[2])
|
||
self.skillGroupButton1.Show()
|
||
self.skillGroupButton2.Show()
|
||
self.activeSkillGroupName.Hide()
|
||
|
||
else:
|
||
|
||
if self.__CanUseHorseSkill():
|
||
self.activeSkillGroupName.Hide()
|
||
self.skillGroupButton1.SetText(nameList.get(group, "Noname"))
|
||
self.skillGroupButton2.SetText(locale.SKILL_GROUP_HORSE)
|
||
self.skillGroupButton1.Show()
|
||
self.skillGroupButton2.Show()
|
||
|
||
else:
|
||
self.activeSkillGroupName.SetText(nameList.get(group, "Noname"))
|
||
self.activeSkillGroupName.Show()
|
||
self.skillGroupButton1.Hide()
|
||
self.skillGroupButton2.Hide()
|
||
|
||
def __SetSkillSlotData(self, race, group, empire=0):
|
||
|
||
## SkillIndex
|
||
playerSettingModule.RegisterSkill(race, group, empire)
|
||
|
||
## Event
|
||
self.__SetSkillSlotEvent()
|
||
|
||
## Refresh
|
||
self.RefreshSkill()
|
||
|
||
def __SelectSkillGroup(self, index):
|
||
for btn in self.skillGroupButton:
|
||
btn.SetUp()
|
||
self.skillGroupButton[index].Down()
|
||
|
||
if self.__CanUseHorseSkill():
|
||
if 0 == index:
|
||
index = net.GetMainActorSkillGroup()-1
|
||
elif 1 == index:
|
||
index = self.PAGE_HORSE
|
||
|
||
self.curSelectedSkillGroup = index
|
||
self.__SetSkillSlotData(net.GetMainActorRace(), index+1, net.GetMainActorEmpire())
|
||
|
||
def __CanUseSkillNow(self):
|
||
if 0 == net.GetMainActorSkillGroup():
|
||
return FALSE
|
||
|
||
return TRUE
|
||
|
||
def __CanUseHorseSkill(self):
|
||
|
||
slotIndex = player.GetSkillSlotIndex(player.SKILL_INDEX_RIDING)
|
||
|
||
if not slotIndex:
|
||
return FALSE
|
||
|
||
grade = player.GetSkillGrade(slotIndex)
|
||
level = player.GetSkillLevel(slotIndex)
|
||
if level < 0:
|
||
level *= -1
|
||
if grade >= 1 and level >= 1:
|
||
return TRUE
|
||
|
||
return FALSE
|
||
|
||
def __IsChangedHorseRidingSkillLevel(self):
|
||
ret = FALSE
|
||
|
||
if -1 == self.canUseHorseSkill:
|
||
self.canUseHorseSkill = self.__CanUseHorseSkill()
|
||
|
||
if self.canUseHorseSkill != self.__CanUseHorseSkill():
|
||
ret = TRUE
|
||
|
||
self.canUseHorseSkill = self.__CanUseHorseSkill()
|
||
return ret
|
||
|
||
def __GetRealSkillSlot(self, skillGrade, skillSlot):
|
||
return skillSlot + min(skill.SKILL_GRADE_COUNT-1, skillGrade)*skill.SKILL_GRADE_STEP_COUNT
|
||
|
||
def __GetETCSkillRealSlotIndex(self, skillSlot):
|
||
if skillSlot > 100:
|
||
return skillSlot
|
||
return skillSlot % self.ACTIVE_PAGE_SLOT_COUNT
|
||
|
||
def __RealSkillSlotToSourceSlot(self, realSkillSlot):
|
||
if realSkillSlot > 100:
|
||
return realSkillSlot
|
||
if self.PAGE_HORSE == self.curSelectedSkillGroup:
|
||
return realSkillSlot + self.ACTIVE_PAGE_SLOT_COUNT
|
||
return realSkillSlot % skill.SKILL_GRADE_STEP_COUNT
|
||
|
||
def __GetSkillGradeFromSlot(self, skillSlot):
|
||
return int(skillSlot / skill.SKILL_GRADE_STEP_COUNT)
|
||
|
||
def SelectSkillGroup(self, index):
|
||
self.__SelectSkillGroup(index)
|
||
|
||
def OnQuestScroll(self):
|
||
questCount = quest.GetQuestCount()
|
||
scrollLineCount = max(0, questCount - quest.QUEST_MAX_NUM)
|
||
startIndex = int(scrollLineCount * self.questScrollBar.GetPos())
|
||
|
||
if startIndex != self.questShowingStartIndex:
|
||
self.questShowingStartIndex = startIndex
|
||
self.RefreshQuest()
|