Selekcja i po.

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

Selekcja i po.

Post by 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
Posts: 2898
Joined: Fri Jul 28, 2006 10:58 am
Location: Bialystok, Poland

Post by 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.
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...

Post by 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
Posts: 2898
Joined: Fri Jul 28, 2006 10:58 am
Location: Bialystok, Poland

Post by Radzio »

Code: Select all

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.

Code: Select all

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

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

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

Post by 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ć:

Code: Select all

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

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

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

Post by Radzio »

Jeśli masz napisane w SAILFunctions.rtf:

Code: Select all

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

Post by Xero Rozbójca »

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

Code: Select all

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:

Code: Select all

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

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

Post by 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.
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...

Post by Xero Rozbójca »

Code: Select all

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

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

Post by 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..
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...

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

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

Post by 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
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...

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

Image
Locked