Selekcja i po.

Wszystko o modach, patchach i błędach w OW oraz ogólnym programowaniu.
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...

Selekcja i po.

Příspěvek od Xero Rozbójca »

-A więc, jak zrobić selekcję? (to już wiem)
-Jak zrobić aby po selekcji niewybrane jednostki zmieniły kolor i zniknęły?(nie wiem)
-Jak zrobić selekcję, po której wybrane jednostki zmienią kolor?(nie wiem)
-Jak zrobić selekcję, która zaczyna się przed misją(tak jak w misji 11 AM itp.)(nie wiem)
Siedziałem w Mod Archive 1h i nie działały tamte kody.
Liczę na odpowiedzi...
Radzio
Site Administrator
Site Administrator
Poland
Příspěvky: 2898
Registrován: pát črc 28, 2006 10:58 am
Bydliště: Bialystok, Poland

Příspěvek od Radzio »

Funkcja wyboru jednostek zwraca wybrane jednostki, więc, jeśli przypiszemy zmiennej 'grupa' funkcję selekcji, to przechowywać będzie ona wybrane jednostki.

Na takiej zmiennej możemy zastosować inne funkcje np. SetSide(lista,strona), by zmienić kolor itd.

Selekcję przed misją robi się tak samo jak w trakcie misji (czytaj: nie rozumiem, gdzie widzisz problem..).

[ Dodano: 15.07.2009 20:08 ]
PS: Do usuwania jednostek służy RemoveUnit(integer), do przetworzenia listy potrzeba Ci pętli for.
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...

Příspěvek od Xero Rozbójca »

Właśnie,tylko nie mogę sobie tego wyobrazić, jak by to miało wyglądać.
Podaj jakiś przykład selekcji i ją opisz.
Chociaż jedną z tych co podałem.
Proszę.


A co do pętli 'for' to także nie wiem oco chodzi z tym, troche zawiłe to jest.

Edit:
Chodzi mi także o selekcję jednostek, KTÓRYCH NIE MA NA MAPIE ANI NIE MAJĄ IDENTA(przypadkowi ludzie)
Radzio
Site Administrator
Site Administrator
Poland
Příspěvky: 2898
Registrován: pát črc 28, 2006 10:58 am
Bydliště: Bialystok, Poland

Příspěvek od Radzio »

Kód: Vybrat vše

CharacterSelection(tekst:string, min:integer, max:integer, jednostki:plist, klasy:plist)
Tekst to nagłówek z .wri
min, max - il. ludzi do wzięcia (min/max)
klasy - klasy w formie listy, np. [1,2,3,4] (wszystkie podstawowe), na które można zamienić postać (ew. zatrudnić, jeśli nie włączono możliwości zmiany); można też ograniczać ilość poszczególnych klas np. [[1,1],[4,2]], czyli można mieć 1 żołnierza i 2 naukowców
jednostki - lista jednostek do wyboru wraz z modyfikatorami, które stosują się dla wszystkich postaci wypisanych po nich
lista modyfikatorów, (default) oznacza, że są od razu zastosowane:
sel_hired - following character are hired at start (default)
sel_not_hired - following character are not hired at start
sel_changeable - player can fire/hire following characters
sel_not_changeable - player cannot fire/hire following characters (default)
sel_change_class - player can change class of following characters
sel_dont_change_class - player cannot change class of following characters (default)
sel_ignore_class_nation - following characters can be changed to class indepedning its nation
sel_dont_ignore_class_nation - following characters can be changed only to classes of its nation (default)
Przypadkowych ludzi możesz pobrać stosując funkcję FilterAllUnits (użyj szukajki, bo nie będę opisywać jeszcze tego).

Jeśli chcesz działać później na wybranych jednostkach (np. zmienic ich kolor), warto je zapisać do zmiennej np.

Kód: Vybrat vše

ZIOMY=CharacterSelection('xD', 2, 5, [KAPITAN_A, sel_not_hired, KAPITAN_B, sel_changeable]^GRUPA_LUDZI, [[1,1],[4,2]]);
SetSide(ZIOMY,8);


[ Dodano: 17.07.2009 17:25 ]
Żeby sprawdzić, jak rozumiesz mój przykład proszę wytłumacz mi, jak to zadziała :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...

Příspěvek od Xero Rozbójca »

Nie muszę mówić jak to działa bo wystarczy aby działało w kodzie xD
Ale dobra: twój przykład jest o tym, że:

Zamiast"Wybierz x postaci" będzie napisane "xD"
Będę mógł wybrać min. 2 ludka, max 5.
Postać o idencie "Kapitan_A" będzie po lewej stronie nie możliwa do wyboru, a kapitan_b będzie po mojej stronie w jednostkach.
Wybiorę grupkę osób, których identy wpiszę w "Grupka_Ludzi"
Możliwe będą 1 żołnierz, 2 naukowców.
Po czym wybrane jednostki zmienią stronę na stronę legionu.

Dobrze mój nauczycielu? xD


Dobra, a teraz co się stanie z niewybranymi ludzikami?(jeśli są ustawieni na mapie)
"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

Příspěvek od Radzio »

Nie wiem, jak rozumiesz "MOJA STRONA", ale KAPITAN_B będzie po prawej bez możliwości wyboru :P
Reszta ok.

Na pozostałych (czyli niewybranych) nie będzie efektów.
Można też im przypisać zmienną, żeby móc na nich wpływać:

Kód: Vybrat vše

...
RESZTA=KAPITAN_B^GRUPA_LUDZI diff ZIOMY;
Zbudujemy w ten sposób listę składającą się z elementów KAPITAN_B i wszystkich elementów listy GRUPA_LUDZI różnych niż ZIOMY.
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...

Příspěvek od Xero Rozbójca »

Dobra, wszystko ładnie działa, lecz zawsze jest jakieś "ale" i w tym przypadku:

Aby usunąć resztę ludq przydałoby się wpisać "RemoveUnit(RESZTA)" i po sprawie, ale nie działa. Jak zastąpić tą komendę?
"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

Příspěvek od Radzio »

Jeśli masz napisane w SAILFunctions.rtf:

Kód: Vybrat vše

RemoveUnit(integer:un)
To znaczy, że akceptuje tylko liczby całkowite - przykładowo pojedyncze jednostki, nie akceptuje list.
Aby ją zastosować trzeba użyć pętli for. Już od dawna to z tobą wałkuję, a ty jak grochem o ścianę..
Posłuchaj mnie w końcu!!
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...

Příspěvek od Xero Rozbójca »

A właśnie, że próbowałem też z for ;]
Można zamienić to 'un' na coś innego?

Kód: Vybrat vše

for un in [...] do
RemoveUnit(un);
Noi tam inne kombinacje xd
Już nawet z RemoveMcUnit nic nie zdziałałem ale się pogubiłem w tym wszystkim ;p

Mam problemik teraz z remove, częściej z filtrami no i takie coś jak:

Kód: Vybrat vše

exit;
while
prepare
itp co występuje w kampanii
Spróbuję z 'delete' ;P


W mapach jestem dobry, w SAILu taki sobie.
"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

Příspěvek od Radzio »

un to zmienna przejściowa, możesz nazwać ją nawet kubus_puchatek i nikt się nie obrazi (oprócz Kubusia of coz; Kubuś rox!) :P
Zmienną tą wystarczy wcześniej zadeklarować, najlepiej var, bo to i tak tymczasowa zmienna.
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...

Příspěvek od Xero Rozbójca »

Kód: Vybrat vše

export xero, robert, jan, maciej, dawid;
EXPORT ZIOMY, RESZTA;
var un;

starting
begin
ComEnterUnit(ru2sol, ru2_bunkier);
ComEnterUnit(ru2sol1, ru2_wieza);
ComEnterUnit(ru2sol2, ru2_wieza1);
ComEnterUnit(ru2sol3, ru2_arm);
ComEnterUnit(ru2sol4, ru2_wieza2);
ComEnterUnit(sol, ru_bun);
xero=CreateCharacter('xero');
robert=CreateCharacter('robert');
jan=CreateCharacter('jan');
maciej=CreateCharacter('maciej');
dawid=CreateCharacter('dawid');
ZIOMY=CharacterSelection('Wybierz max 7 postaci', 1, 7, [xero, sel_not_hired, general, sel_changeable]^[s,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11], [[1,4],3,[4,2]]);
RESZTA=[s,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11] diff ZIOMY;
SetSide(RESZTA, 4);
for un in [RESZTA] do
RemoveUnit(un);
PlaceUnitArea(xero, start, false);
PlaceUnitArea(robert, start, false);
PlaceUnitArea(jan, start, false);
PlaceUnitArea(maciej, start, false);
PlaceUnitArea(dawid, start, false);
SetClass(xero, 1);
InGameOn;
SayRadio(xero, 'axero');
SayRadio(general, 'ageneral');
SayRadio(xero, 'axero1');
RemoveUnit(general);
InGameOff;
ChangeMissionObjectives('A1');
ChangeMissionObjectives('A2');
ChangeMissionObjectives('A3');
end;
1 moduł z 2 , powinno działać dobrze no nie?
"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

Příspěvek od Radzio »

Tak, tylko jak ktoś ma włączone powiadamianie o rozkazach w opcjach, to 3 razy będzie musiał kliknąć ok. Jakbyś nie mógł razem tego dać, co?
Poza tym nie widzę potrzeby ustawiania strony 4 dla RESZTA, skoro od razu ich usuwasz..
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...

Příspěvek od Xero Rozbójca »

aa, poprostu ustawiłem jeden cel misji a te zapomniałem usunąć :D
I powinno działać teraz dobrze a tak wcale nie jest -.-
"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

Příspěvek od Radzio »

Daj moda..

[ Dodano: 24.07.2009 10:25 ]
Błąd jest w SAILu, ale od razu go nie zauważyłem (jak to dobrze, że edytor świeci żółtym tekstem :D). Masz napisane [RESZTA], co oznacza zupełnie co innego niż RESZTA. [RESZTA] to jednoelementowa lista, której jedynym elementem jest inna lista, można w ten sposób budować tablice wielowymiarowe, ale to ostatnia rzecz, którą teraz powinieneś zaprzątać sobie głowę. Usuń nawiasy i zrekompiluj. Działa jak marzenie :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...

Příspěvek od Xero Rozbójca »

Działa!!! Dzięki! ;D
A może wyjaśnisz mi oco chodzi z tymi tablicami? Z chęcią przeczytam :)
"Osoby, stawiające więcej niż trzy znaki interpunkcyjne obok siebie, mają problemy ze zdrowiem psychicznym."

Obrázek
Zamčeno