MR-2: Skilldesc charset fix + Macros removed

This commit is contained in:
Mind Rapist
2025-12-20 02:15:28 +02:00
parent b0e8c0bb2b
commit f8f06ba04d
7 changed files with 209 additions and 281 deletions

View File

@@ -117,7 +117,7 @@ class GameWindow(ui.ScriptWindow):
self.playerGauge = uiPlayerGauge.PlayerGauge(self) self.playerGauge = uiPlayerGauge.PlayerGauge(self)
self.playerGauge.Hide() self.playerGauge.Hide()
#wj 2014.1.2. ESC키를 누를 시 우선적으로 DropQuestionDialog를 끄도록 만들었다. 하지만 처음에 itemDropQuestionDialog가 선언되어 있지 않아 ERROR가 발생하여 init에서 선언과 동시에 초기화 시킴. #wj 2014.1.2. ESCŰ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><EFBFBD><ECBCB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DropQuestionDialog<6F><67> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> itemDropQuestionDialog<6F><67> <20><><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʾ<EFBFBD> ERROR<4F><52> <20>߻<EFBFBD><DFBB>Ͽ<EFBFBD> init<69><74><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ÿ<EFBFBD> <20>ʱ<EFBFBD>ȭ <20><>Ŵ.
self.itemDropQuestionDialog = None self.itemDropQuestionDialog = None
self.__SetQuickSlotMode() self.__SetQuickSlotMode()
@@ -226,7 +226,7 @@ class GameWindow(ui.ScriptWindow):
exception.Abort("GameWindow.Open") exception.Abort("GameWindow.Open")
# END_OF_START_GAME_ERROR_EXIT # END_OF_START_GAME_ERROR_EXIT
# NPC가 큐브시스템으로 만들 수 있는 아이템들의 목록을 캐싱 # NPC<EFBFBD><EFBFBD> ť<><C5A5>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>۵<EFBFBD><DBB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ij<><C4B3>
# ex) cubeInformation[20383] = [ {"rewordVNUM": 72723, "rewordCount": 1, "materialInfo": "101,1&102,2", "price": 999 }, ... ] # ex) cubeInformation[20383] = [ {"rewordVNUM": 72723, "rewordCount": 1, "materialInfo": "101,1&102,2", "price": 999 }, ... ]
self.cubeInformation = {} self.cubeInformation = {}
self.currentCubeNPC = 0 self.currentCubeNPC = 0
@@ -314,10 +314,10 @@ class GameWindow(ui.ScriptWindow):
def __BuildKeyDict(self): def __BuildKeyDict(self):
onPressKeyDict = {} onPressKeyDict = {}
##PressKey 는 누르고 있는 동안 계속 적용되는 키이다. ##PressKey <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>Ǵ<EFBFBD> Ű<>̴<EFBFBD>.
## 숫자 단축키 퀵슬롯에 이용된다.(이후 숫자들도 퀵 슬롯용 예약) ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ű <20><><EFBFBD><EFBFBD><EFBFBD>Կ<EFBFBD> <20>̿<EFBFBD>ȴ<EFBFBD>.(<28><><EFBFBD><EFBFBD> <20><><EFBFBD>ڵ鵵 <20><> <20><><EFBFBD>Կ<EFBFBD> <20><><EFBFBD><EFBFBD>)
## F12 는 클라 디버그용 키이므로 쓰지 않는 게 좋다. ## F12 <EFBFBD><EFBFBD> Ŭ<><C5AC> <20><><EFBFBD><EFBFBD>׿<EFBFBD> Ű<>̹Ƿ<CCB9> <20><><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD>.
onPressKeyDict[app.DIK_1] = lambda : self.__PressNumKey(1) onPressKeyDict[app.DIK_1] = lambda : self.__PressNumKey(1)
onPressKeyDict[app.DIK_2] = lambda : self.__PressNumKey(2) onPressKeyDict[app.DIK_2] = lambda : self.__PressNumKey(2)
onPressKeyDict[app.DIK_3] = lambda : self.__PressNumKey(3) onPressKeyDict[app.DIK_3] = lambda : self.__PressNumKey(3)
@@ -337,7 +337,7 @@ class GameWindow(ui.ScriptWindow):
onPressKeyDict[app.DIK_SYSRQ] = lambda : self.SaveScreen() onPressKeyDict[app.DIK_SYSRQ] = lambda : self.SaveScreen()
onPressKeyDict[app.DIK_SPACE] = lambda : self.StartAttack() onPressKeyDict[app.DIK_SPACE] = lambda : self.StartAttack()
#캐릭터 이동키 #ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>Ű
onPressKeyDict[app.DIK_UP] = lambda : self.MoveUp() onPressKeyDict[app.DIK_UP] = lambda : self.MoveUp()
onPressKeyDict[app.DIK_DOWN] = lambda : self.MoveDown() onPressKeyDict[app.DIK_DOWN] = lambda : self.MoveDown()
onPressKeyDict[app.DIK_LEFT] = lambda : self.MoveLeft() onPressKeyDict[app.DIK_LEFT] = lambda : self.MoveLeft()
@@ -564,12 +564,12 @@ class GameWindow(ui.ScriptWindow):
self.TextureNum.SetFontName(localeInfo.UI_DEF_FONT) self.TextureNum.SetFontName(localeInfo.UI_DEF_FONT)
self.TextureNum.SetPosition(wndMgr.GetScreenWidth() - 270, 100) self.TextureNum.SetPosition(wndMgr.GetScreenWidth() - 270, 100)
# 오브젝트 그리는 개수 # <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>׸<EFBFBD><D7B8><EFBFBD> <20><><EFBFBD><EFBFBD>
self.ObjectNum = ui.TextLine() self.ObjectNum = ui.TextLine()
self.ObjectNum.SetFontName(localeInfo.UI_DEF_FONT) self.ObjectNum.SetFontName(localeInfo.UI_DEF_FONT)
self.ObjectNum.SetPosition(wndMgr.GetScreenWidth() - 270, 120) self.ObjectNum.SetPosition(wndMgr.GetScreenWidth() - 270, 120)
# 시야거리 # <EFBFBD>þ߰Ÿ<EFBFBD>
self.ViewDistance = ui.TextLine() self.ViewDistance = ui.TextLine()
self.ViewDistance.SetFontName(localeInfo.UI_DEF_FONT) self.ViewDistance.SetFontName(localeInfo.UI_DEF_FONT)
self.ViewDistance.SetPosition(0, 0) self.ViewDistance.SetPosition(0, 0)
@@ -1017,8 +1017,7 @@ class GameWindow(ui.ScriptWindow):
messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend)) messengerAddFriendQuestion.SetAcceptEvent(ui.__mem_func__(self.OnAcceptAddFriend))
messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend)) messengerAddFriendQuestion.SetCancelEvent(ui.__mem_func__(self.OnDenyAddFriend))
if app.FIX_MESSENGER_ACTION_SYNC: messengerAddFriendQuestion.OnPressEscapeKey = ui.__mem_func__(self.OnDenyAddFriend) # ESC <20><> deny
messengerAddFriendQuestion.OnPressEscapeKey = ui.__mem_func__(self.OnDenyAddFriend) # ESC → deny
messengerAddFriendQuestion.Open() messengerAddFriendQuestion.Open()
messengerAddFriendQuestion.name = name messengerAddFriendQuestion.name = name
@@ -1313,7 +1312,7 @@ class GameWindow(ui.ScriptWindow):
self.__DropMoney(attachedType, attachedMoney) self.__DropMoney(attachedType, attachedMoney)
def __DropMoney(self, attachedType, attachedMoney): def __DropMoney(self, attachedType, attachedMoney):
# PRIVATESHOP_DISABLE_ITEM_DROP - 개인상점 열고 있는 동안 아이템 버림 방지 # PRIVATESHOP_DISABLE_ITEM_DROP - <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if uiPrivateShopBuilder.IsBuildingPrivateShop(): if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP)
return return
@@ -1335,7 +1334,7 @@ class GameWindow(ui.ScriptWindow):
self.itemDropQuestionDialog = itemDropQuestionDialog self.itemDropQuestionDialog = itemDropQuestionDialog
def __DropItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount): def __DropItem(self, attachedType, attachedItemIndex, attachedItemSlotPos, attachedItemCount):
# PRIVATESHOP_DISABLE_ITEM_DROP - 개인상점 열고 있는 동안 아이템 버림 방지 # PRIVATESHOP_DISABLE_ITEM_DROP - <EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if uiPrivateShopBuilder.IsBuildingPrivateShop(): if uiPrivateShopBuilder.IsBuildingPrivateShop():
chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP)
return return
@@ -1467,7 +1466,7 @@ class GameWindow(ui.ScriptWindow):
def UpdateDebugInfo(self): def UpdateDebugInfo(self):
# #
# 캐릭터 좌표 및 FPS 출력 # ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ <20><> FPS <EFBFBD><EFBFBD><EFBFBD>
(x, y, z) = player.GetMainCharacterPosition() (x, y, z) = player.GetMainCharacterPosition()
nUpdateTime = app.GetUpdateTime() nUpdateTime = app.GetUpdateTime()
nUpdateFPS = app.GetUpdateFPS() nUpdateFPS = app.GetUpdateFPS()
@@ -1630,22 +1629,22 @@ class GameWindow(ui.ScriptWindow):
def BINARY_Cube_Close(self): def BINARY_Cube_Close(self):
self.interface.CloseCubeWindow() self.interface.CloseCubeWindow()
# 제작에 필요한 골드, 예상되는 완성품의 VNUM과 개수 정보 update # <EFBFBD><EFBFBD><EFBFBD>ۿ<EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD>, <20><><EFBFBD><EFBFBD>Ǵ<EFBFBD> <20>ϼ<EFBFBD>ǰ<EFBFBD><C7B0> VNUM<55><4D> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> update
def BINARY_Cube_UpdateInfo(self, gold, itemVnum, count): def BINARY_Cube_UpdateInfo(self, gold, itemVnum, count):
self.interface.UpdateCubeInfo(gold, itemVnum, count) self.interface.UpdateCubeInfo(gold, itemVnum, count)
def BINARY_Cube_Succeed(self, itemVnum, count): def BINARY_Cube_Succeed(self, itemVnum, count):
print "큐브 제작 성공" print "ť<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"
self.interface.SucceedCubeWork(itemVnum, count) self.interface.SucceedCubeWork(itemVnum, count)
pass pass
def BINARY_Cube_Failed(self): def BINARY_Cube_Failed(self):
print "큐브 제작 실패" print "ť<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"
self.interface.FailedCubeWork() self.interface.FailedCubeWork()
pass pass
def BINARY_Cube_ResultList(self, npcVNUM, listText): def BINARY_Cube_ResultList(self, npcVNUM, listText):
# ResultList Text Format : 72723,1/72725,1/72730.1/50001,5 이런식으로 "/" 문자로 구분된 리스트를 줌 # ResultList Text Format : 72723,1/72725,1/72730.1/50001,5 <EFBFBD>̷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "/" <20><><EFBFBD>ڷ<EFBFBD> <20><><EFBFBD>е<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><>
#print listText #print listText
if npcVNUM == 0: if npcVNUM == 0:
@@ -1746,7 +1745,7 @@ class GameWindow(ui.ScriptWindow):
# END_OF_CUBE # END_OF_CUBE
# 용혼석 # <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
def BINARY_Highlight_Item(self, inven_type, inven_pos): def BINARY_Highlight_Item(self, inven_type, inven_pos):
self.interface.Highligt_Item(inven_type, inven_pos) self.interface.Highligt_Item(inven_type, inven_pos)
@@ -2184,7 +2183,6 @@ class GameWindow(ui.ScriptWindow):
# END_OF_WEDDING # END_OF_WEDDING
if app.FIX_REFRESH_SKILL_COOLDOWN: def SkillClearCoolTime(self, slotIndex):
def SkillClearCoolTime(self, slotIndex): self.interface.SkillClearCoolTime(slotIndex)
self.interface.SkillClearCoolTime(slotIndex)

View File

@@ -305,8 +305,7 @@ class Interface(object):
self.whisperDialogDict = {} self.whisperDialogDict = {}
self.privateShopAdvertisementBoardDict = {} self.privateShopAdvertisementBoardDict = {}
if app.FIX_MESSENGER_ACTION_SYNC: self.wndMessenger.InitializeHandler()
self.wndMessenger.InitializeHandler()
self.wndInventory.SetItemToolTip(self.tooltipItem) self.wndInventory.SetItemToolTip(self.tooltipItem)
@@ -540,10 +539,9 @@ class Interface(object):
def OnChangeCurrentSkill(self, skillSlotNumber): def OnChangeCurrentSkill(self, skillSlotNumber):
self.wndTaskBar.OnChangeCurrentSkill(skillSlotNumber) self.wndTaskBar.OnChangeCurrentSkill(skillSlotNumber)
if app.FIX_REFRESH_SKILL_COOLDOWN: def SkillClearCoolTime(self, slotIndex):
def SkillClearCoolTime(self, slotIndex): self.wndCharacter.SkillClearCoolTime(slotIndex)
self.wndCharacter.SkillClearCoolTime(slotIndex) self.wndTaskBar.SkillClearCoolTime(slotIndex)
self.wndTaskBar.SkillClearCoolTime(slotIndex)
def SelectMouseButtonEvent(self, dir, event): def SelectMouseButtonEvent(self, dir, event):
self.wndTaskBar.SelectMouseButtonEvent(dir, event) self.wndTaskBar.SelectMouseButtonEvent(dir, event)

View File

@@ -111,41 +111,34 @@ def RegisterSkill(race, group, empire = 0):
job = chr.RaceToJob(race) job = chr.RaceToJob(race)
# Ensure group 0 exists (horse-only) when cooldown fix is on # Ensure group 0 exists (horse-only) when cooldown fix is on
if app.FIX_REFRESH_SKILL_COOLDOWN and SKILL_INDEX_DICT.has_key(job): if not SKILL_INDEX_DICT[job].has_key(0):
if not SKILL_INDEX_DICT[job].has_key(0): # Assassin has 140 as well; others only 137-139
# Assassin has 140 as well; others only 137-139 SKILL_INDEX_DICT[job][0] = (0, 0, 0, 0, 0, 0, 0, 0,
SKILL_INDEX_DICT[job][0] = (0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 138, 0, 139, 0) + ((140,) if job == JOB_ASSASSIN else ())
137, 0, 138, 0, 139, 0) + ((140,) if job == JOB_ASSASSIN else ())
## Support Skills (Always register regardless of skill group) ## Support Skills (Always register regardless of skill group)
if app.FIX_REFRESH_SKILL_COOLDOWN: if SKILL_INDEX_DICT.has_key(job):
if SKILL_INDEX_DICT.has_key(job): supportSkillList = SKILL_INDEX_DICT[job].get("SUPPORT", ())
supportSkillList = SKILL_INDEX_DICT[job].get("SUPPORT", ())
for i in xrange(len(supportSkillList)): for i in xrange(len(supportSkillList)):
player.SetSkill(i + 100 + 1, supportSkillList[i]) player.SetSkill(i + 100 + 1, supportSkillList[i])
## Character Skill ## Character Skill
if SKILL_INDEX_DICT.has_key(job): if SKILL_INDEX_DICT.has_key(job):
if SKILL_INDEX_DICT[job].has_key(group): if SKILL_INDEX_DICT[job].has_key(group):
activeSkillList = SKILL_INDEX_DICT[job][group] activeSkillList = SKILL_INDEX_DICT[job][group]
if not app.FIX_REFRESH_SKILL_COOLDOWN: for i in xrange(len(activeSkillList)):
for i, idx in enumerate(activeSkillList): skillIndex = activeSkillList[i]
if i not in (6, 7): # keep skipping unused slots
player.SetSkill(i + 1, idx) ## 7<><37> 8<><38> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>ȵ<EFBFBD>
else: if i != 6 and i != 7:
for i in xrange(len(activeSkillList)): player.SetSkill(i + 1, skillIndex)
skillIndex = activeSkillList[i]
## 7<><37> 8<><38> <20><>ų<EFBFBD><C5B3> <20><><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> <20>ȵ<EFBFBD>
if i != 6 and i != 7:
player.SetSkill(i + 1, skillIndex)
supportSkillList = SKILL_INDEX_DICT[job]["SUPPORT"] supportSkillList = SKILL_INDEX_DICT[job]["SUPPORT"]
for i in xrange(len(supportSkillList)): for i in xrange(len(supportSkillList)):
player.SetSkill(i + 100 + 1, supportSkillList[i]) player.SetSkill(i + 100 + 1, supportSkillList[i])
## Language Skill ## Language Skill
if 0 != empire: if 0 != empire:

View File

@@ -885,7 +885,7 @@ class ExpandedImageBox(ImageBox):
def SetRenderingMode(self, mode): def SetRenderingMode(self, mode):
wndMgr.SetRenderingMode(self.hWnd, mode) wndMgr.SetRenderingMode(self.hWnd, mode)
# [0.0, 1.0] 사이의 값만큼 퍼센트로 그리지 않는다. # [0.0, 1.0] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ŭ <20>ۼ<EFBFBD>Ʈ<EFBFBD><C6AE> <20>׸<EFBFBD><D7B8><EFBFBD> <20>ʴ´<CAB4>.
def SetRenderingRect(self, left, top, right, bottom): def SetRenderingRect(self, left, top, right, bottom):
wndMgr.SetRenderingRect(self.hWnd, left, top, right, bottom) wndMgr.SetRenderingRect(self.hWnd, left, top, right, bottom)
@@ -1374,29 +1374,28 @@ class SlotWindow(Window):
return wndMgr.GetSlotCount(self.hWnd) return wndMgr.GetSlotCount(self.hWnd)
def SetUseMode(self, flag): def SetUseMode(self, flag):
"True일때만 ItemToItem 이 가능한지 보여준다" "True<EFBFBD>϶<EFBFBD><EFBFBD><EFBFBD> ItemToItem <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD>"
wndMgr.SetUseMode(self.hWnd, flag) wndMgr.SetUseMode(self.hWnd, flag)
def SetUsableItem(self, flag): def SetUsableItem(self, flag):
"True면 현재 가리킨 아이템이 ItemToItem 적용 가능하다" "True<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ų <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ItemToItem <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>"
wndMgr.SetUsableItem(self.hWnd, flag) wndMgr.SetUsableItem(self.hWnd, flag)
## Slot ## Slot
def SetSlotCoolTime(self, slotIndex, coolTime, elapsedTime = 0.0): def SetSlotCoolTime(self, slotIndex, coolTime, elapsedTime = 0.0):
wndMgr.SetSlotCoolTime(self.hWnd, slotIndex, coolTime, elapsedTime) wndMgr.SetSlotCoolTime(self.hWnd, slotIndex, coolTime, elapsedTime)
if app.FIX_REFRESH_SKILL_COOLDOWN: def StoreSlotCoolTime(self, key, slotIndex, coolTime, elapsedTime = 0.0):
def StoreSlotCoolTime(self, key, slotIndex, coolTime, elapsedTime = 0.0): wndMgr.StoreSlotCoolTime(self.hWnd, key, slotIndex, coolTime, elapsedTime)
wndMgr.StoreSlotCoolTime(self.hWnd, key, slotIndex, coolTime, elapsedTime)
def RestoreSlotCoolTime(self, key):
def RestoreSlotCoolTime(self, key): wndMgr.RestoreSlotCoolTime(self.hWnd, key)
wndMgr.RestoreSlotCoolTime(self.hWnd, key)
def TransferSlotCoolTime(self, slotIndex1, slotIndex2): def TransferSlotCoolTime(self, slotIndex1, slotIndex2):
wndMgr.TransferSlotCoolTime(self.hWnd, slotIndex1, slotIndex2) wndMgr.TransferSlotCoolTime(self.hWnd, slotIndex1, slotIndex2)
def ClearSlotCoolTime(self, slotIndex): def ClearSlotCoolTime(self, slotIndex):
wndMgr.ClearSlotCoolTime(self.hWnd, slotIndex) wndMgr.ClearSlotCoolTime(self.hWnd, slotIndex)
def DisableSlot(self, slotIndex): def DisableSlot(self, slotIndex):
wndMgr.DisableSlot(self.hWnd, slotIndex) wndMgr.DisableSlot(self.hWnd, slotIndex)
@@ -1549,7 +1548,7 @@ class TitleBar(Window):
def MakeTitleBar(self, width, color): def MakeTitleBar(self, width, color):
## 현재 Color는 사용하고 있지 않음 ## <EFBFBD><EFBFBD><EFBFBD><EFBFBD> Color<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
width = max(64, width) width = max(64, width)
@@ -2780,8 +2779,8 @@ class PythonScriptLoader(object):
print "===== Load Script File : %s" % (FileName) print "===== Load Script File : %s" % (FileName)
try: try:
# chr, player 등은 sandbox 내에서 import가 허용되지 않기 때문에,(봇이 악용할 여지가 매우 큼.) # chr, player <EFBFBD><EFBFBD><EFBFBD><EFBFBD> sandbox <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> import<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,(<28><><EFBFBD><EFBFBD> <20>ǿ<EFBFBD><C7BF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ſ<EFBFBD> ŭ.)
# 미리 script dictionary에 필요한 상수를 넣어놓는다. # <EFBFBD≯<EFBFBD> script dictionary<EFBFBD><EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD>´<EFBFBD>.
import chr import chr
import player import player
import app import app

View File

@@ -840,26 +840,24 @@ class CharacterWindow(ui.ScriptWindow):
skillPage.SetSlotCount(realSlotIndex, 0) skillPage.SetSlotCount(realSlotIndex, 0)
skillPage.DisableCoverButton(realSlotIndex) skillPage.DisableCoverButton(realSlotIndex)
if app.FIX_REFRESH_SKILL_COOLDOWN: if not player.IsSkillActive(slotIndex):
if not player.IsSkillActive(slotIndex): skillPage.DeactivateSlot(realSlotIndex)
skillPage.DeactivateSlot(realSlotIndex)
if player.IsSkillCoolTime(slotIndex) and skillGrade != j: if player.IsSkillCoolTime(slotIndex) and skillGrade != j:
skillPage.TransferSlotCoolTime(realSlotIndex, self.__GetRealSkillSlot(skillGrade, i)) skillPage.TransferSlotCoolTime(realSlotIndex, self.__GetRealSkillSlot(skillGrade, i))
else: else:
self.SkillClearCoolTime(realSlotIndex) self.SkillClearCoolTime(realSlotIndex)
else: else:
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel) skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
if app.FIX_REFRESH_SKILL_COOLDOWN: # Check if this is the active slot
# Check if this is the active slot # Grade 3 appears in slot 2, so check both conditions
# Grade 3 appears in slot 2, so check both conditions isActiveSlot = (skillGrade == j) or ((skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT - 1))
isActiveSlot = (skillGrade == j) or ((skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT - 1))
if player.IsSkillActive(slotIndex) and isActiveSlot:
if player.IsSkillActive(slotIndex) and isActiveSlot: skillPage.ActivateSlot(realSlotIndex)
skillPage.ActivateSlot(realSlotIndex) else:
else: skillPage.DeactivateSlot(realSlotIndex)
skillPage.DeactivateSlot(realSlotIndex)
else: else:
if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST: if not SHOW_LIMIT_SUPPORT_SKILL_LIST or skillIndex in SHOW_LIMIT_SUPPORT_SKILL_LIST:
realSlotIndex = self.__GetETCSkillRealSlotIndex(slotIndex) realSlotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
@@ -870,58 +868,52 @@ class CharacterWindow(ui.ScriptWindow):
if skill.CanUseSkill(skillIndex): if skill.CanUseSkill(skillIndex):
skillPage.SetCoverButton(realSlotIndex) skillPage.SetCoverButton(realSlotIndex)
if app.FIX_REFRESH_SKILL_COOLDOWN: # Clear storage for horse skills at level 0 BEFORE restore runs
# Clear storage for horse skills at level 0 BEFORE restore runs if skillType == skill.SKILL_TYPE_HORSE and skillLevel == 0:
if skillType == skill.SKILL_TYPE_HORSE and skillLevel == 0: player.ResetHorseSkillCoolTime(skillIndex, realSlotIndex)
player.ResetHorseSkillCoolTime(skillIndex, realSlotIndex) skillPage.SetSlotCoolTime(realSlotIndex, 0)
skillPage.SetSlotCoolTime(realSlotIndex, 0)
if player.IsSkillActive(slotIndex): if player.IsSkillActive(slotIndex):
skillPage.ActivateSlot(realSlotIndex) skillPage.ActivateSlot(realSlotIndex)
else:
skillPage.DeactivateSlot(realSlotIndex)
else: else:
if not player.IsSkillActive(slotIndex): skillPage.DeactivateSlot(realSlotIndex)
skillPage.DeactivateSlot(realSlotIndex)
skillPage.RefreshSlot() skillPage.RefreshSlot()
if app.FIX_REFRESH_SKILL_COOLDOWN: self.__RestoreSlotCoolTime(skillPage)
self.__RestoreSlotCoolTime(skillPage)
if app.FIX_REFRESH_SKILL_COOLDOWN: def __RestoreSlotCoolTime(self, skillPage):
def __RestoreSlotCoolTime(self, skillPage): restoreType = skill.SKILL_TYPE_NONE
restoreType = skill.SKILL_TYPE_NONE
if self.PAGE_HORSE == self.curSelectedSkillGroup: if self.PAGE_HORSE == self.curSelectedSkillGroup:
restoreType = skill.SKILL_TYPE_HORSE restoreType = skill.SKILL_TYPE_HORSE
else: else:
restoreType = skill.SKILL_TYPE_ACTIVE restoreType = skill.SKILL_TYPE_ACTIVE
skillPage.RestoreSlotCoolTime(restoreType) skillPage.RestoreSlotCoolTime(restoreType)
def __ClearHorseSkillQuickSlots(self): def __ClearHorseSkillQuickSlots(self):
HORSE_SKILL_SET = (137, 138, 139, 140) HORSE_SKILL_SET = (137, 138, 139, 140)
quick_slot_per_page = 8 # two quick_slot windows * 4 slots quick_slot_per_page = 8 # two quick_slot windows * 4 slots
quick_page_count = 4 # matches QUICKPAGE_NUMBER_FILENAME quick_page_count = 4 # matches QUICKPAGE_NUMBER_FILENAME
current_page = player.GetQuickPage() current_page = player.GetQuickPage()
for page in xrange(quick_page_count): for page in xrange(quick_page_count):
player.SetQuickPage(page) player.SetQuickPage(page)
for local_slot in xrange(quick_slot_per_page): for local_slot in xrange(quick_slot_per_page):
slotType, position = player.GetLocalQuickSlot(local_slot) slotType, position = player.GetLocalQuickSlot(local_slot)
if slotType != player.SLOT_TYPE_SKILL: if slotType != player.SLOT_TYPE_SKILL:
continue continue
skillIndex = player.GetSkillIndex(position) skillIndex = player.GetSkillIndex(position)
if skillIndex in HORSE_SKILL_SET: if skillIndex in HORSE_SKILL_SET:
player.RequestDeleteGlobalQuickSlot(page * quick_slot_per_page + local_slot) player.RequestDeleteGlobalQuickSlot(page * quick_slot_per_page + local_slot)
player.SetQuickPage(current_page) player.SetQuickPage(current_page)
def RefreshSkill(self): def RefreshSkill(self):
if self.isLoaded == 0: if self.isLoaded == 0:
@@ -1089,29 +1081,22 @@ class CharacterWindow(ui.ScriptWindow):
for slotWindow in self.skillPageDict.values(): for slotWindow in self.skillPageDict.values():
if slotWindow.HasSlot(slotIndex): if slotWindow.HasSlot(slotIndex):
if app.FIX_REFRESH_SKILL_COOLDOWN: slotWindow.StoreSlotCoolTime(skillType, slotIndex, coolTime)
slotWindow.StoreSlotCoolTime(skillType, slotIndex, coolTime) self.__RestoreSlotCoolTime(slotWindow)
self.__RestoreSlotCoolTime(slotWindow)
else:
slotWindow.SetSlotCoolTime(slotIndex, coolTime)
return return
def OnActivateSkill(self, slotIndex): def OnActivateSkill(self, slotIndex):
if app.FIX_REFRESH_SKILL_COOLDOWN: skillIndex = player.GetSkillIndex(slotIndex)
skillIndex = player.GetSkillIndex(slotIndex) skillType = skill.GetSkillType(skillIndex)
skillType = skill.GetSkillType(skillIndex)
## ACTIVE
## ACTIVE if skill.SKILL_TYPE_ACTIVE == skillType:
if skill.SKILL_TYPE_ACTIVE == skillType:
skillGrade = player.GetSkillGrade(slotIndex)
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
## ETC
else:
slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
else:
skillGrade = player.GetSkillGrade(slotIndex) skillGrade = player.GetSkillGrade(slotIndex)
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex) slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
## ETC
else:
slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
for slotWindow in self.skillPageDict.values(): for slotWindow in self.skillPageDict.values():
if slotWindow.HasSlot(slotIndex): if slotWindow.HasSlot(slotIndex):
@@ -1120,20 +1105,16 @@ class CharacterWindow(ui.ScriptWindow):
return return
def OnDeactivateSkill(self, slotIndex): def OnDeactivateSkill(self, slotIndex):
if app.FIX_REFRESH_SKILL_COOLDOWN: skillIndex = player.GetSkillIndex(slotIndex)
skillIndex = player.GetSkillIndex(slotIndex) skillType = skill.GetSkillType(skillIndex)
skillType = skill.GetSkillType(skillIndex)
## ACTIVE
## ACTIVE if skill.SKILL_TYPE_ACTIVE == skillType:
if skill.SKILL_TYPE_ACTIVE == skillType:
skillGrade = player.GetSkillGrade(slotIndex)
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
## ETC
else:
slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
else:
skillGrade = player.GetSkillGrade(slotIndex) skillGrade = player.GetSkillGrade(slotIndex)
slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex) slotIndex = self.__GetRealSkillSlot(skillGrade, slotIndex)
## ETC
else:
slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
for slotWindow in self.skillPageDict.values(): for slotWindow in self.skillPageDict.values():
if slotWindow.HasSlot(slotIndex): if slotWindow.HasSlot(slotIndex):
@@ -1144,25 +1125,24 @@ class CharacterWindow(ui.ScriptWindow):
def __ShowJobToolTip(self): def __ShowJobToolTip(self):
self.toolTipJob.ShowToolTip() self.toolTipJob.ShowToolTip()
if app.FIX_REFRESH_SKILL_COOLDOWN: def SkillClearCoolTime(self, slotIndex):
def SkillClearCoolTime(self, slotIndex): skillIndex = player.GetSkillIndex(slotIndex)
skillIndex = player.GetSkillIndex(slotIndex)
if skillIndex < 1:
if skillIndex < 1: return
return
skillType = skill.GetSkillType(skillIndex) skillType = skill.GetSkillType(skillIndex)
## ACTIVE ## ACTIVE
# Map to the correct visual slot based on skill type # Map to the correct visual slot based on skill type
if skill.SKILL_TYPE_ACTIVE == skillType: if skill.SKILL_TYPE_ACTIVE == skillType:
slotIndex = self.__GetRealSkillSlot(player.GetSkillGrade(slotIndex), slotIndex) slotIndex = self.__GetRealSkillSlot(player.GetSkillGrade(slotIndex), slotIndex)
else: else:
slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex) slotIndex = self.__GetETCSkillRealSlotIndex(slotIndex)
for slotWindow in self.skillPageDict.values(): for slotWindow in self.skillPageDict.values():
if slotWindow.HasSlot(slotIndex): if slotWindow.HasSlot(slotIndex):
slotWindow.SetSlotCoolTime(slotIndex, 0) slotWindow.SetSlotCoolTime(slotIndex, 0)
def __HideJobToolTip(self): def __HideJobToolTip(self):
self.toolTipJob.HideToolTip() self.toolTipJob.HideToolTip()
@@ -1248,16 +1228,12 @@ class CharacterWindow(ui.ScriptWindow):
## GroupName ## GroupName
self.__SetSkillGroupName(race, group) self.__SetSkillGroupName(race, group)
if app.FIX_REFRESH_SKILL_COOLDOWN: self.__SetSkillSlotData(race, group, empire)
self.__SetSkillSlotData(race, group, empire)
## Skill ## Skill
if 0 == group: if 0 == group:
self.__SelectSkillGroup(0) self.__SelectSkillGroup(0)
else: else:
if not app.FIX_REFRESH_SKILL_COOLDOWN:
self.__SetSkillSlotData(race, group, empire)
if self.__CanUseHorseSkill(): if self.__CanUseHorseSkill():
self.__SelectSkillGroup(0) self.__SelectSkillGroup(0)
@@ -1318,42 +1294,26 @@ class CharacterWindow(ui.ScriptWindow):
## Refresh ## Refresh
self.RefreshSkill() self.RefreshSkill()
if app.FIX_HORSE_SKILLS_TAB: def __SelectSkillGroup(self, pageIndex, (PAGE_SKILL_1, PAGE_SKILL_2, PAGE_SKILL_HORSE) = range(3)):
def __SelectSkillGroup(self, pageIndex, (PAGE_SKILL_1, PAGE_SKILL_2, PAGE_SKILL_HORSE) = range(3)): for pageButton in self.skillGroupButton:
for pageButton in self.skillGroupButton: pageButton.SetUp()
pageButton.SetUp()
self.skillGroupButton[pageIndex].Down() self.skillGroupButton[pageIndex].Down()
if pageIndex in (PAGE_SKILL_1, PAGE_SKILL_2): if pageIndex in (PAGE_SKILL_1, PAGE_SKILL_2):
skillGroupIndex = net.GetMainActorSkillGroup() skillGroupIndex = net.GetMainActorSkillGroup()
if bool(skillGroupIndex): if bool(skillGroupIndex):
(tmpCurSkillGroup, tmpSkillGroup) = (skillGroupIndex - 1, skillGroupIndex) (tmpCurSkillGroup, tmpSkillGroup) = (skillGroupIndex - 1, skillGroupIndex)
else: else:
(tmpCurSkillGroup, tmpSkillGroup) = (pageIndex, pageIndex + 1) (tmpCurSkillGroup, tmpSkillGroup) = (pageIndex, pageIndex + 1)
self.curSelectedSkillGroup = tmpCurSkillGroup self.curSelectedSkillGroup = tmpCurSkillGroup
self.__SetSkillSlotData(net.GetMainActorRace(), tmpSkillGroup, net.GetMainActorEmpire()) self.__SetSkillSlotData(net.GetMainActorRace(), tmpSkillGroup, net.GetMainActorEmpire())
elif pageIndex == PAGE_SKILL_HORSE and self.__CanUseHorseSkill(): elif pageIndex == PAGE_SKILL_HORSE and self.__CanUseHorseSkill():
self.curSelectedSkillGroup = self.PAGE_HORSE self.curSelectedSkillGroup = self.PAGE_HORSE
self.RefreshSkill() self.RefreshSkill()
else:
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): def __CanUseSkillNow(self):
if 0 == net.GetMainActorSkillGroup(): if 0 == net.GetMainActorSkillGroup():
@@ -1373,29 +1333,23 @@ class CharacterWindow(ui.ScriptWindow):
if level < 0: if level < 0:
level *= -1 level *= -1
if app.FIX_REFRESH_SKILL_COOLDOWN: # Map to UI-displayed riding level (matches __RefreshSkillPage logic)
# Map to UI-displayed riding level (matches __RefreshSkillPage logic) # grade 1: base 1..20 shown as 20..39 (offset +19)
# grade 1: base 1..20 shown as 20..39 (offset +19) # grade 2: base 1..10 shown as 30..39 (offset +29)
# grade 2: base 1..10 shown as 30..39 (offset +29) # grade 3: shown as 40
# grade 3: shown as 40 effective = 0
effective = 0
if grade >= 3: if grade >= 3:
effective = 40 effective = 40
elif grade == 2: elif grade == 2:
effective = level + 29 effective = level + 29
elif grade == 1: elif grade == 1:
effective = level + 19 effective = level + 19
else:
effective = level
# Require displayed riding level >= 21 to enable the horse page
return effective >= 21
else: else:
if grade >= 1 and level >= 1: effective = level
return True
return False # Require displayed riding level >= 21 to enable the horse page
return effective >= 21
def __IsChangedHorseRidingSkillLevel(self): def __IsChangedHorseRidingSkillLevel(self):
ret = False ret = False

View File

@@ -378,15 +378,13 @@ class MessengerWindow(ui.ScriptWindow):
self.__AddGroup() self.__AddGroup()
messenger.RefreshGuildMember() messenger.RefreshGuildMember()
if app.FIX_MESSENGER_ACTION_SYNC: def InitializeHandler(self):
# NEW: Separate initialization from visibility """Load UI and register packet handlers without showing window"""
def InitializeHandler(self): if self.isLoaded == 0:
"""Load UI and register packet handlers without showing window""" self.isLoaded = 1
if self.isLoaded == 0: self.__LoadWindow()
self.__LoadWindow() self.OnRefreshList()
self.OnRefreshList() self.OnResizeDialog()
self.OnResizeDialog()
self.isLoaded = 1
def Show(self): def Show(self):
if self.isLoaded==0: if self.isLoaded==0:
@@ -681,10 +679,9 @@ class MessengerWindow(ui.ScriptWindow):
self.selectedItem.UnSelect() self.selectedItem.UnSelect()
self.selectedItem = None self.selectedItem = None
if app.FIX_MESSENGER_ACTION_SYNC: self.whisperButton.Disable()
self.whisperButton.Disable() self.mobileButton.Disable()
self.mobileButton.Disable() self.removeButton.Disable()
self.removeButton.Disable()
self.OnRefreshList() self.OnRefreshList()
@@ -788,25 +785,22 @@ class MessengerWindow(ui.ScriptWindow):
def OnRemoveList(self, groupIndex, key): def OnRemoveList(self, groupIndex, key):
group = self.groupList[groupIndex] group = self.groupList[groupIndex]
if app.FIX_MESSENGER_ACTION_SYNC: member = group.FindMember(key)
member = group.FindMember(key)
if not member: if not member:
return return
if self.selectedItem is member or member.IsSameKey(key): if self.selectedItem is member or member.IsSameKey(key):
member.UnSelect() member.UnSelect()
self.selectedItem = None self.selectedItem = None
# Optional: also disable buttons to mirror local delete flow # Optional: also disable buttons to mirror local delete flow
self.whisperButton.Disable() self.whisperButton.Disable()
self.mobileButton.Disable() self.mobileButton.Disable()
self.removeButton.Disable() self.removeButton.Disable()
member.Hide() member.Hide()
group.RemoveMember(member) group.RemoveMember(member)
else:
group.RemoveMember(group.FindMember(key))
self.OnRefreshList() self.OnRefreshList()

View File

@@ -152,7 +152,7 @@ class EnergyBar(ui.ScriptWindow):
def RefreshStatus(self): def RefreshStatus(self):
pointEnergy = player.GetStatus (player.ENERGY) pointEnergy = player.GetStatus (player.ENERGY)
leftTimeEnergy = player.GetStatus (player.ENERGY_END_TIME) - app.GetGlobalTimeStamp() leftTimeEnergy = player.GetStatus (player.ENERGY_END_TIME) - app.GetGlobalTimeStamp()
# 충기환 지속 시간 = 2시간. # <EFBFBD><EFBFBD><EFBFBD>ȯ <20><><EFBFBD><EFBFBD> <20>ð<EFBFBD> = 2<EFBFBD>ð<EFBFBD>.
self.SetEnergy (pointEnergy, leftTimeEnergy, 7200) self.SetEnergy (pointEnergy, leftTimeEnergy, 7200)
def SetEnergy (self, point, leftTime, maxTime): def SetEnergy (self, point, leftTime, maxTime):
@@ -336,7 +336,7 @@ class TaskBar(ui.ScriptWindow):
(coolTime, elapsedTime) = player.GetSkillCoolTime(skillSlotNumber) (coolTime, elapsedTime) = player.GetSkillCoolTime(skillSlotNumber)
self.SetSlotCoolTime(slotNumber, coolTime, elapsedTime) self.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)
## NOTE : Activate 되어 있다면 아이콘도 업데이트 ## NOTE : Activate <EFBFBD>Ǿ<EFBFBD> <20>ִٸ<D6B4> <20><><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
if player.IsSkillActive(skillSlotNumber): if player.IsSkillActive(skillSlotNumber):
self.ActivateSlot(slotNumber) self.ActivateSlot(slotNumber)
@@ -439,7 +439,7 @@ class TaskBar(ui.ScriptWindow):
toggleButtonDict[TaskBar.BUTTON_MESSENGER]=self.GetChild("MessengerButton") toggleButtonDict[TaskBar.BUTTON_MESSENGER]=self.GetChild("MessengerButton")
toggleButtonDict[TaskBar.BUTTON_SYSTEM]=self.GetChild("SystemButton") toggleButtonDict[TaskBar.BUTTON_SYSTEM]=self.GetChild("SystemButton")
# ChatButton, ExpandButton 둘 중 하나는 반드시 존재한다. # ChatButton, ExpandButton <EFBFBD><EFBFBD> <20><> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20>ݵ<EFBFBD><DDB5> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
try: try:
toggleButtonDict[TaskBar.BUTTON_CHAT]=self.GetChild("ChatButton") toggleButtonDict[TaskBar.BUTTON_CHAT]=self.GetChild("ChatButton")
except: except:
@@ -672,22 +672,21 @@ class TaskBar(ui.ScriptWindow):
for button in self.selectSkillButtonList: for button in self.selectSkillButtonList:
button.RefreshSkill() button.RefreshSkill()
if app.FIX_REFRESH_SKILL_COOLDOWN: def SkillClearCoolTime(self, usedSlotIndex):
def SkillClearCoolTime(self, usedSlotIndex): QUICK_SLOT_SLOT_COUNT = 4
QUICK_SLOT_SLOT_COUNT = 4 slotIndex = 0
slotIndex = 0
for slotWindow in self.quickslot: for slotWindow in self.quickslot:
for i in xrange(QUICK_SLOT_SLOT_COUNT): for i in xrange(QUICK_SLOT_SLOT_COUNT):
(Type, Position) = player.GetLocalQuickSlot(slotIndex) (Type, Position) = player.GetLocalQuickSlot(slotIndex)
if Type == player.SLOT_TYPE_SKILL: if Type == player.SLOT_TYPE_SKILL:
if usedSlotIndex == Position: if usedSlotIndex == Position:
slotWindow.SetSlotCoolTime(slotIndex, 0) slotWindow.SetSlotCoolTime(slotIndex, 0)
return return
slotIndex += 1 slotIndex += 1
def SetHP(self, curPoint, recoveryPoint, maxPoint): def SetHP(self, curPoint, recoveryPoint, maxPoint):
curPoint = min(curPoint, maxPoint) curPoint = min(curPoint, maxPoint)
@@ -782,9 +781,9 @@ class TaskBar(ui.ScriptWindow):
if itemCount <= 1: if itemCount <= 1:
itemCount = 0 itemCount = 0
## 자동물약 (#72723, #72724) 특수처리 - 아이템인데도 슬롯에 활성화/비활성화 표시를 위한 작업임 - [hyo] ## <EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (#72723, #72724) Ư<EFBFBD><EFBFBD>ó<EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ε<EFBFBD><CEB5><EFBFBD> <20><><EFBFBD>Կ<EFBFBD> Ȱ<><C8B0>ȭ/<2F><>Ȱ<EFBFBD><C8B0>ȭ ǥ<>ø<EFBFBD> <20><><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> - [hyo]
if constInfo.IS_AUTO_POTION(itemIndex): if constInfo.IS_AUTO_POTION(itemIndex):
# metinSocket - [0] : 활성화 여부, [1] : 사용한 양, [2] : 최대 용량 # metinSocket - [0] : Ȱ<EFBFBD><EFBFBD>ȭ <20><><EFBFBD><EFBFBD>, [1] : <20><><EFBFBD><EFBFBD><EFBFBD> <20><>, [2] : <EFBFBD>ִ<EFBFBD> <20>
metinSocket = [player.GetItemMetinSocket(Position, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)] metinSocket = [player.GetItemMetinSocket(Position, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
if 0 != int(metinSocket[0]): if 0 != int(metinSocket[0]):
@@ -818,26 +817,19 @@ class TaskBar(ui.ScriptWindow):
slot.SetCoverButton(slotNumber) slot.SetCoverButton(slotNumber)
## NOTE : CoolTime üũ ## NOTE : CoolTime üũ
if app.FIX_REFRESH_SKILL_COOLDOWN: if player.IsSkillCoolTime(Position) and skillLevel > 0:
if player.IsSkillCoolTime(Position) and skillLevel > 0: (coolTime, elapsedTime) = player.GetSkillCoolTime(Position)
(coolTime, elapsedTime) = player.GetSkillCoolTime(Position)
slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime) slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)
else:
if skillType != skill.SKILL_TYPE_GUILD and skillLevel <= 0:
slot.SetSlotCoolTime(slotNumber, 0, 0)
else: else:
if player.IsSkillCoolTime(Position): if skillType != skill.SKILL_TYPE_GUILD and skillLevel <= 0:
(coolTime, elapsedTime) = player.GetSkillCoolTime(Position) slot.SetSlotCoolTime(slotNumber, 0, 0)
slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime) ## NOTE : Activate <20>Ǿ<EFBFBD> <20>ִٸ<D6B4> <20><><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ
## NOTE : Activate 되어 있다면 아이콘도 업데이트
if player.IsSkillActive(Position): if player.IsSkillActive(Position):
slot.ActivateSlot(slotNumber) slot.ActivateSlot(slotNumber)
else: else:
if app.FIX_REFRESH_SKILL_COOLDOWN: slot.DeactivateSlot(slotNumber)
slot.DeactivateSlot(slotNumber)
elif player.SLOT_TYPE_EMOTION == Type: elif player.SLOT_TYPE_EMOTION == Type:
@@ -1079,8 +1071,8 @@ class TaskBar(ui.ScriptWindow):
if skill.IsStandingSkill(skillIndex): if skill.IsStandingSkill(skillIndex):
continue continue
## FIXME : 스킬 하나당 슬롯 하나씩 할당하는건 아무리 봐도 부하가 크다. ## FIXME : <EFBFBD><EFBFBD>ų <20>ϳ<EFBFBD><CFB3><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ϳ<EFBFBD><CFB3><EFBFBD> <20>Ҵ<EFBFBD><D2B4>ϴ°<CFB4> <20>ƹ<EFBFBD><C6B9><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϰ<EFBFBD> ũ<><C5A9>.
## 이 부분은 시간을 나면 고치도록. - [levites] ## <EFBFBD><EFBFBD> <20>κ<EFBFBD><CEBA><EFBFBD> <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1><EFBFBD><EFBFBD>. - [levites]
skillButton = self.SkillButton() skillButton = self.SkillButton()
skillButton.SetSkill(startNumber+i) skillButton.SetSkill(startNumber+i)
skillButton.SetPosition(x, y) skillButton.SetPosition(x, y)