Teraz jest Wt 16 kwi, 2024 06:22


Jak zrobić misje na czas?

Dział poświęcony edytorowi ArmA II i Operation Arrowhead, czyli tworzeniu misji.
  • Autor
  • Wiadomość
Offline

bobi877

Cywil

Cywil

  • Posty: 6
  • Dołączył(a): Wt 13 lip, 2010 10:17
  • Lokalizacja: warszawa

Jak zrobić misje na czas?

PostN 29 sie, 2010 15:20

Witam

Wpadłem na fajny pomysł misji coop ale nie mam zbyt dużego doświadczenia w robieniu misji wiec proszę o wyrozumiałość:)

1. Jak zrobić misje na czas? tzn leci śmigłowiec USA i wlatując w wyzwalacz włącza się czas np 10 minut, po opłynięciu tego czasu np nadciągają coraz większe siły wroga i zakładnik ginie. A jeśli zdarza odbić zakładnika i np medyk go opatrzy czas się zatrzymuje.
[ciach]


pozdrawiam i dziękuje za odp
Ostatnio edytowano N 29 sie, 2010 22:10 przez bobi877, łącznie edytowano 1 raz
Offline
Avatar użytkownika

Maverick

Generał

Generał

  • Posty: 772
  • Dołączył(a): Pn 30 kwi, 2007 12:12
  • Lokalizacja: Kutno

PostN 29 sie, 2010 22:10

1. Rodzaj tematu. Rodzaj tematu. Rodzaj tematu. Rodzaj tematu. Rodzaj tematu.
2. Jedno pytanie = jeden temat.
1 + 2: Zapoznaj się z regulaminem forum, zanim zaczniesz pisać posty.

Skasowałem drugie pytanie. Załóż drugi temat, jeśli chcesz uzyskać na nie odpowiedź.
Obrazek
Obrazek


"Read about the history of the place that we live in and stop letting corporate news tell lies to your children." - Immortal Technique
Offline
Avatar użytkownika

Jon

Generał

Generał

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

PostN 29 sie, 2010 22:29

Ufff, skomplikowane.

Nie wiem jak zrobili by to bardziej zaawansowani missionmakerzy, ale ja stawiałbym na duże zazębienie warunków wyzwalaczy.


Czyli śmigło wlatuje w wyzwalacz, który przez "cośtam=true" aktywuje drugi wyzwalacz, który z kolei aktywuje odliczanie 10 min (warunek w stylu this AND maja_zakladnika=true)

Wyzwalacz "odbicia" zakladnika powinien zmienic "maja_zakladnika" na false, i to powinno chyba wystarczyć...


Poprawi mnie ktoś?

Poza tym jak korzystać z "cośtam=true" dowiesz się tutaj. Polecam też cały nasz dział "Tworzenie Misji" na stronie...
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
Avatar użytkownika

Maverick

Generał

Generał

  • Posty: 772
  • Dołączył(a): Pn 30 kwi, 2007 12:12
  • Lokalizacja: Kutno

PostN 29 sie, 2010 22:49

Cóż, w sumie można by strzelić taki skrypt (w .sqs oczywiście, mimo poznania podstawowych podstaw C++, programowania w .sqf nie podejmuję się jeszcze ;]) teoretycznie:
Kod: Zaznacz cały
i = 0
#et1
i = i+1
? i >= 6000 : [] exec "Przegrana.sqs"
? ZAKLADNIK_URATOWANY : goto "et2"
~1
goto "et1"
#et2
; - tu jakieś polecenia, które mają być wykonane po uratowaniu zakładnika, ew. odpalenie kolejnego skryptu


Ten skrypt co sekundę podnosi wartość obiektu i o 1, poczynając od zera, sprawdzając przy okazji, czy nie przekroczył on wartości 6000 sekund (10 minut) - w tym wypadku odpali skrypt odpowiedzialny za anulowanie misji (przy czym dalej będzie można odbić zakładnika i zaliczyć zadanie! sugeruję więc lekką modyfikację, wprowadzenie zmiennej logicznej, która wyłączy timer albo po prostu mission failed i restart). Sprawdza też, czy zmienna logiczna ZAKLADNIK_URATOWANY ma wartość true. Jeśli tak - timer się zatrzyma i skrypt przejdzie do kolejnej części, składającej się w tym wypadku z komentarza ;].

Jeśli popełniłem jakieś błędy, niech mądrzejsi ode mnie mnie poprawią.
Obrazek
Obrazek


"Read about the history of the place that we live in and stop letting corporate news tell lies to your children." - Immortal Technique
Offline
Avatar użytkownika

reyhard

Pułkownik

Pułkownik

  • Posty: 1455
  • Dołączył(a): So 12 mar, 2005 09:56
  • Lokalizacja: wielkiego brata

PostPn 30 sie, 2010 13:14

Kod: Zaznacz cały
i = 0;
#et1
i = i+1;
? i >= 60*10 : [] exec "Przegrana.sqs";
? ZAKLADNIK_URATOWANY : goto "et2"
~1
goto "et1"
#et2
; - tu jakieś polecenia, które mają być wykonane po uratowaniu zakładnika, ew. odpalenie kolejnego skryptu

1 minuta = 60s
10 minut = 60s*10 = 600s?
Jak ja bawiłem się Armą 2 to średniki na końcu lini w .sqs też były wymagane.

Ja to bym proponował coś innego jestem tylko po prostu ciekaw, bobi już się nie przestraszył tych obecnych propozycji.
Po prostu przyjmij do wiadomości, że nadciąga rewolucja proletariacka, lada dzień Chavez z Castro i Bin Ladenem nadjadą na białym traktorze i uwolnią ciemiężony lud polski spod władzy międzynarodowego kapitału.
Offline
Avatar użytkownika

Maverick

Generał

Generał

  • Posty: 772
  • Dołączył(a): Pn 30 kwi, 2007 12:12
  • Lokalizacja: Kutno

PostPn 30 sie, 2010 15:04

reyhard napisał(a):1 minuta = 60s
10 minut = 60s*10 = 600s?
Jak ja bawiłem się Armą 2 to średniki na końcu lini w .sqs też były wymagane.

Eee, miałem piątkę z matmy. Naprawdę! ;]
A co do średników - nie są wymagane. Wiem to z doświadczenia.
Obrazek
Obrazek


"Read about the history of the place that we live in and stop letting corporate news tell lies to your children." - Immortal Technique
Offline
Avatar użytkownika

Jon

Generał

Generał

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

PostPn 30 sie, 2010 15:53

RPT będzie o nie krzyczeć, showscripterrors też powinno
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
Avatar użytkownika

Maverick

Generał

Generał

  • Posty: 772
  • Dołączył(a): Pn 30 kwi, 2007 12:12
  • Lokalizacja: Kutno

PostPn 30 sie, 2010 16:43

Bzdura, piszę .sqs-y bez średników od dawna i nie zauważyłem żadnych krzyków ShowScriptErrors. RPT nie sprawdzałem. Zresztą, whatever. Bobi887 zrobi, jak będzie uważał.
Obrazek
Obrazek


"Read about the history of the place that we live in and stop letting corporate news tell lies to your children." - Immortal Technique
Offline
Avatar użytkownika

kondor

Major

Major

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

PostPn 30 sie, 2010 16:54

Jestem zwolennikiem prostych rozwiązań.
Jedna z podstawowych zasad, którą warto się kierować, jest trzymanie kodu blisko tego, co ma wyrażać. Wystarczy wypowiedzieć w prosty sposób daną funkcjonalność i następnie zastąpić odpowiednio jej składowe (dane przez zmienne i działania przez skrypty/funkcje).
Powyższy przykład jest trywialny:
Jeśli samolot wleci w wyzwalacz, uaktywnij czekanie, po którym wezwij złych
Jeśli zakładnik zostanie odbity i/lub inne warunki, przerwij czekanie

Implementacja:
1. Wyzwalacz, który aktywuje skrypt czekania, aktywowany śmigłowcem. W polu aktywacji:
Kod: Zaznacz cały
wskaznikNaSkryptCzekania = [] execVM "czekaj_i_wezwij_posilki.sqf"

2. Wyzwalacz, który aktywuje się na odbicie / uleczenie zakładnika (warunek zależy od tego jak definiujesz odbicie). A przy aktywacji:
Kod: Zaznacz cały
terminate wskaznikNaSkryptCzekania;


Btw: jako znający podstawy C++ znajomość sqf wg mnie zajęłaby Ci 20min -> kod czystszy bez nieczytelnych goto, ze wsparciem dla bloków i pętli
Btw2: przyjęło się, że identyfikatory pisane dużymi literami są używane dla stałych i makr - warto mieć wspólne standardy -> kod staje się czytelniejszy dla większej liczby osób

Powrót do [ArmA II] Edytor

Kto przegląda forum

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

cron