Wyświetlanie składu drużyny w CMS


1. Wprowadzenie

    Michu pokazał nam jak przygotować panoramę pod mapkowego CMSa. Jak widać na ostatnim obrazku, grafiki przedstawiające skład naszej drużyny zostały od razu umieszczone w panoramie. Ale jeśli skład naszego teamu zmienia się i podczas całej gry mamy możliwość dołączyć do nas jedną z np. 20 postaci, do tego w dowolnej konfiguracji?
    Wtedy będziemy potrzebować skryptu, który sprawdzi kto jest w naszej ekipie i na tej podstawie wyświetli odpowiednie obrazki (oraz statystyki oczywiście, ale o tym nieco później). Mam nadzieję, że nie muszę dodawać iż wszystkie nazwy zmiennych i przełączników są opcjonalne i możecie je pozmieniać na jakie wam się podoba. Sam nadałem im takie tytuły dla (tak sądzę) większej przejrzystości.


2. Rozwiązanie, którego unikamy

    Pierwszym, co przyjdzie nam oczywiście do głowy, to utworzenie zdarzenia, które będzie po kolei sprawdzać, czy dana postać jest obecna w drużynie. Jeżeli wynik jest negatywny, kolejny warunek sprawdzający itd., aż do otrzymania pozytywnego rezultatu. Wtedy ustawiamy pożądaną grafikę i uruchamiamy kolejny event, tym razem dodatkowo sprawdzający, czy dana postać już nie została wyświetlona w naszym menu wcześniej - oznacza to jeden dodatkowy warunek dla każdej możliwej postaci. Następnie kolejny event (jeżeli maksymalny skład naszej drużyny to 3 postaci).



    O ile takie rozwiązanie ma w miarę sens, gdy liczba możliwych ludków mogących przyłączyć się do nas to 4-5, o tyle w przypadku 10, 15 i więcej postaci jest to wyjątkowo czasochłonne i męczące zajęcie.


3. Skrypt właściwy, czyli magia dziwnych właściwości zmiennych
    Pokażę wam tutaj, jak wykonać taki skrypt, który nie dość, że będzie króciótki jak odcinek "Mody na sukces" to do tego jest uniwersalny dla dowolnej ilości postaci mogących przyłączyć się do naszej drużyny. Dodatkowo event ten (bo cały skrypt zawiera się w jednym evencie) można skopiować tyle razy, ile mamy maksymalnie miejsc w naszej drużynie, zmieniając jedynie wartości dwóch zmiennych. Do dzieła.

a) Na początek najżmudniejsza robota - tworzenie zmiennej dla każdej z dostępnych postaci. Dla wygody proponuję zacząć od zmiennej o cyfrze jedności równej 1 np. Var[0011] (John). Nazywamy naszą zmienna tak jak jedna z postaci, potem kolejną zmienną (Var[0012]) jak kolejna postać itd. W momencie, kiedy dany bohater do nas dołączy ustawimy jego zmienną na wartość 1.

b) Na mapce, która będzie naszym Menu, tworzymy Event, którego Trigger Condition to Parallel Process, bez żadnej grafiki. Teraz tworzymy tyle dodatkowych stron, ile dostępnych postaci (w moim przpadku 6), plus jedną ekstra - w sumie powinniście mieć tyle stron ile możliwych postaci +2. Na każdej stronie (oprócz pierwszej), tak jak każdy już się zdążył domyślić, ustawiamy grafikę jednej z postaci, a każda z tych stron warunkowana będzie Zmienną odpowiadającej tejże postaci o wartości 2, a Trigger Condition to Action Key (aby uniknąc haczenia).



    Ostatnia strona nie ma grafiki i jest warunkowana Zmienną (Stop) o wartości 1 (na wypadek, gdy nie mamy obecnie żadnej dodatkowej postaci w drużynie).

c) Wracamy do pierwszej strony zdarzenia. Na początku stawiamy Wait na 0.0 sec, tak na wszelki wypadek, aby program zdążył wszystko sobie przeanalizować i nie popełnił nigdzie błędu. Ustawiamy pętlę, w którą wpisujemy wszystko, co następuje (skupcie się psubraty, bo to najbardziej zagmatwana część poradnika!):

d) Variable operation na Zmiennej (Wartość postaci) - zmiennej sprawdzającej, czy mamy daną postać w drużynie Set Value Stored in Index Zmiennej (Która postać) - zmiennej, której przy wywołaniu naszego Menu, przypisujemy wartość równą ID pierwszej zmiennej reprezentującej bohaterów (podpunkt (a)), w moim przypadku jest to 11. RPG Maker w tym momencie przypisze Zmiennej (Wartość postaci) wartość, jaką posiada zmienna nr 11 (Var[0011]), ponieważ taka liczba była przypisana Zmiennej (Która postać).

e) Tworzymy Conditional Branch z Else Handler, która sprawdza czy Zmienna (Wartość postaci) jest równa 1 (innymi słowy, czy mamy postać ze Zmiennej nr 11 w drużynie). Jeżeli tak, to Variable Operation -> Variable Reference Zmienna (Która postać) -> Set 2, czyli zmienna o wartości przechowywanej w Zmiennej (Która postać) zmienia się na 2 (w tym przypadku zmienna o nr 11). Po czym Break Loop, aby zakończyć pętlę i pozwolić zdarzeniu zmienić grafikę na odpowiednią (podpunkt (b)). Jeżeli warunek nie jest spełniony to:

f) Wstawiamy kolejny Warunek z Else Handler, sprawdzający czy Zmienna (Która postać) jest równa ostatniej zmiennej odpowiadającej za dostępnych w grze bohaterów. W moim przypadku to 16, bo w demie występuje tylko 6 postaci. Jeżeli warunek jest spełniony, czyli ostatnia z dostępnych postaci nie znajduje się w drużynie (bo z tego powodu znaleźliśmy się w Else Handler), ustawiamy Zmienną (Stop) na wartość 1 i kończymy ponownie pętlę (podpunkt (b)). Jeżeli warunek nie jest spełniony to:

g) Zmieniamy wartość Zmiennej (Która postać) na o jeden więcej, czyli set +1. Dzięki temu, jeżeli bohater spod zmiennej nr 11 nie znajduje się w drużynie (podpunkt (e)) i nie jest on ostatnim dostępnym w grze ludkiem (podpunkt (f)), to każemy naszemu skryptowi ponowić procedruę dla kolejnej postaci, tym razem spod zmiennej nr 12. Proces będzie powtarzany naokrągło do momentu, aż zostanie znaleziona postać, która jest w drużynie (wyświetlenie jej grafiki), albo aż zostaną sprawdzone wszystkie dostępne postaci i grafika zostanie ustawiona na przeźroczystą.



    Tak powinna wyglądać pierwsza strona waszego zdarzenia.

    Teraz pozostaje nam skopiować to zdarzenie tyle razy, ile mamy miejsc w drużynie (mnie 3 miejsca, więc potrzebne jeszcze dwie kopie) i zmienić wartość Variable Operation -> Variable Reference Zmienna (która postać) na Set 3 i dla kolejnego zdarzenia Set 4 (podpunkt (e)) oraz Zmienną (Stop) na odpowiednio 2 i 3 w podpunkcie (f). Oczywiście strony odpowiadające za wyświetlanie grafik postaci w tych zdarzeniach również zmienią warunek ze zmiennej danej postaci równej 2 (podpunkt (b)), na odpowiednio 3 i 4, a ostatnia strona bez grafiki na 2 i 3.


4. Kilka uwag na koniec

    Największą niedogodnością skryptu jest konieczność tworzenia tylu stron, ile dostępnych w grze postaci i zmienianie warunkowania ich wyświetlania dla każdego ze zdarzeń (w moim przypadku tylko 3). Można pobawić się w stworzenie zdarzeń z osobną grafiką dla każdego z bohaterów, a następnie wywoływanie tychże na podstawie ich ID. Wtedy kopiowanie zdarzenia-skryptu ograniczałoby się do modyfikacji 3-4 zmiennych. Trzeba wtedy jednak pokombinować z ukrywaniem zdarzeń nieporządanych w Menu (czyt. tych, których to postaci nie mamy w drużynie), poza tym są to jednak zdarzenia i mogą one spowolnić pracę naszego Menu. Mimo wszystko, każde z tych rozwiązań jest o niebo szybsze i wygodniejsze niż tworzenie setek warunków dla każdej z tych ewentualności jak to zazwyczaj ma miejsce w CMSach.
    Co czyni ten skrypt tak użytecznym i ciekawym, to fakt, iż można go wykorzystać do niemal każdego aspektu naszego CMSa np. grafik przedmiotów w plecaku, statystyk bohatera, czy paska życia i many. Nie pozostaje mi już nic innego, jak życzyć Wam powodzenia i wielu pomysłów na modyfikację i użycie tego kawałka kodu. =)

Download

Kalashnikov

Logowanie/Rejestracja

Login:
Hasło:
Zapamiętaj mnie
zarejestruj się
Do zespołowej pracy nad grą w RM najbardziej skłoniłby mnie:
Odpowiedni projekt
Właściwi ludzie
Komercyjny charakter produkcji
Wersja Makera
Coś innego
Nie interesuje mnie praca w zespole
zobacz wyniki | archiwum ankiet
1. Gromada
2. Tale of Exile: Akt I
3. Septerra Core: Dream About The Past
4. Qmai World 1
5. Wrota Arkany 2
6. Asgun
7. Komnata
8. Manga Carta
9. Dark Dawn
10. 8 Bit Quest
» Pogromca II: Złodziej Kamienia [XP]
» [XP] Atak, Obrona, Czary i Przedmioty tam gdzie walka i ucieczka
» Opowieści z Edorii: Edycja Cesarska [XP]
» [VX] Współczesny Tileset
» [MV] Marthisia
» Cele i założenia (miesięczne)
» Podziemia: Człowiek [XP]
» Podziemia: Kraina Cieni [XP]
» [VX] Kolor Deszczu
» [XP] Shaarimoth
Nadzieja by Adams the Red
wersja
Demo,
RM 2000
rok wydania
2003
ocena
3.0/10
RPG Maker Zone Kroniki Fallathanu - Prawdziwy mmoRPG w przeglšdarce Muzeum w Raccoon City: Resident Evil HQ Pokemon Valhalla
© Tsukuru Archive 2006-2016 | Używamy plików cookie.