JakDodacMapyNaSerwerPolanieOnLine: Różnice pomiędzy wersjami

Z PolanieOnLine
Skocz do: nawigacja, szukaj
 
Linia 202: Linia 202:
 
Ustawienia i odniesienia docelowe pozostają bez zmian. Nadal możesz ustawić inne atrybuty, takie jak komunikat odrzucenia i ukrywanie na minimapie, jak w niektórych przykładach powyżej.
 
Ustawienia i odniesienia docelowe pozostają bez zmian. Nadal możesz ustawić inne atrybuty, takie jak komunikat odrzucenia i ukrywanie na minimapie, jak w niektórych przykładach powyżej.
  
== Adding NPCs==
+
== Dodawanie NPC==
 
Zobacz [[Kodowanie_NPC_PolanieOnLine]]
 
Zobacz [[Kodowanie_NPC_PolanieOnLine]]
  

Aktualna wersja na dzień 21:20, 19 sty 2026


Zakładamy, że masz już za sobą:

oraz że potrafisz czytać (a najlepiej też pisać) XML.


Zmiany w world.tmx

Jeżeli tworzysz nową mapę, upewnij się, że world.tmx ją zawiera, dodając nowy tileset z obrazem mapy.

UWAGA: Ten krok jest wyłącznie dla komfortu psychicznego. Silnik PolanieOnLine / Stendhal NIE korzysta z world.tmx.

Tworzenie mapy

Jeżeli dodajesz nowy większy obszar świata, utwórz plik: data/conf/zones/stendhal/<area>.xml lub data/conf/zones/pol/<area>.xml z zawartością:

<?xml version="1.0" encoding="UTF-8"?>
<zones>
 <!--
   ** Load zones. Written from left to right and from top to bottom.
   ** Please respect it!
   -->

</zones>

Potem z edytuj plik data/conf/zones.xml oraz dodaj odpowiedni wpis (alfabetycznie):

 <group uri="zones/pol/<area>.xml"/>

LUB

 <group uri="zones/stendhal/<area>.xml"/>

Aby aktywować strefę, w data/conf/zones/stendhal/<area>.xml lub data/conf/zones/pol/<area>.xml dodaj:

 <zone name="int_myarea_mylocation" file="interiors/myarea/mylocation.tmx"/>
 <zone name="0_myarea_mylocation" level="0" x="100000" y="200000" file="Level 0/myarea/mylocation.tmx"/>

ZASADY: - Strefy zewnętrzne MUSZĄ mieć level, x i y - Wnętrza (interiors) NIE mają level - Współrzędne zaczynają się w lewym górnym rogu - Strefy nie mogą na siebie nachodzić

Jeżeli strefa jest zewnętrzna i ma podlegać cyklowi dnia i nocy:

 <zone name="0_myarea_mylocation" level="0" x="100000" y="200000" file="Level 0/myarea/mylocation.tmx">
  <attributes>
   <parameter name="color_method">time</parameter>
  </attributes>
 </zone>

NPC, questy, eventy i specjalna logika wymagają kodu Java.

Pliki tworzymy w:

src/games/stendhal/server/maps/<area>/<base-location>/<Entity>.java

Ścieżka <area>/<base-location> odpowiada ścieżce pliku TMX.

Jeżeli mapa jest podzielona (_nw, _ne, _s itd), używamy tylko nazwy bazowej katalogu.

Otwórz plik i upewnij się, że wygląda podobnie jak:

package games.stendhal.server.maps.myarea.mylocation;

import java.util.Map;
import games.stendhal.server.StendhalRPZone;
import games.stendhal.server.config.ZoneConfigurator;

public class MyEntity implements ZoneConfigurator {
    /**
     * Configure a zone.
     *
     * @param       zone            The zone to be configured.
     * @param       attributes      Configuration attributes.
     */
    public void configureZone(StendhalRPZone zone, Map<String, String> attributes) {
        // Add/configure entity to "zone", using optional configuration "attributes"
    }
}

Dla każdej niestandardowej klasy kodu konfiguracji dodaj odpowiednie wpisy "<configurator>" w elemencie "<zone>", używając w pełni kwalifikowanej nazwy pakietu/klasy swoich klas Java:

 <zone name="int_myarea_mylocation" file="interiors/myarea/mylocation.tmx">
  <configurator class-name="games.stendhal.server.maps.myarea.mylocation.MyEntity"/>
 </zone>

Teraz, po dodaniu, przetestuj wynik poprzez uruchomienie serwera.

Zapełnianie stref

Teraz otwórz ponownie plik MyEntity.java i zacznijmy dodawać kod do configureZone() lub metody przez niego wywoływanej. Najczęściej dodajemy do strefy postacie niezależne (NPC) i przedmioty specjalne.

Dodawanie przedmiotów

Sprawdź Jak dodać przedmioty do PolanieOnLine oraz Jak poznać specyfikacje graficzne

Dodawanie portali

Portal to "drzwi" do innego miejsca. Można go używać do wchodzenia i schodzenia po schodach, teleportowania gracza w inne miejsca lub po prostu do wejścia do budynku. Za każdym razem, gdy napotkasz coś, co silnik wymaga od Ciebie wykonania (na przykład przejście pod mostem lub pod drzwiami zamku), możesz rozwiązać problem za pomocą portali.

Istnieje kilka rodzajów portali:

  • Portal „dodany za pomocą XML"
  • Portal jednokierunkowy "dodany za pomocą XML"
  • Portale schodowe "dodane za pomocą kafelków"
  • Portale drzwiowe "dodane za pomocą kafelków"

Portal to po prostu ogólny portal. Działa praktycznie we wszystkim, co sobie wyobrazisz.

Portale tworzy się, dodając wpisy do strefy w pliku "zones.xml". Na przykład utworzenie portalu do wewnętrznego wejścia do budynku, które znajduje się na poziomie 1 12 w budynku (a zewnętrzne wejście na poziomie 10 15), może wyglądać następująco:

 <zone name="int_myarea_mylocation" file="interiors/myarea/mylocation.tmx">
    <portal x="1" y="12" ref="entrance">
     <destination zone="0_myarea_city" ref="mylocation_entrance"/>
    </portal>
 </zone>

 <zone name="0_myarea_city" Level="0" x="500000" y="500000" file="Level 0/myarea/city.tmx">
    <portal x="10" y="15" ref="mylocation_entrance">
     <destination zone="int_myarea_location" ref="entrance"/>
    </portal>
 </zone>

Atrybut ref portalu powinien być nazwą unikalną dla strefy, w której się znajduje (i znaczącą). Ta wartość ma odpowiednie odwołanie poprzez nazwę referencyjną <destination>. Użytkownik jest odpowiedzialny za prawidłowe przypisanie nazw referencyjnych każdemu portalowi.

Portal jednokierunkowy to portal, który istnieje tylko jako punkt końcowy, więc nikt nie może go użyć do powrotu do punktu początkowego. W przypadku portali jednokierunkowych nie ma podelementu <destination>, ponieważ nigdzie one nie prowadzą. Należy również podać implementację inną niż domyślna:

  <portal x="11" y="44" ref="my_exit">
   <implementation class-name="games.stendhal.server.entity.mapstuff.portal.OneWayPortalDestination"/>
  </portal>

Portal z drzwiami do domu to specjalny typ portalu, który automatycznie tworzy wszystkie portale i obszary potrzebne do dodania domu do danej strefy z wejściem w miejscu, w którym znajduje się portal. W pliku tiled/tileset/logic/portals.png jest to portal z drzwiami. Dodaj go do mapy typu "miasto", w której chcesz umieścić wejście do domu. Zapoznaj się z samouczkiem dotyczącym kafelków.

Portale schodowe automatyzują również tworzenie schodów między dwoma obszarami. Bardzo ważne jest, aby portale (oba końce) znajdowały się dokładnie w tym samym miejscu, ale na różnych poziomach. Pozycja oznacza pozycję absolutną. Ponadto, ze względu na obecną implementację, należy uważać, aby nie umieszczać wielokierunkowych portali schodowych w tym samym miejscu między sąsiednimi poziomami, jeśli nie mają być połączone, ponieważ mogą zostać przypadkowo połączone. Schody kierunkowe są bezpieczniejsze i łączą się tylko z poziomem, do którego prowadzą. Samouczek Tiled opisuje to bardziej szczegółowo.

Portale warunków i akcji

Portale są przebudowywane, aby umożliwić kombinacje warunków i akcji w sposób bardzo podobny do NPC-ów. W rzeczywistości można używać tych samych warunków i akcji. Pełna lista znajduje się pod adresami http://arianne.cvs.sourceforge.net/arianne/stendhal/src/games/stendhal/server/entity/npc/action oraz http://arianne.cvs.sourceforge.net/arianne/stendhal/src/games/stendhal/server/entity/npc/condition

Portal, do którego można przypisać warunek i/lub akcję, nazywa się ConditionAndActionPortal. Nie trzeba ustawiać zarówno warunku, jak i akcji.

Zaimplementuj je w następujący sposób:

 <portal x="64" y="117" ref="entrance">
  <destination zone="-1_semos_chasm_n" ref="exit" />
  <implementation class-name="games.stendhal.server.entity.mapstuff.portal.ConditionAndActionPortal">
   <parameter name="condition">new PlayerHasItemWithHimCondition("specjalna magiczna rzecz", 10)</parameter>
   <parameter name="action">new DropItemAction("specjalna magiczna rzecz", 10)</parameter>
   <parameter name="rejected">Potrzebujesz 10 specjalnych magicznych rzeczy.</parameter>
  </implementation>
 </portal>

Możesz użyć NotConditions:

 <portal x="65" y="13" ref="entrance">
  <destination zone="-1_semos_chasm_w" ref="exit" />
  <implementation class-name="games.stendhal.server.entity.mapstuff.portal.ConditionAndActionPortal">
   <parameter name="condition">new NotCondition(new PlayerHasPetOrSheepCondition())</parameter>
   <parameter name="rejected">Aby dostać się do złowrogiej otchłani, musisz przynieść zwierzę ofiarne</parameter>
  </implementation>
 </portal>

Możesz wykonać więcej niż jedną akcję, używając MultipleActions i wypisując dla niej akcje, a także łącząc Conditions z AndCondition, wypisując dla niej warunki. Składnia jest nieco inna niż w przypadku NPC, zwróć uwagę na dodatkowe [ ] otaczające listę. Jest to spowodowane błędem w Groovy.

   <portal x="37" y="16" ref="example1">
     <destination zone="int_semos_zone" ref="choice_floor_1" />
     <implementation class-name="games.stendhal.server.entity.mapstuff.portal.ConditionAndActionPortal">
       <parameter name="condition">new AndCondition([new NotCondition(new PlayerHasItemWithHimCondition("claymore")) , new LevelLessThanCondition(100)])</parameter>
       <parameter name="action">new MultipleActions([new IncreaseXPAction(100), new EquipItemAction("claymore")])</parameter>
     </implementation>
   </portal>

Ustawienia i odniesienia docelowe pozostają bez zmian. Nadal możesz ustawić inne atrybuty, takie jak komunikat odrzucenia i ukrywanie na minimapie, jak w niektórych przykładach powyżej.

Dodawanie NPC

Zobacz Kodowanie_NPC_PolanieOnLine


Gratulacje, zaludniłeś swoją nową strefę.


Powrót do głównej strony PolanieOnLine