SAIL - Poradnik tworzenia postaci i operacje na tablicach

Wszelkie pytania na temat SAIL'a i modowania OW.
Post Reply
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

SAIL - Poradnik tworzenia postaci i operacje na tablicach

Post by Serpent »

O tworzeniu postaci było już setki postów jednak użytkownik Szulce prosił mnie żeby mu to wyjaśnij więc postanowiłem się tymi radami podzielić.

Przydatne linki:
Tworzenie postaci w SAIL'u (by NNPlaya)
Tworzenie ludzi (start.txt)
Tworzenie jednostek w edytorze (jest temu poświęcony rozdział) - format .docx


Tworzenie ludzi w SAIL'u:
Spoiler:

Code: Select all

Function Tworz_Czlowieka;
var un;
begin

  // korzystając z specjalnych funkcji wczytujemy do pamięci komputera parametry jednostki
     
     uc_side := 1; // uc_side to funkcja wczytująca stronę 
     uc_nation := 1; // uc_nation to funkcja wczytująca nację

  // w tym miejscu rozpoczynamy definiowanie za pomocą funkcji hc_
     hc_class := 1; // klasa postaci 
     hc_sex := sex_male; // płeć
     hc_name := 'Jan Kowalski'; // nazwisko postaci
     hc_gallery := 'us'; // galeria postaci
     hc_face_number := 2; // numer twarzy (podajemy tylko w przypadku gdy podaliśmy galerię)
     hc_basic_skills := [1, 0, 0, 0]; // poziom postaci podstawowy 
     hc_skills := [3, 2, 1, 0]; // poziom główny postaci
     hc_attr := [10, 11]; // szybkość i pancerz

     // Wszystkie dane znajdziesz w spisie Identify -> Constans.
    
     un := CreateHuman; // używamy funkcji CreateHuman i przypisujemy ident un jednostce
     PlaceUnitXY(un, 1, 1); // umieszczamy jednostkę na koordynatach

end;


Należy pamiętać że nie trzeba za każdym razem definiować cech postaci za pomocą hc_ ponieważ
gra korzysta z ostatnio użytych ustawień.

Przykład - Chcemy stworzyć 3 żołnierzy radzieckich w kolorze czerwonym:

Function Tworz_Czlowieka(area);
var un;
begin

  // korzystając z specjalnych funkcji wczytujemy do pamięci komputera parametry jednostki
     
     uc_side := 3; // kolor czerwony (3)
     uc_nation := 3; // nacja rosyjska (3)
  
     hc_class := 1; // klasa postaci 
     hc_sex := sex_male; // płeć
     hc_name := ''; // puste miejsce oznacza losowe nazwisko
     hc_gallery := ''; // puste miejsce oznacza losową twarz
     hc_basic_skills := [1, 0, 0, 0]; // poziom postaci podstawowy 
     hc_skills := [3, 2, 1, 0]; // poziom główny postaci
     hc_attr := [10, 11]; // szybkość i pancerz
    
     un := CreateHuman;
     PlaceUnitArea(un, area, false); // umieszczamy jednostę w arei 

end;

Teraz używamy funkcji:
Every 0$01 do
var i;
begin

     for i = 1 to 3 do
         Tworz_Czlowieka(Area01);

end;

Na mapie powinno pojawić się teraz 3 żołnierzy.
Spis funkcji hc_ można znaleźć w spisie funkcji wbudowanego w edytor lub w spisie funkcji by zoNE.
Tworzenie ludzi w start.txt:
Spoiler:
Tworzenie ludzi w ten sposób jest nieco bardziej skomplikowany. Pierwsze co musimy zrobić to wypakować plik start.txt z archiwum Data1.owp za pomocą programu PakViev.

Plik ten znajdziemy w Campaigns/NACJA (Am, Ar, Ru). Po wypakowaniu tego pliku wklejamy go pod tym adresem: Twoj_Mod/Campaigns/NACJA (Am, Ar, Ru).
Cała ścieżka powinna wyglądać tak:
.../Twoj_Mod/Campaigns/NACJA (Am, Ar, Ru)/start.txt

Następnie otwieramy ten plik za pomocą jakiegoś edytora tekstu (wystarczy zwykły notatnik).

Teraz możemy dodać własne jednostki wg. wzoru:

Code: Select all

  
   Bergkamp 1 // identyfikator postaci
    DEFINE
      NAME Bergkamp // identyfikator nazwiska używany w CharName
      HUMAN 1 1 2 // od lewej: płeć (1 - m, 2 - k), profesja, nacja
      ATTR 10 10 // siła (pancerz) i szybkość
      SKILLS 3 610330 2 308146 1 1534473 2 482759 // poziomy postaci i doświadczenie
      LAST_MISSION 14 // numer misji w której charakter występuje po raz ostatni
      CHAR @ 20 0 // podświetlenie postaci jeżeli pierwsza wartość >= 100
      RANDSEED 0 // nieznany parametr
      VOICE 3 GALLERY ru 43 // numer odgłosu postaci, galeria i numer twarzy w galerii
    END_OF_DEFINE

Notka ze strony OWS:
Punkty doświadczenia w start.txt = 30x punkty doświadczenia w kampanii lub 10x punkty doświadczenia w trybie wielu graczy.

Należy pamiętać że po dodaniu postaci w start.txt musimy zmienić tę wartość na samym początku pliku:
CHARACTERS 78 // obecnie w start.txt zdefiniowanych jest 78 postaci

Umieszczanie postaci zdefiniowanej za pomocą start.txt w edytorze:
Spoiler:

Code: Select all

Służy do tego funkcja NewCharacter('string');

Przykład zastosowania:
Export Jacek;

Export Function Przygotuj_Ludzi;
begin
uc_side := 1;
uc_nation := 2;

Jacek = NewCharacter('Jacek');
PlaceUnitXY(Jacek, 1, 1, false);
End;

Przemieszczanie jednostek (ludzie, pojazdy):
Spoiler:

Code: Select all

Służą do tego funkcje z rodziny ComMove_.

ComMoveXY(ident, x, y); // rozkazuje jednostce "ident" przerwać obecne czynności i iść na hex o koordynatach x,y
ComMoveToArea(ident, area); // rozkazuje jednostce "ident" przerwać obecne czynności i iść na hex znajdujący się na danym obszarze

Funkcje AddComMove_ działają na takiej samej zasadzie z tą różnicą że nie przerywają już wykonywanych czynności.

Operacje na tablicach:
Spoiler:

Code: Select all

Definiowanie tablicy:
Export tab; // zmienna globalna tab

Export Function Tablica;
begin
tab := []; // tablica pusta

tab := tab ^ 1; // dodanie do tablicy już istniejącą zawartość tablicy i 1
tab := tab ^ Jacek; // dodanie do tablicy już istniejącą zawartość tablicy i jednostkę Jacek (ident w postaci numeru)
tab := tab ^ FilterAllUnits([f_side, 1]); // dodanie do tablicy już istniejącą zawartość tablicy i wszystkich jednostek koloru niebieskiego
tab := FilterAllUnits([f_side, 7]); // usunięcie wszystkich elementów z tablicy i dodanie do tablicy wszystkich jednostek koloru zielonego

tab := Delete(tab, 1); // usunięcie pierwszego elementu z tablicy
tab := Delete(tab, tab); // usunięcie ostatniego elementu z tablicy

display_strings := tab; // wyświetla zawartość tablicy na ekranie
End;

Warunek a tablica:
Spoiler:

Code: Select all

Założenia:
- Zapisz do tablicy wszystkie jednostki z Area11 jeżeli jest w niej przynajmniej 10 jednostek.

Export tablica;

Every 0$01 trigger FilterUnitsInArea(Area11, [f_side, 1]) >= 10 do
begin
tablica := []; // tworzenie tablicy
tablica := FilterUnitsInArea(Area11, [f_side, 1]);
End;

Zbiory:
Spoiler:

Code: Select all

Operacje na zbiorach wykonuje się za pomocą operatorów arytmetycznych +,-,*,/.

Założenia:
- Wykonaj kod jeżeli oba zbiory będą równe.

Export zbiorA, zbiorB;
Every 0$01 do
begin
zbiorA = 0;
zbiorB = 100;
End;

// Zmiana wartości co sekundę:
Every 0$01 trigger zbiorA < zbiorB do // wykonuj kod jeżeli zbiorA mniejszy od zbiorB
begin
enable;

zbiorA = zbiorA + 1;
zbiorB = zbiorB - 1;
End;

// Blok finalny
Every 0$01 trigger zbiorA = zbiorB do
begin
// wykonaj kod
End;

Jeżeli chcecie aby omówić jakieś inne zagadnienie wystarczy napisać w tym temacie.
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
MasterKiller
Soldier level 6
Soldier level 6
Posts: 343
Joined: Tue Aug 09, 2011 5:51 pm

Re: SAIL - Poradnik tworzenia postaci i operacje na tablicac

Post by MasterKiller »

Tak gwoli scislosci - uc_, hc_, itp. to zmienne, nie funkcje :D
Wszyscy jesteśmy żołnierzami: WYDANE
https://original-war.net/files.php?id=174
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: SAIL - Poradnik tworzenia postaci i operacje na tablicac

Post by Serpent »

Cóż literówka ;p
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
User avatar
Szulce
Soldier level 6
Soldier level 6
Poland
Posts: 469
Joined: Wed Apr 28, 2010 9:53 am

Re: SAIL - Poradnik tworzenia postaci i operacje na tablicac

Post by Szulce »

Ze zbiorów w ogóle nic nie kumam, ale chyba tablica może być moim rozwiązaniem.
Image
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: SAIL - Poradnik tworzenia postaci i operacje na tablicac

Post by Serpent »

Szulce wrote:Ze zbiorów w ogóle nic nie kumam, ale chyba tablica może być moim rozwiązaniem.
Zbiory czy też liczniki (nazewnictwo dowolne) przechowują dane liczbowe.

W tym przykładzie co sekundę do zbiorA będzie dodawana wartość o 1 większa, a w zbiorB o 1 mniejsza. Po 50 sekundach powinien zostać spełniony warunek A = B co spowoduje wykonanie kodu w bloku finalnym.
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
Markok
Soldier level 6
Soldier level 6
Posts: 314
Joined: Thu Sep 04, 2014 12:53 am
Location: Oberschlesien
Contact:

Re: SAIL - Poradnik tworzenia postaci i operacje na tablicac

Post by Markok »

Trochę się męczyłem (trochę z plusem..) ale i = i + 1 nie hulało, więc proszę kogoś (wiadomo kogo bo nikogo innego tu niema..) o zaprezentowanie receptury na moje bóle głowy, czyli wzrost liczby atakujących z każdym atakiem o +1 na przykład, swoisty survival, ehh dzięki Serp :O
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: SAIL - Poradnik tworzenia postaci i operacje na tablicac

Post by Serpent »

Dajesz licznik jako zmienna globalna i zwiększasz tą wartość niezależnie.

Code: Select all

Export atakujacy;
Export Function Define;
begin
atakujacy = 10;
end;


Every 10$00 do // cokolwiek
begin
atakujacy = atakujacy + 1;
enable;
end;

Every 5$00 trigger atakujcie_wroga do
begin

for i = 1 to atakujacy do
...
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
Markok
Soldier level 6
Soldier level 6
Posts: 314
Joined: Thu Sep 04, 2014 12:53 am
Location: Oberschlesien
Contact:

Re: SAIL - Poradnik tworzenia postaci i operacje na tablicac

Post by Markok »

Przy tym export function define spawnowało najpierw jedną jednostkę chociaż było jak byk = 5, jak dałem przy startingu atakujacy = 5; to wtedy 5 zaczęło dopiero spawnować od początku
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: SAIL - Poradnik tworzenia postaci i operacje na tablicac

Post by Serpent »

To zależy kiedy funkcja DEFINE została użyta. Ja preferuje robić sobie taką funkcję ze zmiennymi globalnymi i używać ją od razu w bloku Starting.
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
User avatar
Szulce
Soldier level 6
Soldier level 6
Poland
Posts: 469
Joined: Wed Apr 28, 2010 9:53 am

Re: SAIL - Poradnik tworzenia postaci i operacje na tablicac

Post by Szulce »

Serpent wrote:
Szulce wrote:Ze zbiorów w ogóle nic nie kumam, ale chyba tablica może być moim rozwiązaniem.
Zbiory czy też liczniki (nazewnictwo dowolne) przechowują dane liczbowe.

W tym przykładzie co sekundę do zbiorA będzie dodawana wartość o 1 większa, a w zbiorB o 1 mniejsza. Po 50 sekundach powinien zostać spełniony warunek A = B co spowoduje wykonanie kodu w bloku finalnym.
Czyli, jeżeli dobrze kombinuję, używając tablicy, w której mam zawarte wszystkie postacie do zrzutu i modyfikacji kodu na stworzenie jednostki, będę miał tą zdefiniowaną w start.txt?
Image
User avatar
Serpent
Soldier level 10
Soldier level 10
Estonia
Posts: 4175
Joined: Tue Jul 07, 2009 9:13 pm
Location: Polska - EuroStan ZSRE
Contact:

Re: SAIL - Poradnik tworzenia postaci i operacje na tablicac

Post by Serpent »

Aby twarze ani nazwiska postaci nie powtarzały się wystarczy użyć tej funkcji zanim stworzymy losowe jednostki.

Code: Select all

Export Function RandFacesAndNames();
begin
hc_gallery := '';
hc_name := '';
hc_importance := 0;

result := true;
End;

Code: Select all

PrepareHuman(false, 1, 2);

RandFacesAndNames(); // użycie
//...
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
Post Reply