Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Channel Changer


Rekomendowane odpowiedzi

Opublikowano

Mam pytanie jak dodać channel changer do metin2 

mam kod

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]["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}")

 

3329066238.png

  • 2 miesiące temu...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...