Florin99999

Untitled

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