Oryginalna strona colobot.cba.pl umarła, gdy cba.pl przestało oferować darmowy hosting. To jest statyczny mirror, pobrany w 2018. ~krzys_h
 Polski Portal COLOBOTa - COLOBOT Polish Portal
Forum - Polski Portal COLOBOTa
Strona głównaStrona główna UżytkownicyUżytkownicy GrupyGrupy StatystykiStatystyki


Poprzedni temat «» Następny temat
Dodajcie do fabuły misję na czas.
Autor Wiadomość
cyklopek11


Dołączył: 01 Kwi 2008
Posty: 25
Wysłany: 25-08-2008, 15:55   Dodajcie do fabuły misję na czas.

Ostatnio wpadłem że można colobota zrobić bardziej ciekawym i stworzyć w nim misję gdzie trzeba coś zrobić w ściśle określonym czasie np. pozabijać wszystkie mrówki. Jeśli się czas skończy misja kończyłaby się niepowodzeniem. Colobot nie ma takich warunków zakończenia misji ale taki warunek można bardzo łatwo stworzyć mianowicie: gdzieś w ukrytym miejscu gdzie astronauta ani inny robot nie da rady się pojawić tworzymy działo i robota cel (TargetBot) z wycelowanym na niego działem. W pliku ze misją dodajemy linijkę że jeśli EndMissionTake pos= ... dist=... type=TargetBot lost=0.
Następnie tworzymy prosty program timer odmierzający czas i ewentualnie informujący że mamy jeszcze tyle a tyle czasu na wykonanie misji i implementujemy go do działa run=1. Gdy czas minie działo rozwala TargetBot'a czyli misja kończy się niepowodzeniem. Jeśli pozabijamy wszystkie mrówki (linijka EndMissionTake pos=... dist=... type=AlienAnt min=0 max=0) i zdążymy odlecieć statkiem to wygrywamy misję.:-)
Ostatnio zmieniony przez colobotwymiiata 30-05-2010, 21:02, w całości zmieniany 1 raz  
 
 
mac1e7


Twoja ulubiona misja: Wszystkie na Orfenii
Wiek: 26
Dołączył: 10 Mar 2008
Posty: 61
Skąd: Kraków
Wysłany: 26-08-2008, 01:54   RE: Dodajcie do fabuły misję na czas.

Wystarczy użyć SetTimer, if (czy czas się skończył - jeśli tak : KillTimer i EndMission) ;)
 
 
 
cyklopek11


Dołączył: 01 Kwi 2008
Posty: 25
Wysłany: 27-08-2008, 12:37   RE: Dodajcie do fabuły misję na czas.

Mógłbyś sprecyzować???
 
 
mac1e7


Twoja ulubiona misja: Wszystkie na Orfenii
Wiek: 26
Dołączył: 10 Mar 2008
Posty: 61
Skąd: Kraków
Wysłany: 27-08-2008, 18:19   RE: Dodajcie do fabuły misję na czas.

Napisałem komendy z C++ które należy użyć aby uzyskać taki efekt. Dokładnie nie widziałem jak zbudowane są misję w Colobocie (jakoś się w to nie bawiłem) ale ktoś kto misje robi powinien się zorientować o co chodzi ;)

Ale wygląda to tak : najpierw SetTimer(czas) aby ustawić limit czasu. Potem używając zapętlonego if sprawdzamy czy czas się skończył, jeśli nie - zwraca 0, jeśli tak to 1 które odblokowuje dalszy ciąg if`a a więc KillTimer aby nie było odliczania od 0 w kolejnym podejściu i EndMission aby zakończyć misję :)
 
 
 
cyklopek11


Dołączył: 01 Kwi 2008
Posty: 25
Wysłany: 28-08-2008, 11:38   RE: Dodajcie do fabuły misję na czas.

Tylko jak Ty chcesz zakończyć misję z kodu programu??? Nie ma takiej opcji w Colobocie!!! Chyba że masz kod źródłowy do niego:o
 
 
mac1e7


Twoja ulubiona misja: Wszystkie na Orfenii
Wiek: 26
Dołączył: 10 Mar 2008
Posty: 61
Skąd: Kraków
Wysłany: 28-08-2008, 14:29   RE: Dodajcie do fabuły misję na czas.

Hmm w takim razie nie mam innego pomysłu więc najprawdopodobniej jest to niemożliwe...
 
 
 
cyklopek11


Dołączył: 01 Kwi 2008
Posty: 25
Wysłany: 28-08-2008, 15:12   RE: Dodajcie do fabuły misję na czas.

Ale robiąc to tak jak ja to opisałem można stworzyć misję na czas:)
 
 
mac1e7


Twoja ulubiona misja: Wszystkie na Orfenii
Wiek: 26
Dołączył: 10 Mar 2008
Posty: 61
Skąd: Kraków
Wysłany: 28-08-2008, 19:20   RE: Dodajcie do fabuły misję na czas.

Co do twojego sposobu... może się zdarzyć kilka bugów np. program działa może się nie włączyć albo jakiś obcy rozwali target bota :) Poza tym raczej nie ma miejsc do których nie da się w żaden sposób dostać... a i jeszcze jedno da się włączyć program w robocie który nie jest znaleziony?
 
 
 
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 28-08-2008, 21:13   RE: Dodajcie do fabuły misję na czas.

da się na robocie z selectable=0. Co do zniszczalności to można zrobić magnifyDamage=0 i wtedy niezniszczalny.
_________________
1Tbps Project && Telecomix Network

 
 
 
mac1e7


Twoja ulubiona misja: Wszystkie na Orfenii
Wiek: 26
Dołączył: 10 Mar 2008
Posty: 61
Skąd: Kraków
Wysłany: 28-08-2008, 22:04   RE: Dodajcie do fabuły misję na czas.

@up to sprzeczne z :

Cytat:
Gdy czas minie działo rozwala TargetBot'a czyli misja kończy się niepowodzeniem.


robot MUSI być zniszczalny ;)
 
 
 
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 13-09-2008, 21:00   RE: Dodajcie do fabuły misję na czas.

NIEKONIECZNIE. Można dać niezniszczalnego TargetBot'a i przed nim minę. Przykład:

Kod:
// w sekcji obiektów (gdzieś po BeginObject)
CreateObject pos=100;230 dir=0 type=TargetBot selectable=0
CreateObject pos=100;235 dir=0 type=Mine

// przy warunkach misji
EndMissionTake pos=100;235 dist=1 type=Mine lost=0


I program dla bota:

Kod:
extern void object::Timer() {
float limit=300; //limit czasu w sekundach
float remaining;
float endtime;
float lastdisp;
float showinterval=30;
while(ismovie()!=0) wait(0.5); //możesz podstawić inną wartość w zależności od oczekiwanej precyzji.
endtime=abstime()+limit;
message("Ta misja jest na czas. Masz "+limit+" sekund czasu na jej wykonanie.");
message("Co jakiś czas będzie wyświetlać się pozostały limit czasu.");
while(true) {
remaining = endtime-abstime();
if (remaining<60) showinterval=10;
if (remaining<20) showinterval=5;
if (remaining<7) showinterval=1;
if (remaining<0) break;
if (lastdisp>showinterval) {
message("Pozostało czasu: "+remaining+" sekund.");
lastdisp=0;
}
wait(1);
lastdisp++;
}
message("Czas minął. Za chwilę misja zakończy się niepowodzeniem!");
move(5);
}


Teraz pisałem z głowy, jutro sprawdzę w praktyce...
_________________
1Tbps Project && Telecomix Network

 
 
 
mac1e7


Twoja ulubiona misja: Wszystkie na Orfenii
Wiek: 26
Dołączył: 10 Mar 2008
Posty: 61
Skąd: Kraków
Wysłany: 14-09-2008, 01:22   RE: Dodajcie do fabuły misję na czas.

ok ale co jeśli coś/ktoś rozwali tą minę? :D
 
 
 
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 14-09-2008, 10:00   RE: Dodajcie do fabuły misję na czas.

Całą konstrukcję osłonić barierkami. A materia organiczna mrówki czy odłamki pająka nie zdetonują miny. Gorzej jak robal zaatakuje robota (robale mogą przechodzić przez wszystko). Wersja ekstremalna: dodać DefenseTower :D

Aha. W swoim poście zapomniałem przy tworzeniu TargetBota dorobić magnifyDamage=0 .

[dodano]
Nie obeszło się bez przeróbek (były błędy). W załączniku jest przykład, który należy wypakować do jakiegoś folderu misji użytkownika.

timer.zip
Pobierz Plik ściągnięto 78 raz(y) 2,07 KB

_________________
1Tbps Project && Telecomix Network

Ostatnio zmieniony przez adiblol 14-09-2008, 10:30, w całości zmieniany 1 raz  
 
 
 
adiblol 
Administrator forum
FLOSS FTW!


Twoja ulubiona misja: porównywanie formatów audio
Pomógł: 18 razy
Dołączył: 21 Kwi 2008
Posty: 1313
Skąd: pokój odsłuchowy
Wysłany: 14-09-2008, 19:19   RE: Dodajcie do fabuły misję na czas.

Słuchajcie: właśnie wpadłem na genialny w swojej prostocie pomysł: zamiast miny nie dawać NIC i przerobić tak kod misji żeby po wyjechaniu TargetBota z pewnego obszaru kończyła się misja. Rozwiązanie idealne bo dzięki niemu nic nie zagraża systemowi (jak ma magnifyDamage=0). ALE bota może "coś" przepchać (np. uderzająca osa albo bot gracza (masochizm :) )) więc parametr "dist" komenty EndMissionTake musi być odpowiednio duży tak aby nawet po przepchaniu nic się nie stało a bot wtedy wróciłby na swoją starą pozycję dzięki programowej kontroli.

Przy okazji wpadłem na to jak można zrobić WYGRANĄ z warunkami (np. musimy bronić się przez określony czas - po tym czasie misja wygrana, a nie musimy wybijać owadów). Po prostu bot poleceniem produce tworzy... powiedzmy... BlackBoxa po upływie określonego czasu, engine reaguje (od warunków min=1 max=1) ale jeśli nie zdołamy się obronić przez określony czas to engine Colobota wykryje śmierć astronauty (lost=0).
ALE w ten sposób można oszukiwać np. tworząc BlackBoxa poleceniem produce przy pomocy bota gracza.

Teraz analizując pierwszą i drugą część postu stwierdziłem że da się ominąć też ten problem. Po prostu po upływie określonego czasu bot przejedzie do strefy w której obecność spowoduje wygraną. Trzeba tylko uważać żeby nie dało się bota "przepchać", tzn. strefa musi być odpowiednio daleko od punktu startowego. I bot musi być "niewytwarzalny" czyli Tech (inżynier), TargetBot albo PractiseBot.

Oba programy mogą być takie same, tylko sterowanie pojawiającymi się komunikatami przy pomocy cmdline (np. cmdline(1)==1 wtedy tryb przegranej, cmdline(1)==2 wtedy tryb wygranej) - nie zmieniałoby to nic prócz komunikatów.

UWAGA: Last update: co do pierwszej części (przegrywania) to "coś" (czyli bot gracza) mógłby zablokować przejazd bota i wtedy mamy problem. Chociaż... gdyby dać Shootera to mógłby się bronić :D (strzelać do blokującego go bota). Tylko oczywiście wtedy można osłaniaczem itp. itd. Ale osłaniacz nie wjedzie pod wodę i tu mamy rozwiązanie :) .
ALE i tak jest problem bo gracz może zatrudnić brygadę nurków i wtedy jak jednemu nurkowi kończy się osłona to jedzie do warsztatu (lub osłaniacza), podjeżdża drugi itp.
Także idealne rozwiązanie jest możliwe tylko wtedy gdy nie można wybudować nurka lub nie można wybudować osłaniacza i warsztatu. W misjach gdzie nie robimy zadań "podwodnych" można spokojnie wyłączyć budowanie nurka i sprawa załatwiona.
_________________
1Tbps Project && Telecomix Network

 
 
 
COLOBOT 
Administrator sieci
Założyciel portalu


Twoja ulubiona misja: Obie na Orfenii
Pomógł: 1 raz
Dołączył: 07 Lut 2008
Posty: 353
Skąd: Jarocin
Wysłany: 16-09-2008, 09:54   RE: Dodajcie do fabuły misję na czas.

Tylko po co się zastanawiać jak zrobić, żeby gracz nie stosował sztuczek. Jak jest upierdliwy i chce, to zrobi jakiś przekręt. W oryginalnej fabule można wyjechać działem fazowym bez otwierania skrytki i nie jest to aż tak wielki błąd, tylko jeden z bugów, który udało się wykryć.

BTW możnaby zrobić w rogu mapy głęboką kotlinę otoczoną wysokimi górami, których nijak nie da się pokonać i tam umieścić PracticeBota. Jak gracz jakimś cudem przejdzie przez tę przeszkodę, to niech już się cieszy.
_________________
Bykom STOP
A niechaj narodowie wżdy postronni znają, iż Polacy nie gęsi, iż swój język mają.
 
 
 
Wyświetl posty z ostatnich:   

Wersja do druku

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Polski Portal COLOBOTa © 2008 - 2012