Kvantita dnešných MapMakerov akosi ubúda. Nuž, čo sa dá robiť, warcraft nieje úplne najnovšia hra, raz to prísť muselo...
Na oplátku ale stúpa ich kvalita, úroveň, nazvite to ako chcete. Dneska je v móde, napríklad, robiť vlastné kúzla cez spínače s Periodic Eventom. A či viete, milý moji, že po takýchto špásoch aj upratať po sebe treba?
Ako som už, myslím, v úvode naznačil, tento tutoriál vôbec nieje začiatočníkom určený, ba čo viac, ešte aj popliesť vás môže. Takže ďalej nečítajte a šup šup, chodte nejakú tú kvalitu naberať!
Už sú preč? Výborne... Vám piatim čo ste tu ostali v prvom rade vysvetlím, čo to ten leak (Ostanem pri cudzom slove, pretože slovanské synonymum nepoznám, a pochybujem, že vôbec existuje) vlastne je.
Leak je, keď v pamäti ostáva istá informácia, s ktorou už pracovať nebudeme. A pretože s ňou už pracovať nebudeme, tak tam vôbec nemusí zavadzať, smeť jedna.
Takéto smeti sú samostatne príliš malé na to, aby to vašej RAM-ke vôbec vadilo. Ale ak ich neodstránime hneď pri vzniku, budú sa hromadiť a hromadiť, a to už vám nebude do tanca, veru nie.
Zaleakovaná mapa sa bude dlho vypínať, dlho ukladať, a to nevravím o tom, ako dlho sa bude znova načítavať. Aby toho nebolo málo, skôr či neskôr začne aj lagovať, a veruže to budú CPU lagy (A to, či to bude skôr a či neskôr záleží len od toho, aký silný stroj to v tej debni máte).
Ďalšia vec ktorú vysvetlím je: ako sa tým leakom vlastne vyhnúť...
Leaky vznikajú hlavne pri Lokáciách a Unit/Player Groups. Ďalej sa ešte objavujú pri zvukoch, (občas aj pri) špeciálnych efektoch a iných veciach, s ktorými sa ale nič nedá urobiť. Týmito sa zaoberať nebudeme.
Zakaždým, keď napríklad jednotku niekam posuniete, zapíše sa to "niekam" do RAMky (to niekam napríklad môže byť: center of region, random point in region, target point of issued order... Prakticky čokoľvek). Zvyčajne ho použijete len raz, na maličký moment, ale to hra nemôže vedieť, a tak tam ostane zapísané, až kým ho manuálne nedeletnete.
Events
Time - Every 0.02 seconds of game time
Conditions
Actions
Unit - Move Footman 0000 instantly to (Random point in (Playable map area))
Toto je príklad toho, ako to nemá vyzerať.
V znázornenom spínači sa každých 0.02 sekúnd do pamäte uložia súradnice náhodného bodu na mape. Toto bude mať po hodine hrania docela devastujúce výsledky (šprti už iste vypočítali, že za hodinu sa takýmto tempom do pamäte okrem iného uloží 180000 lokácií, ktoré tam fakt že nemusia byť)
Ako to tedá má byť? Najprv tú lokáciu musíme strepať do premennej, pretože v tvare v akom je uvedená vyššie sa s ňou nedá nijako pracovať.
Po tom, čo jednotku presunieme do tejto "premennej", môžeme lokáciu deletnúť cez JASSovú funkciu. (Tá deletne len lokáciu, nie premennú, takže premennú môžeme naďalej používať)
Events
Time - Every 0.02 seconds of game time
Conditions
Actions
Set PremennaTypuPoint = (Random point in (Playable map area))
Unit - Move Footman 0000 instantly to PremennaTypuPoint
Custom script: call RemoveLocation( udg_PremennaTypuPoint)
Toto je príklad toho, ako to vyzerať má...
Posledná akcia je Custom script, keď dáte New Action, toto je tá, ktorá sa zobrazí ako tretia od vrchu. A do nej už len musíte napísať to call RemoveLocation...
S Unit groups je to úplne to isté, a práve preto si myslím, že nemá zmysel vysvetlovať to do podrobna ako v príklade nad týmto. Takže vám len ukážem, ako by to malo vyzerať:
Events
Time - Every 0.02 seconds of game time
Conditions
Actions
Set JednotkyGroup = (Units in (Playable map area))
Unit Group - Pick every unit in JednotkyGroup and do (Actions)
Loop - Actions
Custom script: call DestroyGroup(udg_JednotkyGroup)
Takže, už chápete prečo vám mamka kázala vynášať smetný kôš, že áno?
Ale ako často je teda potrebné "upratovať"?
Nuž, keď raz v spínači pošlete jednotku niekam, nič sa nedeje. Tá lokácia síce v pamäti zapísaná ostane (leak), ale prakticky to pre RAM-ku nieje žiadna záťaž, a nemusíte strácať čas s Call Remove niečo... (Jedine že ste fakt poriadkumilovný).
Upratujte len vtedy, keď sa vám spínač spúšťa opakovane, každých X sekúnd, alebo zakaždým, keď jednotka začaruje, alebo vždy, keď hero zdvihne item, et cetera...
Je to:
call RemoveLocation( udg_RootAgonyTarget[udg_RootInt2] )
Ariagil 29.4.2011 21:55:41
Teda, bod z arrayem. Zkoušel jsem "call DestroyPoint( udg_RootAgonyTarget[RootInt2] )" a nefungovalo. Taky "call RemovePoint( udg_RootAgonyTarget[RootInt2] )" nešlo.
Ariagil 29.4.2011 21:54:24
Jak odstraním Bod?
bagot wc3.cz12.2.2011 19:12:06
A co když....
Co kdž už mám obrovskou mapu (konkrétně MagicDust) a otřesně leakuje a já vytviřím spínač který deletne ty oblasti a ostatní blbosti způsobem jaký je v návodě šlo by to?
rednek > Restor26.1.2011 19:23:46
bezdak
? :D
Naco by niekto deletoval all players? :D
Samozrejme, ze ak deletnete AllPlayers, tak sa uz neskor nebudu dat pouzit. Ak deletnete lokaciu, tiez sa uz neskor nebude dat pouzit... Kurna ak deletnete jednotku z mapy, tak sa uz neskor nebude dat pouzit :D
Mama si kupila mikrovlnku, a v manuali neni napisane, ze sa nemoze vyhadzovat z druheho poschodia.
Mal by som zalovat vyrobcu?
bezdak 22.3.2010 19:57:37
pekny tutorial, akurat ma hned zarazilo, ze si tam nespomenul najdolezitejsiu vec ako uz restor povedal
"Napriklad treba povedat ze ktore veci sa NESMU destro-ovat, napr. all players, alebo entire map, playable area a podobne taketo globalne veci, lebo neskor sa uz nebudu dat pouzit."
kvoli tomuto iba 4/5 a vazne som rozmyslal aj nad 3... je to dost zavazny nedostatok