Czy można jakoś wyeksportować waynet do pliku? 3989 5

O temacie

Autor TNTalib

Zaczęty 14.04.2021 roku

Wyświetleń 3989

Odpowiedzi 5

TNTalib

TNTalib

Użytkownicy
posty17
Propsy9
ProfesjaSkrypter
  • Użytkownicy
Siemka,
od jakiegoś czasu bawię się w tworzenie różnych aplikacji w oparciu o Gothica. Zabrałem się wczoraj za projekt interaktywnej mapy gry (coś na zasadzie, że pokazuje wszystkie przedmioty do podniesienia na świecie, gdzie stoi jaki NPC o konkretnej godzinie, gdzie iść żeby wykonać misję itp.). W spacerze przy użyciu macro połączyłem zeny w jeden plik i wyeksportowałem jako uncompiled ascii. Napisałem sobie programik, który wyciągnął z tego zena wszystkie położenia waypointów, przedmiotów, kowadeł, pochodni itd. Mam jednak problem z eksportem waynetu. Przykładowy kod waypointu i czegoś co prawdopodobnie może definiować waynet to: [wayr20 zCWaypoint 0 16901]
wpName=string:LOCATION_11_12_01
waterDepth=int:0
underWater=bool:0
position=vec3:-8083.31982 4737.15039 30173.6797
direction=vec3:0.139173165 0 -0.990267634
[]
[wayl21 § 0 16900]
[]
[wayr21 § 0 16890]
[]
[wayl22 § 0 16890]
[]
[wayr22 § 0 16893]
[]
[wayl23 § 0 16893]
[]
[wayr23 § 0 16895]
[]
[wayl24 § 0 16899]
[]
[wayr24 § 0 16901]
[]
[wayl25 § 0 16901]
[]
[wayr25 § 0 16893]
[]

Uznałem, że przy definiowaniu waypointu, jego id to ostatnia liczba w nawiasie kwadratowym
Cytuj
[wayr20 zCWaypoint 0 16901]
(w tym przypadku 16901), a dalej waynet definiują nawiasy kwadratowe ze znakiem paragrafu na środku. Założyłem, że będzie działało to w ten sposób, że fragmenty z paragrafami mówią z jakim waypointem łączy się waypoint o id 16901, ale jednak coś jest nie tak. O ile takie podejście  faktycznie czasem generuje poprawne połączenia to w większości są to dziwne, nieistniejące połączenia pokroju waypoint startowy-waypoint obozu bractwa w linii prostej. Występuje także wiele przerw w tak wygenerowanym waynecie, typu połowa ścieżki faktycznie jest połączona, później nie ma nic, a później są jakieś randomowe połączenia.
Czy ktoś może wie, gdzie przechowywany jest jakiś plik waynetu, albo jak taki plik wyeksportować ze spacera? Byłbym bardzo wdzięczny za odpowiedź i jakąkolwiek pomoc w tym temacie :)
 

Fabio

Fabio

The Modders
posty3466
Propsy2150
ProfesjaSkrypter
  • The Modders
Nie ma takiej możliwości. Waynet to po prostu minimum dwa połączone ze sobą waypointy, nie ma o tym chyba informacji w pliku zen.

TNTalib

TNTalib

Użytkownicy
posty17
Propsy9
ProfesjaSkrypter
  • Użytkownicy
No ale skąd gra wie, które waypointy jak połączyć? Gdzieś musi to być zapisane, bo nie działa to automatycznie na zasadzie najbliższego sąsiada, ani żadnej innej zautomatyzowanej bo topologia tej sieci nie istnieje. Tak samo jak wstawimy nowy waypoint to do czasu aż go nie połączymy z waynetem to będzie on "zawieszony w próżni", więc gdzieś musi być zapisana informacja, jeżeli połączymy go z innym. Z resztą mój eksperyment łączy część waypointów poprawnie, tylko nie wiem dlaczego generuje też nieistniejące połączenia. Poza tym np. REGoth umie to jakoś odczytać, patrzyłem chwilę w kod źródłowy, jednak nie bardzo rozumiem jak to działa.
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
A to nie jest tak, że waypointy są łączone po kolei?

[WayNet % 0 0]
[% zCWayNet 0 21571]
waynetVersion=int:1
numWaypoints=int:52
[waypoint0 zCWaypoint 0 21572]
wpName=string:ALEWIDOK
waterDepth=int:0
underWater=bool:0
position=vec3:3859.646 555.588135 -2565.0791
direction=vec3:0.275637239 0 -0.96126163
[]
[waypoint1 zCWaypoint 0 21573]
wpName=string:BOSS
waterDepth=int:0
underWater=bool:0
position=vec3:-17217.4023 599.737488 -1132.80322
direction=vec3:0.9510566 0 0.309016943
[]
[waypoint2 zCWaypoint 0 21574]
wpName=string:CAS_SWD
waterDepth=int:0
underWater=bool:0
position=vec3:3413.85229 7440.26611 -20709.8789
direction=vec3:-0.990135491 0.0339409262 -0.135963395
[]
czyli waypoint0 łączy się z waypoint1 a ten z waypoint2 itd.? Tak strzelam, nie sprawdzałem jak są połączone w grze.

Fabio

Fabio

The Modders
posty3466
Propsy2150
ProfesjaSkrypter
  • The Modders
Zaproponowałem rozwiązanie odnośnie usuwania obiektów o danej nazwie/klasie w nowych edytorach, które tworzą rosjanie (w oparciu o Union), ale okazuje się, że przynajmniej w jednym z nich (najnowszym), coś takiego już jest. W takim wypadku mógłbyś użyć tego edytora, usunąć wszystko, co cię nie interesuje (voby, moby), a zostawić jedynie wp (wiadomo, że możesz zrobić to w zwykłym Spacerze, ale usuwanie wszystkiego pojedynczo będzie bardzo czasochłonne).

PS. Nie testowałem tego narzędzia, ale daję informację, że coś takiego już może działać/jest funkcjonalne. Edytor jest jak na razie tylko do G2NK, wymaga Uniona, więcej info na ten moment (temat o edytorze założę, jak się rozkręci, na razie jest wczesna wersja): https://worldofplayers.ru/threads/42322/

TNTalib

TNTalib

Użytkownicy
posty17
Propsy9
ProfesjaSkrypter
  • Użytkownicy
@Adanos dzięki, o tym nie pomyślałemXD przy łączeniu po kolei powstaje bardziej poprawny waynet, ale nadal jest mnóstwo złych połączeń. Obliczając ich długość i usuwając wszystko powyżej 9000 wychodzi coś jak oryginalny waynet, ale nie jestem pewny, czy taki zabieg nie usunął jakiegoś poprawnego połączenia. Pozostaje albo napisanie jakiegoś dziwnego algorytmu, aby to zrobił, albo szukanie innego rozwiązania. Ale w sumie nadal mnie to dziwi, że Gothic nie ma tego opisanego w dobry sposób na poziomie zena, albo skryptów.

[EDIT: Jednak po usunięciu segmentów o długości powyżej 9000 nie ma dobrych efektów, wewnątrz obozów itd. nadal jest gęsta sieć randomowych połączeń. Ośmielę się stwierdzić, że złych połączeń jest kilkukrotnie więcej niż poprawnych. Na zewnątrz w miejscach, gdzie sieć jest gęstsza wygląda to podobnie.]

@Fabio dzięki, parzyłem też coś o programie Spacer.NET, jak będę miał chwilkę to na pewno wypróbuję :) listę i położenia punktów wszystkich waypointów już mam, mam nadzieję, że ten program pozwoli na eksport połączeń między nimi

[DUŻY EDIT]
Udało się! Może komuś się ta wiedza przyda więc opiszę jak to działa. Interesują nas tylko nagłówki w nawiasie kwadratowym np.
[wayl69 zCWaypoint 0 5160]
lub
[wayr69 § 0 5157].
Jak widać dzielą się one na cztery segmenty oddzielone spacją. Segment pierwszy określa którym wierzchołkiem odcinka o danym identyfikatorze będzie określony waypoint. Drugi i trzeci segment zupełnie nas nie interesuje. Czwarty segment to ID waypointu. Tłumacząc teraz podane przykłady:
1. [wayl69 zCWaypoint 0 5160] - lewym wierzchołkiem drogi 69 jest waypoint o id 5160
2. [wayr69 § 0 5157] - prawym wierzchołkiem drogi 69 jest waypoint o id 5157

Na tej podstwie tworząc wszystkie linie powstaje nam kompletny waynet.
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry