JakDodacPrzedmiotyDoPolanieOnLine

Z PolanieOnLine
Skocz do: nawigacja, szukaj


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:

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



Powrót do głównej strony wiki PolanieOnLine