Czy wiesz, że... możesz podsyłać newsy, artykuły, pliki i zdjęcia?
Strona główna forum Szukaj Rejestracja
Witaj, nieznajomy!
Poprzedni 1 Następny
Postów: 36 Dołączył: 2010-10-25
#
W niektórych misjach w San Andreas jakaś tam postać była przylepiona do samochodu i podczas jazdy nie spadała. Czasami wykonywała przy tym jakąś tam funkcję, strzelanie czy animacja.

Chciałbym się dowiedzieć, który z opcodów przylepi mi zdefiniowanego aktora do pojazdu i żeby podczas ruchu tego pojazdu nie spadał z niego. Domyślam się, że któryś z opcodów mający w sobie słowo "attach" rozwiąże ten problem. Jednakże nie wiem, który bo trochę ich jest.
Postów: 628 Dołączył: 2009-01-22
#
Akurat aktor do pojazdu nie jest oznaczony jako 'attach', sam się teraz na tym naciąłem.

Kod:
0464: put_actor 99@ into_turret_on_car 68@ at_car_offset 266@ 267@ 268@ position 0 shooting_angle_limit 0.0 with_weapon 0

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 36 Dołączył: 2010-10-25
#
Ok dzięki, a żeby mu jeszcze przypisać jakąś tam animacje to wystarczy, że użyje po tym standardowego opcoda na wykonanie animacji?
Postów: 1004 Dołączył: 2009-01-20
#
Dokładnie(było to omawiane w poradniku pod tytułem podstawy).
Postów: 36 Dołączył: 2010-10-25
#
Mam inne pytanie odnośnie funkcji aktorów, a raczej problem.

Stworzyłem pojazd z kierowcą oraz przyczepiłem gracza do owego pojazdu z bronią by strzelał do wyznaczonego celu. Celem jest drugi pojazd, który jedzie za nami. Wszystko odbywa się jednak na takim przerywniku (cutscene). Pojazdy dobrze jadą, ale gracz nie chce strzelać do pojazdu, tak samo bot na drugim pojeździe olewa tą funkcję.

Kod:

00AB: put_car 14@ at -1920.041 -389.66 5.819
0175: set_car 14@ z_angle_to 360.0
00AB: put_car 24@ at -1926.887 -394.553 5.819
0175: set_car 24@ Z_angle_to 360.0
0464: put_actor 28@ into_turret_on_car 24@ at_car_offset 0.116 -0.422 1.66 position 4 shooting_angle_limit 0 with_weapon 0
01B2: give_actor 28@ weapon 31 ammo 9999
05E2: AS_actor 28@ kill_actor $PLAYER_ACTOR
0350: set_actor 28@ maintain_position_when_attacked 1 
0464: put_actor $PLAYER_ACTOR into_turret_on_car 14@ at_car_offset -0.592 -4.751 1.685 position 2 shooting_angle_limit 360.0 with_weapon 31
01B2: give_actor $PLAYER_ACTOR weapon 31 ammo 9999
05E2: AS_actor $PLAYER_ACTOR kill_actor 28@
0350: set_actor $PLAYER_ACTOR maintain_position_when_attacked 1


Postów: 628 Dołączył: 2009-01-22
#
O ile dobrze pamiętam, 05E2 działa też tak, że aktor podbiega do atakowanego.
A takiej akcji nie dasz graczowi, dopóki nie zamrozisz kontroli nad nim. Pamiętam, że np. CJ nie chciałstrzelać mi z Drive-By nawet po zamrożeniu kontroli nad nim opcodem 01B4 (lub Player.CanMove, jak kto woli).

___________________
Moderator
http://i.imgur.com/Abvv63y
Śledź mój kanał Twitter by być na bieżąco ze wszystkimi aktualizacjami moich modów!
Postów: 1004 Dołączył: 2009-01-20
#
Żeby w ogóle aktor w samochodzie strzelał do drugiego samochodu(wykonywał Drive-By) to musisz użyć tego opcoda

Kod:
0713: actor 2@ driveby_actor -1 car 1@ point 0.0 0.0 0.0 radius -1 8 1 firing_rate 100


Gdzie co oznaczają poszczególne części opcodu gdzieś już co z grubsza tłumaczyłem to sobie poszukaj.

Mi również nie udało się rozwiązać tego jak zrobić żeby grać strzelał do drugiego samochodu. Choć teoretycznie powinien ten opcod działać na graca to niestety nie ma żadnej reakcji. No chyba że ja coś źle robię. Po za tym postać nie może wykonywać Drive-By jeżeli prowadzi samochód(chyba że samochód stoi to w tedy może). Ale np. zamiast tego możesz dać do tego samochodu co prowadzi grać drugiego gościa i nakazać mu strzelać do tego goniącego samochodu.

Po niżej daje taki mały przykład jak ten opcod działa w praktyce. Akcja zaczyna się po wejściu do czerwonego kółka. Cała akcja toczy się podczas cutscenki.


Kod:
//-------------MAIN---------------
0000: NOP 

:sprawdzacz
wait 0 
if 
   Player.Defined($PLAYER_CHAR)
jf @sprawdzacz 
01F0: set_max_wanted_level_to 0 

Model.Load(#infernus)
Model.Load(#sultan)

Model.Load(101)
Model.Load(109)
Model.Load(113)

Model.Load(28)
038B: load_requested_models 


00C0: set_current_time_hours_to 23 minutes_to 20 
01EB: set_traffic_density_multiplier_to 0.0 
03DE: set_pedestrians_density_multiplier_to 0.0
select_interior 0
0860: link_actor $PLAYER_ACTOR to_interior 0 
Actor.PutAt($PLAYER_ACTOR, 2358.9995, -1705.7416, 13.5869)
Actor.Angle($PLAYER_ACTOR) = 180.0

02A7: 6@ = create_icon_marker_and_sphere 23 at 2367.1191 -1725.337 13.5469 radius 3.0
:petla1
wait 0
if
00ED:   actor $PLAYER_ACTOR 0 near_point 2367.1191 -1725.337 radius 1.0 1.0 on_foot 
jf @petla1
fade 0 1500
wait 1500
Marker.Disable(6@)
0395: clear_area 1 at 2381.0774 -1742.3622 13.5469 radius 100.0 

0@ = Car.Create(#sultan, 2378.9614, -1729.7559, 13.3828)
Car.Angle(0@) = 90.0
1@ = Car.Create(#infernus, 2400.8169, -1729.6747, 13.3828)
Car.Angle(1@) = 90.0
02AC: set_car 0@ immunities BP 1 FP 1 EP 1 CP 1 MP 1 

009A: 2@ = create_actor_pedtype 20 model 113 at 2378.6621 -1728.3048 13.3828 //pasazer sultana
009A: 3@ = create_actor_pedtype 20 model 101 at 2400.7185 -1731.4514 13.3828  //kierowca infernusa 
009A: 4@ = create_actor_pedtype 20 model 109 at 2400.647 -1728.0653 13.3828  //pasazer infernusa

01B2: give_actor 2@ weapon 28 ammo 9999   
01B2: give_actor 4@ weapon 28 ammo 9999   

0430: put_actor 2@ into_car 0@ passenger_seat 0 //pasazer sultana
072A: put_actor $PLAYER_ACTOR into_car 0@ driverseat //kierowca sultana, cj
072A: put_actor 3@ into_car 1@ driverseat //kierowca infernusa 
0430: put_actor 4@ into_car 1@ passenger_seat 0 //pasazer infernusa

:petla2
wait 0
if
Actor.InCar($PLAYER_ACTOR, 0@)
jf @petla2
0713: actor 2@ driveby_actor -1 car 1@ point 0.0 0.0 0.0 radius -1 8 1 firing_rate 100
0713: actor 4@ driveby_actor -1 car 0@ point 0.0 0.0 0.0 radius -1 8 1 firing_rate 100
Car.DriveTo(0@, 2060.3848 -1916.0336 13.5469)
Car.SetMaxSpeed(0@, 30.0)
00AE: set_car 0@ traffic_behaviour_to 3
07F8: car 1@ follow_car 0@ radius 7.5 
Car.SetMaxSpeed(1@, 50.0)
02A3: enable_widescreen 1

wait 1500
fade 1 1500

:petla3
wait 0
if
00EE:   actor $PLAYER_ACTOR 0 near_point 2067.8586 -1913.8677  radius 4.0 4.0 in_car 
jf @petla3

fade 0 1500
wait 1500
0395: clear_area 1 at 2381.0774 -1742.3622 13.5469 radius 100.0 
02A3: enable_widescreen 0
02EB: restore_camera_with_jumpcut 
wait 1500
fade 1 1500
//itd. 

0A93: end_custom_thread
Postów: 36 Dołączył: 2010-10-25
#
No niestety ni też to nie chce działać, ale mniejsza z tym.

Jak zrobić by aktor na przykład 1@ atakował dwóch przeciwników na raz 2@ 3@ ? Próbowałem ze zwykłym kill_actor, ale ustawienie tego jeden po drugim prowadzi to tego, że atakuje tylko jednego przeciwnika.
Postów: 248 Dołączył: 2009-06-27
#
Ja znam 2 sposoby. Pierwszy polega na tym, że 1@ najpierw atakuje 2@, a gdy go zabije, wtedy zabija 3@:
Kod:
05E2: AS_actor 1@ kill_actor 2@
:p1
wait 0
if
Actor.Dead(2@)
jf @p1
05E2: AS_actor 1@ kill_actor 3@


Bardziej skomplikowany polega mniej więcej na czymś takim:
Załóżmy, że Actor 1@ jest policjantem, a więc własność 'pedtype' = 6. Aktorzy 2@ i 3@ są kryminalistami, czyli ich 'pedtype' = 20.
Ustawiamy własności "lubienia":
Kod:
077A: set_actor 1@ acquaintance 4 to_actors_pedtype 20 // see ped.dat

Aktor 1@ nie lubi ludzi z własnością 'pedtype' = 20
Kod:
077A: set_actor 2@ acquaintance 4 to_actors_pedtype 6 // see ped.dat
077A: set_actor 3@ acquaintance 4 to_actors_pedtype 6

Aktorzy 2@ i 3@ nie lubią .. z 'pedtype' = 6, czyli atakują wszystkich policjantów,
a 1@ atakuje wszystkich kryminalistów.
Warunek jest taki, że aktor nie stoi plecami do "nielubianego" i spełniony jest warunek:
Kod:
8364: NOT  actor 1@ spotted_actor 2@


//edit: wartość 4 przy acquaintance oznacza, że dany aktor zacznie próbować zabijać, jak tylko zobaczy swojego wroga.
3 - jest niewielka tolerancja wroga
2 - zabija tylko jeśli wróg strzela w jakimkolwiek kierunku
1 - respektuje aktora, nie zabija, nawet jeśli zostanie postrzelony

___________________
http://www.gta-mods.pl/public/images/userbar
Poprzedni 1 Następny
Zaloguj się lub zarejestruj się, żeby pisać na forum.
Created & Powered by MakG