Stránka 1 z 1
Text na ceduliach sa neaktualizuje
Napsal: 20 bře 2026, 13:15
od Ján Haluška
Cedule občas po napísaní textu a následne prepísaním daného textu na niečo iné, zobrazujú stále aj pôvodný text. Po odstránení cedule občas zostane "visieť" pôvodný text vo vzduchu a nedá sa nijak odstrániť. Problém som si všimol zatiaľ pri týchto malých farebných ceduliach a tiež linkových ceduliach:

- Snímka obrazovky 2026-03-20 131209 (Small).png (191.95 KiB) Zobrazeno 63 x
Re: Text na ceduliach sa neaktualizuje
Napsal: 22 bře 2026, 11:30
od Administrace
Děkuji za nahlášení. To vypadá jako docela nepříjemná chyba. Pokusím se tomu věnovat, ale nevím, kdy to budu mít opraveno.
Re: Text na ceduliach sa neaktualizuje
Napsal: 28 bře 2026, 12:32
od Administrace
Mělo by to být opraveno.
Zjistil/a jsem, že chybu způsobovala moje úprava. Cedule fungují tak, že pro zobrazení textu vygenerují tzv. Lua-entitu (potenciálně pohyblivý objekt ve hře), tuto entitu pak následně při aktualizacích potřebují často najít (v případě změny textu jí změní texturu). Ve starších verzích Luanti k tomu byla jedinou možností funkce core.get_objects_inside_radius(), která ale způsobovala problémy s výkonem, protože procházela seznam všech aktivních entit na celém serveru (kterých jsou typicky stovky, na větším serveru i tisíce). Proto jsem již dříve implementoval/a metodu, kdy se vytvořený objekt při aktivaci sám registruje pod čísleným ID, které si blok cedule zapamatoval do metadat a podle nich pak měl svoji entitu najít přímo. Bohužel to moc dobře nefungovalo a vedlo to k mnohonásobným duplikacím entit a problémům, na které jsi narazil. (Odhaduji, že se asi nejdřív aktivoval blok, který hledal v seznamu entitu, kterou ale nenašel, a tak vytvořil novou, a pak se teprve aktivovala původní entita a zaregistrovala se do seznamu pod původním číslem.)
Od některé novější verze (nejsem si jistý/á, možná 5.13.0) již tato funkce používá spatial index, což prohledávání výrazně urychluje. Proto jsem provedl/a upgrade serveru na verzi 5.15.1 a svůj systém registrace entit odstranil/a.