JakDodacPrzedmiotyDoPolanieOnLine: Różnice pomiędzy wersjami
(Nie pokazano 3 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 1: | Linia 1: | ||
{{Nawigacja dla PolanieOnLine Top}} | {{Nawigacja dla PolanieOnLine Top}} | ||
{{Nawigacja dla PolanieOnLine Extenders}} | {{Nawigacja dla PolanieOnLine Extenders}} | ||
− | + | Możesz dodać nowy przedmiot do gry w kilku bardzo prostych krokach: | |
− | == | + | == Przygotowanie == |
− | + | Skonfiguruj środowisko programistyczne zgodnie z opisem w [[PolanieOnLine na Eclipse]]. | |
− | == | + | ==Edycja przedmioty.xml== |
− | + | Wszystkie pliki ''przedmioty''.xml zlokalizowane są w folderze ''/data/conf/items/''. Są ułożone według ''klasy'' (patrz poniżej), np: tarcze, miecze, klucze, żywność itp... | |
− | + | Plik zawiera wszystkie opisy przedmiotów w grze. | |
− | + | Zacznijmy od tego, jak robić broń, na przykład w ''daggers.xml'': | |
<pre> | <pre> | ||
− | <item name=" | + | <item name="sztylecik"> |
<type class="sword" subclass="dagger" tileid="-1"/> | <type class="sword" subclass="dagger" tileid="-1"/> | ||
− | <description> | + | <description>Oto sztylecik. Bardziej służy za dekorację, ale możesz nim dość szybko dźgnąć.</description> |
− | <implementation class-name="games.stendhal.server.entity.item.Item"/> | + | <implementation class-name="games.stendhal.server.entity.item.Item"/> |
+ | <attributes> | ||
<atk value="8"/> | <atk value="8"/> | ||
<rate value="3"/> | <rate value="3"/> | ||
Linia 29: | Linia 30: | ||
</pre> | </pre> | ||
− | + | Ważne jest, aby zrozumieć, jak to działa. | |
− | + | Musimy nadać przedmiotowi nazwę i jest to robione w tagu ''item''. | |
− | + | Następnie określamy klasę i podklasę w tagu ''type''. Jeśli sprawdzisz ścieżkę obrazka w kliencie, zdasz sobie sprawę, że wygląda to podobnie do: | |
sprites/ | sprites/ | ||
items/ | items/ | ||
− | + | klasa/ | |
− | + | podklasa.png | |
− | + | W ten sposób możemy ponownie użyć jednego GFX dla różnych elementów. Na przykład: nóż + 1, stary nóż, elficki nóż, ... | |
− | + | Dajemy elementowi ładny opis (gdy gracz kliknie '''Zobacz''') wewnątrz tagu ''description''. | |
− | + | Znacznik implementacji należy skopiować z góry, chyba że element można układać w stosy, w takim przypadku użyj: | |
<pre> | <pre> | ||
Linia 48: | Linia 49: | ||
</pre> | </pre> | ||
− | + | Gdy status przedmiotu może zostać zmieniony np: poprzez niszczenie się jego stanu, wtedy zastosuj: | |
− | * ATK | + | |
− | * DEF | + | <pre> |
− | * RATE | + | <implementation class-name="games.stendhal.server.entity.item.BreakableItem"/> |
− | : | + | </pre> |
− | : | + | |
− | : | + | Wewnątrz tagu ''atrybuty'' możesz określić atrybuty broni: |
− | * RANGE | + | * ATK jest to wartość proporcjonalna do szkody, jaką przedmiot może wyrządzić. |
− | : | + | * DEF (OBR) jest to wartość proporcjonalna do tego, ile uszkodzeń może zablokować przedmiot. |
− | * QUANTITY | + | * RATE (WAGA) to jak szybko możesz trafić bronią ofensywną. |
− | * LIFESTEAL | + | :WAGA 1 oznacza, że możesz trafić w każdej turze, WAGA 10 oznacza tylko raz na 10 tur. |
− | : | + | :WAGA musi być większa niż 0, ale nie ma górnej granicy. (W POL najwolniejszą broń jaką mamy to 15) |
− | : | + | :Tylko broń ofensywna ma wagę. |
− | : | + | * RANGE (ZASIĘG) jest atrybutem ataku broni dystansowej, takiej jak łuk i strzała, lub pocisków, takich jak włócznie oraz różdzki i magie. |
− | : | + | : Im większy zasięg, tym broń jest skuteczniejsza. |
+ | * QUANTITY (ILOŚĆ) to atrybut broni, którą można układać w stosy, takich jak strzały i włócznie (ustawiona na 1) | ||
+ | * LIFESTEAL (KRADZIEŻ ŻYCIA) to specjalny atrybut broni ofensywnej. | ||
+ | : Musi to być liczba z przedziału od -1 do 1. | ||
+ | : Wszelkie obrażenia od ataku zadane bronią kradzieży życia są „zwracane” graczowi jako leczące PŻ | ||
+ | : Broń z kradzieżą życia 0,2 przywraca graczowi 20% PŻ obrażeń, jakie zadają wrogowi. | ||
+ | : Ujemna kradzież życia wysysa HP gracza zgodnie z obrażeniami, jakie zadają wrogowi. | ||
− | + | W przypadku żywności, napojów, mikstur i trucizn te atrybuty są następujące: | |
− | * AMOUNT - | + | * AMOUNT - całkowite PŻ, które przywraca przedmiot (ujemne dla trujących przedmiotów) |
− | * REGEN - | + | * REGEN - ile jesteś leczony na raz (dla mikstur powinno to być równe AMOUNT, dla trucizn powinno być ujemne) |
− | * FREQUENCY - | + | * FREQUENCY - jak szybko jesteś uzdrowiony (mniejsza liczba oznacza szybciej, wybierz 1 dla mikstur) |
− | * QUANTITY - | + | * QUANTITY - powinny być używane (ustawione na 1), wszystkie można układać w stosy. |
− | + | Zwróć uwagę, że mikstury i trucizny (i antidotum) są dostępne na klasie ''drinks''. | |
− | + | Odtrutki mają: | |
− | * AMOUNT - | + | * AMOUNT - jak długo chronią cię przed trucizną (np. antidotum to 400, większe to 800) |
− | * REGEN | + | * REGEN równa 0 |
− | * FREQUENCY | + | * FREQUENCY równa 1 |
− | * QUANTITY | + | * QUANTITY równa 1 |
− | + | W przypadku zwojów, z których większość to zwoje teleportacyjne, postępuj zgodnie z przykładami w scrolls.xml, aby wybrać implementację. Atrybut INFOSTRING dla zaznaczonych zwojów to miejsce docelowe zwoju, np. | |
<pre> | <pre> | ||
<infostring value="0_nalwor_city 40 60"/> | <infostring value="0_nalwor_city 40 60"/> | ||
</pre> | </pre> | ||
− | + | W przypadku zwojów przywołania INFOSTRING to nazwa stworzenia, lecz implementacja | |
<pre> | <pre> | ||
<implementation class-name="games.stendhal.server.entity.item.scroll.SummonScroll"/> | <implementation class-name="games.stendhal.server.entity.item.scroll.SummonScroll"/> | ||
</pre> | </pre> | ||
− | + | dba o to, więc nie ustawiasz tego. | |
− | + | To powinny być wszystkie oferowane przedmioty specjalne. Wiele przedmiotów (np. zioła, klucze, drewno, pieniądze) nie miałoby żadnych atrybutów lub atrybutów poza ilością. | |
− | + | Na koniec musisz określić, gdzie można wyposażyć przedmiot: | |
* rhand | * rhand | ||
* lhand | * lhand | ||
Linia 97: | Linia 104: | ||
* cloak | * cloak | ||
* finger | * finger | ||
+ | * fingerb | ||
+ | * pas | ||
* feet | * feet | ||
* keyring | * keyring | ||
* bag | * bag | ||
− | + | Wszystkie przedmioty powinny znajdować się w torbie, chyba że masz dobry powód, dla którego gracze nie powinni mieć możliwości ich noszenia. Wszystkie przedmioty, które można układać w stosy, powinny być wyposażone w rhand i lhand na wypadek, gdyby gracz chciał podzielić stosy. I chociaż w PolanieOnLine mamy rysunek, gdzie tarcza i miecz powinny iść w oknie postaci, pozwalamy graczom wyposażyć się w tarczę i broń w obu rękach. Pierścionki zakładane są na palec, ale także w rzemyku i torbie dla ułatwienia przenoszenia. | |
− | = | + | = Dodanie GFX = |
− | + | Teraz umieść sprite 32x32 w folderze '''data/sprites/items/<klasa>/<podklasa>.png''' | |
− | + | Zobacz także [[PolanieOnLine Refaktoryzacja Grafiki#Przedmioty | Jak poznać specyfikacje graficzne przedmiotów]] | |
− | + | Jeśli chcesz, aby obraz przedmiotu był animowany (jak pieniądze), po prostu utwórz sprite'a 32N x 32. Na przykład. jeśli ma 5 klatek w animacji, będzie to sprite 160 x 32. Automatycznie pojawi się animacja. | |
− | = | + | = Rejestracja klasy = |
− | + | Do tej pory zdefiniowaliśmy, jaki element jest podobny do serwera. Zarejestrowanie klasy mówi klientowi, co z nią zrobić. (Czy można go układać w stosy i powinien mieć wyświetlane liczby, czy jest użyteczny i powinien mieć wyświetlane ''użycie''?) '''Większość klas jest już zarejestrowana i możesz zignorować tę sekcję... czytaj dalej, aby się dowiedzieć.''' | |
− | + | Przedmioty będą domyślnie zachowywać się dla klienta jak przedmiot nie nadający się do układania w stos i nie nadający się do użytku. Dotyczy to zbroi, broni i większości przedmiotów, które się nie zmieniają. Klasy nadające się do układania w stosy, ale nie nadające się do użytku, są rejestrowane według klasy, tj. pieniądze, amunicja, zioła itp. Większość przedmiotów użytkowych, takich jak żywność, napoje, jest rejestrowanych jako cała klasa. Więc jeśli dodajesz do jakiejkolwiek istniejącej klasy, najprawdopodobniej możesz zignorować wszystkie następujące rzeczy. Po prostu wróć, jeśli coś nie działa... tak jak oczekiwałeś, że będziesz mógł użyć nowego przedmiotu, a nie możesz. Lub jeśli dodajesz zupełnie nową klasę. | |
− | + | Tak więc, jeśli masz nową klasę i chcesz, aby można ją było układać w stosy lub używać <small>lub jest to całkowicie nowy obiekt po stronie klienta, rozszerzający przedmiot</small>, dodaj swoją klasę z typem (przedmiotem), klasą i wybranym zachowanie do reszty w ''src/games/stendhal/client/entity/factory/EntityMap.java'', np. | |
<source lang = "java"> | <source lang = "java"> | ||
− | // | + | // ''Flower'' był nową klasą sztaplowanych przedmiotów |
register("item", "flower", null, StackableItem.class); | register("item", "flower", null, StackableItem.class); | ||
− | // | + | // ''Drink'' były nową klasą przedmiotów użytkowych |
register("item", "drink", null, UseableItem.class); | register("item", "drink", null, UseableItem.class); | ||
− | // Box | + | // ''Box'' to nowy obiekt po stronie klienta |
register("item", "box", null, Box.class); | register("item", "box", null, Box.class); | ||
</source> | </source> | ||
− | + | A co, jeśli twój przedmiot należy do klasy, która jest połączeniem elementów nadających się do układania w stosy i nie nadających się do układania w stosy lub nadających się do użytku i nie nadających się do użycia? Pamiętaj, że ustawienie domyślne nie jest możliwe do układania w stosy i nie nadaje się do użytku. Więc musisz zarejestrować te specjalne indywidualnie. Odbywa się to według typu (elementu), klasy, jak poprzednio, a także podklasy (tak samo jak w xml), aby określić dokładnie, o który element masz na myśli. | |
<source lang = "java"> | <source lang = "java"> | ||
− | // | + | // większość narzędzi nie ma zastosowania, ale ''sugar mill'' powinna. Podklasa w xml to sugarmill |
register("item", "tool", "sugarmill", UseableItem.class); | register("item", "tool", "sugarmill", UseableItem.class); | ||
</source> | </source> | ||
− | + | Wreszcie przejdź do ''src/games/stendhal/client/gui/j2d/entity/EntityViewFactory.java'' i skonfiguruj element w ten sam sposób tylko wtedy, gdy musisz dodać do EntityMap powyżej. Oto przykłady | |
<source lang = "java"> | <source lang = "java"> | ||
− | // | + | // ''Flower'' był nową klasą sztaplowanych przedmiotów |
register("item", "flower", null, StackableItem2DView.class); | register("item", "flower", null, StackableItem2DView.class); | ||
− | // | + | // ''Drink'' były nową klasą przedmiotów użytkowych |
register("item", "drink", null, UseableItem2DView.class); | register("item", "drink", null, UseableItem2DView.class); | ||
− | // Box | + | // ''Box'' to nowy obiekt po stronie klienta |
register("item", "box", null, Box2DView.class); | register("item", "box", null, Box2DView.class); | ||
− | // | + | // większość narzędzi nie ma zastosowania, ale ''sugar mill'' powinna. Podklasa w xml to sugarmill |
register("item", "tool", "sugarmill", UseableItem2DView.class); | register("item", "tool", "sugarmill", UseableItem2DView.class); | ||
</source> | </source> | ||
− | == | + | == Dodaj gramatykę == |
− | + | Nazwy przedmiotów powinny być krótkie i wystarczające, aby zidentyfikować przedmiot, ale w mowie i piśmie w języku polskim mogą występować dodatkowe słowa związane z wypowiedzeniem przedmiotu. Na przykład Carmen powinna zaoferować sprzedaż „100 butelek eliksiru”, a nie „100 eliksirów”. (Czy dodać tutaj przykład tekstu NPC?) | |
− | + | Kilka przykładów: | |
{| | {| | ||
|- | |- | ||
− | | | + | |eliksir |
− | | | + | |butelka eliksiru |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
− | | | + | |skórzane spodnie |
− | | | + | |para skórzanych spodni |
|- | |- | ||
− | | | + | |mięso |
− | | | + | |kawałek mięsa |
|} | |} | ||
− | + | Aby dodać taki przedrostek gramatyczny do mowy i rozpoznawania mowy NPC, edytuj [https://github.com/PolanieOnLine/PolanieOnLine/blob/master/src/games/stendhal/common/grammar/PrefixManager.java src/games/stendhal/common/grammar/PrefixManager.java]. | |
− | {{TODO| | + | {{TODO | Nowa struktura wymaga dokumentacji dotyczącej różnych opcji register, registerEnd i registerPrefix.}} |
− | == | + | == Dodanie do gry == |
− | === | + | ===Wypada z potwora=== |
− | + | Możesz sprawić, by stwór upuścił twój nowo wykonany przedmiot. Odbywa się to poprzez edycję tego stworzenia w jego pliku XML, znajdującym się w lokalizacji pliku [https://github.com/PolanieOnLine/PolanieOnLine/tree/master/data/conf/creatures]. W tym folderze znajduje się każda istota w grze, podzielona na kategorie według typu stwora. Na przykład szczury można znaleźć w pliku [https://github.com/PolanieOnLine/PolanieOnLine/blob/master/data/conf/creatures/stendhal/animal.xml]. | |
− | === | + | ===Dodaj do mapy lub plantatora=== |
− | + | Możesz chcieć dodać przedmioty do mapy (aby gracz mógł je zbierać). Możesz dodać do strefy, tworząc plik java (dobry dla pojedynczych elementów, takich jak trucizna i zwój stołu Haizena w jego chacie) lub dodać za pomocą kafelków, co początkowo wymaga więcej pracy, ale pozwala na dodawanie do warstwy obiektów w kafelkach w przyszłości. (Dobre dla rudy żelaza do zbierania z ziemi, ziół itp.). Wymaga to całego samouczka o spawnerach (znanych również jako hodowcy), zobacz [[JakDodaćGrowers]]. | |
− | === | + | ===Sprzedawany przez NPC=== |
− | + | Jeśli NPC nie został jeszcze utworzony, możesz [[Kodowanie NPC PolanieOnLine|Jak zakodować nowego NPC]]. Następnie będziesz musiał dodać zachowanie sprzedawcy do swojego NPC, które powinno być omówione osobno. Dopóki tego nie zrobisz, spójrz na przykłady sprzedawcy, takie jak Margaret w tawernie Semos w swoim kodzie źródłowym. Plik to [https://github.com/PolanieOnLine/PolanieOnLine/blob/master/src/games/stendhal/server/maps/semos/tavern/BarMaidNPC.java]. Jeśli masz problemy ze zrozumieniem nazwy przedmiotu przez NPC, możesz sprawdzić [[Jak przetestować NPC Parser]]. | |
− | === | + | ===Produkowanie przez NPC=== |
− | + | Jeśli NPC nie został jeszcze utworzony, możesz [[Kodowanie NPC PolanieOnLine|Jak zakodować nowego NPC]]. Będziesz musiał dodać zachowanie producenta do swojego NPC, które powinno być omówione osobno. Dopóki tego nie zrobisz, spójrz na przykłady producentów, takie jak Arlindo w piekarni Ados w swoim kodzie źródłowym. Plik to [https://github.com/PolanieOnLine/PolanieOnLine/blob/master/src/games/stendhal/server/maps/ados/bakery/BakerNPC.java]. Jeśli masz problemy ze zrozumieniem nazwy przedmiotu przez NPC, możesz sprawdzić [[Jak przetestować NPC Parser]]. | |
− | === | + | ===Zadania związane z przedmiotami i nagrody za zadania=== |
− | + | Być może będziesz chciał, aby Twój NPC wyposażył gracza w przedmiot w ramach zadania, patrz [[JakNapisacZadanie]]. Możesz także dodać swoje przedmioty do [[https://polanieonline.eu/zadania/burmistrze/zadanie_burmistrza_ados.html|Dzienne zadanie]] lub [[https://polanieonline.eu/zadania/burmistrze/zadanie_kuratorki_w_kirdneh.html|Tygodniowe zadanie na przedmiot]], które są związane z pojawieniem się na świecie (np. rzadki przedmiot). | |
---- | ---- | ||
− | [[ | + | [[PolanieOnLine | Powrót do głównej strony wiki PolanieOnLine]] |
− | [[Category: | + | [[Category:PolanieOnLine]] |
Aktualna wersja na dzień 19:54, 28 cze 2021
Możesz dodać nowy przedmiot do gry w kilku bardzo prostych krokach:
Spis treści
Przygotowanie
Skonfiguruj środowisko programistyczne zgodnie z opisem w PolanieOnLine na Eclipse.
Edycja przedmioty.xml
Wszystkie pliki przedmioty.xml zlokalizowane są w folderze /data/conf/items/. Są ułożone według klasy (patrz poniżej), np: tarcze, miecze, klucze, żywność itp... Plik zawiera wszystkie opisy przedmiotów w grze. Zacznijmy od tego, jak robić broń, na przykład w daggers.xml:
<item name="sztylecik"> <type class="sword" subclass="dagger" tileid="-1"/> <description>Oto sztylecik. Bardziej służy za dekorację, ale możesz nim dość szybko dźgnąć.</description> <implementation class-name="games.stendhal.server.entity.item.Item"/> <attributes> <atk value="8"/> <rate value="3"/> </attributes> <weight value="0.2"/> <value value="8533"/> <equipable> <slot name="bag"/> <slot name="lhand"/> <slot name="rhand"/> </equipable> </item>
Ważne jest, aby zrozumieć, jak to działa.
Musimy nadać przedmiotowi nazwę i jest to robione w tagu item. Następnie określamy klasę i podklasę w tagu type. Jeśli sprawdzisz ścieżkę obrazka w kliencie, zdasz sobie sprawę, że wygląda to podobnie do:
sprites/ items/ klasa/ podklasa.png
W ten sposób możemy ponownie użyć jednego GFX dla różnych elementów. Na przykład: nóż + 1, stary nóż, elficki nóż, ... Dajemy elementowi ładny opis (gdy gracz kliknie Zobacz) wewnątrz tagu description.
Znacznik implementacji należy skopiować z góry, chyba że element można układać w stosy, w takim przypadku użyj:
<implementation class-name="games.stendhal.server.entity.item.StackableItem"/>
Gdy status przedmiotu może zostać zmieniony np: poprzez niszczenie się jego stanu, wtedy zastosuj:
<implementation class-name="games.stendhal.server.entity.item.BreakableItem"/>
Wewnątrz tagu atrybuty możesz określić atrybuty broni:
- ATK jest to wartość proporcjonalna do szkody, jaką przedmiot może wyrządzić.
- DEF (OBR) jest to wartość proporcjonalna do tego, ile uszkodzeń może zablokować przedmiot.
- RATE (WAGA) to jak szybko możesz trafić bronią ofensywną.
- WAGA 1 oznacza, że możesz trafić w każdej turze, WAGA 10 oznacza tylko raz na 10 tur.
- WAGA musi być większa niż 0, ale nie ma górnej granicy. (W POL najwolniejszą broń jaką mamy to 15)
- Tylko broń ofensywna ma wagę.
- RANGE (ZASIĘG) jest atrybutem ataku broni dystansowej, takiej jak łuk i strzała, lub pocisków, takich jak włócznie oraz różdzki i magie.
- Im większy zasięg, tym broń jest skuteczniejsza.
- QUANTITY (ILOŚĆ) to atrybut broni, którą można układać w stosy, takich jak strzały i włócznie (ustawiona na 1)
- LIFESTEAL (KRADZIEŻ ŻYCIA) to specjalny atrybut broni ofensywnej.
- Musi to być liczba z przedziału od -1 do 1.
- Wszelkie obrażenia od ataku zadane bronią kradzieży życia są „zwracane” graczowi jako leczące PŻ
- Broń z kradzieżą życia 0,2 przywraca graczowi 20% PŻ obrażeń, jakie zadają wrogowi.
- Ujemna kradzież życia wysysa HP gracza zgodnie z obrażeniami, jakie zadają wrogowi.
W przypadku żywności, napojów, mikstur i trucizn te atrybuty są następujące:
- AMOUNT - całkowite PŻ, które przywraca przedmiot (ujemne dla trujących przedmiotów)
- REGEN - ile jesteś leczony na raz (dla mikstur powinno to być równe AMOUNT, dla trucizn powinno być ujemne)
- FREQUENCY - jak szybko jesteś uzdrowiony (mniejsza liczba oznacza szybciej, wybierz 1 dla mikstur)
- QUANTITY - powinny być używane (ustawione na 1), wszystkie można układać w stosy.
Zwróć uwagę, że mikstury i trucizny (i antidotum) są dostępne na klasie drinks. Odtrutki mają:
- AMOUNT - jak długo chronią cię przed trucizną (np. antidotum to 400, większe to 800)
- REGEN równa 0
- FREQUENCY równa 1
- QUANTITY równa 1
W przypadku zwojów, z których większość to zwoje teleportacyjne, postępuj zgodnie z przykładami w scrolls.xml, aby wybrać implementację. Atrybut INFOSTRING dla zaznaczonych zwojów to miejsce docelowe zwoju, np.
<infostring value="0_nalwor_city 40 60"/>
W przypadku zwojów przywołania INFOSTRING to nazwa stworzenia, lecz implementacja
<implementation class-name="games.stendhal.server.entity.item.scroll.SummonScroll"/>
dba o to, więc nie ustawiasz tego.
To powinny być wszystkie oferowane przedmioty specjalne. Wiele przedmiotów (np. zioła, klucze, drewno, pieniądze) nie miałoby żadnych atrybutów lub atrybutów poza ilością.
Na koniec musisz określić, gdzie można wyposażyć przedmiot:
- rhand
- lhand
- armor
- head
- legs
- cloak
- finger
- fingerb
- pas
- feet
- keyring
- bag
Wszystkie przedmioty powinny znajdować się w torbie, chyba że masz dobry powód, dla którego gracze nie powinni mieć możliwości ich noszenia. Wszystkie przedmioty, które można układać w stosy, powinny być wyposażone w rhand i lhand na wypadek, gdyby gracz chciał podzielić stosy. I chociaż w PolanieOnLine mamy rysunek, gdzie tarcza i miecz powinny iść w oknie postaci, pozwalamy graczom wyposażyć się w tarczę i broń w obu rękach. Pierścionki zakładane są na palec, ale także w rzemyku i torbie dla ułatwienia przenoszenia.
Dodanie GFX
Teraz umieść sprite 32x32 w folderze data/sprites/items/<klasa>/<podklasa>.png
Zobacz także Jak poznać specyfikacje graficzne przedmiotów
Jeśli chcesz, aby obraz przedmiotu był animowany (jak pieniądze), po prostu utwórz sprite'a 32N x 32. Na przykład. jeśli ma 5 klatek w animacji, będzie to sprite 160 x 32. Automatycznie pojawi się animacja.
Rejestracja klasy
Do tej pory zdefiniowaliśmy, jaki element jest podobny do serwera. Zarejestrowanie klasy mówi klientowi, co z nią zrobić. (Czy można go układać w stosy i powinien mieć wyświetlane liczby, czy jest użyteczny i powinien mieć wyświetlane użycie?) Większość klas jest już zarejestrowana i możesz zignorować tę sekcję... czytaj dalej, aby się dowiedzieć.
Przedmioty będą domyślnie zachowywać się dla klienta jak przedmiot nie nadający się do układania w stos i nie nadający się do użytku. Dotyczy to zbroi, broni i większości przedmiotów, które się nie zmieniają. Klasy nadające się do układania w stosy, ale nie nadające się do użytku, są rejestrowane według klasy, tj. pieniądze, amunicja, zioła itp. Większość przedmiotów użytkowych, takich jak żywność, napoje, jest rejestrowanych jako cała klasa. Więc jeśli dodajesz do jakiejkolwiek istniejącej klasy, najprawdopodobniej możesz zignorować wszystkie następujące rzeczy. Po prostu wróć, jeśli coś nie działa... tak jak oczekiwałeś, że będziesz mógł użyć nowego przedmiotu, a nie możesz. Lub jeśli dodajesz zupełnie nową klasę.
Tak więc, jeśli masz nową klasę i chcesz, aby można ją było układać w stosy lub używać lub jest to całkowicie nowy obiekt po stronie klienta, rozszerzający przedmiot, dodaj swoją klasę z typem (przedmiotem), klasą i wybranym zachowanie do reszty w src/games/stendhal/client/entity/factory/EntityMap.java, np.
// ''Flower'' był nową klasą sztaplowanych przedmiotów
register("item", "flower", null, StackableItem.class);
// ''Drink'' były nową klasą przedmiotów użytkowych
register("item", "drink", null, UseableItem.class);
// ''Box'' to nowy obiekt po stronie klienta
register("item", "box", null, Box.class);
A co, jeśli twój przedmiot należy do klasy, która jest połączeniem elementów nadających się do układania w stosy i nie nadających się do układania w stosy lub nadających się do użytku i nie nadających się do użycia? Pamiętaj, że ustawienie domyślne nie jest możliwe do układania w stosy i nie nadaje się do użytku. Więc musisz zarejestrować te specjalne indywidualnie. Odbywa się to według typu (elementu), klasy, jak poprzednio, a także podklasy (tak samo jak w xml), aby określić dokładnie, o który element masz na myśli.
// większość narzędzi nie ma zastosowania, ale ''sugar mill'' powinna. Podklasa w xml to sugarmill
register("item", "tool", "sugarmill", UseableItem.class);
Wreszcie przejdź do src/games/stendhal/client/gui/j2d/entity/EntityViewFactory.java i skonfiguruj element w ten sam sposób tylko wtedy, gdy musisz dodać do EntityMap powyżej. Oto przykłady
// ''Flower'' był nową klasą sztaplowanych przedmiotów
register("item", "flower", null, StackableItem2DView.class);
// ''Drink'' były nową klasą przedmiotów użytkowych
register("item", "drink", null, UseableItem2DView.class);
// ''Box'' to nowy obiekt po stronie klienta
register("item", "box", null, Box2DView.class);
// większość narzędzi nie ma zastosowania, ale ''sugar mill'' powinna. Podklasa w xml to sugarmill
register("item", "tool", "sugarmill", UseableItem2DView.class);
Dodaj gramatykę
Nazwy przedmiotów powinny być krótkie i wystarczające, aby zidentyfikować przedmiot, ale w mowie i piśmie w języku polskim mogą występować dodatkowe słowa związane z wypowiedzeniem przedmiotu. Na przykład Carmen powinna zaoferować sprzedaż „100 butelek eliksiru”, a nie „100 eliksirów”. (Czy dodać tutaj przykład tekstu NPC?)
Kilka przykładów:
eliksir | butelka eliksiru |
skórzane spodnie | para skórzanych spodni |
mięso | kawałek mięsa |
Aby dodać taki przedrostek gramatyczny do mowy i rozpoznawania mowy NPC, edytuj src/games/stendhal/common/grammar/PrefixManager.java. Szablon:TODO
Dodanie do gry
Wypada z potwora
Możesz sprawić, by stwór upuścił twój nowo wykonany przedmiot. Odbywa się to poprzez edycję tego stworzenia w jego pliku XML, znajdującym się w lokalizacji pliku [1]. W tym folderze znajduje się każda istota w grze, podzielona na kategorie według typu stwora. Na przykład szczury można znaleźć w pliku [2].
Dodaj do mapy lub plantatora
Możesz chcieć dodać przedmioty do mapy (aby gracz mógł je zbierać). Możesz dodać do strefy, tworząc plik java (dobry dla pojedynczych elementów, takich jak trucizna i zwój stołu Haizena w jego chacie) lub dodać za pomocą kafelków, co początkowo wymaga więcej pracy, ale pozwala na dodawanie do warstwy obiektów w kafelkach w przyszłości. (Dobre dla rudy żelaza do zbierania z ziemi, ziół itp.). Wymaga to całego samouczka o spawnerach (znanych również jako hodowcy), zobacz JakDodaćGrowers.
Sprzedawany przez NPC
Jeśli NPC nie został jeszcze utworzony, możesz Jak zakodować nowego NPC. Następnie będziesz musiał dodać zachowanie sprzedawcy do swojego NPC, które powinno być omówione osobno. Dopóki tego nie zrobisz, spójrz na przykłady sprzedawcy, takie jak Margaret w tawernie Semos w swoim kodzie źródłowym. Plik to [3]. Jeśli masz problemy ze zrozumieniem nazwy przedmiotu przez NPC, możesz sprawdzić Jak przetestować NPC Parser.
Produkowanie przez NPC
Jeśli NPC nie został jeszcze utworzony, możesz Jak zakodować nowego NPC. Będziesz musiał dodać zachowanie producenta do swojego NPC, które powinno być omówione osobno. Dopóki tego nie zrobisz, spójrz na przykłady producentów, takie jak Arlindo w piekarni Ados w swoim kodzie źródłowym. Plik to [4]. Jeśli masz problemy ze zrozumieniem nazwy przedmiotu przez NPC, możesz sprawdzić Jak przetestować NPC Parser.
Zadania związane z przedmiotami i nagrody za zadania
Być może będziesz chciał, aby Twój NPC wyposażył gracza w przedmiot w ramach zadania, patrz JakNapisacZadanie. Możesz także dodać swoje przedmioty do [zadanie] lub [zadanie na przedmiot], które są związane z pojawieniem się na świecie (np. rzadki przedmiot).