Grupa śmierci

Wszystko o modach, patchach i błędach w OW oraz ogólnym programowaniu.
Avatar de l’utilisateur
Pablo Abruzzi
Soldier level 5
Soldier level 5
Príspevky: 269
Dátum registrácie: lun. juil. 28, 2008 3:09 pm
Localisation: Polska
Kontaktovať používateľa:

Grupa śmierci

Message od používateľa Pablo Abruzzi »

Mam problem, zrobiłem taki posterunek i 6 wrogów. Kiedy gracz by ich zabił, wtedy puszczam dialogi i nowy cel misji, więc spróbowałem tak:

Code : Tout sélectionner

export grupa;

every 0$1 trigger IsDead(grupa) do
begin
grupa=([am1,am2,am3,am4,am5,am6]);
Say(p1,'MojDialog5');
Say(ser,'MojDialog6');
SayRadio(ser,'MojDialog7');
SayRadio(orzel,'MojDialog8');
SayRadio(ser,'MojDialog9');
SayRadio(orzel,'MojDialog10');
SayRadio(ser,'MojDialog11');
SayRadio(orzel,'MojDialog12');
Wait(0$2);
ChangeMissionObjectives('M2');
end;
Nie działa. Znaczy kompiluje się, ale mija 1 sekunda i bez względu na to co zrobię zostają odtworzone dialogi itd. W czym tu jest problem??
Próbowałem też bez tych () nawiasów same kwadratowe = to samo.
Próbowałem zdefiniować grupę w poprzednim zdarzeniu = to samo.

Ps. am1,am2....to identy tych sześciu.
Proszę o pomoc.
Si vis pacem, para bellum jeśli chcesz pokoju, gotuj się do wojny.

THE HEROES COMPANY MOD
[progress]100%[/progress]
DONE
http://forum.original-war.net/viewtopic ... 6&start=90
Radzio
Site Administrator
Site Administrator
Poland
Príspevky: 2898
Dátum registrácie: ven. juil. 28, 2006 10:58 am
Localisation: Bialystok, Poland

Re: Grupa śmierci

Message od používateľa Radzio »

1) IsDead działa tylko z pojedynczymi jednostkami.
2) Zmienna ma wartość 0 zanim ją określisz, tak więc 0 zawsze jest martwe.
Avatar de l’utilisateur
Pablo Abruzzi
Soldier level 5
Soldier level 5
Príspevky: 269
Dátum registrácie: lun. juil. 28, 2008 3:09 pm
Localisation: Polska
Kontaktovať používateľa:

Re: Grupa śmierci

Message od používateľa Pablo Abruzzi »

To co, da się coś zrobić??

Skoro to działa tylko na pojedyncze jednostki to można zastosować "and" w warunku, tylko aż 6 razy trzeba będzie :(
Si vis pacem, para bellum jeśli chcesz pokoju, gotuj się do wojny.

THE HEROES COMPANY MOD
[progress]100%[/progress]
DONE
http://forum.original-war.net/viewtopic ... 6&start=90
Avatar de l’utilisateur
Gothuk
Site Administrator
Site Administrator
Poland
Príspevky: 983
Dátum registrácie: mar. sept. 04, 2007 6:10 pm
Localisation: Poland, Warsaw
Kontaktovať používateľa:

Re: Grupa śmierci

Message od používateľa Gothuk »

Pablo Abruzzi a écrit :To co, da się coś zrobić??

Skoro to działa tylko na pojedyncze jednostki to można zastosować "and" w warunku, tylko aż 6 razy trzeba będzie :(
a nie mozna sobie napisac funkcji ;o?

Code : Tout sélectionner

function AreDead(units);
var un;
begin
   result := true;
   for un in units do
      if not IsDead(un) then begin 
         result := false;
         exit;
      end;
end;
chyba powinno dzialac.
Radzio
Site Administrator
Site Administrator
Poland
Príspevky: 2898
Dátum registrácie: ven. juil. 28, 2006 10:58 am
Localisation: Bialystok, Poland

Re: Grupa śmierci

Message od používateľa Radzio »

Code : Tout sélectionner

function NieZyja(l_grupa);
var un;
begin
  result := true;
  for un in l_grupa do
    if not IsDead(un) then
    begin
      result := false;
      exit;
    end;
end;
I IsDead zamieniamy na NieZyja (tylko nie dawaj pustej listy :P).

EDIT: Goth mnie wyprzedził :P
EDIT2: Ale on ma błąd :P
EDIT3: Noż lol, ja mam :P ale już poprawione
Avatar de l’utilisateur
Gothuk
Site Administrator
Site Administrator
Poland
Príspevky: 983
Dátum registrácie: mar. sept. 04, 2007 6:10 pm
Localisation: Poland, Warsaw
Kontaktovať používateľa:

Re: Grupa śmierci

Message od používateľa Gothuk »

Radzio, funkcja powinna zwrocic false, jezeli jednostki zyja, czyli if not dead.
Czyli nie widze bledu u siebie xD.
Avatar de l’utilisateur
Pablo Abruzzi
Soldier level 5
Soldier level 5
Príspevky: 269
Dátum registrácie: lun. juil. 28, 2008 3:09 pm
Localisation: Polska
Kontaktovať používateľa:

Re: Grupa śmierci

Message od používateľa Pablo Abruzzi »

Dalej nie działa, ale to najprawdopodobniej mój błąd. Spójrzcie, zapewne źle zapisałem kod, bo powiem szczerze, że nie zbyt rozumiem budowę tej funkcji. Możecie ją opisać bardzo proszę.

A oto ten mój "zły" kod:

Code : Tout sélectionner

..........
l_grupa=[am1,am2,am3,am4,am5,am6];
end;

export l_grupa;

function NieZyja(l_grupa);
var un;
begin
  result := true;
  for un in l_grupa do
    if IsDead(un) then
    begin
      result := false;
      exit;
    end;
end;

export grupa;

every 0$1 trigger NieZyja(l_grupa) do
begin
Say(p1,'MojDialog5');
Say(ser,'MojDialog6');
SayRadio(ser,'MojDialog7');
SayRadio(orzel,'MojDialog8');
SayRadio(ser,'MojDialog9');
SayRadio(orzel,'MojDialog10');
SayRadio(ser,'MojDialog11');
SayRadio(orzel,'MojDialog12');
Wait(0$1);
ChangeMissionObjectives('M2');
ChangeMissionObjectives('M3');
end;
Tylko proszę się ze mnie nie śmiać :P
Si vis pacem, para bellum jeśli chcesz pokoju, gotuj się do wojny.

THE HEROES COMPANY MOD
[progress]100%[/progress]
DONE
http://forum.original-war.net/viewtopic ... 6&start=90
Avatar de l’utilisateur
Gothuk
Site Administrator
Site Administrator
Poland
Príspevky: 983
Dátum registrácie: mar. sept. 04, 2007 6:10 pm
Localisation: Poland, Warsaw
Kontaktovať používateľa:

Re: Grupa śmierci

Message od používateľa Gothuk »

Pablo Abruzzi a écrit :Dalej nie działa, ale to najprawdopodobniej mój błąd. Spójrzcie, zapewne źle zapisałem kod, bo powiem szczerze, że nie zbyt rozumiem budowę tej funkcji. Możecie ją opisać bardzo proszę.

A oto ten mój "zły" kod:

// kod

Tylko proszę się ze mnie nie śmiać :P
nie definiujesz l_grupa, to tylko zmienna lokalna funkcji.

Code : Tout sélectionner

export grupa;

function NieZyja(l_grupa); // tworzymy funkcje
var un;                          // definiujemy zmienna lokalna: un
begin
  result := true;              // ustawiamy wynik funkcji jako prawda
  for un in l_grupa do       // petla - dla kazdej jednostki (un) w l_grupa rob:
    if IsDead(un) then      // jesli jednostka nie zyje 
    begin
      result := false;         // ustaw wynik funkcji na falsz
      exit;                      // przerwij petle
    end;
end;

// jednak sadze ze powinno byc if no isdead(un), zeby zwrocic falsz.

starting
begin
   disable(001);
   // troche kodu
   // tworzenie postaci 
   grupa := [am1,am2,am3,am4,am5,am6];
   enable(001);
end;

every 0$1 trigger NieZyja(grupa) marked 001 do
begin
Say(p1,'MojDialog5');
Say(ser,'MojDialog6');
SayRadio(ser,'MojDialog7');
SayRadio(orzel,'MojDialog8');
SayRadio(ser,'MojDialog9');
SayRadio(orzel,'MojDialog10');
SayRadio(ser,'MojDialog11');
SayRadio(orzel,'MojDialog12');
Wait(0$1);
ChangeMissionObjectives('M2');
ChangeMissionObjectives('M3');
end;
Avatar de l’utilisateur
Pablo Abruzzi
Soldier level 5
Soldier level 5
Príspevky: 269
Dátum registrácie: lun. juil. 28, 2008 3:09 pm
Localisation: Polska
Kontaktovať používateľa:

Re: Grupa śmierci

Message od používateľa Pablo Abruzzi »

Dzięki za ten opis, bardzo mi pomógł.

Tylko takie pytanie:
Gothuk a écrit :starting
begin
disable(001);
// troche kodu
// tworzenie postaci
grupa := [am1,am2,am3,am4,am5,am6];
enable(001);
end;
A po co tutaj użyłeś disable(001); i enable(001);??
To konieczne, jakbym na przykład użył tej funkcji do kilku warunków?
Si vis pacem, para bellum jeśli chcesz pokoju, gotuj się do wojny.

THE HEROES COMPANY MOD
[progress]100%[/progress]
DONE
http://forum.original-war.net/viewtopic ... 6&start=90
Avatar de l’utilisateur
Gothuk
Site Administrator
Site Administrator
Poland
Príspevky: 983
Dátum registrácie: mar. sept. 04, 2007 6:10 pm
Localisation: Poland, Warsaw
Kontaktovať používateľa:

Re: Grupa śmierci

Message od používateľa Gothuk »

every ma sie wykonac 1 min po spelnieniu warunku, tak jak Radzio napisal zaexportowana zamienna ma automatycznie wartosc 0.
Jesli nie zmienisz wartosci zmiennej odpowiadajacej za grupe, to po minucie every sie wykona gdyz warunek jest spelniony, dlatego uzylem markeda.
Avatar de l’utilisateur
Pablo Abruzzi
Soldier level 5
Soldier level 5
Príspevky: 269
Dátum registrácie: lun. juil. 28, 2008 3:09 pm
Localisation: Polska
Kontaktovať používateľa:

Re: Grupa śmierci

Message od používateľa Pablo Abruzzi »

OK. Na razie wszytko jasne. Dzięki :D

Your welcome. - Gothuk

EDIT: Mały problem. Nie da się tego ustawić inaczej, bo to samo jest, dopiero teraz to przetestowałem. Kod:

Code : Tout sélectionner

export l_grupa;

function NieZyja(l_grupa);
var un;
begin
  result := true;
  for un in l_grupa do
    if IsDead(un) then
    begin
      result := false;
      exit;
    end;
end;

export hg1,hg2,hg3,hg4,hg5;

every 10$20 trigger IsInArea(ser,area_3) do
begin
disable(001);
uc_side=1;
uc_nation=1;
vc_chassis=us_heavy_tracked;
vc_engine=engine_combustion;
vc_control=control_computer;
vc_weapon=us_heavy_gun;
hg1=CreateVehicle;
hg2=CreateVehicle;
hg3=CreateVehicle;
vc_chassis=us_heavy_tracked;
vc_engine=engine_combustion;
vc_control=control_computer;
vc_weapon=us_double_gun;
hg4=CreateVehicle;
hg5=CreateVehicle;
PlaceUnitArea(hg1,area_4,false);
PlaceUnitArea(hg2,area_4,false);
PlaceUnitArea(hg3,area_4,false);
PlaceUnitArea(hg4,area_4,false);
PlaceUnitArea(hg5,area_4,false);
ComMoveXY([hg1,hg2,hg3,hg4,hg5], 78, 91);
Wait(0$10);
ComAgressiveMove([hg1,hg2,hg3,hg4,hg5], 92, 93);
enable;
l_grupa=[am1,am2,am3,am4,am5,am6];
enable(001);
end;


every 0$1 trigger NieZyja(l_grupa) marked 001 do
begin
Say(p1,'MojDialog5');
Say(ser,'MojDialog6');
SayRadio(ser,'MojDialog7');
SayRadio(orzel,'MojDialog8');
SayRadio(ser,'MojDialog9');
SayRadio(orzel,'MojDialog10');
SayRadio(ser,'MojDialog11');
SayRadio(orzel,'MojDialog12');
Wait(0$1);
ChangeMissionObjectives('M2');
ChangeMissionObjectives('M3');
end;
To cały kod, dalej to samo. Nie da się dać podobnego warunku, bez takich problemów??
Si vis pacem, para bellum jeśli chcesz pokoju, gotuj się do wojny.

THE HEROES COMPANY MOD
[progress]100%[/progress]
DONE
http://forum.original-war.net/viewtopic ... 6&start=90
Avatar de l’utilisateur
Gothuk
Site Administrator
Site Administrator
Poland
Príspevky: 983
Dátum registrácie: mar. sept. 04, 2007 6:10 pm
Localisation: Poland, Warsaw
Kontaktovať používateľa:

Re: Grupa śmierci

Message od používateľa Gothuk »

Pablo Abruzzi a écrit : EDIT: Mały problem. Nie da się tego ustawić inaczej, bo to samo jest, dopiero teraz to przetestowałem.
ale co jest to samo?
dialogi wystapuja po 1 min, czy wcale?

poza tym gdzie masz blok starting?
i czy dales na pewno caly kod?
Radzio
Site Administrator
Site Administrator
Poland
Príspevky: 2898
Dátum registrácie: ven. juil. 28, 2006 10:58 am
Localisation: Bialystok, Poland

Re: Grupa śmierci

Message od používateľa Radzio »

Tam ma być te "not". Czasem możesz zaufać sobie. Człowiek po 10PM bredzi :P
Napísať odpoveď