Szerző Téma: Három, egymástól független kérdés  (Megtekintve 1618 alkalommal)

Három, egymástól független kérdés
« Dátum: 2016. szeptember 25. - 09:25:38 »
0 Show voters
Hali!
Bocsi a címért, nem tudtam megfogalmazni röviden, így ezt találtam ki!
Bele is kezdenék:
1. Kérdésem az lenne, hogy hogyan lehet lekérdezni a közelben lévő, lerakott fa objecteket? Ez arra kellene, hogy ha a közelben van egy(mondjuk 10 egységen belül legalább egy), akkor letiltson valami funkciót a játékosnak.
2. Kérdésem, hogy az objectre kattintva megnyit egy panelt, ezt be is tudom \"zárni\", viszont valójában csak eltünteti, mikor újra megnyitom a panelt, az előző is ott van, és ez így halmozódik. Itt van a rossz megoldásom:
 

-- Itt van az a rész, mikor ráklikkelünk:
local panelState = false
if not panelState then
panelState = true
end
PanelRender(clickedElement)
function PanelRender(clickedElement)
if panelState then
addEventHandler(\"onClientRender\",getRootElement(),
function()
   ........

 
Ha jól tudom, ez most így nem is működik, csak ha a render function-t előrébb rakom, mint a lekérdezést. Csak így tudtam megoldani, hogy átvigyem a \"clickedElement\"-et, hogy le tudjam kérni az elementData-ját. \"addEventHandler\"-nél nem tudtam ezt megcsinálni.
3. Kérdés, és egyben utolsó, hogy azt hogy az itemrendszerben van egy tárgy, amit ha ráhúzok egy másik játékosra, akkor annak, akire ráhúztam a tárgyat, megjelenítsen egy képet, és csak neki, senki másnak. Ez jó lehetne?(még tudtam kipróbálni):
 
if(hoverElement == localPlayer) then
guiCreateStaticImage(50, 50, 295, 388, \"kepek/jelveny.png\", false)
end

 
Elnézést a sok kérdésért, és köszönöm előre is a válaszokat!

Három, egymástól független kérdés
« Válasz #1 Dátum: 2016. szeptember 25. - 10:53:45 »
0 Show voters
1)
 
for k,v in pairs(getElementType(\"object\")) do
-- if elagazas
end

 
2)
 
destroyElement(elementName)

Három, egymástól független kérdés
« Válasz #2 Dátum: 2016. szeptember 25. - 11:28:56 »
0 Show voters
1. Sikerült, köszönöm szépen.
Viszont a 2. az nem jó, ezzel ezek szerint nem lehet fuction-t eltüntetni. \"got function\"-t kapok vissza.

Három, egymástól független kérdés
« Válasz #3 Dátum: 2016. szeptember 25. - 11:34:24 »
0 Show voters
Idézetet írta: ?getr3kt date=1474793625\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"63202\" data-ipsquote-contentclass=\"forums_Topic
1)
 
for k,v in pairs(getElementType(\"object\")) do
-- if elagazas
end

 
2)
 
destroyElement(elementName)

 

1.-re csak akkor igaz ez ha nem mappolt object (akkor azt hiszem ezzel nem találja meg vagy valami hasonló van vagy épp pont hogy a mappoltat találja meg és a world-et nem, de nem akarok hülyeséget mondani azért.), tudtommal.
2. Esetén Van neked egy addEventHandlered, azt tudod removeEventHandlerel megállítani is, illetve még a panelState is legyen false ott.

Három, egymástól független kérdés
« Válasz #4 Dátum: 2016. szeptember 25. - 11:40:54 »
0 Show voters
Beleraktam egy olyan elágazást, hogy ha az adott fának van gazdája, csak akkor nézze, így csak azokat nézi, amik nekem kellenek. Így tökéletesen működik.
És ezt hogy lehet remove-olni?
 
addEventHandler(\"onClientRender\",getRootElement(),
                function()

 
Mert így tuti nem jó:
 
removeEventHandler(\"onClientRender\", getRootElement())

 
Vagy ha valaki tudja, hogyan tudnám átvinni a másik function-ba a clickedElementet, akkor nem kellene meghívnom a funkciót, csak egy addEventHandler, és azzal már működne a removeEventHandler(már próbáltam így, viszont akkor a clickedElement-et nem tudtam átvinni)

Három, egymástól független kérdés
« Válasz #5 Dátum: 2016. szeptember 25. - 11:45:13 »
0 Show voters
Idézetet írta: Hasirama date=1474796454\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"63202\" data-ipsquote-contentclass=\"forums_Topic
Beleraktam egy olyan elágazást, hogy ha az adott fának van gazdája, csak akkor nézze, így csak azokat nézi, amik nekem kellenek. Így tökéletesen működik.
És ezt hogy lehet remove-olni?
 
addEventHandler(\"onClientRender\",getRootElement(),
                function()

 
Mert így tuti nem jó:
 
removeEventHandler(\"onClientRender\", getRootElement())

 
Vagy ha valaki tudja, hogyan tudnám átvinni a másik function-ba a clickedElementet, akkor nem kellene meghívnom a funkciót, csak egy addEventHandler, és azzal már működne a removeEventHandler(már próbáltam így, viszont akkor a clickedElement-et nem tudtam átvinni)
 
Hát remove hoz ez az elrendezés nem igazán jó, ezért kell adni neki nevet. Local... stb hülyeség itt nem lesz jó Destroy-al, lévén functionról beszélünk. Azt is kaptad vissza hibának. Ezenkívül amúgy meg ha klikkelésnél csak annyit adsz meg hogy:
 
.. panelState = false ...

Három, egymástól független kérdés
« Válasz #6 Dátum: 2016. szeptember 25. - 11:58:05 »
0 Show voters
Én is megpróbáltam ezzel a \"false\"-os megoldással, viszont maga a PanelRender funkció csak egyszer van meghívva, így nem reagál, ha \"false\"-ra, vagy \"true\"-ra változtatom. Ha meg az \"if panelState\" van később, akkor szintén nem jó valamiért. Annak az okát nem írja.

Három, egymástól független kérdés
« Válasz #7 Dátum: 2016. szeptember 25. - 12:21:44 »
0 Show voters
Renderen belül legyen egy állapotlekérés, és akkor jó lesz. De eleve hülyén csinálod (legalábbis én nem így csinálnám meg). Külön functionba megcsinálnám a rendert, amit addEventelnél ott ahol te. A renderbe beleírnám, hogy megvan -e jelenítve avagy sem. Igazából eleve az egész:
 

local show = false
function renderPanel ()
if not show then return end
...
end
function pedClick()
...
addEventHandler (\"onClientRender\", getRootElement(), renderPanel)
..
end
addEventHandler (\"onClientClick\", getRootElement(), pedClick)

 
Fontos, hogy ped kattintásnál figyelj arra, hogy csak erre a pedre legyen érvényes és ne az összesre... :D

Három, egymástól független kérdés
« Válasz #8 Dátum: 2016. szeptember 25. - 13:00:37 »
0 Show voters
Először én is így csináltam, viszont így nem tudom átvinni a \"clickedElement\"-et. Mivel nekem kellenének a \"clickedElement\" elementDatái, de ha addEvent-ezem, akkor nem tudom, hogy hogyan tudnám átvinni, és nem tudom lekérni az adatokat. Csak ezzel a megoldással működik eddig nekem.

Három, egymástól független kérdés
« Válasz #9 Dátum: 2016. szeptember 25. - 13:06:21 »
0 Show voters
ElementDatát egész szerveren tudsz kezeltetni, nem igazán értem miért ne tudnád átvinni máshova? :D Client oldali elementdatát csak client oldali scriptben tudsz lekérni, míg szerver oldalit mindkettőben. OnClientClickben kell megcsinálni hogy melyik fára kattintasz, illetve mikor a fákat létrehozod ott kell egy (több) elementdata neki.

Három, egymástól független kérdés
« Válasz #10 Dátum: 2016. szeptember 25. - 13:20:57 »
0 Show voters
De ez meg is van, az egész. De mikor rákattintok, akkor ugye addeventhandlerrel elindítom a PanelRendert. Ott kellene lekérni az ElementDatát, viszont azt már nem tudom megcsinálni, hogy a kattintott fának a datáit adja be.

Nem elérhető Xenius

  • 668
    • Profil megtekintése
Három, egymástól független kérdés
« Válasz #11 Dátum: 2016. október 07. - 21:08:06 »
0 Show voters
1, getElementsByType(\"object\", root, true) -- kliens oldal, csak azokat kéri le ami valóban a közeledben van (stream)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal