What's new

-Łatwy "Systemy Storage i Global Storage" - czyli jak dzia?aj? questy

Sentil

Ten Typ
Joined
May 11, 2008
Messages
211
Reaction score
85
"Systemy Storage i Global Storage"
- czyli jak dzia?aj? questy
Autor: Sentil


Spis tre?ci:
I: Prolog
1. Od autora.
II: Storage i Global Storage
2. Storage - czym jest?
2a. Storage w silnikach XML.
2b. Storage w silnikach SQL.
3. Global Storage.
III: Epilog
4. Prawa autorskie.
5. Zako?czenie.


Inne moje artyku?y:
http://tibia.net.pl/konfiguracja/45...czac-theforgottenserver-xampp-phpmyadmin.html


Prolog


1. Od autora.

Cze??. Poradnik, kt?ry czytasz, traktuje o systemach Storage i Global Storage, kt?re s? nieod??cznym i bardzo wa?nym elementem ?wiata Open Tibii. Zapraszam do lektury.



II: Storage i Global Storage


2. Storage - czym jest?

Na pocz?tek elementarne pytanie: czym jest storage?

Storage - (z ang. przechowywanie, magazynowanie) - system "kluczy" (storageID) i ich warto?ci (storage_value), dzi?ki kt?rym silnik mo?e czyta?, interpretowa? i zmienia? osi?gni?cia gracza w grze. Wykorzystywany g??wnie tam, gdzie posta? mo?e wykona? dan? czynno?? jednokrotnie (np. wyci?gni?cie nagrody ze skrzynki), przy rozbudowanych questach wymagaj?cych przej?cia jednej misji do odblokowania kolejnej, lub przy czynno?ciach wykonywanych z ograniczeniem czasowym (np. znany wszystkim exhaused).

Najpopularniejszym przyk?adem u?ywania storage s? skrzynki questowe, czyli takie skrzynie, z kt?rych mo?emy wyci?gn?? jaki? przedmiot jeden raz. Za drugim klikni?ciem pojemnik oka?e si? pusty. Wyobra?my sobie gracza i skrzyni? z Demon Armorem. Typ nigdy nie klika? na skrzynk?, wi?c mo?e wyci?gn?? nagrod?. W zabawie z systemem storage bardzo wa?ne jest stwierdzenie, ?e:

Je?li klucz nie zosta? jeszcze nadany graczowi, to domy?lnie posiada warto?? -1.

Co to znaczy? Przedstawi? to na obrazku. Tak wygl?da sytuacja napalonego na Demon Armor gracza przed klikni?ciem na skrzyni?:

2emlitt.png

Typ nigdy nie klika? na skrzyni?, wi?c klucz 2494 narysowa?em przerywanymi krechami - jeszcze nie istnieje, a skoro nie istnieje, ma warto?? -1. Dlaczego StorageID 2494? To jest ID Demon Armoru. Kiedy? kogo? ol?ni?o i ten kto? stwierdzi?, ?e nie warto pisa? osobnych skrypt?w dla ka?dej skrzynki questowej. Napisa? uniwersalny skrypt, kt?ry dzia?a? tak, ?e gdy jednej ze skrzynek questowych nadamy UID r?wny ID itemu, to ten item nam z niej zleci i utowrzy si? klucz o numerze takim, jak ID itemu.

Teraz gracz podchodzi do skrzyni i ci?nie Use. Skrypt na skrzynk? daje mu Demon Armor i jednocze?nie tworzy klucz 2494, nadaj?c mu warto?? 1:

3097d74.png

Za???my, ?e klikamy na skrzynk? ponownie. Silnik nie pami?ta naszej "twarzy" (=d) albo pr?dzej nicku, ale czyta, ?e posiadamy StorageID (klucz) 2494 o storage_value (warto?ci) 1, wi?c z drugiego Demon Armoru nici. Tak to mniej wi?cej dzia?a.

W silniku za system storage odpowiadaj? dwie funkcje:
getPlayerStorageValue(cid, storageID) - pobiera od gracza warto?? klucza o danym numerze (storageID). Jak ju? wiemy, je?li klucz jeszcze nie zosta? utworzony, to posiada warto?? domy?ln? -1.
setPlayerStorageValue(cid, storageID, storage_value) - zmienia graczowi warto?? storage_value na inn? dla danego klucza storage_ID. Za pomoc? tej funkcji mo?emy zrobi? dwie rzeczy: albo utworzy? nowy klucz o jakiej? warto?ci, albo zmieni? warto?? istniej?cego.

Przyk?ad pierwszy

Teraz pos?u?? si? skryptem. Wida? na nim, w jaki spos?b mo?emy bawi? si? w zmian? warto?ci dla danego klucza. Dzia?a tak:
Kiedy gracz kliknie Use na przedmiot o jakim? UID po raz pierwszy, dostanie sworda i pojawi si? tekst. Kiedy kliknie drugi raz, dostanie bright sworda + tekst. Kiedy kliknie trzeci raz - magic sworda i standardowo wiadomo??. Czwartego miecza za czwartym klikni?ciem nie b?dzie, w zamian za to graczowi uka?e si? sam tekst.

Code:
function onUse(cid, item, fromPosition, itemEx, toPosition)
    [COLOR="green"]if getPlayerStorageValue(cid, 1000) == -1 then[/COLOR]
        doPlayerAddItem(cid, 2376, 1)
        doPlayerSendTextMessage(cid, 25, "Kliknales na skrzynie pierwszy raz i dostales miecz!")
        [COLOR="royalblue"]setPlayerStorageValue(cid, 1000, 1)[/COLOR]
    [COLOR="red"]elseif getPlayerStorageValue(cid, 1000) == 1 then[/COLOR]
        doPlayerAddItem(cid, 2407, 1)
        doPlayerSendTextMessage(cid, 25, "Kliknales na skrzynie drugi raz i dostales lepszy miecz!")
        [COLOR="darkorange"]setPlayerStorageValue(cid, 1000, 2)[/COLOR]
    [COLOR="Magenta"]elseif getPlayerStorageValue(cid, 1000) == 2 then[/COLOR]
        doPlayerAddItem(cid, 2400, 1)
        doPlayerSendTextMessage(cid, 25, "Kliknales na skrzynie trzeci raz i dostales najlepszy miecz!")
        [COLOR="slategray"]setPlayerStorageValue(cid, 1000, 3)[/COLOR]
    [COLOR="blue"]elseif getPlayerStorageValue(cid, 1000) == 3 then[/COLOR]
        doPlayerSendCancel(cid, "Skrzynia nie ma w sobie wiecej mieczy!")
    end
return TRUE
end

if getPlayerStorageValue(cid, 1000) == -1 then - ta linijka sprawdza, czy gracz nie posiada jeszcze StorageID 1000. Je?li nie (storage_value = -1), wykonuje dalsz? cz??? skryptu.

setPlayerStorageValue(cid, 1000, 1) - ta linijka tworzy klucz i nadaje mu warto?? 1. Dzi?ki temu silnik odr??nia sytuacj? przed klikni?ciem (brak klucza) od sytuacji po klikni?ciu (klucz 1000 o warto?ci 1).

elseif getPlayerStorageValue(cid, 1000) == 1 then - sprawdzenie, czy istnieje klucz 1000 o warto?ci 1. Istnieje, wi?c kod zawarty pod instrukcj? wykonuje si?.

setPlayerStorageValue(cid, 1000, 2) - tutaj nast?puje zmiana warto?ci dla klucza 1000. Wcze?niej mia? 1, a ta funkcja powoduje, ?e ma 2.

elseif getPlayerStorageValue(cid, 1000) == 2 then - sprawdzenie, czy gracz ma klucz 1000 o warto?ci 2. Ma, poniewa? StorageID zmieni? warto?? z 1 na 2 po drugim klikni?ciu.

setPlayerStorageValue(cid, 1000, 3) - zmiana storage_value na 3 dla storageID 1000.

elseif getPlayerStorageValue(cid, 1000) == 3 then - tak jak wcze?niej, sprawdzenie, czy gracz ma klucz 1000 o warto?ci 3.

To ju? wszystkie u?ycia storage w skrypcie. Tak zmienia?a si? sytuacja gracza w formie graficznej:

18ym37.png


Uwaga! Mo?na ca?kowicie odebra? dany klucz postaci. Robi si? to zmieniaj?c warto?? klucza z powrotem na -1:

Code:
setPlayerStorageValue(cid, storageID, [COLOR="red"]-1[/COLOR])

Przyk?ad drugi
Ten skrypt dzia?a tak:
Mamy trzy skrzynie: o UniqueID 3005, 3006 i 3007. Z pierwszej leci sword, z drugiej bright sword a z trzeciej magic sword. Gracz mo?e wyci?gn?? tylko jeden miecz.

Typowy skrypt na wyb?r jednej nagrody z questa (wiem, ?e kiepsko napisany, ale tablica i p?tla niepotrzebnie pogmatwa?yby spraw? - musicie mi wybaczy? ; d). Kod:

Code:
function onUse(cid, item, fromPosition, itemEx, toPosition)
	local nagroda1, nagroda2, nagroda3 = 2376, 2407, 2400
	[COLOR="green"]local quest_status = getPlayerStorageValue(cid, 1001)[/COLOR]
		if item.uid == [COLOR="darkorange"]3005[/COLOR] then
			[COLOR="royalblue"]if quest_status == -1 then[/COLOR]
				doPlayerAddItem(cid, [COLOR="darkorange"]nagroda1[/COLOR], 1)
				doPlayerSendTextMessage(cid, 25, "Oto twoja nagroda!")
				[COLOR="red"]setPlayerStorageValue(cid, 1001, 1)[/COLOR]
			else
				doPlayerSendCancel(cid, "Brales juz nagrode z tego questa!")
			end
		elseif item.uid == [COLOR="magneta"]3006[/COLOR] then
			[COLOR="royalblue"]if quest_status == -1 then[/COLOR]
				doPlayerAddItem(cid, [COLOR="magneta"]nagroda2[/COLOR], 1)
				doPlayerSendTextMessage(cid, 25, "Oto twoja nagroda!")
				[COLOR="red"]setPlayerStorageValue(cid, 1001, 1)[/COLOR]
			else
				doPlayerSendCancel(cid, "Brales juz nagrode z tego questa!")
			end
		elseif item.uid == [COLOR="deepskyblue"]3007[/COLOR] then
			[COLOR="royalblue"]if quest_status == -1 then[/COLOR]
				doPlayerAddItem(cid, [COLOR="blue"]nagroda3[/COLOR], 1)
				doPlayerSendTextMessage(cid, 25, "Oto twoja nagroda!")
				[COLOR="red"]setPlayerStorageValue(cid, 1001, 1)[/COLOR]
			else
				doPlayerSendCancel(cid, "Brales juz nagrode z tego questa!")
			end
		end
return TRUE
end

local quest_status = getPlayerStorageValue(cid, 1001) - funkcja sprawdzaj?ca klucz 1001 zosta?a wci?ni?ta do zmiennej quest_status (dla wi?kszej przejrzysto?ci kodu).

if quest_status == -1 then - je?li klucz nie istnieje, to...

setPlayerStorageValue(cid, 1001, 1)
- zmie? warto?? klucza na 1.

3005, nagroda1 - skrzynia o UID 3005 (pierwsza) to nagroda1 (sword).

3006, nagroda2 - skrzynia o UID 3006 (druga) to nagroda2 (bright sword).

3007, nagroda3 - skrzynia o UID 3007 (trzecia) to nagroda3 (magic sword).

Obrazkowo:

2wpo512.png



2a. Storage w silnikach XML.

W silnikach XML i SQL mamy te same funkcje obs?uguj?ce system storage, lecz r??ni si? spos?b przechowywania kluczy i ich warto?ci. W SQLach, jak ?atwo si? domy?li?, klucze trzymane s? w bazie danych (o tym za chwil?), natomiast w XMLach StorageID maj? swoje miejsce w plikach ".xml" poszczeg?lnych graczy. Wchodzimy w data/players/nazwa_gracza.xml. Teraz odszukujemy <storage>. Pomi?dzy <storage> a </storage> znajduj? si? wszystkie klucze i ich warto?ci, jakie posiada player:

2zok9b8.png

Key to klucz, a value - jego warto??. Kiedy gracz otrzyma jaki? StorageID w grze, w jego pliku automatycznie dopisywana jest kolejna linijka z kluczem i warto?ci?.


2b. Storage w silnikach SQL.

Wy?ej nadmieni?em ju?, ?e klucze i warto?ci w silniku SQL znajduj? si? w bazie danych. Wejd?my w swoj? baz? (o ile takow? posiadacie) przez phpMyAdmina. Po lewej stronie szukamy zak?adki player_storage:

334i1rl.png

Klikamy j? i widzimy takie co?:

z9wzs.png

Player_id to numer ID gracza, do kt?rego nale?y dany klucz. ?eby edytowa?/usun?? klucze odpowiedniemu graczowi, najpierw musimy zna? jego ID (nie nick). Mo?na go sprawdzi? w zak?adce players. Key i value - wiadomo. Klikamy o??wek przy kluczu 1001 (krzy?yk usuwa klucz):

2eutu8y.png

Player_id raczej nie zmieniamy, chyba, ?e ten sam klucz o danej warto?ci chcemy zdj?? z jednej postaci i wrzuci? na inn?. Edytuj?c key zmieniamy numer klucza (warto?? zostaje), a edytuj?c value, zmieniamy sam? warto??. Wszystkie zmiany zatwierdzamy guzikiem "Wykonaj".



3. Global Storage.

System global storage dzia?a podobnie jak storage, z t? r??nic?, ?e klucze StorageID dotyczy?y konkretnych graczy, a klucze Global_StorageID odnosz? si? do wszystkich jednocze?nie (mo?na powiedzie?, ?e klucz globalny otrzymuje nie gracz, a silnik). Za global storage odpowiadaj? dwie funkcje:
getGlobalStorageValue(global_storageID) - pobiera z silnika warto?? dla klucza global_storageID. Je?li silnik nie posiada klucza, zwracana jest warto?? -1.
setGlobalStorageValue(global_storageID, global_storage_value) - zmienia silnikowi star? warto?? na warto?? global_storage_value dla klucza global_storageID, lub tworzy silnikowi nowy klucz.

Mo?e to troch? dziwne, ale wszystko wyja?ni si? w przyk?adzie.

Przyk?ad

Skrypt dzia?a tak:
Je?li nikt na serwerze nigdy nie klikn?? danego przedmiotu, to graczowi wy?wietli si? informacja, ?e zrobi? to pierwszy. Je?li kto? kiedykolwiek klikn?? Use, playerowi poka?e si? inny tekst.

Kod:

Code:
function onUse(cid, item, fromPosition, itemEx, toPosition)
	[COLOR="green"]if getGlobalStorageValue(cid, 2000) == -1 then[/COLOR]
		doPlayerSendTextMessage(cid, 25, "Jako pierwszy na serwerze dotknales ten przedmiot.")
		[COLOR="royalblue"]setGlobalStorageValue(cid, 2000, 1)[/COLOR]
	else
		doPlayerSendCancel(cid, "Jakis gracz z tego swiata juz to kiedys dotknal.")
	end
return TRUE
end

if getGlobalStorageValue(cid, 2000) == -1 then - sprawdzenie, czy silnik ma globalny klucz 2000.

setGlobalStorageValue(cid, 2000, 1) - utw?rz w bazie danych globalny klucz 2000 o warto?ci 1 (kt?ry b?dzie dotyczy? ka?dego gracza na serwerze).

Obrazek sobie podarowa?em ; ).
 

Sentil

Ten Typ
Joined
May 11, 2008
Messages
211
Reaction score
85
Odp: "Systemy Storage i Global Storage" - czyli jak dzia?aj? questy

Epilog


9. Prawa autorskie.

Plagiaty w Polsce podlegaj? karze grzywny, ograniczenia wolno?ci, albo pozbawienia wolno?ci do lat 3 (Prawo Autorskie i Prasowe, rozdz. 14., art. 115) - s? ?cigane nie tylko z pow?dztwa cywilnego.

Plagiat jest ?cigany przez prokuratora z pow?dztwa karnego - osoby kt?re go pope?niaj?, s? w kr?tkim czasie wzywane do s?du i przes?uchiwane przez prokuratora, a sprawy tocz? si? szybko, a nie ci?gn? si? latami.

Nie b?d? tolerowa? plagiat?w. Kategorycznie zabraniam kopiowania na inne fora dyskusyjne i strony. Uszanujcie prac?, jak? w?o?y?em w napisanie artyku?u.

35bwis1.png


10. Zako?czenie.

Nie chc? ju? nigdy s?ysze? o problemach ze storage i global storage ; ). Tyle.

To wszystko. Dzi?ki za uwag?, do us?yszenia ; p.

Peace!

Pozdrawiam,
Sentil.
 

Sentil

Ten Typ
Joined
May 11, 2008
Messages
211
Reaction score
85
Odp: "Systemy Storage i Global Storage" - czyli jak dzia?aj? questy

Post zarezerwowany na ewentualne rozszerzenia. //Sentil
 

dominikms1

Senior User
Joined
Feb 6, 2010
Messages
696
Reaction score
66
Odp: "Systemy Storage i Global Storage" - czyli jak dzia?aj? questy

Tyle si? rozpisa? na temat g?upich warto?ci Storage?? No to jest talent :D
Nic tylko pogratulowa?.
Poradnik jest wprost idealny, nic dodawa? chyba nie trzeba.
 
Z

Zbizu

Guest
Odp: "Systemy Storage i Global Storage" - czyli jak dzia?aj? questy

Poradnik przejrzysty temat wyczerpany. Nie dopatrzy?em si? b??d?w.
Co do global storage to bior? si? za pisanie skryptu z funkcj? addevent, aby mo?na by?o zabiera? co? np. raz dziennie/na godzin? ;p
Przydatne dla pocz?tkuj?cych, ja troch? si? przy okazji douczy?em dok?adnie tego ;p
8/10

btw. ja to widz? g??wnie tak w zastosowaniu praktycznym ;p
PHP:
function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerStorageValue(cid, 2010) == -1 then
		doPlayerSendTextMessage(cid, 25, "You have touched this crystal ball. Report it to Eva.")
		setPlayerStorageValue(cid, 2010, 1)

	elseif getGlobalStorageValue(cid, 2000) == -1 then
		doPlayerSendTextMessage(cid, 25, "Congratultions! You are first on server!")
		setGlobalStorageValue(cid, 2000, 1)
	else
		doPlayerSendCancel(cid, "You cannot use this object.")
	end
return TRUE
end
Pozdrawiam.
 

Mix Dem

Advanced User
Joined
Nov 23, 2010
Messages
487
Reaction score
33
Odp: "Systemy Storage i Global Storage" - czyli jak dzia?aj? questy

No poradnik jest tym czego moja glowa oczekiwa?a.
Zawsze chcialem rozgryz? te ,,storage''.
Dzieki Tobie mam to juz z glowy i po 1 przeczytaniu odrazu zalapalem!
Wielki + dla Ciebie.

Pozdrawiam
 

Jogi88

Misiek ; x
Joined
Aug 25, 2008
Messages
1,321
Reaction score
85
Odp: "Systemy Storage i Global Storage" - czyli jak dzia?aj? questy

Poradnik bardzo fajny, przejrzy?cie opisany, fachowo przygotowany, skrypty przygotowane, wyt?umaczone ich u?ycie, pogratulowa? tylko :)

Lecz troch? "zjeba?e?" z tymi prawami autorskimi, mog?e? wystawi?, ?e nie wolno kopiowa? tego a nie straszy? nas prawem, poniewa? nie posiadasz wykupionego prawa autorskiego i ka?dy mo?e kopiowa? to do woli :)

Nie jestem prawnikiem, a moderatorem xd. Z tego co przeczyta?em prawu autorskiemu podlega ka?dy przejaw dzia?alno?ci tw?rczej o indywidualnym charakterze (wliczamy r?wnie? internet). Nie musz? kupowa? praw autorskich do tekstu, kt?ry sam napisa?em. Ju? je posiadam. ?amanie owych praw to r?wnoczesne ?amanie prawa polskiego. Jak si? myl?, to dobra tam =d. //Sen~

Prawa autorskie, musisz wykupi? to jak patent na rzecz, wykupuje si? na dany okres lub na zawsze.
Mog? sobie napisa? jaki? program w c++ kt?ry zachwyci miliony ludzi, dodam sobie linijk?, ?e zakaz edytowania kodu ?r?d?owego bez mojej wiedzy, jaki? skrypter zmieni kod, doda sw?j, program b?dzie lepszy, ja go podam do s?du i co ja tam powiem ?
Prosz? wysoki s?dzie, Jan Kowalski ukrad? mi program po czym zmieni? kod ?r?d?owy oraz wystawi? do sieci, zbiera na tym wi?ksze profity ni? ja.
S?d - Prosz? o dow?d, ?e jest to pana program

I sk?d takowe wzi???? Trzeba wykupi? ; p

Mo?e. Who cares... =d grzeczne pro?by zwykle nie przynosz? rezultat?w. //Sen~
Na forum nie trzeba kupowa? praw autorskich poniewa? z?amanie pro?by Sentil'a zostanie nagrodzone warnem za 10pkt. =D //Sass
 
Last edited by a moderator:

gomez101

Advanced User
Joined
Feb 18, 2010
Messages
164
Reaction score
1
Odp: "Systemy Storage i Global Storage" - czyli jak dzia?aj? questy

Na pocz?tku poradnika totalnie nic nie kmini?em ale teraz to si? wydaje takie prosie:)
 

Uzzio

Advanced User
Joined
Oct 6, 2008
Messages
194
Reaction score
12
Odp: "Systemy Storage i Global Storage" - czyli jak dzia?aj? questy

O Sentil. Widz? ?e nie?le si? napracowa?e?. Sam mia?em kiedy? z tymi Storage problemy. Wszystko, ?adnie, przejrzy?cie wyt?umaczone. Mam nadziej? ?e pomo?e to wielu osobom.
 

Thseim

User
Joined
Jun 24, 2008
Messages
35
Reaction score
1
Odp: "Systemy Storage i Global Storage" - czyli jak dzia?aj? questy

Bardzo dobry poradnik, z pewno?ci? pomo?e wielu osobom, a to dlatego, ?e jest przejrzy?cie i ?adne napisany, bez b??d?w (przynajmniej ja ich nie dostrzeg?em).
Oby tak dalej!
 

Sassin

Forum friend
Joined
Jun 13, 2009
Messages
1,281
Reaction score
107
Odp: "Systemy Storage i Global Storage" - czyli jak dzia?aj? questy

Tyle si? rozpisa? na temat g?upich warto?ci Storage?? No to jest talent :D
Nic tylko pogratulowa?.
Poradnik jest wprost idealny, nic dodawa? chyba nie trzeba.

Jakby na to nie patrze?, je?eli skrypter wyja?ni komu? swoim j?zykiem co to jest storage to mo?e nie zrozumie? jak nie wie nic, a poradniki maj? na celu nauczy? czego? od podstaw. Codo poradnika, to licz? ?e nast?pne b?d? ju? z niego korzysta? i poleci, to takimi lekcjami. ; )
 

Magic

3+3=3!
Joined
Aug 4, 2008
Messages
1,338
Reaction score
180
Odp: "Systemy Storage i Global Storage" - czyli jak dzia?aj? questy

getGlobalStorageValue(global_storageID) - pobiera z silnika warto?? dla klucza global_storageID. Je?li silnik nie posiada klucza, zwracana jest warto?? -1.
setGlobalStorageValue(global_storageID, global_storage_value) - zmienia silnikowi star? warto?? na warto?? global_storage_value dla klucza global_storageID, lub tworzy silnikowi nowy klucz.
Mo?e to troch? dziwne, ale wszystko wyja?ni si? w przyk?adzie.
Code:
function onUse(cid, item, fromPosition, itemEx, toPosition)
    [COLOR=green]if getGlobalStorageValue([COLOR=Red][B]cid[/B][/COLOR], 2000) == -1 then[/COLOR]
        doPlayerSendTextMessage(cid, 25, "Jako pierwszy na serwerze dotknales ten przedmiot.")
        [COLOR=royalblue]setGlobalStorageValue([COLOR=Red][B]cid[/B][/COLOR], 2000, 1)[/COLOR]
    else
        doPlayerSendCancel(cid, "Jakis gracz z tego swiata juz to kiedys dotknal.")
    end
return TRUE
end
if getGlobalStorageValue(cid, 2000) == -1 then - sprawdzenie, czy silnik ma globalny klucz 2000.
setGlobalStorageValue(cid, 2000, 1) - utw?rz w bazie danych globalny klucz 2000 o warto?ci 1 (kt?ry b?dzie dotyczy? ka?dego gracza na serwerze).
Obrazek sobie podarowa?em ; ).
Czerwony kolor.
 

Lord e

User
Joined
Sep 16, 2009
Messages
10
Reaction score
0
Odp: "Systemy Storage i Global Storage" - czyli jak dzia?aj? questy

Poradnik 10/10. ?adnie, przejrzy?cie, na pewno mo?na si? czego? nauczy?. Dobra robota. Napracowa?e? si? ;p
 

Stasiorex

Advanced User
Joined
Dec 6, 2010
Messages
221
Reaction score
12
Odp: "Systemy Storage i Global Storage" - czyli jak dzia?aj? questy

Bardzo Dobry poradnik ;)
teraz ju? wiem na czym to polega ;P
 

Kostek33

Active User
Joined
Aug 29, 2008
Messages
59
Reaction score
1
Odp: "Systemy Storage i Global Storage" - czyli jak dzia?aj? questy

Jak wchodzi?em tu my?la?em ?e b?dzie krotko obja?nione co to i przyk?adowy skrypt ze storage. A tu zdziwko taki d?ugi artyku?, gratulacje. Wszystko bardzo dobrze i zrozumiale napisane :)
 

Wirox

User
Joined
Apr 29, 2009
Messages
31
Reaction score
0
Odp: "Systemy Storage i Global Storage" - czyli jak dzia?aj? questy

Dzi?ki!
Kolejny dobrze napisany poradnik. Jest przejrzysty i dobrze t?umaczy co powoduje ka?da linijka tekstu. Cho? niekt?re kolory tak wal? po oczach, ?e musia?em zaznacza?, i dopiero potem to czyta?em :p Nie wiem tylko jak zrobi?, aby w que?cie dostawa?o si? pojemnik, a w tym pojemniku przedmioty, ale to ju? sam pokombinuj?.
Jeszcze raz dzi?ki, tak trzymaj z jako?ci? poradnik?w.
 
Top