Funkcja FillterUnits

Wszystko o modach, patchach i błędach w OW oraz ogólnym programowaniu.
Awatar użytkownika
Birkart
Soldier level 2
Soldier level 2
Posty: 47
Rejestracja: sob wrz 20, 2008 5:38 pm
Lokalizacja: Timbuktu

Funkcja FillterUnits

Post autor: Birkart »

Kod: Zaznacz cały

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

Kod: Zaznacz cały

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

Kod: Zaznacz cały

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?
Awatar użytkownika
RiderWolf
Soldier level 4
Soldier level 4
Posty: 81
Rejestracja: pt sie 03, 2007 4:26 pm
Lokalizacja: Warszawa

Post autor: RiderWolf »

A uaktywnia Ci się ten cel 'c5' czy nic Ci nie działa? Dałeś w kodzie Enable(011); żeby uaktywnić te every?
Awatar użytkownika
Birkart
Soldier level 2
Soldier level 2
Posty: 47
Rejestracja: sob wrz 20, 2008 5:38 pm
Lokalizacja: Timbuktu

Post autor: Birkart »

tak, cel się zmienia
nie uaktywnia się tylko dawanie medalu
Awatar użytkownika
RiderWolf
Soldier level 4
Soldier level 4
Posty: 81
Rejestracja: pt sie 03, 2007 4:26 pm
Lokalizacja: Warszawa

Post autor: RiderWolf »

czyli błąd masz tylko w tym kodzie

Kod: Zaznacz cały

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');
Awatar użytkownika
Antitheus
Kung Führer
Kung Führer
Korea North
Posty: 2526
Rejestracja: czw sty 04, 2007 9:45 pm
Lokalizacja: Gorzów Wlkp.
Kontakt:

Post autor: 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ą.
Awatar użytkownika
Moonstrider
Soldier level 4
Soldier level 4
Posty: 110
Rejestracja: pt lis 09, 2007 11:10 pm
Kontakt:

Post autor: Moonstrider »

Ja dodałbym Enable; przed ostatnim end; . A Enable(011); to tylko jeśli na początku dał Disable(011); .
Anarchy
Site Moderator
Chad
Posty: 1223
Rejestracja: czw maja 03, 2007 11:02 am

Post autor: 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
Awatar użytkownika
Birkart
Soldier level 2
Soldier level 2
Posty: 47
Rejestracja: sob wrz 20, 2008 5:38 pm
Lokalizacja: Timbuktu

Post autor: 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
Anarchy
Site Moderator
Chad
Posty: 1223
Rejestracja: czw maja 03, 2007 11:02 am

Post autor: Anarchy »

No to musisz warunek if i filter w filtrze:P
Awatar użytkownika
RiderWolf
Soldier level 4
Soldier level 4
Posty: 81
Rejestracja: pt sie 03, 2007 4:26 pm
Lokalizacja: Warszawa

Post autor: RiderWolf »

Lepiej zrób funkcję SetMedals; ze wszystkimi medalami. może wyglądać np tak

Kod: Zaznacz cały

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

Kod: Zaznacz cały

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
Anarchy
Site Moderator
Chad
Posty: 1223
Rejestracja: czw maja 03, 2007 11:02 am

Post autor: Anarchy »

A w czym on jest lepszy od mojego? Są inne sposoby, lecz tamten uznałem za najlepszy, uzasadnij swój wybór;P
Awatar użytkownika
Antitheus
Kung Führer
Kung Führer
Korea North
Posty: 2526
Rejestracja: czw sty 04, 2007 9:45 pm
Lokalizacja: Gorzów Wlkp.
Kontakt:

Post autor: Antitheus »

Kod: Zaznacz cały

every 0$01 marked 011 do
jest w pierwszej linijce jego kodu. Pytanie najważniejsze: czy nie zapomniał o enable (011); ?? ^^
Awatar użytkownika
Birkart
Soldier level 2
Soldier level 2
Posty: 47
Rejestracja: sob wrz 20, 2008 5:38 pm
Lokalizacja: Timbuktu

Post autor: Birkart »

okey dzięki wszystkim skumałem już gdzie jest błąd ;p
Anarchy
Site Moderator
Chad
Posty: 1223
Rejestracja: czw maja 03, 2007 11:02 am

Post autor: Anarchy »

No i, gdzie jest?
Awatar użytkownika
Birkart
Soldier level 2
Soldier level 2
Posty: 47
Rejestracja: sob wrz 20, 2008 5:38 pm
Lokalizacja: Timbuktu

Post autor: 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

Kod: Zaznacz cały

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"?
ODPOWIEDZ