Strona główna
Witaj, nieznajomy!

Zmiana modelu gracza

Przy tworzeniu nowych misji, bądź innych skryptów czasem zachodzi potrzeba zmiany wyglądu gracza na zupełnie inny model. To prosty zabieg, który przedstawię w tym poradniku na dwa sposoby.

Użycie istniejącego modelu

Zmiana wyglądu gracza na już istniejący model w grze, bądź taki, który został podmieniony za oryginalny:

Kod:
0247: load_model #MALE01
038B: load_requested_models

09C7: change_player $PLAYER_CHAR model_to #MALE01
0249: release_model #MALE01


Użycie nowego modelu

Zmiana wyglądu gracza na zupełnie nowy model wymaga dodanie go do archiwum gta3.img. Operacje na plikach *.img są opisane w tym poradniku.

Jeżeli wgrałeś już swój model, to musisz załadować go jako model aktora specjalnego.

Kod:
023C: load_special_actor 'NAZWA_PLIKU_MODELU' as 1
038B: load_requested_models

09C7: change_player $PLAYER_CHAR model_to #SPECIAL01
0296: unload_special_actor 1


Zauważ, że zmieniamy model gracza na #SPECIAL01, który odpowiada identyfikatorowi ustawionemu w opcodzie 023C

Dla zaawansowanych

Poniższa funkcja SCM umożliwia zmianę modelu gracza na dowolny model bez wczytywania go jako aktora specjalnego. Może to być użyteczne, gdy chcemy mieć pewność, że nasz model aktora specjalnego nie zostanie nadpisany przez żadne zewnętrzne skrypty lub wątek MAIN.

Na końcu swojego skryptu dodaj dwie procedury, które będą potrzebne do przeprowadzenia tej operacji. Nazwę modelu ustaw w procedurze NAZWA_MODELU.

UWAGA! Nazwa modelu nie może przekraczać ośmiu znaków. Do nazwy modelu nie dodawaj rozszerzenia *.dff.
Kod:
:ChangePlayerModel
0A9F: 2@ = current_thread_pointer
000A: 2@ += 0x10
0A8D: 2@ = read_memory 2@ size 4 virtual_protect 0
0062: 2@ -= 1@
000A: 2@ += 0x4
for 
3@ = 0 to 7
    0A8E: 4@ = 2@ + 3@
    0A8D: 5@ = read_memory 4@ size 1 virtual_protect 0
    if 
and
        0029:   5@ >= 0x41
        002B:   0x5A >= 5@
    then
        
000A: 5@ += 0x20
        0A8C: write_memory 4@ size 1 value 5@ virtual_protect 0
    end
end
0AA5: call 0x409D10 num_params 3 pop 3 26 2@ 0
038B: load_requested_models
if 
0039:   0@ == 0
then 
008B: 2@ = $PLAYER_ACTOR
else 
008B: 2@ = $SECOND_PLAYER_ACTOR
end
0A96: 2@ = actor 2@ struct
0A8E: 3@ = 2@ + 0x4D4
0A8D: 4@ = read_memory 2@ size 4 virtual_protect 0
0A8D: 5@ = read_memory 3@ size 4 virtual_protect 0
0A8E: 6@ = 4@ + 0x20
0A8D: 6@ = read_memory 6@ size 4 virtual_protect 0
0AA6: call_method 6@ struct 2@ num_params 0 pop 0
0A8E: 7@ = 2@ + 0x22
0A8C: write_memory 7@ size 2 value 0xFFFF virtual_protect 0
0A8E: 8@ = 4@ + 0x14
0A8D: 8@ = read_memory 8@ size 4 virtual_protect 0
0AA6: call_method 8@ struct 2@ num_params 1 pop 0 0@
0A8C: write_memory 3@ size 4 value 5@ virtual_protect 0
0AB2: ret 0


:NAZWA_MODELU
0662: NOP "nazwa_modelu"
0000: NOP


Teraz wystarczy użyć utworzonych funkcji w dowolnym miejscu swojego skryptu:
Kod:
0AB1: call_scm_func @ChangePlayerModel 2 change_player $PLAYER_CHAR model_to @NAZWA_MODELU
070D: rebuild_player $PLAYER_CHAR
Dodane przez: MakG
2011-11-12 08:52:14
A wgrałeś plik tekstur dla modelu do gta3.img? Oba pliki muszą mieć taką samą nazwę:
model.dff
model.txd

Jeżeli tak zrobiłeś, to prawdopodobnie jest to wina złego modelu.
2011-11-12 01:34:32
Skorzystałem z \"Użycie nowego modelu\" . Gra się włącza ale nie widać tekstur, model jest biały.
Poprzedni 1 Następny
Created & Powered by MakG
Wszelkie prawa zastrzeżone