wybuch miny po najechaniu/nadepnięciu

Wszystko o modach, patchach i błędach w OW oraz ogólnym programowaniu.
Post Reply
User avatar
Lavigo
Soldier level 4
Soldier level 4
Posts: 86
Joined: Mon Oct 04, 2010 3:39 pm

wybuch miny po najechaniu/nadepnięciu

Post by Lavigo »

Witam
Jak wiadomo SAIL em mozna postawić minę dowolnym żołnierzem dowolnej nacji...
dzieje sie tak z kodu:

Code: Select all

ComPlaceRemoteCharge(identyfikator_postaci,x,y,0);

Wartości x i y to współrzędne ładunku, a 0 (zero) to obrót.
Ale jak zrobić tak, aby mina się zdetonowała automatycznie po tym jak wejdzie/wjedzie na nią wróg ?
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: wybuch miny po najechaniu/nadepnięciu

Post by Serpent »

Code: Select all

MineExplosion(x, y, f);
x i y - koordynaty, położenie miny (miejsce gdzie ma nastąpić wybuch)
f - nie pamiętam dokładnie, ale to jest chyba siła wybuchu


No więc dajesz kod:

Code: Select all

Przykład:
Mamy na mapie aree pole_minowe, w której po wejściu jakiegoś ludzika nastąpi wybuch

Export mina;
Every 0$1 do
begin
mina = false;
end;

Every 0$01 trigger mina = false do
var enemy_units, un;
begin
enable;

enemy_units = FilterUnitsInArea(pole_minowe, [f_side, {strona_jednostek które mają aktywować wybuch np.} 1);

If enemy_units > 0 then
for un in enemy_units do
begin
MineExplosion(GetX(un), GetY(un), 1);
mina = true;
end;

end; // kod powinien działać, niestety nie mam teraz pod ręką edytora żeby go sprawdzić
Założenie jest takie że pierwsza jednostka która znajdzie się na polu minowym zostanie wysłana w kosmos.

Oczywiście można odnieść się do danej jednostki która posiada swój własny ident:

Code: Select all

Every 0$01 trigger IsInArea(Burlak, Base3) do
begin
MineExplosion(GetX(Burlak), GetY(Burlak), 1);
end;
Oczywiście powyższe kody wykonają się tylko raz.
Możesz kombinować z every i areeami by stworzyć bardziej zaawansowane pole minowe.
Epickie teksty:
Marek1906: jak zrobic aby sail był zielony?
Kvantovy: Wszystko normalne, wszystko w koło było dziwne
Kvantovy:: To jest fajne, że to nie jest takie głupie
Kvantovy:: remove sos from kanapeczka
Kvantovy:: zdarzają się rzezy które sie filozofom nie śniły
Cenwen: problemem jest gejostwo
"Taki z niego fizyk jak ze mnie baletnica" - Profesor Scholtze o Kvantovym.
JAKBYŁ BYM CZECHEM TO BYM ROZŁOŻYŁ NAMIOT ~Kvanciak
User avatar
Lavigo
Soldier level 4
Soldier level 4
Posts: 86
Joined: Mon Oct 04, 2010 3:39 pm

Re: wybuch miny po najechaniu/nadepnięciu

Post by Lavigo »

dzięki... a w tym długim kodzie jest taka wzmianka:

Code: Select all

MineExplosion(GetX(un), GetY(un), 1);
co to jest to 1 na końcu? myslałem ze to moze byc siła wybuchu, ale kiedy wpisałem tam inne liczby praktycznie nie wpłyneło to na człowieka ani na pojazd...

człowiek po przejściu przez aree miał końcówke żółtego zycia niezależnie od tego czy na koncu kodu było 1, czy 99, a pojazd bez broblemu zniszczyło na 1...

Co to 1 oznacza ?
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: wybuch miny po najechaniu/nadepnięciu

Post by Serpent »

Musisz zajrzeć do spisu SAILa i sprawdzić.

Zawsze możesz dać kilka eksplozji naraz w tym samym miejscu aby zwiększyć siłę wybuchu.
Epickie teksty:
Marek1906: jak zrobic aby sail był zielony?
Kvantovy: Wszystko normalne, wszystko w koło było dziwne
Kvantovy:: To jest fajne, że to nie jest takie głupie
Kvantovy:: remove sos from kanapeczka
Kvantovy:: zdarzają się rzezy które sie filozofom nie śniły
Cenwen: problemem jest gejostwo
"Taki z niego fizyk jak ze mnie baletnica" - Profesor Scholtze o Kvantovym.
JAKBYŁ BYM CZECHEM TO BYM ROZŁOŻYŁ NAMIOT ~Kvanciak
User avatar
Lavigo
Soldier level 4
Soldier level 4
Posts: 86
Joined: Mon Oct 04, 2010 3:39 pm

Re: wybuch miny po najechaniu/nadepnięciu

Post by Lavigo »

to z kilkoma eksplozjami juz opatentowałem,
a jeszcze, czy w tej linijce:

Code: Select all

MineExplosion(GetX(un), GetY(un), 1);
można zamiast GetX i GetY podać współrzędne z mapy, i czy tego kodu, który mi podałeś można użyć dla wielu areii jednocześnie, bo próbowałem dodawać nowe aree i tam gdzie jest

Code: Select all

enemy_units = FilterUnitsInArea(pole_minowe, [f_side,  1]);
i

Code: Select all

MineExplosion(GetX(un), GetY(un), 1);
próbowałem to powielać ale nic mi z tego nie wyszło, w sailu było ok, edytor nie znajdywał błedów, ale mode--> go to gamemode po najechaniu na aree nic sie nie stało :/
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: wybuch miny po najechaniu/nadepnięciu

Post by Serpent »

GetX(nawias) i GetY(nawias) - podają obecne współrzędne identu w nawiasie.

Równie dobrze możesz wpisać koordy z mapy.
Epickie teksty:
Marek1906: jak zrobic aby sail był zielony?
Kvantovy: Wszystko normalne, wszystko w koło było dziwne
Kvantovy:: To jest fajne, że to nie jest takie głupie
Kvantovy:: remove sos from kanapeczka
Kvantovy:: zdarzają się rzezy które sie filozofom nie śniły
Cenwen: problemem jest gejostwo
"Taki z niego fizyk jak ze mnie baletnica" - Profesor Scholtze o Kvantovym.
JAKBYŁ BYM CZECHEM TO BYM ROZŁOŻYŁ NAMIOT ~Kvanciak
User avatar
Lavigo
Soldier level 4
Soldier level 4
Posts: 86
Joined: Mon Oct 04, 2010 3:39 pm

Re: wybuch miny po najechaniu/nadepnięciu

Post by Lavigo »

ok
a jeśli chodzi o ten kod:

Code: Select all

Export mina;
Every 0$1 do
begin
mina = false;
end;

Every 0$01 trigger mina = false do
var enemy_units, un;
begin
enable;

enemy_units = FilterUnitsInArea(pole_minowe, [f_side, {strona_jednostek które mają aktywować wybuch np.} 1);

If enemy_units > 0 then
for un in enemy_units do
begin
MineExplosion(GetX(un), GetY(un), 1);
mina = true;
end;

end; 
To czy można tutaj jakos wstawić kilka min, bo ja próbowałem i mi nie wyszło,
kiedy zrobiłem 2 takie kody i exportowałem drugą minę to działało, a chciałbym to zrobić w jednym kodzie, bo troche dużo miejsca zajeło by robienie takiego kodu dla każdej miny osobno...
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: wybuch miny po najechaniu/nadepnięciu

Post by Serpent »

Możesz spróbować takie coś:

Code: Select all

Every 0$01 trigger mina = false do
var enemy_units, un;
begin
enable;

enemy_units = FilterUnitsInArea(pole_minowe, [f_side, {strona_jednostek które mają aktywować wybuch np.} 1);

If enemy_units > 0 then
for un in enemy_units do
begin
MineExplosion(GetX(un[1]), GetY(un[1]), 1);
mina = true;

If enemy_units > 1 then
MineExplosion(GetX(un[2]), GetY(un[2]), 1);

If enemy_units > 2 then
MineExplosion(GetX(un[3]), GetY(un[3]), 1);

If enemy_units > 3 then
MineExplosion(GetX(un[4]), GetY(un[4]), 1);
end;

end; 
Epickie teksty:
Marek1906: jak zrobic aby sail był zielony?
Kvantovy: Wszystko normalne, wszystko w koło było dziwne
Kvantovy:: To jest fajne, że to nie jest takie głupie
Kvantovy:: remove sos from kanapeczka
Kvantovy:: zdarzają się rzezy które sie filozofom nie śniły
Cenwen: problemem jest gejostwo
"Taki z niego fizyk jak ze mnie baletnica" - Profesor Scholtze o Kvantovym.
JAKBYŁ BYM CZECHEM TO BYM ROZŁOŻYŁ NAMIOT ~Kvanciak
User avatar
Antitheus
Kung Führer
Kung Führer
Korea North
Posts: 2527
Joined: Thu Jan 04, 2007 9:45 pm
Location: Gorzów Wlkp.
Contact:

Re: wybuch miny po najechaniu/nadepnięciu

Post by Antitheus »

Ja bym posłużył się już gotowym kodem, a takowy oferuje nam rosyjska 7. misja.

Code: Select all

Function init_miny;
Var M;
Begin
  If Difficulty = 1 then Miny = []
  else Begin
    Miny = [[62,14],[64,17],[66,17],[65,12],[68,15],[64,14],[60,5],[60,15],[59,18],[56,16],[49,15],[33,18],[42,42],[112,42]];
    For M in Miny do PlaceMine (M [1], M [2], side_Ar, 0);
  End;
End;

Function testuj_minu (X, Y);
Var Jednotky;
Begin
  // Mina bouchne, pokud je v blízkosti Rusák.
  Jednotky = FilterAllUnits ([[F_SIDE, side_Ru], [F_DISTXY, X, Y, 2]]);
  If Jednotky then
  Begin
    LaunchMineAtPos (X, Y, side_Ar);
    Result = true;
  End else Result = false;
End;


Every 0$1.1+0$0.7 do
Var M, Bouchlo;
Begin
  // Otestovat, zda nemá bouchnout nějaká mina.
  If not Miny then Exit;
  Bouchlo = [];
  For M in Miny do
    If testuj_minu (M [1], M [2]) then
      Bouchlo = Bouchlo ^ [M];
  If Bouchlo then Miny = Miny diff Bouchlo;
  If Miny then Enable;
End;
User avatar
Lavigo
Soldier level 4
Soldier level 4
Posts: 86
Joined: Mon Oct 04, 2010 3:39 pm

Re: wybuch miny po najechaniu/nadepnięciu

Post by Lavigo »

Co do kodu z kampanii to coś mi nie pasuje...
wpisałem koordy swoich min tak gdzie jest

Code: Select all

Miny = [[62,14], ...];
i dodałem opcję:

Code: Select all

 Export miny;
bo inaczej edytor znajdował błąd,
dodatkowo błąd był tu, zaraz pod koordami min:

Code: Select all

For M in Miny do PlaceMine (M [1], M [2], side_Ar, 0);
opcja side_Ar była oznaczona jako błąd, więc ją podmieniłem na cyfrę 2 (odpowiednik arabskiej strony) i side_Ru na cyfrę 3 (odpowiednik rosyjskiej strony)

I w tym momencie edytor nie znajdował już błędów, ale miny nie wybuchają kiedy wejdzie na nie jakaś jednostka rosyjska...

Może jeszcze czegoś nie exportowałem, albo inaczej trzeba uzupełnić to co ja podmieniłem (side_Ar i side_Ru)

Znalazłem ten kod w orginalnej misji, ale nie znalazłem co tam jeszcze jest inaczej niż u mnie
nawet ustawiłem na mapie kilku żołnierzy arabskich... i nic :(
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: wybuch miny po najechaniu/nadepnięciu

Post by Serpent »

Dziwnie ten kod wygląda no ale cóż:

Code: Select all

Every 0$1 do
init_miny;

Function init_miny;
Begin

Miny = [[62,14],[64,17],[66,17],[65,12],[68,15],[64,14],[60,5],[60,15],[59,18],[56,16],[49,15],[33,18],[42,42],[112,42]];

End;

Function testuj_minu(X, Y);
Var Jednotky;
Begin

  Jednotky = FilterAllUnits ([[F_SIDE, side_Ru], [F_DISTXY, X, Y, 2]]);
  
If Jednotky then
  Begin
    MineExplosion(X, Y, 1);
    Result = true;
  End else Result = false;
End;


Every 0$02 do
Var M, Bouchlo;
Begin

If not Miny then Exit;

  Bouchlo = [];

For M in Miny do
    If testuj_minu(M [1], M [2]) then
      Bouchlo = Bouchlo ^ [M];

If Bouchlo then 
   Miny = Miny diff Bouchlo;

If Miny then Enable;
End;
Spróbuj takie coś.
Epickie teksty:
Marek1906: jak zrobic aby sail był zielony?
Kvantovy: Wszystko normalne, wszystko w koło było dziwne
Kvantovy:: To jest fajne, że to nie jest takie głupie
Kvantovy:: remove sos from kanapeczka
Kvantovy:: zdarzają się rzezy które sie filozofom nie śniły
Cenwen: problemem jest gejostwo
"Taki z niego fizyk jak ze mnie baletnica" - Profesor Scholtze o Kvantovym.
JAKBYŁ BYM CZECHEM TO BYM ROZŁOŻYŁ NAMIOT ~Kvanciak
User avatar
Lavigo
Soldier level 4
Soldier level 4
Posts: 86
Joined: Mon Oct 04, 2010 3:39 pm

Re: wybuch miny po najechaniu/nadepnięciu

Post by Lavigo »

dzięki :)
Teraz działa :)
Post Reply