Regulamin działu
Jeśli chciałbyś o coś zapytać czy podyskutować w którymś z tutejszych tematów - zrób to w dziale wyżej, "Modyfikacje". Ten tutaj jest przeznaczony tylko i wyłącznie dla autorów poradników dotyczących modyfikacji gry.

Dodawanie postaci i tworzenie skryptów

Obiecany przezemnie poradnik właśnie ujrzał światło dzienne. Będzie się ukazywał w częściach w tym temacie.

Wstęp
Mój poradnik jest dla każdego. Dla osób króre nie mają nic wspólnego z modingiem oraz dla tych bardziej doświadczonych. Starałem się napisać ten samouczek w taki sposób aby każdy mógł go zrozumieć. Tyle wstępu czas wziąć się do pracy.

Spis treści
Post 1
-Wstęp
-Dodawanie postaci
Post 2
-Wstęp do skryptów
-Podstawy skryptów
-Dodawanie broni i inne sztuczki z nią związane
Post 3
-O dialogach
-Dialogi
-Tworzenie własnego dialogu
Post 4
-O animacjach
-Animacje
-Przemieszczanie się
Post 5
-Przygotowanie
-Postać w aucie


Dodawanie postaci
Aby dodawać do gry postacie trzeba posiadać pewne programy które trzeba wgrać do folderu gdzie zainstalowana jest mafia, oto one:
* MafiaDataXtractor
* MafiaHack
* BSV 6.0
Gdy je zdobędziemy nic nie stoi na przeszkodzie aby dodać do mafii postać. Dodamy ją do swobodnej jazdy miasto-dzień. Najpierw otwieramy program MafiaDataXtractor, następnie klikamy na plik mission i naciskamy przycisk Extrack. Czekamy aż program rozpakuje plik. Gdy tak się stanie zamykamy ten program. Po co wykonaliśmy taką operację? To proste, aby dostać się do pliku który potem otwożymy programem BSV 6.0. Dla tych co niewiedzą wyjaśnie krótko jak działa mafia. W folderze w którym jest nasza gra jest kilkanaście plików w których są tekstury, modele, dźwięki, itd. wszystkie pliki są z sobą łączone tworząc jedną całość. Wypakowaliśmy plik mission. W nim jest zdefiniowane w jakim miejscu co się znajduje. Co ma się wydażyć. Bierzemy się dalej do pracy, otwieramy program BSV 6.0. Może wystąpić błąd z powodu braku potrzebnych bibliotek. Jeżeli tak się stanie musimy je pobrać i umieścić w folerze w którym jest BSV 6.0.Gdy już otworzymy program ujrzymy kilka pustych ramek które niedługo zapełnią się. Klikamy na przycisk file. Następnie na load scane2.bin czyli wczytaj plik scane2.bin. Teraz wchodzimy do folderu w którym jest gra mafia.Następnie klikamy na folder mission. W tym folderze są misje. Ponieważ chcemy umieścić postać w swobodnej jeździe miasto-dzień otfieramy folder freeride. W nim jest kilka plików, nam będie potrzebny tylko plik scane2.bin otwieramy go. Ramka po lewej stronie zapełni nam się różnymi obiektami. Aby dodać do gry postać klikamy insert a następnie human.Otworzy się nam nowa ramka. Jest w niej wszystko aby dodać postać do gry.


Name: wpisujemy tam nazwę postaci będzie nam potrzebna do identyfikacji i do skryptów.

Model:Model postaci jest ich sporo. Ja chcę dodać do gry Pauliego więc wpisuje Paulie.i3d. Ważne aby napisać .i3d cyli format postaci.Jeżeli nie napiszemy tego postać nie pojawi się w grze. Na stronie mafia pub jest lista modeli osób którą można pobrać.Modele mają format 4ds lecz większość powinna działać w formacie .i3d

Trans: Miejsce w którym postać na początku pojawi się w grze. Teraz przymykamy BSV 6.0 otwieramy program MafiaHack i wybieramy wersję gry(opcja dostępna jest na dole) jeżeli źle to zrobimy możliwe będą różne błędy. Otwieramy mafię a następnie swobodną jazdę miasto-dzień. Wysiadamy z auta i idziemy na miejsce gdzie chcemy aby stała nasza postać.Przymykamy mafię i klikamy get position. Nic się nie stanie musimy teraz otworzyć przymkniętą mafię poruszyć się i ponownie przymknąć grę a następnie kliknąć get position, pokażą się nam współrzędne na których stoimy.Zamykamy mafię i kopiujemy współrzędne.Zmieniamy tylko kropki na przecinki ponieważ nie będzie można dodać postaci.

Size: Skala modelu postaci. Zwykle wszędzie jest ustawiona na 1 więc i my wstawiamy jeden. Zachęcam do eksperymentów.

Rotacion:: Obrócenie postaci nie musimy tutaj nic zmieniać.

Sex: Odgłosy jakie wydaje postać. Zapewne zauważyliście gdy atakujemy postać wydaje rózne odgłosy. Dzięki tej opcji możemy właśnie to ustawić. Jeżeli wpiszemy tam 0 usłyszymy odgłos Pauliego jeżeli 1 odgłos Sama 2 Salieriego. Niestety nie stworze dalszej listy odgłosów może zrobi to ktoś inny.

Behawiour: Reakcja,okleśla kiedy postać jest złowrogo nastawiona do gracza(Jeżeli jest złowrogo nastawiona nie oznacza że go zaatakuje, o tym napisze później).Oto lisa:
No reaction- Postać nie reaguje na nic na broń atak itp.
No reaction on weapon- Nie reaguje na broń.
React when hit- Reaguje na atak ale nie na broń oraz strzały.
Reaction on Pleyer- Raguje na gracza. Nie ważne są inne czynniki.
Reaction on Attack- Reaguje na broń i na atak.
Afraid: Raguje tak jak pieszy, ucieka gdy coś się dzieje.

Paulie jest przyjacielem więc ustawiam mu No reaction.

Agression: Agresja. Jest używana gdy postać ma wroga(gracza i nie tylko ale o tym później).Jeżeli ustawimy agresję na jeden na pewno zaatakuje. Jeżeli na 0,5 będzie stać w miejscu chyba że dostanie jakiś cios a jeżeli na zero napewno będzie uciekać. Mojej postaci ustawiłem 1.

Weight: Waga nie jest ważna każda postać ma wagę 80kg więc i my to wpisujemy.

Wszystko jest już gotowe więc klikamy na przycisk insert.Gdy procedura dobiegnie do końca postać zostanie dodana. Zamykamy BSV 6.0 i otwieramy mafię a następnie swobodna jazda miasto-dzień. W miejscu z którego pobraliśmy współrzędne powinna stać nasza postać.

Ciekawostka Walka postaci: Jeżeli umieścimy obok siebie dwie postacie o różnych reakcjach (oprócz Afraid) postacie będą do siebie złowrogo nastawione. Od tego czy się zaatakują zależy ich ustawienie opcji Agression. Jeżeli obie postacie będą miały ustawione 0,5 będą normalnie funkcjonować natomiast jeżeli jedna z nich będzie miała opcje agression ustawioną na 1 zaatakuje drugą postać.

I to wszystko w tej części. W następnej naucze was podstaw skryptów i dodawania broni postaci.Zapraszam.

[ Z racji tego, że jest to poradnik wieloczęściowy proszę userów o nie pisanie postów w tym temacie - jak są jakieś pytania to w tym dziale nowy temat lub PW do autora. - M. ]
Wstęp do skryptów
Skrypt, co to właściwie jest? Skrypt to plik tekstowy który odpowiada za zachowanie postaci co ma robić jaki jest jej cel.Większość osób uważa że skrypty są bardzo trudne i tylko zawodowcy je piszą. Ja temu zaprzeczam. Jedyną trudnością jest według mnie to że jest ich spora ilość więc ja nie poznałem działania wszystkich.Ale dzięki dużej ilości skryptów mamy wiele możliwości. Gdyby ktoś się wysilił mógł by zrobić misję dorównującą tej z gry.Jeżeli będziecie czytać wszystko po koleji i po woli gwarantuje że wszystkiego się nauczycie.

Podstawy skryptów
Skrypty musimy napisać przy postaci więc otwieramy BSV 6.0 i ładujemy plik scane2.bin przy którym ostatnio pracowaliśmy. Na liście szukamy nazwy postaci którą dodaliśmy(powinna być prawie na końcu) gdy ją znajdziemy klikamy na nią.Po prawej stronie jest puste okienko w któryb będziemy pisać skrypt.Na początku każdego skryptu musimy zdefiniować ilość postaci i rzeczy które biorą udział w skrypcie. Osoby i rzeczy które biorą udział w skrypcie nazywa się aktorami. Musimy zdefiniować ilość aktorów. Zrobimy to komendą dim_act. Po tej komędzie po spacji musimy podać ich ilość. Nasz skrypt nie będzie duży więc wystąpi w niej jedna postać.W ramce gdzie pisze się skrypty piszemy:


dim_act 1

Teraz musimy dokłaniej okleślić aktorów pisząc ich nazwy. Po co takie utrudnienie? Stanie się to pomocne w późniejszej częsci skryptu. Wróćmy do określenia aktorów w tym przypadku jednego. Komenda która pozwala okleślić nazwę aktora to findactor. Piszemy:

findactor 0,"nazwa_aktora"

Dlaczego i po co to zero? Jest to numer identyfikacyjny. Gdyby w skrypcie była by większa ilość aktorów wyglądało by to tak:

findactor 0,"nazwa_aktora"
findactor 1,"nazwa_aktora1"
findactor 2,"nazwa_aktora2"

Zawsze zaczyna się od numeru identyfikacji 0 potem 1 potem 2 itd.

Ważne: Mimo że zaczyna się od aktora zero ilość aktorów w skrypcie np. tym równa się trzy.

Oczywiście tam gdzie napisałem nazwa_aktora wpisuje się aktora.Nasz cały skrypt powinien wyglądać teraz tak:

dim_act 1
findactor 0,""

No dobrze ale dlaczego teraz tam jest pusto a nie ma nazwy aktora? Dla ułatwienia. Jeżeli przy nazwie findactora jest pusto oznacza że jest to aktor domyślny czyli taki przy którym jest nasz skrypt. Nasz skrypt jest napisany przy Pauliem czyli to on jest właśnie teraz aktorem 0. Oczywiście nazwy aktorów można pisać w dowolnej kolejności czyli Paulie mógł by być aktorem 1 a aktorem 0 była by inna postać. I to tyle ze wstępu. Zapewne dla większości z was był trudny. Według mnie początek jest najtrudniejszą częścią skryptu.Uczyłem się jej najdłużej.Jeżeli to zrozumiecie puźniejsze komendy skryptowe będą dużo łatwiejsze.

Dodawanie broni i inne sztuczki z nią związane.

Wróćmy do naszego skryptu wygląda on tak:

dim_act 1
findactor 0,""

Aby dodać broń postaci użyjemy komędy human_addweapon. Po spacji musimy napisać identyfikator postaci której dodamy broń. I to jest właśnie to ułatwienie. Teraz zamiast pisać jej nazwy piszemy 0 bo to właśnie jest jej identyfikator.Stawiamy przecinek. Teraz piszemy numer broni oto lista.

2-nóż
3-kaset
4-kij bejzbolowy
5-koktajl Mołotowa
6-Colt Detective Special
7-S&W model 27 Magnum
8-S&W model 10 M&P
9-Colt 1911
10-Thompson 1928
11-Strzelba
12-Obrzyn
13-US Rifle M1903 Springfield
14-Mosin-Nagant 1891/30
15-Granat
28-drewniana deska
31-miecz
32-głowa psa

Jeżeli chcemy aby postać miała np. Thompsona piszemy numer 10,kij bejzbolowy 4.Stawiamy przecinek.Teraz trzeba określić ile nabojów jest naładowanych. Potem po kolejnym przecinku w magazynku. Jeżeli dodajemy broń białą w obydwu miejscach piszemy 0 .Cały skrypt powinien wyglądać tak:

dim_act 1
findactor 0,""
human_addweapon 0,10,50,200

Można też sprawić aby broń była schowana komendą human_holster. Po spacji należy wpisać tylko identyfikator postaci która ma mieć puste ręce. Zapisujemy nasz skrypt klikając na przycisk save. Gdy będziemy zmieniać skrypt będziemy musieli go ponownie zapisać. Gotowe!

Ważne: Jeżeli postać ma reakcję Reaction on Pleyer i jest przy graczu skrypt nie zadziała ponieważ postać ma cel najpierw pozbyć się zagrożenia a dopiero potem zrealizować skrypt. Aby tego uniknąć trzeba użyć specialnego komunikanu commandblock. W chwili domyślnej funkcja ta jest wyłączona czyli ustawiona na 0(off). Umieszczamy ją na początku skryptu i po spacji dopisujemy 1(on)Ważne aby na końcu skryptu wyłączyć funkcję.Tak powinien wyglądać skrypt:

commandblock 1
dim_act 1
findactor 0,""
human_addweapon 0,10,50,200
commandblock 0

To wszystko w tej części
W następnej napisze o dialogach i o ich tworzeniu. Zapraszam.
O dialogach
Zapewne zauważyliście że dialogi są uruchamiane w różny sposób.Niektóre uruchamiane są automatycznie a rozpoczęcie niektórych sami wymuszamy.Niekiedy dialogi toczą się pomiędzy dwoma postaciami a my nie bierzemy w nich udziału.W tej części naucze robić was dwa rodzaje. Dialogi nie powinny wam sprawić dużej trudności.

Dialogi

Na początku warto wzbogacić się o program Mafia Text Editor. Będziemy go potrzebować.Gdy już go mamy otwieramy BSV 6.0. Ładujemy używany ciągle plik scane2.bin i szukamy dodanej postaci przy której jest nasz skrypt. Funkcja skryptowa która mówi o tym że postać ma powiedzieć dany tekst to enemy_talk.Po niej po spacji należy wpisać identyfikator tekstu. Teraz przymykamy BSV 6.0 i otwieramy MafiaDataXtractor. Rozpakowujemy nim plik Tables.Otwieramy pobrany program Mafia Text Editor. Naciskamy file a następnie open.Znajdujemy rozpakowany plik Tables otwieramy go. Otwieramy plik textdb. Zakończenie jakie ma ten plik zależy od wersji językowej gry. Jeżeli mamy polską będzie to textdb_pl, angielską textdb_en itd. Gdy już otworzymy plik zobaczymy bardzo długą listę tekstów z gry. Najlepiej w tej chwili otworzyć program na cały ekran. Oczywiście nie każdy tekst w tym pliku to dlialog. Teraz znajdujemy linijkę dialogową która nas interesuje. Tu musze was rozczarować.Jeżeli znajdziemy tekst który w grze mówi np. Sam i przypiszemy go Pauliemu usłyszymy głos Sama. Przynajmniej ruchy warg (jeżeli jest bo niekażda linijka dialogowa ma ruch warg) zostanie zachowany. Tak więc jeżeli dodaliśmy do gry Pauiego warto znaleźć tekst który mówi Paulie. Jeżeli już taki znajdziemy patrzymy na jego numer identyfikacyjny który jest drugi po lewej stronie. Warto wźąść kartkę i go przepisać. Liczymy cyfry, jeżeli jest mniej niż osiem musimy napisać na początku zera czyli np. mamy tekst o numerze identyfikacyjnym 950027. Musimy dodać dwie cyfry ponieważ aktualnie jest tam sześć cyfr. Numer id będzie wyglądał tak 00950027. Otwieramy przymknięty BSV 6.0 i piszemy:

enemy_talk 0,00950027

Zero na początku oznacza identyfikator postaci która ma powiedzieć tekst. Po nim jest numer dialogu rozszerzony zerami. Piszecie tam numer waszego dialogu. Cały skrypt powinien wyglądać tak:

dim_act 1
findactor 0,""
human_addweapon 0,10,50,200
enemy_talk 0,00950027

Zapisujemy skrypt.Uruchamiamy grę. Otwieramy swobodną jazdę miasto-dzień. Jeżeli postać stoi blisko odrazu gdy gra się wczyta usłyszymy i zobaczymy tekst na dole ekranu(jeżeli mamy włączoną taką opcje). Jeżeli stoi daleko usłyszymy tylko słaby dźwięk. To był przykład dialogu który uruchamia się automatycznie. Teraz sprawimy abyśmy sami wymusili rozpoczęcie dialogu. Przed enemy_talk piszemy event use_ab,10970004.Sprawi to że gdy podejdziemy do postaci zobaczymy wykrzyknik. Gdy naciśniemy przycisk akcji zostanie realizowana część skryptu po tej komędzie. Skrypt powinien wyglądać tak:

dim_act 1
findactor 0,""
human_addweapon 0,10,50,200
event use_ab,10970004
enemy_talk 0,00950027

Zapisujemy skrypt. Ponownie otwieramy gre tam gdzie dodana jest nasza postać. Jest problem. Postać mówi tekst przed wymuszeniem tego. Nad tym za chwilę popracujemy. Tymczasem podchodzimy do naszej postaci gdy zobaczymy wykrzyknik naciskamy klawisz akcji. POwinliśmy usłyseć dialog. Zamykamy grę. Dlaczego dzieje się tak że gdy włączamy grę postać mówi tekst? Dlatego że skrypt jest realiowany w całości. Gdy gra przerabia linijkę event use_ab,10970004 nie zatrzymuje się na tej komędzie. Dlatego realizuje następne przez co nasz problem. Musimy zrobić rzecz która sprawi że przetwarzanie skryptu zatrzyma się w pewnej chwili. Jest to ciąg poleceń skryptowych:

label 1
wait 1000
goto 1

Sprawi on że gra będzie przerabiała to polecenie w nieskończoność. Label to jakby identyfikator części skryptu który trwa do pustej lini skryptowej. Wait sprawi że gra czeka podaną ilość milisekund a goto w tym przypadku goto 1 że skrypt przejdzie do label 1. W ten sposób gra będzie przerabiała tą komędę w nieskończoność. Gdy dojdzie do końca wróci na sam początek. Nasz skrypt powinien wyglądać tak:

dim_act 1
findactor 0,""
human_addweapon 0,10,50,200

label 1
wait 1000
goto 1

event use_ab,10970004
enemy_talk 0,00950027

Teraz została nam jeszcze jedna kwestia do przerobienia. A mianowicie co zrobić aby dialog był dłuższy? Otwieramy Mafia Text Editor plik językowy i znajdujemy jakiś tekst bohatera. Np. 2950252 i rozszerzamy go do ośmiu cyfr. Aby bohater mógł odpowiedzieć na pierwszy tekst musi być aktorem który bierze udział w skypcie. Uzupełniamy więc

dim_act 2
findactor 0,""
findactor 1,"Tommy"

Teraz nie wystarczy wpisać enemy talk bezpośrednio po enemy talk bo postacie będą mówić razem. Wystarczy pomiędzy wpisać polecenie wait bez niczego i gra poczeka aż postać skończy mówić. Wtedy bohater powie swój tekst. A więc cały skrypt będzie wyglądał tak:

dim_act 2
findactor 0,""
findactor 1,"Tommy"
human_addweapon 0,10,50,200

label 1
wait 1000
goto 1

event use_ab,10970004
enemy_talk 0,00950027
wait
enemy_talk 1,02950252

Tworzenie własnego dialogu
Mimo że jest to temat który wykracza poza tworzenie postaci, opisze go. Aby stworzyć linijkę dialogową otwiermy Mafia Text Editor i ładujemy plik textdb. Teraz naciskamy przycisk add. W add string powinliśmy zobaczyć kursor. Piszemy tam jakiś tekst. Np. "Zostaw mnie!" teraz klikamy ponownie add. Na końcu listy powinien utworzyć się nasz tekst.Zapisujemy cały plik klikając na dyskietkę. Teraz w naszym skrypcie możemy podmienić stary dialog na ten który dodaliśmy pisząc jego identyfikator. Nie będzie dźwięku ani ruchu warg będzie tylko napis. Teraz dodamy ruch warg. Niema programu który może stworzyć coś takiego ale za to można skopiować ten plik. Na liście szukamy dialogu podobnej długości. Zapamiętujemy numer id. Teraz otwieramy plik Tables a następnie DAT. Są w nim pliki odpowiadające za róch warg. Szukamy zapamiętanego numeru id. Najlepiej to zrobić przez wyszukiwarkę Windows. Gdy już znajdziemy kopiujemy plik i wklejamy w tym folderze. Teraz skopiowanemu plikowi zmieniamy nazwę na numer identyfikacyjny dialogu który dodaliśmy.Czyli np. dodaliśmy dialog o numerze 99970001 tak więc plik .Dat powinien mieć taki sam numer. Otwieramy grę. Teraz nasz dialog powinien mieć już ruchy warg. Ostatnią rzeczą jest głos. Jasną rzeczą jest że niestety nie ściągniemy aktora który podkładał głos postaci w mafii. Mamy trzy możliwości: sami dubingujemy dialog, używamy jakiegoś edytora głosu lub poprostu nie robimy nic. Opisze wam pierwszą metodę. Otwieramy program do nagrywania dźwięków nagrywamy go i zapisujemy pod numerem identyfikacyjnym naszego utworzonego dialogu. Teraz w folderze mafi tworzymy folder sounds. Do niego wklejamy nasz plik dźwiękowy. Otwieramy grę. Teraz nasz dialog powinien mieć wszystkie trzy elementy: dźwięk ruch warg i podpis do dialogu.

To koniec tej części. W następnej napisze o animacjach i o przemieszczaniu się. Zapraszam.
O animacjach
Animacje w grze mafia można podzielić na dwie części. Pierwsze to animacje systemowe. Gdy każemy postaci biec widzimy jak biega, schyla się strzela. Natomiast animacje pokazowe służą poto aby obrazować czynności życia codziennego. Np. zmywanie podłogi, siedenie. Pokaże wam jak robić animacje drugiego rodzaju.

Animacje
Polecenie które uruchamia animację to enemy_playanim. Po nim należy wpisać nazwę animacji. No właśnie jak to zrobić. Jeżeli chcemy aby postać odgrywała naszą animacje lepiej nie robić tego metodą prób i błędów bo animacji na moje oko jest grubo ponad 500. No więc jak znaleźć animację? Jeżeli zobaczyliśmy animację np. w misji 18 w barze Salieriego najlepiej otworzyć programem BSV 6.0. tą misję poprzez load scane2.bin a następnie Mission i Mise 18-Saliery. W nim szukamy postaci która robiła animację. Czasami odnaleźienie postaci nie jest łatwe. Aby łatwiej było znaleźć postać i aby nie mieszała się z innymi obiektami najlepiej nad listą kliknąć na specjalny guzik script. Dzięki niemu na liście zostaną tylko ludzie obiekty które mają skrypty.Teraz szukamy wspomnianej postaci gdy już ją znajdziemy klikamy na nią. Teraz szukamy w skrypcie polecenia enemy_playenim i nazwy przy nim. Niekiedy dana postać może mieć kilka animacji co dodatkowo utrudnia jeszcze sprawe ale cóż... Otwieramy nasz plik scane2.bin z postacią. Teraz odchudzamy skrypt aby zostało tylko to:

dim_act 2
findactor 0,""
findactor 1,"Tommy"

Warto usunąć broń bo gdy postać będzie miała ją w ręku będzie wykonywała animację z nią. No chyba że ją schowamy. Piszemy teraz enemy_playanim "gestzamstativ.i3d". Ocywiście w miejscu gdzie jest animacja piszemy swoją no chyba że jej nie mamy. Ważne aby po animacji napisać .i3d czyli jej format. Jeżeli chcemy aby po animacji się coś działo piszemy wait i tu czas. Mieżymy więc długość animacji i piszemy tam ilość milisekund.Jeżeli chcemy aby animacja była wykonywana w nieskończoność skrypt powinien wyglądać tak:

dim_act 2
findactor 0,""
findactor 1,"Tommy"

label 1
enemy_playanim "gestzamstativ.i3d"
goto 1

I to wszystko o animacjach. Wiem że nie opisałem ich zbyt dokładnie ale przypomne że to jest tylko poradnik a gdybyście chcieli zrobić moda trzeba też zastanowić się jak działa dana funkcja. Gdybym opisał każdą możliwość skryptu tworzenie modów nie sprawiało by przyjemności. Zresztą niemugł bym opisać każdej możliwości skryptu bo jest ich nieskończenie wiele.

Przemieszczanie się
Większość postaci w grze które spotkaliśmy przemieszczały się. My też teraz zajmiemy się przemieszczaniem. Jest to temat na który poświęciłem najwięcej czasu co nieoznacza że jest najtrudniejszy. Główna funkcja która jest wykorzystywana w grze lecz my raczej niebędziemy jej używać to enemy_move. Twórcy na każdej lokacji przygotowali specjalne punkty które mają identyfikatory. Po funkcji enemy_move wystarczy tylko wpisać numer np. 3 i postać przejdzie do punktu o numerze id. 3.Aby biegła trzeba dopisać po przecinku run. Cała funkcja wyglądała by wtedy tak:

enemy_move 3,run

Czy jednak nam modercom pozostawiono coś dzięki czemu możemy sprawić aby postać przeszła do punktu który sami określimy? Tak z pomocą przychodzi enemy_move_to_frame. Teraz musimy stworzyć specjalny punkt id. który nazywany jest ramką. Przyda nam się MafiaHack, pobieramy współrzędne ze swobodnej jazdy tam gdzie chcemy aby przeszła nasza postać.Zamykamy mafię otwieramy BSV 6.0 a następnie nasz plik scane2.bin. Klikamy insert a następnie other.Otworzy się nowe okno. W name piszemy nazwę np. point potem przeklejamy współrzędne z MafiaHack. Pamiętamy o zamianie kropek na przecinki. W size wszędzie ustawiamy 1. Rotation zostawiamy w spokoju. Na końcu zaznaczamy no script. Klikamy insert.Punkt został dodany. Teraz klikamy na naszą postać. Oprócz aktorów w skrypcie niekiedy muszą być zdefiniowane ramki. Ramką może być postać lub obiekt ale może to być też punkt który właśnie dodaliśmy.Na początku tak jak w przypadku aktorów musimy określić ilość ramek pisząc dim_frm. Następnie trzeba napisać nazwy ramek jak i ich id. Skrypt powinien wyglądać tak:

dim_act 2
dim_frm 1
findactor 0,""
findactor 1,"Tommy"
findframe 0,"point"

Tam gdzie napisałem point piszemy nazwę jaką nadaliśmy naszemu punktowi.Teraz wystarczy tylko napisać enemy_move_to_frame:

dim_act 2
dim_frm 1
findactor 0,""
findactor 1,"Tommy"
findframe 0,"point"
enemy_move_to_frame 0,0

Pierwsze zero to id. ramki. Drugie to odległość od ramki gdy postać stanie. Gdy wpisane jest zero postać stanie w ramce gdyby było 1 staneła by 1 metr od niej itd. Możemy także po przecinku napisać run co sprawi że postać pobiegnie tam.

To koniec tej części w następnej druga część przemieszczania się i napisze trochę o przemieszczaniu się autem. Zapraszam.
Przygotowanie
W tej części mojego poradnika praktycznie wszystko będzie toczyło się w samochodzie więc trzeba go najpierw dodać. Otwieramy tradycyjnie BSV 6.0 a następnie load > scane2.bin teraz otwieramy aż tyle razy modyfikowany już plik scane2.bin w freeride. Klikamy insert a następnie car. Otworzy się nowe okno. W name wpisujemy nazwę jaką chcemy aby samochód nosił. W model piszemy model auta dla przykładu "arrow00.i3d". Następnie określamy współrzędne auta. Robimy to oczywiście programem MafiaHack. Trzeba pamiętać o tym że auto do małych obiektów nie należy więc najlepiej je umieścić z dala od innych obiektów. Warto także umieścić je przy postaci. Dla przykładu na parkingu w Little Italy. Przechylenie i takie różne pozostałe bajery zostawiamy w spokoju. Klikamy insert. Teraz dla pewności najlepiej jest otworzyć grę i zobaczyć czy auto jest dodane.

Postać w aucie
Najpierw Otwieramy skrypt przy postaci którą dodaliśmy. Są dwa sposoby aby postać znalazła się w aucie. Pierwszy to taki aby do niego wsiadła a drugi to taki aby się tam teleportowała. Opisze te dwa sposoby. Zacznijmy od tego aby sama tam weszła.Posłuży nam do tego komenda enemy_move_to_car. Po niej należy wpisać idetyfikator aktora którym jest auto a potem miejsce do zajęcie. Zmieniamy nasz skrypt na taki:

dim_act 2
findactor 0,""
findactor 1,"nazwa_auta_które_dodaliśmy"

Postać ma wsiąść do auta które dodaliśmy więc po enemy_move_to_car piszemy 1 czyli identyfikator bryczki. Stawiamy przecinek po nim należy wpisać numer drzwi:

0=drzwi kierowcy
1=z przodu po prawej
2=z tyłu po lewej
3=z tyłu po prawej

W zależności od tego co wpiszemy postać pójdzie na dane miejsce. Możemy wpisać także opcjonalnie po kolejnym przecinku że postać pobiegnie do auta. Ale aby postać wsiadła musimy użyć jeszcze jednej komendy. Dotychczas sprawiliśmy aby postać podeszła pod dane drzwi i teraz trzeba tylko komendy która sprawi że postać tam wsiądzie. To będzie już łatwiejsze. Piszemy enemy_usecar a po nim to co napisaliśmy w poprzedniej komendzie bez opcji run. Dla oświecenia jeszcze wygląd skryptu:

dim_act 2
findactor 0,""
findactor 1,"nazwa_auta_które_dodaliśmy"
enemy_move_to_car 1,0
enemy_usecar 1,0

Zapisujemy nasz skrypt i sprawdzamy czy działa. Teraz została jeszcze automatyczna opcja umieszczania w aucie. Zrobimy to funkcją human_force_settocar. Ponownie zmazujemy część skryptu:

dim_act 2
findactor 0,""
findactor 1,"nazwa_auta_które_dodaliśmy"

Po funkcji którą wyżej napisałem piszemy id aktora który ma się znaleźć w aucie. W tym przypadku aktor zero bo to przy nim jest skrypt. Po liczbie zero stawiamy przecinek a następnie piszemy numer id auta czyli jeden. A po nim to już tylko numer siedzenia. POnieważ potem zajmiemy się przemieszczaniem warto posadzić ją na miejscu kierowcy czyli na miejscu zero. Skrypt powinien wyglądać tak:

dim_act 2
findactor 0,""
findactor 1,"nazwa_auta_które_dodaliśmy"
human_force_settocar 0,1,0

Zapisujemy skrypt i włączamy grę. Postać powinna już siedzieć w samochodzie.

To koniec tej części
Ze względu na to że to co mam jeszcze napisać o przemieszczaniu się autem wymaga jeszcze kilku moich testów czy wszystko działa, postanowiłem przenieść to na następną część. Więc w następnej części napisze o przemieszczaniu się autem tempem normalnym, pościgowym oraz o ściganiu gracza. A więc teraz mogę powiedzieć tylko jedno. Zapraszam.
cron