• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

[Skryptowanie Lua%XML z Seminari] Tworzenie i usuwanie przedmiotu na danej pozycji

The_Hide

Banned User
Joined
Dec 11, 2012
Messages
389
Reaction score
10
Siema, nudzi mi się to sobie napiszę proradnika, którego będę updatował, na początku może wyglądać trochę skromnie, ale z czasem się rozrośnie.
*Będę używał wyrazów tabela/tablica jako to samo.

Zapraszam na serię poradników od Seminari ;]

Jak ma finalnie wyglądać?

- Proste przykłady wykorzystania Lua do skryptowania na OTS
- Struktura tabel, odczytywanie z nich wartości, operacje na nich, tworzenie własnych tablic poprzez table.insert itd., segregowanie itp.
- Różne metody rozwiązania tego samego problemu (poprzez pętle zamiast wielu ifów itp)


zaczynamy


Pierwsze co to musimy określić co chcemy zrobić, możemy wypisać sobie to na kartce, ja tak zaczynałem skryptować ;p

Przykład 1:

  1. Chcemy zrobić dźwignie
  2. Dźwignia ma usuwać kamień na pewnej pozycji
  3. Przy usuwaniu kamienia ma wysłać efekt np. Ognistego Rozprysku
  4. Po usunięciu kamienia dźwignia ma się przekręcić
  5. Gdy przekręcimy spowrotem dźwignie to kamień się na nowo pojawi
  6. Przy usuwaniu kamienia do gracza wyśle na czerwono wiadomość
  7. Przy pojawieniu się kamienia wyśle inny msg

I teraz myślimy, skrypt uaktywni się po naciśnieciu na dźwignie, więc jest to ACTION, w którym używamy dźwigni, więc:

pierwszą linijką w skrypcie będzie onUse

Lua:
function onUse(cid, item, fromPosition, itemEx, toPosition)

zamiast itemEx może być item2, ale ja preferuje itemEx bo jest łatwiejsze do zrozumienia;p

fromPosition to pobiera pozycje, od której zaczynamy, to toPosition to na tej, której kończymy (to się przydaje np. jeśli używamy jednego itemka na drugim, o tym później)

w naszym skrypcie istotne będą:
-cid
-item

Ponieważ chcemy by ta dźwignia była unikalna, (czyli tylko 1 dźwignia na mapie działa do tego skryptu, to musimy dać w map edytorze actionid jej)

Damy actionid, o liczbie 8500 (upewnijcie się wciskając w map edytorze find action, czy nie ma już takiego actiona zajętego)

i dajemy do actions.xml taką o to linijke:
<action actionid="nasz actionid" event="script" value="sciezka do naszego pliku i nazwa pliku i rozszerzenie (.lua)" />
XML:
<action actionid="8500" event="script" value="quests/nasza_dzwignia.lua" /> <!-- w takie ptaszki robimy komentarz w XML -->

przechodzimy do naszego skryptu Lua, musimy teraz dać warunek sprawdzający itemid dźwigni (bo są 2 dźwignie, nie przekręcona 1945 i przekręcona 1946)

robimy coś takiego, zostawiając puste luki między oboma warunkami
Lua:
if item.itemid == 1945 then

elseif item.itemid == 1946 then

end

teraz chcemy by po pierwszej dźwigni niszczylo kamień, a przy drugiej go stawiało, dajemy sobie komentarz by o tym pamiętac

Lua:
if item.itemid == 1945 then
	-- tutaj usuwamy kamien
elseif item.itemid == 1946 then
	-- tutaj stawiamy kamien
end

teraz damy warunki, ktore sprawdzaja czy kamien juz na danej pozycji, oraz musimy podac tą pozycje, jako lokalną zmienną
Lua:
local pozycja_kamienia = {x= ,y= ,z= }
local id_kamienia = 1354

pozycja_kamienia <- to jest nazwa naszej zmiennej, rownie dobrze mozemy sobie nazwac ją zbyszek, albo kamyczke, dowolnie jak chcemy
{x= ,y= ,z=} <-- to jest pozycja naszego kamienia, założmy, że stawiliśmy go na pozycji x = 1050, y=5000, z = 7
id_kamienia = 1354 <-- to jest ID naszego kamienia, ktorego chcemy usuwac
w tej chwili, a właściwie powinno się to zrobić zawsze po umieszczeniu 1 linijki w skrypcie, ostatnimi naszymi linijkami mają być:

Lua:
return true
end

W obecnej chwilii nasz skrypt powinien wyglądać tak:

Lua:
function onUse(cid, item, fromPosition, itemEx, toPosition)
	local pozycja_kamienia = {x=1050,y=5000,z=7}
	local id_kamienia = 1354
	if item.itemid == 1945 then
		-- tutaj usuwamy kamien
	elseif item.itemid == 1946 then
		-- tutaj stawiamy kamien
	end
	return true
end

to zaczynamy usuwać nasz kamień, wykorzystamy do tego funkcję, która znajduje kamień o danym ID na danej pozycji, czyli:

znaleziony_kamien = getTileItemById(pozycja gdzie ma szukac przedmiotu, id przedmiotu szukanego)

znaleziony_kamien to nazwa localna, w naszym przypadku będzie to wyglądać tak:

Lua:
local znaleziony_kamien = getTileItemById(pozycja_kamienia, id_kamienia)

kazdy item ma swoije unikalne id, czyli UID, oprocz tego dawanego w remere jest takie UID normalne, ktory ma kazdy item

jesli nasza funkcja znajdzie kamien na tej pozycji, to wtedy UID bedzie napewno rozne od liczby 0, jesli jednak nie, to bedzie ono albo -1, albo 0 albo nil, zaleznie od silnika

więc żeby napewno nasz skrypt działał na każdym silniku robimy tak:
Lua:
if znaleziony_kamien.uid > 0 then
	-- tutaj bedziemy go usuwac bo go znalazlo
else
	-- tutaj napiszemy graczowi, ze kamien jest juz usuniety, bo kamienia nie znalazlo na tej pozycji
end

całość wygląda teraz tak:

Lua:
function onUse(cid, item, fromPosition, itemEx, toPosition)
	local pozycja_kamienia = {x=1050,y=5000,z=7}
	local id_kamienia = 1354
	local znaleziony_kamien = getTileItemById(pozycja_kamienia, id_kamienia)
	if item.itemid == 1945 then
		-- tutaj usuwamy kamien
		if znaleziony_kamien.uid > 0 then
			-- tutaj bediemy go usuwac bo go znalazlo
		else
			-- tutaj napiszemy graczowi, ze kamien jest juz usuniety, bo kamienia nie znalazlo na tej pozycji
		end
	elseif item.itemid == 1946 then
		-- tutaj stawiamy kamien
	end
	return true
end

zacznijmy od prostszego warunku, czyli od tego, co robic jesli kamienia nie ma na tej pozycji (po else)

wtedy chcemy by wyslalo graczowi wiadomosc "Kamien jest juz przesuniety", oraz by dzwignia sie przesunela do pozycji, w ktorej powinna byc, gdy kamien jest juz przesuniety czyli do 1946
funkcje, które wykorzystamy:
doCreatureSay(cid, text, TALKTYPE_MONSTER)
doTransformItem(tutaj UID itemu dziwigni, ID itemu, w ktory ma sie zamienic nasza dziwgnia)

otrzymamy coś takiego:

Lua:
function onUse(cid, item, fromPosition, itemEx, toPosition)
	local pozycja_kamienia = {x=1050,y=5000,z=7}
	local id_kamienia = 1354
	local znaleziony_kamien = getTileItemById(pozycja_kamienia, id_kamienia)
	if item.itemid == 1945 then
		-- tutaj usuwamy kamien
		if znaleziony_kamien.uid > 0 then
			-- tutaj bediemy go usuwac bo go znalazlo
		else
			-- tutaj napiszemy graczowi, ze kamien jest juz usuniety, bo kamienia nie znalazlo na tej pozycji
			doCreatureSay(cid, "Kamien jest juz przesuniety", TALKTYPE_MONSTER)
			doTransformItem(item.uid, 1946)
		end
	elseif item.itemid == 1946 then
		-- tutaj stawiamy kamien
	end
	return true
end

to teraz zajmiemy się trudniejszym warunkiem, czyli usuwaniem kamienia, wykorzystamy tą funkcję:
doRemoveThing(UID itemu który chcemy usunąć, liczba itemow do usuniecia)
i dajemy też ten sam warunek do przesunięcia dźwigni + nowy msg dla gracza

całośc wygląda teraz tak:

Lua:
function onUse(cid, item, fromPosition, itemEx, toPosition)
	local pozycja_kamienia = {x=1050,y=5000,z=7}
	local id_kamienia = 1354
	local znaleziony_kamien = getTileItemById(pozycja_kamienia, id_kamienia)
	if item.itemid == 1945 then
		-- tutaj usuwamy kamien
		if znaleziony_kamien.uid > 0 then
			-- tutaj bediemy go usuwac bo go znalazlo
			doRemoveThing(znaleziony_kamien.uid, 1)
			doCreatureSay(cid, "Przesuwajac dzwignie usunales kamien", TALKTYPE_MONSTER)
			doTransformItem(item.uid, 1946)
		else
			-- tutaj napiszemy graczowi, ze kamien jest juz usuniety, bo kamienia nie znalazlo na tej pozycji
			doCreatureSay(cid, "Kamien jest juz przesuniety", TALKTYPE_MONSTER)
			doTransformItem(item.uid, 1946)
		end
	elseif item.itemid == 1946 then
		-- tutaj stawiamy kamien
	end
	return true
end

teraz zajemimy się stawianiem kamienia, dajemy podobne warunki jak poprzednio, uzyjemy funkcji tworzenia itemka
doCreateItem(id tworzonego itemka, pozycja tworzenia itemka)

całość wygląda teraz tak:
Lua:
function onUse(cid, item, fromPosition, itemEx, toPosition)
	local pozycja_kamienia = {x=1050,y=5000,z=7}
	local id_kamienia = 1354
	local znaleziony_kamien = getTileItemById(pozycja_kamienia, id_kamienia)
	if item.itemid == 1945 then
		-- tutaj usuwamy kamien
		if znaleziony_kamien.uid > 0 then
			-- tutaj bediemy go usuwac bo go znalazlo
			doRemoveThing(znaleziony_kamien.uid, 1)
			doCreatureSay(cid, "Przesuwajac dzwignie usunales kamien", TALKTYPE_MONSTER)
			doTransformItem(item.uid, 1946)
		else
			-- tutaj napiszemy graczowi, ze kamien jest juz usuniety, bo kamienia nie znalazlo na tej pozycji
			doCreatureSay(cid, "Kamien jest juz przesuniety", TALKTYPE_MONSTER)
			doTransformItem(item.uid, 1946)
		end
	elseif item.itemid == 1946 then
		-- tutaj stawiamy kamien
		if znaleziony_kamien.uid > 0 then
			doCreatureSay(cid, "Kamien jest juz przesuniety", TALKTYPE_MONSTER)
			doTransformItem(item.uid, 1945)
		else
			doCreateItem(id_kamienia, pozycja_kamienia)
			doCreatureSay(cid, "Postawiles kamien!", TALKTYPE_MONSTER)
			doTransformItem(item.uid, 1945)
		end
	end
	return true
end

Ostatnia rzecz jaka została to kosmetyczna poprawka efektami oraz usunięcie zbędnych komentarzy, możecie je zostawić by wiedzieć o co chodzi w skrypcie, ja często zostawiam
użyjemy funkcji:
doSendMagicEffect(pozycja gdzie ma byc wyslany efekt, numer efektu)
oraz dodamy sobie nowe fajne zmienne:
local efekt_przy_usuwaniu_kamienia = 13
local efekt_przy_tworzeniu_kamienia = 25

Cały nasz skrypt powinien wyglądać tak:

Lua:
function onUse(cid, item, fromPosition, itemEx, toPosition)
	local pozycja_kamienia = {x=1050,y=5000,z=7}
	local id_kamienia = 1354
	local znaleziony_kamien = getTileItemById(pozycja_kamienia, id_kamienia)
	local efekt_przy_usuwaniu_kamienia = 13
	local efekt_przy_tworzeniu_kamienia = 25
	
	if item.itemid == 1945 then -- przy tym ustawieniu dzwigni usuwac bedzie kamien
		if znaleziony_kamien.uid > 0 then -- znalazlo kamien, wiec go usunie
			doRemoveThing(znaleziony_kamien.uid, 1)
			doCreatureSay(cid, "Przesuwajac dzwignie usunales kamien", TALKTYPE_MONSTER)
			doTransformItem(item.uid, 1946)
			doSendMagicEffect(pozycja_kamienia, efekt_przy_usuwaniu_kamienia)
		else -- jesli nie znajdzie kamienia na danej pozycji, to przesunie dzwignie w odpowiednie miejsce
			doCreatureSay(cid, "Kamien jest juz przesuniety", TALKTYPE_MONSTER)
			doTransformItem(item.uid, 1946)
		end
	elseif item.itemid == 1946 then -- przy tym ustawieniu dzwigni bedzie tworzyc kamien
		if znaleziony_kamien.uid > 0 then -- kamien juz stoi, wiec przesuwamy dzwignie w odpowiednie miejsce
			doCreatureSay(cid, "Kamien jest juz przesuniety", TALKTYPE_MONSTER)
			doTransformItem(item.uid, 1945)
		else -- kamienia jeszcze tam nie ma, wiec trzeba go stworzyc
			doCreateItem(id_kamienia, pozycja_kamienia)
			doCreatureSay(cid, "Postawiles kamien!", TALKTYPE_MONSTER)
			doTransformItem(item.uid, 1945)
			doSendMagicEffect(pozycja_kamienia, efekt_przy_tworzeniu_kamienia)
		end
	end
	return true
end
 
Ten poradnik z powodu tych z tneta?

I tak chuja z tego zrozumieją xd, ale ty semmi masz misję, zamiast się pierdolić z poradnikami dla gimbusów to byś się wziął za jakiś porządny język i go wkuwał jak się tak nudzisz. Lepiej na tym wyjdziesz.

Co do poradnika, to GJ/GZ !!!
 
I tak chuja z tego zrozumieją xd, ale ty semmi masz misję, zamiast się pierdolić z poradnikami dla gimbusów to byś się wziął za jakiś porządny język i go wkuwał jak się tak nudzisz. Lepiej na tym wyjdziesz.

Co do poradnika, to GJ/GZ !!!

ale ja nie chcę jak większość pro hakierów ots masterów z otlandu iść w kierunku informatyki w przyszłości, tzn programowanie itd. nie jestem tym zbytnio zainteresowany, owszem matematyką tak, ale i tak bardziej w kierunkach gdzie brana pod uwagę jest geografia i matematyka, takich jak geodezja, kartografia itp. ;p

ewentualnie marketing jeszcze wchodzi w grę u mnie

#temat
a co do poradnika to jest bardzoooo czytelny, krok po kroku i nie ma opcji nie zrozumieć tego ;p przeczytaj cały to przyznasz mi rację xd
 
Ale trochę straciłeś czas bo nie wiem kto z niego skorzysta, mogłeś grać w lola a nie tracić czas, aaa sorry masz bana to pewnie dlatego zrobiłeś ten poradnik xd
 
Ale trochę straciłeś czas bo nie wiem kto z niego skorzysta, mogłeś grać w lola a nie tracić czas, aaa sorry masz bana to pewnie dlatego zrobiłeś ten poradnik xd

nom, a na 5 lvlu są takie jebane nooby, a ty nie chcesz ze mną grać bo jesteś afk bo stawiasz server, żeby mieć hajs na nowe skórki w LoL'u :(

#temat
zrobię też parę innych, bardziej przydatnych dla noobów, typu creaturescript itd.
 
nazwa najlepsza, napracowałeś się semi, pani kasia approvuje ten poradnik

yuhKVMX.gif
 
Jedna uwaga - proponuję żebyś nie pisał efekty liczbami tylko "stałymi" z folderu /data/lib ;).
Lua:
local config = 
{
	position 		= {x = 1050 y = 5000, z = 7}
	id					= 1354
	effect_create 	= CONST_ME_BUBBLES
	effect_delete 	= CONST_ME_MAGIC_RED
}


function onUse(cid, item, fromPos, itemEx, toPos)
	local temp = getTileItemById(config.position, config.id)
	if item.itemid == 1945 then
		if temp.uid > 0 then
			doRemoveThing(temp.uid, 1)
			doSendMagicEffect(config.position, config.effect_create)
			doCreatureSay(cid, "Przesuwajac dzwignie usunales kamien", TALKTYPE_MONSTER)
		else
			doCreatureSay(cid, "Kamien jest juz przesuniety", TALKTYPE_MONSTER)
		end
		doTransformItem(item.uid, 1946)
	elseif item.itemid == 1946 then
		if temp.uid > 0 then
			doCreatureSay(cid, "Kamien jest juz przesuniety", TALKTYPE_MONSTER)
		else
			doCreateItem(config.id, config.position)
			doSendMagicEffect(config.position, config.effect_delete)
			doCreatureSay(cid, "Kamien jest juz przesuniety", TALKTYPE_MONSTER)
		end
		doTransformItem(item.uid, 1945)
	end
	
	return true
end
 
po co dodałeś config? przy paru lokalach to niewygodnie jest z configiem, dodatkowo wszędzie dopisywać config.
już lepiej jak ja kiedyś robiłem czyli c. ale tego i tak teraz nie robię, bo jak mam 4 zmienne to daje w local i kij ;p
 
po co dodałeś config? przy paru lokalach to niewygodnie jest z configiem, dodatkowo wszędzie dopisywać config.
już lepiej jak ja kiedyś robiłem czyli c. ale tego i tak teraz nie robię, bo jak mam 4 zmienne to daje w local i kij ;p

To przynajmniej wszystkie stale zmienne jak id_kamienia trzymaj nad skryptem.
Code:
local id_kamienia = 1234
function onUse(...)
end
 
Skoro tak twierdzisz, to na pewno tak jest ;)

bo i tak deklarujemy to jako wartość lokalną, więc powinno się odnieść do wszystkich funkcji jakie mamy w skrypcie, ale muszą te wartości lokalne być przed miejscem, w którym się odnosimy do nich

w tym przypadku nie ma to znaczenia, a w większych skryptach/systemach takie wartości mam w LIB'ach ;p




Mały dodatek, Usuwa kamień, a następny kamień stworzy się po X czasie:


Lua:
function onUse(cid, item, fromPosition, itemEx, toPosition)
	local pozycja_kamienia = {x=1050,y=5000,z=7}
	local id_kamienia = 1354
	local znaleziony_kamien = getTileItemById(pozycja_kamienia, id_kamienia)
	local efekt_przy_usuwaniu_kamienia = 13
	local efekt_przy_tworzeniu_kamienia = 25
	local czas_tworzenia_kamienia = 60 * 1000 --<-- 60 * 1000 = 60 sekund
	
	local function stworz_kamien_po_czasie() -- nasza lokalna funkcja tworzaca kamien po czasie
		if not(znaleziony_kamien.uid > 0) then
			doCreateItem(id_kamienia, pozycja_kamienia)
		end
	end
	
	if item.itemid == 1945 then -- przy tym ustawieniu dzwigni usuwac bedzie kamien
		if znaleziony_kamien.uid > 0 then -- znalazlo kamien, wiec go usunie
			doRemoveThing(znaleziony_kamien.uid, 1)
			doCreatureSay(cid, "Przesuwajac dzwignie usunales kamien", TALKTYPE_MONSTER)
			doTransformItem(item.uid, 1946)
			doSendMagicEffect(pozycja_kamienia, efekt_przy_usuwaniu_kamienia)
			tworzenie_na_nowo = addEvent(stworz_kamien_po_czasie(), czas_tworzenia_kamienia) -- tutaj robimy event, ktory stworzy kamien po czasie
		else -- jesli nie znajdzie kamienia na danej pozycji, to przesunie dzwignie w odpowiednie miejsce
			doCreatureSay(cid, "Kamien jest juz przesuniety", TALKTYPE_MONSTER)
			doTransformItem(item.uid, 1946)
		end
	elseif item.itemid == 1946 then -- przy tym ustawieniu dzwigni bedzie tworzyc kamien
		if znaleziony_kamien.uid > 0 then -- kamien juz stoi, wiec przesuwamy dzwignie w odpowiednie miejsce
			doCreatureSay(cid, "Kamien jest juz przesuniety", TALKTYPE_MONSTER)
			doTransformItem(item.uid, 1945)
		else -- kamienia jeszcze tam nie ma, wiec trzeba go stworzyc
			doCreateItem(id_kamienia, pozycja_kamienia)
			doCreatureSay(cid, "Postawiles kamien!", TALKTYPE_MONSTER)
			doTransformItem(item.uid, 1945)
			doSendMagicEffect(pozycja_kamienia, efekt_przy_tworzeniu_kamienia)
			stopEvent(tworzenie_na_nowo) -- tutaj stopujemy event tworzenia kamienia
		end
	end
	return true
end
 
Ty mnie probujesz uczyc? Wiesz w ogole czemu niektore zmienne powinno sie trzymac w funkcji a niektore ponad nia? Nie chodzi tutaj o zaden dostep do nich. Deklarujac zmienna wewnatrz funkcji jest ona ustalana na nowo z kazdym wykonaniem skryptu, co mija sie z celem jak kamien zawsze bedzie mial id = 1234. Jak umiescisz zmienna nad funkcja, zostanie ona wczytana tylko raz, a wczytana ponownie dopiero, jak przeladujesz system (w tym przypadku actions).
 
Ty mnie probujesz uczyc? Wiesz w ogole czemu niektore zmienne powinno sie trzymac w funkcji a niektore ponad nia? Nie chodzi tutaj o zaden dostep do nich. Deklarujac zmienna wewnatrz funkcji jest ona ustalana na nowo z kazdym wykonaniem skryptu, co mija sie z celem jak kamien zawsze bedzie mial id = 1234. Jak umiescisz zmienna nad funkcja, zostanie ona wczytana tylko raz, a wczytana ponownie dopiero, jak przeladujesz system (w tym przypadku actions).

to jak to się odniesie do manipulacji typu table.insert, wartość wtedy zostanie czy po wykonaniu skryptu wróci do pierwotnej wartości zapisanej w skrypcie?


#usuwanie wielu itemów i tworzenie ich po czasie

Lua:
function onUse(cid, item, fromPosition, itemEx, toPosition)

	local c = {
			[1] = {item_id = 1354, pozycja = {x=1050,y=5000,z=7}, ilosc = 1, efekt_create = 25, efekt_remove = 13},
			[2] = {item_id = 1354, pozycja = {x=1051,y=5000,z=7}, ilosc = 1, efekt_create = 25, efekt_remove = 13},
			[3] = {item_id = 1354, pozycja = {x=1052,y=5000,z=7}, ilosc = 1, efekt_create = 25, efekt_remove = 13},
			}

	local czas_tworzenia_scian = 60 * 1000 --<-- 60 * 1000 = 60 sekund
	local usuniete_sciany = 0
	local stworzone_sciany = 0
	
	local function stworz_sciany_po_czasie()
		for j = 1, #c do
			if getTileItemById(c[j].pozycja, c[j].item_id).uid > 0 then
				stworzone_sciany = stworzone_sciany + 1
				doCreateItem(c[j].item_id, c[j].pozycja)
				doSendMagicEffect(c[j].pozycja, c[j].efekt_create)
			end
		end
	end
	
	if item.itemid == 1945 then 
		for i = 1, #c do
			if getTileItemById(c[i].pozycja, c[i].item_id).uid > 0 then
				usuniete_sciany = usuniete_sciany + 1
				doRemoveThing(getTileItemById(c[i].pozycja, c[i].item_id).uid, c[i].ilosc)
				doSendMagicEffect(c[i].pozycja, c[i].efekt_remove)
			end
		end
		doCreatureSay(cid, "Przesuwajac dzwignie usunales ".. usuniete_sciany .." scian. Odnowia sie po ".. czas_tworzenia_scian/1000 .." sekundach.", TALKTYPE_MONSTER)
		doTransformItem(item.uid, 1946)
		tworzenie_na_nowo = addEvent(stworz_sciany_po_czasie(), czas_tworzenia_scian)
	elseif item.itemid == 1946 then 
		for k = 1, #c do
			if getTileItemById(c[k].pozycja, c[k].item_id).uid > 0 then
				stworzone_sciany = stworzone_sciany + 1
				doCreateItem(c[k].item_id, c[k].pozycja)
				doSendMagicEffect(c[k].pozycja, c[k].efekt_create)
			end
		end
		doCreatureSay(cid, "Przesuwajac dzwignie stworzyles ".. stworzone_sciany .." scian.", TALKTYPE_MONSTER)
		doTransformItem(item.uid, 1945)
		stopEvent(tworzenie_na_nowo)
	end

	return true
end
 
A wiesz co to sa stale? Jak cos wsadzisz do tablicy, ktora jest zadeklarowana poza funkcja, to ta tablica wcale nie jest stala, bo wlasnie ja modyfikujesz. Idac dalej tym tropem, wsadzajac cos do niej, to cos zostanie tam na zawsze, do czasu az na nowo wczytasz skrypt. ID kamienia, pozycje, efekty nie sa nigdzie zmieniane, dlatego nic nie stoi na przeszkodzie zeby umiescic je poza funkcja. Co w przypadku duzych (bardzo duzych) tablic przyspieszy wykonanie sie skryptu.

Deklarowanie funkcji wewnatrz funkcji jest jeszcze weksza glupota.
 
Back
Top