Client - Quest kommunikáció (k)

Indította szabcsi2222, 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.

2014-12-05, 15:14:55 #1 Utolsó szerkesztés: 2014-12-05, 15:20:51 Szerző: AndroidGuy
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
"Yolo! Avagy Carpe Diem hülyéknek. Vágy amit akartok."

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/
"Yolo! Avagy Carpe Diem hülyéknek. Vágy amit akartok."

Tudom, erre figyeltem is és mindenhol hagytam legalább 1-et.

Tabolásra is oda figyeltél? o.O
"Yolo! Avagy Carpe Diem hülyéknek. Vágy amit akartok."

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
"Yolo! Avagy Carpe Diem hülyéknek. Vágy amit akartok."

Hogy tudom elküldeni? .py kiterjesztést nem enged.

Esetleg skype-od nincs?

Becsomagolod egy RAR-ba?
"Yolo! Avagy Carpe Diem hülyéknek. Vágy amit akartok."

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
"Yolo! Avagy Carpe Diem hülyéknek. Vágy amit akartok."

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 / :)
"Yolo! Avagy Carpe Diem hülyéknek. Vágy amit akartok."

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][/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/
"Yolo! Avagy Carpe Diem hülyéknek. Vágy amit akartok."

2014-12-05, 16:51:38 #16 Utolsó szerkesztés: 2014-12-05, 16:56:09 Szerző: szabcsi2222
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
"Yolo! Avagy Carpe Diem hülyéknek. Vágy amit akartok."

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 :)
"Yolo! Avagy Carpe Diem hülyéknek. Vágy amit akartok."