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.
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
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!!!!
Minden fájl végén kell lenni-e egy TELJESEN üres sornak /én 3-at, 4-et szoktam hagyni/
Tudom, erre figyeltem is és mindenhol hagytam legalább 1-et.
Tabolásra is oda figyeltél? o.O
Természetesen. Ezzel kizárt hogy baj legyen, mert már hozzászoktam hogy tabolok és hagyok a végén üres sort.
Küld már el a szerkesztett fájljaid legyél szíves o.O
Hogy tudom elküldeni? .py kiterjesztést nem enged.
Esetleg skype-od nincs?
Becsomagolod egy RAR-ba?
Próbáltam, úgy sem engedi. :O
Na PÜ-ben sikerült elküldenem a linket.
Feltölteni egy rar-t amiben van pár kByte-nyi szöveges fájl o.O
Mivel simán nem ment? :O ^^
//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 / :)
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.
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/
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
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
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!!!!
Üss még egy entert az uiinventory végén vagy töröld az utolsó sorból a tabokat :)
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.
syserr
Ü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 ::
Escape betöltés végén és valószínűleg lesz syserr is.
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.