Fix: Add dialog cancelation state and quest cancelation packet send

This commit is contained in:
Simone Romano
2025-12-26 00:37:31 +01:00
parent c72c0c82f6
commit 3ed15e49ac
2 changed files with 22 additions and 10 deletions

2
.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
# Korean (EUC-KR)
assets/root/*.py text working-tree-encoding=utf-8

View File

@@ -309,6 +309,10 @@ class QuestDialog(ui.ScriptWindow):
self.editLine = None
# END_OF_QUEST_INPUT
# QUEST_CANCEL - Track if dialog was cancelled
self.bCancelled = False
# END_OF_QUEST_CANCEL
def __del__(self):
ui.ScriptWindow.__del__(self)
@@ -330,11 +334,16 @@ class QuestDialog(ui.ScriptWindow):
# QUEST_CANCEL
def OnCancel(self):
self.bCancelled = True
self.nextCurtainMode = -1
self.CloseSelf()
# END_OF_QUEST_CANCEL
def CloseSelf(self):
if self.bCancelled:
net.SendQuestCancelPacket()
self.bCancelled = False
QuestDialog.QuestCurtain.CurtainMode = self.nextCurtainMode
self.btnNext = None
self.descWindow = None
@@ -443,7 +452,7 @@ class QuestDialog(ui.ScriptWindow):
import localeInfo
if event.BUTTON_TYPE_CANCEL == button_type:
b.SetEvent(lambda s=self:event.SelectAnswer(s.descIndex, 254) or s.OnCancel())
b.SetEvent(lambda s=self:(setattr(s, 'bCancelled', True) or None) or event.SelectAnswer(s.descIndex, 254) or s.OnCancel())
b.SetText(localeInfo.UI_CANCEL)
elif event.BUTTON_TYPE_DONE == button_type:
b.SetEvent(lambda s=self:s.CloseSelf())
@@ -457,7 +466,7 @@ class QuestDialog(ui.ScriptWindow):
# END_OF_QUEST_CANCEL
def MakeQuestion(self, n): # n은 모든 퀘스트 대화창의 마지막 버튼인 "닫기"를 포함한 전체 퀘스트 버튼 개수. by 김준호
def MakeQuestion(self, n): # n은 모든 퀘스트 대화창의 마지막 버튼인 "닫기"를 포함한 전체 퀘스트 버튼 개수. by 김준호
global entire_questbutton_number
global entire_questpage_number
global cur_questpage_number
@@ -548,7 +557,7 @@ class QuestDialog(ui.ScriptWindow):
self.prevbutton = None
self.CloseSelf()
def AppendQuestion(self, name, idx): # idx는 0부터 시작함. PythonEventManager.cpp line 881 참고. by 김준호
def AppendQuestion(self, name, idx): # idx는 0부터 시작함. PythonEventManager.cpp line 881 참고. by 김준호
if not self.btnAnswer:
return
@@ -595,7 +604,7 @@ class QuestDialog(ui.ScriptWindow):
# QUEST_INPUT
def OnKeyDown(self, key):
if self.btnAnswer == None:
## 선택문이 없고 '다음', '확인' 등의 일방 버튼만 있는 경우에 대한 처리
## 선택문이 없고 '다음', '확인' 등의 일방 버튼만 있는 경우에 대한 처리
if None != self.btnNext:
if app.DIK_RETURN == key:
self.OnPressEscapeKey()
@@ -640,21 +649,22 @@ class QuestDialog(ui.ScriptWindow):
def OnPressEscapeKey(self):
# ESC키가 눌린 경우 "다음" 버튼을 누른 것과 같은 효과를 내도록 함.
# ESC키가 눌린 경우 "다음" 버튼을 누른 것과 같은 효과를 내도록 함.
if None != self.btnNext:
##퀘스트문자들이 전부다 나왔을경우의 ESC버튼
##퀘스트문자들이 전부다 나왔을경우의 ESC버튼
if event.BUTTON_TYPE_CANCEL == self.nextButtonType:
event.SelectAnswer(self.descIndex, 254)
self.bCancelled = True
event.SelectAnswer(self.descIndex, 254)
self.CloseSelf()
## 아무 작업을 하지 않을때
## 아무 작업을 하지 않을때
elif event.BUTTON_TYPE_DONE == self.nextButtonType:
self.CloseSelf()
## 엔터나 다음화면으로 넘어가려고 할경우
## 엔터나 다음화면으로 넘어가려고 할경우
elif event.BUTTON_TYPE_NEXT == self.nextButtonType:
event.SelectAnswer(self.descIndex, 254)
self.CloseSelf()
else:
## 도중에 꺼버리거나, ESC버튼이 나왓을경우
## 도중에 꺼버리거나, ESC버튼이 나왓을경우
event.SelectAnswer(self.descIndex, entire_questbutton_number -1 )
self.nextbutton = None
self.prevbutton = None