SAIL - Poradnik tworzenia postaci i operacje na tablicach
Posted: Tue May 05, 2015 6:07 pm
by zoNE
Author: SerpentSerpent wrote: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:Tworzenie ludzi w start.txt:Spoiler:Spis funkcji hc_ można znaleźć w spisie funkcji wbudowanego w edytor lub w spisie funkcji by zoNE.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: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.
Topic: viewtopic.php?f=42&t=4325