Guest User

uiChannel.py

a guest
Apr 12th, 2017
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.67 KB | None | 0 0
  1. import ui
  2. import net
  3. import app
  4. import chat
  5. import math
  6. import wndMgr
  7. import localeInfo
  8. import serverInfo
  9. import background
  10. import ServerStateChecker
  11.  
  12. class ChannelChanger(ui.ScriptWindow):
  13. def __init__(self):
  14. ui.ScriptWindow.__init__(self)
  15. self.__MakeWindow()
  16. self.__MakeBoard()
  17. self.__Fill_Up_ChannelList()
  18.  
  19. def __del__(self):
  20. ui.ScriptWindow.__del__(self)
  21.  
  22. def Destroy(self):
  23. self.Hide()
  24. return TRUE
  25.  
  26. def __MakeWindow(self):
  27. ServerStateChecker.Create(self)
  28. self.SetSize(150, 195)
  29. self.SetPosition((wndMgr.GetScreenWidth() / 2) - int(math.floor(self.GetWidth() / 2.)), (wndMgr.GetScreenHeight() / 2) - int(math.floor(self.GetHeight() / 2.)))
  30. self.AddFlag("float")
  31. self.Show()
  32.  
  33. def __MakeBoard(self):
  34. self.Board = ui.Board()
  35. self.Board.SetParent(self)
  36. self.Board.SetSize(self.GetWidth(), self.GetHeight())
  37. self.Board.SetPosition(0, 0)
  38. self.Board.AddFlag("float")
  39. self.Board.Show()
  40.  
  41. self.TitleBar = ui.TitleBar()
  42. self.TitleBar.SetParent(self.Board)
  43. self.TitleBar.SetPosition(7, 7)
  44. self.TitleBar.MakeTitleBar(self.GetWidth() - 2 * 7, "red")
  45. self.TitleBar.SetCloseEvent(self.Close)
  46. self.TitleBar.Show()
  47.  
  48. self.TitleText = ui.TextLine()
  49. self.TitleText.SetParent(self.TitleBar)
  50. self.TitleText.SetPosition(0, 4)
  51. self.TitleText.SetText(localeInfo.UI_CHANNEL_CHOOSE)
  52. self.TitleText.SetWindowHorizontalAlignCenter()
  53. self.TitleText.SetHorizontalAlignCenter()
  54. self.TitleText.Show()
  55.  
  56. self.RefreshButton = ui.Button()
  57. self.RefreshButton.SetParent(self.Board)
  58. self.RefreshButton.SetPosition(self.Board.GetWidth() / 2 - 8, self.TitleBar.GetHeight() + 9)
  59. self.RefreshButton.SetUpVisual("d:/ymir work/ui/game/guild/refresh_button_01.sub")
  60. self.RefreshButton.SetOverVisual("d:/ymir work/ui/game/guild/refresh_button_02.sub")
  61. self.RefreshButton.SetDownVisual("d:/ymir work/ui/game/guild/refresh_button_03.sub")
  62. self.RefreshButton.SetToolTipText(localeInfo.UI_CHANNEL_REFRESH, 0, - 23)
  63. self.RefreshButton.SetEvent(lambda : self.__Fill_Up_ChannelList())
  64. self.RefreshButton.Show()
  65.  
  66. self.ChannelListBase = ui.SlotBar()
  67. self.ChannelListBase.SetParent(self.Board)
  68. self.ChannelListBase.SetSize(self.Board.GetWidth() - 2 * 16, 5 * 18 - 4)
  69. self.ChannelListBase.SetPosition(16 , 7 + self.TitleBar.GetHeight() + 6 + 10 + 6)
  70. self.ChannelListBase.Show()
  71. self.ChannelList = ui.ListBox()
  72. self.ChannelList.SetParent(self.ChannelListBase)
  73. self.ChannelList.SetSize(self.ChannelListBase.GetWidth()- 20, self.ChannelListBase.GetHeight())
  74. self.ChannelList.SetPosition(0, 0)
  75. self.ChannelList.SetEvent(ui.__mem_func__(self.__OnSelectChannel))
  76. self.ChannelList.Show()
  77.  
  78. self.ChangeButton = ui.Button()
  79. self.ChangeButton.SetParent(self.Board)
  80. self.ChangeButton.SetPosition(self.Board.GetWidth() / 2 - 44, self.Board.GetHeight() - 52)
  81. self.ChangeButton.SetUpVisual("d:/ymir work/ui/public/Large_button_01.sub")
  82. self.ChangeButton.SetOverVisual("d:/ymir work/ui/public/Large_button_02.sub")
  83. self.ChangeButton.SetDownVisual("d:/ymir work/ui/public/Large_button_03.sub")
  84. self.ChangeButton.SetEvent(lambda : self.__OnClickConnectButton())
  85. self.ChangeButton.SetText(localeInfo.UI_CHANNEL_GO)
  86. self.ChangeButton.Show()
  87.  
  88. self.ClsButton = ui.Button()
  89. self.ClsButton.SetParent(self.Board)
  90. self.ClsButton.SetPosition(self.Board.GetWidth() / 2 - 44, self.Board.GetHeight() - 29)
  91. self.ClsButton.SetUpVisual("d:/ymir work/ui/public/Large_button_01.sub")
  92. self.ClsButton.SetOverVisual("d:/ymir work/ui/public/Large_button_02.sub")
  93. self.ClsButton.SetDownVisual("d:/ymir work/ui/public/Large_button_03.sub")
  94. self.ClsButton.SetEvent(lambda : self.Close())
  95. self.ClsButton.SetText(localeInfo.UI_CHANNEL_CLOSE)
  96. self.ClsButton.ButtonText.SetFontColor(1, 1, 1)
  97. self.ClsButton.Show()
  98.  
  99. self.DisableChangeButton()
  100.  
  101. self.ChannelListScrollBar = ui.ScrollBar()
  102. self.ChannelListScrollBar.SetParent(self.ChannelListBase)
  103. self.ChannelListScrollBar.SetPosition(18, 3)
  104. self.ChannelListScrollBar.SetScrollBarSize(83)
  105. self.ChannelListScrollBar.SetWindowHorizontalAlignRight()
  106. self.ChannelListScrollBar.SetScrollEvent(ui.__mem_func__(self.__OnScrollChannelList))
  107. self.ChannelListScrollBar.Show()
  108.  
  109. def DisableChangeButton(self):
  110. self.ChangeButton.Disable()
  111. self.ChangeButton.Down()
  112. self.ChangeButton.ButtonText.SetFontColor(0.4, 0.4, 0.4)
  113.  
  114. def EnableChangeButton(self):
  115. self.ChangeButton.Enable()
  116. self.ChangeButton.SetUp()
  117. self.ChangeButton.ButtonText.SetFontColor(1, 1, 1)
  118.  
  119. def __GetRegionID(self):
  120. return 0
  121.  
  122. def __GetServerID(self):
  123. regionID = self.__GetRegionID()
  124. for i in serverInfo.REGION_DICT[regionID].keys():
  125. if serverInfo.REGION_DICT[regionID][i]["name"] == net.GetServerInfo().split(",")[0]:
  126. serverID = int(i)
  127. break
  128.  
  129. return serverID
  130.  
  131. def __Fill_Up_ChannelList(self):
  132. self.__RequestServerStateList()
  133. self.__RefreshServerStateList()
  134.  
  135. def __RequestServerStateList(self):
  136. regionID = self.__GetRegionID()
  137. serverID = self.__GetServerID()
  138. try:
  139. channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
  140. except:
  141. return
  142.  
  143. ServerStateChecker.Initialize(self)
  144. for id, channelDataDict in channelDict.items():
  145. key = channelDataDict["key"]
  146. ip = channelDataDict["ip"]
  147. udp_port = channelDataDict["udp_port"]
  148. ServerStateChecker.AddChannel(key, ip, udp_port)
  149. ServerStateChecker.Request()
  150.  
  151. def __RefreshServerStateList(self):
  152. regionID = self.__GetRegionID()
  153. serverID = self.__GetServerID()
  154. bakChannelID = self.ChannelList.GetSelectedItem()
  155. self.ChannelList.ClearItem()
  156. try:
  157. channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
  158. except:
  159. return
  160.  
  161. for channelID, channelDataDict in channelDict.items():
  162. channelName = channelDataDict["name"]
  163. channelState = channelDataDict["state"]
  164. self.ChannelList.InsertItem(channelID, "%s %s" % (channelName, channelState))
  165.  
  166. self.ChannelList.SelectItem(bakChannelID-1)
  167.  
  168. def NotifyChannelState(self, addrKey, state):
  169. try:
  170. stateName = serverInfo.STATE_DICT[state]
  171. except:
  172. stateName = serverInfo.STATE_NONE
  173.  
  174. regionID = int(addrKey / 1000)
  175. serverID = int(addrKey / 10) % 100
  176. channelID = addrKey % 10
  177. try:
  178. serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["state"] = stateName
  179. self.__RefreshChannelStateList()
  180. except:
  181. pass
  182.  
  183. def __OnSelectChannel(self):
  184. if self.ChangeButton.IsDown():
  185. self.EnableChangeButton()
  186.  
  187. def __OnScrollChannelList(self):
  188. viewItemCount = self.ChannelList.GetViewItemCount()
  189. itemCount = self.ChannelList.GetItemCount()
  190. pos = self.ChannelListScrollBar.GetPos() * (itemCount - viewItemCount)
  191. self.ChannelList.SetBasePos(int(pos))
  192.  
  193. def __OnClickConnectButton(self):
  194. ServerStateChecker.Update()
  195. channelID = self.ChannelList.GetSelectedItem()
  196. if not channelID:
  197. return
  198.  
  199. if net.GetServerInfo().strip().split(", ")[1] == self.ChannelList.textDict[self.ChannelList.selectedLine].strip().split(" ")[0]:
  200. chat.AppendChat(1, localeInfo.UI_CHANNEL_YET_ON_THIS_CH)
  201. return
  202.  
  203. self.Close()
  204. net.SendChatPacket("/channel "+ str(channelID))
  205.  
  206. def DirectConnect(self, ChannelIP, ChannelPort, AuthServerIP, AuthServerPort):
  207. net.SetLoginInfo(decode_string(net.ACCOUNT_ID), decode_string(net.ACCOUNT_PW))
  208. net.ConnectToAccountServer(ChannelIP, ChannelPort, AuthServerIP, AuthServerPort)
  209. net.DirectEnter(0)
  210. net.SendSelectCharacterPacket(0)
  211. net.SendEnterGamePacket()
  212.  
  213. def Show(self):
  214. ui.ScriptWindow.Show(self)
  215.  
  216. def Close(self):
  217. ServerStateChecker.Initialize(self)
  218. self.Hide()
  219.  
  220. def OnPressEscapeKey(self):
  221. self.Close()
  222. return TRUE
  223.  
  224. def OnUpdate(self):
  225. ServerStateChecker.Update()
Add Comment
Please, Sign In to add comment