MRMJ-1: Messenger & Skills fixes

This commit is contained in:
Mind Rapist
2025-12-14 05:05:08 +02:00
parent d6365aafa2
commit b0e8c0bb2b
26 changed files with 624 additions and 214 deletions

View File

@@ -305,10 +305,15 @@ class Interface(object):
self.whisperDialogDict = {}
self.privateShopAdvertisementBoardDict = {}
if app.FIX_MESSENGER_ACTION_SYNC:
self.wndMessenger.InitializeHandler()
self.wndInventory.SetItemToolTip(self.tooltipItem)
if app.ENABLE_DRAGON_SOUL_SYSTEM:
self.wndDragonSoul.SetItemToolTip(self.tooltipItem)
self.wndDragonSoulRefine.SetItemToolTip(self.tooltipItem)
self.wndSafebox.SetItemToolTip(self.tooltipItem)
self.wndCube.SetItemToolTip(self.tooltipItem)
self.wndCubeResult.SetItemToolTip(self.tooltipItem)
@@ -535,6 +540,11 @@ class Interface(object):
def OnChangeCurrentSkill(self, skillSlotNumber):
self.wndTaskBar.OnChangeCurrentSkill(skillSlotNumber)
if app.FIX_REFRESH_SKILL_COOLDOWN:
def SkillClearCoolTime(self, slotIndex):
self.wndCharacter.SkillClearCoolTime(slotIndex)
self.wndTaskBar.SkillClearCoolTime(slotIndex)
def SelectMouseButtonEvent(self, dir, event):
self.wndTaskBar.SelectMouseButtonEvent(dir, event)
@@ -564,7 +574,7 @@ class Interface(object):
if app.ENABLE_DRAGON_SOUL_SYSTEM:
self.wndDragonSoul.RefreshItemSlot()
def RefreshCharacter(self): ## Character 페이지의 얼굴, Inventory 페이지의 전신 그림 등의 Refresh
def RefreshCharacter(self): ## Character <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>, Inventory <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>׸<EFBFBD> <20><><EFBFBD><EFBFBD> Refresh
self.wndCharacter.RefreshCharacter()
self.wndTaskBar.RefreshQuickSlot()
@@ -696,7 +706,7 @@ class Interface(object):
def RemovePartyMember(self, pid):
self.wndParty.RemovePartyMember(pid)
##!! 20061026.levites.퀘스트_위치_보정
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD><EFBFBD>ġ_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
self.__ArrangeQuestButton()
def LinkPartyMember(self, pid, vid):
@@ -711,7 +721,7 @@ class Interface(object):
def ExitParty(self):
self.wndParty.ExitParty()
##!! 20061026.levites.퀘스트_위치_보정
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD><EFBFBD>ġ_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
self.__ArrangeQuestButton()
def PartyHealReady(self):
@@ -874,7 +884,7 @@ class Interface(object):
if True == self.wndChat.IsEditMode():
self.wndChat.CloseChat()
else:
# 웹페이지가 열렸을때는 채팅 입력이 안됨
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ä<><C3A4> <20>Է<EFBFBD><D4B7><EFBFBD> <20>ȵ<EFBFBD>
if self.wndWeb and self.wndWeb.IsShow():
pass
else:
@@ -975,7 +985,7 @@ class Interface(object):
else:
self.wndExpandedTaskBar.Close()
# 용혼석
# <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
def DragonSoulActivate(self, deck):
if app.ENABLE_DRAGON_SOUL_SYSTEM:
self.wndDragonSoul.ActivateDragonSoulByExtern(deck)
@@ -1046,7 +1056,7 @@ class Interface(object):
if True == self.wndDragonSoulRefine.IsShow():
self.wndDragonSoulRefine.Close()
# 용혼석 끝
# <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD> <20><>
def ToggleGuildWindow(self):
if not self.wndGuild.IsShow():
@@ -1096,7 +1106,7 @@ class Interface(object):
def OpenWebWindow(self, url):
self.wndWeb.Open(url)
# 웹페이지를 열면 채팅을 닫는다
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ä<><C3A4><EFBFBD><EFBFBD> <20>ݴ´<DDB4>
self.wndChat.CloseChat()
# show GIFT
@@ -1124,9 +1134,9 @@ class Interface(object):
def SucceedCubeWork(self, itemVnum, count):
self.wndCube.Clear()
print "큐브 제작 성공! [%d:%d]" % (itemVnum, count)
print "ť<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>! [%d:%d]" % (itemVnum, count)
if 0: # 결과 메시지 출력은 생략 한다
if 0: # <EFBFBD><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ѵ<EFBFBD>
self.wndCubeResult.SetPosition(*self.wndCube.GetGlobalPosition())
self.wndCubeResult.SetCubeResultItem(itemVnum, count)
self.wndCubeResult.Open()
@@ -1289,7 +1299,7 @@ class Interface(object):
btn = uiWhisper.WhisperButton()
# QUEST_LETTER_IMAGE
##!! 20061026.levites.퀘스트_이미지_교체
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD>̹<EFBFBD><EFBFBD><EFBFBD>_<EFBFBD><EFBFBD>ü
import item
if "item"==iconType:
item.SelectItem(int(iconName))
@@ -1336,7 +1346,7 @@ class Interface(object):
screenWidth = wndMgr.GetScreenWidth()
screenHeight = wndMgr.GetScreenHeight()
##!! 20061026.levites.퀘스트_위치_보정
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD><EFBFBD>ġ_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if self.wndParty.IsShow():
xPos = 100 + 30
else:
@@ -1390,8 +1400,8 @@ class Interface(object):
def __InitWhisper(self):
chat.InitWhisper(self)
## 채팅창의 "메시지 보내기"를 눌렀을때 이름 없는 대화창을 여는 함수
## 이름이 없기 때문에 기존의 WhisperDialogDict 와 별도로 관리된다.
## ä<EFBFBD><EFBFBD>â<EFBFBD><EFBFBD> "<22>޽<EFBFBD><DEBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȭâ<C8AD><C3A2> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
## <EFBFBD≯<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WhisperDialogDict <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>.
def OpenWhisperDialogWithoutTarget(self):
if not self.dlgWhisperWithoutTarget:
dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog)
@@ -1408,7 +1418,7 @@ class Interface(object):
self.dlgWhisperWithoutTarget.SetTop()
self.dlgWhisperWithoutTarget.OpenWithoutTarget(self.RegisterTemporaryWhisperDialog)
## 이름 없는 대화창에서 이름을 결정했을때 WhisperDialogDict에 창을 넣어주는 함수
## <EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ȭâ<C8AD><C3A2><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WhisperDialogDict<EFBFBD><EFBFBD> â<><C3A2> <20>־<EFBFBD><D6BE>ִ<EFBFBD> <20>Լ<EFBFBD>
def RegisterTemporaryWhisperDialog(self, name):
if not self.dlgWhisperWithoutTarget:
return
@@ -1427,7 +1437,7 @@ class Interface(object):
self.dlgWhisperWithoutTarget = None
self.__CheckGameMaster(name)
## 캐릭터 메뉴의 1:1 대화 하기를 눌렀을때 이름을 가지고 바로 창을 여는 함수
## ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޴<EFBFBD><DEB4><EFBFBD> 1:1 <20><>ȭ <20>ϱ<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
def OpenWhisperDialog(self, name):
if not self.whisperDialogDict.has_key(name):
dlg = self.__MakeWhisperDialog(name)
@@ -1440,7 +1450,7 @@ class Interface(object):
if 0 != btn:
self.__DestroyWhisperButton(btn)
## 다른 캐릭터로부터 메세지를 받았을때 일단 버튼만 띄워 두는 함수
## <EFBFBD>ٸ<EFBFBD> ij<><C4B3><EFBFBD>ͷκ<CDB7><CEBA><EFBFBD> <20>޼<EFBFBD><DEBC><EFBFBD><EFBFBD><EFBFBD> <20>޾<EFBFBD><DEBE><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20><>ư<EFBFBD><C6B0> <20><><EFBFBD> <20>δ<EFBFBD> <20>Լ<EFBFBD>
def RecvWhisper(self, name):
if not self.whisperDialogDict.has_key(name):
btn = self.__FindWhisperButton(name)
@@ -1459,7 +1469,7 @@ class Interface(object):
def MakeWhisperButton(self, name):
self.__MakeWhisperButton(name)
## 버튼을 눌렀을때 창을 여는 함수
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD>
def ShowWhisperDialog(self, btn):
try:
self.__MakeWhisperDialog(btn.name)
@@ -1471,11 +1481,11 @@ class Interface(object):
import dbg
dbg.TraceError("interface.ShowWhisperDialog - Failed to find key")
## 버튼 초기화
## <EFBFBD><EFBFBD>ư <20>ʱ<EFBFBD>ȭ
self.__DestroyWhisperButton(btn)
## WhisperDialog 창에서 최소화 명령을 수행했을때 호출되는 함수
## 창을 최소화 합니다.
## WhisperDialog â<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ּ<EFBFBD>ȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3>Ǵ<EFBFBD> <20>Լ<EFBFBD>
## â<EFBFBD><EFBFBD> <20>ּ<EFBFBD>ȭ <20>մϴ<D5B4>.
def MinimizeWhisperDialog(self, name):
if 0 != name:
@@ -1483,8 +1493,8 @@ class Interface(object):
self.CloseWhisperDialog(name)
## WhisperDialog 창에서 닫기 명령을 수행했을때 호출되는 함수
## 창을 지웁니다.
## WhisperDialog â<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ݱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3>Ǵ<EFBFBD> <20>Լ<EFBFBD>
## â<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϴ<EFBFBD>.
def CloseWhisperDialog(self, name):
if 0 == name:
@@ -1503,7 +1513,7 @@ class Interface(object):
import dbg
dbg.TraceError("interface.CloseWhisperDialog - Failed to find key")
## 버튼의 개수가 바뀌었을때 버튼을 재정렬 하는 함수
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ư<EFBFBD><C6B0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϴ<EFBFBD> <20>Լ<EFBFBD>
def __ArrangeWhisperButton(self):
screenWidth = wndMgr.GetScreenWidth()
@@ -1520,9 +1530,9 @@ class Interface(object):
button.SetPosition(xPos + (int(count/yCount) * -50), yPos + (count%yCount * 63))
count += 1
## 이름으로 Whisper 버튼을 찾아 리턴해 주는 함수
## 버튼은 딕셔너리로 하지 않는 것은 정렬 되어 버려 순서가 유지 되지 않으며
## 이로 인해 ToolTip들이 다른 버튼들에 의해 가려지기 때문이다.
## <EFBFBD≯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Whisper <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> ã<><C3A3> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD> <20>Լ<EFBFBD>
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><>ųʸ<C5B3><CAB8><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
## <EFBFBD>̷<EFBFBD> <20><><EFBFBD><EFBFBD> ToolTip<69><70><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20><>ư<EFBFBD><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
def __FindWhisperButton(self, name):
for button in self.whisperButtonList:
if button.name == name:
@@ -1530,7 +1540,7 @@ class Interface(object):
return 0
## 창을 만듭니다.
## â<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϴ<EFBFBD>.
def __MakeWhisperDialog(self, name):
dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog)
dlgWhisper.BindInterface(self)
@@ -1542,7 +1552,7 @@ class Interface(object):
return dlgWhisper
## 버튼을 만듭니다.
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϴ<EFBFBD>.
def __MakeWhisperButton(self, name):
whisperButton = uiWhisper.WhisperButton()
whisperButton.SetUpVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub")