Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # ChannelChanger Tool 1.1a
- #
- # The boredom is a big lord.
- # Idea was came from [email protected] && [email protected]
- #
- # Version info:
- # v1.0 : GUI
- # Connection with variables
- # v1.1 : Connection with serverInfo
- # Serverstatus checker and show the states
- # Disabled connection if the server is FULL or Offline
- # Added special map interrupter(dt,dc etc..)
- # v1.1a : Added refresh button
- #
- # Used sources:
- # - DaRealFreak's ChannelChangerBot
- # - YMIR's client >,< introLogin.py
- # - My brain C:
- #
- # Bugs:
- # Sometimes the "SetLoginInfo" function is late and try to connect the client to the server
- # with wrong ID/PW. In this case the "OnLoginFailure" function will run with "WRONGPWD" and
- # "NOID" arguments(1x-1x) from the introLogin.py. This fault peculiar to the slower PC-s or lagg.
- # And not recommended the fast channel switching.
- #
- # Do not forget to add this in your introLogin.LoginWindow.Connect
- # net.ACCOUNT_ID = id
- # net.ACCOUNT_PW = pwd
- #
- # Haters gonna hate. Please keep your comment in yourself & Press Alt + F13!
- # Enjoy, and sorry for my bad English, P3NG3R
- import ui
- import net
- import app
- import chat
- import math
- import wndMgr
- import serverInfo
- import background
- import ServerStateChecker
- class ChannelChanger(ui.ScriptWindow):
- def __init__(self):
- ui.ScriptWindow.__init__(self)
- self.__Init_ChannelChanger()
- self.__Load_Gui()
- self.__Fill_Up_ChannelList()
- def __del__(self):
- ui.ScriptWindow.__del__(self)
- def Destroy(self):
- self.Hide()
- return TRUE
- def __Init_ChannelChanger(self):
- ServerStateChecker.Create(self)
- self.SetSize(150, 175)
- self.SetPosition(
- (wndMgr.GetScreenWidth() / 2) - int(math.floor(self.GetWidth() / 2.)),
- (wndMgr.GetScreenHeight() / 2) - int(math.floor(self.GetHeight() / 2.))
- )
- #self.AddFlag("movable")
- self.AddFlag("float")
- self.Show()
- def __Load_Gui(self):
- self.Board = ui.Board()
- self.Board.SetParent(self)
- self.Board.SetSize(self.GetWidth(), self.GetHeight())
- self.Board.SetPosition(0, 0)
- #self.Board.AddFlag("movable")
- self.Board.AddFlag("float")
- self.Board.Show()
- self.TitleBar = ui.TitleBar()
- self.TitleBar.SetParent(self.Board)
- self.TitleBar.SetPosition(7, 7)
- self.TitleBar.MakeTitleBar(self.GetWidth() - 2 * 7, 'bloodyblue')
- self.TitleBar.SetCloseEvent(self.Close)
- self.TitleBar.Show()
- self.RefreshButton = ui.Button()
- self.RefreshButton.SetParent(self.TitleBar)
- self.RefreshButton.SetPosition(3, 3)
- self.RefreshButton.SetUpVisual("d:/ymir work/ui/game/guild/refresh_button_01.sub")
- self.RefreshButton.SetOverVisual("d:/ymir work/ui/game/guild/refresh_button_02.sub")
- self.RefreshButton.SetDownVisual("d:/ymir work/ui/game/guild/refresh_button_03.sub")
- self.RefreshButton.SetToolTipText("Frissítés", 0, - 23)
- # "Refresh"
- self.RefreshButton.SetEvent(lambda : self.__Fill_Up_ChannelList())
- self.RefreshButton.Show()
- self.TitleText = ui.TextLine()
- self.TitleText.SetParent(self.TitleBar)
- self.TitleText.SetPosition(0, 4)
- self.TitleText.SetText("CH - Választó")
- # "CH - Switcher"
- self.TitleText.SetWindowHorizontalAlignCenter()
- self.TitleText.SetHorizontalAlignCenter()
- self.TitleText.Show()
- self.ServerName = ui.TextLine()
- self.ServerName.SetParent(self.TitleBar)
- self.ServerName.SetPosition(0, self.TitleBar.GetHeight())
- self.ServerName.SetText(str(net.GetServerInfo()).split(",")[0])
- self.ServerName.SetWindowHorizontalAlignCenter()
- self.ServerName.SetHorizontalAlignCenter()
- self.ServerName.Show()
- self.ChannelListBase = ui.SlotBar()
- self.ChannelListBase.SetParent(self.Board)
- self.ChannelListBase.SetSize(self.Board.GetWidth() - 2 * 16, 5 * 18 - 4)
- self.ChannelListBase.SetPosition(16 , 7 + self.TitleBar.GetHeight() + 6 + 10)
- self.ChannelListBase.Show()
- self.ChannelList = ui.ListBox()
- self.ChannelList.SetParent(self.ChannelListBase)
- self.ChannelList.SetSize(self.ChannelListBase.GetWidth()- 20, self.ChannelListBase.GetHeight())
- self.ChannelList.SetPosition(0, 0)
- self.ChannelList.SetEvent(ui.__mem_func__(self.__OnSelectChannel))
- self.ChannelList.Show()
- self.ChangeButton = ui.Button()
- self.ChangeButton.SetParent(self.Board)
- self.ChangeButton.SetPosition(self.Board.GetWidth() / 2 - 44, self.Board.GetHeight() - 35)
- self.ChangeButton.SetUpVisual('d:/ymir work/ui/public/Large_button_01.sub')
- self.ChangeButton.SetOverVisual('d:/ymir work/ui/public/Large_button_02.sub')
- self.ChangeButton.SetDownVisual('d:/ymir work/ui/public/Large_button_03.sub')
- self.ChangeButton.SetEvent(lambda : self.__OnClickConnectButton())
- self.ChangeButton.SetText("Mehet")
- # "Go"
- self.ChangeButton.Show()
- self.DisableChangeButton()
- self.ChannelListScrollBar = ui.ScrollBar()
- self.ChannelListScrollBar.SetParent(self.ChannelListBase)
- self.ChannelListScrollBar.SetPosition(18, 3)
- self.ChannelListScrollBar.SetScrollBarSize(83)
- self.ChannelListScrollBar.SetWindowHorizontalAlignRight()
- self.ChannelListScrollBar.SetScrollEvent(ui.__mem_func__(self.__OnScrollChannelList))
- self.ChannelListScrollBar.Show()
- def DisableChangeButton(self):
- self.ChangeButton.Disable()
- self.ChangeButton.Down()
- self.ChangeButton.ButtonText.SetFontColor(0.4, 0.4, 0.4)
- def EnableChangeButton(self):
- self.ChangeButton.Enable()
- self.ChangeButton.SetUp()
- self.ChangeButton.ButtonText.SetFontColor(1, 1, 1)
- def __GetRegionID(self):
- return 0
- def __GetServerID(self):
- regionID = self.__GetRegionID()
- for i in serverInfo.REGION_DICT[regionID].keys():
- if serverInfo.REGION_DICT[regionID][i]["name"] == net.GetServerInfo().split(",")[0]:
- serverID = int(i)
- break
- return serverID
- def __Fill_Up_ChannelList(self):
- self.__RequestServerStateList()
- self.__RefreshServerStateList()
- #self.ChannelList.SelectItem(0)
- def __RequestServerStateList(self):
- regionID = self.__GetRegionID()
- serverID = self.__GetServerID()
- try:
- channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
- except:
- return
- for id, channelDataDict in channelDict.items():
- key=channelDataDict["key"]
- ip=channelDataDict["ip"]
- udp_port=channelDataDict["udp_port"]
- ServerStateChecker.Request(key, ip, udp_port)
- def __RefreshServerStateList(self):
- regionID = self.__GetRegionID()
- serverID = self.__GetServerID()
- bakChannelID = self.ChannelList.GetSelectedItem()
- self.ChannelList.ClearItem()
- try:
- channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
- except:
- return
- for channelID, channelDataDict in channelDict.items():
- channelName = channelDataDict["name"]
- channelState = channelDataDict["state"]
- self.ChannelList.InsertItem(channelID, "%s %s" % (channelName, channelState))
- self.ChannelList.SelectItem(bakChannelID-1)
- def NotifyChannelState(self, addrKey, state):
- try:
- stateName = serverInfo.STATE_DICT[state]
- except:
- stateName = serverInfo.STATE_NONE
- regionID = int(addrKey / 1000)
- serverID = int(addrKey / 10) % 100
- channelID = addrKey % 10
- try:
- serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["state"] = stateName
- self.__RefreshChannelStateList()
- except:
- pass
- def __IsSpecialMap(self):
- dis_maps = [
- "season1/metin2_map_oxevent",
- "season2/metin2_map_guild_inside01",
- "season2/metin2_map_empirewar01",
- "season2/metin2_map_empirewar02",
- "season2/metin2_map_empirewar03",
- "metin2_map_dragon_timeattack_01",
- "metin2_map_dragon_timeattack_02",
- "metin2_map_dragon_timeattack_03",
- "metin2_map_skipia_dungeon_boss",
- "metin2_map_skipia_dungeon_boss2",
- "metin2_map_devilsCatacomb",
- "metin2_map_deviltower1",
- "metin2_map_t1",
- "metin2_map_t2",
- "metin2_map_t3",
- "metin2_map_t4",
- "metin2_map_t5",
- "metin2_map_wedding_01",
- "metin2_map_duel"
- ]
- if str(background.GetCurrentMapName()) in dis_maps:
- return TRUE
- return FALSE
- def __OnSelectChannel(self):
- if self.ChangeButton.IsDown():
- self.EnableChangeButton()
- ##< Works but not need >##
- #regionID = self.__GetRegionID()
- #serverID = self.__GetServerID()
- #channelID = self.ChannelList.GetSelectedItem()
- #if self.__IsSpecialMap():
- # self.DisableChangeButton()
- # return
- #elif serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["state"] == serverInfo.STATE_NONE:
- # self.DisableChangeButton()
- # return
- def __OnScrollChannelList(self):
- viewItemCount = self.ChannelList.GetViewItemCount()
- itemCount = self.ChannelList.GetItemCount()
- pos = self.ChannelListScrollBar.GetPos() * (itemCount - viewItemCount)
- self.ChannelList.SetBasePos(int(pos))
- def __OnClickConnectButton(self):
- regionID = self.__GetRegionID()
- serverID = self.__GetServerID()
- channelID = self.ChannelList.GetSelectedItem()
- if not channelID:
- chat.AppendChat(1, "Nem választotál ki csatornát!")
- # "You did not select a channel!"
- return
- try:
- serverName = serverInfo.REGION_DICT[regionID][serverID]["name"]
- channelName = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["name"]
- addrKey = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["key"]
- ip = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["ip"]
- tcp_port = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["tcp_port"]
- state = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["state"]
- account_ip = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["ip"]
- account_port = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["port"]
- markKey = regionID * 1000 + serverID * 10
- markAddrValue=serverInfo.MARKADDR_DICT[markKey]
- net.SetMarkServer(markAddrValue["ip"], markAddrValue["tcp_port"])
- app.SetGuildMarkPath(markAddrValue["mark"])
- app.SetGuildSymbolPath(markAddrValue["symbol_path"])
- except:
- chat.AppendChat(1, "Hiba történt a csatlakozás közben!")
- # "An error occurred while connect!"
- return
- if state == serverInfo.STATE_NONE:
- chat.AppendChat(1, "Sajnálom a kiválasztott csatorna nem elérhető!")
- # "Sorry the selected channel is offline!"
- return
- elif state == serverInfo.STATE_DICT[3]:
- chat.AppendChat(1, "Sajnálom a kiválasztott csatorna telítve van!")
- # "Sorry the selected channel is full!"
- return
- elif net.GetServerInfo().strip().split(", ")[1] == self.ChannelList.textDict[self.ChannelList.selectedLine].strip().split(" ")[0]:
- chat.AppendChat(1, "Te jelenleg is a kiválasztott csatornán tartózkodsz!")
- # "You are already on the selected channel!"
- return
- elif self.__IsSpecialMap():
- chat.AppendChat(1, "Sajnálom ezen a területen nem válthatsz csatornát kilépés nélkül!")
- # "Sorry in this area you cannot change channel without logout!"
- return
- self.Close()
- net.SetServerInfo("%s, %s" % (serverName, channelName))
- self.DirectConnect(ip, tcp_port, account_ip, account_port)
- def DirectConnect(self, ChannelIP, ChannelPort, AuthServerIP, AuthServerPort):
- #net.SetLoginInfo("xPengii", "kiU2_w1A_q2olDle9")
- net.SetLoginInfo(decode_string(net.ACCOUNT_ID), decode_string(net.ACCOUNT_PW))
- net.ConnectToAccountServer(ChannelIP, ChannelPort, AuthServerIP, AuthServerPort)
- net.DirectEnter(0)
- net.SendSelectCharacterPacket(0)
- net.SendEnterGamePacket()
- def Show(self):
- ui.ScriptWindow.Show(self)
- def Close(self):
- ServerStateChecker.Destroy(self)
- self.Hide()
- return TRUE
- def OnPressEscapeKey(self):
- self.Close()
- return TRUE
- def OnUpdate(self):
- ServerStateChecker.Update()
- iom = ChannelChanger()
- iom.Show()
- chat.AppendChat(1, "#DEV#{Succesfully loaded}")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement