Teraz jest Pt 19 kwi, 2024 01:09


Skrypt wyświetlający pozycję każdej jednostki na mapie

Archiwum działów sekcji Operation Flashpoint
  • Autor
  • Wiadomość
Offline
Avatar użytkownika

alderous

Pułkownik

Pułkownik

  • Posty: 1784
  • Dołączył(a): Cz 19 sie, 2004 13:20
  • Lokalizacja: Łódź

Skrypt wyświetlający pozycję każdej jednostki na mapie

PostN 04 kwi, 2010 17:35

Czy ktoś zetknął się z skryptem/sposobem na uzyskanie czegoś takiego: gracz na bieżąco widzi wszystkie jednostki na mapie?

Przydało by mi się coś takiego do debugowania, a moje dotychczasowe próby stworzenia nie wypaliły. Może nie mam co szukać i ktoś już to zrobił? Najlepiej byłoby aby wszystkie jednostki były pokazane, a nie tylko grupy (tak jak np. jest w DAC).

Ewentualne sugestie jak to zrobić też mogą być.
Offline
Avatar użytkownika

Pan Salva

Kapral

Kapral

  • Posty: 66
  • Dołączył(a): Śr 20 sie, 2008 14:08
  • Lokalizacja: Silesia

PostN 04 kwi, 2010 17:47

Oznaczyć jednostki na mapie markerami i użyć polecenia "setmarkerpos".

Skrypt wyglądałby mniej więcej tak:

#loop

"nazwa_markera" setmarkerpos getpos leader nazwa_jednostki

goto "loop"
"Don't push me, 'coz I'm close to the edge
I'm trying not to lose my head"
Offline
Avatar użytkownika

alderous

Pułkownik

Pułkownik

  • Posty: 1784
  • Dołączył(a): Cz 19 sie, 2004 13:20
  • Lokalizacja: Łódź

PostN 04 kwi, 2010 18:02

Wolałbym nie stosować tego rozwiązania bo:

1. jednostek może być ponad 100
2. jednostki lub grupy mają pewne prawdopodobieństwo obecności (nie wynoszące 100%)

Zależy mi na czymś bardziej uniwersalnym i mniej pracochłonnym
Offline
Avatar użytkownika

kondor

Major

Major

  • Posty: 880
  • Dołączył(a): Pt 11 lut, 2005 04:00
  • Lokalizacja: Berlin (wschodni)

PostN 04 kwi, 2010 18:19

Ja zrobiłem takie coś tyle, że w sqf do army2: http://www.forum.armacenter.pl/viewtopic.php?t=9874
Jednak chyba w ofp nie ma chyba chociażby komendy do tworzenia markerów i używania bloków {} jako funkcji/skryptów, więc nie wiem jak byłoby to przydatne.
W każdym bądź razie moja idea jest taka:
    - w tle leci skrypt, który co krótki czas leci po tablicy w postaci: [[obiekt1, "nazwa_markera1"], ..., [obiektN, "nazwa_markeraN"] ] i ustawia pozycje/dir markera na pozycji obiektu
    - przy update jest sprawdzane alive obiektu i ewentualnie usuwany jest martwy item (- lepiej robić od końca tablicy)
    - ręczne dodawanie obiektów do tego systemu - jako oddzielna funkcja, która ogranicza się do sprawdzenia czy nie ma już tego obiektu już i dodanie na koniec tablicy (i oczywiście stworzenie dynamicznie markera z unikalną nazwą)


Spędziłem nad tym ponad 2 dni, jeślibyś miał zamiar zacząć...
Offline
Avatar użytkownika

alderous

Pułkownik

Pułkownik

  • Posty: 1784
  • Dołączył(a): Cz 19 sie, 2004 13:20
  • Lokalizacja: Łódź

PostN 04 kwi, 2010 18:33

Niestety nie ma komendy do tworzenia markerów. Próbowałem wyjść od komendy reveal, ale nie działa mi to tak jakbym chciał tzn. wyświetla mi jednostki, ale nie uwzględnia tego że się poruszają.

Chyba zaczynam rozumieć czemu w misjach DAC wrzuca się te wszystkie markery :/
Offline
Avatar użytkownika

Kadryl

Major

Major

  • Posty: 883
  • Dołączył(a): Cz 14 wrz, 2006 14:04
  • Lokalizacja: Wa-wa

PostN 04 kwi, 2010 20:36

W crCTI markery były poza mapą. Liczba markerów równa liczbie obiektów.
Aplikacja w pętli która aktualizuje położenie obiektu i przyporządkowuje do nich markery. Wszystko na wektorach z wykorzystaniem "foreach". To tak w skrócie.
Można to zobaczyć , po rozpakowaniu crCTI 1.1 w katalogu Player/Updateunitmarkers.sqs
Offline
Avatar użytkownika

kondor

Major

Major

  • Posty: 880
  • Dołączył(a): Pt 11 lut, 2005 04:00
  • Lokalizacja: Berlin (wschodni)

PostN 04 kwi, 2010 20:42

Tyle, że w crcti liczba jednostek była ograniczona z góry przez 2*liczba grup*max group size + resistance.
Nie bardzo rozumiem co mają do tego wektory, chyba tyle, że są zazwyczaj reprezentowane przez tablice.
Offline
Avatar użytkownika

Kadryl

Major

Major

  • Posty: 883
  • Dołączył(a): Cz 14 wrz, 2006 14:04
  • Lokalizacja: Wa-wa

PostPn 05 kwi, 2010 12:25

@alderous
Brak kreakcji markerów to niewątpliwy ból OFP ale, o ile nie chcesz wstawiać nowych jednostek do gry (createunit, createvehicle), to rozwiązanie Kondora jest wystarczające a skrocenia czasu odświerzania spowoduje że i markery będą się przemieszczać.
Problem może pojawić się tylko po likwidacji obiektu czyli w każdej pętli musi być aktualizacja wektorów
Kod: Zaznacz cały
wektor set [count wektor, [[obiekt, "marker"], [], [] ] ]

@kondor
"Tablice" ? - to już raczej macierze.
Czy pojedyńczy obiekt nie jest grupą ? I czy w OFP może wstawić dowolną ilość jednostek ?
Offline
Avatar użytkownika

alderous

Pułkownik

Pułkownik

  • Posty: 1784
  • Dołączył(a): Cz 19 sie, 2004 13:20
  • Lokalizacja: Łódź

PostPn 05 kwi, 2010 13:33

Tak czy inaczej wymaga to więcej grzebania, czego najzwyklej nie chce mi się robić. Zwłaszcza, że znalazłem na dysku xcam by Silola i póki co to mi wystarczy.

Oczywiście jeśli komuś będzie się chciało to zrobić to chętnie potestuje, ale robić samemu szkoda mi czasu.
Offline
Avatar użytkownika

kondor

Major

Major

  • Posty: 880
  • Dołączył(a): Pt 11 lut, 2005 04:00
  • Lokalizacja: Berlin (wschodni)

PostPn 05 kwi, 2010 14:22

Kadryl napisał(a):@alderous
Brak kreakcji markerów to niewątpliwy ból OFP ale, o ile nie chcesz wstawiać nowych jednostek do gry (createunit, createvehicle), to rozwiązanie Kondora jest wystarczające
?? nie podałem żadnego rozwiązania do ofp, a mój skrypt potrafi obsłużyć nieograniczoną liczbę jednostek (praktycznie)
Kadryl napisał(a): a skrocenia czasu odświerzania spowoduje że i markery będą się przemieszczać.
a z 3 sekundami się nie przemieszczają?
Kadryl napisał(a):Problem może pojawić się tylko po likwidacji obiektu czyli w każdej pętli musi być aktualizacja wektorów

jeśli będzie się "lecieć" od końca, to problemu praktycznie nie będzie - wystarczyłoby zrobić coś w stylu:
Kod: Zaznacz cały
marked_objects = marked_objects - [dead_unit]

Kadryl napisał(a):@kondor
"Tablice" ? - to już raczej macierze.

w przypadku o którym mówimy macierz = tablica tablic, więc macierz jest tablicą
Kadryl napisał(a):Czy pojedyńczy obiekt nie jest grupą ?
Z tego co wiem, to tylko obiekt grupy jest grupą
Kadryl napisał(a): I czy w OFP może wstawić dowolną ilość jednostek ?
chyba nie

Spróbuje dziś to spłodzić (ale zakładałoby to istnienie odpowiedniej ilości markerów)
Offline
Avatar użytkownika

kondor

Major

Major

  • Posty: 880
  • Dołączył(a): Pt 11 lut, 2005 04:00
  • Lokalizacja: Berlin (wschodni)

PostPn 05 kwi, 2010 15:33

Zaklada się, że istnieje wystarczająco dużo markerów o nazwie "mX" gdzie X to kolejne liczby całkowite od 0.
Oczywiście nie testowane, a sqsów nie pisałem wieki
dbg_unit_markers.sqs:
Kod: Zaznacz cały
dbg_marked_units = [];

_i = 0;
_unit = objNull;

#main
  _i = count dbg_marked_units;
  (_i == 0): goto "after_update";
  #update
    _unit = dbg_marked_units select _i;
    (format ["m%1", _i]) setMarkerPos (getPos _unit);
    ?(not alive _unit): [_unit, _i] exec "remove_marked_unit.sqs";
    _i = _i - 1;
  ?(_i >= 0): goto "update";
  #after_update
  ~3;
goto "main"


remove_marked_unit.sqs:
Kod: Zaznacz cały
dbg_marked_units = dbg_marked_units - [_this select 0];
(format ["m%1", _this select 1]) setMarkerPos [0, 0];
// zmniejszyla sie ilosc uzywanych markerow:
(format ["m%1", count dbg_marked_units]) setMarkerPos [0, 0];


add_marked_units.sqs:
Kod: Zaznacz cały
{dbg_marked_units = dbg_marked_units + [_x] }forEach _this;
Offline
Avatar użytkownika

Kadryl

Major

Major

  • Posty: 883
  • Dołączył(a): Cz 14 wrz, 2006 14:04
  • Lokalizacja: Wa-wa

PostPn 05 kwi, 2010 21:03

Całkiem fajny skrypcik ;-)
Powinien działać z ograniczeniem:
1) dla wszystkich jednostek musi być taki sam marker
2) po likwidacji obiektu o najniższym numerze (tutaj "0") na 3 sekundy zniknie marker ostatniego obiektu oraz
3) markery przeskoczą na kolejne obiekty co powoduje, że skrypt można użyć tylko i wyłącznie dla warunku jak w punkcie 1.

P..s. rozumiem że wprowadzenie obiektów do wektora "dbg_marked_units" możemy zrobić za pomoca wyzwalacza tzn. trigger "wyzwalacz", aktywowany na calej mapie na obecność danej strony i dalej:
Kod: Zaznacz cały
dbg_marked_units = list wyzwalacz
Offline
Avatar użytkownika

kondor

Major

Major

  • Posty: 880
  • Dołączył(a): Pt 11 lut, 2005 04:00
  • Lokalizacja: Berlin (wschodni)

PostPn 05 kwi, 2010 22:43

Tak, jest to bardzo ograniczony skrypt.
Kadryl napisał(a):P..s. rozumiem że wprowadzenie obiektów do wektora "dbg_marked_units" możemy zrobić za pomoca wyzwalacza tzn. trigger "wyzwalacz", aktywowany na calej mapie na obecność danej strony i dalej:
Kod:
dbg_marked_units = list wyzwalacz

Lub bardziej uniwersalnie
Kod: Zaznacz cały
(list wyzwalacz) exec "add_marked_units.sqs"

zeby nie usuwać ewentualnych innych śledzonych jednostek dodanych np w innych wyzwalaczach

Powrót do Operation Flashpoint

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 29 gości

cron