wybuch miny po najechaniu/nadepnięciu

Wszystko o modach, patchach i błędach w OW oraz ogólnym programowaniu.
Awatar użytkownika
Lavigo
Soldier level 4
Soldier level 4
Příspěvky: 86
Registrován: pn paź 04, 2010 3:39 pm

wybuch miny po najechaniu/nadepnięciu

Post od Lavigo »

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

Kod: Zaznacz cały

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 ?
Awatar użytkownika
Serpent
Soldier level 10
Soldier level 10
Estonia
Příspěvky: 4169
Registrován: wt lip 07, 2009 9:13 pm
Lokalizacja: Polska - EuroStan ZSRE
Kontaktovat uživatele:

Re: wybuch miny po najechaniu/nadepnięciu

Post od Serpent »

Kod: Zaznacz cały

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:

Kod: Zaznacz cały

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:

Kod: Zaznacz cały

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
Awatar użytkownika
Lavigo
Soldier level 4
Soldier level 4
Příspěvky: 86
Registrován: pn paź 04, 2010 3:39 pm

Re: wybuch miny po najechaniu/nadepnięciu

Post od Lavigo »

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

Kod: Zaznacz cały

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 ?
Awatar użytkownika
Serpent
Soldier level 10
Soldier level 10
Estonia
Příspěvky: 4169
Registrován: wt lip 07, 2009 9:13 pm
Lokalizacja: Polska - EuroStan ZSRE
Kontaktovat uživatele:

Re: wybuch miny po najechaniu/nadepnięciu

Post od 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
Awatar użytkownika
Lavigo
Soldier level 4
Soldier level 4
Příspěvky: 86
Registrován: pn paź 04, 2010 3:39 pm

Re: wybuch miny po najechaniu/nadepnięciu

Post od Lavigo »

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

Kod: Zaznacz cały

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

Kod: Zaznacz cały

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

Kod: Zaznacz cały

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 :/
Awatar użytkownika
Serpent
Soldier level 10
Soldier level 10
Estonia
Příspěvky: 4169
Registrován: wt lip 07, 2009 9:13 pm
Lokalizacja: Polska - EuroStan ZSRE
Kontaktovat uživatele:

Re: wybuch miny po najechaniu/nadepnięciu

Post od 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
Awatar użytkownika
Lavigo
Soldier level 4
Soldier level 4
Příspěvky: 86
Registrován: pn paź 04, 2010 3:39 pm

Re: wybuch miny po najechaniu/nadepnięciu

Post od Lavigo »

ok
a jeśli chodzi o ten kod:

Kod: Zaznacz cały

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...
Awatar użytkownika
Serpent
Soldier level 10
Soldier level 10
Estonia
Příspěvky: 4169
Registrován: wt lip 07, 2009 9:13 pm
Lokalizacja: Polska - EuroStan ZSRE
Kontaktovat uživatele:

Re: wybuch miny po najechaniu/nadepnięciu

Post od Serpent »

Możesz spróbować takie coś:

Kod: Zaznacz cały

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
Awatar użytkownika
Antitheus
Kung Führer
Kung Führer
Korea North
Příspěvky: 2526
Registrován: czw sty 04, 2007 9:45 pm
Lokalizacja: Gorzów Wlkp.
Kontaktovat uživatele:

Re: wybuch miny po najechaniu/nadepnięciu

Post od Antitheus »

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

Kod: Zaznacz cały

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;
Awatar użytkownika
Lavigo
Soldier level 4
Soldier level 4
Příspěvky: 86
Registrován: pn paź 04, 2010 3:39 pm

Re: wybuch miny po najechaniu/nadepnięciu

Post od Lavigo »

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

Kod: Zaznacz cały

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

Kod: Zaznacz cały

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

Kod: Zaznacz cały

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 :(
Awatar użytkownika
Serpent
Soldier level 10
Soldier level 10
Estonia
Příspěvky: 4169
Registrován: wt lip 07, 2009 9:13 pm
Lokalizacja: Polska - EuroStan ZSRE
Kontaktovat uživatele:

Re: wybuch miny po najechaniu/nadepnięciu

Post od Serpent »

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

Kod: Zaznacz cały

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
Awatar użytkownika
Lavigo
Soldier level 4
Soldier level 4
Příspěvky: 86
Registrován: pn paź 04, 2010 3:39 pm

Re: wybuch miny po najechaniu/nadepnięciu

Post od Lavigo »

dzięki :)
Teraz działa :)
Odpovědět