Page 1 of 1

Funkcja FillterUnits

Posted: Mon Feb 09, 2009 4:06 pm
by Birkart

Code: Select all

every 0$01 do
  begin
    enable;
    araby=FilterAllUnits([[f_side,2],[f_type,unit_human],[f_ok]])
  end;

Code: Select all

every 0$01 trigger FilterAllUnits([[f_side,2],[f_chassis,ar_light_trike]])>=araby do
  begin
    Enable;
    ChangeMissionObjectives('c5');
    vehicles=true;
  end;

Code: Select all

every 0$01 marked 011 do
  begin
    if vehicles=true then
      begin
        AddMedal('vehicles',1);
      end
    else
      begin
        AddMedal('vehicles',-1);
      end;
  end;
No wiec mamy taki kod, ale nie działa ;p
Gdzie jest błąd?

Posted: Mon Feb 09, 2009 4:44 pm
by RiderWolf
A uaktywnia Ci się ten cel 'c5' czy nic Ci nie działa? Dałeś w kodzie Enable(011); żeby uaktywnić te every?

Posted: Mon Feb 09, 2009 4:57 pm
by Birkart
tak, cel się zmienia
nie uaktywnia się tylko dawanie medalu

Posted: Mon Feb 09, 2009 5:07 pm
by RiderWolf
czyli błąd masz tylko w tym kodzie

Code: Select all

every 0$01 marked 011 do
  begin
    if vehicles=true then
      begin
        AddMedal('vehicles',1);
      end
    else
      begin
        AddMedal('vehicles',-1);
      end;
  end; 
Dałeś Enable(011);? Jeśli nie to musisz to dodać używając markedów gdzieś przed komendą
GiveMedals('Main');

Jeśli nadal nie będzie Ci działać to zamiast robić every zrób funkcję SetMedals; ze wszystkimi medalami i daj SetMedals; przed GiveMedals('Main');

Posted: Tue Feb 10, 2009 9:29 am
by Antitheus
błąd nie leży tu w głównej mierze w kodzie i nie wiem niby dlaczego mu marked po every. Marked to wyzwalacz a every sprawdza działanie po określonym czasie. Radzę zamiast filtrów zastosowac coś innego. Często nie działają.

Posted: Tue Feb 10, 2009 1:37 pm
by Moonstrider
Ja dodałbym Enable; przed ostatnim end; . A Enable(011); to tylko jeśli na początku dał Disable(011); .

Posted: Tue Feb 10, 2009 2:52 pm
by Anarchy
W filtrze ustawiasz, by 'araby', to byli żółci ludzie, a w every chcesz, by ludzie byli pojazdami. Zmęczony jestem, ale czy to nie brzmi paradoksalnie? Dla większej jasności:
araby=FilterAllUnits([[f_side,2],[f_type,unit_human],[f_ok]])
every 0$01 trigger FilterAllUnits([[f_side,2],[f_chassis,ar_light_trike]])>=araby do

Posted: Tue Feb 10, 2009 3:18 pm
by Birkart
hmm.... zasadniczo to chodziło mi o to, aby
jak liczba pojazdów>=liczba ludzi to
give medal bla bla bla :p
hmmm

tylko tak mi to do głowy przyszło :p

Posted: Tue Feb 10, 2009 8:20 pm
by Anarchy
No to musisz warunek if i filter w filtrze:P

Posted: Tue Feb 10, 2009 8:46 pm
by RiderWolf
Lepiej zrób funkcję SetMedals; ze wszystkimi medalami. może wyglądać np tak

Code: Select all

var filter, araby;

export function SetMedals;
begin
AddMedal('MEDAL',1);
begin
filter:=FilterAllUnits([[f_side,2],[f_chassis,ar_light_trike]]);
begin
araby=FilterAllUnits([[f_side,2],[f_type,unit_human],[f_ok]]);
if filter>=araby then
begin
AddMedal('vehicles',1)
end
else
begin
AddMedal('vehicles',-1);
end;
end;
end;
end;
Na końcu dajesz

Code: Select all

SetMedals;
GiveMedals('Main');
RewardPeople(FilterAllUnits([[f_ok],[f_side,2],[f_type,unit_human]]));
SaveCharacters(ziom,'ziom');
YouWin;
end;

Powinno działać 1 kod jest skompilowany lepiej daj go na osobnej stronie a co do 2 to tam pozmieniaj na swoje potrzeby i dopisz end ile razy trzeba

Posted: Wed Feb 11, 2009 8:47 pm
by Anarchy
A w czym on jest lepszy od mojego? Są inne sposoby, lecz tamten uznałem za najlepszy, uzasadnij swój wybór;P

Posted: Thu Feb 12, 2009 9:46 am
by Antitheus

Code: Select all

every 0$01 marked 011 do
jest w pierwszej linijce jego kodu. Pytanie najważniejsze: czy nie zapomniał o enable (011); ?? ^^

Posted: Thu Feb 12, 2009 11:40 am
by Birkart
okey dzięki wszystkim skumałem już gdzie jest błąd ;p

Posted: Thu Feb 12, 2009 2:07 pm
by Anarchy
No i, gdzie jest?

Posted: Sun Feb 22, 2009 8:56 am
by Birkart
ehh mój głupi, logiczny błąd :p
w chwili sprawdzania ilości pojazdów ich ilość hmm fizycznie nie może być większa/równa ilości bohaterów :P
czyli medalu praktycznie nigdy nie można było dostac

Code: Select all

every 0$01 marked 011 do
  begin
    enable;
    if vehicles=true then
      begin
        AddMedal('vehicles',1);
      end
    else
      begin
        AddMedal('vehicles',-1);
      end;
  end;
dałem enable i wszystko działa :p

[ Dodano: Nie Lut 22, 2009 7:56 am ]
Hmm nie chciałem nowego tematu zakładać a pytanie mam

czy da się w sailu włączyć rozkaz "nie atakuj"/ "atakuj w pierwszej kolejności"?