Zaprvé:
matejcik napsal/a:
jinak k cartridge objektu se standardně dostaneš přes proměnnou cartNázevcartridge, pokud to není obfuskované
Takhle je to ve Wherigo Builderu. V urwigu je to buď něco náhodného a nebo to co vyplním do pole LUA identifikátor objektu ve vlastnostech cartridge.
Rozhodně používejte tenhle identifikátor a ne xx = Wherigo.Cartridge() - implementace toho není jasná a není jasné jak se zachovají alternativní playery!!
A zadruhé, přesně jak píše matejcik, ten napsaný kód by vůbec nefungoval. AllZObjects je interně lua table, která jako keys používá čísla. A ty čísla ani nemusí být popořadě, prostě tam nějak jsou a nic neznamenají. Takže chápejte AllZObjects spíš jako Array než jako dictionary, jestli vám tohle osvětlení pomůže.
Problém s hledáním předmětu dle názvu dále je, že název není jedinečný. Ale to si musí každý vyřešit sám. Hledání dle názvu by pak probíhalo nějak takhle (když bych hledal předměty a lidi):
for k,v in pairs(cartTest.AllZObjects) do
if (tostring(v) == "a ZCharacter instance") or (tostring(v) == "a ZItem instance") then
if Wherigo.NoCaseEquals(v.Name, HledanyPredmet) then
...
end
end
end
Ten kód může dost zpomalovat přístroj, spíš bych se tomuhle vyhnul, pokud to není nutné. Ono hledat něco podle názvu je dost hloupé jen kvůli tomu že to chci přesunout.
Doporučil bych to udělat jinak, ne přes název ale přes identifikátor (neboli název proměné):
function presun(zona, predmet)
_G[predmet]:MoveTo(_G[zona])
end
V urwigu tohle napíšete do uživatelských funkcí, a potom už jen voláte uživatelský kód:
presun(zDoma, zET)