Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2021
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 44.93 KB | None | 0 0
  1. import ui
  2. import grp
  3. import chat
  4. import wndMgr
  5. import memetinnetmodul as net
  6. import memetinappmodul as app
  7. import ime
  8. import localeInfo
  9. import colorInfo
  10. import constInfo
  11. import systemSetting
  12. import memetinplayermodul as player
  13. if app.ENABLE_CHATTING_WINDOW_RENEWAL:
  14. import os
  15. import uiCommon
  16. import uiScriptLocale
  17. import cPickle
  18.  
  19. ENABLE_CHAT_COMMAND = TRUE
  20. ENABLE_LAST_SENTENCE_STACK = TRUE
  21. ENABLE_INSULT_CHECK = TRUE
  22.  
  23. if localeInfo.IsHONGKONG():
  24. ENABLE_LAST_SENTENCE_STACK = TRUE
  25.  
  26. if localeInfo.IsEUROPE():
  27. ENABLE_CHAT_COMMAND = FALSE
  28.  
  29. if localeInfo.IsCANADA():
  30. ENABLE_LAST_SENTENCE_STACK = FALSE
  31.  
  32. chatInputSetList = []
  33. def InsertChatInputSetWindow(wnd):
  34. global chatInputSetList
  35. chatInputSetList.append(wnd)
  36. def RefreshChatMode():
  37. global chatInputSetList
  38. map(lambda wnd:wnd.OnRefreshChatMode(), chatInputSetList)
  39. def DestroyChatInputSetWindow():
  40. global chatInputSetList
  41. chatInputSetList = []
  42.  
  43. if app.ENABLE_CHATTING_WINDOW_RENEWAL:
  44. CHECK_BOX_X_POS = 145
  45.  
  46. OPTION_CHECKBOX_TALKING = 1
  47. OPTION_CHECKBOX_PARTY = 2
  48. OPTION_CHECKBOX_GUILD = 3
  49. OPTION_CHECKBOX_SHOUT = 4
  50. OPTION_CHECKBOX_INFO = 5
  51. OPTION_CHECKBOX_NOTICE = 6
  52. OPTION_CHECKBOX_DMG = 7
  53. OPTION_CHECKBOX_EXP_INFO = 8
  54. OPTION_CHECKBOX_ITEM_INFO = 9
  55. OPTION_CHECKBOX_MONEY_INFO = 10
  56.  
  57. OPTION_CHECKBOX_MODE = {
  58. chat.CHAT_TYPE_TALKING : OPTION_CHECKBOX_TALKING,
  59. chat.CHAT_TYPE_INFO : OPTION_CHECKBOX_INFO,
  60. chat.CHAT_TYPE_NOTICE : OPTION_CHECKBOX_NOTICE,
  61. chat.CHAT_TYPE_PARTY : OPTION_CHECKBOX_PARTY,
  62. chat.CHAT_TYPE_GUILD : OPTION_CHECKBOX_GUILD,
  63. chat.CHAT_TYPE_SHOUT : OPTION_CHECKBOX_SHOUT,
  64. chat.CHAT_TYPE_DMG : OPTION_CHECKBOX_DMG,
  65. chat.CHAT_TYPE_EXP_INFO : OPTION_CHECKBOX_EXP_INFO,
  66. chat.CHAT_TYPE_ITEM_INFO : OPTION_CHECKBOX_ITEM_INFO,
  67. chat.CHAT_TYPE_MONEY_INFO : OPTION_CHECKBOX_MONEY_INFO,
  68. }
  69.  
  70. ## ChatSettingWindow
  71. class ChatSettingWindow(ui.ScriptWindow):
  72. class MouseReflector(ui.Window):
  73. def __init__(self, parent):
  74. ui.Window.__init__(self)
  75. self.SetParent(parent)
  76. self.AddFlag("not_pick")
  77. self.width = self.height = 0
  78. self.isDown = False
  79.  
  80. def __del__(self):
  81. ui.Window.__del__(self)
  82.  
  83. def Down(self):
  84. self.isDown = True
  85.  
  86. def Up(self):
  87. self.isDown = False
  88.  
  89. def OnRender(self):
  90. if self.isDown:
  91. grp.SetColor(ui.WHITE_COLOR)
  92. else:
  93. grp.SetColor(ui.HALF_WHITE_COLOR)
  94.  
  95. x, y = self.GetGlobalPosition()
  96. grp.RenderBar(x + 2, y + 2, self.GetWidth() - 4, self.GetHeight() - 4)
  97.  
  98. class CheckBox(ui.ImageBox):
  99. def __init__(self, parent, x, y, event, filename = "d:/ymir work/ui/chat/chattingoption_check_box_off.sub"):
  100. ui.ImageBox.__init__(self)
  101. self.SetParent(parent)
  102. self.SetPosition(x, y)
  103. self.LoadImage(filename)
  104.  
  105. self.mouseReflector = parent.MouseReflector(self)
  106. self.mouseReflector.SetSize(self.GetWidth(), self.GetHeight())
  107.  
  108. image = ui.MakeImageBox(self, "d:/ymir work/ui/public/check_image.sub", 0, 0)
  109. image.AddFlag("not_pick")
  110. image.SetWindowHorizontalAlignCenter()
  111. image.SetWindowVerticalAlignCenter()
  112. image.Hide()
  113.  
  114. self.check = False
  115. self.enable = True
  116. self.image = image
  117. self.event = event
  118. self.Show()
  119.  
  120. self.mouseReflector.UpdateRect()
  121.  
  122. def __del__(self):
  123. ui.ImageBox.__del__(self)
  124.  
  125. def GetCheck(self):
  126. return self.check
  127.  
  128. def SetCheck(self, flag):
  129. if flag:
  130. self.check = True
  131. self.image.Show()
  132. else:
  133. self.check = False
  134. self.image.Hide()
  135.  
  136. def Disable(self):
  137. self.enable = False
  138.  
  139. def OnMouseOverIn(self):
  140. if not self.enable:
  141. return
  142. self.mouseReflector.Show()
  143.  
  144. def OnMouseOverOut(self):
  145. if not self.enable:
  146. return
  147. self.mouseReflector.Hide()
  148.  
  149. def OnMouseLeftButtonDown(self):
  150. if not self.enable:
  151. return
  152. self.mouseReflector.Down()
  153.  
  154. def OnMouseLeftButtonUp(self):
  155. if not self.enable:
  156. return
  157. self.mouseReflector.Up()
  158. self.event()
  159.  
  160. def __init__(self, parent):
  161. ui.ScriptWindow.__init__(self)
  162. self.isLoaded = False
  163.  
  164. self.parent = parent
  165. self.questionDialog = None
  166.  
  167. self.checkBoxSlotDict = {}
  168. self.tmpCheckBoxSettingDict = {}
  169.  
  170. self.__LoadWindow()
  171.  
  172. def __del__(self):
  173. ui.ScriptWindow.__del__(self)
  174. self.isLoaded = False
  175. self.parent = None
  176. self.questionDialog = None
  177. self.checkBoxSlotDict = {}
  178. self.tmpCheckBoxSettingDict = {}
  179.  
  180. def __LoadWindow(self):
  181. if self.isLoaded:
  182. return
  183.  
  184. self.isLoaded = 1
  185.  
  186. try:
  187. pyScrLoader = ui.PythonScriptLoader()
  188. pyScrLoader.LoadScriptFile(self, "UIScript/ChatSettingWindow.py")
  189. except:
  190. import exception
  191. exception.Abort("ChatSettingWindow.LoadWindow.LoadScript")
  192.  
  193. try:
  194. self.__BindObject()
  195. except:
  196. import exception
  197. exception.Abort("ChatSettingWindow.LoadWindow.BindObject")
  198.  
  199. try:
  200. self.__CreateObject()
  201. except:
  202. import exception
  203. exception.Abort("ChatSettingWindow.LoadWindow.CreateObject")
  204.  
  205. self.__LoadChattingOptionFile()
  206.  
  207. def __BindObject(self):
  208. self.GetChild("board").SetCloseEvent(ui.__mem_func__(self.Close))
  209.  
  210. self.resetBtn = self.GetChild("reset_button")
  211. self.resetBtn.SetEvent(ui.__mem_func__(self.__OnClickPopUpSetting), localeInfo.CHATTING_SETTING_CLEAR_QUESTION)
  212.  
  213. self.saveBtn = self.GetChild("save_button")
  214. self.saveBtn.SetEvent(ui.__mem_func__(self.__OnClickSave))
  215.  
  216. self.cancelBtn = self.GetChild("cancle_button")
  217. self.cancelBtn.SetEvent(ui.__mem_func__(self.Close))
  218.  
  219. def __CreateObject(self):
  220. for key in xrange(1, len(OPTION_CHECKBOX_MODE) + 1):
  221. event = lambda index = key : ui.__mem_func__(self.SetCurrentChatOption)(index)
  222.  
  223. # chatting_setting_talking_bg.y + (31 * y)
  224. yPos = 64 + (31 * 0)
  225. if key >= OPTION_CHECKBOX_DMG:
  226. yPos = 64 + (31 * 1)
  227. if key >= OPTION_CHECKBOX_EXP_INFO:
  228. yPos = 64 + (31 * 2)
  229.  
  230. self.checkBoxSlotDict[key] = self.CheckBox(self, CHECK_BOX_X_POS, yPos + (18 * (key - 1)), event)
  231.  
  232. def __OnClickSave(self):
  233. self.__SaveFile()
  234.  
  235. if self.parent:
  236. self.parent.RefreshChatWindow()
  237.  
  238. self.Close()
  239.  
  240. def __GetChattingFile(self):
  241. # Create the UserData/chatting path if it doesn't exist.
  242. path = ["miles", "chatting"]
  243. try:
  244. if not os.path.exists(os.getcwd() + os.sep + path[0] + os.sep + path[1]):
  245. os.makedirs(os.getcwd() + os.sep + "miles" + os.sep + "chatting")
  246. except WindowsError as error: pass
  247. return "%s/%s/%s" % (path[0], path[1], player.GetName())
  248.  
  249. def __LoadChattingOptionFile(self):
  250. load = False
  251. try:
  252. fileName = self.__GetChattingFile()
  253. file = open(fileName)
  254. try:
  255. load = True
  256. self.tmpCheckBoxSettingDict = cPickle.load(file)
  257. except (ValueError, EOFError, cPickle.PicklingError, cPickle.UnpicklingError): pass
  258. except IOError: pass
  259.  
  260. for key in xrange(1, len(OPTION_CHECKBOX_MODE) + 1):
  261. if not load:
  262. # Default, always enable and add to dict.
  263. value = True
  264. self.tmpCheckBoxSettingDict[key] = True
  265. else:
  266. value = self.tmpCheckBoxSettingDict[key]
  267. self.checkBoxSlotDict[key].SetCheck(value)
  268.  
  269. if not load:
  270. self.__SaveDefault()
  271.  
  272. def __SaveFile(self):
  273. if not self.tmpCheckBoxSettingDict:
  274. return
  275.  
  276. try:
  277. fileName = self.__GetChattingFile()
  278. file = open(fileName, 'wb')
  279. cPickle.dump(self.tmpCheckBoxSettingDict, file)
  280. except IOError:
  281. return
  282.  
  283. def __SaveDefault(self):
  284. if not self.tmpCheckBoxSettingDict:
  285. return
  286. for key in xrange(1, len(OPTION_CHECKBOX_MODE) + 1):
  287. self.tmpCheckBoxSettingDict[key] = True
  288.  
  289. try:
  290. fileName = self.__GetChattingFile()
  291. file = open(fileName, 'wb')
  292. cPickle.dump(self.tmpCheckBoxSettingDict, file)
  293. except IOError:
  294. return
  295.  
  296. def __OnClickPopUpSetting(self, text):
  297. questionDialog = uiCommon.QuestionDialog()
  298. questionDialog.SetText(text)
  299. questionDialog.SetAcceptEvent(ui.__mem_func__(self.__QuestionPopupAccept))
  300. questionDialog.SetCancelEvent(ui.__mem_func__(self.__QuestionPopupCancle))
  301. questionDialog.Open()
  302. self.questionDialog = questionDialog
  303.  
  304. def __QuestionPopupAccept(self):
  305. if not self.questionDialog:
  306. return
  307.  
  308. self.__SaveDefault()
  309.  
  310. if self.parent:
  311. self.parent.RefreshChatWindow()
  312.  
  313. self.__QuestionPopupCancle()
  314. self.Close()
  315.  
  316. def __QuestionPopupCancle(self):
  317. self.questionDialog.Close()
  318. self.questionDialog = None
  319.  
  320. def SetCurrentChatOption(self, index):
  321. value = False
  322. if not self.checkBoxSlotDict[index].GetCheck():
  323. value = True
  324.  
  325. self.checkBoxSlotDict[index].SetCheck(value)
  326. self.tmpCheckBoxSettingDict.update({index: value})
  327.  
  328. def GetChatModeSetting(self, mode):
  329. try:
  330. value = OPTION_CHECKBOX_MODE[mode]
  331. return self.tmpCheckBoxSettingDict[value]
  332. except KeyError:
  333. return True
  334.  
  335. def OnPressEscapeKey(self):
  336. self.Close()
  337. return True
  338.  
  339. def Open(self):
  340. if not self.isLoaded:
  341. self.__LoadWindow()
  342.  
  343. self.__LoadChattingOptionFile()
  344. self.Show()
  345.  
  346. def Close(self):
  347. if self.questionDialog:
  348. self.questionDialog.Close()
  349.  
  350. self.Hide()
  351.  
  352. ## ChatModeButton
  353. class ChatModeButton(ui.Window):
  354.  
  355. OUTLINE_COLOR = grp.GenerateColor(1.0, 1.0, 1.0, 1.0)
  356. OVER_COLOR = grp.GenerateColor(1.0, 1.0, 1.0, 0.3)
  357. BUTTON_STATE_UP = 0
  358. BUTTON_STATE_OVER = 1
  359. BUTTON_STATE_DOWN = 2
  360.  
  361. def __init__(self):
  362. ui.Window.__init__(self)
  363. self.state = None
  364. self.buttonText = None
  365. self.event = None
  366. self.SetWindowName("ChatModeButton")
  367.  
  368. net.EnableChatInsultFilter(ENABLE_INSULT_CHECK)
  369.  
  370. def __del__(self):
  371. ui.Window.__del__(self)
  372.  
  373. def SAFE_SetEvent(self, event):
  374. self.event=ui.__mem_func__(event)
  375.  
  376. def SetText(self, text):
  377. if None == self.buttonText:
  378. textLine = ui.TextLine()
  379. textLine.SetParent(self)
  380. textLine.SetWindowHorizontalAlignCenter()
  381. textLine.SetWindowVerticalAlignCenter()
  382. textLine.SetVerticalAlignCenter()
  383. textLine.SetHorizontalAlignCenter()
  384. textLine.SetPackedFontColor(self.OUTLINE_COLOR)
  385. textLine.Show()
  386. self.buttonText = textLine
  387.  
  388. self.buttonText.SetText(text)
  389.  
  390. def SetSize(self, width, height):
  391. self.width = width
  392. self.height = height
  393. ui.Window.SetSize(self, width, height)
  394.  
  395. def OnMouseOverIn(self):
  396. self.state = self.BUTTON_STATE_OVER
  397.  
  398. def OnMouseOverOut(self):
  399. self.state = self.BUTTON_STATE_UP
  400.  
  401. def OnMouseLeftButtonDown(self):
  402. self.state = self.BUTTON_STATE_DOWN
  403.  
  404. def OnMouseLeftButtonUp(self):
  405. self.state = self.BUTTON_STATE_UP
  406. if self.IsIn():
  407. self.state = self.BUTTON_STATE_OVER
  408.  
  409. if None != self.event:
  410. self.event()
  411.  
  412. def OnRender(self):
  413.  
  414. (x, y) = self.GetGlobalPosition()
  415.  
  416. grp.SetColor(self.OUTLINE_COLOR)
  417. grp.RenderRoundBox(x, y, self.width, self.height)
  418.  
  419. if self.state >= self.BUTTON_STATE_OVER:
  420. grp.RenderRoundBox(x+1, y, self.width-2, self.height)
  421. grp.RenderRoundBox(x, y+1, self.width, self.height-2)
  422.  
  423. if self.BUTTON_STATE_DOWN == self.state:
  424. grp.SetColor(self.OVER_COLOR)
  425. grp.RenderBar(x+1, y+1, self.width-2, self.height-2)
  426.  
  427. ## ChatLine
  428. class ChatLine(ui.EditLine):
  429.  
  430. CHAT_MODE_NAME = { chat.CHAT_TYPE_TALKING : localeInfo.CHAT_NORMAL,
  431. chat.CHAT_TYPE_PARTY : localeInfo.CHAT_PARTY,
  432. chat.CHAT_TYPE_GUILD : localeInfo.CHAT_GUILD,
  433. chat.CHAT_TYPE_SHOUT : localeInfo.CHAT_SHOUT, }
  434.  
  435. def __init__(self):
  436. ui.EditLine.__init__(self)
  437. self.SetWindowName("Chat Line")
  438. self.lastShoutTime = 0
  439. self.eventEscape = lambda *arg: None
  440. self.eventReturn = lambda *arg: None
  441. self.eventTab = None
  442. self.chatMode = chat.CHAT_TYPE_TALKING
  443. self.bCodePage = TRUE
  444.  
  445. self.overTextLine = ui.TextLine()
  446. self.overTextLine.SetParent(self)
  447. self.overTextLine.SetPosition(-1, 0)
  448. self.overTextLine.SetFontColor(1.0, 1.0, 0.0)
  449. self.overTextLine.SetOutline()
  450. self.overTextLine.Hide()
  451.  
  452. def SetChatMode(self, mode):
  453. self.chatMode = mode
  454.  
  455. def GetChatMode(self):
  456. return self.chatMode
  457.  
  458. def ChangeChatMode(self):
  459. if chat.CHAT_TYPE_TALKING == self.GetChatMode():
  460. self.SetChatMode(chat.CHAT_TYPE_PARTY)
  461. self.SetText("#")
  462. self.SetEndPosition()
  463.  
  464. elif chat.CHAT_TYPE_PARTY == self.GetChatMode():
  465. self.SetChatMode(chat.CHAT_TYPE_GUILD)
  466. self.SetText("%")
  467. self.SetEndPosition()
  468.  
  469. elif chat.CHAT_TYPE_GUILD == self.GetChatMode():
  470. self.SetChatMode(chat.CHAT_TYPE_SHOUT)
  471. self.SetText("!")
  472. self.SetEndPosition()
  473.  
  474. elif chat.CHAT_TYPE_SHOUT == self.GetChatMode():
  475. self.SetChatMode(chat.CHAT_TYPE_TALKING)
  476. self.SetText("")
  477.  
  478. if app.CHAT_DMG:
  479. if chat.CHAT_TYPE_DMG == self.GetChatMode():
  480. self.SetChatMode(chat.CHAT_TYPE_DMG)
  481. self.SetText("")
  482.  
  483. self.__CheckChatMark()
  484.  
  485. if app.LINK_IN_CHAT:
  486. def GetLink(self, text):
  487. link = ""
  488. start = text.find("http://")
  489. if start == -1:
  490. start = text.find("https://")
  491. if start == -1:
  492. return ""
  493.  
  494. return text[start:len(text)].split(" ")[0]
  495.  
  496. def GetCurrentChatModeName(self):
  497. try:
  498. return self.CHAT_MODE_NAME[self.chatMode]
  499. except:
  500. import exception
  501. exception.Abort("ChatLine.GetCurrentChatModeName")
  502.  
  503. def SAFE_SetEscapeEvent(self, event):
  504. self.eventReturn = ui.__mem_func__(event)
  505.  
  506. def SAFE_SetReturnEvent(self, event):
  507. self.eventEscape = ui.__mem_func__(event)
  508.  
  509. def SAFE_SetTabEvent(self, event):
  510. self.eventTab = ui.__mem_func__(event)
  511.  
  512. def SetTabEvent(self, event):
  513. self.eventTab = event
  514.  
  515. def OpenChat(self):
  516. self.SetFocus()
  517. self.__ResetChat()
  518.  
  519. def __ClearChat(self):
  520. self.SetText("")
  521. constInfo.lastSentencePos = 0
  522.  
  523. def __ResetChat(self):
  524. if chat.CHAT_TYPE_PARTY == self.GetChatMode():
  525. self.SetText("#")
  526. self.SetEndPosition()
  527. elif chat.CHAT_TYPE_GUILD == self.GetChatMode():
  528. self.SetText("%")
  529. self.SetEndPosition()
  530. elif chat.CHAT_TYPE_SHOUT == self.GetChatMode():
  531. self.SetText("!")
  532. self.SetEndPosition()
  533. else:
  534. self.__ClearChat()
  535.  
  536. self.__CheckChatMark()
  537.  
  538.  
  539. def __SendChatPacket(self, text, type):
  540. if net.IsChatInsultIn(text):
  541. chat.AppendChat(chat.CHAT_TYPE_INFO, localeinfo.CHAT_INSULT_STRING)
  542. else:
  543. if app.LINK_IN_CHAT:
  544. link = self.GetLink(text)
  545. if link != "":
  546. import memetinchrmodul as chr
  547. if not chr.IsGameMaster():
  548. text = text.replace(link, "|cFF00C0FC|h|Hweb:" + link.replace("://", "XxX") + "|h" + link + "|h|r")
  549. else:
  550. text = text.replace(link, "|cFF00C0FC|h|Hsysweb:" + link.replace("://", "XxX") + "|h" + link + "|h|r")
  551.  
  552. net.SendChatPacket(text, type)
  553.  
  554. def __SendPartyChatPacket(self, text):
  555.  
  556. if 1 == len(text):
  557. self.RunCloseEvent()
  558. return
  559.  
  560. self.__SendChatPacket(text[1:], chat.CHAT_TYPE_PARTY)
  561. self.__ResetChat()
  562.  
  563. def __SendGuildChatPacket(self, text):
  564.  
  565. if 1 == len(text):
  566. self.RunCloseEvent()
  567. return
  568.  
  569. self.__SendChatPacket(text[1:], chat.CHAT_TYPE_GUILD)
  570. self.__ResetChat()
  571.  
  572. def __SendShoutChatPacket(self, text):
  573.  
  574. if 1 == len(text):
  575. self.RunCloseEvent()
  576. return
  577.  
  578. if app.GetTime() < self.lastShoutTime + 15:
  579. chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.CHAT_SHOUT_LIMIT)
  580. self.__ResetChat()
  581. return
  582.  
  583. self.__SendChatPacket(text[1:], chat.CHAT_TYPE_SHOUT)
  584. self.__ResetChat()
  585.  
  586. self.lastShoutTime = app.GetTime()
  587.  
  588. def __SendTalkingChatPacket(self, text):
  589. self.__SendChatPacket(text, chat.CHAT_TYPE_TALKING)
  590. self.__ResetChat()
  591.  
  592. def OnIMETab(self):
  593. #if None != self.eventTab:
  594. # self.eventTab()
  595. #return TRUE
  596. return FALSE
  597.  
  598. def OnIMEUpdate(self):
  599. ui.EditLine.OnIMEUpdate(self)
  600. self.__CheckChatMark()
  601.  
  602. def __CheckChatMark(self):
  603.  
  604. self.overTextLine.Hide()
  605.  
  606. text = self.GetText()
  607. if len(text) > 0:
  608. if '#' == text[0]:
  609. self.overTextLine.SetText("#")
  610. self.overTextLine.Show()
  611. elif '%' == text[0]:
  612. self.overTextLine.SetText("%")
  613. self.overTextLine.Show()
  614. elif '!' == text[0]:
  615. self.overTextLine.SetText("!")
  616. self.overTextLine.Show()
  617.  
  618. def OnIMEKeyDown(self, key):
  619. # LAST_SENTENCE_STACK
  620. if app.VK_UP == key:
  621. self.__PrevLastSentenceStack()
  622. return TRUE
  623.  
  624. if app.VK_DOWN == key:
  625. self.__NextLastSentenceStack()
  626. return TRUE
  627. # END_OF_LAST_SENTENCE_STACK
  628.  
  629. ui.EditLine.OnIMEKeyDown(self, key)
  630.  
  631. # LAST_SENTENCE_STACK
  632. def __PrevLastSentenceStack(self):
  633. global ENABLE_LAST_SENTENCE_STACK
  634. if not ENABLE_LAST_SENTENCE_STACK:
  635. return
  636.  
  637. if constInfo.lastSentenceStack and constInfo.lastSentencePos < len(constInfo.lastSentenceStack):
  638. constInfo.lastSentencePos += 1
  639. lastSentence = constInfo.lastSentenceStack[-constInfo.lastSentencePos]
  640. self.SetText(lastSentence)
  641. self.SetEndPosition()
  642.  
  643. def __NextLastSentenceStack(self):
  644. global ENABLE_LAST_SENTENCE_STACK
  645. if not ENABLE_LAST_SENTENCE_STACK:
  646. return
  647.  
  648. if constInfo.lastSentenceStack and constInfo.lastSentencePos > 1:
  649. constInfo.lastSentencePos -= 1
  650. lastSentence = constInfo.lastSentenceStack[-constInfo.lastSentencePos]
  651. self.SetText(lastSentence)
  652. self.SetEndPosition()
  653.  
  654. def __PushLastSentenceStack(self, text):
  655. global ENABLE_LAST_SENTENCE_STACK
  656. if not ENABLE_LAST_SENTENCE_STACK:
  657. return
  658.  
  659. if len(text) <= 0:
  660. return
  661.  
  662. LAST_SENTENCE_STACK_SIZE = 32
  663. if len(constInfo.lastSentenceStack) > LAST_SENTENCE_STACK_SIZE:
  664. constInfo.lastSentenceStack.pop(0)
  665.  
  666. constInfo.lastSentenceStack.append(text)
  667. # END_OF_LAST_SENTENCE_STACK
  668.  
  669. def OnIMEReturn(self):
  670. text = self.GetText()
  671. textLen=len(text)
  672.  
  673. # LAST_SENTENCE_STACK
  674. self.__PushLastSentenceStack(text)
  675. # END_OF_LAST_SENTENCE_STACK
  676.  
  677. textSpaceCount=text.count(' ')
  678.  
  679. if (textLen > 0) and (textLen != textSpaceCount):
  680. if '#' == text[0]:
  681. self.__SendPartyChatPacket(text)
  682. elif '%' == text[0]:
  683. self.__SendGuildChatPacket(text)
  684. elif '!' == text[0]:
  685. self.__SendShoutChatPacket(text)
  686. else:
  687. self.__SendTalkingChatPacket(text)
  688. else:
  689. self.__ClearChat()
  690. self.eventReturn()
  691.  
  692. return TRUE
  693.  
  694. def OnPressEscapeKey(self):
  695. self.__ClearChat()
  696. self.eventEscape()
  697. return TRUE
  698.  
  699. def RunCloseEvent(self):
  700. self.eventEscape()
  701.  
  702. def BindInterface(self, interface):
  703. self.interface = interface
  704.  
  705. def OnMouseLeftButtonDown(self):
  706. hyperlink = ui.GetHyperlink()
  707. if hyperlink:
  708. if app.IsPressed(app.DIK_LALT):
  709. link = chat.GetLinkFromHyperlink(hyperlink)
  710. ime.PasteString(link)
  711. else:
  712. self.interface.MakeHyperlinkTooltip(hyperlink)
  713. else:
  714. ui.EditLine.OnMouseLeftButtonDown(self)
  715.  
  716. class ChatInputSet(ui.Window):
  717.  
  718. CHAT_OUTLINE_COLOR = grp.GenerateColor(1.0, 1.0, 1.0, 1.0)
  719.  
  720. def __init__(self):
  721. ui.Window.__init__(self)
  722. self.SetWindowName("ChatInputSet")
  723.  
  724. InsertChatInputSetWindow(self)
  725. self.__Create()
  726.  
  727. def __del__(self):
  728. ui.Window.__del__(self)
  729.  
  730. def __Create(self):
  731. chatModeButton = ChatModeButton()
  732. chatModeButton.SetParent(self)
  733. chatModeButton.SetSize(40, 17)
  734. chatModeButton.SetText(localeInfo.CHAT_NORMAL)
  735. chatModeButton.SetPosition(7, 2)
  736. chatModeButton.SAFE_SetEvent(self.OnChangeChatMode)
  737. self.chatModeButton = chatModeButton
  738.  
  739. chatLine = ChatLine()
  740. chatLine.SetParent(self)
  741. chatLine.SetMax(512)
  742. chatLine.SetUserMax(76)
  743. chatLine.SetText("")
  744. chatLine.SAFE_SetTabEvent(self.OnChangeChatMode)
  745. chatLine.x = 0
  746. chatLine.y = 0
  747. chatLine.width = 0
  748. chatLine.height = 0
  749. self.chatLine = chatLine
  750.  
  751. btnSend = ui.Button()
  752. btnSend.SetParent(self)
  753. btnSend.SetUpVisual("d:/ymir work/ui/game/taskbar/Send_Chat_Button_01.sub")
  754. btnSend.SetOverVisual("d:/ymir work/ui/game/taskbar/Send_Chat_Button_02.sub")
  755. btnSend.SetDownVisual("d:/ymir work/ui/game/taskbar/Send_Chat_Button_03.sub")
  756. btnSend.SetToolTipText(localeInfo.CHAT_SEND_CHAT)
  757. btnSend.SAFE_SetEvent(self.chatLine.OnIMEReturn)
  758. self.btnSend = btnSend
  759.  
  760. def Destroy(self):
  761. self.chatModeButton = None
  762. self.chatLine = None
  763. self.btnSend = None
  764.  
  765. def Open(self):
  766. self.chatLine.Show()
  767. self.chatLine.SetPosition(57, 5)
  768. self.chatLine.SetFocus()
  769. self.chatLine.OpenChat()
  770.  
  771. self.chatModeButton.SetPosition(7, 2)
  772. self.chatModeButton.Show()
  773.  
  774. self.btnSend.Show()
  775. self.Show()
  776.  
  777. self.RefreshPosition()
  778. return TRUE
  779.  
  780. def Close(self):
  781. self.chatLine.KillFocus()
  782. self.chatLine.Hide()
  783. self.chatModeButton.Hide()
  784. self.btnSend.Hide()
  785. self.Hide()
  786. return TRUE
  787.  
  788. def SetEscapeEvent(self, event):
  789. self.chatLine.SetEscapeEvent(event)
  790.  
  791. def SetReturnEvent(self, event):
  792. self.chatLine.SetReturnEvent(event)
  793.  
  794. def OnChangeChatMode(self):
  795. RefreshChatMode()
  796.  
  797. def OnRefreshChatMode(self):
  798. self.chatLine.ChangeChatMode()
  799. self.chatModeButton.SetText(self.chatLine.GetCurrentChatModeName())
  800.  
  801. def SetChatFocus(self):
  802. self.chatLine.SetFocus()
  803.  
  804. def KillChatFocus(self):
  805. self.chatLine.KillFocus()
  806.  
  807. def SetChatMax(self, max):
  808. self.chatLine.SetUserMax(max)
  809.  
  810. def RefreshPosition(self):
  811. self.chatLine.SetSize(self.GetWidth() - 93, 13)
  812.  
  813. self.btnSend.SetPosition(self.GetWidth() - 25, 2)
  814.  
  815. (self.chatLine.x, self.chatLine.y, self.chatLine.width, self.chatLine.height) = self.chatLine.GetRect()
  816.  
  817. def BindInterface(self, interface):
  818. self.chatLine.BindInterface(interface)
  819.  
  820. def OnRender(self):
  821. (x, y, width, height) = self.chatLine.GetRect()
  822. ui.RenderRoundBox(x-4, y-3, width+7, height+4, self.CHAT_OUTLINE_COLOR)
  823.  
  824. ## ChatWindow
  825. class ChatWindow(ui.Window):
  826.  
  827. BOARD_START_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.0)
  828. BOARD_END_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.8)
  829. BOARD_MIDDLE_COLOR = grp.GenerateColor(0.0, 0.0, 0.0, 0.5)
  830. CHAT_OUTLINE_COLOR = grp.GenerateColor(1.0, 1.0, 1.0, 1.0)
  831.  
  832. EDIT_LINE_HEIGHT = 25
  833. if app.ENABLE_CHATTING_WINDOW_RENEWAL:
  834. EDIT_LINE_HIDE_HEIGHT = 20
  835. CHAT_WINDOW_WIDTH = 600
  836.  
  837. class ChatBackBoard(ui.Window):
  838. def __init__(self):
  839. ui.Window.__init__(self)
  840. def __del__(self):
  841. ui.Window.__del__(self)
  842.  
  843. class ChatButton(ui.DragButton):
  844.  
  845. def __init__(self):
  846. ui.DragButton.__init__(self)
  847. self.AddFlag("float")
  848. self.AddFlag("movable")
  849. self.AddFlag("restrict_x")
  850. self.topFlag = FALSE
  851. self.SetWindowName("ChatWindow:ChatButton")
  852.  
  853.  
  854. def __del__(self):
  855. ui.DragButton.__del__(self)
  856.  
  857. def SetOwner(self, owner):
  858. self.owner = owner
  859.  
  860. def OnMouseOverIn(self):
  861. app.SetCursor(app.VSIZE)
  862.  
  863. def OnMouseOverOut(self):
  864. app.SetCursor(app.NORMAL)
  865.  
  866. def OnTop(self):
  867. if TRUE == self.topFlag:
  868. return
  869.  
  870. self.topFlag = TRUE
  871. self.owner.SetTop()
  872. self.topFlag = FALSE
  873.  
  874. def __init__(self):
  875. ui.Window.__init__(self)
  876. self.AddFlag("float")
  877.  
  878. self.SetWindowName("ChatWindow")
  879. self.__RegisterChatColorDict()
  880.  
  881. self.boardState = chat.BOARD_STATE_VIEW
  882. self.chatID = chat.CreateChatSet(chat.CHAT_SET_CHAT_WINDOW)
  883. chat.SetBoardState(self.chatID, chat.BOARD_STATE_VIEW)
  884.  
  885. self.xBar = 0
  886. self.yBar = 0
  887. self.widthBar = 0
  888. self.heightBar = 0
  889. self.curHeightBar = 0
  890. self.visibleLineCount = 0
  891. self.scrollBarPos = 1.0
  892. self.scrollLock = FALSE
  893.  
  894. chatInputSet = ChatInputSet()
  895. chatInputSet.SetParent(self)
  896. chatInputSet.SetEscapeEvent(ui.__mem_func__(self.CloseChat))
  897. chatInputSet.SetReturnEvent(ui.__mem_func__(self.CloseChat))
  898. chatInputSet.SetSize(550, 25)
  899. self.chatInputSet = chatInputSet
  900.  
  901. btnSendWhisper = ui.Button()
  902. btnSendWhisper.SetParent(self)
  903. btnSendWhisper.SetUpVisual("d:/ymir work/ui/game/taskbar/Send_Whisper_Button_01.sub")
  904. btnSendWhisper.SetOverVisual("d:/ymir work/ui/game/taskbar/Send_Whisper_Button_02.sub")
  905. btnSendWhisper.SetDownVisual("d:/ymir work/ui/game/taskbar/Send_Whisper_Button_03.sub")
  906. btnSendWhisper.SetToolTipText(localeInfo.CHAT_SEND_MEMO)
  907. btnSendWhisper.Hide()
  908. self.btnSendWhisper = btnSendWhisper
  909.  
  910. btnChatLog = ui.Button()
  911. btnChatLog.SetParent(self)
  912. btnChatLog.SetUpVisual("d:/ymir work/ui/game/taskbar/Open_Chat_Log_Button_01.sub")
  913. btnChatLog.SetOverVisual("d:/ymir work/ui/game/taskbar/Open_Chat_Log_Button_02.sub")
  914. btnChatLog.SetDownVisual("d:/ymir work/ui/game/taskbar/Open_Chat_Log_Button_03.sub")
  915. btnChatLog.SetToolTipText(localeInfo.CHAT_LOG)
  916. btnChatLog.Hide()
  917. self.btnChatLog = btnChatLog
  918.  
  919. btnChatSizing = self.ChatButton()
  920. btnChatSizing.SetOwner(self)
  921. btnChatSizing.SetMoveEvent(ui.__mem_func__(self.Refresh))
  922. btnChatSizing.Hide()
  923. self.btnChatSizing = btnChatSizing
  924.  
  925. if app.ENABLE_CHATTING_WINDOW_RENEWAL:
  926. imgChatBarLeft = ui.ImageBox()
  927. imgChatBarLeft.SetParent(self.btnChatSizing)
  928. imgChatBarLeft.AddFlag("not_pick")
  929. imgChatBarLeft.LoadImage("d:/ymir work/ui/chat/chat_linebar_left.tga")
  930. imgChatBarLeft.Show()
  931. self.imgChatBarLeft = imgChatBarLeft
  932.  
  933. imgChatBarRight = ui.ImageBox()
  934. imgChatBarRight.SetParent(self.btnChatSizing)
  935. imgChatBarRight.AddFlag("not_pick")
  936. imgChatBarRight.LoadImage("d:/ymir work/ui/chat/chat_linebar_right.tga")
  937. imgChatBarRight.Show()
  938. self.imgChatBarRight = imgChatBarRight
  939.  
  940. imgChatBarMiddle = ui.ExpandedImageBox()
  941. imgChatBarMiddle.SetParent(self.btnChatSizing)
  942. imgChatBarMiddle.AddFlag("not_pick")
  943. imgChatBarMiddle.LoadImage("d:/ymir work/ui/chat/chatmenutab_line.tga")
  944. imgChatBarMiddle.Show()
  945. self.imgChatBarMiddle = imgChatBarMiddle
  946.  
  947. btnChatTab = ui.Button()
  948. btnChatTab.SetParent(self.btnChatSizing)
  949. btnChatTab.SetUpVisual("d:/ymir work/ui/chat/chatmenutab_down.tga")
  950. btnChatTab.SetOverVisual("d:/ymir work/ui/chat/chatmenutab_down.tga")
  951. btnChatTab.SetDownVisual("d:/ymir work/ui/chat/chatmenutab_down.tga")
  952. btnChatTab.SetToolTipText(uiScriptLocale.CHATTING_SETTING_TALKING, 0, -23)
  953. btnChatTab.Show()
  954. btnChatTab.Down()
  955. self.btnChatTab = btnChatTab
  956.  
  957. btnChatSettingOption = ui.Button()
  958. btnChatSettingOption.SetParent(self.btnChatSizing)
  959. btnChatSettingOption.SetUpVisual("d:/ymir work/ui/chat/btn_option01_default.tga")
  960. btnChatSettingOption.SetOverVisual("d:/ymir work/ui/chat/btn_option01_over.tga")
  961. btnChatSettingOption.SetDownVisual("d:/ymir work/ui/chat/btn_option01_down.tga")
  962. btnChatSettingOption.SetToolTipText(localeInfo.CHATTING_SETTING_SETTING, 0, -23)
  963. btnChatSettingOption.SetEvent(ui.__mem_func__(self.__SettingOptionWndOpen))
  964. btnChatSettingOption.Show()
  965. self.btnChatSettingOption = btnChatSettingOption
  966.  
  967. self.wndChatSettingOption = ChatSettingWindow(self)
  968. else:
  969. imgChatBarLeft = ui.ImageBox()
  970. imgChatBarLeft.SetParent(self.btnChatSizing)
  971. imgChatBarLeft.AddFlag("not_pick")
  972. imgChatBarLeft.LoadImage("d:/ymir work/ui/pattern/chat_bar_left.tga")
  973. imgChatBarLeft.Show()
  974. self.imgChatBarLeft = imgChatBarLeft
  975.  
  976. imgChatBarRight = ui.ImageBox()
  977. imgChatBarRight.SetParent(self.btnChatSizing)
  978. imgChatBarRight.AddFlag("not_pick")
  979. imgChatBarRight.LoadImage("d:/ymir work/ui/pattern/chat_bar_right.tga")
  980. imgChatBarRight.Show()
  981. self.imgChatBarRight = imgChatBarRight
  982.  
  983. imgChatBarMiddle = ui.ExpandedImageBox()
  984. imgChatBarMiddle.SetParent(self.btnChatSizing)
  985. imgChatBarMiddle.AddFlag("not_pick")
  986. imgChatBarMiddle.LoadImage("d:/ymir work/ui/pattern/chat_bar_middle.tga")
  987. imgChatBarMiddle.Show()
  988. self.imgChatBarMiddle = imgChatBarMiddle
  989.  
  990. scrollBar = ui.ScrollBar()
  991. scrollBar.AddFlag("float")
  992. scrollBar.SetScrollEvent(ui.__mem_func__(self.OnScroll))
  993. self.scrollBar = scrollBar
  994.  
  995. self.Refresh()
  996. if app.ENABLE_CHATTING_WINDOW_RENEWAL:
  997. self.RefreshChatWindow()
  998. self.chatInputSet.RefreshPosition()
  999.  
  1000. def __del__(self):
  1001. ui.Window.__del__(self)
  1002.  
  1003. def __RegisterChatColorDict(self):
  1004. CHAT_COLOR_DICT = {
  1005. chat.CHAT_TYPE_TALKING : colorInfo.CHAT_RGB_TALK,
  1006. chat.CHAT_TYPE_INFO : colorInfo.CHAT_RGB_INFO,
  1007. chat.CHAT_TYPE_NOTICE : colorInfo.CHAT_RGB_NOTICE,
  1008. chat.CHAT_TYPE_PARTY : colorInfo.CHAT_RGB_PARTY,
  1009. chat.CHAT_TYPE_GUILD : colorInfo.CHAT_RGB_GUILD,
  1010. chat.CHAT_TYPE_COMMAND : colorInfo.CHAT_RGB_COMMAND,
  1011. chat.CHAT_TYPE_SHOUT : colorInfo.CHAT_RGB_SHOUT,
  1012. chat.CHAT_TYPE_WHISPER : colorInfo.CHAT_RGB_WHISPER,
  1013. }
  1014. if app.ENABLE_CHATTING_WINDOW_RENEWAL:
  1015. if app.CHAT_DMG:
  1016. CHAT_COLOR_DICT.update({
  1017. chat.CHAT_TYPE_EXP_INFO : colorInfo.CHAT_RGB_INFO,
  1018. chat.CHAT_TYPE_ITEM_INFO : colorInfo.CHAT_RGB_INFO,
  1019. chat.CHAT_TYPE_MONEY_INFO : colorInfo.CHAT_RGB_INFO,
  1020. chat.CHAT_TYPE_DMG : colorInfo.CHAT_RGB_DMG,
  1021. })
  1022. else:
  1023. CHAT_COLOR_DICT.update({
  1024. chat.CHAT_TYPE_EXP_INFO : colorInfo.CHAT_RGB_INFO,
  1025. chat.CHAT_TYPE_ITEM_INFO : colorInfo.CHAT_RGB_INFO,
  1026. chat.CHAT_TYPE_MONEY_INFO : colorInfo.CHAT_RGB_INFO,
  1027. })
  1028.  
  1029. for colorItem in CHAT_COLOR_DICT.items():
  1030. type=colorItem[0]
  1031. rgb=colorItem[1]
  1032. chat.SetChatColor(type, rgb[0], rgb[1], rgb[2])
  1033.  
  1034. def Destroy(self):
  1035. self.chatInputSet.Destroy()
  1036. self.chatInputSet = None
  1037.  
  1038. self.btnSendWhisper = 0
  1039. self.btnChatLog = 0
  1040. self.btnChatSizing = 0
  1041.  
  1042. if app.ENABLE_CHATTING_WINDOW_RENEWAL:
  1043. if self.wndChatSettingOption:
  1044. self.wndChatSettingOption.Close()
  1045. self.wndChatSettingOption = None
  1046.  
  1047. ################
  1048. ## Open & Close
  1049. def OpenChat(self):
  1050. self.SetSize(self.CHAT_WINDOW_WIDTH, 25)
  1051. chat.SetBoardState(self.chatID, chat.BOARD_STATE_EDIT)
  1052. self.boardState = chat.BOARD_STATE_EDIT
  1053.  
  1054. (x, y, width, height) = self.GetRect()
  1055. (btnX, btnY) = self.btnChatSizing.GetGlobalPosition()
  1056.  
  1057. chat.SetPosition(self.chatID, x + 10, y)
  1058.  
  1059. chat.SetHeight(self.chatID, y - btnY - self.EDIT_LINE_HEIGHT + 100)
  1060.  
  1061. if self.IsShow():
  1062. self.btnChatSizing.Show()
  1063.  
  1064. self.Refresh()
  1065. if app.ENABLE_CHATTING_WINDOW_RENEWAL:
  1066. self.RefreshChatWindow()
  1067.  
  1068. self.btnSendWhisper.SetPosition(self.GetWidth() - 50, 2)
  1069. self.btnSendWhisper.Show()
  1070.  
  1071. self.btnChatLog.SetPosition(self.GetWidth() - 25, 2)
  1072. self.btnChatLog.Show()
  1073.  
  1074. self.chatInputSet.Open()
  1075. self.chatInputSet.SetTop()
  1076. self.SetTop()
  1077.  
  1078. def CloseChat(self):
  1079. chat.SetBoardState(self.chatID, chat.BOARD_STATE_VIEW)
  1080. self.boardState = chat.BOARD_STATE_VIEW
  1081.  
  1082. (x, y, width, height) = self.GetRect()
  1083.  
  1084. chat.SetPosition(self.chatID, x + 10, y + self.EDIT_LINE_HEIGHT)
  1085.  
  1086. self.SetSize(self.CHAT_WINDOW_WIDTH, 0)
  1087.  
  1088. self.chatInputSet.Close()
  1089. self.btnSendWhisper.Hide()
  1090. self.btnChatLog.Hide()
  1091. self.btnChatSizing.Hide()
  1092.  
  1093. self.Refresh()
  1094. if app.ENABLE_CHATTING_WINDOW_RENEWAL:
  1095. self.RefreshChatWindow()
  1096.  
  1097. def SetSendWhisperEvent(self, event):
  1098. self.btnSendWhisper.SetEvent(event)
  1099.  
  1100. def SetOpenChatLogEvent(self, event):
  1101. self.btnChatLog.SetEvent(event)
  1102.  
  1103. def IsEditMode(self):
  1104. if chat.BOARD_STATE_EDIT == self.boardState:
  1105. return TRUE
  1106.  
  1107. return FALSE
  1108.  
  1109. def __RefreshSizingBar(self):
  1110. (x, y, width, height) = self.GetRect()
  1111. gxChat, gyChat = self.btnChatSizing.GetGlobalPosition()
  1112. self.btnChatSizing.SetPosition(x, gyChat)
  1113. self.btnChatSizing.SetSize(width, 22)
  1114.  
  1115. if app.ENABLE_CHATTING_WINDOW_RENEWAL:
  1116. self.imgChatBarLeft.SetPosition(0, 17)
  1117.  
  1118. self.imgChatBarRight.SetPosition(width - 57, 0)
  1119.  
  1120. self.btnChatTab.SetTextAddPos(uiScriptLocale.CHATTING_SETTING_DEFAULT_TITLE, -2)
  1121. self.btnChatTab.SetPosition(4, 0)
  1122. self.btnChatSettingOption.SetPosition(width - 27, 3)
  1123.  
  1124. self.imgChatBarMiddle.SetPosition(57.0, 0)
  1125. self.imgChatBarMiddle.SetRenderingRect(0.0, 0.0, float(width - 57.0 * 2) / 57.0 - 1.0, 0.0)
  1126. else:
  1127. self.imgChatBarLeft.SetPosition(0, 0)
  1128. self.imgChatBarRight.SetPosition(width - 64, 0)
  1129. self.imgChatBarMiddle.SetPosition(64, 0)
  1130. self.imgChatBarMiddle.SetRenderingRect(0.0, 0.0, float(width - 128) / 64.0 - 1.0, 0.0)
  1131.  
  1132. def SetPosition(self, x, y):
  1133. ui.Window.SetPosition(self, x, y)
  1134. self.__RefreshSizingBar()
  1135.  
  1136. def SetSize(self, width, height):
  1137. ui.Window.SetSize(self, width, height)
  1138. self.__RefreshSizingBar()
  1139.  
  1140. def SetHeight(self, height):
  1141. gxChat, gyChat = self.btnChatSizing.GetGlobalPosition()
  1142. self.btnChatSizing.SetPosition(gxChat, wndMgr.GetScreenHeight() - height)
  1143.  
  1144. ###########
  1145. ## Refresh
  1146. def Refresh(self):
  1147. if self.boardState == chat.BOARD_STATE_EDIT:
  1148. self.RefreshBoardEditState()
  1149. elif self.boardState == chat.BOARD_STATE_VIEW:
  1150. self.RefreshBoardViewState()
  1151.  
  1152. def RefreshBoardEditState(self):
  1153.  
  1154. (x, y, width, height) = self.GetRect()
  1155. (btnX, btnY) = self.btnChatSizing.GetGlobalPosition()
  1156.  
  1157. self.xBar = x
  1158. self.yBar = btnY
  1159. self.widthBar = width
  1160. self.heightBar = y - btnY + self.EDIT_LINE_HEIGHT
  1161. self.curHeightBar = self.heightBar
  1162.  
  1163. chat.SetPosition(self.chatID, x + 10, y)
  1164.  
  1165. chat.SetHeight(self.chatID, y - btnY - self.EDIT_LINE_HEIGHT)
  1166. chat.ArrangeShowingChat(self.chatID)
  1167.  
  1168. if btnY > y:
  1169. self.btnChatSizing.SetPosition(btnX, y)
  1170. self.heightBar = self.EDIT_LINE_HEIGHT
  1171.  
  1172. def RefreshBoardViewState(self):
  1173. (x, y, width, height) = self.GetRect()
  1174. (btnX, btnY) = self.btnChatSizing.GetGlobalPosition()
  1175. textAreaHeight = self.visibleLineCount * chat.GetLineStep(self.chatID)
  1176.  
  1177. chat.SetPosition(self.chatID, x + 10, y + self.EDIT_LINE_HEIGHT)
  1178.  
  1179. chat.SetHeight(self.chatID, y - btnY - self.EDIT_LINE_HEIGHT + 100)
  1180.  
  1181. if self.boardState == chat.BOARD_STATE_EDIT:
  1182. textAreaHeight += 45
  1183. elif self.visibleLineCount != 0:
  1184. textAreaHeight += 10 + 10
  1185.  
  1186. self.xBar = x
  1187. self.yBar = y + self.EDIT_LINE_HEIGHT - textAreaHeight
  1188. self.widthBar = width
  1189. self.heightBar = textAreaHeight
  1190.  
  1191. self.scrollBar.Hide()
  1192.  
  1193. ##########
  1194. ## Render
  1195. def OnUpdate(self):
  1196. if self.boardState == chat.BOARD_STATE_EDIT:
  1197. chat.Update(self.chatID)
  1198. elif self.boardState == chat.BOARD_STATE_VIEW:
  1199. if systemSetting.IsViewChat():
  1200. chat.Update(self.chatID)
  1201.  
  1202. def OnRender(self):
  1203. if chat.GetVisibleLineCount(self.chatID) != self.visibleLineCount:
  1204. self.visibleLineCount = chat.GetVisibleLineCount(self.chatID)
  1205. self.Refresh()
  1206.  
  1207. if self.curHeightBar != self.heightBar:
  1208. self.curHeightBar += (self.heightBar - self.curHeightBar) / 10
  1209.  
  1210. if self.boardState == chat.BOARD_STATE_EDIT:
  1211. grp.SetColor(self.BOARD_MIDDLE_COLOR)
  1212. if app.ENABLE_CHATTING_WINDOW_RENEWAL:
  1213. grp.RenderBar(self.xBar, self.yBar + (self.heightBar - self.curHeightBar) + self.EDIT_LINE_HIDE_HEIGHT, self.widthBar, self.curHeightBar)
  1214. else:
  1215. grp.RenderBar(self.xBar, self.yBar + (self.heightBar - self.curHeightBar) + 10, self.widthBar, self.curHeightBar)
  1216. chat.Render(self.chatID)
  1217. elif self.boardState == chat.BOARD_STATE_VIEW:
  1218. if systemSetting.IsViewChat():
  1219. grp.RenderGradationBar(self.xBar, self.yBar + (self.heightBar - self.curHeightBar), self.widthBar, self.curHeightBar, self.BOARD_START_COLOR, self.BOARD_END_COLOR)
  1220. chat.Render(self.chatID)
  1221.  
  1222. ##########
  1223. ## Event
  1224. def OnTop(self):
  1225. self.btnChatSizing.SetTop()
  1226. self.scrollBar.SetTop()
  1227.  
  1228. def OnScroll(self):
  1229. if not self.scrollLock:
  1230. self.scrollBarPos = self.scrollBar.GetPos()
  1231.  
  1232. lineCount = chat.GetLineCount(self.chatID)
  1233. visibleLineCount = chat.GetVisibleLineCount(self.chatID)
  1234. endLine = visibleLineCount + int(float(lineCount - visibleLineCount) * self.scrollBarPos)
  1235.  
  1236. chat.SetEndPos(self.chatID, self.scrollBarPos)
  1237.  
  1238. def OnChangeChatMode(self):
  1239. self.chatInputSet.OnChangeChatMode()
  1240.  
  1241. def SetChatFocus(self):
  1242. self.chatInputSet.SetChatFocus()
  1243.  
  1244. def BindInterface(self, interface):
  1245. self.chatInputSet.BindInterface(interface)
  1246.  
  1247. if app.ENABLE_CHATTING_WINDOW_RENEWAL:
  1248. def __SettingOptionWndOpen(self):
  1249. if self.wndChatSettingOption:
  1250. if self.wndChatSettingOption.IsShow():
  1251. self.wndChatSettingOption.Close()
  1252. else:
  1253. self.wndChatSettingOption.Open()
  1254.  
  1255. def RefreshChatWindow(self):
  1256. if not self.wndChatSettingOption:
  1257. return
  1258.  
  1259. for mode in OPTION_CHECKBOX_MODE.iterkeys():
  1260. enable = self.wndChatSettingOption.GetChatModeSetting(mode)
  1261. if enable:
  1262. chat.EnableChatMode(self.chatID, mode)
  1263. else:
  1264. chat.DisableChatMode(self.chatID, mode)
  1265.  
  1266. ## ChatLogWindow
  1267. class ChatLogWindow(ui.Window):
  1268.  
  1269. BLOCK_WIDTH = 32
  1270. if app.CHAT_DMG:
  1271. CHAT_MODE_NAME = ( localeInfo.CHAT_NORMAL, localeInfo.CHAT_PARTY, localeInfo.CHAT_GUILD, localeInfo.CHAT_SHOUT, localeInfo.CHAT_INFORMATION, localeInfo.CHAT_NOTICE, localeInfo.CHAT_DMG )
  1272. else:
  1273. CHAT_MODE_NAME = ( localeInfo.CHAT_NORMAL, localeInfo.CHAT_PARTY, localeInfo.CHAT_GUILD, localeInfo.CHAT_SHOUT, localeInfo.CHAT_INFORMATION, localeInfo.CHAT_NOTICE, )
  1274. if app.CHAT_DMG:
  1275. CHAT_MODE_INDEX = ( chat.CHAT_TYPE_TALKING,
  1276. chat.CHAT_TYPE_PARTY,
  1277. chat.CHAT_TYPE_GUILD,
  1278. chat.CHAT_TYPE_SHOUT,
  1279. chat.CHAT_TYPE_INFO,
  1280. chat.CHAT_TYPE_NOTICE,
  1281. chat.CHAT_TYPE_DMG)
  1282. else:
  1283. CHAT_MODE_INDEX = ( chat.CHAT_TYPE_TALKING,
  1284. chat.CHAT_TYPE_PARTY,
  1285. chat.CHAT_TYPE_GUILD,
  1286. chat.CHAT_TYPE_SHOUT,
  1287. chat.CHAT_TYPE_INFO,
  1288. chat.CHAT_TYPE_NOTICE, )
  1289.  
  1290. CHAT_LOG_WINDOW_MINIMUM_WIDTH = 450
  1291. CHAT_LOG_WINDOW_MINIMUM_HEIGHT = 120
  1292.  
  1293. class ResizeButton(ui.DragButton):
  1294.  
  1295. def __init__(self):
  1296. ui.DragButton.__init__(self)
  1297.  
  1298. def __del__(self):
  1299. ui.DragButton.__del__(self)
  1300.  
  1301. def OnMouseOverIn(self):
  1302. app.SetCursor(app.HVSIZE)
  1303.  
  1304. def OnMouseOverOut(self):
  1305. app.SetCursor(app.NORMAL)
  1306.  
  1307. def __init__(self):
  1308.  
  1309. self.allChatMode = TRUE
  1310. self.chatInputSet = None
  1311.  
  1312. ui.Window.__init__(self)
  1313. self.AddFlag("float")
  1314. self.AddFlag("movable")
  1315. self.SetWindowName("ChatLogWindow")
  1316. self.__CreateChatInputSet()
  1317. self.__CreateWindow()
  1318. self.__CreateButton()
  1319. self.__CreateScrollBar()
  1320.  
  1321. self.chatID = chat.CreateChatSet(chat.CHAT_SET_LOG_WINDOW)
  1322. chat.SetBoardState(self.chatID, chat.BOARD_STATE_LOG)
  1323. if app.ENABLE_CHATTING_WINDOW_RENEWAL:
  1324. chat.EnableChatMode(self.chatID, chat.CHAT_TYPE_EXP_INFO)
  1325. chat.EnableChatMode(self.chatID, chat.CHAT_TYPE_ITEM_INFO)
  1326. chat.EnableChatMode(self.chatID, chat.CHAT_TYPE_MONEY_INFO)
  1327. if app.CHAT_DMG:
  1328. chat.EnableChatMode(self.chatID, chat.CHAT_TYPE_DMG)
  1329. for i in self.CHAT_MODE_INDEX:
  1330. chat.EnableChatMode(self.chatID, i)
  1331. self.SetPosition(20, 20)
  1332. self.SetSize(self.CHAT_LOG_WINDOW_MINIMUM_WIDTH, self.CHAT_LOG_WINDOW_MINIMUM_HEIGHT)
  1333. self.btnSizing.SetPosition(self.CHAT_LOG_WINDOW_MINIMUM_WIDTH-self.btnSizing.GetWidth(), self.CHAT_LOG_WINDOW_MINIMUM_HEIGHT-self.btnSizing.GetHeight()+2)
  1334.  
  1335. self.OnResize()
  1336.  
  1337. def __CreateChatInputSet(self):
  1338. chatInputSet = ChatInputSet()
  1339. chatInputSet.SetParent(self)
  1340. chatInputSet.SetEscapeEvent(ui.__mem_func__(self.Close))
  1341. chatInputSet.SetWindowVerticalAlignBottom()
  1342. chatInputSet.Open()
  1343. self.chatInputSet = chatInputSet
  1344.  
  1345. def __CreateWindow(self):
  1346. imgLeft = ui.ImageBox()
  1347. imgLeft.AddFlag("not_pick")
  1348. imgLeft.SetParent(self)
  1349.  
  1350. imgCenter = ui.ExpandedImageBox()
  1351. imgCenter.AddFlag("not_pick")
  1352. imgCenter.SetParent(self)
  1353.  
  1354. imgRight = ui.ImageBox()
  1355. imgRight.AddFlag("not_pick")
  1356. imgRight.SetParent(self)
  1357.  
  1358. imgLeft.LoadImage("d:/ymir work/ui/pattern/chatlogwindow_titlebar_left.tga")
  1359. imgCenter.LoadImage("d:/ymir work/ui/pattern/chatlogwindow_titlebar_middle.tga")
  1360. imgRight.LoadImage("d:/ymir work/ui/pattern/chatlogwindow_titlebar_right.tga")
  1361.  
  1362. imgLeft.Show()
  1363. imgCenter.Show()
  1364. imgRight.Show()
  1365.  
  1366. btnClose = ui.Button()
  1367. btnClose.SetParent(self)
  1368. btnClose.SetUpVisual("d:/ymir work/ui/public/close_button_01.sub")
  1369. btnClose.SetOverVisual("d:/ymir work/ui/public/close_button_02.sub")
  1370. btnClose.SetDownVisual("d:/ymir work/ui/public/close_button_03.sub")
  1371. btnClose.SetToolTipText(localeInfo.UI_CLOSE, 0, -23)
  1372. btnClose.SetEvent(ui.__mem_func__(self.Close))
  1373. btnClose.Show()
  1374.  
  1375. btnSizing = self.ResizeButton()
  1376. btnSizing.SetParent(self)
  1377. btnSizing.SetMoveEvent(ui.__mem_func__(self.OnResize))
  1378. btnSizing.SetSize(16, 16)
  1379. btnSizing.Show()
  1380.  
  1381. titleName = ui.TextLine()
  1382. titleName.SetParent(self)
  1383. titleName.SetPosition(20, 6)
  1384.  
  1385. titleName.SetText(localeInfo.CHAT_LOG_TITLE)
  1386. titleName.Show()
  1387.  
  1388. self.imgLeft = imgLeft
  1389. self.imgCenter = imgCenter
  1390. self.imgRight = imgRight
  1391. self.btnClose = btnClose
  1392. self.btnSizing = btnSizing
  1393. self.titleName = titleName
  1394.  
  1395. def __CreateButton(self):
  1396.  
  1397. bx = 13
  1398.  
  1399. btnAll = ui.RadioButton()
  1400. btnAll.SetParent(self)
  1401. btnAll.SetPosition(bx, 24)
  1402. btnAll.SetUpVisual("d:/ymir work/ui/public/xsmall_button_01.sub")
  1403. btnAll.SetOverVisual("d:/ymir work/ui/public/xsmall_button_02.sub")
  1404. btnAll.SetDownVisual("d:/ymir work/ui/public/xsmall_button_03.sub")
  1405. btnAll.SetText(localeInfo.CHAT_ALL)
  1406. btnAll.SetEvent(ui.__mem_func__(self.ToggleAllChatMode))
  1407. btnAll.Down()
  1408. btnAll.Show()
  1409. self.btnAll = btnAll
  1410.  
  1411. x = bx + 48
  1412. i = 0
  1413. self.modeButtonList = []
  1414. for name in self.CHAT_MODE_NAME:
  1415. btn = ui.ToggleButton()
  1416. btn.SetParent(self)
  1417. btn.SetPosition(x, 24)
  1418. btn.SetUpVisual("d:/ymir work/ui/public/xsmall_button_01.sub")
  1419. btn.SetOverVisual("d:/ymir work/ui/public/xsmall_button_02.sub")
  1420. btn.SetDownVisual("d:/ymir work/ui/public/xsmall_button_03.sub")
  1421. btn.SetText(name)
  1422. btn.Show()
  1423.  
  1424. mode = self.CHAT_MODE_INDEX[i]
  1425. btn.SetToggleUpEvent(lambda arg=mode: self.ToggleChatMode(arg))
  1426. btn.SetToggleDownEvent(lambda arg=mode: self.ToggleChatMode(arg))
  1427. self.modeButtonList.append(btn)
  1428.  
  1429. x += 48
  1430. i += 1
  1431.  
  1432. def __CreateScrollBar(self):
  1433. scrollBar = ui.SmallThinScrollBar()
  1434. scrollBar.SetParent(self)
  1435. scrollBar.Show()
  1436. scrollBar.SetScrollEvent(ui.__mem_func__(self.OnScroll))
  1437. self.scrollBar = scrollBar
  1438. self.scrollBarPos = 1.0
  1439.  
  1440. def __del__(self):
  1441. ui.Window.__del__(self)
  1442.  
  1443. def Destroy(self):
  1444. self.imgLeft = None
  1445. self.imgCenter = None
  1446. self.imgRight = None
  1447. self.btnClose = None
  1448. self.btnSizing = None
  1449. self.modeButtonList = []
  1450. self.scrollBar = None
  1451. self.chatInputSet = None
  1452.  
  1453. def ToggleAllChatMode(self):
  1454. if self.allChatMode:
  1455. return
  1456.  
  1457. self.allChatMode = TRUE
  1458.  
  1459. for i in self.CHAT_MODE_INDEX:
  1460. chat.EnableChatMode(self.chatID, i)
  1461. if app.ENABLE_CHATTING_WINDOW_RENEWAL:
  1462. chat.EnableChatMode(self.chatID, chat.CHAT_TYPE_EXP_INFO)
  1463. chat.EnableChatMode(self.chatID, chat.CHAT_TYPE_ITEM_INFO)
  1464. chat.EnableChatMode(self.chatID, chat.CHAT_TYPE_MONEY_INFO)
  1465. if app.CHAT_DMG:
  1466. chat.EnableChatMode(self.chatID, chat.CHAT_TYPE_DMG)
  1467. for btn in self.modeButtonList:
  1468. btn.SetUp()
  1469.  
  1470. def ToggleChatMode(self, mode):
  1471. if self.allChatMode:
  1472. self.allChatMode = FALSE
  1473. for i in self.CHAT_MODE_INDEX:
  1474. chat.DisableChatMode(self.chatID, i)
  1475. if app.ENABLE_CHATTING_WINDOW_RENEWAL:
  1476. if mode == chat.CHAT_TYPE_INFO:
  1477. chat.EnableChatMode(self.chatID, chat.CHAT_TYPE_EXP_INFO)
  1478. chat.EnableChatMode(self.chatID, chat.CHAT_TYPE_ITEM_INFO)
  1479. chat.EnableChatMode(self.chatID, chat.CHAT_TYPE_MONEY_INFO)
  1480. chat.EnableChatMode(self.chatID, mode)
  1481. self.btnAll.SetUp()
  1482.  
  1483. else:
  1484. chat.ToggleChatMode(self.chatID, mode)
  1485.  
  1486. def SetSize(self, width, height):
  1487. self.imgCenter.SetRenderingRect(0.0, 0.0, float((width - self.BLOCK_WIDTH*2) - self.BLOCK_WIDTH) / self.BLOCK_WIDTH, 0.0)
  1488. self.imgCenter.SetPosition(self.BLOCK_WIDTH, 0)
  1489. self.imgRight.SetPosition(width - self.BLOCK_WIDTH, 0)
  1490.  
  1491. self.btnClose.SetPosition(width - self.btnClose.GetWidth() - 5, 5)
  1492. self.scrollBar.SetPosition(width - 15, 45)
  1493.  
  1494. self.scrollBar.SetScrollBarSize(height - 45 - 12)
  1495. self.scrollBar.SetPos(self.scrollBarPos)
  1496. ui.Window.SetSize(self, width, height)
  1497.  
  1498. def Open(self):
  1499. self.OnResize()
  1500. self.chatInputSet.SetChatFocus()
  1501. self.Show()
  1502.  
  1503. def Close(self):
  1504. if self.chatInputSet:
  1505. self.chatInputSet.KillChatFocus()
  1506. self.Hide()
  1507.  
  1508. def OnResize(self):
  1509. x, y = self.btnSizing.GetLocalPosition()
  1510. width = self.btnSizing.GetWidth()
  1511. height = self.btnSizing.GetHeight()
  1512.  
  1513. if x < self.CHAT_LOG_WINDOW_MINIMUM_WIDTH - width:
  1514. self.btnSizing.SetPosition(self.CHAT_LOG_WINDOW_MINIMUM_WIDTH - width, y)
  1515. return
  1516. if y < self.CHAT_LOG_WINDOW_MINIMUM_HEIGHT - height:
  1517. self.btnSizing.SetPosition(x, self.CHAT_LOG_WINDOW_MINIMUM_HEIGHT - height)
  1518. return
  1519.  
  1520. self.scrollBar.LockScroll()
  1521. self.SetSize(x + width, y + height)
  1522. self.scrollBar.UnlockScroll()
  1523.  
  1524. self.chatInputSet.SetPosition(0, 25)
  1525.  
  1526. self.chatInputSet.SetSize(self.GetWidth() - 20, 20)
  1527. self.chatInputSet.RefreshPosition()
  1528. self.chatInputSet.SetChatMax(self.GetWidth() / 8)
  1529.  
  1530. def OnScroll(self):
  1531. self.scrollBarPos = self.scrollBar.GetPos()
  1532.  
  1533. lineCount = chat.GetLineCount(self.chatID)
  1534. visibleLineCount = chat.GetVisibleLineCount(self.chatID)
  1535. endLine = visibleLineCount + int(float(lineCount - visibleLineCount) * self.scrollBarPos)
  1536.  
  1537. chat.SetEndPos(self.chatID, self.scrollBarPos)
  1538.  
  1539. def OnRender(self):
  1540. (x, y, width, height) = self.GetRect()
  1541.  
  1542. grp.SetColor(0x77000000)
  1543. grp.RenderBar(x+width-15, y+45, 13, height-45)
  1544.  
  1545. grp.SetColor(0x77000000)
  1546. grp.RenderBar(x, y, width, height)
  1547. grp.SetColor(0xff525552)
  1548. grp.RenderBox(x, y, width-2, height)
  1549. grp.SetColor(0xff000000)
  1550. grp.RenderBox(x+1, y+1, width-2, height)
  1551.  
  1552. grp.SetColor(0xff989898)
  1553. grp.RenderLine(x+width-13, y+height-1, 11, -11)
  1554. grp.RenderLine(x+width-9, y+height-1, 7, -7)
  1555. grp.RenderLine(x+width-5, y+height-1, 3, -3)
  1556.  
  1557. #####
  1558.  
  1559. chat.ArrangeShowingChat(self.chatID)
  1560.  
  1561. chat.SetPosition(self.chatID, x + 10, y + height - 25)
  1562.  
  1563. chat.SetHeight(self.chatID, height - 45 - 25)
  1564. chat.Update(self.chatID)
  1565. chat.Render(self.chatID)
  1566.  
  1567. def OnPressEscapeKey(self):
  1568. self.Close()
  1569. return TRUE
  1570.  
  1571. def BindInterface(self, interface):
  1572. self.interface = interface
  1573.  
  1574. def OnMouseLeftButtonDown(self):
  1575. hyperlink = ui.GetHyperlink()
  1576. if hyperlink:
  1577. if app.IsPressed(app.DIK_LALT):
  1578. link = chat.GetLinkFromHyperlink(hyperlink)
  1579. ime.PasteString(link)
  1580. else:
  1581. self.interface.MakeHyperlinkTooltip(hyperlink)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement