[SAIL]Drobna pomoc?

Wszelkie pytania na temat SAIL'a i modowania OW.
Uživatelský avatar
Nitek
Community Veteran
Community Veteran
Příspěvky: 997
Registrován: pon dub 13, 2009 4:13 pm
Bydliště: Białystok
Kontaktovat uživatele:

Re: [SAIL]Drobna pomoc?

Příspěvek od 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.
Uživatelský avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Příspěvky: 4169
Registrován: úte črc 07, 2009 9:13 pm
Bydliště: Polska - EuroStan ZSRE
Kontaktovat uživatele:

Re: [SAIL]Drobna pomoc?

Příspěvek od Serpent »

Nitek píše: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
Uživatelský avatar
Xero Rozbójca
Soldier level 6
Soldier level 6
Příspěvky: 391
Registrován: ned bře 08, 2009 5:13 pm
Bydliště: Szukaj w kioskach...

Re: [SAIL]Drobna pomoc?

Příspěvek od 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."

Obrázek
Uživatelský avatar
pomek
Soldier level 7
Soldier level 7
Poland
Příspěvky: 656
Registrován: pon kvě 03, 2010 9:05 pm

Re: [SAIL]Drobna pomoc?

Příspěvek od 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 :)
Uživatelský avatar
Nitek
Community Veteran
Community Veteran
Příspěvky: 997
Registrován: pon dub 13, 2009 4:13 pm
Bydliště: Białystok
Kontaktovat uživatele:

Re: [SAIL]Drobna pomoc?

Příspěvek od Nitek »

pomek píše:
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 :)
Uživatelský avatar
pomek
Soldier level 7
Soldier level 7
Poland
Příspěvky: 656
Registrován: pon kvě 03, 2010 9:05 pm

Re: [SAIL]Drobna pomoc?

Příspěvek od pomek »

A potem będziesz pisać do mnie czy Gotha na gg jak taki kod napisać xD
A o Radziu zapomniales? :(
Uživatelský avatar
Xero Rozbójca
Soldier level 6
Soldier level 6
Příspěvky: 391
Registrován: ned bře 08, 2009 5:13 pm
Bydliště: Szukaj w kioskach...

Re: [SAIL]Drobna pomoc?

Příspěvek od 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."

Obrázek
Uživatelský avatar
Xero Rozbójca
Soldier level 6
Soldier level 6
Příspěvky: 391
Registrován: ned bře 08, 2009 5:13 pm
Bydliště: Szukaj w kioskach...

Re: [SAIL]Drobna pomoc?

Příspěvek od 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:

Kód: Vybrat vše

......  
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."

Obrázek
Uživatelský avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Příspěvky: 4169
Registrován: úte črc 07, 2009 9:13 pm
Bydliště: Polska - EuroStan ZSRE
Kontaktovat uživatele:

Re: [SAIL]Drobna pomoc?

Příspěvek od 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
Příspěvky: 2898
Registrován: pát črc 28, 2006 10:58 am
Bydliště: Bialystok, Poland

Re: [SAIL]Drobna pomoc?

Příspěvek od 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
Uživatelský avatar
Xero Rozbójca
Soldier level 6
Soldier level 6
Příspěvky: 391
Registrován: ned bře 08, 2009 5:13 pm
Bydliště: Szukaj w kioskach...

Re: [SAIL]Drobna pomoc?

Příspěvek od 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:

Kód: Vybrat vše

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:

Kód: Vybrat vše

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:

Kód: Vybrat vše

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:

Kód: Vybrat vše

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."

Obrázek
Radzio
Site Administrator
Site Administrator
Poland
Příspěvky: 2898
Registrován: pát črc 28, 2006 10:58 am
Bydliště: Bialystok, Poland

Re: [SAIL]Drobna pomoc?

Příspěvek od Radzio »

Xero Rozbójca píše: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.
Uživatelský avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Příspěvky: 4169
Registrován: úte črc 07, 2009 9:13 pm
Bydliště: Polska - EuroStan ZSRE
Kontaktovat uživatele:

Re: [SAIL]Drobna pomoc?

Příspěvek od Serpent »

Ogólnie to ten kod:

Kód: Vybrat vše

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:

Kód: Vybrat vše

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
Uživatelský avatar
Xero Rozbójca
Soldier level 6
Soldier level 6
Příspěvky: 391
Registrován: ned bře 08, 2009 5:13 pm
Bydliště: Szukaj w kioskach...

Re: [SAIL]Drobna pomoc?

Příspěvek od 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:

Kód: Vybrat vše

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."

Obrázek
Uživatelský avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Příspěvky: 4169
Registrován: úte črc 07, 2009 9:13 pm
Bydliště: Polska - EuroStan ZSRE
Kontaktovat uživatele:

Re: [SAIL]Drobna pomoc?

Příspěvek od Serpent »

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

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

Kód: Vybrat vše

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:

Kód: Vybrat vše

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
Odpovědět