add: Owsap quest renewal and GetTextLength + GetTextWindow.
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 4.0 KiB |
BIN
bin/pack/etc/ymir work/ui/form_lang_01.dds
Normal file
BIN
bin/pack/etc/ymir work/ui/pattern/border_a_bottom.tga
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
bin/pack/etc/ymir work/ui/pattern/border_a_center.tga
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
bin/pack/etc/ymir work/ui/pattern/border_a_left.tga
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
bin/pack/etc/ymir work/ui/pattern/border_a_left_bottom.tga
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
bin/pack/etc/ymir work/ui/pattern/border_a_left_top.tga
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
bin/pack/etc/ymir work/ui/pattern/border_a_right.tga
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
bin/pack/etc/ymir work/ui/pattern/border_a_right_bottom.tga
Normal file
After Width: | Height: | Size: 1004 B |
BIN
bin/pack/etc/ymir work/ui/pattern/border_a_right_top.tga
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
bin/pack/etc/ymir work/ui/pattern/border_a_top.tga
Normal file
After Width: | Height: | Size: 1.0 KiB |
7
bin/pack/etc/ymir work/ui/quest_re/button_bottom.sub
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
title subImage
|
||||||
|
version 1.0
|
||||||
|
image "form_lang_01.dds"
|
||||||
|
left 0
|
||||||
|
top 32
|
||||||
|
right 210
|
||||||
|
bottom 48
|
7
bin/pack/etc/ymir work/ui/quest_re/button_middle.sub
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
title subImage
|
||||||
|
version 1.0
|
||||||
|
image "form_lang_01.dds"
|
||||||
|
left 0
|
||||||
|
top 16
|
||||||
|
right 210
|
||||||
|
bottom 32
|
7
bin/pack/etc/ymir work/ui/quest_re/button_one.sub
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
title subImage
|
||||||
|
version 1.0
|
||||||
|
image "form_lang_01.dds"
|
||||||
|
left 0
|
||||||
|
top 68
|
||||||
|
right 210
|
||||||
|
bottom 84
|
7
bin/pack/etc/ymir work/ui/quest_re/button_over.sub
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
title subImage
|
||||||
|
version 1.0
|
||||||
|
image "form_lang_01.dds"
|
||||||
|
left 0
|
||||||
|
top 50
|
||||||
|
right 210
|
||||||
|
bottom 66
|
7
bin/pack/etc/ymir work/ui/quest_re/button_top.sub
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
title subImage
|
||||||
|
version 1.0
|
||||||
|
image "form_lang_01.dds"
|
||||||
|
left 0
|
||||||
|
top 0
|
||||||
|
right 210
|
||||||
|
bottom 16
|
BIN
bin/pack/etc/ymir work/ui/quest_re/quest_down.tga
Normal file
After Width: | Height: | Size: 772 B |
BIN
bin/pack/etc/ymir work/ui/quest_re/quest_list_line_01.tga
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
bin/pack/etc/ymir work/ui/quest_re/quest_new.tga
Normal file
After Width: | Height: | Size: 240 B |
BIN
bin/pack/etc/ymir work/ui/quest_re/quest_tab_01.tga
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
bin/pack/etc/ymir work/ui/quest_re/quest_up.tga
Normal file
After Width: | Height: | Size: 772 B |
BIN
bin/pack/etc/ymir work/ui/quest_re/tabcolor_1_main.tga
Normal file
After Width: | Height: | Size: 344 B |
BIN
bin/pack/etc/ymir work/ui/quest_re/tabcolor_2_sub.tga
Normal file
After Width: | Height: | Size: 344 B |
BIN
bin/pack/etc/ymir work/ui/quest_re/tabcolor_3_levelup.tga
Normal file
After Width: | Height: | Size: 344 B |
BIN
bin/pack/etc/ymir work/ui/quest_re/tabcolor_4_event.tga
Normal file
After Width: | Height: | Size: 344 B |
BIN
bin/pack/etc/ymir work/ui/quest_re/tabcolor_5_collection.tga
Normal file
After Width: | Height: | Size: 344 B |
BIN
bin/pack/etc/ymir work/ui/quest_re/tabcolor_6_system.tga
Normal file
After Width: | Height: | Size: 344 B |
BIN
bin/pack/etc/ymir work/ui/quest_re/tabcolor_7_scroll.tga
Normal file
After Width: | Height: | Size: 344 B |
BIN
bin/pack/etc/ymir work/ui/quest_re/tabcolor_8_daily.tga
Normal file
After Width: | Height: | Size: 344 B |
BIN
bin/pack/icon/icon/item/scroll_close_blue.tga
Normal file
After Width: | Height: | Size: 4.0 KiB |
BIN
bin/pack/icon/icon/item/scroll_open_blue.tga
Normal file
After Width: | Height: | Size: 4.0 KiB |
@ -343,3 +343,11 @@ WHISPER_REPORT
|
|||||||
WHISPER_SEND Poslat
|
WHISPER_SEND Poslat
|
||||||
YES Ano
|
YES Ano
|
||||||
ZONE_MAP Velká mapa
|
ZONE_MAP Velká mapa
|
||||||
|
QUEST_UI_TEXT_COLLECTION Biologist Quests
|
||||||
|
QUEST_UI_TEXT_DAILY Daily Quest
|
||||||
|
QUEST_UI_TEXT_EVENT Event Missions
|
||||||
|
QUEST_UI_TEXT_LEVELUP Hunting Mission
|
||||||
|
QUEST_UI_TEXT_MAIN Main Quests
|
||||||
|
QUEST_UI_TEXT_SCROLL Mission Book Quests
|
||||||
|
QUEST_UI_TEXT_SUB Side Quests
|
||||||
|
QUEST_UI_TEXT_SYSTEM Game Missions
|
||||||
|
@ -324,3 +324,11 @@ WHISPER_REPORT report
|
|||||||
WHISPER_SEND Senden
|
WHISPER_SEND Senden
|
||||||
YES Ja
|
YES Ja
|
||||||
ZONE_MAP Übersichtskarte
|
ZONE_MAP Übersichtskarte
|
||||||
|
QUEST_UI_TEXT_COLLECTION Biologist Quests
|
||||||
|
QUEST_UI_TEXT_DAILY Daily Quest
|
||||||
|
QUEST_UI_TEXT_EVENT Event Missions
|
||||||
|
QUEST_UI_TEXT_LEVELUP Hunting Mission
|
||||||
|
QUEST_UI_TEXT_MAIN Main Quests
|
||||||
|
QUEST_UI_TEXT_SCROLL Mission Book Quests
|
||||||
|
QUEST_UI_TEXT_SUB Side Quests
|
||||||
|
QUEST_UI_TEXT_SYSTEM Game Missions
|
||||||
|
@ -343,3 +343,11 @@ WHISPER_REPORT
|
|||||||
WHISPER_SEND Send
|
WHISPER_SEND Send
|
||||||
YES Ja
|
YES Ja
|
||||||
ZONE_MAP Stort kort
|
ZONE_MAP Stort kort
|
||||||
|
QUEST_UI_TEXT_COLLECTION Biologist Quests
|
||||||
|
QUEST_UI_TEXT_DAILY Daily Quest
|
||||||
|
QUEST_UI_TEXT_EVENT Event Missions
|
||||||
|
QUEST_UI_TEXT_LEVELUP Hunting Mission
|
||||||
|
QUEST_UI_TEXT_MAIN Main Quests
|
||||||
|
QUEST_UI_TEXT_SCROLL Mission Book Quests
|
||||||
|
QUEST_UI_TEXT_SUB Side Quests
|
||||||
|
QUEST_UI_TEXT_SYSTEM Game Missions
|
||||||
|
@ -324,3 +324,11 @@ WHISPER_REPORT
|
|||||||
WHISPER_SEND Send
|
WHISPER_SEND Send
|
||||||
YES Yes
|
YES Yes
|
||||||
ZONE_MAP Large Map
|
ZONE_MAP Large Map
|
||||||
|
QUEST_UI_TEXT_COLLECTION Biologist Quests
|
||||||
|
QUEST_UI_TEXT_DAILY Daily Quest
|
||||||
|
QUEST_UI_TEXT_EVENT Event Missions
|
||||||
|
QUEST_UI_TEXT_LEVELUP Hunting Mission
|
||||||
|
QUEST_UI_TEXT_MAIN Main Quests
|
||||||
|
QUEST_UI_TEXT_SCROLL Mission Book Quests
|
||||||
|
QUEST_UI_TEXT_SUB Side Quests
|
||||||
|
QUEST_UI_TEXT_SYSTEM Game Missions
|
||||||
|
@ -343,3 +343,11 @@ WHISPER_REPORT
|
|||||||
WHISPER_SEND Enviar
|
WHISPER_SEND Enviar
|
||||||
YES Sí
|
YES Sí
|
||||||
ZONE_MAP Mapa grande
|
ZONE_MAP Mapa grande
|
||||||
|
QUEST_UI_TEXT_COLLECTION Biologist Quests
|
||||||
|
QUEST_UI_TEXT_DAILY Daily Quest
|
||||||
|
QUEST_UI_TEXT_EVENT Event Missions
|
||||||
|
QUEST_UI_TEXT_LEVELUP Hunting Mission
|
||||||
|
QUEST_UI_TEXT_MAIN Main Quests
|
||||||
|
QUEST_UI_TEXT_SCROLL Mission Book Quests
|
||||||
|
QUEST_UI_TEXT_SUB Side Quests
|
||||||
|
QUEST_UI_TEXT_SYSTEM Game Missions
|
||||||
|
@ -810,3 +810,11 @@ UPLOAD_MARK_CHECK_NEED_RECONNECT Le t
|
|||||||
UPLOAD_MARK_UPLOAD_NEED_RECONNECT Le téléchargement doit être recommencer.
|
UPLOAD_MARK_UPLOAD_NEED_RECONNECT Le téléchargement doit être recommencer.
|
||||||
USE_ITEM_FAILURE_PRIVATE_SHOP Vous ne pouvez pas utiliser d'objet tant que votre magasin privé est ouvert.
|
USE_ITEM_FAILURE_PRIVATE_SHOP Vous ne pouvez pas utiliser d'objet tant que votre magasin privé est ouvert.
|
||||||
USE_SKILL_ERROR_UNKNOWN Erreur compétence inconnue: %s
|
USE_SKILL_ERROR_UNKNOWN Erreur compétence inconnue: %s
|
||||||
|
QUEST_UI_TEXT_COLLECTION Biologist Quests
|
||||||
|
QUEST_UI_TEXT_DAILY Daily Quest
|
||||||
|
QUEST_UI_TEXT_EVENT Event Missions
|
||||||
|
QUEST_UI_TEXT_LEVELUP Hunting Mission
|
||||||
|
QUEST_UI_TEXT_MAIN Main Quests
|
||||||
|
QUEST_UI_TEXT_SCROLL Mission Book Quests
|
||||||
|
QUEST_UI_TEXT_SUB Side Quests
|
||||||
|
QUEST_UI_TEXT_SYSTEM Game Missions
|
||||||
|
@ -343,3 +343,11 @@ WHISPER_REPORT
|
|||||||
WHISPER_SEND Αποστολή
|
WHISPER_SEND Αποστολή
|
||||||
YES Ναι
|
YES Ναι
|
||||||
ZONE_MAP Μεγάλος Χάρτης
|
ZONE_MAP Μεγάλος Χάρτης
|
||||||
|
QUEST_UI_TEXT_COLLECTION Biologist Quests
|
||||||
|
QUEST_UI_TEXT_DAILY Daily Quest
|
||||||
|
QUEST_UI_TEXT_EVENT Event Missions
|
||||||
|
QUEST_UI_TEXT_LEVELUP Hunting Mission
|
||||||
|
QUEST_UI_TEXT_MAIN Main Quests
|
||||||
|
QUEST_UI_TEXT_SCROLL Mission Book Quests
|
||||||
|
QUEST_UI_TEXT_SUB Side Quests
|
||||||
|
QUEST_UI_TEXT_SYSTEM Game Missions
|
||||||
|
@ -324,3 +324,11 @@ WHISPER_REPORT
|
|||||||
WHISPER_SEND Küld
|
WHISPER_SEND Küld
|
||||||
YES Igen
|
YES Igen
|
||||||
ZONE_MAP Nagy térkép
|
ZONE_MAP Nagy térkép
|
||||||
|
QUEST_UI_TEXT_COLLECTION Biologist Quests
|
||||||
|
QUEST_UI_TEXT_DAILY Daily Quest
|
||||||
|
QUEST_UI_TEXT_EVENT Event Missions
|
||||||
|
QUEST_UI_TEXT_LEVELUP Hunting Mission
|
||||||
|
QUEST_UI_TEXT_MAIN Main Quests
|
||||||
|
QUEST_UI_TEXT_SCROLL Mission Book Quests
|
||||||
|
QUEST_UI_TEXT_SUB Side Quests
|
||||||
|
QUEST_UI_TEXT_SYSTEM Game Missions
|
||||||
|
@ -343,3 +343,11 @@ WHISPER_REPORT
|
|||||||
WHISPER_SEND Invia
|
WHISPER_SEND Invia
|
||||||
YES Sì.
|
YES Sì.
|
||||||
ZONE_MAP Mappa grande
|
ZONE_MAP Mappa grande
|
||||||
|
QUEST_UI_TEXT_COLLECTION Biologist Quests
|
||||||
|
QUEST_UI_TEXT_DAILY Daily Quest
|
||||||
|
QUEST_UI_TEXT_EVENT Event Missions
|
||||||
|
QUEST_UI_TEXT_LEVELUP Hunting Mission
|
||||||
|
QUEST_UI_TEXT_MAIN Main Quests
|
||||||
|
QUEST_UI_TEXT_SCROLL Mission Book Quests
|
||||||
|
QUEST_UI_TEXT_SUB Side Quests
|
||||||
|
QUEST_UI_TEXT_SYSTEM Game Missions
|
||||||
|
@ -343,3 +343,11 @@ WHISPER_REPORT Report
|
|||||||
WHISPER_SEND Stuur
|
WHISPER_SEND Stuur
|
||||||
YES Ja
|
YES Ja
|
||||||
ZONE_MAP Grote Map
|
ZONE_MAP Grote Map
|
||||||
|
QUEST_UI_TEXT_COLLECTION Biologist Quests
|
||||||
|
QUEST_UI_TEXT_DAILY Daily Quest
|
||||||
|
QUEST_UI_TEXT_EVENT Event Missions
|
||||||
|
QUEST_UI_TEXT_LEVELUP Hunting Mission
|
||||||
|
QUEST_UI_TEXT_MAIN Main Quests
|
||||||
|
QUEST_UI_TEXT_SCROLL Mission Book Quests
|
||||||
|
QUEST_UI_TEXT_SUB Side Quests
|
||||||
|
QUEST_UI_TEXT_SYSTEM Game Missions
|
||||||
|
@ -343,3 +343,11 @@ WHISPER_REPORT
|
|||||||
WHISPER_SEND Wyœlij
|
WHISPER_SEND Wyœlij
|
||||||
YES Tak
|
YES Tak
|
||||||
ZONE_MAP Podgl¹d Mapy
|
ZONE_MAP Podgl¹d Mapy
|
||||||
|
QUEST_UI_TEXT_COLLECTION Biologist Quests
|
||||||
|
QUEST_UI_TEXT_DAILY Daily Quest
|
||||||
|
QUEST_UI_TEXT_EVENT Event Missions
|
||||||
|
QUEST_UI_TEXT_LEVELUP Hunting Mission
|
||||||
|
QUEST_UI_TEXT_MAIN Main Quests
|
||||||
|
QUEST_UI_TEXT_SCROLL Mission Book Quests
|
||||||
|
QUEST_UI_TEXT_SUB Side Quests
|
||||||
|
QUEST_UI_TEXT_SYSTEM Game Missions
|
||||||
|
@ -343,3 +343,11 @@ WHISPER_REPORT
|
|||||||
WHISPER_SEND Enviar
|
WHISPER_SEND Enviar
|
||||||
YES Sim
|
YES Sim
|
||||||
ZONE_MAP Mapa Grande
|
ZONE_MAP Mapa Grande
|
||||||
|
QUEST_UI_TEXT_COLLECTION Biologist Quests
|
||||||
|
QUEST_UI_TEXT_DAILY Daily Quest
|
||||||
|
QUEST_UI_TEXT_EVENT Event Missions
|
||||||
|
QUEST_UI_TEXT_LEVELUP Hunting Mission
|
||||||
|
QUEST_UI_TEXT_MAIN Main Quests
|
||||||
|
QUEST_UI_TEXT_SCROLL Mission Book Quests
|
||||||
|
QUEST_UI_TEXT_SUB Side Quests
|
||||||
|
QUEST_UI_TEXT_SYSTEM Game Missions
|
||||||
|
@ -343,3 +343,11 @@ WHISPER_REPORT
|
|||||||
WHISPER_SEND Trimite
|
WHISPER_SEND Trimite
|
||||||
YES Da
|
YES Da
|
||||||
ZONE_MAP Hartã mare
|
ZONE_MAP Hartã mare
|
||||||
|
QUEST_UI_TEXT_COLLECTION Biologist Quests
|
||||||
|
QUEST_UI_TEXT_DAILY Daily Quest
|
||||||
|
QUEST_UI_TEXT_EVENT Event Missions
|
||||||
|
QUEST_UI_TEXT_LEVELUP Hunting Mission
|
||||||
|
QUEST_UI_TEXT_MAIN Main Quests
|
||||||
|
QUEST_UI_TEXT_SCROLL Mission Book Quests
|
||||||
|
QUEST_UI_TEXT_SUB Side Quests
|
||||||
|
QUEST_UI_TEXT_SYSTEM Game Missions
|
||||||
|
@ -343,3 +343,11 @@ WHISPER_REPORT
|
|||||||
WHISPER_SEND Îòïðàâèòü
|
WHISPER_SEND Îòïðàâèòü
|
||||||
YES äà
|
YES äà
|
||||||
ZONE_MAP Áîëüøàÿ êàðòà
|
ZONE_MAP Áîëüøàÿ êàðòà
|
||||||
|
QUEST_UI_TEXT_COLLECTION Biologist Quests
|
||||||
|
QUEST_UI_TEXT_DAILY Daily Quest
|
||||||
|
QUEST_UI_TEXT_EVENT Event Missions
|
||||||
|
QUEST_UI_TEXT_LEVELUP Hunting Mission
|
||||||
|
QUEST_UI_TEXT_MAIN Main Quests
|
||||||
|
QUEST_UI_TEXT_SCROLL Mission Book Quests
|
||||||
|
QUEST_UI_TEXT_SUB Side Quests
|
||||||
|
QUEST_UI_TEXT_SYSTEM Game Missions
|
||||||
|
@ -343,3 +343,11 @@ WHISPER_REPORT
|
|||||||
WHISPER_SEND Gönder
|
WHISPER_SEND Gönder
|
||||||
YES Evet
|
YES Evet
|
||||||
ZONE_MAP Genel Görünüm Haritasý
|
ZONE_MAP Genel Görünüm Haritasý
|
||||||
|
QUEST_UI_TEXT_COLLECTION Biologist Quests
|
||||||
|
QUEST_UI_TEXT_DAILY Daily Quest
|
||||||
|
QUEST_UI_TEXT_EVENT Event Missions
|
||||||
|
QUEST_UI_TEXT_LEVELUP Hunting Mission
|
||||||
|
QUEST_UI_TEXT_MAIN Main Quests
|
||||||
|
QUEST_UI_TEXT_SCROLL Mission Book Quests
|
||||||
|
QUEST_UI_TEXT_SUB Side Quests
|
||||||
|
QUEST_UI_TEXT_SYSTEM Game Missions
|
||||||
|
@ -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)
|
||||||
@ -659,6 +659,13 @@ class GameWindow(ui.ScriptWindow):
|
|||||||
if self.interface:
|
if self.interface:
|
||||||
self.interface.RefreshSkill()
|
self.interface.RefreshSkill()
|
||||||
|
|
||||||
|
if app.ENABLE_QUEST_RENEWAL:
|
||||||
|
def RefreshQuest(self, quest_type, quest_index):
|
||||||
|
self.interface.RefreshQuest(quest_type, quest_index)
|
||||||
|
|
||||||
|
def DeleteQuest(self, quest_type, quest_index):
|
||||||
|
self.interface.DeleteQuest(quest_type, quest_index)
|
||||||
|
else:
|
||||||
def RefreshQuest(self):
|
def RefreshQuest(self):
|
||||||
self.interface.RefreshQuest()
|
self.interface.RefreshQuest()
|
||||||
|
|
||||||
@ -1302,7 +1309,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
|
||||||
@ -1324,7 +1331,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
|
||||||
@ -1456,7 +1463,7 @@ class GameWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
def UpdateDebugInfo(self):
|
def UpdateDebugInfo(self):
|
||||||
#
|
#
|
||||||
# 캐릭터 좌표 및 FPS 출력
|
# ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ǥ <20><> FPS <20><><EFBFBD>
|
||||||
(x, y, z) = player.GetMainCharacterPosition()
|
(x, y, z) = player.GetMainCharacterPosition()
|
||||||
nUpdateTime = app.GetUpdateTime()
|
nUpdateTime = app.GetUpdateTime()
|
||||||
nUpdateFPS = app.GetUpdateFPS()
|
nUpdateFPS = app.GetUpdateFPS()
|
||||||
@ -1619,22 +1626,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:
|
||||||
@ -1735,7 +1742,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)
|
||||||
|
|
||||||
|
@ -45,6 +45,9 @@ import uiScriptLocale
|
|||||||
import event
|
import event
|
||||||
import localeInfo
|
import localeInfo
|
||||||
|
|
||||||
|
if app.ENABLE_QUEST_RENEWAL:
|
||||||
|
import quest
|
||||||
|
|
||||||
IsQBHide = 0
|
IsQBHide = 0
|
||||||
class Interface(object):
|
class Interface(object):
|
||||||
CHARACTER_STATUS_TAB = 1
|
CHARACTER_STATUS_TAB = 1
|
||||||
@ -295,12 +298,13 @@ class Interface(object):
|
|||||||
self.__MakeCubeWindow()
|
self.__MakeCubeWindow()
|
||||||
self.__MakeCubeResultWindow()
|
self.__MakeCubeResultWindow()
|
||||||
|
|
||||||
|
|
||||||
# ACCESSORY_REFINE_ADD_METIN_STONE
|
# ACCESSORY_REFINE_ADD_METIN_STONE
|
||||||
self.__MakeItemSelectWindow()
|
self.__MakeItemSelectWindow()
|
||||||
# END_OF_ACCESSORY_REFINE_ADD_METIN_STONE
|
# END_OF_ACCESSORY_REFINE_ADD_METIN_STONE
|
||||||
|
|
||||||
self.questButtonList = []
|
self.questButtonList = []
|
||||||
|
if app.ENABLE_QUEST_RENEWAL:
|
||||||
|
self.__MakeQuestButton()
|
||||||
self.whisperButtonList = []
|
self.whisperButtonList = []
|
||||||
self.whisperDialogDict = {}
|
self.whisperDialogDict = {}
|
||||||
self.privateShopAdvertisementBoardDict = {}
|
self.privateShopAdvertisementBoardDict = {}
|
||||||
@ -564,10 +568,11 @@ class Interface(object):
|
|||||||
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
||||||
self.wndDragonSoul.RefreshItemSlot()
|
self.wndDragonSoul.RefreshItemSlot()
|
||||||
|
|
||||||
def RefreshCharacter(self): ## Character 페이지의 얼굴, Inventory 페이지의 전신 그림 등의 Refresh
|
def RefreshCharacter(self): ## Character <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>, Inventory <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD><EFBFBD> Refresh
|
||||||
self.wndCharacter.RefreshCharacter()
|
self.wndCharacter.RefreshCharacter()
|
||||||
self.wndTaskBar.RefreshQuickSlot()
|
self.wndTaskBar.RefreshQuickSlot()
|
||||||
|
|
||||||
|
if not app.ENABLE_QUEST_RENEWAL:
|
||||||
def RefreshQuest(self):
|
def RefreshQuest(self):
|
||||||
self.wndCharacter.RefreshQuest()
|
self.wndCharacter.RefreshQuest()
|
||||||
|
|
||||||
@ -690,7 +695,7 @@ class Interface(object):
|
|||||||
def RemovePartyMember(self, pid):
|
def RemovePartyMember(self, pid):
|
||||||
self.wndParty.RemovePartyMember(pid)
|
self.wndParty.RemovePartyMember(pid)
|
||||||
|
|
||||||
##!! 20061026.levites.퀘스트_위치_보정
|
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD><EFBFBD>ġ_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
self.__ArrangeQuestButton()
|
self.__ArrangeQuestButton()
|
||||||
|
|
||||||
def LinkPartyMember(self, pid, vid):
|
def LinkPartyMember(self, pid, vid):
|
||||||
@ -705,7 +710,7 @@ class Interface(object):
|
|||||||
def ExitParty(self):
|
def ExitParty(self):
|
||||||
self.wndParty.ExitParty()
|
self.wndParty.ExitParty()
|
||||||
|
|
||||||
##!! 20061026.levites.퀘스트_위치_보정
|
##!! 20061026.levites.<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ_<EFBFBD><EFBFBD>ġ_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
self.__ArrangeQuestButton()
|
self.__ArrangeQuestButton()
|
||||||
|
|
||||||
def PartyHealReady(self):
|
def PartyHealReady(self):
|
||||||
@ -868,7 +873,7 @@ class Interface(object):
|
|||||||
if True == self.wndChat.IsEditMode():
|
if True == self.wndChat.IsEditMode():
|
||||||
self.wndChat.CloseChat()
|
self.wndChat.CloseChat()
|
||||||
else:
|
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():
|
if self.wndWeb and self.wndWeb.IsShow():
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
@ -969,7 +974,7 @@ class Interface(object):
|
|||||||
else:
|
else:
|
||||||
self.wndExpandedTaskBar.Close()
|
self.wndExpandedTaskBar.Close()
|
||||||
|
|
||||||
# 용혼석
|
# <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>
|
||||||
def DragonSoulActivate(self, deck):
|
def DragonSoulActivate(self, deck):
|
||||||
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
if app.ENABLE_DRAGON_SOUL_SYSTEM:
|
||||||
self.wndDragonSoul.ActivateDragonSoulByExtern(deck)
|
self.wndDragonSoul.ActivateDragonSoulByExtern(deck)
|
||||||
@ -1040,7 +1045,7 @@ class Interface(object):
|
|||||||
if True == self.wndDragonSoulRefine.IsShow():
|
if True == self.wndDragonSoulRefine.IsShow():
|
||||||
self.wndDragonSoulRefine.Close()
|
self.wndDragonSoulRefine.Close()
|
||||||
|
|
||||||
# 용혼석 끝
|
# <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD> <20><>
|
||||||
|
|
||||||
def ToggleGuildWindow(self):
|
def ToggleGuildWindow(self):
|
||||||
if not self.wndGuild.IsShow():
|
if not self.wndGuild.IsShow():
|
||||||
@ -1090,7 +1095,7 @@ class Interface(object):
|
|||||||
def OpenWebWindow(self, url):
|
def OpenWebWindow(self, url):
|
||||||
self.wndWeb.Open(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()
|
self.wndChat.CloseChat()
|
||||||
|
|
||||||
# show GIFT
|
# show GIFT
|
||||||
@ -1118,9 +1123,9 @@ class Interface(object):
|
|||||||
def SucceedCubeWork(self, itemVnum, count):
|
def SucceedCubeWork(self, itemVnum, count):
|
||||||
self.wndCube.Clear()
|
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.SetPosition(*self.wndCube.GetGlobalPosition())
|
||||||
self.wndCubeResult.SetCubeResultItem(itemVnum, count)
|
self.wndCubeResult.SetCubeResultItem(itemVnum, count)
|
||||||
self.wndCubeResult.Open()
|
self.wndCubeResult.Open()
|
||||||
@ -1264,6 +1269,81 @@ class Interface(object):
|
|||||||
|
|
||||||
#####################################################################################
|
#####################################################################################
|
||||||
### Quest ###
|
### Quest ###
|
||||||
|
if app.ENABLE_QUEST_RENEWAL:
|
||||||
|
def RefreshQuest(self, quest_type, quest_index):
|
||||||
|
self.wndCharacter.RefreshQuest(quest_type, quest_index)
|
||||||
|
|
||||||
|
# Refresh quest button.
|
||||||
|
self.__RefreshQuestButton()
|
||||||
|
|
||||||
|
def DeleteQuest(self, quest_type, quest_index):
|
||||||
|
self.wndCharacter.DeleteQuest(quest_type, quest_index)
|
||||||
|
|
||||||
|
# Unused.
|
||||||
|
def ShowQuestButton(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __OnClickQuestLetterButton(self, btn):
|
||||||
|
self.OpenCharacterWindowWithState("QUEST")
|
||||||
|
|
||||||
|
if btn.type == quest.QUEST_TYPE_EVENT:
|
||||||
|
self.wndCharacter.OpenQuestCategory(quest.QUEST_TYPE_EVENT, True)
|
||||||
|
|
||||||
|
self.HideAllQuestButton()
|
||||||
|
global IsQBHide
|
||||||
|
IsQBHide = 1
|
||||||
|
|
||||||
|
def __MakeQuestButton(self):
|
||||||
|
btn = uiWhisper.WhisperButton()
|
||||||
|
btn.SetUpVisual(localeInfo.GetLetterCloseImageName())
|
||||||
|
btn.SetOverVisual(localeInfo.GetLetterOpenImageName())
|
||||||
|
btn.SetDownVisual(localeInfo.GetLetterOpenImageName())
|
||||||
|
btn.SetEvent(ui.__mem_func__(self.__OnClickQuestLetterButton), btn)
|
||||||
|
btn.Hide()
|
||||||
|
btn.type = quest.QUEST_TYPE_MAX
|
||||||
|
btn.count = 0
|
||||||
|
self.questButtonList.append(btn)
|
||||||
|
|
||||||
|
# Used for event quests in order to highlight it.
|
||||||
|
btn = uiWhisper.WhisperButton()
|
||||||
|
btn.SetUpVisual(localeInfo.GetBlueLetterImageName())
|
||||||
|
btn.SetOverVisual(localeInfo.GetBlueLetterOpenImageName())
|
||||||
|
btn.SetDownVisual(localeInfo.GetBlueLetterOpenImageName())
|
||||||
|
btn.SetEvent(ui.__mem_func__(self.__OnClickQuestLetterButton), btn)
|
||||||
|
btn.Hide()
|
||||||
|
btn.type = quest.QUEST_TYPE_EVENT
|
||||||
|
btn.count = 0
|
||||||
|
self.questButtonList.append(btn)
|
||||||
|
|
||||||
|
self.__ArrangeQuestButton()
|
||||||
|
|
||||||
|
def __ArrangeQuestButton(self):
|
||||||
|
screen_width = wndMgr.GetScreenWidth()
|
||||||
|
screen_height = wndMgr.GetScreenHeight()
|
||||||
|
|
||||||
|
x = 100 + 30 if self.wndParty.IsShow() else 20
|
||||||
|
if localeInfo.IsARABIC():
|
||||||
|
x += 15
|
||||||
|
|
||||||
|
y = 170 * screen_height / 600
|
||||||
|
y_count = (screen_height - 330) / 63
|
||||||
|
|
||||||
|
for count, btn in enumerate(self.questButtonList):
|
||||||
|
btn.SetPosition(x + (int(count / y_count) * 100), y + (count % y_count * 63))
|
||||||
|
btn.SetToolTipText(str(btn.count), 0, 35)
|
||||||
|
|
||||||
|
global IsQBHide
|
||||||
|
if IsQBHide:
|
||||||
|
btn.Hide()
|
||||||
|
else:
|
||||||
|
if btn.count > 0:
|
||||||
|
btn.Show()
|
||||||
|
|
||||||
|
def __RefreshQuestButton(self):
|
||||||
|
for btn in self.questButtonList:
|
||||||
|
btn.count = quest.GetQuestButtonNoticeCount(btn.type)
|
||||||
|
self.__ArrangeQuestButton()
|
||||||
|
else:
|
||||||
def BINARY_ClearQuest(self, index):
|
def BINARY_ClearQuest(self, index):
|
||||||
btn = self.__FindQuestButton(index)
|
btn = self.__FindQuestButton(index)
|
||||||
if 0 != btn:
|
if 0 != btn:
|
||||||
@ -1275,7 +1355,6 @@ class Interface(object):
|
|||||||
# END_OF_QUEST_LETTER_IMAGE
|
# END_OF_QUEST_LETTER_IMAGE
|
||||||
|
|
||||||
def BINARY_RecvQuest(self, index, name, iconType, iconName):
|
def BINARY_RecvQuest(self, index, name, iconType, iconName):
|
||||||
|
|
||||||
btn = self.__FindQuestButton(index)
|
btn = self.__FindQuestButton(index)
|
||||||
if 0 != btn:
|
if 0 != btn:
|
||||||
self.__DestroyQuestButton(btn)
|
self.__DestroyQuestButton(btn)
|
||||||
@ -1283,13 +1362,13 @@ class Interface(object):
|
|||||||
btn = uiWhisper.WhisperButton()
|
btn = uiWhisper.WhisperButton()
|
||||||
|
|
||||||
# QUEST_LETTER_IMAGE
|
# QUEST_LETTER_IMAGE
|
||||||
##!! 20061026.levites.퀘스트_이미지_교체
|
## !! 20061026.levites.Äù½ºÆ®_À̹ÌÁö_±³Ã¼
|
||||||
import item
|
import item
|
||||||
if "item"==iconType:
|
if "item" == iconType:
|
||||||
item.SelectItem(int(iconName))
|
item.SelectItem(int(iconName))
|
||||||
buttonImageFileName=item.GetIconImageFileName()
|
buttonImageFileName = item.GetIconImageFileName()
|
||||||
else:
|
else:
|
||||||
buttonImageFileName=iconName
|
buttonImageFileName = iconName
|
||||||
|
|
||||||
if localeInfo.IsEUROPE():
|
if localeInfo.IsEUROPE():
|
||||||
if "highlight" == iconType:
|
if "highlight" == iconType:
|
||||||
@ -1326,11 +1405,10 @@ class Interface(object):
|
|||||||
#chat.AppendChat(chat.CHAT_TYPE_NOTICE, localeInfo.QUEST_APPEND)
|
#chat.AppendChat(chat.CHAT_TYPE_NOTICE, localeInfo.QUEST_APPEND)
|
||||||
|
|
||||||
def __ArrangeQuestButton(self):
|
def __ArrangeQuestButton(self):
|
||||||
|
|
||||||
screenWidth = wndMgr.GetScreenWidth()
|
screenWidth = wndMgr.GetScreenWidth()
|
||||||
screenHeight = wndMgr.GetScreenHeight()
|
screenHeight = wndMgr.GetScreenHeight()
|
||||||
|
|
||||||
##!! 20061026.levites.퀘스트_위치_보정
|
## !! 20061026.levites.Äù½ºÆ®_À§Ä¡_º¸Á¤
|
||||||
if self.wndParty.IsShow():
|
if self.wndParty.IsShow():
|
||||||
xPos = 100 + 30
|
xPos = 100 + 30
|
||||||
else:
|
else:
|
||||||
@ -1344,9 +1422,9 @@ class Interface(object):
|
|||||||
|
|
||||||
count = 0
|
count = 0
|
||||||
for btn in self.questButtonList:
|
for btn in self.questButtonList:
|
||||||
|
btn.SetPosition(xPos + (int(count / yCount) * 100), yPos + (count % yCount * 63))
|
||||||
btn.SetPosition(xPos + (int(count/yCount) * 100), yPos + (count%yCount * 63))
|
|
||||||
count += 1
|
count += 1
|
||||||
|
|
||||||
global IsQBHide
|
global IsQBHide
|
||||||
if IsQBHide:
|
if IsQBHide:
|
||||||
btn.Hide()
|
btn.Hide()
|
||||||
@ -1374,6 +1452,11 @@ class Interface(object):
|
|||||||
btn.Hide()
|
btn.Hide()
|
||||||
|
|
||||||
def ShowAllQuestButton(self):
|
def ShowAllQuestButton(self):
|
||||||
|
if app.ENABLE_QUEST_RENEWAL:
|
||||||
|
for btn in self.questButtonList:
|
||||||
|
if btn.count > 0:
|
||||||
|
btn.Show()
|
||||||
|
else:
|
||||||
for btn in self.questButtonList:
|
for btn in self.questButtonList:
|
||||||
btn.Show()
|
btn.Show()
|
||||||
#####################################################################################
|
#####################################################################################
|
||||||
@ -1384,8 +1467,8 @@ class Interface(object):
|
|||||||
def __InitWhisper(self):
|
def __InitWhisper(self):
|
||||||
chat.InitWhisper(self)
|
chat.InitWhisper(self)
|
||||||
|
|
||||||
## 채팅창의 "메시지 보내기"를 눌렀을때 이름 없는 대화창을 여는 함수
|
## ä<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>
|
||||||
## 이름이 없기 때문에 기존의 WhisperDialogDict 와 별도로 관리된다.
|
## <EFBFBD≯<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WhisperDialogDict <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>.
|
||||||
def OpenWhisperDialogWithoutTarget(self):
|
def OpenWhisperDialogWithoutTarget(self):
|
||||||
if not self.dlgWhisperWithoutTarget:
|
if not self.dlgWhisperWithoutTarget:
|
||||||
dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog)
|
dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog)
|
||||||
@ -1402,7 +1485,7 @@ class Interface(object):
|
|||||||
self.dlgWhisperWithoutTarget.SetTop()
|
self.dlgWhisperWithoutTarget.SetTop()
|
||||||
self.dlgWhisperWithoutTarget.OpenWithoutTarget(self.RegisterTemporaryWhisperDialog)
|
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<63><74> â<><C3A2> <20>־<EFBFBD><D6BE>ִ<EFBFBD> <20>Լ<EFBFBD>
|
||||||
def RegisterTemporaryWhisperDialog(self, name):
|
def RegisterTemporaryWhisperDialog(self, name):
|
||||||
if not self.dlgWhisperWithoutTarget:
|
if not self.dlgWhisperWithoutTarget:
|
||||||
return
|
return
|
||||||
@ -1421,7 +1504,7 @@ class Interface(object):
|
|||||||
self.dlgWhisperWithoutTarget = None
|
self.dlgWhisperWithoutTarget = None
|
||||||
self.__CheckGameMaster(name)
|
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):
|
def OpenWhisperDialog(self, name):
|
||||||
if not self.whisperDialogDict.has_key(name):
|
if not self.whisperDialogDict.has_key(name):
|
||||||
dlg = self.__MakeWhisperDialog(name)
|
dlg = self.__MakeWhisperDialog(name)
|
||||||
@ -1434,7 +1517,7 @@ class Interface(object):
|
|||||||
if 0 != btn:
|
if 0 != btn:
|
||||||
self.__DestroyWhisperButton(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):
|
def RecvWhisper(self, name):
|
||||||
if not self.whisperDialogDict.has_key(name):
|
if not self.whisperDialogDict.has_key(name):
|
||||||
btn = self.__FindWhisperButton(name)
|
btn = self.__FindWhisperButton(name)
|
||||||
@ -1453,7 +1536,7 @@ class Interface(object):
|
|||||||
def MakeWhisperButton(self, name):
|
def MakeWhisperButton(self, name):
|
||||||
self.__MakeWhisperButton(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):
|
def ShowWhisperDialog(self, btn):
|
||||||
try:
|
try:
|
||||||
self.__MakeWhisperDialog(btn.name)
|
self.__MakeWhisperDialog(btn.name)
|
||||||
@ -1465,11 +1548,11 @@ class Interface(object):
|
|||||||
import dbg
|
import dbg
|
||||||
dbg.TraceError("interface.ShowWhisperDialog - Failed to find key")
|
dbg.TraceError("interface.ShowWhisperDialog - Failed to find key")
|
||||||
|
|
||||||
## 버튼 초기화
|
## <EFBFBD><EFBFBD>ư <20>ʱ<EFBFBD>ȭ
|
||||||
self.__DestroyWhisperButton(btn)
|
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):
|
def MinimizeWhisperDialog(self, name):
|
||||||
|
|
||||||
if 0 != name:
|
if 0 != name:
|
||||||
@ -1477,8 +1560,8 @@ class Interface(object):
|
|||||||
|
|
||||||
self.CloseWhisperDialog(name)
|
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):
|
def CloseWhisperDialog(self, name):
|
||||||
|
|
||||||
if 0 == name:
|
if 0 == name:
|
||||||
@ -1497,7 +1580,7 @@ class Interface(object):
|
|||||||
import dbg
|
import dbg
|
||||||
dbg.TraceError("interface.CloseWhisperDialog - Failed to find key")
|
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):
|
def __ArrangeWhisperButton(self):
|
||||||
|
|
||||||
screenWidth = wndMgr.GetScreenWidth()
|
screenWidth = wndMgr.GetScreenWidth()
|
||||||
@ -1514,9 +1597,9 @@ class Interface(object):
|
|||||||
button.SetPosition(xPos + (int(count/yCount) * -50), yPos + (count%yCount * 63))
|
button.SetPosition(xPos + (int(count/yCount) * -50), yPos + (count%yCount * 63))
|
||||||
count += 1
|
count += 1
|
||||||
|
|
||||||
## 이름으로 Whisper 버튼을 찾아 리턴해 주는 함수
|
## <EFBFBD≯<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Whisper <20><>ư<EFBFBD><C6B0> ã<><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>
|
||||||
## 이로 인해 ToolTip들이 다른 버튼들에 의해 가려지기 때문이다.
|
## <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):
|
def __FindWhisperButton(self, name):
|
||||||
for button in self.whisperButtonList:
|
for button in self.whisperButtonList:
|
||||||
if button.name == name:
|
if button.name == name:
|
||||||
@ -1524,7 +1607,7 @@ class Interface(object):
|
|||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
## 창을 만듭니다.
|
## â<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||||
def __MakeWhisperDialog(self, name):
|
def __MakeWhisperDialog(self, name):
|
||||||
dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog)
|
dlgWhisper = uiWhisper.WhisperDialog(self.MinimizeWhisperDialog, self.CloseWhisperDialog)
|
||||||
dlgWhisper.BindInterface(self)
|
dlgWhisper.BindInterface(self)
|
||||||
@ -1536,7 +1619,7 @@ class Interface(object):
|
|||||||
|
|
||||||
return dlgWhisper
|
return dlgWhisper
|
||||||
|
|
||||||
## 버튼을 만듭니다.
|
## <EFBFBD><EFBFBD>ư<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||||
def __MakeWhisperButton(self, name):
|
def __MakeWhisperButton(self, name):
|
||||||
whisperButton = uiWhisper.WhisperButton()
|
whisperButton = uiWhisper.WhisperButton()
|
||||||
whisperButton.SetUpVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub")
|
whisperButton.SetUpVisual("d:/ymir work/ui/game/windows/btn_mail_up.sub")
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import app
|
import app
|
||||||
import constInfo
|
import constInfo
|
||||||
|
|
||||||
MAP_TRENT02 = "MAP_TRENT02" # 烙矫
|
MAP_TRENT02 = "MAP_TRENT02" # <EFBFBD>ӽ<EFBFBD>
|
||||||
MAP_WL = "MAP_WL" # 烙矫
|
MAP_WL = "MAP_WL" # <EFBFBD>ӽ<EFBFBD>
|
||||||
MAP_NUSLUCK = "MAP_NUSLUCK" # 烙矫
|
MAP_NUSLUCK = "MAP_NUSLUCK" # <EFBFBD>ӽ<EFBFBD>
|
||||||
MAP_TREE2 = "MAP_TREE2"
|
MAP_TREE2 = "MAP_TREE2"
|
||||||
|
|
||||||
BLEND_POTION_NO_TIME = "BLEND_POTION_NO_TIME"
|
BLEND_POTION_NO_TIME = "BLEND_POTION_NO_TIME"
|
||||||
@ -23,7 +23,7 @@ CHANNEL_NOTIFY_FULL = "CHANNEL_NOTIFY_FULL"
|
|||||||
GUILD_BUILDING_LIST_TXT = app.GetLocalePath() + "/GuildBuildingList.txt"
|
GUILD_BUILDING_LIST_TXT = app.GetLocalePath() + "/GuildBuildingList.txt"
|
||||||
|
|
||||||
GUILD_MARK_MIN_LEVEL = "3"
|
GUILD_MARK_MIN_LEVEL = "3"
|
||||||
GUILD_MARK_NOT_ENOUGH_LEVEL = "辨靛饭骇 3捞惑 何磐 啊瓷钦聪促."
|
GUILD_MARK_NOT_ENOUGH_LEVEL = "<EFBFBD><EFBFBD>巹<EFBFBD><EFBFBD> 3<>̻<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>."
|
||||||
|
|
||||||
ERROR_MARK_UPLOAD_NEED_RECONNECT = "UploadMark: Reconnect to game"
|
ERROR_MARK_UPLOAD_NEED_RECONNECT = "UploadMark: Reconnect to game"
|
||||||
ERROR_MARK_CHECK_NEED_RECONNECT = "CheckMark: Reconnect to game"
|
ERROR_MARK_CHECK_NEED_RECONNECT = "CheckMark: Reconnect to game"
|
||||||
@ -32,7 +32,7 @@ VIRTUAL_KEY_ALPHABET_LOWERS = r"[1234567890]/qwertyuiop\=asdfghjkl;`'zxcvbnm.,"
|
|||||||
VIRTUAL_KEY_ALPHABET_UPPERS = r'{1234567890}?QWERTYUIOP|+ASDFGHJKL:~"ZXCVBNM<>'
|
VIRTUAL_KEY_ALPHABET_UPPERS = r'{1234567890}?QWERTYUIOP|+ASDFGHJKL:~"ZXCVBNM<>'
|
||||||
VIRTUAL_KEY_SYMBOLS = '!@#$%^&*()_+|{}:"<>?~'
|
VIRTUAL_KEY_SYMBOLS = '!@#$%^&*()_+|{}:"<>?~'
|
||||||
VIRTUAL_KEY_NUMBERS = "1234567890-=\[];',./`"
|
VIRTUAL_KEY_NUMBERS = "1234567890-=\[];',./`"
|
||||||
VIRTUAL_KEY_SYMBOLS_BR = '!@#$%^&*()_+|{}:"<>?~徉汊殍觏祗螋斛<EFBFBD>'
|
VIRTUAL_KEY_SYMBOLS_BR = '!@#$%^&*()_+|{}:"<>?~<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
|
||||||
|
|
||||||
__IS_ENGLISH = "ENGLISH" == app.GetLocaleServiceName()
|
__IS_ENGLISH = "ENGLISH" == app.GetLocaleServiceName()
|
||||||
__IS_HONGKONG = "HONGKONG" == app.GetLocaleServiceName()
|
__IS_HONGKONG = "HONGKONG" == app.GetLocaleServiceName()
|
||||||
@ -106,7 +106,7 @@ def IsWE_KOREA():
|
|||||||
def LoadLocaleData():
|
def LoadLocaleData():
|
||||||
if IsYMIR():
|
if IsYMIR():
|
||||||
import net
|
import net
|
||||||
SERVER = "蔫档 辑滚"
|
SERVER = "<EFBFBD>赵 <20><><EFBFBD><EFBFBD>"
|
||||||
if SERVER == net.GetServerInfo()[:len(SERVER)]:
|
if SERVER == net.GetServerInfo()[:len(SERVER)]:
|
||||||
app.SetCHEONMA(0)
|
app.SetCHEONMA(0)
|
||||||
app.LoadLocaleData("locale/we_korea")
|
app.LoadLocaleData("locale/we_korea")
|
||||||
@ -119,7 +119,7 @@ def LoadLocaleData():
|
|||||||
app.LoadLocaleData(app.GetLocalePath())
|
app.LoadLocaleData(app.GetLocalePath())
|
||||||
|
|
||||||
def IsCHEONMA():
|
def IsCHEONMA():
|
||||||
return IsYMIR() # 捞力 YMIR 肺纳老篮 公炼扒 玫付辑滚烙. 玫付辑滚啊 巩阑 摧扁 傈鳖瘤 函且 老 绝澜.
|
return IsYMIR() # <EFBFBD><EFBFBD><EFBFBD><EFBFBD> YMIR <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> õ<><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. õ<><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ݱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>.
|
||||||
|
|
||||||
# END_OF_SUPPORT_NEW_KOREA_SERVER
|
# END_OF_SUPPORT_NEW_KOREA_SERVER
|
||||||
|
|
||||||
@ -181,13 +181,13 @@ elif IsSINGAPORE() :
|
|||||||
LOCALE_FILE_NAME = "%s/locale_game.txt" % app.GetLocalePath()
|
LOCALE_FILE_NAME = "%s/locale_game.txt" % app.GetLocalePath()
|
||||||
constInfo.IN_GAME_SHOP_ENABLE = 0
|
constInfo.IN_GAME_SHOP_ENABLE = 0
|
||||||
elif IsNEWCIBN() :
|
elif IsNEWCIBN() :
|
||||||
##霸烙疙捞柄柳促.
|
##<EFBFBD><EFBFBD><EFBFBD>Ӹ<EFBFBD><EFBFBD>̱<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||||
APP_TITLE = "新倚天2"
|
APP_TITLE = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2"
|
||||||
FN_GM_MARK = "%s/effect/gm.mse" % app.GetLocalePath()
|
FN_GM_MARK = "%s/effect/gm.mse" % app.GetLocalePath()
|
||||||
LOCALE_FILE_NAME = "%s/locale_game.txt" % app.GetLocalePath()
|
LOCALE_FILE_NAME = "%s/locale_game.txt" % app.GetLocalePath()
|
||||||
constInfo.IN_GAME_SHOP_ENABLE = 1
|
constInfo.IN_GAME_SHOP_ENABLE = 1
|
||||||
elif IsTAIWAN():
|
elif IsTAIWAN():
|
||||||
APP_TITLE = "矮III瓣"
|
APP_TITLE = "<EFBFBD><EFBFBD>III<EFBFBD><EFBFBD>"
|
||||||
FN_GM_MARK = "%s/effect/gm.mse" % app.GetLocalePath()
|
FN_GM_MARK = "%s/effect/gm.mse" % app.GetLocalePath()
|
||||||
LOCALE_FILE_NAME = "%s/locale_game.txt" % app.GetLocalePath()
|
LOCALE_FILE_NAME = "%s/locale_game.txt" % app.GetLocalePath()
|
||||||
|
|
||||||
@ -202,31 +202,31 @@ else:
|
|||||||
LoadLocaleFile(LOCALE_FILE_NAME, locals())
|
LoadLocaleFile(LOCALE_FILE_NAME, locals())
|
||||||
|
|
||||||
########################################################################################################
|
########################################################################################################
|
||||||
## NOTE : 酒捞袍阑 滚副锭 "公均阑/甫 滚府矫摆嚼聪鳖?" 巩磊凯狼 炼荤 急琶阑 困茄 内靛
|
## NOTE : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><> <20><><EFBFBD><EFBFBD><EFBFBD>ðڽ<C3B0><DABD>ϱ<EFBFBD>?" <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ڵ<EFBFBD>
|
||||||
dictSingleWord = {
|
dictSingleWord = {
|
||||||
"m":1, "n":1, "r":1, "M":1, "N":1, "R":1, "l":1, "L":1, "1":1, "3":1, "6":1, "7":1, "8":1, "0":1,
|
"m":1, "n":1, "r":1, "M":1, "N":1, "R":1, "l":1, "L":1, "1":1, "3":1, "6":1, "7":1, "8":1, "0":1,
|
||||||
}
|
}
|
||||||
|
|
||||||
dictDoubleWord = {
|
dictDoubleWord = {
|
||||||
"啊":1, "凹":1, "芭":1, "败":1, "绊":1, "背":1, "备":1, "痹":1, "弊":1, "扁":1, "俺":1, "奥":1, "霸":1, "拌":1, "苞":1, "饱":1, "迸":1, "彼":1, "鲍":1, "蓖":1, "贬":1,
|
"<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1,
|
||||||
"鳖":1, "播":1, "波":1, "哺":1, "部":1, "藏":1, "操":1, "搀":1, "掺":1, "尝":1, "柄":1, "兤":1, "膊":1, "簿":1, "彩":1, "蚕":1, "层":1, "茬":1, "惨":1, "差":1, "吺":1,
|
"<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1,
|
||||||
"唱":1, "衬":1, "呈":1, "赤":1, "畴":1, "储":1, "穿":1, "春":1, "蠢":1, "聪":1, "郴":1, "唙":1, "匙":1, "抽":1, "出":1, "嘡":1, "床":1, "创":1, "锄":1, "吹":1, "刺":1,
|
"<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD>v":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD>R":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1,
|
||||||
"促":1, "呆":1, "歹":1, "诞":1, "档":1, "低":1, "滴":1, "掂":1, "靛":1, "叼":1, "措":1, "堐":1, "单":1, "党":1, "德":1, "蹬":1, "抵":1, "地":1, "登":1, "第":1, "碉":1,
|
"<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1,
|
||||||
"蝶":1, "媥":1, "栋":1, "杜":1, "肚":1, "屆":1, "堆":1, "崗":1, "哆":1, "鹅":1, "锭":1, "嫐":1, "都":1, "嬻":1, "短":1, "段":1, "岕":1, "敦":1, "断":1, "顿":1, "剁":1,
|
"<EFBFBD><EFBFBD>":1, "<EFBFBD>x":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1,
|
||||||
"扼":1, "藩":1, "矾":1, "妨":1, "肺":1, "丰":1, "风":1, "幅":1, "福":1, "府":1, "贰":1, "巑":1, "饭":1, "肥":1, "分":1, "廜":1, "凤":1, "否":1, "汾":1, "夫":1, "恖":1,
|
"<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD>m":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD>O":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD>l":1,
|
||||||
"付":1, "赶":1, "赣":1, "哥":1, "葛":1, "功":1, "公":1, "孤":1, "骨":1, "固":1, "概":1, "愘":1, "皋":1, "革":1, "跟":1, "懤":1, "构":1, "咕":1, "羹":1, "箍":1, "掁":1,
|
"<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1,
|
||||||
"官":1, "跪":1, "滚":1, "涵":1, "焊":1, "禾":1, "何":1, "轰":1, "宏":1, "厚":1, "硅":1, "搸":1, "海":1, "憾":1, "毫":1, "耗":1, "痕":1, "恨":1, "浩":1, "哼":1, "晳":1,
|
"<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1,
|
||||||
"狐":1, "徊":1, "坏":1, "焕":1, "磺":1, "幌":1, "谎":1, "回":1, "悔":1, "贿":1, "哗":1, "曽":1, "痪":1, "枾":1, "栘":1, "桇":1, "棬":1, "椖":1, "晃":1, "椸":1, "榰":1,
|
"<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD>u":1,
|
||||||
"荤":1, "箕":1, "辑":1, "寂":1, "家":1, "碱":1, "荐":1, "酱":1, "胶":1, "矫":1, "货":1, "绩":1, "技":1, "嘉":1, "驾":1, "尖":1, "饯":1, "溅":1, "艰":1, "浆":1, "毭":1,
|
"<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1,
|
||||||
"轿":1, "沊":1, "结":1, "浨":1, "筋":1, "兢":1, "茎":1, "漮":1, "静":1, "揪":1, "截":1, "泍":1, "疥":1, "涖":1, "谨":1, "禁":1, "粳":1, "井":1, "烬":1, "警":1, "竞":1,
|
"<EFBFBD><EFBFBD>":1, "<EFBFBD>X":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD>o":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD>y":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1,
|
||||||
"酒":1, "具":1, "绢":1, "咯":1, "坷":1, "夸":1, "快":1, "蜡":1, "栏":1, "捞":1, "局":1, "娟":1, "俊":1, "抗":1, "客":1, "恐":1, "况":1, "傀":1, "寇":1, "困":1, "狼":1,
|
"<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1,
|
||||||
"磊":1, "鲤":1, "历":1, "廉":1, "炼":1, "烈":1, "林":1, "陵":1, "令":1, "瘤":1, "犁":1, "厉":1, "力":1, "恋":1, "谅":1, "寥":1, "拎":1, "菱":1, "了":1, "零":1, "<EFBFBD>":1,
|
"<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD>p":1,
|
||||||
"楼":1, "鹿":1, "录":1, "虑":1, "律":1, "<EFBFBD>":1, "罗":1, "麻":1, "玛":1, "骂":1, "掳":1, "<EFBFBD>":1, "屡":1, "<EFBFBD>":1, "乱":1, "轮":1, "洛":1, "≧":1, "仑":1, "妈":1, "﹏":1,
|
"¥":1, "¹":1, "¼":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD>c":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "°":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD>R":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD>n":1,
|
||||||
"瞒":1, "铆":1, "贸":1, "媚":1, "檬":1, "幂":1, "眠":1, "抿":1, "明":1, "摹":1, "盲":1, "獕":1, "眉":1, "们":1, "靡":1, "瑐":1, "苗":1, "瞄":1, "弥":1, "秒":1, "疢":1,
|
"<EFBFBD><EFBFBD>":1, "í":1, "ó":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "ġ":1, "ä":1, "<EFBFBD><EFBFBD>":1, "ü":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD>M":1,
|
||||||
"墨":1, "募":1, "目":1, "难":1, "内":1, "撵":1, "捻":1, "钮":1, "农":1, "虐":1, "某":1, "癿":1, "纳":1, "馁":1, "拟":1, "蔫":1, "孽":1, "涅":1, "年":1, "柠":1, "磾":1,
|
"ī":1, "ļ":1, "Ŀ":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "ť":1, "ũ":1, "Ű":1, "ij":1, "<EFBFBD>m":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1,
|
||||||
"鸥":1, "潘":1, "磐":1, "胚":1, "配":1, "鹏":1, "捧":1, "譬":1, "飘":1, "萍":1, "怕":1, "禣":1, "抛":1, "赔":1, "彭":1, "棚":1, "琵":1, "啤":1, "硼":1, "脾":1, "品":1,
|
"Ÿ":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "Ʃ":1, "Ʈ":1, "Ƽ":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD>O":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "ơ":1, "<EFBFBD><EFBFBD>":1, "Ƣ":1, "Ʒ":1,
|
||||||
"颇":1, "瀑":1, "欺":1, "旗":1, "器":1, "钎":1, "仟":1, "腔":1, "橇":1, "乔":1, "菩":1, "粭":1, "其":1, "企":1, "恰":1, "綅":1, "谴":1, "縍":1, "牵":1, "嵌":1, "纁":1,
|
"<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "ǥ":1, "Ǫ":1, "ǻ":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "ǡ":1, "<EFBFBD><EFBFBD>":1, "Ǵ":1, "<EFBFBD>R":1, "ǣ":1, "Ƕ":1, "<EFBFBD>c":1,
|
||||||
"窍":1, "轻":1, "倾":1, "囚":1, "龋":1, "瓤":1, "饶":1, "绒":1, "儒":1, "洒":1, "秦":1, "羺":1, "庆":1, "驱":1, "拳":1, "瘸":1, "忍":1, "妊":1, "雀":1, "戎":1, "锐":1,
|
"<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "ȣ":1, "ȿ":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "ȭ":1, "ȳ":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1, "ȸ":1, "<EFBFBD><EFBFBD>":1, "<EFBFBD><EFBFBD>":1,
|
||||||
}
|
}
|
||||||
|
|
||||||
locale = mapping(
|
locale = mapping(
|
||||||
@ -415,129 +415,129 @@ JOBINFO_TITLE = [
|
|||||||
|
|
||||||
JOBINFO_DATA_LIST = [
|
JOBINFO_DATA_LIST = [
|
||||||
[
|
[
|
||||||
["鸥绊抄 侩竿苞 绷洒瘤 臼绰 公荤狼",
|
["Ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ͱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"扁俺甫 荤恩甸篮 老拿绢 [侩磊]扼绊",
|
"<EFBFBD>ⰳ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>þ<EFBFBD> [<5B><><EFBFBD><EFBFBD>]<5D><><EFBFBD>",
|
||||||
"何弗促. 绢栋茄 困扁俊辑档 弊甸篮 ",
|
"<EFBFBD>θ<EFBFBD><EFBFBD><EFBFBD>. <20><EFBFBD><EEB6B0> <20><><EFBFBD><EFBFBD><E2BFA1><EFBFBD><EFBFBD> <20><EFBFBD><D7B5><EFBFBD> ",
|
||||||
"第肺 拱矾辑瘤 臼栏哥, 促摹绊 框流",
|
"<EFBFBD>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD>",
|
||||||
"捞扁 塞电 悼丰甫 困秦 窜脚栏肺",
|
"<EFBFBD>̱<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ḧ <20><><EFBFBD><EFBFBD> <20>ܽ<EFBFBD><DCBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"利甸苞 付林 轿快扁档 茄促. 捞甸篮",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ο<EFBFBD> <20>Ѵ<EFBFBD>. <20>̵<EFBFBD><CCB5><EFBFBD>",
|
||||||
"肋 窜访等 辟腊苞 塞, 碍仿茄 傍拜仿",
|
"<EFBFBD><EFBFBD> <20>ܷõ<DCB7> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD>",
|
||||||
"栏肺 傈厘 弥急滴俊辑 傍拜柳栏肺",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ּ<EFBFBD><D6BC>ο<EFBFBD><CEBF><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"劝距茄促. ",],
|
"Ȱ<EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. ",],
|
||||||
["啊厘 老馆利牢 傍拜屈 公荤肺, ",
|
["<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ϲ<EFBFBD><CFB9><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, ",
|
||||||
"利立傈俊 蝶弗 流立 傍拜栏肺 傈厘",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||||
"俊辑 劝距茄促. 焙流 漂己惑 辟仿阑",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ȱ<><C8B0><EFBFBD>Ѵ<EFBFBD>. <20><><EFBFBD><EFBFBD> Ư<><C6AF><EFBFBD><EFBFBD> <20>ٷ<EFBFBD><D9B7><EFBFBD>",
|
||||||
"皋牢栏肺 胶泡 器牢飘甫 捧磊窍登, ",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>, ",
|
||||||
"利立傈俊 蝶弗 积疙仿 / 规绢仿",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> / <20><><EFBFBD><EFBFBD>",
|
||||||
"犬焊甫 困秦 眉仿阑 棵赴促. 肚茄",
|
"Ȯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ü<><C3BC><EFBFBD><EFBFBD> <20>ø<EFBFBD><C3B8><EFBFBD>. <20><><EFBFBD><EFBFBD>",
|
||||||
"傍拜狼 沥犬己阑 臭捞扁 困秦 刮酶",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ȯ<EFBFBD><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD>̱<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ø",
|
||||||
"俊档 器牢飘甫 捧磊且 鞘夸啊 乐促.",],
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ䰡 <20>ִ<EFBFBD>.",],
|
||||||
["惑寸 荐霖狼 沥脚仿阑 捞侩窍绰",
|
["<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD> <20>̿<EFBFBD><CCBF>ϴ<EFBFBD>",
|
||||||
"吝/辟芭府 立傈屈 公荤肺, 阿 扁贱",
|
"<EFBFBD><EFBFBD>/<2F>ٰŸ<D9B0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD>",
|
||||||
"窍唱窍唱狼 臭篮 傍拜仿栏肺 傈厘俊辑",
|
"<EFBFBD>ϳ<EFBFBD><EFBFBD>ϳ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>忡<EFBFBD><E5BFA1>",
|
||||||
"劝距茄促. 焙流 漂己惑 辟仿阑 皋牢",
|
"Ȱ<EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. <20><><EFBFBD><EFBFBD> Ư<><C6AF><EFBFBD><EFBFBD> <20>ٷ<EFBFBD><D9B7><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||||
"栏肺 胶湃 器牢飘甫 捧磊窍登, ",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>, ",
|
||||||
"吝/辟芭府 傍拜狼 沥犬己苞 疙吝伏阑",
|
"<EFBFBD><EFBFBD>/<2F>ٰŸ<D9B0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ȯ<EFBFBD><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD>߷<EFBFBD><DFB7><EFBFBD>",
|
||||||
"困秦 刮酶阑 棵赴促. 肚茄 立傈 矫 ",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ø<EFBFBD><C3B8> <20>ø<EFBFBD><C3B8><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> ",
|
||||||
"利 傍拜俊 蝶弗 积疙仿 / 规绢仿",
|
"<EFBFBD><EFBFBD> <20><><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> / <20><><EFBFBD><EFBFBD>",
|
||||||
"犬焊甫 困秦 眉仿俊档 器牢飘甫",
|
"Ȯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ü<>¿<EFBFBD><C2BF><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>",
|
||||||
"捧磊且 鞘夸啊 乐促. ",],
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ䰡 <20>ִ<EFBFBD>. ",],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
["磊按篮 绢栋茄 惑炔俊辑档 磊脚狼",
|
["<EFBFBD>ڰ<EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EEB6B0> <20><>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD>",
|
||||||
"个阑 见扁绊 篮剐茄 绢狄狼 烙公甫",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20>ӹ<EFBFBD><D3B9><EFBFBD>",
|
||||||
"荐青窍搁辑 傈厘狼 饶困甫 瘤盔窍绰",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ鼭 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>",
|
||||||
"磊甸捞促. 捞甸篮 酒林 狐福绊 脚加",
|
"<EFBFBD>ڵ<EFBFBD><EFBFBD>̴<EFBFBD>. <20>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ż<EFBFBD>",
|
||||||
"窍哥, 厚且 单 绝捞 苞皑窍绊 例力等",
|
"<EFBFBD>ϸ<EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"青悼栏肺 利狼 鞭家俊 摹疙鸥甫 朝府",
|
"<EFBFBD>ൿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ҿ<DEBC> ġ<><C4A1>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD>",
|
||||||
"登, 傈厘俊急 利柳阑 氢秦 公荐茄",
|
"<EFBFBD><EFBFBD>, <20><><EFBFBD>忡<EFBFBD><E5BFA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"拳混阑 郴徽栏哥 磊脚狼 侩竿阑",
|
"ȭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"急焊牢促. "],
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>. "],
|
||||||
["滴颊 窜八阑 林公扁肺 促风哥, 脚加",
|
["<EFBFBD>μ<EFBFBD> <20>ܰ<EFBFBD><DCB0><EFBFBD> <20>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD> <20>ٷ<EFBFBD><D9B7>, <20>ż<EFBFBD>",
|
||||||
"窍霸 摹绊 狐瘤绰 磊按 漂蜡狼 框流烙",
|
"<EFBFBD>ϰ<EFBFBD> ġ<><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڰ<EFBFBD> Ư<><C6AF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"栏肺 傈厘俊辑 劝距茄促. 焙流 漂己惑",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>忡<EFBFBD><E5BFA1> Ȱ<><C8B0><EFBFBD>Ѵ<EFBFBD>. <20><><EFBFBD><EFBFBD> Ư<><C6AF><EFBFBD><EFBFBD>",
|
||||||
"刮酶阑 皋牢栏肺 胶泡 器牢飘甫 捧磊",
|
"<EFBFBD><EFBFBD>ø<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>",
|
||||||
"窍登, 辟仿阑 棵妨 傍拜仿阑 臭牢促.",
|
"<EFBFBD>ϵ<EFBFBD>, <20>ٷ<EFBFBD><D9B7><EFBFBD> <20>÷<EFBFBD> <20><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD> <20><><EFBFBD>δ<EFBFBD>.",
|
||||||
"肚茄 辟立傈俊 蝶弗 积疙仿/规绢仿 ",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD> ",
|
||||||
"惑铰阑 困秦 眉仿俊档 器牢飘甫",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ü<>¿<EFBFBD><C2BF><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>",
|
||||||
"捧磊且 鞘夸啊 乐促. ",],
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ䰡 <20>ִ<EFBFBD>. ",],
|
||||||
["劝阑 林公扁肺 促风哥, 变 矫具客",
|
["Ȱ<EFBFBD><EFBFBD> <20>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD> <20>ٷ<EFBFBD><D9B7>, <20><> <20>þ߿<C3BE>",
|
||||||
"荤沥芭府俊 蝶弗 盔芭府 傍拜栏肺",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"傈厘俊辑 劝距茄促. 焙流 漂己惑",
|
"<EFBFBD><EFBFBD><EFBFBD>忡<EFBFBD><EFBFBD> Ȱ<><C8B0><EFBFBD>Ѵ<EFBFBD>. <20><><EFBFBD><EFBFBD> Ư<><C6AF><EFBFBD><EFBFBD>",
|
||||||
"傍拜 己傍伏狼 刘啊甫 困秦 刮酶阑",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ø<EFBFBD><C3B8>",
|
||||||
"皋牢栏肺 棵妨具 窍哥, 盔芭府",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD> <20>ϸ<EFBFBD>, <20><><EFBFBD>Ÿ<EFBFBD>",
|
||||||
"傍拜狼 单固瘤 刘啊甫 困秦 辟仿阑",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ٷ<EFBFBD><D9B7><EFBFBD>",
|
||||||
"棵副 鞘夸啊 乐促. 肚茄 利甸俊霸",
|
"<EFBFBD>ø<EFBFBD> <20>ʿ䰡 <20>ִ<EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD>鿡<EFBFBD><E9BFA1>",
|
||||||
"器困登菌阑 矫, 利 傍拜俊 滚萍扁",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><EFBFBD><EFBFBD> <20><>, <20><> <20><><EFBFBD>ݿ<EFBFBD> <20><>Ƽ<EFBFBD><C6BC>",
|
||||||
"困茄 积疙仿/规绢仿 惑铰阑 困秦",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||||
"眉仿俊档 器牢飘甫 捧磊且 鞘夸啊",
|
"ü<EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ䰡",
|
||||||
"乐促. ", ],
|
"<EFBFBD>ִ<EFBFBD>. ", ],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
["荐扼绰 [刀篮 刀栏肺]狼 加己栏肺",
|
["<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> [<5B><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]<5D><> <20>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"芒汲等 漂荐 加己狼 焙流捞促. ",
|
"â<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ư<><C6AF> <20>Ӽ<EFBFBD><D3BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>. ",
|
||||||
"弊甸篮 傈厘俊辑 利甸狼 荤扁甫 历窍",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>忡<EFBFBD><E5BFA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>⸦ <20><><EFBFBD><EFBFBD>",
|
||||||
"矫虐绊, 厩付狼 塞阑 角篮 付藕栏肺",
|
"<EFBFBD><EFBFBD>Ű<EFBFBD><EFBFBD>, <20>Ǹ<EFBFBD><C7B8><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ź<EFBFBD><C5BA><EFBFBD><EFBFBD>",
|
||||||
"利狼 康去苞 腊脚阑 窿苟暗促. 锭肺",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȥ<EFBFBD><C8A5> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD>",
|
||||||
"捞甸篮 磊脚狼 八苞 癌渴俊 绢狄狼",
|
"<EFBFBD>̵<EFBFBD><EFBFBD><EFBFBD> <20>ڽ<EFBFBD><DABD><EFBFBD> <20>˰<EFBFBD> <20><><EFBFBD>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"塞阑 角绢, 傈厘俊辑 公荤 给瘤 臼篮",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD>, <20><><EFBFBD>忡<EFBFBD><E5BFA1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||||
"傍拜仿阑 惯戎窍扁档 窍绰单, 利甸阑",
|
"<EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ <20>ϴµ<CFB4>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"磷咯措绰弊 葛嚼捞 况倡俊 阐嘛秦",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"荤恩甸篮 荐扼甫 老拿绢 [付脚]捞扼",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>þ<EFBFBD> [<5B><><EFBFBD><EFBFBD>]<5D>̶<EFBFBD>",
|
||||||
"何福扁甫 林历 旧绰促."],
|
"<EFBFBD>θ<EFBFBD><EFBFBD>⸦ <20><><EFBFBD><EFBFBD> <20>ɴ´<C9B4>."],
|
||||||
["券公焙狼 荐扼绰 厩付狼 揪俊辑",
|
["ȯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD><C7B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"掘绢瘤绰 付仿阑 公扁唱 规绢备俊",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⳪ <20><><EFBFBD><EEB1B8>",
|
||||||
"角绢 公荤 给瘤 臼篮 傈捧仿栏肺",
|
"<EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"傈厘俊辑 劝距茄促. 焙流 漂己惑",
|
"<EFBFBD><EFBFBD><EFBFBD>忡<EFBFBD><EFBFBD> Ȱ<><C8B0><EFBFBD>Ѵ<EFBFBD>. <20><><EFBFBD><EFBFBD> Ư<><C6AF><EFBFBD><EFBFBD>",
|
||||||
"瘤瓷捞 臭酒龙荐废 馒侩 厘厚俊",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>",
|
||||||
"角府绰 付仿狼 困仿捞 刘措登骨肺,",
|
"<EFBFBD>Ǹ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ǹǷ<C7B9>,",
|
||||||
"瘤瓷苞 辟仿阑 皋牢栏肺 胶湃",
|
"<EFBFBD><EFBFBD><EFBFBD>ɰ<EFBFBD> <20>ٷ<EFBFBD><D9B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||||
"器牢飘甫 捧磊窍登, 立傈俊 蝶弗",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||||
"积疙仿/规绢仿 犬焊甫 困秦 眉仿阑",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ü<><C3BC><EFBFBD><EFBFBD>",
|
||||||
"棵赴促. 肚茄 傍拜狼 沥犬己苞",
|
"<EFBFBD>ø<EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ȯ<EFBFBD><C8AE><EFBFBD><EFBFBD>",
|
||||||
"雀乔甫 困秦辑 刮酶俊档 器牢飘甫",
|
"ȸ<EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD>ؼ<EFBFBD> <20><>ø<EFBFBD><C3B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>",
|
||||||
"捧磊且 鞘夸啊 乐促. ",],
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ䰡 <20>ִ<EFBFBD>. ",],
|
||||||
["孺付焙狼 荐扼甸篮 阿辆 绢狄狼",
|
["<EFBFBD>渶<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"林巩苞 厩付狼 付过栏肺 傈厘俊辑",
|
"<EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD><C7B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>忡<EFBFBD><E5BFA1>",
|
||||||
"劝距茄促. 焙流 漂己惑 付过 傍拜捞",
|
"Ȱ<EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>. <20><><EFBFBD><EFBFBD> Ư<><C6AF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"林捞骨肺 瘤瓷阑 皋牢栏肺 胶泡",
|
"<EFBFBD><EFBFBD><EFBFBD>̹Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||||
"器牢飘甫 捧磊窍登, 盔芭府 付过",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>, <20><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||||
"傍拜狼 沥犬己阑 困秦 刮酶阑 棵赴促.",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ȯ<EFBFBD><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ø<EFBFBD><C3B8> <20>ø<EFBFBD><C3B8><EFBFBD>.",
|
||||||
"肚茄 器困 登菌阑矫, 利 傍拜俊 蝶弗",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||||
"积疙仿 / 规绢仿 犬焊甫 困秦 眉仿俊档",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> / <20><><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ü<>¿<EFBFBD><C2BF><EFBFBD>",
|
||||||
"器牢飘甫 捧磊且 鞘夸啊 乐促. ",],
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ䰡 <20>ִ<EFBFBD>. ",],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
["公寸篮 侩脚苞 磊楷, 滴 绊措狼",
|
["<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ű<EFBFBD> <20>ڿ<EFBFBD>, <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"塞阑 促逢 荐 乐绰 蜡老茄 流辆捞促.",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٷ<EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.",
|
||||||
"弊甸篮 饶规俊辑 酒焙阑 焊炼窍绊",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ĺ濡<C4B9><E6BFA1> <20>Ʊ<EFBFBD><C6B1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD>",
|
||||||
"促模 悼丰狼 何惑阑 雀汗 矫虐哥",
|
"<EFBFBD><EFBFBD>ģ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>λ<EFBFBD><CEBB><EFBFBD> ȸ<><C8B8> <20><>Ű<EFBFBD><C5B0>",
|
||||||
"冻绢柳 荤扁甫 惑铰矫挪促. 弊甸篮",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>⸦ <20><>½<EFBFBD>Ų<EFBFBD><C5B2>. <20><EFBFBD><D7B5><EFBFBD>",
|
||||||
"酒焙狼 荐搁苞 绒侥阑 规秦窍绰 磊甫 ",
|
"<EFBFBD>Ʊ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><DEBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ڸ<EFBFBD> ",
|
||||||
"例措 侩辑窍瘤 臼栏哥, 弊繁 磊甸",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>뼭<EFBFBD><EBBCAD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><EFBFBD> <20>ڵ<EFBFBD>",
|
||||||
"俊霸绰 茄 痢 林历 绝捞 林巩阑",
|
"<EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ֹ<EFBFBD><D6B9><EFBFBD>",
|
||||||
"磐飘妨 弊 厚疤窃阑 决洒 隆拌茄促.",],
|
"<EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ¡<><C2A1><EFBFBD>Ѵ<EFBFBD>.",],
|
||||||
["玫锋焙狼 公寸甸篮 阿辆 何利贱苞",
|
["õ<EFBFBD>決<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"焊炼林巩俊 瓷窍哥, 利狼 流 / 埃立",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϸ<EFBFBD>, <20><><EFBFBD><EFBFBD> <20><> / <20><><EFBFBD><EFBFBD>",
|
||||||
"傍拜栏肺何磐 酒焙阑 瘤挪促. 焙流",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><EFBFBD><EFBFBD> <20>Ʊ<EFBFBD><C6B1><EFBFBD> <20><>Ų<EFBFBD><C5B2>. <20><><EFBFBD><EFBFBD>",
|
||||||
"漂己惑 付过 瓷仿捞 林捞骨肺 瘤瓷阑",
|
"Ư<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ɷ<EFBFBD><C9B7><EFBFBD> <20><><EFBFBD>̹Ƿ<CCB9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"皋牢栏肺 胶泡 器牢飘甫 捧磊窍登,",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>,",
|
||||||
"器困登菌阑 矫, 利 傍拜俊 蝶弗",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><EFBFBD><EFBFBD> <20><>, <20><> <20><><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||||
"积疙仿 / 规绢仿 犬焊甫 困秦 眉仿阑",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> / <20><><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ü<><C3BC><EFBFBD><EFBFBD>",
|
||||||
"棵赴促. 肚茄 盔芭府 付过 傍拜狼",
|
"<EFBFBD>ø<EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"沥犬己阑 困俊 刮酶俊档 器牢飘甫",
|
"<EFBFBD><EFBFBD>Ȯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ø<EFBFBD><C3B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>",
|
||||||
"捧磊且 鞘夸啊 乐促. ",],
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ䰡 <20>ִ<EFBFBD>. ",],
|
||||||
["堡汾焙狼 公寸甸篮 磊楷狼 塞阑",
|
["<EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ڿ<EFBFBD><DABF><EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||||
"呼妨 酒焙阑 雀汗窍绊, 锄脚狼 ",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ʊ<EFBFBD><C6B1><EFBFBD> ȸ<><C8B8><EFBFBD>ϰ<EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ",
|
||||||
"塞栏肺 剐笼茄 利甸俊霸 奴 面拜阑",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>鿡<EFBFBD><E9BFA1> ū <20><><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"涝鳃 荐 乐绰 捞甸捞促. 焙流狼",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20>̵<EFBFBD><CCB5>̴<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"漂己惑 付过 瓷仿捞 林捞骨肺 瘤瓷阑",
|
"Ư<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ɷ<EFBFBD><C9B7><EFBFBD> <20><><EFBFBD>̹Ƿ<CCB9> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"皋牢栏肺 胶泡 器牢飘甫 捧磊窍登,",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>,",
|
||||||
"器困登菌阑矫, 利 傍拜俊 蝶弗",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><> <20><><EFBFBD>ݿ<EFBFBD> <20><><EFBFBD><EFBFBD>",
|
||||||
"积疙仿 / 规绢仿 犬焊甫 困秦 眉仿阑",
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> / <20><><EFBFBD><EFBFBD> Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ü<><C3BC><EFBFBD><EFBFBD>",
|
||||||
"棵赴促. 肚茄 盔芭府 付过 傍拜狼",
|
"<EFBFBD>ø<EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ÿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
|
||||||
"沥犬己阑 困俊 刮酶俊档 器牢飘甫",
|
"<EFBFBD><EFBFBD>Ȯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ø<EFBFBD><C3B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE>",
|
||||||
"捧磊且 鞘夸啊 乐促. "],
|
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʿ䰡 <20>ִ<EFBFBD>. "],
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -628,140 +628,148 @@ def GetLetterOpenImageName():
|
|||||||
def GetLetterCloseImageName():
|
def GetLetterCloseImageName():
|
||||||
return "season1/icon/scroll_close.tga"
|
return "season1/icon/scroll_close.tga"
|
||||||
|
|
||||||
|
if app.ENABLE_QUEST_RENEWAL:
|
||||||
|
def GetBlueLetterImageName():
|
||||||
|
return "icon/item/scroll_close_blue.tga"
|
||||||
|
def GetBlueLetterOpenImageName():
|
||||||
|
return "icon/item/scroll_open_blue.tga"
|
||||||
|
def GetBlueLetterCloseImageName():
|
||||||
|
return "icon/item/scroll_close_blue.tga"
|
||||||
|
|
||||||
if 949 == app.GetDefaultCodePage():
|
if 949 == app.GetDefaultCodePage():
|
||||||
def EUL(name):
|
def EUL(name):
|
||||||
if GetAuxiliaryWordType(name):
|
if GetAuxiliaryWordType(name):
|
||||||
return "甫 "
|
return "<EFBFBD><EFBFBD> "
|
||||||
else:
|
else:
|
||||||
return "阑 "
|
return "<EFBFBD><EFBFBD> "
|
||||||
|
|
||||||
def I(name):
|
def I(name):
|
||||||
if GetAuxiliaryWordType(name):
|
if GetAuxiliaryWordType(name):
|
||||||
return "啊 "
|
return "<EFBFBD><EFBFBD> "
|
||||||
else:
|
else:
|
||||||
return "捞 "
|
return "<EFBFBD><EFBFBD> "
|
||||||
|
|
||||||
def DO_YOU_SELL_ITEM(sellItemName, sellItemCount, sellItemPrice):
|
def DO_YOU_SELL_ITEM(sellItemName, sellItemCount, sellItemPrice):
|
||||||
name = sellItemName
|
name = sellItemName
|
||||||
if sellItemCount > 1:
|
if sellItemCount > 1:
|
||||||
name += " "
|
name += " "
|
||||||
name += str(sellItemCount)
|
name += str(sellItemCount)
|
||||||
name += "俺"
|
name += "<EFBFBD><EFBFBD>"
|
||||||
|
|
||||||
return name + EUL(name) + str(sellItemPrice) + "成俊 颇矫摆嚼聪鳖?"
|
return name + EUL(name) + str(sellItemPrice) + "<EFBFBD>ɿ<EFBFBD> <20>Ľðڽ<C3B0><DABD>ϱ<EFBFBD>?"
|
||||||
|
|
||||||
def DO_YOU_BUY_ITEM(sellItemName, sellItemCount, sellItemPrice):
|
def DO_YOU_BUY_ITEM(sellItemName, sellItemCount, sellItemPrice):
|
||||||
name = sellItemName
|
name = sellItemName
|
||||||
if sellItemCount > 1:
|
if sellItemCount > 1:
|
||||||
name += " "
|
name += " "
|
||||||
name += str(sellItemCount)
|
name += str(sellItemCount)
|
||||||
name += "俺"
|
name += "<EFBFBD><EFBFBD>"
|
||||||
|
|
||||||
return name + EUL(name) + str(sellItemPrice) + "俊 荤矫摆嚼聪鳖?"
|
return name + EUL(name) + str(sellItemPrice) + "<EFBFBD><EFBFBD> <20><>ðڽ<C3B0><DABD>ϱ<EFBFBD>?"
|
||||||
|
|
||||||
def REFINE_FAILURE_CAN_NOT_ATTACH(attachedItemName):
|
def REFINE_FAILURE_CAN_NOT_ATTACH(attachedItemName):
|
||||||
return attachedItemName+EUL(attachedItemName)+"何馒且 荐 绝绰 酒捞袍涝聪促"
|
return attachedItemName+EUL(attachedItemName)+"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>"
|
||||||
|
|
||||||
def REFINE_FAILURE_NO_SOCKET(attachedItemName):
|
def REFINE_FAILURE_NO_SOCKET(attachedItemName):
|
||||||
return attachedItemName+EUL(attachedItemName)+"何馒且 荐 乐绰 家南捞 绝嚼聪促"
|
return attachedItemName+EUL(attachedItemName)+"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>"
|
||||||
|
|
||||||
def REFINE_FAILURE_NO_GOLD_SOCKET(attachedItemName):
|
def REFINE_FAILURE_NO_GOLD_SOCKET(attachedItemName):
|
||||||
return attachedItemName+EUL(attachedItemName)+"何馒且 荐 乐绰 炔陛 家南捞 绝嚼聪促"
|
return attachedItemName+EUL(attachedItemName)+"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>ִ<EFBFBD> Ȳ<><C8B2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>"
|
||||||
|
|
||||||
def HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, dropItemCount):
|
def HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, dropItemCount):
|
||||||
name = dropItemName
|
name = dropItemName
|
||||||
if dropItemCount > 1:
|
if dropItemCount > 1:
|
||||||
name += " "
|
name += " "
|
||||||
name += str(dropItemCount)
|
name += str(dropItemCount)
|
||||||
name += "俺"
|
name += "<EFBFBD><EFBFBD>"
|
||||||
|
|
||||||
return name+EUL(name)+"滚府矫摆嚼聪鳖?"
|
return name+EUL(name)+"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ðڽ<EFBFBD><EFBFBD>ϱ<EFBFBD>?"
|
||||||
|
|
||||||
def NumberToMoneyString(number):
|
def NumberToMoneyString(number):
|
||||||
if number <= 0:
|
if number <= 0:
|
||||||
return "0成"
|
return "0<EFBFBD><EFBFBD>"
|
||||||
|
|
||||||
number = str(number)
|
number = str(number)
|
||||||
result = CutMoneyString(number, 0, 4, "", "")
|
result = CutMoneyString(number, 0, 4, "", "")
|
||||||
result = CutMoneyString(number, 4, 8, "父", result)
|
result = CutMoneyString(number, 4, 8, "<EFBFBD><EFBFBD>", result)
|
||||||
result = CutMoneyString(number, 8, 12, "撅", result)
|
result = CutMoneyString(number, 8, 12, "<EFBFBD><EFBFBD>", result)
|
||||||
result = result + "成"
|
result = result + "<EFBFBD><EFBFBD>"
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def NumberToSecondaryCoinString(number):
|
def NumberToSecondaryCoinString(number):
|
||||||
if number <= 0:
|
if number <= 0:
|
||||||
return "0傈"
|
return "0<EFBFBD><EFBFBD>"
|
||||||
|
|
||||||
number = str(number)
|
number = str(number)
|
||||||
result = CutMoneyString(number, 0, 4, "", "")
|
result = CutMoneyString(number, 0, 4, "", "")
|
||||||
result = CutMoneyString(number, 4, 8, "父", result)
|
result = CutMoneyString(number, 4, 8, "<EFBFBD><EFBFBD>", result)
|
||||||
result = CutMoneyString(number, 8, 12, "撅", result)
|
result = CutMoneyString(number, 8, 12, "<EFBFBD><EFBFBD>", result)
|
||||||
result = result + "傈"
|
result = result + "<EFBFBD><EFBFBD>"
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def FISHING_NOTIFY(isFish, fishName):
|
def FISHING_NOTIFY(isFish, fishName):
|
||||||
if isFish:
|
if isFish:
|
||||||
return fishName + I(fishName) + "巩 淀 钦聪促."
|
return fishName + I(fishName) + "<EFBFBD><EFBFBD> <20><> <20>մϴ<D5B4>."
|
||||||
else:
|
else:
|
||||||
return fishName + I(fishName) + "吧赴淀 钦聪促."
|
return fishName + I(fishName) + "<EFBFBD>ɸ<EFBFBD><EFBFBD><EFBFBD> <20>մϴ<D5B4>."
|
||||||
|
|
||||||
def FISHING_SUCCESS(isFish, fishName):
|
def FISHING_SUCCESS(isFish, fishName):
|
||||||
if isFish:
|
if isFish:
|
||||||
return fishName + EUL(fishName) + "棱疽嚼聪促!"
|
return fishName + EUL(fishName) + "<EFBFBD><EFBFBD>ҽ<EFBFBD><EFBFBD>ϴ<EFBFBD>!"
|
||||||
else:
|
else:
|
||||||
return fishName + EUL(fishName) + "掘菌嚼聪促!"
|
return fishName + EUL(fishName) + "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>!"
|
||||||
|
|
||||||
elif 932 == app.GetDefaultCodePage():
|
elif 932 == app.GetDefaultCodePage():
|
||||||
def DO_YOU_SELL_ITEM(sellItemName, sellItemCount, sellItemPrice):
|
def DO_YOU_SELL_ITEM(sellItemName, sellItemCount, sellItemPrice):
|
||||||
if sellItemCount > 1 :
|
if sellItemCount > 1 :
|
||||||
return "%s %s 屄傪 %s偵攧傝傑偡偐丠" % ( sellItemName, sellItemCount, NumberToMoneyString(sellItemPrice) )
|
return "%s %s <EFBFBD><EFBFBD> %s<EFBFBD>ɔ<EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>H" % ( sellItemName, sellItemCount, NumberToMoneyString(sellItemPrice) )
|
||||||
else:
|
else:
|
||||||
return "%s 傪 %s偱攧傝傑偡偐丠" % (sellItemName, NumberToMoneyString(sellItemPrice) )
|
return "%s <EFBFBD><EFBFBD> %s<EFBFBD>Ŕ<EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>H" % (sellItemName, NumberToMoneyString(sellItemPrice) )
|
||||||
|
|
||||||
def DO_YOU_BUY_ITEM(buyItemName, buyItemCount, buyItemPrice) :
|
def DO_YOU_BUY_ITEM(buyItemName, buyItemCount, buyItemPrice) :
|
||||||
if buyItemCount > 1 :
|
if buyItemCount > 1 :
|
||||||
return "%s %s屄傪 %s偱攦偄傑偡偐丠" % ( buyItemName, buyItemCount, buyItemPrice )
|
return "%s %s<EFBFBD><EFBFBD> %s<EFBFBD>Ŕ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>H" % ( buyItemName, buyItemCount, buyItemPrice )
|
||||||
else:
|
else:
|
||||||
return "%s傪 %s偱攦偄傑偡偐丠" % ( buyItemName, buyItemPrice )
|
return "%s<EFBFBD><EFBFBD> %s<EFBFBD>Ŕ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>H" % ( buyItemName, buyItemPrice )
|
||||||
|
|
||||||
def REFINE_FAILURE_CAN_NOT_ATTACH(attachedItemName) :
|
def REFINE_FAILURE_CAN_NOT_ATTACH(attachedItemName) :
|
||||||
return "%s傪憰拝偱偒側偄傾僀僥?偱偡丅" % (attachedItemName)
|
return "%s<EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>A<EFBFBD>C<EFBFBD>e?<3F>ł<EFBFBD><C582>B" % (attachedItemName)
|
||||||
|
|
||||||
def REFINE_FAILURE_NO_SOCKET(attachedItemName) :
|
def REFINE_FAILURE_NO_SOCKET(attachedItemName) :
|
||||||
return "%s傪憰拝偡傞?働僢僩偑偁傝傑偣傫丅" % (attachedItemName)
|
return "%s<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>P<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD>B" % (attachedItemName)
|
||||||
|
|
||||||
def REFINE_FAILURE_NO_GOLD_SOCKET(attachedItemName) :
|
def REFINE_FAILURE_NO_GOLD_SOCKET(attachedItemName) :
|
||||||
return "%s傪憰拝偱偒傞墿嬥?働僢僩偑偁傝傑偣傫丅" % (attachedItemName)
|
return "%s<EFBFBD><EFBFBD><EFBFBD>ł<EFBFBD><EFBFBD>鉩<EFBFBD><EFBFBD>?<3F>P<EFBFBD>b<EFBFBD>g<EFBFBD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><DC82><EFBFBD>B" % (attachedItemName)
|
||||||
|
|
||||||
def HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, dropItemCount) :
|
def HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, dropItemCount) :
|
||||||
if dropItemCount > 1 :
|
if dropItemCount > 1 :
|
||||||
return "%s %d 屄傪幪偰傑偡偐丠" % (dropItemName, dropItemCount)
|
return "%s %d <EFBFBD><EFBFBD><EFBFBD>̂Ă܂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>H" % (dropItemName, dropItemCount)
|
||||||
else :
|
else :
|
||||||
return "%s傪幪偰傑偡偐丠" % (dropItemName)
|
return "%s<EFBFBD><EFBFBD><EFBFBD>̂Ă܂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>H" % (dropItemName)
|
||||||
|
|
||||||
def FISHING_NOTIFY(isFish, fishName) :
|
def FISHING_NOTIFY(isFish, fishName) :
|
||||||
if isFish :
|
if isFish :
|
||||||
return "%s 偑怘偄偮偄偨傛偆偱偡" % ( fishName )
|
return "%s <EFBFBD><EFBFBD><EFBFBD>H<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ł<EFBFBD>" % ( fishName )
|
||||||
else :
|
else :
|
||||||
return "%s 偑偐偐偭偨傛偆偱偡" % ( fishName )
|
return "%s <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>悤<EFBFBD>ł<EFBFBD>" % ( fishName )
|
||||||
|
|
||||||
def FISHING_SUCCESS(isFish, fishName) :
|
def FISHING_SUCCESS(isFish, fishName) :
|
||||||
if isFish :
|
if isFish :
|
||||||
return "%s 傪曔傑偊傑偟偨両" % (fishName)
|
return "%s <EFBFBD><EFBFBD>߂܂<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>I" % (fishName)
|
||||||
else :
|
else :
|
||||||
return "%s 傪庤偵擖傟傑偟偨両" % (fishName)
|
return "%s <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɓ<EFBFBD><EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>I" % (fishName)
|
||||||
|
|
||||||
def NumberToMoneyString(number) :
|
def NumberToMoneyString(number) :
|
||||||
if number <= 0 :
|
if number <= 0 :
|
||||||
return "0椉"
|
return "0<EFBFBD><EFBFBD>"
|
||||||
|
|
||||||
number = str(number)
|
number = str(number)
|
||||||
result = CutMoneyString(number, 0, 4, "", "")
|
result = CutMoneyString(number, 0, 4, "", "")
|
||||||
result = CutMoneyString(number, 4, 8, "枩", result)
|
result = CutMoneyString(number, 4, 8, "<EFBFBD><EFBFBD>", result)
|
||||||
result = CutMoneyString(number, 8, 12, "壄", result)
|
result = CutMoneyString(number, 8, 12, "<EFBFBD><EFBFBD>", result)
|
||||||
result = result + "椉"
|
result = result + "<EFBFBD><EFBFBD>"
|
||||||
|
|
||||||
return result
|
return result
|
||||||
def NumberToSecondaryCoinString(number) :
|
def NumberToSecondaryCoinString(number) :
|
||||||
@ -770,8 +778,8 @@ elif 932 == app.GetDefaultCodePage():
|
|||||||
|
|
||||||
number = str(number)
|
number = str(number)
|
||||||
result = CutMoneyString(number, 0, 4, "", "")
|
result = CutMoneyString(number, 0, 4, "", "")
|
||||||
result = CutMoneyString(number, 4, 8, "枩", result)
|
result = CutMoneyString(number, 4, 8, "<EFBFBD><EFBFBD>", result)
|
||||||
result = CutMoneyString(number, 8, 12, "壄", result)
|
result = CutMoneyString(number, 8, 12, "<EFBFBD><EFBFBD>", result)
|
||||||
result = result + "jun"
|
result = result + "jun"
|
||||||
|
|
||||||
return result
|
return result
|
||||||
@ -842,53 +850,53 @@ elif IsHONGKONG():
|
|||||||
elif IsNEWCIBN() or IsCIBN10():
|
elif IsNEWCIBN() or IsCIBN10():
|
||||||
def DO_YOU_SELL_ITEM(sellItemName, sellItemCount, sellItemPrice):
|
def DO_YOU_SELL_ITEM(sellItemName, sellItemCount, sellItemPrice):
|
||||||
if sellItemCount>1:
|
if sellItemCount>1:
|
||||||
return "确定要把%s个%s以%s金币卖掉吗?" % (str(sellItemCount), sellItemName, str(sellItemPrice))
|
return "ȷ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>%s<EFBFBD><EFBFBD>%s<EFBFBD><EFBFBD>%s<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" % (str(sellItemCount), sellItemName, str(sellItemPrice))
|
||||||
else:
|
else:
|
||||||
return "确定要把%s以%s金币卖掉吗?" % (sellItemName, str(sellItemPrice))
|
return "ȷ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>%s<EFBFBD><EFBFBD>%s<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" % (sellItemName, str(sellItemPrice))
|
||||||
|
|
||||||
def DO_YOU_BUY_ITEM(sellItemName, sellItemCount, sellItemPrice):
|
def DO_YOU_BUY_ITEM(sellItemName, sellItemCount, sellItemPrice):
|
||||||
if sellItemCount>1:
|
if sellItemCount>1:
|
||||||
return "确定要把%s个%s以%s金币买进吗?" % (str(sellItemCount), sellItemName, str(sellItemPrice))
|
return "ȷ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>%s<EFBFBD><EFBFBD>%s<EFBFBD><EFBFBD>%s<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" % (str(sellItemCount), sellItemName, str(sellItemPrice))
|
||||||
else:
|
else:
|
||||||
return "确定要把%s以%s金币买进吗?" % (sellItemName, str(sellItemPrice))
|
return "ȷ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>%s<EFBFBD><EFBFBD>%s<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" % (sellItemName, str(sellItemPrice))
|
||||||
|
|
||||||
def REFINE_FAILURE_CAN_NOT_ATTACH(attachedItemName):
|
def REFINE_FAILURE_CAN_NOT_ATTACH(attachedItemName):
|
||||||
return "无法镶嵌%s 的装备" % (attachedItemName)
|
return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ%s <20><>װ<EFBFBD><D7B0>" % (attachedItemName)
|
||||||
|
|
||||||
def REFINE_FAILURE_NO_SOCKET(attachedItemName):
|
def REFINE_FAILURE_NO_SOCKET(attachedItemName):
|
||||||
return "没有可以镶嵌%s 的孔" % (attachedItemName)
|
return "û<EFBFBD>п<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ%s <20>Ŀ<EFBFBD>" % (attachedItemName)
|
||||||
|
|
||||||
def REFINE_FAILURE_NO_GOLD_SOCKET(attachedItemName):
|
def REFINE_FAILURE_NO_GOLD_SOCKET(attachedItemName):
|
||||||
return "没有可以镶嵌%s 的黄金孔" % (attachedItemName)
|
return "û<EFBFBD>п<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƕ%s <20>Ļƽ<C4BB><C6BD>" % (attachedItemName)
|
||||||
|
|
||||||
def HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, dropItemCount):
|
def HOW_MANY_ITEM_DO_YOU_DROP(dropItemName, dropItemCount):
|
||||||
if dropItemCount>1:
|
if dropItemCount>1:
|
||||||
return "确定要扔掉%d个%s吗?" % (dropItemCount, dropItemName)
|
return "ȷ<EFBFBD><EFBFBD>Ҫ<EFBFBD>ӵ<EFBFBD>%d<EFBFBD><EFBFBD>%s<EFBFBD><EFBFBD>?" % (dropItemCount, dropItemName)
|
||||||
else:
|
else:
|
||||||
return "确定要扔掉%s吗?" % (dropItemName)
|
return "ȷ<EFBFBD><EFBFBD>Ҫ<EFBFBD>ӵ<EFBFBD>%s<EFBFBD><EFBFBD>?" % (dropItemName)
|
||||||
|
|
||||||
def FISHING_NOTIFY(isFish, fishName):
|
def FISHING_NOTIFY(isFish, fishName):
|
||||||
if isFish:
|
if isFish:
|
||||||
return fishName # 夯贰 咯扁俊 绢恫 富捞 嘿绢乐绰单, 牢内爹捞 柄廉乐绢辑 汗盔且 荐啊 绝促 ばば... cython俊辑 牢内爹 俊矾 唱辑 瘤况滚覆...
|
return fishName # <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD> <20>پ<EFBFBD><D9BE>ִµ<D6B4>, <20><><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>־ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ф<EFBFBD>... cython<6F><6E><EFBFBD><EFBFBD> <20><><EFBFBD>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...
|
||||||
else:
|
else:
|
||||||
return "钓着" + fishName + "了。"
|
return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" + fishName + "<EFBFBD>ˡ<EFBFBD>"
|
||||||
|
|
||||||
def FISHING_SUCCESS(isFish, fishName):
|
def FISHING_SUCCESS(isFish, fishName):
|
||||||
if isFish:
|
if isFish:
|
||||||
return "钓着" + fishName + "了。"
|
return "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" + fishName + "<EFBFBD>ˡ<EFBFBD>"
|
||||||
else:
|
else:
|
||||||
return "获得" + fishName + "了。"
|
return "<EFBFBD><EFBFBD><EFBFBD>" + fishName + "<EFBFBD>ˡ<EFBFBD>"
|
||||||
|
|
||||||
def NumberToMoneyString(number):
|
def NumberToMoneyString(number):
|
||||||
|
|
||||||
if number <= 0:
|
if number <= 0:
|
||||||
return "0两"
|
return "0<EFBFBD><EFBFBD>"
|
||||||
|
|
||||||
number = str(number)
|
number = str(number)
|
||||||
result = CutMoneyString(number, 0, 4, "", "")
|
result = CutMoneyString(number, 0, 4, "", "")
|
||||||
result = CutMoneyString(number, 4, 8, "万", result)
|
result = CutMoneyString(number, 4, 8, "<EFBFBD><EFBFBD>", result)
|
||||||
result = CutMoneyString(number, 8, 12, "亿", result)
|
result = CutMoneyString(number, 8, 12, "<EFBFBD><EFBFBD>", result)
|
||||||
result = result + "两"
|
result = result + "<EFBFBD><EFBFBD>"
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@ -899,8 +907,8 @@ elif IsNEWCIBN() or IsCIBN10():
|
|||||||
|
|
||||||
number = str(number)
|
number = str(number)
|
||||||
result = CutMoneyString(number, 0, 4, "", "")
|
result = CutMoneyString(number, 0, 4, "", "")
|
||||||
result = CutMoneyString(number, 4, 8, "万", result)
|
result = CutMoneyString(number, 4, 8, "<EFBFBD><EFBFBD>", result)
|
||||||
result = CutMoneyString(number, 8, 12, "亿", result)
|
result = CutMoneyString(number, 8, 12, "<EFBFBD><EFBFBD>", result)
|
||||||
result = result + "JUN"
|
result = result + "JUN"
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -44,6 +44,721 @@ FACE_IMAGE_DICT = {
|
|||||||
def unsigned32(n):
|
def unsigned32(n):
|
||||||
return n & 0xFFFFFFFFL
|
return n & 0xFFFFFFFFL
|
||||||
|
|
||||||
|
if app.ENABLE_QUEST_RENEWAL:
|
||||||
|
__author__ = "Owsap"
|
||||||
|
__copyright__ = "Copyright (C) 2023, Owsap Development"
|
||||||
|
__website__ = "https://owsap.dev/"
|
||||||
|
|
||||||
|
#
|
||||||
|
# GitHub: https://github.com/Owsap
|
||||||
|
# M2Dev: https://metin2.dev/profile/544-owsap/
|
||||||
|
#
|
||||||
|
|
||||||
|
from _weakref import proxy
|
||||||
|
|
||||||
|
QUEST_LABEL_TAB_COLOR_IMG_DICT = {
|
||||||
|
quest.QUEST_TYPE_MAIN : "d:/ymir work/ui/quest_re/tabcolor_1_main.tga",
|
||||||
|
quest.QUEST_TYPE_SUB : "d:/ymir work/ui/quest_re/tabcolor_2_sub.tga",
|
||||||
|
quest.QUEST_TYPE_LEVELUP : "d:/ymir work/ui/quest_re/tabcolor_3_levelup.tga",
|
||||||
|
quest.QUEST_TYPE_EVENT : "d:/ymir work/ui/quest_re/tabcolor_4_event.tga",
|
||||||
|
quest.QUEST_TYPE_COLLECTION : "d:/ymir work/ui/quest_re/tabcolor_5_collection.tga",
|
||||||
|
quest.QUEST_TYPE_SYSTEM : "d:/ymir work/ui/quest_re/tabcolor_6_system.tga",
|
||||||
|
quest.QUEST_TYPE_SCROLL : "d:/ymir work/ui/quest_re/tabcolor_7_scroll.tga",
|
||||||
|
quest.QUEST_TYPE_DAILY : "d:/ymir work/ui/quest_re/tabcolor_8_daily.tga"
|
||||||
|
}
|
||||||
|
|
||||||
|
QUEST_LABEL_NAME_DICT = {
|
||||||
|
quest.QUEST_TYPE_MAIN : uiScriptLocale.QUEST_UI_TEXT_MAIN,
|
||||||
|
quest.QUEST_TYPE_SUB : uiScriptLocale.QUEST_UI_TEXT_SUB,
|
||||||
|
quest.QUEST_TYPE_LEVELUP : uiScriptLocale.QUEST_UI_TEXT_LEVELUP,
|
||||||
|
quest.QUEST_TYPE_EVENT : uiScriptLocale.QUEST_UI_TEXT_EVENT,
|
||||||
|
quest.QUEST_TYPE_COLLECTION : uiScriptLocale.QUEST_UI_TEXT_COLLECTION,
|
||||||
|
quest.QUEST_TYPE_SYSTEM : uiScriptLocale.QUEST_UI_TEXT_SYSTEM,
|
||||||
|
quest.QUEST_TYPE_SCROLL : uiScriptLocale.QUEST_UI_TEXT_SCROLL,
|
||||||
|
quest.QUEST_TYPE_DAILY : uiScriptLocale.QUEST_UI_TEXT_DAILY
|
||||||
|
}
|
||||||
|
|
||||||
|
class QuestDescObject(ui.Window):
|
||||||
|
WIDTH = 222
|
||||||
|
HEIGHT = 15
|
||||||
|
|
||||||
|
DESC_TEXT_MAX_WIDTH = 130 #202
|
||||||
|
|
||||||
|
def __init__(self, parent, quest_index, desc_data = None):
|
||||||
|
ui.Window.__init__(self)
|
||||||
|
|
||||||
|
self.parent = parent
|
||||||
|
self.quest_index = quest_index
|
||||||
|
self.desc_data = desc_data
|
||||||
|
|
||||||
|
self.quest_text = None
|
||||||
|
self.quest_string_type = quest.QUEST_STRING_TYPE_NORMAL
|
||||||
|
|
||||||
|
self.SetParent(parent)
|
||||||
|
|
||||||
|
# Contents window.
|
||||||
|
contents_window = ui.Window()
|
||||||
|
contents_window.SetParent(self)
|
||||||
|
contents_window.SetSize(self.WIDTH, self.HEIGHT)
|
||||||
|
contents_window.SetPosition(15, 0)
|
||||||
|
contents_window.Show()
|
||||||
|
self.contents_window = contents_window
|
||||||
|
|
||||||
|
# Contents text line.
|
||||||
|
contents_textline = ui.TextLine()
|
||||||
|
contents_textline.SetParent(self.contents_window)
|
||||||
|
contents_textline.SetText(desc_data)
|
||||||
|
contents_textline.SetPosition(0, 0)
|
||||||
|
contents_textline.Show()
|
||||||
|
self.contents_textline = contents_textline
|
||||||
|
|
||||||
|
ui.Window.Show(self)
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
ui.Window.__del__(self)
|
||||||
|
|
||||||
|
self.parent = None
|
||||||
|
self.quest_index = None
|
||||||
|
self.desc_data = None
|
||||||
|
|
||||||
|
self.quest_text = None
|
||||||
|
self.quest_string_type = None
|
||||||
|
|
||||||
|
def SetQuestText(self, text):
|
||||||
|
if app.GetTextWidth(text) > self.DESC_TEXT_MAX_WIDTH:
|
||||||
|
string = text[:self.DESC_TEXT_MAX_WIDTH] + "..."
|
||||||
|
else:
|
||||||
|
string = text
|
||||||
|
|
||||||
|
self.quest_text = text
|
||||||
|
self.contents_textline.SetText(string)
|
||||||
|
|
||||||
|
def SetQuestStringType(self, type):
|
||||||
|
self.quest_string_type = type
|
||||||
|
|
||||||
|
def __UpdateQuestClock(self):
|
||||||
|
(last_name, last_time) = quest.GetQuestLastTime(self.quest_index)
|
||||||
|
|
||||||
|
clock_text = localeInfo.QUEST_UNLIMITED_TIME
|
||||||
|
if len(last_name) > 0:
|
||||||
|
if last_time <= 0:
|
||||||
|
clock_text = localeInfo.QUEST_TIMEOVER
|
||||||
|
else:
|
||||||
|
second = int(last_time % 60)
|
||||||
|
minute = int((last_time / 60) % 60)
|
||||||
|
hour = int((last_time / 60) / 60) % 24
|
||||||
|
|
||||||
|
clock_text = last_name + " : "
|
||||||
|
|
||||||
|
if hour > 0:
|
||||||
|
clock_text += str(hour) + localeInfo.QUEST_HOUR
|
||||||
|
clock_text += " "
|
||||||
|
|
||||||
|
if minute > 0:
|
||||||
|
clock_text += str(minute) + localeInfo.QUEST_MIN
|
||||||
|
|
||||||
|
if second > 0 and minute < 1:
|
||||||
|
clock_text += str(second) + localeInfo.QUEST_SEC
|
||||||
|
|
||||||
|
self.contents_textline.SetText(clock_text)
|
||||||
|
|
||||||
|
def OnUpdate(self):
|
||||||
|
if self.quest_string_type == quest.QUEST_STRING_TYPE_CLOCK:
|
||||||
|
self.__UpdateQuestClock()
|
||||||
|
|
||||||
|
class QuestObject(ui.Window):
|
||||||
|
def __init__(self, parent, quest_index, is_confirmed):
|
||||||
|
ui.Window.__init__(self)
|
||||||
|
|
||||||
|
self.parent = parent
|
||||||
|
self.quest_index = quest_index
|
||||||
|
self.is_confirmed = is_confirmed
|
||||||
|
|
||||||
|
self.desc_list = []
|
||||||
|
|
||||||
|
self.SetParent(self.parent)
|
||||||
|
self.SetOnMouseLeftButtonUpEvent(ui.__mem_func__(self.__ClickQuest))
|
||||||
|
|
||||||
|
# Quest line image.
|
||||||
|
line = ui.ImageBox()
|
||||||
|
line.LoadImage("d:/ymir work/ui/quest_re/quest_list_line_01.tga")
|
||||||
|
line.SetParent(self)
|
||||||
|
line.Hide()
|
||||||
|
self.line = line
|
||||||
|
|
||||||
|
# New quest icon.
|
||||||
|
new_image = ui.ImageBox()
|
||||||
|
new_image.SetParent(self)
|
||||||
|
new_image.AddFlag("not_pick")
|
||||||
|
new_image.SetPosition(3, 4)
|
||||||
|
new_image.LoadImage("d:/ymir work/ui/quest_re/quest_new.tga")
|
||||||
|
if not self.is_confirmed:
|
||||||
|
new_image.Show()
|
||||||
|
else:
|
||||||
|
new_image.Hide()
|
||||||
|
self.new_image = new_image
|
||||||
|
|
||||||
|
ui.Window.Hide(self)
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
ui.Window.__del__(self)
|
||||||
|
|
||||||
|
self.parent = None
|
||||||
|
self.quest_index = 0
|
||||||
|
self.is_confirmed = False
|
||||||
|
|
||||||
|
self.desc_list = []
|
||||||
|
|
||||||
|
def AddLine(self):
|
||||||
|
if not self.desc_list:
|
||||||
|
return
|
||||||
|
|
||||||
|
x, y = self.desc_list[-1].GetLocalPosition()
|
||||||
|
|
||||||
|
if self.line:
|
||||||
|
self.line.SetPosition(4, y + 15)
|
||||||
|
self.line.Show()
|
||||||
|
|
||||||
|
def RemoveLine(self):
|
||||||
|
self.line.Hide()
|
||||||
|
|
||||||
|
def ReplaceDesc(self, desc_list):
|
||||||
|
self.desc_list = []
|
||||||
|
|
||||||
|
for i, desc_data in enumerate(desc_list):
|
||||||
|
|
||||||
|
desc_object = QuestDescObject(self, self.quest_index)
|
||||||
|
desc_object.SetQuestStringType(i)
|
||||||
|
|
||||||
|
if i == quest.QUEST_STRING_TYPE_CLOCK:
|
||||||
|
(clock_last_name, clock_last_time) = desc_data
|
||||||
|
|
||||||
|
clock_text = localeInfo.QUEST_UNLIMITED_TIME
|
||||||
|
if len(clock_last_name) > 0:
|
||||||
|
if clock_last_time <= 0:
|
||||||
|
clock_text = localeInfo.QUEST_TIMEOVER
|
||||||
|
else:
|
||||||
|
quest_last_minute = clock_last_time / 60
|
||||||
|
quest_last_sec = clock_last_time % 60
|
||||||
|
|
||||||
|
clock_text = clock_last_name + " : "
|
||||||
|
|
||||||
|
if quest_last_minute > 0:
|
||||||
|
clock_text += str(quest_last_minute) + localeInfo.QUEST_MIN
|
||||||
|
if quest_last_sec > 0:
|
||||||
|
clock_text += " "
|
||||||
|
|
||||||
|
if quest_last_sec > 0:
|
||||||
|
clock_text += str(quest_last_sec) + localeInfo.QUEST_SEC
|
||||||
|
|
||||||
|
desc_object.SetQuestText(clock_text)
|
||||||
|
self.desc_list.append(desc_object)
|
||||||
|
|
||||||
|
elif i == quest.QUEST_STRING_TYPE_COUNT:
|
||||||
|
(quest_counter_name, quest_counter_value) = desc_data
|
||||||
|
|
||||||
|
if len(quest_counter_name) > 0:
|
||||||
|
counter_text = ("%s : %d" % (quest_counter_name, quest_counter_value))
|
||||||
|
|
||||||
|
desc_object.SetQuestText(counter_text)
|
||||||
|
self.desc_list.append(desc_object)
|
||||||
|
|
||||||
|
else:
|
||||||
|
quest_name = desc_data
|
||||||
|
|
||||||
|
desc_object.SetQuestText(quest_name)
|
||||||
|
self.desc_list.append(desc_object)
|
||||||
|
|
||||||
|
def SetPositionIndex(self, pos):
|
||||||
|
self.quest_index = pos
|
||||||
|
|
||||||
|
def SetConfirmed(self, is_confirmed):
|
||||||
|
self.is_confirmed = is_confirmed
|
||||||
|
if not self.is_confirmed:
|
||||||
|
self.new_image.Show()
|
||||||
|
else:
|
||||||
|
self.new_image.Hide()
|
||||||
|
|
||||||
|
def IsConfirmed(self):
|
||||||
|
return self.is_confirmed
|
||||||
|
|
||||||
|
def Arrange(self):
|
||||||
|
y = 0
|
||||||
|
for desc_obj in self.desc_list:
|
||||||
|
desc_obj.SetPosition(0, y)
|
||||||
|
y += 15 # Add space between text lines.
|
||||||
|
|
||||||
|
def __ClickQuest(self):
|
||||||
|
import event
|
||||||
|
event.QuestButtonClick(-2147483648 + self.quest_index)
|
||||||
|
|
||||||
|
# Remove new image from quest object.
|
||||||
|
self.is_confirmed = True
|
||||||
|
self.new_image.Hide()
|
||||||
|
|
||||||
|
if self.parent:
|
||||||
|
self.parent.CheckNewImage()
|
||||||
|
|
||||||
|
def GetDescCount(self):
|
||||||
|
return len(self.desc_list)
|
||||||
|
|
||||||
|
class QuestCategory(ui.Window):
|
||||||
|
BOARD_WIDTH = 222
|
||||||
|
if app.ENABLE_CONQUEROR_LEVEL:
|
||||||
|
BOARD_HEIGHT = 340
|
||||||
|
else:
|
||||||
|
BOARD_HEIGHT = 297
|
||||||
|
|
||||||
|
TAB_WIDTH = 222
|
||||||
|
TAB_HEIGHT = 22
|
||||||
|
|
||||||
|
def __init__(self, clipping_mask_window, parent, quest_type):
|
||||||
|
self.clipping_mask_window = clipping_mask_window
|
||||||
|
self.parent = parent
|
||||||
|
self.quest_type = quest_type
|
||||||
|
|
||||||
|
# Category position and height.
|
||||||
|
self.x = 0
|
||||||
|
self.y = 0
|
||||||
|
self.height = 0
|
||||||
|
|
||||||
|
# Dictionary that contains all the quests of this category.
|
||||||
|
self.quest_dict = {}
|
||||||
|
|
||||||
|
# Check if the category is on or off.
|
||||||
|
self.is_on = False
|
||||||
|
|
||||||
|
ui.Window.__init__(self)
|
||||||
|
|
||||||
|
self.SetParent(self.clipping_mask_window)
|
||||||
|
self.SetSize(self.BOARD_WIDTH, self.BOARD_HEIGHT)
|
||||||
|
|
||||||
|
# Name window that contains all the children.
|
||||||
|
name_window = ui.Window()
|
||||||
|
name_window.SetParent(self)
|
||||||
|
name_window.SetPosition(0, 0)
|
||||||
|
name_window.SetSize(self.TAB_WIDTH, self.TAB_HEIGHT)
|
||||||
|
name_window.SetOnMouseLeftButtonUpEvent(ui.__mem_func__(self.__ClickLabel))
|
||||||
|
name_window.Show()
|
||||||
|
self.name_window = name_window
|
||||||
|
|
||||||
|
# Image of the label.
|
||||||
|
label_image = ui.ImageBox()
|
||||||
|
label_image.SetParent(self.name_window)
|
||||||
|
label_image.AddFlag("not_pick")
|
||||||
|
label_image.SetPosition(0, 0)
|
||||||
|
label_image.SetSize(10, 10)
|
||||||
|
label_image.LoadImage("d:/ymir work/ui/quest_re/quest_tab_01.tga")
|
||||||
|
if localeInfo.IsARABIC():
|
||||||
|
label_image.LeftRightReverse()
|
||||||
|
label_image.Show()
|
||||||
|
self.label_image = label_image
|
||||||
|
|
||||||
|
# Opened image icon.
|
||||||
|
opened_image = ui.ImageBox()
|
||||||
|
opened_image.SetParent(self.name_window)
|
||||||
|
opened_image.AddFlag("not_pick")
|
||||||
|
if localeInfo.IsARABIC():
|
||||||
|
opened_image.SetPosition(204, 2)
|
||||||
|
else:
|
||||||
|
opened_image.SetPosition(4, 2)
|
||||||
|
opened_image.LoadImage("d:/ymir work/ui/quest_re/quest_up.tga")
|
||||||
|
opened_image.Hide()
|
||||||
|
self.opened_image = opened_image
|
||||||
|
|
||||||
|
# Closed image icon.
|
||||||
|
closed_image = ui.ImageBox()
|
||||||
|
closed_image.SetParent(self.name_window)
|
||||||
|
closed_image.AddFlag("not_pick")
|
||||||
|
if localeInfo.IsARABIC():
|
||||||
|
closed_image.SetPosition(204, 2)
|
||||||
|
else:
|
||||||
|
closed_image.SetPosition(4, 2)
|
||||||
|
closed_image.LoadImage("d:/ymir work/ui/quest_re/quest_down.tga")
|
||||||
|
closed_image.Show()
|
||||||
|
self.closed_image = closed_image
|
||||||
|
|
||||||
|
# Quest exist image icon.
|
||||||
|
quest_exist_image = ui.ImageBox()
|
||||||
|
quest_exist_image.SetParent(self.name_window)
|
||||||
|
quest_exist_image.AddFlag("not_pick")
|
||||||
|
if localeInfo.IsARABIC():
|
||||||
|
quest_exist_image.SetPosition(21, 12)
|
||||||
|
else:
|
||||||
|
quest_exist_image.SetPosition(188, 12)
|
||||||
|
if quest_type in QUEST_LABEL_TAB_COLOR_IMG_DICT:
|
||||||
|
quest_exist_image.LoadImage(QUEST_LABEL_TAB_COLOR_IMG_DICT[quest_type])
|
||||||
|
quest_exist_image.Show()
|
||||||
|
else:
|
||||||
|
quest_exist_image.Hide()
|
||||||
|
self.quest_exist_image = quest_exist_image
|
||||||
|
|
||||||
|
# Label name.
|
||||||
|
name_textline = ui.TextLine()
|
||||||
|
name_textline.SetParent(self.name_window)
|
||||||
|
if localeInfo.IsARABIC():
|
||||||
|
name_textline.SetPosition(28, 2)
|
||||||
|
name_textline.SetWindowHorizontalAlignRight()
|
||||||
|
name_textline.SetHorizontalAlignLeft()
|
||||||
|
else:
|
||||||
|
name_textline.SetPosition(24, 2)
|
||||||
|
if quest_type in QUEST_LABEL_NAME_DICT:
|
||||||
|
name_textline.SetText(QUEST_LABEL_NAME_DICT[quest_type])
|
||||||
|
else:
|
||||||
|
name_textline.SetText("")
|
||||||
|
name_textline.SetPackedFontColor(0xffCEC6B5)
|
||||||
|
name_textline.Show()
|
||||||
|
self.name_textline = name_textline
|
||||||
|
|
||||||
|
# New quest icon (green dot)
|
||||||
|
new_image = ui.ImageBox()
|
||||||
|
new_image.SetParent(self.name_window)
|
||||||
|
new_image.AddFlag("not_pick")
|
||||||
|
new_image.LoadImage("d:/ymir work/ui/quest_re/quest_new.tga")
|
||||||
|
if quest_type in QUEST_LABEL_NAME_DICT:
|
||||||
|
new_image.SetPosition(app.GetTextWidth(QUEST_LABEL_NAME_DICT[quest_type]) + 30, 5)
|
||||||
|
new_image.Show()
|
||||||
|
else:
|
||||||
|
new_image.SetPosition(0, 0)
|
||||||
|
new_image.Hide()
|
||||||
|
self.new_image = new_image
|
||||||
|
|
||||||
|
self.__HideQuestExistImage()
|
||||||
|
self.__HideNewImage()
|
||||||
|
|
||||||
|
ui.Window.Show(self)
|
||||||
|
|
||||||
|
def __del__(self):
|
||||||
|
ui.Window.__del__(self)
|
||||||
|
|
||||||
|
self.clipping_mask_window = None
|
||||||
|
self.parent = None
|
||||||
|
self.quest_type = 0
|
||||||
|
|
||||||
|
self.x = 0
|
||||||
|
self.y = 0
|
||||||
|
self.height = 0
|
||||||
|
|
||||||
|
self.quest_dict = {}
|
||||||
|
self.is_on = False
|
||||||
|
|
||||||
|
self.name_window = None
|
||||||
|
self.label_image = None
|
||||||
|
self.opened_image = None
|
||||||
|
self.closed_image = None
|
||||||
|
self.quest_exist_image = None
|
||||||
|
self.name_textline = None
|
||||||
|
self.new_image = None
|
||||||
|
|
||||||
|
def __ShowClosedImg(self):
|
||||||
|
self.opened_image.Hide()
|
||||||
|
self.closed_image.Show()
|
||||||
|
|
||||||
|
def __ShowOpendImg(self):
|
||||||
|
self.closed_image.Hide()
|
||||||
|
self.opened_image.Show()
|
||||||
|
|
||||||
|
def __ShowQuestExistImage(self):
|
||||||
|
self.quest_exist_image.Show()
|
||||||
|
|
||||||
|
def __HideQuestExistImage(self):
|
||||||
|
self.quest_exist_image.Hide()
|
||||||
|
|
||||||
|
def __ShowNewImage(self):
|
||||||
|
self.new_image.Show()
|
||||||
|
|
||||||
|
def __HideNewImage(self):
|
||||||
|
self.new_image.Hide()
|
||||||
|
|
||||||
|
def OpenCategory(self):
|
||||||
|
self.__ClickLabel()
|
||||||
|
|
||||||
|
def CloseCategory(self):
|
||||||
|
self.is_on = False
|
||||||
|
for key, item in self.quest_dict.items():
|
||||||
|
item.Hide()
|
||||||
|
|
||||||
|
self.__ShowClosedImg()
|
||||||
|
self.__Arrange()
|
||||||
|
|
||||||
|
# When clicking on the tab label.
|
||||||
|
def __ClickLabel(self):
|
||||||
|
# Prevent trying to open an empty category.
|
||||||
|
if not self.quest_dict:
|
||||||
|
self.is_on = False
|
||||||
|
self.__ShowClosedImg()
|
||||||
|
return
|
||||||
|
|
||||||
|
if self.is_on:
|
||||||
|
self.__ShowClosedImg()
|
||||||
|
self.is_on = False
|
||||||
|
else:
|
||||||
|
self.__ShowOpendImg()
|
||||||
|
self.is_on = True
|
||||||
|
|
||||||
|
# Show all the quests from the category.
|
||||||
|
for key, item in self.quest_dict.items():
|
||||||
|
item.Show() if self.is_on else item.Hide()
|
||||||
|
|
||||||
|
self.__Arrange()
|
||||||
|
|
||||||
|
# Check if there are any confirmed quests in the category.
|
||||||
|
def CheckNewImage(self):
|
||||||
|
for key, item in self.quest_dict.items():
|
||||||
|
if not item.IsConfirmed():
|
||||||
|
self.__ShowNewImage()
|
||||||
|
break
|
||||||
|
|
||||||
|
self.__HideNewImage()
|
||||||
|
|
||||||
|
# Replace quests in the category.
|
||||||
|
def ReplaceQuest(self, quest_index, is_confirmed, desc_data_list):
|
||||||
|
if not quest_index in self.quest_dict:
|
||||||
|
quest_obj = QuestObject(self, quest_index, is_confirmed)
|
||||||
|
else:
|
||||||
|
quest_obj = self.quest_dict[quest_index]
|
||||||
|
|
||||||
|
quest_obj.ReplaceDesc(desc_data_list)
|
||||||
|
if app.ENABLE_CLIP_MASK:
|
||||||
|
quest_obj.SetClippingMaskWindow(self.clipping_mask_window)
|
||||||
|
|
||||||
|
if self.is_on:
|
||||||
|
quest_obj.Show()
|
||||||
|
|
||||||
|
self.quest_dict.update({ quest_index : quest_obj })
|
||||||
|
if self.quest_dict:
|
||||||
|
self.__ShowQuestExistImage()
|
||||||
|
|
||||||
|
if not is_confirmed:
|
||||||
|
self.__ShowNewImage()
|
||||||
|
else:
|
||||||
|
self.__HideNewImage()
|
||||||
|
|
||||||
|
self.__Arrange()
|
||||||
|
|
||||||
|
# Delete quests in the category.
|
||||||
|
def DeleteQuest(self, quest_index):
|
||||||
|
if quest_index in self.quest_dict:
|
||||||
|
self.quest_dict[quest_index].Hide()
|
||||||
|
del self.quest_dict[quest_index]
|
||||||
|
|
||||||
|
# Check if there are any quests in the dictionary.
|
||||||
|
if not self.quest_dict:
|
||||||
|
self.is_on = False
|
||||||
|
|
||||||
|
self.__ShowClosedImg()
|
||||||
|
|
||||||
|
self.__HideNewImage()
|
||||||
|
self.__HideQuestExistImage()
|
||||||
|
|
||||||
|
self.__Arrange()
|
||||||
|
|
||||||
|
# Method of arranging all the quests in the category.
|
||||||
|
def __Arrange(self):
|
||||||
|
y = self.TAB_HEIGHT # Initial vertical position.
|
||||||
|
for index, (key, item) in enumerate(self.quest_dict.items()):
|
||||||
|
quest_desc_count = item.GetDescCount() # Quest description count.
|
||||||
|
quest_desc_height = quest_desc_count * 15 # Quest description height.
|
||||||
|
quest_desc_height += 5 # Add and extra gap for the line separator.
|
||||||
|
|
||||||
|
item.SetSize(self.TAB_WIDTH, quest_desc_height)
|
||||||
|
item.SetPosition(0, y)
|
||||||
|
item.Arrange() # Arrange the quest description text lines.
|
||||||
|
|
||||||
|
# Add line at the penultimate quest object.
|
||||||
|
if index < len(self.quest_dict) - 1:
|
||||||
|
item.AddLine()
|
||||||
|
else:
|
||||||
|
item.RemoveLine()
|
||||||
|
|
||||||
|
# Increase vertical position by quest description height.
|
||||||
|
y += quest_desc_height
|
||||||
|
|
||||||
|
# Call the parent method for arranging the category positions.
|
||||||
|
if self.parent:
|
||||||
|
self.parent.ChildHeightChanged(self.quest_type)
|
||||||
|
|
||||||
|
# Unused.
|
||||||
|
def __height_resize_post_process(self, original_function):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def IsOn(self):
|
||||||
|
return self.is_on
|
||||||
|
|
||||||
|
# Returns the total height of the quest object based on
|
||||||
|
# each quest description.
|
||||||
|
def GetQuestObjectHeight(self):
|
||||||
|
height = 0
|
||||||
|
for index, (key, item) in enumerate(self.quest_dict.items()):
|
||||||
|
height += item.GetDescCount() * 15 # Quest description height.
|
||||||
|
height += 5 # Add and extra gap for the line separator.
|
||||||
|
return height
|
||||||
|
|
||||||
|
# Updates the vertical position for the scroll.
|
||||||
|
def UpdateYPosition(self, pos):
|
||||||
|
self.SetPosition(self.x, self.y + self.height - pos)
|
||||||
|
|
||||||
|
def UpdatePosition(self, x, y):
|
||||||
|
self.x = x; self.y = y
|
||||||
|
self.SetPosition(self.x, self.y)
|
||||||
|
|
||||||
|
def SetHeight(self, height):
|
||||||
|
self.height = height
|
||||||
|
self.SetPosition(self.x, self.y + self.height)
|
||||||
|
|
||||||
|
def GetPosition(self):
|
||||||
|
return self.x, self.y
|
||||||
|
|
||||||
|
def GetHeight(self):
|
||||||
|
return self.height
|
||||||
|
|
||||||
|
class QuestCategoryGroup(ui.Window):
|
||||||
|
LABEL_HEIGHT = 22
|
||||||
|
SCROLL_STEP = 18
|
||||||
|
if app.ENABLE_CONQUEROR_LEVEL:
|
||||||
|
BOARD_HEIGHT = 340
|
||||||
|
else:
|
||||||
|
BOARD_HEIGHT = 297
|
||||||
|
|
||||||
|
# The constructor method that initializes everything.
|
||||||
|
def __init__(self, clipping_mask_window, scroll_object):
|
||||||
|
ui.Window.__init__(self)
|
||||||
|
|
||||||
|
self.clipping_mask_window = proxy(clipping_mask_window)
|
||||||
|
|
||||||
|
self.scroll = scroll_object
|
||||||
|
self.scroll.SetScrollEvent(ui.__mem_func__(self.__ScrollEvent))
|
||||||
|
self.scroll.SetScrollStep(self.SCROLL_STEP)
|
||||||
|
|
||||||
|
self.diff_height = 0
|
||||||
|
|
||||||
|
# Dictionary that contains all the categories.
|
||||||
|
self.quest_category_dict = {}
|
||||||
|
for quest_type in QUEST_LABEL_NAME_DICT.keys():
|
||||||
|
self.quest_category_dict[quest_type] = QuestCategory(self.clipping_mask_window, self, quest_type)
|
||||||
|
if app.ENABLE_CLIP_MASK:
|
||||||
|
self.quest_category_dict[quest_type].SetClippingMaskWindow(self.clipping_mask_window)
|
||||||
|
|
||||||
|
# Arrange all the categories initial position.
|
||||||
|
self.__Arrange()
|
||||||
|
|
||||||
|
# Refresh the scroll for its initial position.
|
||||||
|
self.__RefreshScroll()
|
||||||
|
|
||||||
|
# The destructor method which is called as soon as
|
||||||
|
# all references of the object are deleted.
|
||||||
|
def __del__(self):
|
||||||
|
ui.Window.__del__(self)
|
||||||
|
|
||||||
|
self.clipping_mask_window = None
|
||||||
|
self.scroll = None
|
||||||
|
self.diff_height = 0
|
||||||
|
|
||||||
|
self.quest_category_dict = {}
|
||||||
|
|
||||||
|
# This will replace (update) any quest in a category.
|
||||||
|
def ReplaceQuest(self, quest_type, quest_index, is_confirmed, desc_data_list):
|
||||||
|
if quest_type in self.quest_category_dict:
|
||||||
|
self.quest_category_dict[quest_type].ReplaceQuest(quest_index, is_confirmed, desc_data_list)
|
||||||
|
|
||||||
|
# Delete and hide the quest from the category.
|
||||||
|
def DeleteQuest(self, quest_type, quest_index):
|
||||||
|
if quest_type in self.quest_category_dict:
|
||||||
|
self.quest_category_dict[quest_type].DeleteQuest(quest_index)
|
||||||
|
|
||||||
|
# This method is called from the QuestCategory class
|
||||||
|
# which arranges all the category positions.
|
||||||
|
def ChildHeightChanged(self, quest_type):
|
||||||
|
self.__ArrangeAfter(quest_type)
|
||||||
|
self.__AdjustScrollPos(quest_type)
|
||||||
|
|
||||||
|
# Scroll event in which while scrolling, the categories
|
||||||
|
# move vertical along with its children.
|
||||||
|
def __ScrollEvent(self):
|
||||||
|
pos = self.scroll.GetPos() * self.diff_height
|
||||||
|
for key, item in self.quest_category_dict.items():
|
||||||
|
item.UpdateYPosition(pos)
|
||||||
|
|
||||||
|
# Refresh the scroll based on the category height.
|
||||||
|
def __RefreshScroll(self):
|
||||||
|
self.diff_height = 0
|
||||||
|
|
||||||
|
label_height = 0; height = 0
|
||||||
|
if app.ENABLE_CONQUEROR_LEVEL:
|
||||||
|
reserved_height = 2
|
||||||
|
else:
|
||||||
|
reserved_height = 7
|
||||||
|
|
||||||
|
for key, item in self.quest_category_dict.items():
|
||||||
|
label_height += self.LABEL_HEIGHT - reserved_height
|
||||||
|
is_on = item.IsOn()
|
||||||
|
height += item.GetQuestObjectHeight() if is_on else 0
|
||||||
|
|
||||||
|
total_height = height + label_height + 12
|
||||||
|
if total_height >= self.BOARD_HEIGHT:
|
||||||
|
self.diff_height = height - label_height
|
||||||
|
|
||||||
|
step_size = float(self.SCROLL_STEP) / self.diff_height
|
||||||
|
self.scroll.SetScrollStep(step_size)
|
||||||
|
self.scroll.Show()
|
||||||
|
else:
|
||||||
|
self.scroll.Hide()
|
||||||
|
|
||||||
|
# Unused.
|
||||||
|
def __AdjustScrollPos(self, quest_type):
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Arranges the categories on startup in a closed state.
|
||||||
|
def __Arrange(self):
|
||||||
|
for key, item in self.quest_category_dict.iteritems():
|
||||||
|
item.UpdatePosition(0, self.LABEL_HEIGHT * key)
|
||||||
|
|
||||||
|
# This arrangement is made when any category is clicked or
|
||||||
|
# when any other event is made in the quest object board,
|
||||||
|
# like updating objects or removing them.
|
||||||
|
def __ArrangeAfter(self, quest_type):
|
||||||
|
pos = self.scroll.GetPos() * self.diff_height
|
||||||
|
for key, item in self.quest_category_dict.items():
|
||||||
|
last_key = key -1; last_item = None; height = 0
|
||||||
|
|
||||||
|
if last_key in self.quest_category_dict:
|
||||||
|
last_item = self.quest_category_dict[key - 1]
|
||||||
|
is_on = last_item.IsOn()
|
||||||
|
height = last_item.GetQuestObjectHeight() if is_on else 0
|
||||||
|
|
||||||
|
# Set the height of the category from its base y position
|
||||||
|
# from the first arrangement "__Arrange", following up
|
||||||
|
# its height adjustment from its neighbor categories.
|
||||||
|
item.SetHeight(height + last_item.GetHeight() if last_item else 0)
|
||||||
|
|
||||||
|
# Update y position for the scroll step when scrolling.
|
||||||
|
item.UpdateYPosition(pos)
|
||||||
|
|
||||||
|
# Refreshing the scroll will properly set the scroll step
|
||||||
|
# size for all categories opened or closed on the board.
|
||||||
|
# If there is an empty space at the window then there will
|
||||||
|
# be no need for a scroll bar.
|
||||||
|
self.__RefreshScroll()
|
||||||
|
|
||||||
|
# Using the scroll event will snap the last category to
|
||||||
|
# the bottom of the board preventing empty spaces at the
|
||||||
|
# end of the window.
|
||||||
|
self.__ScrollEvent()
|
||||||
|
|
||||||
|
# Method used for opening a category. (Add-on)
|
||||||
|
def OpenCategory(self, quest_type, close_all = False):
|
||||||
|
if close_all:
|
||||||
|
for key, item in self.quest_category_dict.items():
|
||||||
|
item.CloseCategory()
|
||||||
|
|
||||||
|
if quest_type in self.quest_category_dict:
|
||||||
|
self.quest_category_dict[quest_type].OpenCategory()
|
||||||
|
|
||||||
|
# Method used for closing a category. (Add-on)
|
||||||
|
def CloseCategory(self, quest_type):
|
||||||
|
for key, item in self.quest_category_dict.items():
|
||||||
|
item.CloseCategory()
|
||||||
|
|
||||||
class CharacterWindow(ui.ScriptWindow):
|
class CharacterWindow(ui.ScriptWindow):
|
||||||
|
|
||||||
ACTIVE_PAGE_SLOT_COUNT = 8
|
ACTIVE_PAGE_SLOT_COUNT = 8
|
||||||
@ -118,6 +833,11 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
self.statusMinusButtonDict = None
|
self.statusMinusButtonDict = None
|
||||||
|
|
||||||
self.skillPageDict = None
|
self.skillPageDict = None
|
||||||
|
if app.ENABLE_QUEST_RENEWAL:
|
||||||
|
self.questScrollBar = None
|
||||||
|
self.questPageBoardWnd = None
|
||||||
|
self.questCategoryGroup = None
|
||||||
|
else:
|
||||||
self.questShowingStartIndex = 0
|
self.questShowingStartIndex = 0
|
||||||
self.questScrollBar = None
|
self.questScrollBar = None
|
||||||
self.questSlot = None
|
self.questSlot = None
|
||||||
@ -147,6 +867,10 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
ui.ScriptWindow.Show(self)
|
ui.ScriptWindow.Show(self)
|
||||||
|
|
||||||
|
if app.ENABLE_MOUSE_WHEEL_TOP_WINDOW:
|
||||||
|
self.SetTop()
|
||||||
|
wndMgr.SetWheelTopWindow(self.hWnd)
|
||||||
|
|
||||||
def __LoadScript(self, fileName):
|
def __LoadScript(self, fileName):
|
||||||
pyScrLoader = ui.PythonScriptLoader()
|
pyScrLoader = ui.PythonScriptLoader()
|
||||||
pyScrLoader.LoadScriptFile(self, fileName)
|
pyScrLoader.LoadScriptFile(self, fileName)
|
||||||
@ -249,6 +973,11 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
self.dualEmotionSlot = self.GetChild("DualEmotionSlot")
|
self.dualEmotionSlot = self.GetChild("DualEmotionSlot")
|
||||||
self.__SetEmotionSlot()
|
self.__SetEmotionSlot()
|
||||||
|
|
||||||
|
if app.ENABLE_QUEST_RENEWAL:
|
||||||
|
self.questScrollBar = self.GetChild("Quest_ScrollBar")
|
||||||
|
self.questPageBoardWnd = self.GetChild("quest_object_board_window")
|
||||||
|
self.questCategoryGroup = QuestCategoryGroup(self.questPageBoardWnd, self.questScrollBar)
|
||||||
|
else:
|
||||||
self.questShowingStartIndex = 0
|
self.questShowingStartIndex = 0
|
||||||
self.questScrollBar = self.GetChild("Quest_ScrollBar")
|
self.questScrollBar = self.GetChild("Quest_ScrollBar")
|
||||||
self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.OnQuestScroll))
|
self.questScrollBar.SetScrollEvent(ui.__mem_func__(self.OnQuestScroll))
|
||||||
@ -365,6 +1094,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
for i in xrange(len(self.skillGroupButton)):
|
for i in xrange(len(self.skillGroupButton)):
|
||||||
self.skillGroupButton[i].SetEvent(lambda arg=i: self.__SelectSkillGroup(arg))
|
self.skillGroupButton[i].SetEvent(lambda arg=i: self.__SelectSkillGroup(arg))
|
||||||
|
|
||||||
|
if not app.ENABLE_QUEST_RENEWAL:
|
||||||
self.RefreshQuest()
|
self.RefreshQuest()
|
||||||
self.__HideJobToolTip()
|
self.__HideJobToolTip()
|
||||||
|
|
||||||
@ -384,6 +1114,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
for titleBarValue in self.titleBarDict.itervalues():
|
for titleBarValue in self.titleBarDict.itervalues():
|
||||||
titleBarValue.SetCloseEvent(ui.__mem_func__(self.Hide))
|
titleBarValue.SetCloseEvent(ui.__mem_func__(self.Hide))
|
||||||
|
|
||||||
|
if not app.ENABLE_QUEST_RENEWAL:
|
||||||
self.questSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectQuest))
|
self.questSlot.SetSelectItemSlotEvent(ui.__mem_func__(self.__SelectQuest))
|
||||||
|
|
||||||
def __LoadWindow(self):
|
def __LoadWindow(self):
|
||||||
@ -418,6 +1149,9 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
self.Hide()
|
self.Hide()
|
||||||
|
|
||||||
|
if app.ENABLE_MOUSE_WHEEL_TOP_WINDOW:
|
||||||
|
wndMgr.ClearWheelTopWindow()
|
||||||
|
|
||||||
def SetSkillToolTip(self, toolTipSkill):
|
def SetSkillToolTip(self, toolTipSkill):
|
||||||
self.toolTipSkill = toolTipSkill
|
self.toolTipSkill = toolTipSkill
|
||||||
|
|
||||||
@ -521,7 +1255,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
except:
|
except:
|
||||||
#import exception
|
#import exception
|
||||||
#exception.Abort("CharacterWindow.RefreshStatus.BindObject")
|
#exception.Abort("CharacterWindow.RefreshStatus.BindObject")
|
||||||
## 게임이 튕겨 버림
|
## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ƨ<><C6A8> <20><><EFBFBD><EFBFBD>
|
||||||
pass
|
pass
|
||||||
|
|
||||||
self.__RefreshStatusPlusButtonList()
|
self.__RefreshStatusPlusButtonList()
|
||||||
@ -652,6 +1386,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
if 0 != self.toolTipSkill:
|
if 0 != self.toolTipSkill:
|
||||||
self.toolTipSkill.HideToolTip()
|
self.toolTipSkill.HideToolTip()
|
||||||
|
|
||||||
|
if not app.ENABLE_QUEST_RENEWAL:
|
||||||
## Quest
|
## Quest
|
||||||
def __SelectQuest(self, slotIndex):
|
def __SelectQuest(self, slotIndex):
|
||||||
questIndex = quest.GetQuestIndex(self.questShowingStartIndex+slotIndex)
|
questIndex = quest.GetQuestIndex(self.questShowingStartIndex+slotIndex)
|
||||||
@ -659,9 +1394,28 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
import event
|
import event
|
||||||
event.QuestButtonClick(-2147483648 + questIndex)
|
event.QuestButtonClick(-2147483648 + questIndex)
|
||||||
|
|
||||||
def RefreshQuest(self):
|
if app.ENABLE_QUEST_RENEWAL:
|
||||||
|
def RefreshQuest(self, quest_type, quest_index):
|
||||||
|
if not self.isLoaded or not self.questCategoryGroup:
|
||||||
|
return
|
||||||
|
|
||||||
if self.isLoaded==0:
|
try:
|
||||||
|
(quest_type, is_confirmed, quest_name, quest_icon, quest_counter_name, quest_counter_value) = quest.GetQuestData(quest_index)
|
||||||
|
(last_clock_name, last_clock_time) = quest.GetQuestLastTime(quest_index)
|
||||||
|
|
||||||
|
if self.questCategoryGroup:
|
||||||
|
self.questCategoryGroup.ReplaceQuest(quest_type, quest_index, is_confirmed, [quest_name, [last_clock_name, last_clock_time], [quest_counter_name, quest_counter_value]])
|
||||||
|
except TypeError:
|
||||||
|
return
|
||||||
|
|
||||||
|
def DeleteQuest(self, quest_type, quest_index):
|
||||||
|
self.questCategoryGroup.DeleteQuest(quest_type, quest_index)
|
||||||
|
|
||||||
|
def OpenQuestCategory(self, quest_type, close_all):
|
||||||
|
self.questCategoryGroup.OpenCategory(quest_type, close_all)
|
||||||
|
else:
|
||||||
|
def RefreshQuest(self):
|
||||||
|
if self.isLoaded == 0:
|
||||||
return
|
return
|
||||||
|
|
||||||
questCount = quest.GetQuestCount()
|
questCount = quest.GetQuestCount()
|
||||||
@ -673,7 +1427,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
self.questScrollBar.Hide()
|
self.questScrollBar.Hide()
|
||||||
|
|
||||||
for i in questRange[:questCount]:
|
for i in questRange[:questCount]:
|
||||||
(questName, questIcon, questCounterName, questCounterValue) = quest.GetQuestData(self.questShowingStartIndex+i)
|
(questName, questIcon, questCounterName, questCounterValue) = quest.GetQuestData(self.questShowingStartIndex + i)
|
||||||
|
|
||||||
self.questNameList[i].SetText(questName)
|
self.questNameList[i].SetText(questName)
|
||||||
self.questNameList[i].Show()
|
self.questNameList[i].Show()
|
||||||
@ -706,10 +1460,8 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
clockText = localeInfo.QUEST_UNLIMITED_TIME
|
clockText = localeInfo.QUEST_UNLIMITED_TIME
|
||||||
if len(lastName) > 0:
|
if len(lastName) > 0:
|
||||||
|
|
||||||
if lastTime <= 0:
|
if lastTime <= 0:
|
||||||
clockText = localeInfo.QUEST_TIMEOVER
|
clockText = localeInfo.QUEST_TIMEOVER
|
||||||
|
|
||||||
else:
|
else:
|
||||||
questLastMinute = lastTime / 60
|
questLastMinute = lastTime / 60
|
||||||
questLastSecond = lastTime % 60
|
questLastSecond = lastTime % 60
|
||||||
@ -764,6 +1516,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
def OnUpdate(self):
|
def OnUpdate(self):
|
||||||
|
if not app.ENABLE_QUEST_RENEWAL:
|
||||||
self.__UpdateQuestClock()
|
self.__UpdateQuestClock()
|
||||||
|
|
||||||
## Skill Process
|
## Skill Process
|
||||||
@ -798,7 +1551,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
skillLevel = getSkillLevel(slotIndex)
|
skillLevel = getSkillLevel(slotIndex)
|
||||||
skillType = getSkillType(skillIndex)
|
skillType = getSkillType(skillIndex)
|
||||||
|
|
||||||
## 승마 스킬 예외 처리
|
## <EFBFBD>¸<EFBFBD> <20><>ų <20><><EFBFBD><EFBFBD> ó<><C3B3>
|
||||||
if player.SKILL_INDEX_RIDING == skillIndex:
|
if player.SKILL_INDEX_RIDING == skillIndex:
|
||||||
if 1 == skillGrade:
|
if 1 == skillGrade:
|
||||||
skillLevel += 19
|
skillLevel += 19
|
||||||
@ -825,7 +1578,7 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
else:
|
else:
|
||||||
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
|
skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel)
|
||||||
|
|
||||||
## 그외
|
## <EFBFBD><EFBFBD>
|
||||||
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)
|
||||||
@ -859,11 +1612,11 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
def CanShowPlusButton(self, skillIndex, skillLevel, curStatPoint):
|
def CanShowPlusButton(self, skillIndex, skillLevel, curStatPoint):
|
||||||
|
|
||||||
## 스킬이 있으면
|
## <EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
if 0 == skillIndex:
|
if 0 == skillIndex:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
## 레벨업 조건을 만족한다면
|
## <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵٸ<D1B4>
|
||||||
if not skill.CanLevelUpSkill(skillIndex, skillLevel):
|
if not skill.CanLevelUpSkill(skillIndex, skillLevel):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@ -979,8 +1732,8 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
|
|
||||||
mouseModule.mouseController.DeattachObject()
|
mouseModule.mouseController.DeattachObject()
|
||||||
|
|
||||||
## FIXME : 스킬을 사용했을때 슬롯 번호를 가지고 해당 슬롯을 찾아서 업데이트 한다.
|
## FIXME : <EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD> <20><><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>.
|
||||||
## 매우 불합리. 구조 자체를 개선해야 할듯.
|
## <EFBFBD>ſ<EFBFBD> <20><><EFBFBD>ո<EFBFBD>. <20><><EFBFBD><EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>ҵ<EFBFBD>.
|
||||||
def OnUseSkill(self, slotIndex, coolTime):
|
def OnUseSkill(self, slotIndex, coolTime):
|
||||||
|
|
||||||
skillIndex = player.GetSkillIndex(slotIndex)
|
skillIndex = player.GetSkillIndex(slotIndex)
|
||||||
@ -1226,6 +1979,24 @@ class CharacterWindow(ui.ScriptWindow):
|
|||||||
def SelectSkillGroup(self, index):
|
def SelectSkillGroup(self, index):
|
||||||
self.__SelectSkillGroup(index)
|
self.__SelectSkillGroup(index)
|
||||||
|
|
||||||
|
if app.ENABLE_MOUSE_WHEEL_TOP_WINDOW:
|
||||||
|
def OnMouseWheelButtonUp(self):
|
||||||
|
if "QUEST" == self.state:
|
||||||
|
if self.questScrollBar:
|
||||||
|
self.questScrollBar.OnUp()
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
def OnMouseWheelButtonDown(self):
|
||||||
|
if "QUEST" == self.state:
|
||||||
|
if self.questScrollBar:
|
||||||
|
self.questScrollBar.OnDown()
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
if not app.ENABLE_QUEST_RENEWAL:
|
||||||
def OnQuestScroll(self):
|
def OnQuestScroll(self):
|
||||||
questCount = quest.GetQuestCount()
|
questCount = quest.GetQuestCount()
|
||||||
scrollLineCount = max(0, questCount - quest.QUEST_MAX_NUM)
|
scrollLineCount = max(0, questCount - quest.QUEST_MAX_NUM)
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#define ENABLE_NEW_EQUIPMENT_SYSTEM
|
#define ENABLE_NEW_EQUIPMENT_SYSTEM
|
||||||
#define __BL_CLIP_MASK__
|
#define __BL_CLIP_MASK__
|
||||||
#define __BL_MOUSE_WHEEL_TOP_WINDOW__
|
#define __BL_MOUSE_WHEEL_TOP_WINDOW__
|
||||||
|
#define ENABLE_QUEST_RENEWAL // Quest Page Renewal by Owsap
|
||||||
|
|
||||||
bool LocaleService_IsYMIR();
|
bool LocaleService_IsYMIR();
|
||||||
bool LocaleService_IsJAPAN();
|
bool LocaleService_IsJAPAN();
|
||||||
|
@ -1979,6 +1979,11 @@ typedef struct packet_quest_info
|
|||||||
BYTE flag;
|
BYTE flag;
|
||||||
} TPacketGCQuestInfo;
|
} TPacketGCQuestInfo;
|
||||||
|
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
BYTE type;
|
||||||
|
bool is_confirmed;
|
||||||
|
#endif
|
||||||
|
|
||||||
typedef struct packet_quest_confirm
|
typedef struct packet_quest_confirm
|
||||||
{
|
{
|
||||||
BYTE header;
|
BYTE header;
|
||||||
|
@ -1188,6 +1188,56 @@ PyObject* appLogoClose(PyObject* poSelf, PyObject* poArgs)
|
|||||||
return Py_BuildNone();
|
return Py_BuildNone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
PyObject* appGetTextLength(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
int iLength = 0;
|
||||||
|
|
||||||
|
char* szString;
|
||||||
|
if (PyTuple_GetString(poArgs, 0, &szString))
|
||||||
|
iLength = MultiByteToWideChar(GetDefaultCodePage(), 0, szString, -1, nullptr, 0);
|
||||||
|
|
||||||
|
return Py_BuildValue("i", iLength);
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject* appGetTextWidth(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
char* szString;
|
||||||
|
if (!PyTuple_GetString(poArgs, 0, &szString))
|
||||||
|
return Py_BuildValue("i", 0);
|
||||||
|
|
||||||
|
const DWORD dwDefaultCodePage = GetDefaultCodePage();
|
||||||
|
int iLength = MultiByteToWideChar(dwDefaultCodePage, 0, szString, -1, nullptr, 0);
|
||||||
|
|
||||||
|
wchar_t* wText = (wchar_t*)_alloca(2 * iLength);
|
||||||
|
|
||||||
|
iLength = MultiByteToWideChar(dwDefaultCodePage, 0, szString, -1, wText, iLength);
|
||||||
|
|
||||||
|
CGraphicText* pkDefaultFont = static_cast<CGraphicText*>(DefaultFont_GetResource());
|
||||||
|
if (!pkDefaultFont)
|
||||||
|
return Py_BuildValue("i", 0);
|
||||||
|
|
||||||
|
CGraphicFontTexture* pFont = pkDefaultFont->GetFontTexturePointer();
|
||||||
|
if (!pFont)
|
||||||
|
return Py_BuildValue("i", 0);
|
||||||
|
|
||||||
|
float fWidth = 0.0f;
|
||||||
|
for (int i = 0; i < iLength; ++i)
|
||||||
|
{
|
||||||
|
if (!wText[i])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
CGraphicFontTexture::TCharacterInfomation* pCharacterInfomation = pFont->GetCharacterInfomation(dwDefaultCodePage, wText[i]);
|
||||||
|
if (!pCharacterInfomation)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
fWidth += pCharacterInfomation->advance;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Py_BuildValue("i", (int)ceilf(fWidth));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void initapp()
|
void initapp()
|
||||||
{
|
{
|
||||||
static PyMethodDef s_methods[] =
|
static PyMethodDef s_methods[] =
|
||||||
@ -1328,6 +1378,10 @@ void initapp()
|
|||||||
{ "OnLogoOpen", appLogoOpen, METH_VARARGS },
|
{ "OnLogoOpen", appLogoOpen, METH_VARARGS },
|
||||||
{ "OnLogoClose", appLogoClose, METH_VARARGS },
|
{ "OnLogoClose", appLogoClose, METH_VARARGS },
|
||||||
|
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
{ "GetTextLength", appGetTextLength, METH_VARARGS },
|
||||||
|
{ "GetTextWidth", appGetTextWidth, METH_VARARGS },
|
||||||
|
#endif
|
||||||
|
|
||||||
{ NULL, NULL },
|
{ NULL, NULL },
|
||||||
};
|
};
|
||||||
@ -1507,6 +1561,12 @@ void initapp()
|
|||||||
PyModule_AddIntConstant(poModule, "ENABLE_DRAGON_SOUL_SYSTEM", 0);
|
PyModule_AddIntConstant(poModule, "ENABLE_DRAGON_SOUL_SYSTEM", 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
PyModule_AddIntConstant(poModule, "ENABLE_QUEST_RENEWAL", 1);
|
||||||
|
#else
|
||||||
|
PyModule_AddIntConstant(poModule, "ENABLE_QUEST_RENEWAL", 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(__BL_CLIP_MASK__)
|
#if defined(__BL_CLIP_MASK__)
|
||||||
PyModule_AddIntConstant(poModule, "__BL_CLIP_MASK__", true);
|
PyModule_AddIntConstant(poModule, "__BL_CLIP_MASK__", true);
|
||||||
#else
|
#else
|
||||||
@ -1519,6 +1579,12 @@ void initapp()
|
|||||||
PyModule_AddIntConstant(poModule, "__BL_MOUSE_WHEEL_TOP_WINDOW__", false);
|
PyModule_AddIntConstant(poModule, "__BL_MOUSE_WHEEL_TOP_WINDOW__", false);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(ENABLE_CONQUEROR_LEVEL)
|
||||||
|
PyModule_AddIntConstant(poModule, "ENABLE_CONQUEROR_LEVEL", 1);
|
||||||
|
#else
|
||||||
|
PyModule_AddIntConstant(poModule, "ENABLE_CONQUEROR_LEVEL", 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
|
#ifdef ENABLE_NEW_EQUIPMENT_SYSTEM
|
||||||
PyModule_AddIntConstant(poModule, "ENABLE_NEW_EQUIPMENT_SYSTEM", 1);
|
PyModule_AddIntConstant(poModule, "ENABLE_NEW_EQUIPMENT_SYSTEM", 1);
|
||||||
#else
|
#else
|
||||||
|
@ -145,7 +145,7 @@ int CPythonEventManager::RegisterEventSetFromString(const std::string& strScript
|
|||||||
if (!pEventSet)
|
if (!pEventSet)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
// SCRIPT_PARSING_FAILURE_CLEAR_BUG 스크립트 파싱 실패시 __ClearEventSetp 에서 에러 발생
|
// SCRIPT_PARSING_FAILURE_CLEAR_BUG <EFBFBD><EFBFBD>ũ<EFBFBD><EFBFBD>Ʈ <20>Ľ<EFBFBD> <20><><EFBFBD>н<EFBFBD> __ClearEventSetp <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD>
|
||||||
pEventSet->pCurrentTextLine = NULL;
|
pEventSet->pCurrentTextLine = NULL;
|
||||||
// END_OF_SCRIPT_PARSING_FAILURE_CLEAR_BUG
|
// END_OF_SCRIPT_PARSING_FAILURE_CLEAR_BUG
|
||||||
|
|
||||||
@ -159,7 +159,7 @@ int CPythonEventManager::RegisterEventSetFromString(const std::string& strScript
|
|||||||
pEventSet->poEventHandler = NULL;
|
pEventSet->poEventHandler = NULL;
|
||||||
__InitEventSet(*pEventSet);
|
__InitEventSet(*pEventSet);
|
||||||
|
|
||||||
// NOTE : 만약 단순한 스크립트 이벤트 실행 커맨드라면 다시 만든다.
|
// NOTE : <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ܼ<EFBFBD><DCBC><EFBFBD> <20><>ũ<EFBFBD><C5A9>Ʈ <20>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD> Ŀ<>ǵ<EFBFBD><C7B5><EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.
|
||||||
script::TCmd ScriptCommand;
|
script::TCmd ScriptCommand;
|
||||||
int pEventPosition;
|
int pEventPosition;
|
||||||
int iEventType;
|
int iEventType;
|
||||||
@ -468,7 +468,7 @@ void CPythonEventManager::ProcessEventSet(TEventSet * pEventSet)
|
|||||||
|
|
||||||
case EVENT_TYPE_WAIT:
|
case EVENT_TYPE_WAIT:
|
||||||
{
|
{
|
||||||
//캐틱터 만들기 제국 설명등에서 설명 밑으로 쳐지는 버그 수정/EVENT_TYPE_WAIT 관련해서 테스트 필요.
|
//ijƽ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEBFA1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>/EVENT_TYPE_WAIT <20><><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD> <20><EFBFBD>Ʈ <20>ʿ<EFBFBD>.
|
||||||
pEventSet->iyLocal = 0;
|
pEventSet->iyLocal = 0;
|
||||||
pEventSet->isLock = true;
|
pEventSet->isLock = true;
|
||||||
break;
|
break;
|
||||||
@ -567,6 +567,7 @@ void CPythonEventManager::ProcessEventSet(TEventSet * pEventSet)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(ENABLE_QUEST_RENEWAL)
|
||||||
// HIDE_QUEST_LETTER
|
// HIDE_QUEST_LETTER
|
||||||
case EVENT_TYPE_QUEST_BUTTON_CLOSE:
|
case EVENT_TYPE_QUEST_BUTTON_CLOSE:
|
||||||
{
|
{
|
||||||
@ -575,6 +576,7 @@ void CPythonEventManager::ProcessEventSet(TEventSet * pEventSet)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// END_OF_HIDE_QUEST_LETTER
|
// END_OF_HIDE_QUEST_LETTER
|
||||||
|
#endif
|
||||||
|
|
||||||
case EVENT_TYPE_QUEST_BUTTON:
|
case EVENT_TYPE_QUEST_BUTTON:
|
||||||
{
|
{
|
||||||
@ -584,8 +586,8 @@ void CPythonEventManager::ProcessEventSet(TEventSet * pEventSet)
|
|||||||
int idx = atoi(GetArgument("idx", ScriptCommand.argList));
|
int idx = atoi(GetArgument("idx", ScriptCommand.argList));
|
||||||
const char * name = GetArgument("name", ScriptCommand.argList);
|
const char * name = GetArgument("name", ScriptCommand.argList);
|
||||||
|
|
||||||
// 퀘스트 UI 리뉴얼이 되면 해결 되므로 일단 용혼석만 땜빵 by chrislee
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ UI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD> <20>ذ<EFBFBD> <20>ǹǷ<C7B9> <20>ϴ<EFBFBD> <20><>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> by chrislee
|
||||||
if (!strcmp(name, "조각난 용혼석?....")) {
|
if (!strcmp(name, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȥ<EFBFBD><C8A5>?....")) {
|
||||||
PyCallClassMemberFunc(m_poInterface, "BINARY_RecvQuest", Py_BuildValue("(isss)", idx, name, "highlight", ""));
|
PyCallClassMemberFunc(m_poInterface, "BINARY_RecvQuest", Py_BuildValue("(isss)", idx, name, "highlight", ""));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -1146,7 +1148,7 @@ void CPythonEventManager::SetLeftTimeString(const char * c_szString)
|
|||||||
}
|
}
|
||||||
|
|
||||||
CPythonEventManager::CPythonEventManager()
|
CPythonEventManager::CPythonEventManager()
|
||||||
: m_poInterface(0), m_strLeftTimeString("남은 시간 : %d초")
|
: m_poInterface(0), m_strLeftTimeString("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD> : %d<><64>")
|
||||||
{
|
{
|
||||||
EventTypeMap["LETTER"]=EVENT_TYPE_LETTER;
|
EventTypeMap["LETTER"]=EVENT_TYPE_LETTER;
|
||||||
EventTypeMap["COLOR"]=EVENT_TYPE_COLOR;
|
EventTypeMap["COLOR"]=EVENT_TYPE_COLOR;
|
||||||
|
@ -212,7 +212,7 @@ void CPythonNetworkStream::GamePhase()
|
|||||||
while (ret)
|
while (ret)
|
||||||
{
|
{
|
||||||
if(dwRecvCount++ >= MAX_RECV_COUNT-1 && GetRecvBufferSize() < SAFE_RECV_BUFSIZE
|
if(dwRecvCount++ >= MAX_RECV_COUNT-1 && GetRecvBufferSize() < SAFE_RECV_BUFSIZE
|
||||||
&& m_strPhase == "Game") //phase_game 이 아니어도 여기로 들어오는 경우가 있다.
|
&& m_strPhase == "Game") //phase_game <EFBFBD><EFBFBD> <20>ƴϾ <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>찡 <20>ִ<EFBFBD>.
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (!CheckPacket(&header))
|
if (!CheckPacket(&header))
|
||||||
@ -239,7 +239,7 @@ void CPythonNetworkStream::GamePhase()
|
|||||||
|
|
||||||
case HEADER_GC_PHASE:
|
case HEADER_GC_PHASE:
|
||||||
ret = RecvPhasePacket();
|
ret = RecvPhasePacket();
|
||||||
return; // 도중에 Phase 가 바뀌면 일단 무조건 GamePhase 탈출 - [levites]
|
return; // <EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD> Phase <20><> <20>ٲ<EFBFBD><D9B2> <20>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GamePhase Ż<><C5BB> - [levites]
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HEADER_GC_PVP:
|
case HEADER_GC_PVP:
|
||||||
@ -807,9 +807,9 @@ void CPythonNetworkStream::Warp(LONG lGlobalX, LONG lGlobalY)
|
|||||||
//rkBgMgr.SetShadowLevel(CPythonBackground::SHADOW_ALL);
|
//rkBgMgr.SetShadowLevel(CPythonBackground::SHADOW_ALL);
|
||||||
rkBgMgr.RefreshShadowLevel();
|
rkBgMgr.RefreshShadowLevel();
|
||||||
|
|
||||||
// NOTE : Warp 했을때 CenterPosition의 Height가 0이기 때문에 카메라가 땅바닥에 박혀있게 됨
|
// NOTE : Warp <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CenterPosition<6F><6E> Height<68><74> 0<>̱<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ī<><EFBFBD> <20><><EFBFBD>ٴڿ<D9B4> <20><><EFBFBD><EFBFBD><EFBFBD>ְ<EFBFBD> <20><>
|
||||||
// 움직일때마다 Height가 갱신 되기 때문이므로 맵을 이동하면 Position을 강제로 한번
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Height<68><74> <20><><EFBFBD><EFBFBD> <20>DZ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̹Ƿ<CCB9> <20><><EFBFBD><EFBFBD> <20>̵<EFBFBD><CCB5>ϸ<EFBFBD> Position<6F><6E> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ѹ<EFBFBD>
|
||||||
// 셋팅해준다 - [levites]
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD> - [levites]
|
||||||
LONG lLocalX = lGlobalX;
|
LONG lLocalX = lGlobalX;
|
||||||
LONG lLocalY = lGlobalY;
|
LONG lLocalY = lGlobalY;
|
||||||
__GlobalPositionToLocalPosition(lLocalX, lLocalY);
|
__GlobalPositionToLocalPosition(lLocalX, lLocalY);
|
||||||
@ -857,7 +857,7 @@ void CPythonNetworkStream::SetGamePhase()
|
|||||||
m_phaseProcessFunc.Set(this, &CPythonNetworkStream::GamePhase);
|
m_phaseProcessFunc.Set(this, &CPythonNetworkStream::GamePhase);
|
||||||
m_phaseLeaveFunc.Set(this, &CPythonNetworkStream::__LeaveGamePhase);
|
m_phaseLeaveFunc.Set(this, &CPythonNetworkStream::__LeaveGamePhase);
|
||||||
|
|
||||||
// Main Character 등록O
|
// Main Character <EFBFBD><EFBFBD><EFBFBD>O
|
||||||
|
|
||||||
IAbstractPlayer & rkPlayer = IAbstractPlayer::GetSingleton();
|
IAbstractPlayer & rkPlayer = IAbstractPlayer::GetSingleton();
|
||||||
rkPlayer.SetMainCharacterIndex(GetMainActorVID());
|
rkPlayer.SetMainCharacterIndex(GetMainActorVID());
|
||||||
@ -972,11 +972,11 @@ bool CPythonNetworkStream::RecvPVPPacket()
|
|||||||
case PVP_MODE_AGREE:
|
case PVP_MODE_AGREE:
|
||||||
rkChrMgr.RemovePVPKey(kPVPPacket.dwVIDSrc, kPVPPacket.dwVIDDst);
|
rkChrMgr.RemovePVPKey(kPVPPacket.dwVIDSrc, kPVPPacket.dwVIDDst);
|
||||||
|
|
||||||
// 상대가 나(Dst)에게 동의를 구했을때
|
// <EFBFBD><EFBFBD>밡 <20><>(Dst)<29><><EFBFBD><EFBFBD> <20><><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
if (rkPlayer.IsMainCharacterIndex(kPVPPacket.dwVIDDst))
|
if (rkPlayer.IsMainCharacterIndex(kPVPPacket.dwVIDDst))
|
||||||
rkPlayer.RememberChallengeInstance(kPVPPacket.dwVIDSrc);
|
rkPlayer.RememberChallengeInstance(kPVPPacket.dwVIDSrc);
|
||||||
|
|
||||||
// 상대에게 동의를 구한 동안에는 대결 불능
|
// <EFBFBD><EFBFBD>뿡<EFBFBD><EFBFBD> <20><><EFBFBD>Ǹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD> <20><><EFBFBD> <20>Ҵ<EFBFBD>
|
||||||
if (rkPlayer.IsMainCharacterIndex(kPVPPacket.dwVIDSrc))
|
if (rkPlayer.IsMainCharacterIndex(kPVPPacket.dwVIDSrc))
|
||||||
rkPlayer.RememberCantFightInstance(kPVPPacket.dwVIDDst);
|
rkPlayer.RememberCantFightInstance(kPVPPacket.dwVIDDst);
|
||||||
break;
|
break;
|
||||||
@ -987,11 +987,11 @@ bool CPythonNetworkStream::RecvPVPPacket()
|
|||||||
DWORD dwKiller = kPVPPacket.dwVIDSrc;
|
DWORD dwKiller = kPVPPacket.dwVIDSrc;
|
||||||
DWORD dwVictim = kPVPPacket.dwVIDDst;
|
DWORD dwVictim = kPVPPacket.dwVIDDst;
|
||||||
|
|
||||||
// 내(victim)가 상대에게 복수할 수 있을때
|
// <EFBFBD><EFBFBD>(victim)<29><> <20><>뿡<EFBFBD><EBBFA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
if (rkPlayer.IsMainCharacterIndex(dwVictim))
|
if (rkPlayer.IsMainCharacterIndex(dwVictim))
|
||||||
rkPlayer.RememberRevengeInstance(dwKiller);
|
rkPlayer.RememberRevengeInstance(dwKiller);
|
||||||
|
|
||||||
// 상대(victim)가 나에게 복수하는 동안에는 대결 불능
|
// <EFBFBD><EFBFBD><EFBFBD>(victim)<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD> <20><><EFBFBD> <20>Ҵ<EFBFBD>
|
||||||
if (rkPlayer.IsMainCharacterIndex(dwKiller))
|
if (rkPlayer.IsMainCharacterIndex(dwKiller))
|
||||||
rkPlayer.RememberCantFightInstance(dwVictim);
|
rkPlayer.RememberCantFightInstance(dwVictim);
|
||||||
break;
|
break;
|
||||||
@ -1009,7 +1009,7 @@ bool CPythonNetworkStream::RecvPVPPacket()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE : PVP 토글시 TargetBoard 를 업데이트 합니다.
|
// NOTE : PVP <EFBFBD><EFBFBD>۽<EFBFBD> TargetBoard <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>մϴ<D5B4>.
|
||||||
__RefreshTargetBoardByVID(kPVPPacket.dwVIDSrc);
|
__RefreshTargetBoardByVID(kPVPPacket.dwVIDSrc);
|
||||||
__RefreshTargetBoardByVID(kPVPPacket.dwVIDDst);
|
__RefreshTargetBoardByVID(kPVPPacket.dwVIDDst);
|
||||||
|
|
||||||
@ -1072,7 +1072,7 @@ bool CPythonNetworkStream::SendMessengerAddByNamePacket(const char * c_szName)
|
|||||||
return false;
|
return false;
|
||||||
char szName[CHARACTER_NAME_MAX_LEN];
|
char szName[CHARACTER_NAME_MAX_LEN];
|
||||||
strncpy(szName, c_szName, CHARACTER_NAME_MAX_LEN-1);
|
strncpy(szName, c_szName, CHARACTER_NAME_MAX_LEN-1);
|
||||||
szName[CHARACTER_NAME_MAX_LEN-1] = '\0'; // #720: 메신저 이름 관련 버퍼 오버플로우 버그 수정
|
szName[CHARACTER_NAME_MAX_LEN-1] = '\0'; // #720: <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>÷ο<C3B7> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
if (!Send(sizeof(szName), &szName))
|
if (!Send(sizeof(szName), &szName))
|
||||||
return false;
|
return false;
|
||||||
@ -1106,7 +1106,7 @@ bool CPythonNetworkStream::SendCharacterStatePacket(const TPixelPosition& c_rkPP
|
|||||||
else if (fDstRot > 360.0f)
|
else if (fDstRot > 360.0f)
|
||||||
fDstRot = fmodf(fDstRot, 360.0f);
|
fDstRot = fmodf(fDstRot, 360.0f);
|
||||||
|
|
||||||
// TODO: 나중에 패킷이름을 바꾸자
|
// TODO: <EFBFBD><EFBFBD><EFBFBD>߿<EFBFBD> <20><>Ŷ<EFBFBD≯<EFBFBD><CCB8><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD>
|
||||||
TPacketCGMove kStatePacket;
|
TPacketCGMove kStatePacket;
|
||||||
kStatePacket.bHeader = HEADER_CG_CHARACTER_MOVE;
|
kStatePacket.bHeader = HEADER_CG_CHARACTER_MOVE;
|
||||||
kStatePacket.bFunc = eFunc;
|
kStatePacket.bFunc = eFunc;
|
||||||
@ -1135,7 +1135,7 @@ bool CPythonNetworkStream::SendCharacterStatePacket(const TPixelPosition& c_rkPP
|
|||||||
return SendSequence();
|
return SendSequence();
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE : SlotIndex는 임시
|
// NOTE : SlotIndex<EFBFBD><EFBFBD> <20>ӽ<EFBFBD>
|
||||||
bool CPythonNetworkStream::SendUseSkillPacket(DWORD dwSkillIndex, DWORD dwTargetVID)
|
bool CPythonNetworkStream::SendUseSkillPacket(DWORD dwSkillIndex, DWORD dwTargetVID)
|
||||||
{
|
{
|
||||||
TPacketCGUseSkill UseSkillPacket;
|
TPacketCGUseSkill UseSkillPacket;
|
||||||
@ -1277,9 +1277,9 @@ bool CPythonNetworkStream::RecvChatPacket()
|
|||||||
|
|
||||||
buf[uChatSize]='\0';
|
buf[uChatSize]='\0';
|
||||||
|
|
||||||
// 유럽 아랍 버전 처리
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƶ<EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3>
|
||||||
// "이름: 내용" 입력을 "내용: 이름" 순서로 출력하기 위해 탭(0x08)을 넣음
|
// "<EFBFBD≯<EFBFBD>: <20><><EFBFBD><EFBFBD>" <20>Է<EFBFBD><D4B7><EFBFBD> "<22><><EFBFBD><EFBFBD>: <20≯<EFBFBD>" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>(0x08)<29><> <20><><EFBFBD><EFBFBD>
|
||||||
// 탭을 아랍어 기호로 처리해 (영어1) : (영어2) 로 입력되어도 (영어2) : (영어1) 로 출력하게 만든다
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƶ<EFBFBD><C6B6><EFBFBD> <20><>ȣ<EFBFBD><C8A3> ó<><C3B3><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>1) : (<28><><EFBFBD><EFBFBD>2) <20><> <20>ԷµǾ (<28><><EFBFBD><EFBFBD>2) : (<28><><EFBFBD><EFBFBD>1) <20><> <20><><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||||
if (LocaleService_IsEUROPE() && GetDefaultCodePage() == 1256)
|
if (LocaleService_IsEUROPE() && GetDefaultCodePage() == 1256)
|
||||||
{
|
{
|
||||||
char * p = strchr(buf, ':');
|
char * p = strchr(buf, ':');
|
||||||
@ -1305,11 +1305,11 @@ bool CPythonNetworkStream::RecvChatPacket()
|
|||||||
|
|
||||||
switch (kChat.type)
|
switch (kChat.type)
|
||||||
{
|
{
|
||||||
case CHAT_TYPE_TALKING: /* 그냥 채팅 */
|
case CHAT_TYPE_TALKING: /* <EFBFBD>׳<EFBFBD> ä<><C3A4> */
|
||||||
case CHAT_TYPE_PARTY: /* 파티말 */
|
case CHAT_TYPE_PARTY: /* <EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD> */
|
||||||
case CHAT_TYPE_GUILD: /* 길드말 */
|
case CHAT_TYPE_GUILD: /* <EFBFBD><EFBFBD>帻 */
|
||||||
case CHAT_TYPE_SHOUT: /* 외치기 */
|
case CHAT_TYPE_SHOUT: /* <EFBFBD><EFBFBD>ġ<EFBFBD><EFBFBD> */
|
||||||
case CHAT_TYPE_WHISPER: // 서버와는 연동되지 않는 Only Client Enum
|
case CHAT_TYPE_WHISPER: // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> Only Client Enum
|
||||||
{
|
{
|
||||||
char * p = strchr(buf, ':');
|
char * p = strchr(buf, ':');
|
||||||
|
|
||||||
@ -1347,9 +1347,9 @@ bool CPythonNetworkStream::RecvChatPacket()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CHAT_TYPE_COMMAND: /* 명령 */
|
case CHAT_TYPE_COMMAND: /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||||
case CHAT_TYPE_INFO: /* 정보 (아이템을 집었다, 경험치를 얻었다. 등) */
|
case CHAT_TYPE_INFO: /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD><EFBFBD>. <20><>) */
|
||||||
case CHAT_TYPE_NOTICE: /* 공지사항 */
|
case CHAT_TYPE_NOTICE: /* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||||
case CHAT_TYPE_BIG_NOTICE:
|
case CHAT_TYPE_BIG_NOTICE:
|
||||||
case CHAT_TYPE_MAX_NUM:
|
case CHAT_TYPE_MAX_NUM:
|
||||||
default:
|
default:
|
||||||
@ -1461,7 +1461,7 @@ bool CPythonNetworkStream::RecvPointChange()
|
|||||||
|
|
||||||
CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetMainInstancePtr();
|
CInstanceBase * pInstance = CPythonCharacterManager::Instance().GetMainInstancePtr();
|
||||||
|
|
||||||
// 자신의 Point가 변경되었을 경우..
|
// <EFBFBD>ڽ<EFBFBD><EFBFBD><EFBFBD> Point<6E><74> <20><><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD> <20><><EFBFBD>..
|
||||||
if (pInstance)
|
if (pInstance)
|
||||||
if (PointChange.dwVID == pInstance->GetVirtualID())
|
if (PointChange.dwVID == pInstance->GetVirtualID())
|
||||||
{
|
{
|
||||||
@ -1558,7 +1558,7 @@ bool CPythonNetworkStream::RecvDeadPacket()
|
|||||||
CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr();
|
CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr();
|
||||||
if (pkInstMain==pkChrInstSel)
|
if (pkInstMain==pkChrInstSel)
|
||||||
{
|
{
|
||||||
Tracenf("주인공 사망");
|
Tracenf("<EFBFBD><EFBFBD><EFBFBD>ΰ<EFBFBD> <20><><EFBFBD>");
|
||||||
if (false == pkInstMain->GetDuelMode())
|
if (false == pkInstMain->GetDuelMode())
|
||||||
{
|
{
|
||||||
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnGameOver", Py_BuildValue("()"));
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnGameOver", Py_BuildValue("()"));
|
||||||
@ -1953,12 +1953,19 @@ bool CPythonNetworkStream::RecvQuestInfoPacket()
|
|||||||
if (QUEST_PACKET_TYPE_END == byQuestPacketType)
|
if (QUEST_PACKET_TYPE_END == byQuestPacketType)
|
||||||
{
|
{
|
||||||
rkQuest.DeleteQuestInstance(QuestInfo.index);
|
rkQuest.DeleteQuestInstance(QuestInfo.index);
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "DeleteQuest", Py_BuildValue("(ii)", QuestInfo.type, QuestInfo.index));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else if (QUEST_PACKET_TYPE_UPDATE == byQuestPacketType)
|
else if (QUEST_PACKET_TYPE_UPDATE == byQuestPacketType)
|
||||||
{
|
{
|
||||||
if (!rkQuest.IsQuest(QuestInfo.index))
|
if (!rkQuest.IsQuest(QuestInfo.index))
|
||||||
{
|
{
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
rkQuest.MakeQuest(QuestInfo.index, QuestInfo.type, QuestInfo.is_confirmed);
|
||||||
|
#else
|
||||||
rkQuest.MakeQuest(QuestInfo.index);
|
rkQuest.MakeQuest(QuestInfo.index);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen(szTitle) > 0)
|
if (strlen(szTitle) > 0)
|
||||||
@ -1974,6 +1981,9 @@ bool CPythonNetworkStream::RecvQuestInfoPacket()
|
|||||||
rkQuest.SetQuestClockValue(QuestInfo.index, iClockValue);
|
rkQuest.SetQuestClockValue(QuestInfo.index, iClockValue);
|
||||||
if (c_rFlag & QUEST_SEND_COUNTER_VALUE)
|
if (c_rFlag & QUEST_SEND_COUNTER_VALUE)
|
||||||
rkQuest.SetQuestCounterValue(QuestInfo.index, iCounterValue);
|
rkQuest.SetQuestCounterValue(QuestInfo.index, iCounterValue);
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
rkQuest.SetQuestIsConfirmed(QuestInfo.index, QuestInfo.is_confirmed);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else if (QUEST_PACKET_TYPE_BEGIN == byQuestPacketType)
|
else if (QUEST_PACKET_TYPE_BEGIN == byQuestPacketType)
|
||||||
{
|
{
|
||||||
@ -1989,7 +1999,12 @@ bool CPythonNetworkStream::RecvQuestInfoPacket()
|
|||||||
}
|
}
|
||||||
// Process Start End
|
// Process Start End
|
||||||
|
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "RefreshQuest", Py_BuildValue("(ii)", QuestInfo.type, QuestInfo.index));
|
||||||
|
#else
|
||||||
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "RefreshQuest", Py_BuildValue("()"));
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "RefreshQuest", Py_BuildValue("()"));
|
||||||
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2149,7 +2164,7 @@ bool CPythonNetworkStream::SendExchangeExitPacket()
|
|||||||
return SendSequence();
|
return SendSequence();
|
||||||
}
|
}
|
||||||
|
|
||||||
// PointReset 개임시
|
// PointReset <EFBFBD><EFBFBD><EFBFBD>ӽ<EFBFBD>
|
||||||
bool CPythonNetworkStream::SendPointResetPacket()
|
bool CPythonNetworkStream::SendPointResetPacket()
|
||||||
{
|
{
|
||||||
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "StartPointReset", Py_BuildValue("()"));
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "StartPointReset", Py_BuildValue("()"));
|
||||||
@ -2303,7 +2318,7 @@ bool CPythonNetworkStream::RecvSkillCoolTimeEnd()
|
|||||||
|
|
||||||
bool CPythonNetworkStream::RecvSkillLevel()
|
bool CPythonNetworkStream::RecvSkillLevel()
|
||||||
{
|
{
|
||||||
assert(!"CPythonNetworkStream::RecvSkillLevel - 사용하지 않는 함수");
|
assert(!"CPythonNetworkStream::RecvSkillLevel - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ<EFBFBD> <20>Լ<EFBFBD>");
|
||||||
TPacketGCSkillLevel packet;
|
TPacketGCSkillLevel packet;
|
||||||
if (!Recv(sizeof(TPacketGCSkillLevel), &packet))
|
if (!Recv(sizeof(TPacketGCSkillLevel), &packet))
|
||||||
{
|
{
|
||||||
@ -2529,7 +2544,7 @@ bool CPythonNetworkStream::RecvAddFlyTargetingPacket()
|
|||||||
|
|
||||||
__GlobalPositionToLocalPosition(kPacket.lX, kPacket.lY);
|
__GlobalPositionToLocalPosition(kPacket.lX, kPacket.lY);
|
||||||
|
|
||||||
Tracef("VID [%d]가 타겟을 추가 설정\n",kPacket.dwShooterVID);
|
Tracef("VID [%d]<EFBFBD><EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD>\n",kPacket.dwShooterVID);
|
||||||
|
|
||||||
CPythonCharacterManager & rpcm = CPythonCharacterManager::Instance();
|
CPythonCharacterManager & rpcm = CPythonCharacterManager::Instance();
|
||||||
|
|
||||||
@ -2927,7 +2942,7 @@ bool CPythonNetworkStream::RecvPartyUpdate()
|
|||||||
|
|
||||||
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "UpdatePartyMemberInfo", Py_BuildValue("(i)", kPartyUpdatePacket.pid));
|
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "UpdatePartyMemberInfo", Py_BuildValue("(i)", kPartyUpdatePacket.pid));
|
||||||
|
|
||||||
// 만약 리더가 바뀌었다면, TargetBoard 의 버튼을 업데이트 한다.
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٲ<EFBFBD><D9B2><EFBFBD>ٸ<EFBFBD>, TargetBoard <20><> <20><>ư<EFBFBD><C6B0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ <20>Ѵ<EFBFBD>.
|
||||||
DWORD dwVID;
|
DWORD dwVID;
|
||||||
if (CPythonPlayer::Instance().PartyMemberPIDToVID(kPartyUpdatePacket.pid, &dwVID))
|
if (CPythonPlayer::Instance().PartyMemberPIDToVID(kPartyUpdatePacket.pid, &dwVID))
|
||||||
if (byOldState != kPartyUpdatePacket.state)
|
if (byOldState != kPartyUpdatePacket.state)
|
||||||
@ -3291,7 +3306,7 @@ bool CPythonNetworkStream::RecvGuild()
|
|||||||
if (!Recv(sizeof(dwPID), &dwPID))
|
if (!Recv(sizeof(dwPID), &dwPID))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Main Player 일 경우 DeleteGuild
|
// Main Player <EFBFBD><EFBFBD> <20><><EFBFBD> DeleteGuild
|
||||||
if (CPythonGuild::Instance().IsMainPlayer(dwPID))
|
if (CPythonGuild::Instance().IsMainPlayer(dwPID))
|
||||||
{
|
{
|
||||||
CPythonGuild::Instance().Destroy();
|
CPythonGuild::Instance().Destroy();
|
||||||
@ -4110,7 +4125,7 @@ bool CPythonNetworkStream::SendClientVersionPacket()
|
|||||||
TPacketCGClientVersion2 kVersionPacket;
|
TPacketCGClientVersion2 kVersionPacket;
|
||||||
kVersionPacket.header = HEADER_CG_CLIENT_VERSION2;
|
kVersionPacket.header = HEADER_CG_CLIENT_VERSION2;
|
||||||
strncpy(kVersionPacket.filename, filename.c_str(), sizeof(kVersionPacket.filename)-1);
|
strncpy(kVersionPacket.filename, filename.c_str(), sizeof(kVersionPacket.filename)-1);
|
||||||
strncpy(kVersionPacket.timestamp, "1215955205", sizeof(kVersionPacket.timestamp)-1); // # python time.time 앞자리
|
strncpy(kVersionPacket.timestamp, "1215955205", sizeof(kVersionPacket.timestamp)-1); // # python time.time <EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD>
|
||||||
//strncpy(kVersionPacket.timestamp, __TIMESTAMP__, sizeof(kVersionPacket.timestamp)-1); // old_string_ver
|
//strncpy(kVersionPacket.timestamp, __TIMESTAMP__, sizeof(kVersionPacket.timestamp)-1); // old_string_ver
|
||||||
//strncpy(kVersionPacket.timestamp, "1218055205", sizeof(kVersionPacket.timestamp)-1); // new_future
|
//strncpy(kVersionPacket.timestamp, "1218055205", sizeof(kVersionPacket.timestamp)-1); // new_future
|
||||||
//strncpy(kVersionPacket.timestamp, "1214055205", sizeof(kVersionPacket.timestamp)-1); // old_past
|
//strncpy(kVersionPacket.timestamp, "1214055205", sizeof(kVersionPacket.timestamp)-1); // old_past
|
||||||
@ -4251,7 +4266,7 @@ bool CPythonNetworkStream::RecvTargetCreatePacket()
|
|||||||
|
|
||||||
//#ifdef _DEBUG
|
//#ifdef _DEBUG
|
||||||
// char szBuf[256+1];
|
// char szBuf[256+1];
|
||||||
// _snprintf(szBuf, sizeof(szBuf), "타겟이 생성 되었습니다 [%d:%s]", kTargetCreate.lID, kTargetCreate.szTargetName);
|
// _snprintf(szBuf, sizeof(szBuf), "Ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD> [%d:%s]", kTargetCreate.lID, kTargetCreate.szTargetName);
|
||||||
// CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf);
|
// CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf);
|
||||||
// Tracef(" >> RecvTargetCreatePacket %d : %s\n", kTargetCreate.lID, kTargetCreate.szTargetName);
|
// Tracef(" >> RecvTargetCreatePacket %d : %s\n", kTargetCreate.lID, kTargetCreate.szTargetName);
|
||||||
//#endif
|
//#endif
|
||||||
@ -4280,7 +4295,7 @@ bool CPythonNetworkStream::RecvTargetCreatePacketNew()
|
|||||||
|
|
||||||
//#ifdef _DEBUG
|
//#ifdef _DEBUG
|
||||||
// char szBuf[256+1];
|
// char szBuf[256+1];
|
||||||
// _snprintf(szBuf, sizeof(szBuf), "캐릭터 타겟이 생성 되었습니다 [%d:%s:%d]", kTargetCreate.lID, kTargetCreate.szTargetName, kTargetCreate.dwVID);
|
// _snprintf(szBuf, sizeof(szBuf), "ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ÿ<><C5B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD> [%d:%s:%d]", kTargetCreate.lID, kTargetCreate.szTargetName, kTargetCreate.dwVID);
|
||||||
// CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf);
|
// CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf);
|
||||||
// Tracef(" >> RecvTargetCreatePacketNew %d : %d/%d\n", kTargetCreate.lID, kTargetCreate.byType, kTargetCreate.dwVID);
|
// Tracef(" >> RecvTargetCreatePacketNew %d : %d/%d\n", kTargetCreate.lID, kTargetCreate.byType, kTargetCreate.dwVID);
|
||||||
//#endif
|
//#endif
|
||||||
@ -4303,7 +4318,7 @@ bool CPythonNetworkStream::RecvTargetUpdatePacket()
|
|||||||
|
|
||||||
//#ifdef _DEBUG
|
//#ifdef _DEBUG
|
||||||
// char szBuf[256+1];
|
// char szBuf[256+1];
|
||||||
// _snprintf(szBuf, sizeof(szBuf), "타겟의 위치가 갱신 되었습니다 [%d:%d/%d]", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY);
|
// _snprintf(szBuf, sizeof(szBuf), "Ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ<EFBFBD><C4A1> <20><><EFBFBD><EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD> [%d:%d/%d]", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY);
|
||||||
// CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf);
|
// CPythonChat::Instance().AppendChat(CHAT_TYPE_NOTICE, szBuf);
|
||||||
// Tracef(" >> RecvTargetUpdatePacket %d : %d, %d\n", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY);
|
// Tracef(" >> RecvTargetUpdatePacket %d : %d, %d\n", kTargetUpdate.lID, kTargetUpdate.lX, kTargetUpdate.lY);
|
||||||
//#endif
|
//#endif
|
||||||
@ -4382,7 +4397,7 @@ bool CPythonNetworkStream::RecvDigMotionPacket()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 용혼석 강화
|
// <EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD> <20><>ȭ
|
||||||
bool CPythonNetworkStream::SendDragonSoulRefinePacket(BYTE bRefineType, TItemPos* pos)
|
bool CPythonNetworkStream::SendDragonSoulRefinePacket(BYTE bRefineType, TItemPos* pos)
|
||||||
{
|
{
|
||||||
TPacketCGDragonSoulRefine pk;
|
TPacketCGDragonSoulRefine pk;
|
||||||
|
@ -37,7 +37,12 @@ bool CPythonQuest::IsQuest(DWORD dwIndex)
|
|||||||
return itor != m_QuestInstanceContainer.end();
|
return itor != m_QuestInstanceContainer.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPythonQuest::MakeQuest(DWORD dwIndex)
|
void CPythonQuest::MakeQuest(DWORD dwIndex
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
, BYTE bType
|
||||||
|
, bool bIsConfirmed
|
||||||
|
#endif
|
||||||
|
)
|
||||||
{
|
{
|
||||||
DeleteQuestInstance(dwIndex);
|
DeleteQuestInstance(dwIndex);
|
||||||
m_QuestInstanceContainer.push_back(SQuestInstance());
|
m_QuestInstanceContainer.push_back(SQuestInstance());
|
||||||
@ -47,6 +52,10 @@ void CPythonQuest::MakeQuest(DWORD dwIndex)
|
|||||||
SQuestInstance & rQuestInstance = *m_QuestInstanceContainer.rbegin();
|
SQuestInstance & rQuestInstance = *m_QuestInstanceContainer.rbegin();
|
||||||
rQuestInstance.dwIndex = dwIndex;
|
rQuestInstance.dwIndex = dwIndex;
|
||||||
rQuestInstance.iStartTime = int(CTimer::Instance().GetCurrentSecond());
|
rQuestInstance.iStartTime = int(CTimer::Instance().GetCurrentSecond());
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
rQuestInstance.bType = bType;
|
||||||
|
rQuestInstance.bIsConfirmed = bIsConfirmed;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPythonQuest::SetQuestTitle(DWORD dwIndex, const char * c_szTitle)
|
void CPythonQuest::SetQuestTitle(DWORD dwIndex, const char * c_szTitle)
|
||||||
@ -104,12 +113,51 @@ void CPythonQuest::SetQuestIconFileName(DWORD dwIndex, const char * c_szIconFile
|
|||||||
pQuestInstance->strIconFileName = c_szIconFileName;
|
pQuestInstance->strIconFileName = c_szIconFileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
void CPythonQuest::SetQuestIsConfirmed(DWORD dwIndex, bool bIsConfirmed)
|
||||||
|
{
|
||||||
|
SQuestInstance* pQuestInstance;
|
||||||
|
if (!__GetQuestInstancePtr(dwIndex, &pQuestInstance))
|
||||||
|
return;
|
||||||
|
|
||||||
|
pQuestInstance->bIsConfirmed = bIsConfirmed;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int CPythonQuest::GetQuestCount()
|
int CPythonQuest::GetQuestCount()
|
||||||
{
|
{
|
||||||
return m_QuestInstanceContainer.size();
|
return m_QuestInstanceContainer.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CPythonQuest::GetQuestInstancePtr(DWORD dwArrayIndex, SQuestInstance ** ppQuestInstance)
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
int CPythonQuest::GetQuestButtonNoticeCount(BYTE bQuestType)
|
||||||
|
{
|
||||||
|
int count = 0;
|
||||||
|
for (TQuestInstanceContainer::iterator::value_type& it : m_QuestInstanceContainer)
|
||||||
|
{
|
||||||
|
if (bQuestType == QUEST_TYPE_MAX)
|
||||||
|
count += 1;
|
||||||
|
else
|
||||||
|
if (it.bType == bQuestType)
|
||||||
|
count += 1;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
bool CPythonQuest::GetQuestInstancePtr(DWORD dwQuestIndex, SQuestInstance** ppQuestInstance)
|
||||||
|
{
|
||||||
|
TQuestInstanceContainer::iterator itor = std::find_if(m_QuestInstanceContainer.begin(), m_QuestInstanceContainer.end(), FQuestInstanceCompare(dwQuestIndex));
|
||||||
|
if (itor == m_QuestInstanceContainer.end())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
const DWORD dwVectorIndex = std::distance(m_QuestInstanceContainer.begin(), itor);
|
||||||
|
*ppQuestInstance = &m_QuestInstanceContainer[dwVectorIndex];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
bool CPythonQuest::GetQuestInstancePtr(DWORD dwArrayIndex, SQuestInstance** ppQuestInstance)
|
||||||
{
|
{
|
||||||
if (dwArrayIndex >= m_QuestInstanceContainer.size())
|
if (dwArrayIndex >= m_QuestInstanceContainer.size())
|
||||||
return false;
|
return false;
|
||||||
@ -118,6 +166,7 @@ bool CPythonQuest::GetQuestInstancePtr(DWORD dwArrayIndex, SQuestInstance ** ppQ
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
bool CPythonQuest::__GetQuestInstancePtr(DWORD dwQuestIndex, SQuestInstance ** ppQuestInstance)
|
bool CPythonQuest::__GetQuestInstancePtr(DWORD dwQuestIndex, SQuestInstance ** ppQuestInstance)
|
||||||
{
|
{
|
||||||
@ -140,8 +189,8 @@ void CPythonQuest::__Initialize()
|
|||||||
test.dwIndex = i;
|
test.dwIndex = i;
|
||||||
test.strIconFileName = "";
|
test.strIconFileName = "";
|
||||||
test.strTitle = _getf("test%d", i);
|
test.strTitle = _getf("test%d", i);
|
||||||
test.strClockName = "남은 시간";
|
test.strClockName = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ð<EFBFBD>";
|
||||||
test.strCounterName = "남은 마리수";
|
test.strCounterName = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||||
test.iClockValue = 1000;
|
test.iClockValue = 1000;
|
||||||
test.iCounterValue = 1000;
|
test.iCounterValue = 1000;
|
||||||
test.iStartTime = 0;
|
test.iStartTime = 0;
|
||||||
@ -196,16 +245,27 @@ PyObject * questGetQuestData(PyObject * poSelf, PyObject * poArgs)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
// 비어있을 경우 디폴트 이미지를 넣는다.
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20>̹<EFBFBD><CCB9><EFBFBD><EFBFBD><EFBFBD> <20>ִ´<D6B4>.
|
||||||
std::string strIconFileName = "season1/icon/scroll_open.tga";
|
std::string strIconFileName = "season1/icon/scroll_open.tga";
|
||||||
pImage = (CGraphicImage *)CResourceManager::Instance().GetResourcePointer(strIconFileName.c_str());
|
pImage = (CGraphicImage *)CResourceManager::Instance().GetResourcePointer(strIconFileName.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Py_BuildValue("sisi", pQuestInstance->strTitle.c_str(),
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
return Py_BuildValue("ibsisi",
|
||||||
|
pQuestInstance->bType,
|
||||||
|
pQuestInstance->bIsConfirmed,
|
||||||
|
pQuestInstance->strTitle.c_str(),
|
||||||
pImage,
|
pImage,
|
||||||
pQuestInstance->strCounterName.c_str(),
|
pQuestInstance->strCounterName.c_str(),
|
||||||
pQuestInstance->iCounterValue);
|
pQuestInstance->iCounterValue);
|
||||||
|
#else
|
||||||
|
return Py_BuildValue("sisi",
|
||||||
|
pQuestInstance->strTitle.c_str(),
|
||||||
|
pImage,
|
||||||
|
pQuestInstance->strCounterName.c_str(),
|
||||||
|
pQuestInstance->iCounterValue);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
PyObject * questGetQuestIndex(PyObject * poSelf, PyObject * poArgs)
|
PyObject * questGetQuestIndex(PyObject * poSelf, PyObject * poArgs)
|
||||||
@ -238,7 +298,7 @@ PyObject * questGetQuestLastTime(PyObject * poSelf, PyObject * poArgs)
|
|||||||
iLastTime = (pQuestInstance->iStartTime + pQuestInstance->iClockValue) - int(CTimer::Instance().GetCurrentSecond());
|
iLastTime = (pQuestInstance->iStartTime + pQuestInstance->iClockValue) - int(CTimer::Instance().GetCurrentSecond());
|
||||||
}
|
}
|
||||||
|
|
||||||
// 시간 증가 처리 코드
|
// <EFBFBD>ð<EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3> <20>ڵ<EFBFBD>
|
||||||
// else
|
// else
|
||||||
// {
|
// {
|
||||||
// iLastTime = int(CTimer::Instance().GetCurrentSecond()) - pQuestInstance->iStartTime;
|
// iLastTime = int(CTimer::Instance().GetCurrentSecond()) - pQuestInstance->iStartTime;
|
||||||
@ -253,6 +313,18 @@ PyObject * questClear(PyObject * poSelf, PyObject * poArgs)
|
|||||||
return Py_BuildNone();
|
return Py_BuildNone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
PyObject* questGetQuestCounterData(PyObject* poSelf, PyObject* poArgs) { return Py_BuildNone(); }
|
||||||
|
PyObject* questGetQuestButtonNoticeCount(PyObject* poSelf, PyObject* poArgs)
|
||||||
|
{
|
||||||
|
BYTE bType;
|
||||||
|
if (!PyTuple_GetInteger(poArgs, 0, &bType))
|
||||||
|
return Py_BadArgument();
|
||||||
|
|
||||||
|
return Py_BuildValue("i", CPythonQuest::Instance().GetQuestButtonNoticeCount(bType));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void initquest()
|
void initquest()
|
||||||
{
|
{
|
||||||
static PyMethodDef s_methods[] =
|
static PyMethodDef s_methods[] =
|
||||||
@ -262,9 +334,29 @@ void initquest()
|
|||||||
{ "GetQuestIndex", questGetQuestIndex, METH_VARARGS },
|
{ "GetQuestIndex", questGetQuestIndex, METH_VARARGS },
|
||||||
{ "GetQuestLastTime", questGetQuestLastTime, METH_VARARGS },
|
{ "GetQuestLastTime", questGetQuestLastTime, METH_VARARGS },
|
||||||
{ "Clear", questClear, METH_VARARGS },
|
{ "Clear", questClear, METH_VARARGS },
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
{ "GetQuestCounterData", questGetQuestCounterData, METH_VARARGS },
|
||||||
|
{ "GetQuestButtonNoticeCount", questGetQuestButtonNoticeCount, METH_VARARGS },
|
||||||
|
#endif
|
||||||
{ NULL, NULL, NULL },
|
{ NULL, NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
PyObject * poModule = Py_InitModule("quest", s_methods);
|
PyObject * poModule = Py_InitModule("quest", s_methods);
|
||||||
PyModule_AddIntConstant(poModule, "QUEST_MAX_NUM", 5);
|
PyModule_AddIntConstant(poModule, "QUEST_MAX_NUM", 5);
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
PyModule_AddIntConstant(poModule, "QUEST_TYPE_MAIN", CPythonQuest::QUEST_TYPE_MAIN);
|
||||||
|
PyModule_AddIntConstant(poModule, "QUEST_TYPE_SUB", CPythonQuest::QUEST_TYPE_SUB);
|
||||||
|
PyModule_AddIntConstant(poModule, "QUEST_TYPE_LEVELUP", CPythonQuest::QUEST_TYPE_LEVELUP);
|
||||||
|
PyModule_AddIntConstant(poModule, "QUEST_TYPE_EVENT", CPythonQuest::QUEST_TYPE_EVENT);
|
||||||
|
PyModule_AddIntConstant(poModule, "QUEST_TYPE_COLLECTION", CPythonQuest::QUEST_TYPE_COLLECTION);
|
||||||
|
PyModule_AddIntConstant(poModule, "QUEST_TYPE_SYSTEM", CPythonQuest::QUEST_TYPE_SYSTEM);
|
||||||
|
PyModule_AddIntConstant(poModule, "QUEST_TYPE_SCROLL", CPythonQuest::QUEST_TYPE_SCROLL);
|
||||||
|
PyModule_AddIntConstant(poModule, "QUEST_TYPE_DAILY", CPythonQuest::QUEST_TYPE_DAILY);
|
||||||
|
PyModule_AddIntConstant(poModule, "QUEST_TYPE_UNEXPOSED", CPythonQuest::QUEST_TYPE_UNEXPOSED);
|
||||||
|
PyModule_AddIntConstant(poModule, "QUEST_TYPE_MAX", CPythonQuest::QUEST_TYPE_MAX);
|
||||||
|
|
||||||
|
PyModule_AddIntConstant(poModule, "QUEST_STRING_TYPE_NORMAL", CPythonQuest::QUEST_STRING_TYPE_NORMAL);
|
||||||
|
PyModule_AddIntConstant(poModule, "QUEST_STRING_TYPE_CLOCK", CPythonQuest::QUEST_STRING_TYPE_CLOCK);
|
||||||
|
PyModule_AddIntConstant(poModule, "QUEST_STRING_TYPE_COUNT", CPythonQuest::QUEST_STRING_TYPE_COUNT);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -25,9 +25,50 @@ class CPythonQuest : public CSingleton<CPythonQuest>
|
|||||||
int iCounterValue;
|
int iCounterValue;
|
||||||
|
|
||||||
int iStartTime;
|
int iStartTime;
|
||||||
|
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
BYTE bType;
|
||||||
|
bool bIsConfirmed;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
typedef std::vector<SQuestInstance> TQuestInstanceContainer;
|
typedef std::vector<SQuestInstance> TQuestInstanceContainer;
|
||||||
|
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
enum EQuestStringType
|
||||||
|
{
|
||||||
|
QUEST_STRING_TYPE_NORMAL,
|
||||||
|
QUEST_STRING_TYPE_CLOCK,
|
||||||
|
QUEST_STRING_TYPE_COUNT,
|
||||||
|
QUEST_STRING_TYPE_MAX
|
||||||
|
};
|
||||||
|
|
||||||
|
enum EQuestType
|
||||||
|
{
|
||||||
|
QUEST_TYPE_MAIN,
|
||||||
|
QUEST_TYPE_SUB,
|
||||||
|
QUEST_TYPE_LEVELUP,
|
||||||
|
QUEST_TYPE_EVENT,
|
||||||
|
QUEST_TYPE_COLLECTION,
|
||||||
|
QUEST_TYPE_SYSTEM,
|
||||||
|
QUEST_TYPE_SCROLL,
|
||||||
|
QUEST_TYPE_DAILY,
|
||||||
|
QUEST_TYPE_UNEXPOSED,
|
||||||
|
QUEST_TYPE_MAX
|
||||||
|
};
|
||||||
|
|
||||||
|
enum EQuestSkin
|
||||||
|
{
|
||||||
|
QUEST_SKIN_NOWINDOW,
|
||||||
|
QUEST_SKIN_NORMAL,
|
||||||
|
QUEST_SKIN_UNKOWN1,
|
||||||
|
QUEST_SKIN_UNKOWN2,
|
||||||
|
QUEST_SKIN_SCROLL,
|
||||||
|
QUEST_SKIN_CINEMATIC,
|
||||||
|
QUEST_SKIN_COUNT,
|
||||||
|
QUEST_SKIN_MAX
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CPythonQuest();
|
CPythonQuest();
|
||||||
virtual ~CPythonQuest();
|
virtual ~CPythonQuest();
|
||||||
@ -38,7 +79,12 @@ class CPythonQuest : public CSingleton<CPythonQuest>
|
|||||||
void DeleteQuestInstance(DWORD dwIndex);
|
void DeleteQuestInstance(DWORD dwIndex);
|
||||||
|
|
||||||
bool IsQuest(DWORD dwIndex);
|
bool IsQuest(DWORD dwIndex);
|
||||||
void MakeQuest(DWORD dwIndex);
|
void MakeQuest(DWORD dwIndex
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
, BYTE bIndex
|
||||||
|
, bool bIsConfirmed
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
|
||||||
void SetQuestTitle(DWORD dwIndex, const char * c_szTitle);
|
void SetQuestTitle(DWORD dwIndex, const char * c_szTitle);
|
||||||
void SetQuestClockName(DWORD dwIndex, const char * c_szClockName);
|
void SetQuestClockName(DWORD dwIndex, const char * c_szClockName);
|
||||||
@ -46,9 +92,17 @@ class CPythonQuest : public CSingleton<CPythonQuest>
|
|||||||
void SetQuestClockValue(DWORD dwIndex, int iClockValue);
|
void SetQuestClockValue(DWORD dwIndex, int iClockValue);
|
||||||
void SetQuestCounterValue(DWORD dwIndex, int iCounterValue);
|
void SetQuestCounterValue(DWORD dwIndex, int iCounterValue);
|
||||||
void SetQuestIconFileName(DWORD dwIndex, const char * c_szIconFileName);
|
void SetQuestIconFileName(DWORD dwIndex, const char * c_szIconFileName);
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
void SetQuestIsConfirmed(DWORD dwIndex, bool bIsConfirmed);
|
||||||
|
#endif
|
||||||
|
|
||||||
int GetQuestCount();
|
int GetQuestCount();
|
||||||
|
#if defined(ENABLE_QUEST_RENEWAL)
|
||||||
|
int GetQuestButtonNoticeCount(BYTE bQuestType);
|
||||||
|
bool GetQuestInstancePtr(DWORD dwQuestIndex, SQuestInstance ** ppQuestInstance);
|
||||||
|
#else
|
||||||
bool GetQuestInstancePtr(DWORD dwArrayIndex, SQuestInstance ** ppQuestInstance);
|
bool GetQuestInstancePtr(DWORD dwArrayIndex, SQuestInstance ** ppQuestInstance);
|
||||||
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void __Initialize();
|
void __Initialize();
|
||||||
|