Skocz do zawartości

przyklad inventory


Rekomendowane odpowiedzi

witam,

 

jako ze swoja gre zaczalem pisac zanim jeszcze rozumialem wszelkie arrays i inne skomplikowane skryptowanie przedstawie wam system inventory ktory jest w moim silniku miniRPG2.0 (temacik w sygnaturze jakby ktos chcial zobaczyc jak to wyglada w praktyce)

 

Jesli czegos nie umiesz zrobic jak zaawansowany programista GMLa to znajdz sposob zeby to zrobic po swojemu i nawet inventory da sie ustawic na zwyklych klockach gdyby sie wysilic, a wiec zaawansowani uzytkownicy niech przygotuja sie na kupe smiechu(:P) a newby na wybawienie oto inventory ktore mozna zrobic nawet w klockach(mozna, ale ja to pokaze w kodzie...):

 

a wiec najpierw musimy przygotowac sobie takie oto objecty:

 

o_miecz

o_plecak1

o_plecak2

o_plecak3

o_plecak4

cont_inventory

o_bohater

 

miecz moze wygladac nawet jak jabuszko, to nie ma znaczenia, wazne zeby kazdy obiekt mial ta sama wielkosc w pixelach.

obiekty plecaki maja miec ten sam sprite, czyli jakiegos kwadraciku z ramka.

 

ustawiamy mieczyk na naszej mapie a kwadraciki w naszym menu.

oto co wpisujemy w obiekcie miecz:

 

CREATE

w_plecaku = 0 //zmienna sprawdza czy przedmiot jest w plecaku

RIGHT PRESSED//event klikniecia pp myszki

if w_plecaku = 0

{

scr_do_plecaka()//skrypt ktory bedzie nam wsadzal przedmioty do plecaka, o tym za chwile

}

else

if w_plecaku = 1

{

scr_na_ziemie()//ten skrypt wyrzuca nam przedmiot z plecaka na ziemie

}

 

ufff... dobra masz ten miecz to jestes w 1/4 do ukonczenia swojego inventory. Teraz musisz zrobic te miejsca w plecaku, a wiec zaczynamy:

dla kazdego obiektu o_plecak (od 1 do 4)

 

// hmmm nie musisz tu wypisywac absolutnie zadnego kodu!! dobra wiadomosc co nie?

 

i tym oto sposobem jestes w polowie do zrobienia swojego pierwszego inventory :jezor:

 

Dobra to zostaly nam jeszcze 2 skrypty ktore sa w przedmiocie o_miecz (chyba wiesz gdzie sie robi skrypty??) dobra mysle ze wiesz a jesli nie to lepiej zajmij sie narazie swoja wersja lapania klauna.

 

Wiec stworz dwa skrypty jeden o nazwie scr_do_plecaka i scr_na_ziemie. tak! bez zadnego () jak to zrobilem w kodzie!

 

Wiec jak sie pewnie domysliles jeden ze skryptow bedzie ci wsadzal przedmiot do plecaka, a drugi bedzie go wyrzucal z plecaka na ziemie, po to ci jest potrzebna zmienna w_plecaku ona sprawdza czy przedmiot jest w plecaku czy na ziemi i co program ma zrobic.

OK nie mardze widze ze wielu chce poprostu kliknac alt+c i alt+v zeby wkleic ten kod do swojej gry i sie cieszyc, a wiec prosze:

if global.pelny_plecak1 = false//pytanie czy to miejsce w plecaku jest pelne

{

x = o_plecak1.x;

y = o_plecak1.y;//to przenosi widok miecza do plecaka

w_plecaku = 1;//zmienna ktora mowi ze przedmiot jest w plecaku

global.pelny_plecak1 = true;//ta zmienna to niespodzianka co? mowi ze to miejsce w plecaku jest 'pelne' wiecej w dalszej czesci postu.

persistent = true;//to ci sie przyda jesli twoj rpg ma wiecej roomow niz jeden.

}

else

if global.pelny_plecak2 = false

{

x = o_plecak2.x;

y = o_plecak2.y;

w_plecaku = 1;

global.pelny_plecak2 = true;

persistent = true;

}

else

if global.pelny_plecak3 = false

{

x = o_plecak3.x;

y = o_plecak3.y;

w_plecaku = 1;

global.pelny_plecak3 = true;

persistent = true;

}

else

if global.pelny_plecak4 = false

{

x = o_plecak4.x;

y = o_plecak4.y;

w_plecaku = 1;

global.pelny_plecak4 = true;

persistent = true;

}

 

Troche to dlugie? no niestety tak to wyglada jesli nie umie sie operowac tablicami itd. narazie tak bedzie musialo to wygladac. O co chodzi w tym kodzie? Gdy podnosisz przedmiot skrypt ten szuka wolnego miejsca w twoim plecaku aby 'wlozc' tam przedmiot. Najpierw pyta sie o miejsce 1 potem 2 itd. Nie ma problemu zebys mial tych miejsc wiecej (ja mam ich w grze 16). wystarczy stworzyc wiecej obiektow o_plecak i wstawic je w tym skrypcie.

 

teraz jak wyciagac przedmiot z plecaka:

 

if x = o_plecak1.x && y = o_plecak1.y//pyta sie z ktorego miejsca w plecaku wyrzucamy przedmiot.

{

x = o_bohater.x;

y = o_bohater.y;//wyrzuca przedmiot pod bohaterem.

w_plecaku = 0;//przedmiot nie jest w plecaku.

global.pelny_plecak1 = false;//miejsce w plecaku jest puste

persistent = false;//wiadomka :jezor:

}

else

if x = o_plecak2.x && y = o_plecak2.y

{

x = o_bohater.x;

y = o_bohater.y;

w_plecaku = 0;

global.pelny_plecak2 = false;

persistent = false;

}

else

if x = o_plecak3.x && y = o_plecak3.y

{

x = o_bohater.x;

y = o_bohater.y;

w_plecaku = 0;

global.pelny_plecak3 = false;

persistent = false;

}

else

if x = o_plecak4.x && y = o_plecak4.y

{

x = o_bohater.x;

y = o_bohater.y;

w_plecaku = 0;

global.pelny_plecak4 = false;

persistent = false;

}

 

no i tak samo jak w skrypcie do zbierania przedmiotow do plecaka, ten skrypt sprawdza nam o ktory przedmiot nam chodzi zeby mogl zwolnic miejsce w plecaku. Bez zmiennych w_plecaku i global.pelny_plecak niemoglibysmy wsadzac przedmiotow do plecaka kilkukrotnie, lub mielibysmy 'puste' miejsca w plecaku w ktorych nie mozemy umiescic przedmiotow.

Dlatego tu wazna !!! !!!UWAGA!!! !!!

Jesli spotkasz sie z czyms takim jak opisalem na gorze to nie pisz mi tu postow najprawdopodobniej pomyliles gdzies cyferki w nazwach zmiennych takich jak global.pelny_plecak1 a global.pelny_plecak2. Naprawde kiedys sam siedzialem 2 godziny i szukalem jednej glupiej liczby ktora powodowala mi powazne bugi, i nie mam ochoty zagladac do waszych kodow i szukac czegos takiego. To poprostu jest HELL ale taka jest cena tego systemu.

 

Myslisz ze to koniec i juz chcesz odpalac swoja gre? huh... sprobuj moze Ci sie uda.

 

Zrob nastepny obiekt cont_inventory (dlaczego cont? no ja tak nazywam controllery w mojej grze czyli obiekty ktore 'kontroluja' niejako inne obiekty)

zrob go i oto kodzik do niego:

 

CREATE

global.pelny_plecak1 = false;

global.pelny_plecak2 = false;

global.pelny_plecak3 = false;

global.pelny_plecak4 = false;

 

a widzisz sa jeszcze te zmienne ktore pilnuja czy odpowiednie miejsca w plecaku sa wolne.

teraz mozesz stworzyc swoj obiekt bohatera, 4 miejsca na plecak gdzies w menu i kontroler gdzies z boku.

 

no i stworz obiekt o_bohater - chyba wiadomo co tam trzeba wstawic co nie? Skrypty na poruszanie itd. z tym nie powinniscie miec problemow a jesli tak zapraszam do FAQ na stronie gmclan.org.

 

hmm? mozesz podnosc przedmioty na odleglosc? w obiekcie o_miecz daj aby bohater byl w odpowiedniej odleglosci od przedmiotu aby mogl zadzialac skrypt scr_do_plecaka. Nie umiesz? ja tu tylko pokazuje jak inventory zrobic. Uzyj distance_to_object i szukaj w innych tematach jak sie tego uzywa.

 

Jesli chodzi o jakies skrzynki, czy ubieranie na siebie zbroji czy miecza to juz naprawde jest kupa roboty, powiem wam ze robilem caly ten systemik jakos 4 noce pod rzad po 12 godzin (ochroniazem jestem a co :rolleyes: ), jeszcze mi zostal sklep. Jest tam naprawde kupa zmiennych, zachecam do bawienia sie :)

Ja tu tego nie rozpisze zajeloby mi to godzine albo i dluzej. Macie podstawy reszte juz sami zbudujecie.

 

Powodzenia!

 

PS. Specjalne podziekowanie dla Pawlik9 za to ze przypatrzyl sie bledom w kodzie i opisal je na forum. :)

 

LINK do przykladu.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

A jakbym chciał mieć np. 100 itemów, to co, 100 obiektów ? Wystarczy zrobić tablicę global.plecak i już, np. global.plecak[0] do global.plecak[3] i nie musisz już tworzyć obiektów, co z resztą chyba w moim przykładzie inventory na stronie dałem. Sprawdź moj system i zobacz jak możesz w ten sposób ulepszyć swój. Ja obecnie w Farmerze Franie mam 5 rodzajów plecaków, łącznie można tam upchać ponad 200000 sztuk itemów. A jednak do ich obsługi wystarczy kilkanaście liniejk kodu (dużą pomoca są pętle while i for)

Nie mówię, że jest źle, ale można by popracować nad tym.

Odnośnik do komentarza
Udostępnij na innych stronach

Właśnie. Gnysek ma rację. Pętlą for i tablicamy można łatwo wykonywać operacje na zmiennej o danym indeksie. Najprostrzym tego przykładem jest menu na tablicach (autostwa Gnyska). Wyzerowanie tablic jednowymiarowych wygląda tak:

for ( i = 0; i <= 150; i += 1; ) tablica[i] = 0;

Odnośnik do komentarza
Udostępnij na innych stronach

Ludzie juz dostalem 2 PMy ze komus cos nie dziala. Ja juz mowilem ze moj system mozna zrobic na klockach, prosciej sie nie da! Niestety problem jest taki ze tam BARDZO latwo zrobic maly blad i wszystko sie sypie. Narazie nie mam czasu robic przykladu, mam pelne rece roboty, macie wytlumaczone wszystko od a do z w moim 1 poscie, nie musiscie nic dodawac od siebie, tylko zlozyc to do kupy i powinno dzialac. Analizujcie swoje kody, jesli nie dziala to patrz tam 100 razy i szukaj tej literowki, braku przecinka, brakujacej liczby, o to w tym wszystkim chodzi, to jedna z wazniejszych umiejetnosci jakie powinien pozyskac programista- znalezienie najmniejszych bledow w swoim kodzie. Juz mowilem ze bylo tak ze 2 godziny siedzialem i szukalem zle ustawionej zmiennej >.>

 

 

Moze ja cos zle napisalem, poszukaj czy jakas zmienna ma zla nazwe. Ostatecznie wklejajcie mi tu swoje bledy jakie wyskakuja, bede zagladac do tematu to moze cos doradze.

 

Jak nie dajecie rady to uczcie sie tablic(polecam bo jak juz sie ich nauczysz to sobie ulatwisz zycie).

 

Pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

Na początku chciałbym się ze wszystkimi przywitać, z góry uprzedzam, że na pisaniu skryptów się nie znam. Chciałbym o coś zapytać otóż:

4 miejsca na plecak gdzies w menu i kontroler gdzies z boku.

 

Czy jest gdzieś opisane gdzie takie coś zrobić?

A może trzeba coś zaznaczyć?

Czekam na odpowiedź

Odnośnik do komentarza
Udostępnij na innych stronach

Chodzi mi o to czy te sloty trzeba zrobić w rogu tak samo jak HP i EXP, czy może jakiś objekt dodać. I mam taki błąd (gdy chce podnieść miecz):

 

http://img522.imageshack.us/my.php?image=bd2ue1.png

 

 

sloty plecaka daj sobie w menu tam gdzie masz pasek expa, staty itd. chyba ich nie wywalisz na mape gdzie sie twoja postac porusza? :jezor: a obiekt cont_inventory daj gdzies w rogu rooma.

 

co do bledu:

nie ustawiles w swoim roomie cont_inventory w nim znajduja sie zmienne do plecaka, bez nich nie podniesiesz miecza.

Odnośnik do komentarza
Udostępnij na innych stronach

sloty plecaka daj sobie w menu tam gdzie masz pasek expa, staty itd. chyba ich nie wywalisz na mape gdzie sie twoja postac porusza? :jezor: a obiekt cont_inventory daj gdzies w rogu rooma.

 

co do bledu:

nie ustawiles w swoim roomie cont_inventory w nim znajduja sie zmienne do plecaka, bez nich nie podniesiesz miecza.

Skasuj "_" <_<

Odnośnik do komentarza
Udostępnij na innych stronach

global.pelny_plecak1 = false;

global.pelny_plecak2 = false;

global.pelny_plecak3 = false;

global.pelny_plecak4 = false;

i co tu zmieniać?

 

A teraz mam to:

http://img54.imageshack.us/my.php?image=bd3ij0.png

 

Podaje skrypty:

skr_na ziemie

if x = o_plecak1.x && y = o_plecak1.y//pyta sie z ktorego miejsca w plecaku wyrzucamy przedmiot.

{

x = o_bohater.x;

y = o_bohater.y;//wyrzuca przedmiot pod bohaterem.

w_plecaku = 0;//przedmiot nie jest w plecaku.

global.pelny_plecak1 = false;//miejsce w plecaku jest puste

persistent = false;//wiadomka

}

 

if x = o_plecak2.x && y = o_plecak2.y

{

x = o_bohater.x;

y = o_bohater.y;

w_plecaku = 0;

global.pelny_plecak2 = false;

persistent = false;

}

 

if x = o_plecak2.x && y = o_plecak2.y

{

x = o_bohater.x;

y = o_bohater.y;

w_plecaku = 0;

global.pelny_plecak2 = false;

persistent = false;

}

 

if x = o_plecak3.x && y = o_plecak3.y

{

x = o_bohater.x;

y = o_bohater.y;

w_plecaku = 0;

global.pelny_plecak3 = false;

persistent = false;

}

 

if x = o_plecak4.x && y = o_plecak4.y

{

x = o_bohater.x;

y = o_bohater.y;

w_plecaku = 0;

global.pelny_plecak4 = false;

persistent = false;

}

 

skr_do_plecaka

if global.pelny_plecak1 = false//pytanie czy to miejsce w plecaku jest pelne

{

x = o_plecak1;

y = o_plecak1;//to przenosi widok miecza do plecaka

w_plecaku = 1;//zmienna ktora mowi ze przedmiot jest w plecaku

global.pelny_plecak1 = true;//ta zmienna to niespodzianka co? mowi ze to miejsce w plecaku jest 'pelne' wiecej w dalszej czesci postu.

persistent = true;//to ci sie przyda jesli twoj rpg ma wiecej roomow niz jeden.

}

 

if global.pelny_plecak2 = false

{

x = o_plecak2;

y = o_plecak2;

w_plecaku = 1;

global.pelny_plecak2 = true;

persistent = true;

}

 

if global.pelny_plecak3 = false

{

x = o_plecak3;

y = o_plecak3;

w_plecaku = 1;

global.pelny_plecak3 = true;

persistent = true;

}

 

if global.pelny_plecak4 = false

{

x = o_plecak4;

y = o_plecak4;

w_plecaku = 1;

global.pelny_plecak4 = true;

persistent = true;

}

 

o_miecz

w_plecaku = 0 //zmienna sprawdza czy przedmiot jest w plecaku

i

if w_plecaku = 0

{

scr_do_plecaka()//skrypt ktory bedzie nam wsadzal przedmioty do plecaka, o tym za chwile

}

if w_plecaku = 1

{

scr_na_ziemie()//ten skrypt wyrzuca nam przedmiot z plecaka na ziemie

}

cont_inventory

global.pelny_plecak1 = false;

global.pelny_plecak2 = false;

global.pelny_plecak3 = false;

global.pelny_plecak4 = false;

 

A tak pozatym jaki jest skrypt do slotów plecaka tak żeby były pod hp. xp itd.( w temacie jestem początkujący)

 

Bardzo przepraszam za tyle tekstu ale nie wiem jak mam to wszystko inaczej przedstawić

I ostatnie, co muszę dopisac do skryptu w cont_incentory aby byl wyswietlany?

A może mam go dokleić do tego co wyświetla hp i xp?

Odnośnik do komentarza
Udostępnij na innych stronach

Jezu, czlowieku po co te wszystkie kody wklejales.

a ten img ktory wkleiles nie dziala wiec nie wiem o co chodzi.

 

Wszystko w pierwszym poscie masz wytlumaczone, cos mi sie zdaje ze bawisz sie Game Makerem kilka dni, jesli tak to nawet sie za to nie zabieraj. GML-em sie zajmij jak sie nauczysz robic gry na klockach.

 

Tam NIC nie trzeba dodawac, juz to napisalem. Robisz te obiekty, przepisujesz do nich to co napisalem, wrzucasz te obiekty do rooma i wszystko dziala cacy.

 

Plecak bedziesz mial tam gdzie ustawisz obiekty o_plecak(1,2,3,4), jak je wstawisz pod paskiem HP to tam beda i tyle.

 

Pasek HP wstaw sobie moze w osobnym obiekcie, ale nie ma problemu zebys go ustawil w cont_inventory jak ci pasuje. Gdzies tam sa przyklady paskow HP poszukaj sobie.

Odnośnik do komentarza
Udostępnij na innych stronach

if w plecaku = 1
{
scr_na_ziemie()//ten skrypt wyrzuca nam przedmiot z plecaka na ziemie
}

Czy nie powinno być:

if w_plecaku = 1
{
scr_na_ziemie()//ten skrypt wyrzuca nam przedmiot z plecaka na ziemie
}

 

if global.pelny_plecak1 = false//pytanie czy to miejsce w plecaku jest pelne
{
x = o_plecak1;
y = o_plecak1;//to przenosi widok miecza do plecaka
w_plecaku = 1;//zmienna ktora mowi ze przedmiot jest w plecaku
global.pelny_plecak1 = true;//ta zmienna to niespodzianka co? mowi ze to miejsce w plecaku jest 'pelne' wiecej w dalszej czesci postu.
persistent = true;//to ci sie przyda jesli twoj rpg ma wiecej roomow niz jeden.
}

Tutaj nie powinno być?

if global.pelny_plecak1 = false//pytanie czy to miejsce w plecaku jest pelne
{
x = o_plecak1.x;
y = o_plecak1.y;//to przenosi widok miecza do plecaka
w_plecaku = 1;//zmienna ktora mowi ze przedmiot jest w plecaku
global.pelny_plecak1 = true;//ta zmienna to niespodzianka co? mowi ze to miejsce w plecaku jest 'pelne' wiecej w dalszej czesci postu.
persistent = true;//to ci sie przyda jesli twoj rpg ma wiecej roomow niz jeden.
}

 

Edit: Czy przypadkiem nie trzeba stworzyć obiektu o_bohater?

Edit2: Ale przenosi mi miecz(gdy na niego kliknę prawym przyciskiem) do bohatera.

Edit3:

if x = o_plecak2.x && y = o_plecak2.y
{
x = o_bohater.x;
y = o_bohater.y;
w_plecaku = 0;
global.pelny_plecak2 = false;
persistent = false;
}

if x = o_plecak2.x && y = o_plecak2.y
{
x = o_bohater.x;
y = o_bohater.y;
w_plecaku = 0;
global.pelny_plecak2 = false;
persistent = false;
}

Po co to samo 2 razy?

Odnośnik do komentarza
Udostępnij na innych stronach

looo pawlik dzieki za wykrycie bledow. Nie jestem doskonaly i tez mi sie zdarza robic glupie bledy ;) juz edytuje pierwszy post zeby wszystko bylo pieknie ladnie ;)

 

EDIT

zedytowalem pierwszy post i teraz powinno wszystko dzialac ladnie nawet jesli ktos poprostu powkleja wszystkie skrypty prosto do gry.

Odnośnik do komentarza
Udostępnij na innych stronach

Na pewno ten kod działa poprawnie?

https://gmclan.org/up2359_11_inventory.html

Zrobię tak jak jest napisane to nie przenosi mi miecza do plecaka, tylko do bohatera, ale jeżeli

w_plecaku = 1

(w scr_do_plecaka) zamienie na

alarm[0]=2

A w o_miecz, w Alarm0 dam

w_placaku = 1

Jest OK poza jednym - Miecz przenosi mi do ostatniego "plecaka" i jak zrobię na przykład dwa miecze - mogę tylko jeden wziąć, a z drugim nic się nie dzieje. Pozostałe 3 "plecaki" jakby nie istniały.

Odnośnik do komentarza
Udostępnij na innych stronach

Bog cie chyba zeslal ;) Trzeba tam jeszcze powsadzac else miedzy tymi wszystkimi zapytaniami o sloty. Znowu zedytowalem pierszego posta, powinno byc ok :thumbsup:

sciaglem Twoj przyklad i go poprawilem, teraz wszystko dziala jak nalezy :) mozesz go sciagnac z linka z pierwszego postu ;)

Dzieki za pomoc.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 miesiące temu...

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ę...