inventory hiba

Indította josikaaa, 2018-01-13, 18:28:26

Sziasztok

Valaki tud megoldást arra a problémára, hogy ha nyitott leltárral quest teleportot használsz, akkor teleport után, a leltár ablak hideolva ott marad, így az a rész nem kattintható?

egy video a hibáról amit találtam:

https://www.youtube.com/watch?v=ywN2eFy_gIw&feature=youtu.be

Idézetet írta: josikaaa Dátum 2018-01-13, 18:28:26
Sziasztok

Valaki tud megoldást arra a problémára, hogy ha nyitott leltárral quest teleportot használsz, akkor teleport után, a leltár ablak hideolva ott marad, így az a rész nem kattintható?

egy video a hibáról amit találtam:

https://www.youtube.com/watch?v=ywN2eFy_gIw&feature=youtu.be

Ez a hiba nem csak nálad van, hanem mindenkinél többnyire.
Csak akkor lép fel ez a hiba, ha quest ből teleportálsz.
Érdekes, hogy ha /go paranccsal teleportálsz normálisan bezárja az ablakot, ha pedig quest ből akkor meg oda fagy a képernyőre láthatatlanul...

UI engem is érdekelne a fix.

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”

2018-01-14, 19:41:57 #2 Utolsó szerkesztés: 2018-01-16, 01:26:05 Szerző: [VIP]P3NG3R
Érdekes. Sárkánykő alki ablak is ott marad. ???

A hiba tényleg jelen van mindenhol, legalábbis ahol tesztelni tudtam ott van. Még az okát teljesen nem tudom. Elmagyarázni se olyan egyszerű, mint ahogy látszik. Ugye a megnyitott ablakok quest nyitáskor eltűnnek(Hide), majd mikor záródik a quest ablak visszanyílnak, na ez a visszanyílási eljárás biztosan a warp alatt, a háttérben zajlik le, az objektum megnyílik, de valamiért a grafikai felület nem, így mozgatni sem lehet, ahogy bezárni sem. Egyenlőre egy megoldást találtam rá, ami egyszerűen annyi, hogy késleltettem a warp-olási folyamatot, amíg a quest ablak teljesen bezáródik, ezáltal minden korábban nyitva hagyott ablak is visszanyílik, ami után lefuthat a warp, bezárva mindent megfelelően. Az elv ugyan az, mint a karaktercsere, logout, exit, csatornaváltási eljárásoknál, számol vissza 3 vagy 10mp-től és ha megütnek vagy megütsz valamit félbeszakad.

https://youtu.be/YOEZ6XnWQJU

Egyébként a kattinthatatlan felületek érzékelik az Escape gombot, tehát warp után escape taposással bezáródnak a láthatatlan ablakok. A bugzó ablakok, amiket tudtam azonosítani: Leltár, Sárkánykő alkímia leltár és a kibővített tálca(ahol az extra gombok vannak).

Egyelőre a kódom nem rakom ki, több irányból sebezhető, meg kell szakíttatnom minden interakcióval, hogy ne lehessen kihasználni saját célokra....

Idézetet írta: [VIP]P3NG3R Dátum 2018-01-14, 19:41:57
Érdekes. Sárkánykő alki ablak is ott marad. ???

A hiba tényleg jelen van mindenhol, legalábbis ahol tesztelni tudtam ott van. Még az okát teljesen nem tudom. Elmagyarázni se olyan egyszerű, mint ahogy látszik. Ugye a megnyitott ablakok quest nyitáskor eltűnnek(Hide), majd mikor záródik a quest ablak visszanyílnak, na ez a visszanyílási eljárás biztosan a warp alatt, a háttérben zajlik le, az objektum megnyílik, de valamiért a grafikai felület nem, így mozgatni sem lehet, ahogy bezárni sem. Egyenlőre egy megoldást találtam rá, ami egyszerűen annyi, hogy késleltettem a warp-olási folyamatot, amíg a quest ablak teljesen bezáródik, ezáltal minden korábban nyitva hagyott ablak is visszanyílik, ami után lefuthat a warp, bezárva mindent megfelelően. Az elv ugyan az, mint a karaktercsere, logout, exit, csatornaváltási eljárásoknál, számol vissza 3 vagy 10mp-től és ha megütnek vagy megütsz valamit félbeszakad.

https://youtu.be/YOEZ6XnWQJU

Egyébként a kattinthatatlan felületek érzékelik az Escape gombot, tehát warp után escape taposással bezáródnak a láthatatlan ablakok. A bugzó ablakok, amiket tudtam azonosítani: Leltár, Sárkánykő alkímia leltár és a kibővített tálca(ahol az extra gombok vannak).

Egyelőre a kódom nem rakom ki, több irányból sebezhető, meg kell szakíttatnom minden interakcióval, hogy ne lehessen kihasználni saját célokra....

Penge agy, esetleg nem akarod a mesteres klienst atnezni?
Ott nincs ilyen problema. Felesleges kinlodni ha abbol kitudod nezni.

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”

2018-01-16, 10:58:51 #4 Utolsó szerkesztés: 2018-01-16, 11:04:34 Szerző: udvatt108
Segítek, "wndlg" a kliensen belül a forrásrészben, ami az ablakokat kezeli.
Még kb egy hónapja vettem észre én is, mivel az invertoryra épített menümmel történt hasonló, muszáj voltam megoldást találni. Tehát ott a megoldás.

Majd csinálok témát ha ráérek.

Ui.: Ahogy P3NG3R írta, köze van, hogy nem jó sorrenben vannak a műveletek a Hide/Show funkciókat és az ablakok újratöltését érintve a warpolás következtében.
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

2018-01-16, 11:55:50 #5 Utolsó szerkesztés: 2018-01-16, 12:43:56 Szerző: Meli
Pengcinek Mesteres root fájlok ebben nincs ilyen gond:

[spoiler]
https://mega.nz/#!Ux8GCSrS!xnJKhKBqeayU4wiCTkmv1BnmSDLRKbMw2Csi3KZr1LQ
[/spoiler]

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”

2018-01-16, 15:26:44 #6 Utolsó szerkesztés: 2018-01-16, 15:28:36 Szerző: udvatt108
Van egy forrás mentes alternatív megoldásom.
Amint hazaértem, megcsinálom és akit érdekel írjon, az gyorsabb fixelés erre.

A lényege, hogy minden teleportálás/képernyő újratöltés után az invertory alapértelmezetten bezáródik. Tehát ha teleportál és nyitva volt, bezárja az érintett ablakokat, amik ráfagynak a képernyőre, majd nyilván bármikor újra megnyithatja a játékos.
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

Up :)

“Majdnem minden tudásunkért nem azoknak tartozunk, akik egyetértettek, hanem azoknak, akik nem.”

2018-02-05, 12:41:16 #8 Utolsó szerkesztés: 2018-02-05, 12:48:03 Szerző: udvatt108
Mivel rengeteg dolgom volt/van mostanában, így nem jut elég idő még a magán életemre sem.
Ezért nem tudtam még megcsinálni a leírást erre a fixre.

De segítek picit, hátha tudtok önállósodni...

Interfacemodule.py -> Megkeresed ahol minden ablakot bezár (HideAllWindow) és alkalmazod ott az invertory ablak bezárását. Nyilván kell némi kiegészítés, hogy az az ablak újra töltésénél vagy csak újbóli megjelenítésénél (Értsd, nem mindegy hogy Init vagy Show történik a class-ban.) is kezelje, de minden adott már, hogy hogyan tudod megcsinálni, persze némi önállóságot igényel...

Szóval a lényege, mindig bezárod az invertory ablakot, amikor újra töltődnek vagy első alkalommal betöltődnek a python class-ok (másként fogalmazva az ablakok és minden képernyőn megjelenő eszköz) és nem lesz az, hogy crashel valahol, mert az előző nem volt bezárva és rá lett hívja az újabb.

Valamint érdemes lehet megnézni az invertory kezelést, mert lehet hogy az is megoldja a bajt, hogy kijavítod az invertory bezárás/elrejtés funkciókat, valamint megnézed jó funkció van-e meghívva. Mert lehet hogy átadja egy másik változónak az invertory ablak tömböt (class-ot) és mikor az eredetit bezárja a rendszer, akkor a másolatot nem és az fagy a képre.

Ezek az alternatíváid.
Ha lesz idő (HA LESZ), akkor természetesen adok leírást hozzá, de ne számíts rá, mert nem akarom, hogy csalódást okozzak, valamint azt sem akarom, hogy én csináljak meg mindent. :)

Üdv.

Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

Ahogy tapasztaltam, csak questes portolásnál jelenik a hiba jelensége. Tehát ha GM kóddal adunk meg warp-ot, akkor nem, és akkor sem ha /go xy-t használunk.

A hiba nem Pythonban keresendő, az túl kevés oda, hogy a quest-et ellenőrizze.

Én ezt értem Pisti95, de ugye tisztában vagy azzal, hogy a Quest ablak ami megnyílik, az Python művelet és az szoros összeköttetésben áll minden más object rendszer Elrejtésével/Megjelenítésével, mikor azt megnyílik? Mivel ugyebár minden ablak eltűnik, mikor egy Quest ablak megnyílik, és azt bizony a Python csinálja a szerver parancsára.

És mivel a jelenség csak akkor történik, ha a Quest ablak megnyitásával teleportálunk, így kikövetkeztethető, hogy a helytelen ablak bezárások okozzák ezt a jelenséget. Tehát mikor nyitott Quest ablak közben teleportálunk, mert ugye nem záródik be a Quest ablak mikor teleportálunk, akkor csak átdob minket a betöltő oldalra, majd betölt az új map, ahová teleportáltunk, de nyilván az invertory az nem volt helyesen bezárva az előző Quest ablak megnyitásnál, ezért annak ottmaradt a helyes a képernyőn.

Ez bizony vérbeli Python probléma. Még a buta kisgyerek is érti, pláne ha már látott Metin2 szervert..., hogy ez a művelet hol zajlik.

Az eset hasonlít a Quest ablak szövegének képernyőre fagyásához, gondolom emlékeztek páran arra a témára, ami most a napokban volt, sikeresen megoldottuk.

Ez sem sokkal másabb tészta, csak kisit gondolkozni kell, átnézni azokat az invertory bezárásához fűzött funkciókat, amikor már említettem fentebb. Nem viccből írtam.
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

Nyisd meg a kereskedés ablakot, és próbálj Öreg emberrel teleportálni.

Azt nem hiszem, hogy pythonba találod.

Char.cpp és char.h-ban kell kiegészíteni a dolgot.

Nekem igy sem, úgysem csinál semmit, mivel pythonban javítottam. XD Csunya lenne ha szerver oldalon lenne a kliens ablak class kezelési hiba. LEL
Egy programozási nyelv akkor alacsony szintű, ha arra kényszeríti az embert, hogy az érdektelen dolgokra is odafigyeljen.

int pc_can_warp(lua_State* L)
{
LPCHARACTER pChar = CQuestManager::instance().GetCurrentCharacterPtr();

if (NULL != pChar)
{
lua_pushboolean(L, pChar->CanWarp());
}
else
{
lua_pushboolean(L, false);
}

return 1;
}


{ "can_warp", pc_can_warp },

if false == pc.can_warp() then
syschat("<Információ> Várj 10 másodpercet mielött teleportálsz!")   
return
end
Az ember csak fiatalon találhat ki igazán új dolgokat. Utána már túl tapasztalt, túl híres (...) és túl ostoba.

Leskelődve találtam az aktuális gf root fájlokban egy kis szösszenetet, nem tudom kipróbálni mert gerincre vágtam az egész játékot(újraírom az egész TItemPos-t akarom mondani befejezem) szóval adott az interfaceModule.py fájlban az Interface osztályban ez a fánksön: Close, amiben van egy ilyen:
if self.wndInventory:
self.wndInventory.Destroy()


Bővítsd ki így:
if self.wndInventory:
self.wndInventory.Hide()####gfrekt
self.wndInventory.Destroy()


Ha lenne valaki oly bátor és merész, hogy kipróbálja kap egy hi5-ot :)

Egy rage-edit ha mégsem működne, szintén abban a funkcióban ezt:
if self.wndQuestWindow:
for key, eachQuestWindow in self.wndQuestWindow.items():
eachQuestWindow.nextCurtainMode = -1
eachQuestWindow.CloseSelf()
eachQuestWindow = None
self.wndQuestWindow = {}


Így:
if self.wndQuestWindow:
for key, eachQuestWindow in self.wndQuestWindow.items():
eachQuestWindow.nextCurtainMode = -1
eachQuestWindow.Hide()####gfrekt
eachQuestWindow.CloseSelf()
eachQuestWindow = None
self.wndQuestWindow = {}


A ####gfrekt egy jelzés nekem majd a közeljövőben arra, hogy tudjam mit hova ollóztam be.

Kicsit csúnya úgy hogy hide és destroy. Miért nem raktál az uiinventory.py-ba a def Destroy(self): funkcióba egy self.Hide() sort?

Nem is te lettél volna ha nem kötsz bele, mindenáron még a kovalens kötésbe is :D. Ha nem megy az értő olvasás, uccu neki olvasd el még kétszer az előző hozzászólásomat.

Sztem lényegtelen. A fő h megoldotta a problémát, játékosok úgyis le...köhöm h te most hova raktad a kódot és sztem túl sok hátránya sincs annak h itt van ez a sor és nem másik helyen.
De am meg teszt jelleggel rakta ki penger, most h tudja jó az a megoldás már tudja szépíteni h átrakja oda a dolgot.

2018-02-17, 23:29:42 #18 Utolsó szerkesztés: 2018-02-17, 23:31:43 Szerző: Pisti95
Véleményét mindenki leírhatja, nem sértésből írtam, csak azért mert én úgy írtam bele pár napja, és megoldódott a dolog. Mindenki máshogy csinálja.

Meg ugye a DragonSoul, vagyis a Sárkánykőalkímia ablak is bugos. Azért jobb ha def Destroy-ba írom.

Itt nem a véleményeddel van a gond, az arroganciáddal.