Metin2 Hungarian Forum

Metin2 => Segítség => Szerver készítés => Privát szerverek => Archívum => A témát indította: szabcsi2222 Dátum 2014-12-04, 19:40:44

Cím: Client - Quest kommunikáció (k)
Írta: szabcsi2222 Dátum 2014-12-04, 19:40:44
Sziasztok. Ismét szükségem lenne a segítségetekre. :D

Végre sikerült elérnem hogy létrehozzak gombokat a leltár ablakom mellett (képen látszik), viszont nem tudom hogyan is tölthetnék be vele questet.
Tegnap kaptam egy ilyen témát:
http://www.elitepvpers.com/forum/metin2-pserver-guides-strategies/2355018-release-client-quest-kommunikation.html

Ez mind szép és jó, nagyjából meg is értettem, de ott a készítő a forgó érmével dolgozik, nekem pedig (mint ahogy a képen is látszik) más gombok kellenének.
Ezek pedig nem a taskbar.py-ben vannak hanem az inventorywindow.py-ben.

Kérdésem az lenne hogy hogyan is tudnám oda beleírni ezt a dolgot?

Válaszokat előre is köszönöm.
Cím: Re:Client - Quest kommunikáció
Írta: AndroidGuy Dátum 2014-12-05, 15:14:55
nos nem tudom, milyen neveket adtál meg az inventorywindow.py-ban, ezért én olyanokat fogok írni, hogy button1, button2... stb.

root.eix|.epk-t kibontod:
game.py
rákeresel erre:
__ServerCommand_Build(self):
Alá beírogatod ezeket:
"button1_qID" : self.__button1_questindex,
"button2_qID" : self.__button2_questindex,
"button3_qID" : self.__button2_questindex,


majd a game.py aljára görgetsz és létrehozod ezeket a funkciókat:
def __button1_questindex(self, value1):
constInfo.Button1 = value1

def __button2_questindex(self, value2):
constInfo.Button2 = value2

def __button1_questindex(self, value3):
constInfo.Button3 = value3


Most megnyitod a constinfo.py-t és beírod ezeket:
Button1 = 0
Button2 = 0
Button3 = 0


Oké most megnyitod az uiinventory.py-t meg keresed:
wndItem = self.GetChild("ItemSlot")

Na most attól függően hányadik "child" osztályba(?) raktad lehet self.GetChild illetve self.GetChild2

Megj.:
Ezt most így szerintem nehezen érthető, de azt hogy hányadik child-be raktad bele az inventorywindow.py-ban tudod megnézni én a következőképp szoktam:
ugye a mallbutton az "child2" a Money_Slot "child" és hogyha ugyan abban a blokkba vannak tehát:
blokk_parent
    blokk_child
        blokk_child2
        blokk_child2
    blokk_child
blokk_parent

akkor child v. child2, de a syserr úgy is megmondja, mert olyankor, ha rossz child-be keresi jelzi, hogy ott bizony nincs olyan így próbálgatni kell :D

na most, hogy tudjuk(?) melyik child-be van be írjuk ez alá valahova:
wndItem = self.GetChild("ItemSlot")
ezt:
self.button1 = self.GetChild("Button1_name") //ezt majd át kell nevezni arra amit te használsz névre
self.button2 = self.GetChild("Button2_name")
self.button3 = self.GetChild("Button3_name")


lejjebb görgetsz és meg keresed ezt:
## Refresh
self.SetInventoryPage(0)
self.SetEquipmentPage(0)
self.RefreshItemSlot()
self.RefreshStatus()
self.RefreshBonus()


Alá beírod ezt:
## Inventory quest buttons
self.button1.SetEvent(self.OpenButton1Quest)
self.button2.SetEvent(self.OpenButton2Quest)
self.button3.SetEvent(self.OpenButton3Quest)


legörgetsz az aljára és definiáljuk 3 függvényt a végére:
def OpenButton1Quest(self):
QuestButton1 = constInfo.Button1
event.QuestButtonClick(QuestButton1)

def OpenButton2Quest(self):
QuestButton2 = constInfo.Button2
event.QuestButtonClick(QuestButton2)

def OpenButton3Quest(self):
QuestButton3 = constInfo.Button3
event.QuestButtonClick(QuestButton3)


Na most kész is a kliens rész elvileg (lehet valamit kihagytam rég nem foglalkoztam ezzel :( ):D
/Ha valami hiba van írd le megpróbálom javítani, de nem biztos, hogy sok kihagyás után mindenre emlékszek még :D/

na most a questek :D

quesd asd begin
state start begin
when login begin
cmdchat("button1_qID "..q.getcurrentquestindex())
end
when button or info
--ide jöhetnek azok a funkciók amiket szeretnél, hogy lefussanak a gombra való kattintás után


quesd asd2 begin
state start begin
when login begin
cmdchat("button2_qID "..q.getcurrentquestindex())
end
when button or info
--ide jöhetnek azok a funkciók amiket szeretnél, hogy lefussanak a gombra való kattintás után


quesd asd3 begin
state start begin
when login begin
cmdchat("button3_qID "..q.getcurrentquestindex())
end
when button or info
--ide jöhetnek azok a funkciók amiket szeretnél, hogy lefussanak a gombra való kattintás után


Remélem érthető :D Ha hiba van benn másold fel ide a syserrt, mert ha én már nem is valaki biztos segít majd :D
Cím: Re:Client - Quest kommunikáció
Írta: szabcsi2222 Dátum 2014-12-05, 16:27:14
Na megcsináltam, viszont: Karakterválasztás előtt kidob. :$

Syserr:


1205 16:26:08022 ::
networkModule.py(line:201) SetSelectCharacterPhase
system.py(line:130) __pack_import
system.py(line:110) _process_result
introSelect.py(line:29) ?
system.py(line:130) __pack_import
system.py(line:110) _process_result
interfaceModule.py(line:14) ?
system.py(line:130) __pack_import

networkModule.SetSelectCharacterPhase - exceptions.SyntaxError:invalid syntax (line 165)

1205 16:26:08022 :: ============================================================================================================
1205 16:26:08022 :: Abort!!!!


Cím: Re:Client - Quest kommunikáció
Írta: AndroidGuy Dátum 2014-12-05, 16:28:22
Minden fájl végén kell lenni-e egy TELJESEN üres sornak /én 3-at, 4-et szoktam hagyni/
Cím: Re:Client - Quest kommunikáció
Írta: szabcsi2222 Dátum 2014-12-05, 16:30:03
Tudom, erre figyeltem is és mindenhol hagytam legalább 1-et.
Cím: Re:Client - Quest kommunikáció
Írta: AndroidGuy Dátum 2014-12-05, 16:31:24
Tabolásra is oda figyeltél? o.O
Cím: Re:Client - Quest kommunikáció
Írta: szabcsi2222 Dátum 2014-12-05, 16:32:15
Természetesen. Ezzel kizárt hogy baj legyen, mert már hozzászoktam hogy tabolok és hagyok a végén üres sort.
Cím: Re:Client - Quest kommunikáció
Írta: AndroidGuy Dátum 2014-12-05, 16:33:15
Küld már el a szerkesztett fájljaid legyél szíves o.O
Cím: Re:Client - Quest kommunikáció
Írta: szabcsi2222 Dátum 2014-12-05, 16:42:05
Hogy tudom elküldeni? .py kiterjesztést nem enged.

Esetleg skype-od nincs?
Cím: Re:Client - Quest kommunikáció
Írta: AndroidGuy Dátum 2014-12-05, 16:42:57
Becsomagolod egy RAR-ba?
Cím: Re:Client - Quest kommunikáció
Írta: szabcsi2222 Dátum 2014-12-05, 16:44:32
Próbáltam, úgy sem engedi. :O

Na PÜ-ben sikerült elküldenem a linket.
Cím: Re:Client - Quest kommunikáció
Írta: AndroidGuy Dátum 2014-12-05, 16:46:08
Feltölteni egy rar-t amiben van pár kByte-nyi szöveges fájl o.O
Cím: Re:Client - Quest kommunikáció
Írta: szabcsi2222 Dátum 2014-12-05, 16:47:31
Mivel simán nem ment? :O ^^
Cím: Re:Client - Quest kommunikáció
Írta: AndroidGuy Dátum 2014-12-05, 16:47:54
//ezt majd át kell nevezni arra amit te használsz névre

Ezeket töröld ki elfelejtettem, hogy a python-ba ##<- ez a megjegyzés /illetve #-ez, de a metinesek valamiért kettőt raknak belőle o.O / :)
Cím: Re:Client - Quest kommunikáció
Írta: [VIP]P3NG3R Dátum 2014-12-05, 16:48:56
Júúj de butaságot olvastam.
A ScriptWindow osztálynak van GetChild és GetChild2 metódusa.
Amelyek így néznek ki:
def GetChild(self, name):
return self.ElementDictionary[name]

def GetChild2(self, name):
return self.ElementDictionary.get(name, None)


Adott egy ablak, mint főszülő, belőle mindent el lehet érni.
A GetChild és GetChild2 közötti különbség annyi, hogy a GetChild2 bekéri a megadott nevű gyerek-objektumot és ha létezik akkor annak mutatójával tér vissza, más különben None értékkel. A GetChild pedig azonnal az objektum mutatójával próbál visszatérni ha tud, ha nem tud, mert nem létezik, kivág a kliens KeyError-ral.
[spoiler](https://board.ddmt2.net/proxy.php?request=http%3A%2F%2Fpuu.sh%2Fdi40P%2F2968a5b334.png&hash=492ddd4313915d5918c1fbe61e6cd7b0adde8a80)[/spoiler]
A GetChild2 működése kicsit másként:
def GetChild3(self, name):
try:
return self.ElementDictionary[name]
except KeyError:
return None


Példa a GetChild2 használatára:
[spoiler=introLogin.py] self.virtualKeyboard = self.GetChild2("VirtualKeyboard")
if self.virtualKeyboard:
self.VIRTUAL_KEY_ALPHABET_UPPERS = Suffle(locale.VIRTUAL_KEY_ALPHABET_UPPERS)
self.VIRTUAL_KEY_ALPHABET_LOWERS = "".join([locale.VIRTUAL_KEY_ALPHABET_LOWERS[locale.VIRTUAL_KEY_ALPHABET_UPPERS.index(e)] for e in self.VIRTUAL_KEY_ALPHABET_UPPERS])
self.VIRTUAL_KEY_SYMBOLS = Suffle(locale.VIRTUAL_KEY_SYMBOLS)
self.VIRTUAL_KEY_NUMBERS = Suffle(locale.VIRTUAL_KEY_NUMBERS)
self.__VirtualKeyboard_SetAlphabetMode()

self.GetChild("key_space").SetEvent(lambda : self.__VirtualKeyboard_PressKey(' '))
self.GetChild("key_backspace").SetEvent(lambda : self.__VirtualKeyboard_PressBackspace())
self.GetChild("key_enter").SetEvent(lambda : self.__VirtualKeyboard_PressReturn())
self.GetChild("key_shift").SetToggleDownEvent(lambda : self.__VirtualKeyboard_SetUpperMode())
self.GetChild("key_shift").SetToggleUpEvent(lambda : self.__VirtualKeyboard_SetLowerMode())
self.GetChild("key_at").SetToggleDownEvent(lambda : self.__VirtualKeyboard_SetSymbolMode())
self.GetChild("key_at").SetToggleUpEvent(lambda : self.__VirtualKeyboard_SetAlphabetMode())
[/spoiler]

Egyébként minden gyerek-objektum is lehet szülő-objektum ha vannak gyerek-objektumjai.


Ellenpélda AndroidGuy leírására:
window = {
"name" : "TestWindow",#foszulo, fajl betolteskor alapertelmezetten

"x" : 0,
"y" : 0,

"width" : 1920,
"height" : 1080,
"children" :
(
{
"name":"sony",#TestWindow gyereke, xperia szuloje
"x":0,"y":0,
"children":
(
{
"name":"xperia",#sony gyereke, z3 szuloje
"x":1,"y":2,
"children":
(
{
"name":"z3",#xperia gyereke
"ratings":"good",
"cat":"high",
},
),
},
),
},
),
}


self.GetChild("sony") - Jó
self.GetChild("samsung") - Kidob -> KeyError
self.GetChild2("samsung") - Jó (None lesz)
self.GetChild("z3") - Jó




A fájlok feltöltése valóban jó ötlet, elírtál valamit.
Cím: Re:Client - Quest kommunikáció
Írta: AndroidGuy Dátum 2014-12-05, 16:51:34
Bocsi P3NG3R én nem vagyok python zseni :P Én amikor csináltam egy hasonlót így láttam logikusnak amikor ránéztem :) /de, hát ez van a mai nap is tanultam valamit :D/
Cím: Re:Client - Quest kommunikáció
Írta: szabcsi2222 Dátum 2014-12-05, 16:51:38
Hát ez nekem egy icipicit magas, de próbálgatom még értelmezni.

AndroidGuy kitöröltem amit mondtál, hiba ugyanaz.

Különben én csak azt furcsállom hogy syserr olyan fájlokat nevez meg amiket nem is szerkesztettem. :O
Cím: Re:Client - Quest kommunikáció
Írta: AndroidGuy Dátum 2014-12-05, 16:58:13
SafeboxButton
TeleportButton_name
AntiexpButton_name
VIPsButton_name
BoltButton_name
SwitchButton_name


Ezeket cseréld le arra amiket a inventorywindow.py-ba megadtál névnek :D

SafeboxButton
TeleportButton
AntiexpButton
VIPsButton
BoltButton
SwitchButton
Cím: Re:Client - Quest kommunikáció
Írta: szabcsi2222 Dátum 2014-12-05, 16:59:53
Kicseréltem, de még mindig kidob.

1205 16:59:07608 ::
networkModule.py(line:201) SetSelectCharacterPhase
system.py(line:130) __pack_import
system.py(line:110) _process_result
introSelect.py(line:29) ?
system.py(line:130) __pack_import
system.py(line:110) _process_result
interfaceModule.py(line:14) ?
system.py(line:130) __pack_import

networkModule.SetSelectCharacterPhase - exceptions.SyntaxError:invalid syntax (line 1016)

1205 16:59:07608 :: ============================================================================================================
1205 16:59:07608 :: Abort!!!!


Cím: Re:Client - Quest kommunikáció
Írta: AndroidGuy Dátum 2014-12-05, 17:01:33
Üss még egy entert az uiinventory végén vagy töröld az utolsó sorból a tabokat :)
Cím: Re:Client - Quest kommunikáció
Írta: szabcsi2222 Dátum 2014-12-05, 17:04:18
Beszarok xd, tényleg ez volt a hiba :D

Viszont most meg azt csinálja hogy töltőcsík végigmegy, és a legvégén megáll, nem jön be a játék.
Cím: Re:Client - Quest kommunikáció
Írta: AndroidGuy Dátum 2014-12-05, 17:04:48
syserr
Cím: Re:Client - Quest kommunikáció
Írta: szabcsi2222 Dátum 2014-12-05, 17:05:42
Üres, mivel manuálisan (feladatkezelő) kellett bezárnom.
Mégsem, rossz syserr-t (eter nexus-ért) nyitottam meg. Bocsi. :$


1205 17:06:22212 :: Traceback (most recent call last):

1205 17:06:22213 ::   File "networkModule.py", line 238, in SetGamePhase

1205 17:06:22213 ::   File "system.py", line 130, in __pack_import

1205 17:06:22213 ::   File "
1205 17:06:22213 :: <string>
1205 17:06:22213 :: ", line
1205 17:06:22213 :: 2251
1205 17:06:22213 ::

1205 17:06:22213 ::     
1205 17:06:22213 ::
1205 17:06:22213 ::

1205 17:06:22213 :: SyntaxError
1205 17:06:22213 :: :
1205 17:06:22213 :: invalid syntax
1205 17:06:22213 ::

Cím: Re:Client - Quest kommunikáció
Írta: [VIP]P3NG3R Dátum 2014-12-05, 17:08:06
Escape betöltés végén és valószínűleg lesz syserr is.
Cím: Re:Client - Quest kommunikáció
Írta: szabcsi2222 Dátum 2014-12-05, 17:08:55
Már van, volt eddig is csak én hibáztam bocsi. :S

Üzenet összefésülés: 2014-12-05, 20:42:04

Probléma megoldódott, köszönöm szépen a segítséget AndroidGuy, örök hálám.
Témát zárom.
EhPortal 1.39 © 2025, WebDev