Advertisement
Guest User

canal.py

a guest
Oct 31st, 2014
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.74 KB | None | 0 0
  1. import ui
  2. import net
  3. import app
  4. import chat
  5. import math
  6. import wndMgr
  7. import serverInfo
  8. import background
  9. import ServerStateChecker
  10.  
  11. class ChannelChanger(ui.ScriptWindow):
  12. def __init__(self):
  13. ui.ScriptWindow.__init__(self)
  14.  
  15. self.__Schimbare_Canal()
  16. self.__Incarcare_Resurse()
  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 __Schimbare_Canal(self):
  27. ServerStateChecker.Create(self)
  28. self.SetSize(150, 175)
  29. self.SetPosition(
  30. (wndMgr.GetScreenWidth() / 2) - int(math.floor(self.GetWidth() / 2.)),
  31. (wndMgr.GetScreenHeight() / 2) - int(math.floor(self.GetHeight() / 2.))
  32. )
  33. self.AddFlag("movable")
  34. self.AddFlag("float")
  35. self.Show()
  36.  
  37. def __Incarcare_Resurse(self):
  38. self.Board = ui.Board()
  39. self.Board.SetParent(self)
  40. self.Board.SetSize(self.GetWidth(), self.GetHeight())
  41. self.Board.SetPosition(0, 0)
  42. self.Board.AddFlag("movable")
  43. self.Board.AddFlag("float")
  44. self.Board.Show()
  45.  
  46. self.TitleBar = ui.TitleBar()
  47. self.TitleBar.SetParent(self.Board)
  48. self.TitleBar.SetPosition(7, 7)
  49. self.TitleBar.MakeTitleBar(self.GetWidth() - 2 * 7, 'bloodyblue')
  50. self.TitleBar.SetCloseEvent(ui.__mem_func__(self.Close))
  51. self.TitleBar.Close()
  52.  
  53. self.RefreshButton = ui.Button()
  54. self.RefreshButton.SetParent(self.TitleBar)
  55. self.RefreshButton.SetPosition(3, 3)
  56. self.RefreshButton.SetUpVisual("d:/ymir work/ui/game/guild/refresh_button_01.sub")
  57. self.RefreshButton.SetOverVisual("d:/ymir work/ui/game/guild/refresh_button_02.sub")
  58. self.RefreshButton.SetDownVisual("d:/ymir work/ui/game/guild/refresh_button_03.sub")
  59. self.RefreshButton.SetToolTipText("Refresh", 0, - 23)
  60. self.RefreshButton.SetEvent(lambda : self.__Fill_Up_ChannelList())
  61. self.RefreshButton.Show()
  62.  
  63. self.TitleText = ui.TextLine()
  64. self.TitleText.SetParent(self.TitleBar)
  65. self.TitleText.SetPosition(0, 4)
  66. self.TitleText.SetText("CH - Selectie")
  67. self.TitleText.SetWindowHorizontalAlignCenter()
  68. self.TitleText.SetHorizontalAlignCenter()
  69. self.TitleText.Show()
  70.  
  71. self.ServerName = ui.TextLine()
  72. self.ServerName.SetParent(self.TitleBar)
  73. self.ServerName.SetPosition(0, self.TitleBar.GetHeight())
  74. self.ServerName.SetText(str(net.GetServerInfo()).split(",")[0])
  75. self.ServerName.SetWindowHorizontalAlignCenter()
  76. self.ServerName.SetHorizontalAlignCenter()
  77. self.ServerName.Show()
  78.  
  79. self.ChannelListBase = ui.SlotBar()
  80. self.ChannelListBase.SetParent(self.Board)
  81. self.ChannelListBase.SetSize(self.Board.GetWidth() - 2 * 16, 5 * 18 - 4)
  82. self.ChannelListBase.SetPosition(16 , 7 + self.TitleBar.GetHeight() + 6 + 10)
  83. self.ChannelListBase.Show()
  84.  
  85. self.ChannelList = ui.ListBox()
  86. self.ChannelList.SetParent(self.ChannelListBase)
  87. self.ChannelList.SetSize(self.ChannelListBase.GetWidth()- 20, self.ChannelListBase.GetHeight())
  88. self.ChannelList.SetPosition(0, 0)
  89. self.ChannelList.SetEvent(ui.__mem_func__(self.__OnSelectChannel))
  90. self.ChannelList.Show()
  91.  
  92. self.ChangeButton = ui.Button()
  93. self.ChangeButton.SetParent(self.Board)
  94. self.ChangeButton.SetPosition(self.Board.GetWidth() / 2 - 44, self.Board.GetHeight() - 35)
  95. self.ChangeButton.SetUpVisual('d:/ymir work/ui/public/Large_button_01.sub')
  96. self.ChangeButton.SetOverVisual('d:/ymir work/ui/public/Large_button_02.sub')
  97. self.ChangeButton.SetDownVisual('d:/ymir work/ui/public/Large_button_03.sub')
  98. self.ChangeButton.SetEvent(lambda : self.__OnClickConnectButton())
  99. self.ChangeButton.SetText("Du-te")
  100. self.ChangeButton.Show()
  101. self.DisableChangeButton()
  102.  
  103. self.ChannelListScrollBar = ui.ScrollBar()
  104. self.ChannelListScrollBar.SetParent(self.ChannelListBase)
  105. self.ChannelListScrollBar.SetPosition(18, 3)
  106. self.ChannelListScrollBar.SetScrollBarSize(83)
  107. self.ChannelListScrollBar.SetWindowHorizontalAlignRight()
  108. self.ChannelListScrollBar.SetScrollEvent(ui.__mem_func__(self.__OnScrollChannelList))
  109. self.ChannelListScrollBar.Show()
  110.  
  111. def DisableChangeButton(self):
  112. self.ChangeButton.Disable()
  113. self.ChangeButton.Down()
  114. self.ChangeButton.ButtonText.SetFontColor(0.4, 0.4, 0.4)
  115.  
  116. def EnableChangeButton(self):
  117. self.ChangeButton.Enable()
  118. self.ChangeButton.SetUp()
  119. self.ChangeButton.ButtonText.SetFontColor(1, 1, 1)
  120.  
  121. def __GetRegionID(self):
  122. return 0
  123.  
  124. def __GetServerID(self):
  125. regionID = self.__GetRegionID()
  126. for i in serverInfo.REGION_DICT[regionID].keys():
  127. if serverInfo.REGION_DICT[regionID][i]["name"] == net.GetServerInfo().split(",")[0]:
  128. serverID = int(i)
  129. break
  130.  
  131. return serverID
  132.  
  133. def __Fill_Up_ChannelList(self):
  134. self.__RequestServerStateList()
  135. self.__RefreshServerStateList()
  136. #self.ChannelList.SelectItem(0)
  137.  
  138. def __RequestServerStateList(self):
  139. regionID = self.__GetRegionID()
  140. serverID = self.__GetServerID()
  141.  
  142. try:
  143. channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
  144. except:
  145. return
  146.  
  147. for id, channelDataDict in channelDict.items():
  148. key=channelDataDict["key"]
  149. ip=channelDataDict["ip"]
  150. udp_port=channelDataDict["udp_port"]
  151. ServerStateChecker.Request(key, ip, udp_port)
  152.  
  153. def __RefreshServerStateList(self):
  154. regionID = self.__GetRegionID()
  155. serverID = self.__GetServerID()
  156. bakChannelID = self.ChannelList.GetSelectedItem()
  157.  
  158. self.ChannelList.ClearItem()
  159.  
  160. try:
  161. channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
  162. except:
  163. return
  164.  
  165. for channelID, channelDataDict in channelDict.items():
  166. channelName = channelDataDict["name"]
  167. channelState = channelDataDict["state"]
  168. self.ChannelList.InsertItem(channelID, "%s %s" % (channelName, channelState))
  169.  
  170. self.ChannelList.SelectItem(bakChannelID-1)
  171.  
  172. def NotifyChannelState(self, addrKey, state):
  173. try:
  174. stateName = serverInfo.STATE_DICT[state]
  175. except:
  176. stateName = serverInfo.STATE_NONE
  177.  
  178. regionID = int(addrKey / 1000)
  179. serverID = int(addrKey / 10) % 100
  180. channelID = addrKey % 10
  181.  
  182. try:
  183. serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["state"] = stateName
  184. self.__RefreshChannelStateList()
  185. except:
  186. pass
  187.  
  188. def __IsSpecialMap(self):
  189. dis_maps = [
  190. "season1/metin2_map_oxevent",
  191. "season2/metin2_map_guild_inside01",
  192. "season2/metin2_map_empirewar01",
  193. "season2/metin2_map_empirewar02",
  194. "season2/metin2_map_empirewar03",
  195. "metin2_map_dragon_timeattack_01",
  196. "metin2_map_dragon_timeattack_02",
  197. "metin2_map_dragon_timeattack_03",
  198. "metin2_map_skipia_dungeon_boss",
  199. "metin2_map_skipia_dungeon_boss2",
  200. "metin2_map_devilsCatacomb",
  201. "metin2_map_deviltower1",
  202. "metin2_map_t1",
  203. "metin2_map_t2",
  204. "metin2_map_t3",
  205. "metin2_map_t4",
  206. "metin2_map_t5",
  207. "metin2_map_wedding_01",
  208. "metin2_map_duel"
  209. ]
  210. if str(background.GetCurrentMapName()) in dis_maps:
  211. return TRUE
  212. return FALSE
  213.  
  214. def __OnSelectChannel(self):
  215. if self.ChangeButton.IsDown():
  216. self.EnableChangeButton()
  217.  
  218. def __OnScrollChannelList(self):
  219. viewItemCount = self.ChannelList.GetViewItemCount()
  220. itemCount = self.ChannelList.GetItemCount()
  221. pos = self.ChannelListScrollBar.GetPos() * (itemCount - viewItemCount)
  222. self.ChannelList.SetBasePos(int(pos))
  223.  
  224. def __OnClickConnectButton(self):
  225. regionID = self.__GetRegionID()
  226. serverID = self.__GetServerID()
  227. channelID = self.ChannelList.GetSelectedItem()
  228. if not channelID:
  229. chat.AppendChat(1, "Succes!")
  230. return
  231.  
  232. try:
  233. serverName = serverInfo.REGION_DICT[regionID][serverID]["name"]
  234. channelName = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["name"]
  235. addrKey = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["key"]
  236. ip = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["ip"]
  237. tcp_port = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["tcp_port"]
  238. state = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["state"]
  239.  
  240. account_ip = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["ip"]
  241. account_port = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["port"]
  242.  
  243. markKey = regionID * 1000 + serverID * 10
  244. markAddrValue=serverInfo.MARKADDR_DICT[markKey]
  245. net.SetMarkServer(markAddrValue["ip"], markAddrValue["tcp_port"])
  246. app.SetGuildMarkPath(markAddrValue["mark"])
  247. app.SetGuildSymbolPath(markAddrValue["symbol_path"])
  248. except:
  249. chat.AppendChat(1, "A aparut o eroare în timpul conexiunii!")
  250. return
  251.  
  252. if state == serverInfo.STATE_NONE:
  253. chat.AppendChat(1, "Ne pare rau pentru canalul selectat nu este disponibil!")
  254. return
  255. elif state == serverInfo.STATE_DICT[3]:
  256. chat.AppendChat(1, "Ne pare rau pentru canalul selectat este plin!")
  257. return
  258. elif net.GetServerInfo().strip().split(", ")[1] == self.ChannelList.textDict[self.ChannelList.selectedLine].strip().split(" ")[0]:
  259. chat.AppendChat(1, "Sunteti deja pe canalul selectat!")
  260. return
  261. elif self.__IsSpecialMap():
  262. chat.AppendChat(1, "Ne pare rau, în acest domeniu nu se poate schimba canalul fara deconectare!")
  263. return
  264.  
  265. self.Close()
  266. net.SetServerInfo("%s, %s" % (serverName, channelName))
  267. self.DirectConnect(ip, tcp_port, account_ip, account_port)
  268.  
  269. def DirectConnect(self, ChannelIP, ChannelPort, AuthServerIP, AuthServerPort):
  270. net.SetLoginInfo(decode_string(net.ACCOUNT_ID), decode_string(net.ACCOUNT_PW))
  271. net.ConnectToAccountServer(ChannelIP, ChannelPort, AuthServerIP, AuthServerPort)
  272. net.DirectEnter(0)
  273. net.SendSelectCharacterPacket(0)
  274. net.SendEnterGamePacket()
  275.  
  276. def Show(self):
  277. ui.ScriptWindow.Show(self)
  278.  
  279. def Close(self):
  280. ServerStateChecker.Destroy(self)
  281. self.Hide()
  282. return TRUE
  283.  
  284. def OnPressEscapeKey(self):
  285. self.Close()
  286. return TRUE
  287.  
  288. def OnUpdate(self):
  289. ServerStateChecker.Update()
  290.  
  291. iom = ChannelChanger()
  292. iom.Show()
  293. chat.AppendChat(1, "#System#{Operatiunea a avut succes!}")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement