Strona główna
Witaj, nieznajomy!

External Scripts

External Scripts, potocznie mówiąc skrypty są ważnymi elementami tworzenia w SCM. Działają one tak samo w każdej części kodu. Przykładowo mamy dwie misje: Misja #1 i Misja #2 oraz jeden skrypt: Skrypt #1. W skrypcie możemy umieścić co chcemy, nie ma żadnych ograniczeń, byle żeby była poprawna składnia. Jeśli skrypt uruchomimy już na początku, będzie on tak samo funkcjonował wszędzie: w Misji #1 i #2 oraz poza misjami. W oryginalnym pliku main.scm występuje 78, które zawierają między innymi: możliwość kupienia hotdoga, możliwość robienia zdjęć czy też ruch pociągów. Wszystkie te możliwości mamy dostępne podczas gry.
To jest chyba najprostsze zobrazowanie działania "external scriptów". Można je też porównać do skryptów CLEO, których działanie także trwa przez całą grę. No dobra ale koniec tej teorii, przejdźmy do praktyki.

Kod:
DEFINE OBJECTS 0
DEFINE MISSIONS 1
DEFINE MISSION 0 AT @MISJA
DEFINE EXTERNAL_SCRIPTS 1
DEFINE SCRIPT SKRYPCIK AT @SKRYPT
DEFINE UNKNOWN_EMPTY_SEGMENT 0
DEFINE UNKNOWN_THREADS_MEMORY 0


Oto główne definicje MAIN, które znajdują się na samym początku pliku SCM. Pozwoliłem sobie wkleić wszystkie, żeby później nie było krzyków "Gdzie mam to wkleić?!". Definicją skryptów jest pogrubiony fragment. Najpierw określamy ilość skryptów, w tym przypadku jeden, a następnie definijujemy skrypty. W tym przypadku skrypt nosi nazwę SKRYPT, a jego kod znajduje się w procedurze SKRYPT.
Ominę tutaj resztę sekcji "MAIN", gdyż umieszczanie jej w poradnikach po raz n-ty nie ma najmniejszego sensu.

Kod:
0884: 'SKRYPT' = init_external_script_named_handle 0 (SKRYPT)
08A9: load_external_script 0 (SKRYPT)
:MAIN1
wait 
10
if
08AB: external_script 0 (SKRYPT) loaded
jf 
@MAIN1
0913: run_external_script 0 (SKRYPT)



Powyższy kod trzeba umieścić w sekcji MAIN. Na początku zainicjowaliśmy skrypt "SKRYPCIK" pod taką samą nazwą i identyfikatorze 0. Jest to wymagana operacja, jesli będziemy chcieli później coś robić z tym skryptem. Później ładujemy skrypt o identyfikatorze 0 i nazwie "SKRYPCIK". Tworzymy małą pętlę, która sprawdza czy "SKRYPCIK" został załadowany. Jeśli tak to przechodzimy dalej, gdzie uruchamiamy nasz skrypt. To tyle. Nasz skrypt jest już uruchomiony.

Pozostała jeszcze tylko jedna rzecz. Musimy stworzyć kod skryptu, w przeciwnym razie skrypt będzie pusty i może nawet spowodować błąd krytyczny.

Kod:
:SKRYPT
thread 
'SKRYPT'


Procedurę tworzymy tym samym sposobem co misje. Procedurze nadaliśmy nazwę "SKRYPT", tak jak zdefiniowaliśmy na początku.

Dalej musicie się już wykazać sami ale dam tutaj prosty przykład... Stworzymy samochód niedaleko domu CJa, przy którym będzie stał sprzedawca. Gdy się do niego zbliżymy, zapyta nas czy chcemy kupić jego autko. Będą dwie możliwości: TAK lub NIE, które będą przyporządkowane klawiszom: Y i N.

Kod:
0247: load_model #BUFFALO
0247: load_model 7
038B: load_requested_models

:CHECK_MODELS
wait 
10
if
Model.Available(#BUFFALO)
Model.Available(7)
jf 
@CHECK_MODELS

00A5: $SAMOCHOD = create_car #BUFFALO at 2430.8416 -1643.7687 13.1849
009A: $SPRZEDAWCA = create_actor_pedtype 4 model 7 at 2432.2192 -1642.4783 13.4871

:check1
wait 
10
if
00ED: actor $PLAYER_ACTOR 0 near_point 2432.2192 -1642.4783 13.4871 radius 2.0 2.0 2.0 on_foot
jf 
@check1

0639: AS_actor $SPRZEDAWCA rotate_to_actor $PLAYER_ACTOR
054C: use_GXT_table 'SKRYPCIK'
00BC: show_text_highpriority GXT 'TXT1' time 4000 flag 1

:check2
wait 
10
if
00E1: player 0 pressed_key 11
jf 
@check3

05D3: AS_actor $SPRZEDAWCA goto_point 2394.8203 -1667.142 13.5469 mode 4 -1 ms
jump 
@END

:check3
wait 
10
if
00E1: player 0 pressed_key 10
jf 
@check2

:END
end_thread


Opiszę to w olbrzymim skrócie, gdyż wszystkie powyższe funkcje powinny być Wam już znane z poprzednich poradników. Ładujemy modele i sprawdzamy czy zostały już załadowane. Tworzymy samochód i sprzedawcę. Sprawdzamy czy gracz jest obok sprzedawcy, jeśli tak to sprzedawca obraca się do gracza i wyświetlamy tekst z pliku GXT. Później sprawdzamy czy gracz wcisną klawisz Y, jeśli tak to sprzedawca odchodzi od samochodu i kończymy skrypt. Jeśli nie to przeskakujemy do drugiej pętli, gdzie sprawdzamy czy gracz wcisną klawisz N. Jeśli nie to przeskakujemy do poprzedniej pętli, jeśli tak to kończymy skrypt.

Dodam jeszcze że lista numerów ID klawiszy dostępna jest w pomocy programu Sanny Builder.
Dodane przez: MakG
Posting comments to this article is disabled.
Created & Powered by MakG
Wszelkie prawa zastrzeżone