[SAIL]Drobna pomoc?

Wszelkie pytania na temat SAIL'a i modowania OW.
User avatar
Nitek
Community Veteran
Community Veteran
Posts: 999
Joined: Mon Apr 13, 2009 4:13 pm
Location: Białystok
Contact:

Re: [SAIL]Drobna pomoc?

Post by Nitek »

To jest głupota. Jeżeli misja będzie polegała tylko na tym, żeby wynieść skrzynie z tego składu to zapętlę podnieś skrzynie -> upuść i (nawet jak nie tylko na tym misja będzie polegać) zaoszczędzę sporo czasu.
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: [SAIL]Drobna pomoc?

Post by Serpent »

Nitek wrote:To jest głupota. Jeżeli misja będzie polegała tylko na tym, żeby wynieść skrzynie z tego składu to zapętlę podnieś skrzynie -> upuść i (nawet jak nie tylko na tym misja będzie polegać) zaoszczędzę sporo czasu.

Wiesz Nitek to nie nasza sprawa co tam Xero próbuje zrobić choć to trochę dziwny przypadek ;)
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
Xero Rozbójca
Soldier level 6
Soldier level 6
Posts: 391
Joined: Sun Mar 08, 2009 5:13 pm
Location: Szukaj w kioskach...

Re: [SAIL]Drobna pomoc?

Post by Xero Rozbójca »

No dobrze mądrale, to poproszę działający kod, który sprawdzi, czy przeniosłem skrzynki ze składu 1 do składu 2. Zaznaczam, że w 1 jest 240 skrzyń, w 2 jest 340. W prawym górnym rogu ma mi nie pokazywać różnicy między ilością skrzyń, a ilość potrzebną do przeniesienia, i w dodatku żeby nie zaliczało się do tego wnoszenie skrzyń z okolicy do któregoś ze składów, a konkretnie z 1 do 2.

:)

Koniec dyskusji w tym temacie.
Jeśli będę miał problem z działaniem jakiegoś innego kodu, to zapytam tutaj. :)
"Osoby, stawiające więcej niż trzy znaki interpunkcyjne obok siebie, mają problemy ze zdrowiem psychicznym."

Image
User avatar
pomek
Soldier level 7
Soldier level 7
Poland
Posts: 656
Joined: Mon May 03, 2010 9:05 pm

Re: [SAIL]Drobna pomoc?

Post by pomek »

W MP - mapa impreza. mowi Ci cos? Jezeli nie, to tam mozesz poznac swojego sojusznika przenoszac X skrzyn w Y miejsce. Odpowiednia przerobka i wszystko trybi.
poproszę działający kod, który sprawdzi,
Napisze Ci taki za 40 zl :)
User avatar
Nitek
Community Veteran
Community Veteran
Posts: 999
Joined: Mon Apr 13, 2009 4:13 pm
Location: Białystok
Contact:

Re: [SAIL]Drobna pomoc?

Post by Nitek »

pomek wrote:
poproszę działający kod, który sprawdzi,
Napisze Ci taki za 40 zl :)
A potem będziesz pisać do mnie czy Gotha na gg jak taki kod napisać xD

@Xero:
A co za problem zrobić tak, że nie spadają żadne skrzynie na mapie? W AM02 tak jest i wszystko jest ok.

@Serp:
Ale wiesz, my tu jesteśmy też po to, żeby mu pomoc w stworzeniu jak najlepszego moda. Ja swoje zrobiłem, a to, jak losy moda potoczą się dalej zależą tylko od niego :)
User avatar
pomek
Soldier level 7
Soldier level 7
Poland
Posts: 656
Joined: Mon May 03, 2010 9:05 pm

Re: [SAIL]Drobna pomoc?

Post by pomek »

A potem będziesz pisać do mnie czy Gotha na gg jak taki kod napisać xD
A o Radziu zapomniales? :(
User avatar
Xero Rozbójca
Soldier level 6
Soldier level 6
Posts: 391
Joined: Sun Mar 08, 2009 5:13 pm
Location: Szukaj w kioskach...

Re: [SAIL]Drobna pomoc?

Post by Xero Rozbójca »

A co za problem zrobić tak, że nie spadają żadne skrzynie na mapie? W AM02 tak jest i wszystko jest ok.
Nituś, kochanie, czy grałeś w demo mojego jakże zajebistego moda "III Wojna Światowa" ?
Nie? Otóż powiem ci, że tam skrzynki nie spadają, a są rozstawione po całej mapie.
Teraz połącz sobie w całość moje poprzednie wypowiedzi z tą :)

A teraz proszę o zaprzestanie dyskusji...
"Osoby, stawiające więcej niż trzy znaki interpunkcyjne obok siebie, mają problemy ze zdrowiem psychicznym."

Image
User avatar
Xero Rozbójca
Soldier level 6
Soldier level 6
Posts: 391
Joined: Sun Mar 08, 2009 5:13 pm
Location: Szukaj w kioskach...

Re: [SAIL]Drobna pomoc?

Post by Xero Rozbójca »

Ahh... i nadszedł ten czas.
Mam pytanie, czy dobrze użyłem break; ? Nie wiem, w którym miejscu i gdzie się to stosuje, a podobno przerywa to pętlę.
Przypuszczam, że pętle, które zrobiłem, wykonują się zbyt wiele razy, co w rezultacie prowadzi do zwiększenia użycia RAM... (ciągle rośnie i ścina grę)
Spoiler:

Code: Select all

......  
repeat
  begin
     if FilterAllUnits([[f_side,1],[f_weapon, us_rocket_launcher],[f_type, unit_vehicle]]) >= 5 then
       begin
      rakiety := true;
      ChangeMissionObjectives('A9a');
                 end;
     if FilterAllUnits([[f_side,1],[f_weapon, us_double_gun],[f_type, unit_vehicle]]) >= 3 then
       begin
      dziala := true;
      ChangeMissionObjectives('A9b');
                 end;
     wait(0$1);
     break;
end until ......
Czy dobrze użyłem w tej części break; ?

PS. Tak, zajrzałem specjalnie po to do tutka na ows, ale nie znalazłem nic o tym.
"Osoby, stawiające więcej niż trzy znaki interpunkcyjne obok siebie, mają problemy ze zdrowiem psychicznym."

Image
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: [SAIL]Drobna pomoc?

Post by Serpent »

Break; z tego co się orientuje przerywa pętle while a raczej ją pauzuje.
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
Radzio
Site Administrator
Site Administrator
Poland
Posts: 2898
Joined: Fri Jul 28, 2006 10:58 am
Location: Bialystok, Poland

Re: [SAIL]Drobna pomoc?

Post by Radzio »

Co wy tego repeat'a owijacie jeszcze dodatkowo begin/end? xD Nie trzeba.

Pamięć rośnie? Pokaż te pętle, proszę.

break; całkowicie przerywa pętlę, więc ta tutaj wykona się tylko raz. :P
User avatar
Xero Rozbójca
Soldier level 6
Soldier level 6
Posts: 391
Joined: Sun Mar 08, 2009 5:13 pm
Location: Szukaj w kioskach...

Re: [SAIL]Drobna pomoc?

Post by Xero Rozbójca »

Wszystko wykonuje się znakomicie, działa perfecto, tylko mam gdzieś ustalone, by co sekundę wykonywała się jakaś pętla, bo ścina mi grę co sekundę właśnie...

Znajdę wszystkie pętle i wrzucę tutaj, jeśli nie będzie ich zbyt wiele.

*** Oto one:

#1
Spoiler:

Code: Select all

export rakiety, dziala, laser;
function sprawdz_pojazdy;
begin

  repeat
  begin
     if FilterAllUnits([[f_side,1],[f_weapon, us_rocket_launcher],[f_type, unit_vehicle]]) >= 5 then
       begin
      rakiety := true;
      ChangeMissionObjectives('A9a');
                 end;
     if FilterAllUnits([[f_side,1],[f_weapon, us_double_gun],[f_type, unit_vehicle]]) >= 3 then
       begin
      dziala := true;
      ChangeMissionObjectives('A9b');
                 end;
     wait(0$1);

     end until
       rakiety = true and dziala = true;
  repeat
  begin
       if FilterAllUnits([[f_side,1],[f_weapon, us_laser],[f_type, unit_vehicle]]) >= 2 then
     begin
      laser := true;
      ChangeMissionObjectives('A9c');
      end;
      wait(0$1);

    end until laser = true;
 end;
#2 -- tu w pierwszych dwóch pozycjach mam wątpliwości...
Spoiler:

Code: Select all

every 0$1 trigger FilterUnitsInArea(teren_rosjan, [f_side,3]) = 0 do
begin
disable(002);
enable;
end;

every 0$1 trigger FilterUnitsExceptArea(okolice_baza1, [[f_side,3],[f_type, unit_human]]) = 0 do
begin
disable(004);
enable;
end;

every 0$1 marked 002 do
begin
petla_atak1;
end;

every 0$1 marked 004 do
begin
petla_atak2;
end;

function petla_atak1;    // kazdy rusek atakuje najblizsza jednostke przeciwnika
var rosjanie,rusek,lista_jednostki_am1, jednostka, najblizszy;// zanim nie bedzie ich wcale
begin
enable;
rosjanie:=FilterUnitsExceptArea(okolice_baza1, [f_side, 3]);

rusek:=1;
    repeat
    begin
    for rusek in rosjanie do
        begin
        lista_jednostki_am1:=FilterAllUnits([f_side, 4]);
        ComAttackUnit(rusek, NearestUnitToUnit(lista_jednostki_am1, rusek)); // albo    'rosjanie, NearestUnitToUnit(lista_jednostki_am, rusek))'
        Wait(0$1);                                                          // by atakowali razem jeden cel
        end;                                                                // ale wtedy 'wait' na minimum wait(0$3);
    end until lista_jednostki_am1=0;
    end;


function petla_atak2;    // kazdy rusek atakuje najblizsza jednostke przeciwnika
var rosjanie,rusek,lista_jednostki_am, jednostka, najblizszy;// zanim nie bedzie ich wcale
begin
enable;
rosjanie:=FilterUnitsExceptArea(okolice_baza1, [[f_side,3],[f_not,[f_weapon, ru_time_lapser]],[f_or,[f_type, unit_human],[f_type, unit_vehicle]]]);
rusek:=1;
    repeat
    begin
         if FilterUnitsExceptArea(okolice_baza1, [[f_side, 3],[f_weapon, ru_time_lapser]]) > 0 then
            begin
              ComMoveXY(FilterUnitsExceptArea(okolice_baza1, [[f_side, 3],[f_weapon, ru_time_lapser]]), 116,122);
              Wait(0$20);
              AddComMoveXY(FilterUnitsExceptArea(okolice_baza1, [[f_side, 3],[f_weapon, ru_time_lapser]]), 59,19);
            end;
    for rusek in rosjanie do
        begin
        lista_jednostki_am:=FilterAllUnits([f_side, 1]);
        ComAttackUnit(rusek, NearestUnitToUnit(lista_jednostki_am, rusek)); // albo    'rosjanie, NearestUnitToUnit(lista_jednostki_am, rusek))'
        Wait(0$1);                                                          // by atakowali razem jeden cel
        end;                                                                // ale wtedy 'wait' na minimum wait(0$3);
    end until lista_jednostki_am=0;
    end;
#3
Spoiler:

Code: Select all

Every 0$01 do
var i, b_list, b;
begin
enable;

b_list = FilterAllUnits([[f_side, 4],[f_type, unit_building]]);

for b in b_list do
begin

      If GetLives(b) < 1000 then
      begin
      ComExitBuilding([eng1, eng2]);
      repeat
      begin
      AddComRepairBuilding([eng1, eng2], b);
      Wait(0$0.3);
      end until GetLives(b) = 1000;
      AddComEnterUnit([eng1, eng2], am_sklad);
      end;

end;
end;
Może to nie pętle, ale także mogą zamulać...
Jeśli dałem tu enable; , a potem w innym bloku Disable(009), to czy nadal to będzie mi się powtarzało?
Spoiler:

Code: Select all

every 0$0.5 marked 009 do // rus_ucieka
var uciek, uciekinierzy;
begin
enable;
uciekinierzy:=FilterUnitsInArea(rus_ucieka, [[f_side,3],[f_or,[f_type, unit_human],[f_type,unit_vehicle]]]);
  for uciek in uciekinierzy do
  begin
  RemoveUnit(uciek);
  uciekli:=1;
  end;

end;
To tyle.
"Osoby, stawiające więcej niż trzy znaki interpunkcyjne obok siebie, mają problemy ze zdrowiem psychicznym."

Image
Radzio
Site Administrator
Site Administrator
Poland
Posts: 2898
Joined: Fri Jul 28, 2006 10:58 am
Location: Bialystok, Poland

Re: [SAIL]Drobna pomoc?

Post by Radzio »

Xero Rozbójca wrote:Jeśli dałem tu enable; , a potem w innym bloku Disable(009), to czy nadal to będzie mi się powtarzało?
Nie.

Obadam ten wyciek pamięci. Może to od filtrów.

Ogólnie to filtry są wolne.
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: [SAIL]Drobna pomoc?

Post by Serpent »

Ogólnie to ten kod:

Code: Select all

every 0$0.5 marked 009 do // rus_ucieka
var uciek, uciekinierzy;
begin
enable;
uciekinierzy:=FilterUnitsInArea(rus_ucieka, [[f_side,3],[f_or,[f_type, unit_human],[f_type,unit_vehicle]]]);
  for uciek in uciekinierzy do
  begin
  RemoveUnit(uciek);
  uciekli:=1;
  end;

end;

Można zastąpić tym:

Code: Select all

Every 0$01 marked 009 do
var un, list;
begin
enable;

list = FilterAllUnits([[f_side, 3], [f_not, [f_type, unit_building]]]); // nie widzę sensu dawać filtr na pojazdy i ludzi

for un in list do
begin
If IsInArea(un, rus_ucieka) then
   RemoveUnit(un);
   uciekli:=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
Xero Rozbójca
Soldier level 6
Soldier level 6
Posts: 391
Joined: Sun Mar 08, 2009 5:13 pm
Location: Szukaj w kioskach...

Re: [SAIL]Drobna pomoc?

Post by Xero Rozbójca »

Gra działa normalnie, na poziomie 180~185 MB RAM do momentu, gdy pojawia się drugi i trzeci atak. Wtedy zaczyna się bezustanny wzrost pamięci:
Spoiler:

Code: Select all

every 0$1 trigger FilterUnitsInArea(teren_rosjan, [f_side,3]) = 0 do
begin
disable(002);
enable;
end;

every 0$1 trigger FilterUnitsExceptArea(okolice_baza1, [[f_side,3],[f_type, unit_human]]) = 0 do
begin
disable(004);
enable;
end;

every 0$1 marked 002 do
begin
petla_atak1;
end;

every 0$1 marked 004 do
begin
petla_atak2;
end;

function petla_atak1;    // kazdy rusek atakuje najblizsza jednostke przeciwnika
var rosjanie,rusek,lista_jednostki_am1, jednostka, najblizszy;// zanim nie bedzie ich wcale
begin
enable;
rosjanie:=FilterUnitsExceptArea(okolice_baza1, [f_side, 3]);

rusek:=1;
    repeat
    begin
    for rusek in rosjanie do
        begin
        lista_jednostki_am1:=FilterAllUnits([f_side, 4]);
        ComAttackUnit(rusek, NearestUnitToUnit(lista_jednostki_am1, rusek)); // albo    'rosjanie, NearestUnitToUnit(lista_jednostki_am, rusek))'
        Wait(0$1);                                                          // by atakowali razem jeden cel
        end;                                                                // ale wtedy 'wait' na minimum wait(0$3);
    end until lista_jednostki_am1=0;
    end;


function petla_atak2;    // kazdy rusek atakuje najblizsza jednostke przeciwnika
var rosjanie,rusek,lista_jednostki_am, jednostka, najblizszy;// zanim nie bedzie ich wcale
begin
enable;
rosjanie:=FilterUnitsExceptArea(okolice_baza1, [[f_side,3],[f_not,[f_weapon, ru_time_lapser]],[f_or,[f_type, unit_human],[f_type, unit_vehicle]]]);
rusek:=1;
    repeat
    begin
         if FilterUnitsExceptArea(okolice_baza1, [[f_side, 3],[f_weapon, ru_time_lapser]]) > 0 then
            begin
              ComMoveXY(FilterUnitsExceptArea(okolice_baza1, [[f_side, 3],[f_weapon, ru_time_lapser]]), 116,122);
              Wait(0$20);
              AddComMoveXY(FilterUnitsExceptArea(okolice_baza1, [[f_side, 3],[f_weapon, ru_time_lapser]]), 59,19);
            end;
    for rusek in rosjanie do
        begin
        lista_jednostki_am:=FilterAllUnits([f_side, 1]);
        ComAttackUnit(rusek, NearestUnitToUnit(lista_jednostki_am, rusek)); // albo    'rosjanie, NearestUnitToUnit(lista_jednostki_am, rusek))'
        Wait(0$1);                                                          // by atakowali razem jeden cel
        end;                                                                // ale wtedy 'wait' na minimum wait(0$3);
    end until lista_jednostki_am=0;
    end;
Tak jak myślałem, poprawić bynajmniej to trzeba.
"Osoby, stawiające więcej niż trzy znaki interpunkcyjne obok siebie, mają problemy ze zdrowiem psychicznym."

Image
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: [SAIL]Drobna pomoc?

Post by Serpent »

Ten kod jest źle napisany, nic dziwnego że muli.

// Wzór funkcji na atak typu "odszukaj i zniszcz"

Code: Select all

Export function FindAndDestroy(list, enemy_side);
var un, enemy_list;
begin

repeat
begin

for un in list do
begin
enemy_list:= FilterAllUnits([f_side, enemy_side]);
ComAttackUnit(un, NearestUnitToUnit(enemy_list, un));
Wait(0$01);
end;

end until FilterAllUnits([f_side, enemy_side]) = 0 or list = 0;

end;

Legenda:
list - Lista jednostek która "atakuje".
enemy_side - Strona, kolor przeciwnika.
Potem już tylko wczytujesz funkcję. Jest to prosty wzór który można łatwo przerobić.

PS: Jedna mała rada, używaj krótkich identów bo identy typu:

Code: Select all

rosjanie,rusek,lista_jednostki_am1, jednostka, najblizszy
tylko utrudnia rozczytywanie tego "kodu".
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
Post Reply