Teraz jest Wt 24 cze, 2025 20:33


Skrypt przemieszczania po osiągnięciu odpowiedniej prędkości

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

Grabarz^^

Chorąży

Chorąży

  • Posty: 224
  • Dołączył(a): Pn 19 lip, 2004 23:59
  • Lokalizacja: Darłowo

Skrypt przemieszczania po osiągnięciu odpowiedniej prędkości

PostWt 15 lis, 2005 15:28

Przestałem już bawić się OFP jako grą czysto militarną. Obecnie dla czystej przyjemności próbuję (z miernym skutkiem) wykorzystać jego możliwości do innych celów. Dawno już wpadł mi do głowy jeden pomysł, ktoś miał mi nawet pomóc w jego realizacji (to nie miało być publikowane), ale nic z tego nie wyszło. Pomysł ten wymaga skryptu, bądź kilku skryptów. Być może prostych, być może skomplikowany, być może prosty - nie znam się za bardzo na skryptach niestety. Może ktoś tutaj będzie mógł i potrafił mi pomóc. Zapewne domyślicie się co to za projekt i na czym jest wzorowany. Zrobiono już z OFP takie rzeczy, że jedna dziwota mniej nie zrobi różnicy. A więc:

Wygląda to tak: gracz wsiada do pojazdu, klika na mapie ustalając miejsce "przemieszczenia", następnie rozpędza samochód do 190 km/h i po osiągnięciu tej prędkości pojawia się tam, gdzie wcześniej kliknął na mapie. W momencie "przeniesienia" pojawia się sekundowy błysk światła.
I tak w kółko - po każdym kliknięciu i rozpędzeniu do danej prędkości (na razie 190 km/h) - przeniesienie w miejsce kliknięcia.

To w zasadzie wszystko, miłym dodatkiem byłaby też możliwość ustalenia ile godzin zajął ten "skok" - komendą SkipTime. Na przykład "skaczę" o 7:00, a czas przybycia ustalam na 19:00. I o 19 pojawiam się tam gdzie kliknąłem. Wydaje się że to co planuję nie jest aż tak skomplikowane. Ma ktoś jakieś sugestie co z tym zrobić, jak oskryptować?
Offline

Oscypek

Major

Major

  • Posty: 858
  • Dołączył(a): Pn 01 lis, 2004 12:12
  • Lokalizacja: Maków Podhalański

PostWt 15 lis, 2005 15:42

Prosty skrypt nawet, u mnie działa :)


Kod: Zaznacz cały
;script.sqs
onMapSingleClick {}

_pos = _this select 0
_unit = _this select 1

@(speed _unit >= 190)
 
titletext[" ","WHITE OUT",.1]
~.01
_unit setpos _pos
~.01
titletext[" ","WHITE IN",.1]

exit



I jeszcze wyzwalacz o warunku np: true, aktywacji radio Alpha, Cykliczny i przy aktywacji:
onMapSingleClick {[_pos,car1] exec "script.sqs"};

UWAGA! Musisz nazwać samochód/pojazd - nie jednostke - car1
Offline
Avatar użytkownika

JaFranek

Major

Major

  • Posty: 581
  • Dołączył(a): Wt 16 lis, 2004 14:46
  • Lokalizacja: Tbg

PostWt 15 lis, 2005 18:50

Fajny pomysł i skrypt. Coś na wzór filmu "Powrót do przyszłości" :)
Nie pytaj, co OF może zrobić dla ciebie, ale co Ty możesz zrobić dla OF
Offline
Avatar użytkownika

Grabarz^^

Chorąży

Chorąży

  • Posty: 224
  • Dołączył(a): Pn 19 lip, 2004 23:59
  • Lokalizacja: Darłowo

PostWt 15 lis, 2005 18:55

Skrypt działa jak powinien...w zasadzie. Szkoda tylko że po "skoku" pojazd się zatrzymuje (zrobiłem to troszkę inaczej, nie skryptem i po "skoku" nadal jechał, nie wiem czemu tak jest), ale to w zasadzie nie problem. Teraz jak do tego dokoptować komendę SkipTime. Tzn. żeby pojawiało się ile godzin "do przodu" można "skoczyć" (od 1 do 24). Pewnie będzie do tego potrzebne ActionMenu. Ale jak? Nie mam pojęcia :)
Offline

Oscypek

Major

Major

  • Posty: 858
  • Dołączył(a): Pn 01 lis, 2004 12:12
  • Lokalizacja: Maków Podhalański

PostWt 15 lis, 2005 19:36

Kod: Zaznacz cały
;script.sqs
onMapSingleClick {}

_pos = _this select 0
_unit = _this select 1

@(speed _unit >= 190)
 
titletext[" ","WHITE OUT",.1]
~.01
_unit setpos _pos
_unit setvelocity [sin(getdir _unit)*15,cos(getdir _unit)*15,0.1]
~.01
titletext[" ","WHITE IN",.1]

exit


Dodałem w pewnym miejscu komendę _unit setvelocity [sin(getdir _unit)*15,cos(getdir _unit)*15,0.1] - rozpędzi to pojazd ale na chwile. Niestety nie wiem jak zrobić aby się nie zatrzymał. Może ustawienie go na wysokości np: 2 m by to coś zmieniło, ale wątpie. Jeśli chodzi o menu akcji to jest dosyć niewygodne rozwiązanie, ze względu na dosyć dużą ilość skryptów...można toz robić takim...eee...dialogiem...menu rozwijane z którego wybierze się godzinę. Najlepiej gdyby skok odbywał się po kliknięciu "OK", gdyż mogą wystąpić problemu natury czysto technicznej wynikające z przypisywania wartości. Jeśli chesz akcjami to dam taki przykład:

Kod: Zaznacz cały
;init.sqs

hour_action_0 = player addAction ["Godzina 10:00","dziesiata.sqs"]

Kod: Zaznacz cały
;dziesiata.sqs
skiptime 10
player removeAction hour_action_0


Tylko nie wiem czy w init.sqs tak gdzie jest ["Godzina 10:00","dziesiata.sqs"]
to czy dziesiata.sqs powinna być w cudzysłowiu czy nie
Offline
Avatar użytkownika

alderous

Pułkownik

Pułkownik

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

PostPt 18 lis, 2005 10:15

Oscypek napisał(a):...można toz robić takim...eee...dialogiem...menu rozwijane z którego wybierze się godzinę. Najlepiej gdyby skok odbywał się po kliknięciu "OK", gdyż mogą wystąpić problemu natury czysto technicznej wynikające z przypisywania wartości.


Wątpię by jakiś Polak potrafił tworzyć od zera takie okienka dialogowe, ale jest się z czego nauczyć. Chyba najlepiej byłoby gdyby pojawiała się tablica podobna do kalkulatra z edit boxem, przyciskami od 0 do 9 i klawiszem "SET". Przypisywało by się liczbę godzin "skoku" do zmiennej i po przekroczeniu danej prędkości o tyle godzin skakało by się w przyszłość.
Offline

Oscypek

Major

Major

  • Posty: 858
  • Dołączył(a): Pn 01 lis, 2004 12:12
  • Lokalizacja: Maków Podhalański

PostPt 18 lis, 2005 16:09

Nie ma Polaka?

Jak nie jak jest :) Na pewno jest wielu takich...

Zrobiłbym coś takiego tylko nie wiem jak to powinno wyglądać...rozwijane menu...przyciski...wpisanie godziny w takim pasku...bo głębszym namyśle to nie jest takie trudne :)
Offline
Avatar użytkownika

alderous

Pułkownik

Pułkownik

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

PostPt 18 lis, 2005 16:22

Oscypek napisał(a):Nie ma Polaka?

Jak nie jak jest :) Na pewno jest wielu takich...

Zrobiłbym coś takiego tylko nie wiem jak to powinno wyglądać...rozwijane menu...przyciski...wpisanie godziny w takim pasku...bo głębszym namyśle to nie jest takie trudne :)


Wprost pchają się drzwiami i oknami :D

W każdym razie zrób - to byłoby coś ciekawego.

PS Mimo wszystko uważam że to jest trudne
Offline

Oscypek

Major

Major

  • Posty: 858
  • Dołączył(a): Pn 01 lis, 2004 12:12
  • Lokalizacja: Maków Podhalański

PostPt 18 lis, 2005 16:42

Nie ma problemu :)

Zrobiłem to teraz na szyko, więc efekt jest troche brzydki ale nad designem popracować można :D

Skiptime.sqs . W inicjacji np: można taki wstawić: [] exec "skiptime.sqs"
Kod: Zaznacz cały
_ok = createDialog "skip_time"
?!(_ok) : hint "Error";exit

@skip_time_dialog_end

exit


Do wklejenia w description.ext:
Kod: Zaznacz cały
#define ST_LEFT      0
#define ST_RIGHT     1
#define ST_CENTER    2
#define ST_MULTI        16
#define ST_SHADOW       256
#define ST_NO_RECT      512
#define CT_STATIC    0
#define ST_PICTURE   48
#define FontM "tahomaB36"
#define FontHTML "CourierNewB64"
#define CT_ACTIVETEXT 11
#define CT_BUTTON   1
#define ST_FRAME   64
#define CT_EDIT    2
#define CT_COMBO                 4
#define CT_LISTBOX               5
#define CT_SLIDER     3
#define ST_HPOS       0x0F

class RscText
{
        type = CT_STATIC;
        idc = -1;
        style = ST_LEFT;
        colorBackground[] = {0, 0, 0, 0};
        colorText[] = {1, 1, 1, 1};
        font = FontM;
        sizeEx = 0.04;
};

class RscPicture
{
        type = CT_STATIC;
        idc = -1;
        style = ST_PICTURE;
        colorBackground[] = {0, 0, 0, 0};
        colorText[] = {1, 1, 1, 1};
        font = FontM;
        sizeEx = 0.04;
};

class RscActiveText
{
        type = CT_ACTIVETEXT;
        idc = -1;
        style = ST_LEFT;
        color[] = {1, 1, 1, 1};
        colorActive[] = {1, 0, 0, 1};
        font = FontM;
        sizeEx = 0.04;
        soundEnter[] = {"ui\ui_over", 0.2, 1};
        soundPush[] = {, 0.2, 1};
        soundClick[] = {"ui\ui_ok", 0.2, 1};
        soundEscape[] = {"ui\ui_cc", 0.2, 1};
        default = false;
};

class RscButton
{
        type = CT_BUTTON;
        idc = -1;
        style = ST_CENTER;
        colorText[] = {0, 0, 0, 1};
        font = FontHTML;
        sizeEx = 0.025;
        soundPush[] = {, 0.2, 1};
        soundClick[] = {"ui\ui_ok", 0.2, 1};
        soundEscape[] = {"ui\ui_cc", 0.2, 1};
        default = false;
};

class RscFrame
{
        type = CT_STATIC;
        idc = -1;
        style = ST_FRAME;
        colorBackground[] = {0, 0, 0, 0};
        colorText[] = {1, 1, 1, 1};
        font = FontM;
        sizeEx = 0.04;
};

class RscEdit
{
       type = CT_EDIT;
       idc = -1;
       style = ST_LEFT;
       font = FontHTML;
       sizeEx = 0.02;
       colorText[] = {0, 0, 0, 1};
       colorSelection[] = {0.5, 0.5, 0.5, 1};
       autocomplete = false;
       text = ;
};

class RscLB_C
{
        style = ST_LEFT;
        idc = -1;
        colorSelect[] = {0.4, 0.4, 0.4, 1};
        colorSelectBackground[] = {0.2, 0.2, 0.2, 1};
        colorText[] = {0.2, 0.2, 0.2, 1};
        colorBackground[] = {0.4, 0.4, 0.4, 1};
        font = FontHTML;
        sizeEx = 0.025;
        rowHeight = 0.04;
};

class RscListBox: RscLB_C
{
        type = CT_LISTBOX;
};

class RscCombo: RscLB_C
{
        type = CT_COMBO;
        wholeHeight = 0.3;
};

class RscSliderH
{
            type = CT_SLIDER;
            style = ST_HPOS;
            color[] = {0.2, 0.2, 0.2, 1};
            idc = -1;
            sizeEx = 0.025;
};

class skip_time
{
  idd = 00100;
  movingEnable = true;
  controlsBackground[] = {backg, frame};
  objects[] = { };
  controls[] = {slider, guzik};

  class backg: RscText
  {
     colorBackground[] = {0.4, 0.4, 0.4, 0.75};
     text = ;
     x = 0.0125;
     y = 0.02534;
     w = 0.18125;
     h = 0.23392;
  };
 class frame : RscText
 {
  x = 0.0125
  y = 0.02534
  idc = -1
  w = 0.18125
  h = 0.23392
  style = ST_FRAME
  colorText[] = {0, 0, 0, 1};
  colorBackground[] = {0.4, 0.4, 0.4, 0.75};
  SizeEX = 0.025
 text = "Skip Time"
  };
 class slider : RscSliderH
 {
  x = 0.02
  y = 0.1
  idc = 00101
  w = 0.15
  h = 0.04
  style = ST_HPOS
  colorText[] = {0.2, 0.2, 0.2, 1};
  SizeEX = 0.025
  };
 class guzik : RscButton
 {
  x = 0.02
  y = 0.2
  idc = 00102
  w = 0.16
  h = 0.04
  style = ST_CENTER
  colorText[] = {0, 0, 0, 1};
 font = "CourierNewB64"
  SizeEX = 0.025
 text = "OK"
 action = "skip_hour=sliderPosition 00101;skip_time_dialog_end=true;closeDialog 00100"
 default = false
  };
};



I zmieniony lekko skrpyt script.sqs:
Kod: Zaznacz cały

onMapSingleClick {}
_pos = _this select 0
_unit = _this select 1

@(speed _unit >= 190)
 
titletext[" ","WHITE OUT",.1]
~.01
skipTime skip_hour
_unit setpos _pos
~.01
titletext[" ","WHITE IN",.1]

exit


I pozatym wszystko jest tak jak w pierwszym poście :]

Jakby co...to mam jeszcze w wersji rar...nie chciało mi się do pbo zapisywać :)
http://mpsg.boo.pl/files/humve.Intro.rar
Offline
Avatar użytkownika

Jon

Generał

Generał

  • Posty: 10721
  • Dołączył(a): Wt 20 lip, 2004 00:43
  • Lokalizacja: Kraków

PostPt 18 lis, 2005 18:01

Oscypie... mówiłem Ci już, że mnie przerażasz? :lol:
http://www.pajacyk.pl

“Politics is supposed to be the second oldest profession. I have come to realize that it bears a very close resemblance to the first.”
~ Ronald Reagan
Offline

Oscypek

Major

Major

  • Posty: 858
  • Dołączył(a): Pn 01 lis, 2004 12:12
  • Lokalizacja: Maków Podhalański

PostPt 18 lis, 2005 18:16

Czego ty chcesz :?


[Emotinka na zawsze :czarodziej: ]
Offline
Avatar użytkownika

alderous

Pułkownik

Pułkownik

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

PostPt 18 lis, 2005 19:02

Slider? Może to i lepsze, ale buttony z cyframi umożliwiały by wprowadzenie dowolnej wartości liczbowej.

W każdym razie gratuluję umiejętności (Vektorboson tutorial?) i nadal uważam że to nie jest łatwe. Jeśli sądzisz inaczej to obejrzyj sobie przykład SOW Dynamic Dialog v1 Crashdome'a (też jest na ofpec) :]
Offline

Oscypek

Major

Major

  • Posty: 858
  • Dołączył(a): Pn 01 lis, 2004 12:12
  • Lokalizacja: Maków Podhalański

PostPt 18 lis, 2005 20:19

Eee...nie...ale zresztą buttony byłby łatwiejsze do zrobienia...z sliderem jest możliwość tylko do 10.

Jeśli chodzi o SOW Dynamic Dialog v1 - niestety za dobry w skryptach nie jestem, a to jeszcze pliki sqf :D

[Emotinka na zawsze :czarodziej: ]

Jerry: Skoro taki czarodziej jesteś, to wyczaruj nam coś zaskakującego :P A jak nie, to konfiskuję tą emotkę na zawsze :twisted:
Offline
Avatar użytkownika

Grabarz^^

Chorąży

Chorąży

  • Posty: 224
  • Dołączył(a): Pn 19 lip, 2004 23:59
  • Lokalizacja: Darłowo

PostSo 19 lis, 2005 20:10

Dzięki chłopaki, pobawię się tym...szkoda że moja wiedza skryptowa jest tak mała, bo chętnie ubrałbym te "skoki" w jakąś fajną szatę graficzną (tak, to jest wzorowane na Back To The Future), np. błysk przy "skoku" jak przy wybuchu granatu (widoczny dla tego kto patrzy "z zewnątrz")...kto oglądał to wie o co mi chodzi :) No cóż, podłubię coś sam ale rewelacji nie oczekuję :]
Offline

Oscypek

Major

Major

  • Posty: 858
  • Dołączył(a): Pn 01 lis, 2004 12:12
  • Lokalizacja: Maków Podhalański

PostSo 19 lis, 2005 20:45

Błysk jeśli ktoś jest z zewntąrz?

Kod: Zaznacz cały
onMapSingleClick {}
_pos = _this select 0
_unit = _this select 1

@(speed _unit >= 190)
 
? !(player in _unit  && player distance _unit <= 800) : titletext[" ","WHITE OUT",.1]
~.01
skipTime skip_hour
_unit setpos _pos
~.01
? !(player in _unit && player distance _unit <= 800) : titletext[" ","WHITE IN",.1]

exit


Byłoby to do trybu SP. Jeśli gracz nie jest w pojeździe i znajduje się do 800m w okolicy pojazdu to mamy błysk. Coś takiego chyba


[Moja emotka <censored by Jerry> , sio Jerry]
Następna strona

Powrót do Operation Flashpoint

Kto przegląda forum

Użytkownicy przeglądający ten dział: xersius i 2 gości