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ę? |
|
|
|
|
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
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ć (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ą.
|
|
|
|
|
|