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