Skocz do zawartości

Inventory + Stacking.


Rekomendowane odpowiedzi

Przykład Inventory v1.0 by David Dark

 

Witam, ktoś prosił wiec zamieszczam przykładzik + tutorial jak zrobic inventory wraz ze stackingiem. Postaram sie to tlumaczyc wszystko jak dzieciom w przedszkolu i mam nadzieje ze komus tym pomoge.

 

Redi? No to walimy.

 

 

Aby rozpocząc naszą pracę potrzebujemy jakis grafik plecaka i przedmiotu, ja ogolnie korzystam z grafik 32x32 wiec takimi posluze sie i w tym przykladzie. Przygotowujemy grafik mniejwiecej takie:

 

plecak.png

 

przedmiot.png

 

Note: zaznaczam ze grafiki sa wyciagniete z miniRPG wiec wara od nich w waszych produkcjach, uzywam ich tylko do tego przykladu. ty thx dzienx

 

Jesli chodzi o plecak to ja akurat korzystam z tak ustawionych kratek oczywiscie kazdy sobie je moze ustawic jak chce moga byc horyzontalnie, nie ma problemu mysle ze po tym tutorialu kazdy dojdzie jak sobie modyfikowac swoj plecaczek.

 

Tworzymy dwa obiekty:

 

o_plecak

o_przedmiot

 

Zajme sie przedmiotem bo z nim jest mniej roboty, a wiec:

 

W create takiego przedmiotu musimy napisac zmienne ktore sa nam potrzebne. Jakie? No to juz zalezy od ciebie czy ma tam byc atak, czy obrana, czy jest zjadalny czy to zbroja itd. oraz sprite_index ktory odpowiada za grafike. Bedzie to wiec wygladac mniejwiecej tak:

 

GML
//Create

sprite_index = s_przedmiot;

value1 = 1; //mowi ze to bron, powiedzmy ze 2 to zbroja a jesli 3 to np napoj z zyciem czy cos takiego.

value2 = 5; // atak. Powiedzmy wiec ze ma ataku 5 i w jakims tam skrypcie walki bedziesz wykorzystywac ta wartosc aby zadac obrazenia potworkowi.

value3 = 1; // czy mozna go stackowac? 1 = tak, 0 = nie.

value4 = 1; // jesli sie stakuje to ile przedmiotow doda jesli sa juz takie same przedmioty w inventory.

value5 = 5; // maksymalna ilosc przedmiotow tego typu ktore mozna stackowac na jednej kratce</span></span>

 

No dobra wiec zobaczmy co tu zrobilismy:

sprite_index jest nam potrzebny aby bylo widac przedmiot na ekranie i w plecaku, poprostu wpisujemy tak jak nazwalismy sprita.

value1 i value 2 to takie umowne wartosci ktore poprostu wrzucilem, tak naprawde to mozecie miec ich ile chcecie, nie wiem jak skomplikowana i jaka gre robisz wiec nie wiem ile ci ich jest potrzebnych, przedmioty w miniRPG maja ich naprzyklad 55 wiec jest mi wygodniej pisac np tak:

GML
value1 = 1 //zbroja

value2 = 4 //obrona

value3 = 0 // obrona na trucizne

value4 = 2 // obrona na ogien

//...

//... itd itd.</span></span>

 

niz

GML
zbroja = 1

obrona = 4

trucizna = 0

ogien = 2

 

Sami zdecydujcie jak wam latwiej ;) OK w kazdym razie wracajac do tego kodu w create.

Mamy jeszcze value3 czyli czy mozna stackowac, w sumie nie ma co tlumaczyc, zbroje np. glupio jest stackowac wiec dajemy 0 ale takie jabuszka czy monety dobrze jest stackowac wtedy 1.

value4 = ja daje zawsze 1. Jeden przedmiot = +1 do stacka proste. Mozna poexperymentowac z jakimis losowymi wartosciami ale nie radze, bo to troche wiecej roboty.

value5 maksymalna ilosc przedmiotow danego typu ktore moga byc na jednej kratce. Ja mam rozne, jablek zmiescisz wiecej niz np sztabek zlota dlatego jablka maja 20 a sztabki 5. Mozna tez dac wszystkim przedmiotom taka sama wartosc jesli nie chce sie w to bawic lub nie uzywac tej wartosci jesli chcemy aby przedmioty mozna bylo stackowac w nieskonczonosc. Ja bym nie dawal wiecej niz 99 lub moze nawet 999 bo juz 1000 wychodzi troche za kratke i liczby beda na siebie najezdzac.

 

Mam nadzieje ze wszyscy jak narazie rozumieja i sie nie pogubili :P

 

w Draw wiadomo trzeba namalowac nasz itemek a wiec:

GML
//draw

draw_sprite(sprite_index,image_index,x,y);

 

 

Zajmiemy sie teraz naszym plecakiem :-) robimy event create i wpisujemy tam takie cos:

 

GML
global.inventory[1,1] = false // pelny

global.inventory[2,1] = false // pelny

global.inventory[3,1] = false // pelny

global.inventory[4,1] = false // pelny

global.inventory[5,1] = false // pelny

global.inventory[6,1] = false // pelny

global.inventory[7,1] = false // pelny

global.inventory[8,1] = false // pelny

global.inventory[1,2] = view_xview[0]+9+(32*0)// x

global.inventory[1,3] = view_yview[0]+31+(32*0)// y

global.inventory[2,2] = view_xview[0]+9+(32*1)// x

global.inventory[2,3] = view_yview[0]+31+(32*0)// y

global.inventory[3,2] = view_xview[0]+9+(32*2)// x

global.inventory[3,3] = view_yview[0]+31+(32*0)// y

global.inventory[4,2] = view_xview[0]+9+(32*3)// x

global.inventory[4,3] = view_yview[0]+31+(32*0)// y

global.inventory[5,2] = view_xview[0]+9+(32*0)// x

global.inventory[5,3] = view_yview[0]+31+(32*1)// y

global.inventory[6,2] = view_xview[0]+9+(32*1)// x

global.inventory[6,3] = view_yview[0]+31+(32*1)// y

global.inventory[7,2] = view_xview[0]+9+(32*2)// x

global.inventory[7,3] = view_yview[0]+31+(32*1)// y

global.inventory[8,2] = view_xview[0]+9+(32*3)// x

global.inventory[8,3] = view_yview[0]+31+(32*1)// y</span></span>

 

OK troche moze sie to wydawac trudne do zrozumienia ale juz tlumacze:

 

global.inventory[1,1] = false // pelny

 

Mamy cos takiego generalnie ta zmienna sluzy do tego ze gdy klikniemy na przedmiot to ona nam mowi czy ta kratka jest wolna. Kratki sa ponumerowane od 1 do 8 i sa po kolej z gory na dol od lewej do prawej, mozecie miec ich wiecej wystarcy dopisac sobie te zmienne. Teraz pewnie pytacie o co biega z tymi liczbami w [a,b] ?

 

Tlumacze i to jak najprosciej bo jesli to zrozumiecie to pojdzie wam reszta tutka jak po masle. Zamiast np bawic sie w cos takiego jak

GML
kratka1_pusta = true

kratka1_pozycja_x = x

kratka1_pozycja_y = y

 

kratka2_pusta = true

kratka2_pozycja_x = x

kratka2_pozycja_y = y

 

kratka3_pusta = true

kratka3_pozycja_x = x

kratka3_pozycja_y = y

 

co wyglada lipnie i nie ulatwia nam zycia potem o czym sie przekonacie gdy do tego dojdziemy. Mamy wiec zmienen tego typu:

 

GML
kratka[A,B] = 0

 

Teraz tlumacze: slowo kratka mowi nam jasno ze ta zmienna odpowiada za jakas kratke (mam tu namysli kratke w plecaku czyli miejsce) liczba A mowi nam jaka to jest kratka. czy pierwsza czy druga czy trzecia itd. Rozumiecie wiec teraz ze w kodzie GML na gorze gdzie mamy inventory i zmienia nam sie pierwsza liczba od 1 do 8 oznacza to ze to sa rozne kratki, ale o co biega z liczba B?

Otoz liczba B niejako mowi nam co chcemy od tej kratki A, do jakiej zmiennej chcemy sie odniesc czy ktora zmienic i wogole co chcemy od tej kratki A. Mam nadzieje ze jasno pisze jakos latwiej tego teraz zrobic nie umiem. Co wiec oznacza ta liczba 1 na drugim miejscu w naszym kodzie inventory? Ona nam mowi czy ta kratka w plecaku jest pusta ( bo = false; ).

 

Dalej mamy troche wiecej kodu. zmienia sie liczba B w tych kratkach na 2 i 3. liczba 2 odpowiada za pozycje x natomiast 3 za pozycje y. wiec cos takiego powie nam duzo o kratce numer jeden w plecaku:

 

GML
kratka[1,1] = false;

kratka[1,2] = 0;

kratka[1,3] = 0;

Mowimy to o tej samej kratce (same jedynki na pozycji A), B odpowiada ze rozne atrubuty kratki.

[1,1] = false; oznacza ze kratka jest pusta

[1,2] = 0; ze pozycja x = 0

[1,3] = 0; ze pozycja y = 0

a ze x i y rownaja sie zeru wiec nasz kratka jest w lewym gornym rogu ekranu.

 

Teraz wam tylko powiem szybko dlaczego sa takie wartosci w kodzie jakie sa: jesli ustawimy nas zobiekt plecaka w lewym gornym rogu ekranu to przedmioty idealnie beda sie ustawiac w kratkach.

 

GML
global.inventory[7,2] = view_xview[0]+9+(32*2)// x

global.inventory[7,3] = view_yview[0]+31+(32*1)// y</span></span>

view_xview itd wiemy co to. dodajemy 9 bo pierwsza kratka w inventory jest narysowana 9 pikseli od rogu obrazka a +31 bo od gory jest do kratki 31 pikseli. Chodzi oczywiscie o ten obrazek ktory pokazalem u gory gdy wymalujecie wlasne plecaki beda to inne liczby. jesli chodzi o to (32x2) itd to tylko ulatwienie w liczeniu, wiem ze kratka 7 ( [7,2] jest 2 drugim rzedzie na 3 miejscu wiec sobie mnoze pozycje x dwa razy o 32 piksele (tyle ile maja kratki) y natomiast o 1 (jeden rzad w dol) zamiast bawic sie w wpisywanie roznych liczb.

 

OK to juz mamy za soba ale czeka nas wieeecej roboty.

 

w draw obiektu plecak wpisujemy

GML
draw_sprite(global.interface_inventory,0,view_xview[0],view_yview[0]);

 

if (global.inventory[1,36] <> noone) {draw_sprite(global.inventory[1,4],global.inventory[1,4],view_xview[0]+920+24+(32*0),view_yview[0]+431+31+(32*0));}

if (global.inventory[2,36] <> noone) {draw_sprite(global.inventory[2,4],global.inventory[2,4],view_xview[0]+920+24+(32*1),view_yview[0]+431+31+(32*0));}

if (global.inventory[3,36] <> noone) {draw_sprite(global.inventory[3,4],global.inventory[3,4],view_xview[0]+920+24+(32*2),view_yview[0]+431+31+(32*0));}

if (global.inventory[4,36] <> noone) {draw_sprite(global.inventory[4,4],global.inventory[4,4],view_xview[0]+920+24+(32*3),view_yview[0]+431+31+(32*0));}

if (global.inventory[5,36] <> noone) {draw_sprite(global.inventory[5,4],global.inventory[5,4],view_xview[0]+920+24+(32*0),view_yview[0]+431+31+(32*1));}

if (global.inventory[6,36] <> noone) {draw_sprite(global.inventory[6,4],global.inventory[6,4],view_xview[0]+920+24+(32*1),view_yview[0]+431+31+(32*1));}

if (global.inventory[7,36] <> noone) {draw_sprite(global.inventory[7,4],global.inventory[7,4],view_xview[0]+920+24+(32*2),view_yview[0]+431+31+(32*1));}

if (global.inventory[8,36] <> noone) {draw_sprite(global.inventory[8,4],global.inventory[8,4],view_xview[0]+920+24+(32*3),view_yview[0]+431+31+(32*1));}

 

if (global.inventory[1,5] > 1) {draw_text(view_xview[0]+24+(32*0),view_yview[0]+31+(32*0),global.inventory[1,5]);}

if (global.inventory[2,5] > 1) {draw_text(view_xview[0]+24+(32*1),view_yview[0]+31+(32*0),global.inventory[2,5]);}

if (global.inventory[3,5] > 1) {draw_text(view_xview[0]+24+(32*2),view_yview[0]+31+(32*0),global.inventory[3,5]);}

if (global.inventory[4,5] > 1) {draw_text(view_xview[0]+24+(32*3),view_yview[0]+31+(32*0),global.inventory[4,5]);}

if (global.inventory[5,5] > 1) {draw_text(view_xview[0]+24+(32*0),view_yview[0]+31+(32*1),global.inventory[5,5]);}

if (global.inventory[6,5] > 1) {draw_text(view_xview[0]+24+(32*1),view_yview[0]+31+(32*1),global.inventory[6,5]);}

if (global.inventory[7,5] > 1) {draw_text(view_xview[0]+24+(32*2),view_yview[0]+31+(32*1),global.inventory[7,5]);}

if (global.inventory[8,5] > 1) {draw_text(view_xview[0]+24+(32*3),view_yview[0]+31+(32*1),global.inventory[8,5]);}

 

Tu mam obawy ze moze byc jakis blad ale mysle ze jest ok. To nam rysuje przedmioty w odpowiednim miejscu gdy juz trafia do plecaka. Natomiast druga czesc pisze nam ile przedmiotow jest w danej kratce jesli jest ich wiecej niz 1 :P ok wiemy co juz znacza liczby [1,b] [2,b] [3,b] tak? no jak nie wiemky to niezla lipa radze wrocic do poczatku tego tutka. Dla przypomnienia jednak: jest to kratka do ktorej sie odnoscimy. Ale moment pojawiaja sie nam tu dwie nowe wartosci na miejscu liczby B, sa to 4 i 5. O co chodzi? 4 to obrazek przedmiotu, 5 to natomiast liczba stackowanych przedmiotow w danej kratce. Mam nadzieje ze wszystko jasne. Bedzie jeszcze czas na pytania w razie czego ale jeszcze bardziej debilnie to wytlumacze:

 

inventory[3,4] mowi nam 'siema! jestem 3 kratka i rusyje sobie taki oto obrazeczek przedmiotu, heyabanana'.

inventory[5,5] mowi 'siema stary mam w sobie tyle a tyle tego przedmiotu ktory obrazek na mnie widzisz'

 

 

nie wiedzialem ze bede mial tyle rycia przy tym tutku :P

 

Dobra jedziemy dalej w morde jeza. Mamy juz przedmiot. Mamy juz wartosci. Mamy wyrysowany plecak, mamy gotowe kratki ktore sa gotowe przyjac nasz przedmioty. Czas wrzucic jakis przedmiot do plecaka.

 

W obiekcie przedmiotu w prawym przycisku myszki (jesli chcemy zeby akurat ten przycisk wrzucam nam przedmiot do plecaka, moze byc inny ja nie wnikam.

 

GML
//right pressed

if distance_to_object(o_bohater) >= 5 //jesli przedmiot jest w odpowiedniej odleglosci od bohatera

{

for (ii=1; ii<=8; ii+=1) //stacking. Szukamy przedmiotu tego samego typu i jesli jest to go tam wrzucimy (1)

{

if sprite_index = global.inventory[ii,4] //szukamy na podstawie spritu (2)

&& global.inventory[ii,7] = 1 //mozna stackowac? Jasne! (3)

&& global.inventory[ii,5] < global.inventory[ii,6] //Czy stack nie jest pelny (4)

{

global.inventory[ii,5] += 1 // dodaje przedmiot i go niczszy (5)

instance_destroy()

exit;

}

}

for (ii=1; ii<=8; ii+=1) //nie ma przedmiotu wiec go dodaje do nowej kratki (6)

{

if global.inventory[ii,1] = 0

{

global.inventory[ii,1] = 1 //przypisywanie wartosci przedmiotu do wlasciwosci kratki i zniszczenie przedmiotu. (7)

global.inventory[ii,4] = sprite_index;

global.inventory[ii,5] = value4;

global.inventory[ii,6] = value5;

global.inventory[ii,7] = value3;

 

instance_destroy()

break;

}

}

 

OK teraz rzecz najtrudniejsza, jak to zrozumiesz to tablice masz w malym palcu. Zaczynamy od petli for taki kod jaki tam widzisz przeskakuje nam od wartosci 1 do 8 o wartosc 1.

(1) Zmienna ii jest tymczasowa, poprostu jej potrzebujemy do petelki, mozesz ja nazwac jak chcesz.

Pierwsza czesc kodu ii=1 mowi nam ze zaczynamy nasz liczenie od liczby 1 druga czesc ii<=8 mowi nam do jakiej liczby lecimy, a ma ta liczba byc mniejsza lub rowna 8, wiec jaka to liczba? No 8, nie inaczej. Ostatnia czesc ii+=1 mowi nam o jaka liczbe bedziemy skakac. o 1 wiec sprawdzimy liczby 1,2,3,4,5,6,7,8.

 

Teraz wpisujac liczbe ii w miejsce A poprostu zmieniamy jej wartosc. dzieki temu [ii,B] sprawdzimy rozne wartosci B kratek ktorych chcemy a ze liczba leci od 1 do 8 to sprawdzimy wszystkie kratki ktore mamy w inventory. Czaicie mam nadzieje? :P

 

(2) Jesli petla for znajdzie sprite ktory odpowiada wartosci odpowiedniej kratki [ii,4] (4 to sprite przedmiotu w danej kratce) i zobaczy ze mozna ten przedmiot stackowac (3) i kratka nie jest wypelniona do pelna (4) to doda przedmiot do stacka i zniszczy przedmiot (5)

 

Zaznaczam tu ze obiekt przedmiotu nie idzie do plecaka, poprostu kopiujemy informacje o przedmiocie do zmiennych i przechowujemy je, obiekt przedmiotu zostaje zniszczony.

 

Exit; na koncu jest bardzo wazny, nie chcemy zeby przedmiot sie zestackowal i jeszcze dodal do innej kratki prawda? Temu sluzy ten kod, skoro dodales juz przedmiot do jednej kratki nie laduj go do innej, wyjdz --> exit; :P

 

Ale co jesli nie mamy takiego samego przedmiotu w plecaku jaki wsadzamy? Skrypt po wyszukaniu tego ze nie mamy takiego przedmiotu w plecaku i nie ma go z czym stackowac (1)

przejdzie dalej (6) i doda go do pierwszej wolnej kratki.

Przypisze wartosci przedmiotu do zmiennych (7) 'wrzuci' nam do kratki przedmiot a obiekt przedmiotu zniszczy.

 

Teraz wazna rzecz, moze sie nam niezle rozregulowac jesli zle bedziemy przypisywac wartosci.

 

Ja to troche pomieszalem bo np

GML
inventory[ii,7] = value3

 

pilnujcie sobie lepiej zeby bylo tak:

 

GML
inventory[ii,7] = value7

 

Mniej draki :) Jakby tu wytlumaczyc jeszcze to przypisywanie, latwo na tym index_sprite.

 

Jak widzimy przypisujemy index_sprite wartosci inventory[ii,4] dlatego gdy mamy kod w draw i chcemy narysowac ten przedmiot to uzywamy liczby 4 tam gdzie jest B bo ta wartosc w kratkach odpowiada za to co kratka wyrysuje. Tak samo jest z innymi wartosciami. Oczywscie moze byc ich wiecej tak jak napisalem wczesniej, mozesz sobie ustalic ze wartosc 20 np. [A,20] bedzie odpowiadala za to jak ten przedmiot jest unikalny czy cos w tym stylu.

 

Jesli cos nie jest zrozumiale zajrze tu jeszcze w nastepnych dniach mimo ze mam sporo roboty przy wlasnym projekcie :) Pisalem tego tutka troche na szybko bo sie spiesze a w sumie obiecalem ze bedzie na wczoraj wiec mimo ze moze byc lipny wrzucam. Jutro zajrze do tuta i pozbieram do kupy to co jest nie tak, wiec literowki, bledy i niejasnosci musicie mi wybaczyc, jutro sie poprawie :)

 

Walcie jak macie z czyms problemy jutro na nie wszystkie odpowiem. Aha napisze takze jak wyciepac przedmiot z plecaka na ziemie, dzis braklo czasu :(

 

 

Good luck.

Odnośnik do komentarza
Udostępnij na innych stronach

w draw obiektu plecak wpisujemy

[KOD]

 

Nie prościej skorzystać w tym momencie z pętli for? Podobnie w CREATE: wykorzystać zmienną opisującą wymiary plecaczka zamiast stałych wartości; mam niejasne wrażenie, iż modyfikowanie silnika przyszłości z tego względu mogłoby być kłopotliwe. Dodatkowo skorzystałbym z tablic dla każdych zmiennych z indeksami porządkowymi, zawsze to daje możliwość dynamicznego odwołania do nich. Poza tym, bez testowania przykład wydaje się ok :).

Odnośnik do komentarza
Udostępnij na innych stronach

Tak jak kolega wyżej na for będzie lepiej:

Create

GML
var i,j,a;

a=1

for (j=0;j<=1;j+=1;){

for (i=0;i<=3;i+=1;){

global.inventory[a,1] = false // pelny

global.inventory[a,2] = view_xview[0]+9+(32*i)// x

global.inventory[a,3] = view_yview[0]+31+(32*j)// y

a+=1

}

}

DRAW:

GML
draw_sprite(global.interface_inventory,0,view_xview,view_yview);

var i,j,a;

a=1

for (j=0;j<=1;j+=1;){

for (i=0;i<=3;i+=1;){

if (global.inventory[a,36] <> noone) {draw_sprite(global.inventory[a,4],global.inventory[a,4],view_xview+920+24+(32*i),view_yview+431+31+(32*j));}

if (global.inventory[a,5] > 1) {draw_text(view_xview+920+24+(32*i),view_yview+431+31+(32*j),global.inventory[a,5]);}

a+=1

}

}

Tylko nie wiem dlaczego dałeś w draw_text c_white jak tam są tylko 3 opcje(x,y,text)

PS:Jak zauważycie jakiś błąd to poprawcie mnie.

Odnośnik do komentarza
Udostępnij na innych stronach

Zgubiłem się :P

Dasz przykład?

 

Hmm.. napisales posta po 10 minutach od tego jak ja zalozylem ten temat. Ja meczylem sie z opisem itd. 40 minut. Do momentu az sie spedzisz 40 minut na studiowaniu tego co napisalem to nie pisz mi takich postow. Nie po to sie mecze i poswiecam swoj czas zeby ktos cos zrozumial gdy moglbym wrzucic przyklad zrbiony w minut 10 i nie kapowalbys nic a pewnie i tak pisalbys tu posty ze czegos nie jarzysz i musialbym zrobic to co zrobilem w poscie powyzej i wrocilbym do punktu wyjscia.

 

Jesli nie czaisz/nie chcesz czaic do juz nie moj problem. Dam ci tylko malego hinta: jak chcesz przyklad to wez ten kod ktory wpisalem powyzej tam gdzie trzeba i juz, masz przyklad, wystarczy ctrl+c i ctrl+v.

 

 

@Jakim

 

Masz absolutna racje :) sam bede musial posprzatac troche w kodzie. Jest tez dobra strona tego ze napisalem tak a nie z petlami for, jest to bardziej czytelne o co biega z tablicami. Petle for wytlumaczylem potem wiec jesli ktos zrozumial o co chodzi to sam sobie to zmodyfikuje tak jak ediepl ^^

 

@ediepl

 

No super rozwiazanie, tylko ze zmienna a tez musisz zapetlic :) a nie dodac +1 na koncu skryptu.

 

Co do bledow w moim kodzie takich z tym w draw, to takie przeoczenie, wszystko bedzie poprawione, ogolnie mam wlasny skrypt do rysowania tekstu i nie zdazylem tego usunac.

 

Dzis niestety nie bede mial czasu zeby bardziej poprawic bledy i napisac skrypt do wyrzucania przedmiotu z plecaka, zrobie to najprawdopodobniej jutro, dzisiaj zaczynam nowa prace i nie wiem czy nie pracuje jutro. Nie bylo mnie dzis praktycznie w domu i nie wsiadalem na kompa wiec nie bylem w stanie nic zrobic. Sory za opoznienie i dzieki za zrozumienie ^^

 

Houk.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 1 miesiąc temu...
Zmienna ii jest tymczasowa, poprostu jej potrzebujemy do petelki, mozesz ja nazwac jak chcesz.

Pierwsza czesc kodu ii=1 mowi nam ze zaczynamy nasz liczenie od liczby 1 druga czesc ii<=8 mowi nam do jakiej liczby lecimy, a ma ta liczba byc mniejsza lub rowna 8, wiec jaka to liczba? No 8, nie inaczej. Ostatnia czesc ii+=1 mowi nam o jaka liczbe bedziemy skakac. o 1 wiec sprawdzimy liczby 1,2,3,4,5,6,7,8.

więc chyba na nic.

Hmm.. napisales posta po 10 minutach od tego jak ja zalozylem ten temat. Ja meczylem sie z opisem itd. 40 minut. Do momentu az sie spedzisz 40 minut na studiowaniu tego co napisalem to nie pisz mi takich postow. Nie po to sie mecze i poswiecam swoj czas zeby ktos cos zrozumial gdy moglbym wrzucic przyklad zrbiony w minut 10 i nie kapowalbys nic a pewnie i tak pisalbys tu posty ze czegos nie jarzysz i musialbym zrobic to co zrobilem w poscie powyzej i wrocilbym do punktu wyjscia.

 

Jesli nie czaisz/nie chcesz czaic do juz nie moj problem. Dam ci tylko malego hinta: jak chcesz przyklad to wez ten kod ktory wpisalem powyzej tam gdzie trzeba i juz, masz przyklad, wystarczy ctrl+c i ctrl+v.

oj już się nie obrażaj.

btw. oszukałeś nas - "Przykład Inventory v1.0 by David Dark

 

Witam, ktoś prosił wiec zamieszczam przykładzik + tutorial jak zrobic inventory wraz ze stackingiem."

Ja tu widzę tylko tutka.

Odnośnik do komentarza
Udostępnij na innych stronach

Mnie interesują dwie rzeczy:

1. Jak tu się odbywa wyrzucanie przedmiotów z plecaka ?

2. Jak tu się odbywa przenoszenie przedmiotów do innej kratki bo np. taki mam kaprys ?

3. Jak tu się będzie odbywał handel ? Typu jest mój inv po lewej a po prawej handlarza ?

 

Nie pytam dlatego, że chcę go użyć (bo mam swój skończony prawie) ale z ciekawości ;), być może coś przeoczyłem.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Straszny ten przykład. Brak pętli, za dużo zmiennych (sporo rzeczy dałoby się uprościć). W tej samej ilości kodu to ja mam jeszcze sklepy, podgląd nowych statystyk i wczytywanie inventory upakowanego w zewnętrzny plik.

Odnośnik do komentarza
Udostępnij na innych stronach

Straszny ten przykład. Brak pętli, za dużo zmiennych (sporo rzeczy dałoby się uprościć). W tej samej ilości kodu to ja mam jeszcze sklepy, podgląd nowych statystyk i wczytywanie inventory upakowanego w zewnętrzny plik.

To może kiedyś zamieść przykład, dobry system Inwenarza się przyda napewno. :P

Mówie kiedyś, bo robicie teraz Aliena, więc nie ma co wam wchodzić w parade, a jak byś miał wolny czas to byś napisał taki przykład. :)

Odnośnik do komentarza
Udostępnij na innych stronach

GML
//right pressed

if distance_to_object(o_bohater) >= 5 //jesli przedmiot jest w odpowiedniej odleglosci od bohatera

{

for (ii=1; ii<=8; ii+=1) //stacking. Szukamy przedmiotu tego samego typu i jesli jest to go tam wrzucimy (1)

{

if sprite_index = global.inventory[ii,4] //szukamy na podstawie spritu (2)

&& global.inventory[ii,7] = 1 //mozna stackowac? Jasne! (3)

&& global.inventory[ii,5] < global.inventory[ii,6] //Czy stack nie jest pelny (4)

{

global.inventory[ii,5] += 1 // dodaje przedmiot i go niczszy (5)

instance_destroy()

exit;

}

}

for (ii=1; ii<=8; ii+=1) //nie ma przedmiotu wiec go dodaje do nowej kratki (6)

{

if global.inventory[ii,1] = 0

{

global.inventory[ii,1] = 1 //przypisywanie wartosci przedmiotu do wlasciwosci kratki i zniszczenie przedmiotu. (7)

global.inventory[ii,4] = sprite_index;

global.inventory[ii,5] = value4;

global.inventory[ii,6] = value5;

global.inventory[ii,7] = value3;

 

instance_destroy()

break;

}

}

for (ii=1; ii<=8; ii+=1)- nie wiem na co te ii zamienić ;d

Odnośnik do komentarza
Udostępnij na innych stronach

Młody, do pętli for, można dać każdą zmienną która ma jakąś wartość.

Autor mowił, że ktoś może(ale nie musi) zmienić sobie zmienną ,,ii" na swoją np. ,,slonce", ale nie musisz tego zmieniać, poza tym jak zmienisz ii na inną zmienną to efekt ten sam.

Odnośnik do komentarza
Udostępnij na innych stronach

Mnie interesują dwie rzeczy:

1. Jak tu się odbywa wyrzucanie przedmiotów z plecaka ?

To jest po prostu przepisywanie zmiennych z itemu do danej kratki nic wielkiego.

 

Na 2 i 3 to trzeba by było samemu pomyśleć i trochę pogłówkować przede wszystkim żeby wrzucać do danej kratki musiałbyś mieć skrypt rozpoznający na którą kratkę wcisnąłeś autor miał napisać skrypt który pozwoli wyrzucać itemy więc pewnie uraczy nas takim albo nie bo nie będzie miał czasu co do handlarza to musisz narysować zupełnie nowy interface albo rysować dwa ekwipunki i przenoszenie ich co też wiąże się z rozpoznaniem pozycji myszki, trzeba czekać na ten skrypt i liczyć że nie długo David go dopiszę choć miał być następnego dnia a tu już prawie miesiąc stuknął.

Odnośnik do komentarza
Udostępnij na innych stronach

więc chyba na nic.

 

oj już się nie obrażaj.

btw. oszukałeś nas - "Przykład Inventory v1.0 by David Dark

 

Witam, ktoś prosił wiec zamieszczam przykładzik + tutorial jak zrobic inventory wraz ze stackingiem."

Ja tu widzę tylko tutka.

Kto tu sie obraza? Wkur... mnie tylko jak ktos chce pomocy ja mu wykladam wszystko jak na talerzu a gosc po 5 minutach mi pisze ze nie czai i mam mu zrobic gotowca. 5 minut... duzo sie po takim czasie nei zrozumie. Pozatym to co napisalem jest lepsze niz poprostu przyklad, staram sie tlumaczyc rzeczy w naprawde prosty sposob wiec jakby sie tak troche wczytac to sie skapuje praktycznie wszystko. Jak sie nie chce zrozumiec to wystarczy to skopiowac i wkleic do GMa, wszystko opisalem tyle.

 

Gdzie ten przykładzik ?

I co zrobić z tymi II , bo mi nie działaaaa :crying: !?

z ii nic nie robisz to tylko zmienna do petli.

 

Mnie interesują dwie rzeczy:

1. Jak tu się odbywa wyrzucanie przedmiotów z plecaka ?

2. Jak tu się odbywa przenoszenie przedmiotów do innej kratki bo np. taki mam kaprys ?

3. Jak tu się będzie odbywał handel ? Typu jest mój inv po lewej a po prawej handlarza ?

 

Nie pytam dlatego, że chcę go użyć (bo mam swój skończony prawie) ale z ciekawości ;), być może coś przeoczyłem.

1. mniejwiecej chodzi o to ze tworzysz nowy obiekt przypisujesz mu zmienne z odpowiedniej kratki. Wszystkie zmienen z tej kratki = noone i jest. Napisze ten przyklad wkoncu ale narazie nie dam rady przykro mi, postaram sie w najblizszym czasie.

 

2. Nie ma czegos takiego w tym przykladzie, przedmiot jest wrzucany do pierwszej wolnej kratki.

 

3. Handel to calkiem inna sprawa. Ja to robie po swojemu, niech to jakies spece wam pokaza bo jedna polowa uzytkownikow nie bedzie tego czaic a druga bedzie mi pisac ale kiepski przyklad wrzucam. Krew w piach szkoda mojego czasu.

 

Straszny ten przykład. Brak pętli, za dużo zmiennych (sporo rzeczy dałoby się uprościć). W tej samej ilości kodu to ja mam jeszcze sklepy, podgląd nowych statystyk i wczytywanie inventory upakowanego w zewnętrzny plik.

 

No to zrob swoj, ludzie tutaj non stop o cos prosza, a gowno widac zeby sie dzialo. Duzo czasu ci to nie zajmie tyle chyba wiesz, wiec tlumaczenie bo almora bo aliens raczej nie wchodzi tu w gre. Forum to praktycznie same flame'y a admini rzucaja tylko haslo 'kiepskie' jak ktos cos zrobi.

 

I wez pod uwage, ze jest tu masa ludzi ktora nie kapuje jak sie im cos tlumaczy jak w szkole informatycznej, to normalni kolesie ktorzy chca zrobic gre albo dwie i cos skapowac, jak sie robi przyklad tlumaczac cos trudnym jezykiem to efektow raczej nie zauwarzysz, taka mala rada.

 

To jest po prostu przepisywanie zmiennych z itemu do danej kratki nic wielkiego.

 

Na 2 i 3 to trzeba by było samemu pomyśleć i trochę pogłówkować przede wszystkim żeby wrzucać do danej kratki musiałbyś mieć skrypt rozpoznający na którą kratkę wcisnąłeś autor miał napisać skrypt który pozwoli wyrzucać itemy więc pewnie uraczy nas takim albo nie bo nie będzie miał czasu co do handlarza to musisz narysować zupełnie nowy interface albo rysować dwa ekwipunki i przenoszenie ich co też wiąże się z rozpoznaniem pozycji myszki, trzeba czekać na ten skrypt i liczyć że nie długo David go dopiszę choć miał być następnego dnia a tu już prawie miesiąc stuknął.

Jeszcze raz, przykro mi ale no nie mam czasu mam zasrany praktycznie kazdy dzien.

 

to na początku daj var ii;

 

Moze pomoc :)

 

 

I powiem to jeszcze raz, nie mam naprawde czasu, ostatnio zmienialem prace 3 razy, mam z czasem kompletnie przesrane, w domu jestem co 3 dzien bo robie od rana do wieczora, wlasnie mi sie kapela rozkreca powoli co jest moim glownym priorytetem, kodzeniem zajmuje sie tylko dla hobby. Jak juz jakims cudem na kodzenie znajde czas to zajmuje sie miniRPG, a spotkac sie z dziewczyna i odpoczac tez by wypadalo.

 

Jak sie znajdzie jakis boss ktory zajmuje sie praktycznie tylko programowaniem to milo by bylo jakby zamiast tylko krytykowac zrobil cos dla ludzi. Czekajcie na litosc albo az ja znajde czas.

 

I nie szukam z nikim zwady ani nie mam do nikogo mega problemow ale sa sytuacje na tym forum ktore irytuja.

 

Pisze z roboty na szybko wiec nie mam czasu sprawdzic bledow wiec musicie mi je wybaczyc.

 

Milego dnia.

Odnośnik do komentarza
Udostępnij na innych stronach

Ej, ej, stary nie spinaj.Ludzie chcą pomocy, bo nie myślą twoim tokiem myślenia i nie wszystko od razu zrozumieją.Uwierz, że gnysek bardzo dobry przykład by zrobił, ale tak samo jak ty, on ma swoje sprawy i w życiu i w świecie informatyki (AT).

Oczywiste jest to, że jak się robi poradnik, to nie każdy go zrozumie, tak jak mówiłem wcześniej, każdy ma własny tok myślenia i tego nie zmienisz.

A ciebie akurat nierozumiem, dajesz tutka bez przykładu, żeby ludzie zamiast go wklejać do swojej gry, zaczeli czytać i starać się zrozumieć, a jaki tego sens, skoro wszystko mają na tacy i, i tak mogą sobie kopiować dowoli?

Pozatym przykład byłby lepszy dla tych co chcą zrozumieć to, ponieważ już po ściągnięciu mogliby zobaczyć jak działa twój Inwentarz i analizować kod.

Odnośnik do komentarza
Udostępnij na innych stronach

Czy to takie trudne kopiuj i wklej, ludzie nie róbcie jaj.

EDIT: Zmieniam zdanie, to jest sfarmazolone, zaraz napisze poprawioną wersję i wrzucę.

EDIT2: Przerobiłem, odchudziłem https://gmclan.org/up7191_12_inventory.html

PS: W pętlach for zmieńcie sobie na

GML
for (j=0;j<=7;j+=1;){

for (i=0;i<=3;i+=1;){

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...